these files were only to be added in vendor branch

This commit is contained in:
tg 2004-03-21 00:38:01 +00:00
parent d8e4d937ba
commit dcd49c4606
40 changed files with 0 additions and 9629 deletions

View File

@ -1,330 +0,0 @@
#
# @configure_input@
#
srcdir = @srcdir@
VPATH = @srcdir@
CC = @CC@
CPP = @CPP@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
DEFS = @DEFS@
LIBS = @LIBS@
CPPFLAGS = @CPPFLAGS@
CFLAGS = @CFLAGS@
LDSTATIC = @LDSTATIC@
LDFLAGS = @LDFLAGS@
SHELL_PROG = @SHELL_PROG@
prefix = @prefix@
exec_prefix = @exec_prefix@
transform=@program_transform_name@
bindir = $(exec_prefix)/bin
mandir = $(prefix)/man/man$(manext)
manext = 1
# Suffix for executables: nothing for unix, .exe for os/2.
exe_suffix=@ac_exe_suffix@
SHELL = /bin/sh
SRCS = alloc.c c_ksh.c c_sh.c c_test.c c_ulimit.c edit.c emacs.c \
eval.c exec.c expr.c history.c io.c jobs.c lex.c mail.c \
main.c misc.c missing.c path.c shf.c sigact.c syn.c table.c trap.c \
tree.c tty.c var.c version.c vi.c
OBJS = alloc.o c_ksh.o c_sh.o c_test.o c_ulimit.o edit.o emacs.o \
eval.o exec.o expr.o history.o io.o jobs.o lex.o mail.o \
main.o misc.o missing.o path.o shf.o sigact.o syn.o table.o trap.o \
tree.o tty.o var.o version.o vi.o
HDRS = c_test.h edit.h expand.h ksh_dir.h ksh_limval.h ksh_stat.h ksh_time.h \
ksh_times.h ksh_wait.h lex.h proto.h sh.h shf.h sigact.h \
table.h tree.h tty.h
DISTFILES = $(SRCS) $(HDRS) ksh.Man Makefile.in configure.in \
config.h.in conf-end.h acconfig.h aclocal.m4 emacs-gen.sh \
mkinstalldirs install-sh new-version.sh siglist.in siglist.sh mkman \
check-fd.c check-pgrp.c check-sigs.c \
README NEWS CONTRIBUTORS LEGAL PROJECTS INSTALL NOTES BUG-REPORTS \
IAFA-PACKAGE ChangeLog ChangeLog.0 configure stamp-h.in
# ETCFILES also disted, but handled differently
ETCFILES = etc/ksh.kshrc etc/profile etc/sys_config.sh
# MISCFILES also disted, but handled differently
MISCFILES = misc/ChangeLog.sjg misc/Changes.jrm misc/Changes.mlj \
misc/Changes.pc misc/README.sjg misc/ReadMe.eg misc/ReadMe.emacs \
misc/ReadMe.jrm misc/Bugs
# TESTFILES also disted, but handled differently
TESTFILES = tests/README tests/th tests/th-sh tests/alias.t tests/arith.t \
tests/bksl-nl.t tests/brkcont.t tests/cdhist.t tests/eglob.t \
tests/glob.t tests/heredoc.t tests/history.t tests/ifs.t \
tests/integer.t tests/lineno.t tests/read.t tests/regress.t \
tests/syntax.t tests/unclass1.t tests/unclass2.t \
tests/version.t
# OS2FILES also disted, but handled differently
OS2FILES = os2/Makefile os2/config.h os2/config.status os2/configure.cmd \
os2/emacs.out os2/kshrc.ksh os2/make.sed os2/os2.c os2/os2siglist.out \
os2/README.os2 os2/NEWS.os2 os2/os2bugs os2/th.cmd os2/config.cache
all: $(SHELL_PROG)$(exe_suffix) $(SHELL_PROG).1
# This shouldn't be first - some makes don't know about PRECIOUS and assume it
# is the default target.
.PRECIOUS: configure config.h.in Makefile config.status
.c.o:
$(CC) -c $(CPPFLAGS) $(DEFS) -I. -I$(srcdir) $(CFLAGS) $<
install: installdirs all
$(INSTALL_PROGRAM) $(SHELL_PROG)$(exe_suffix) $(bindir)/`echo $(SHELL_PROG)|sed '$(transform)'`$(exe_suffix)
-$(INSTALL_DATA) $(SHELL_PROG).1 $(mandir)/`echo $(SHELL_PROG)|sed '$(transform)'`.$(manext)
-@prog=$(bindir)/`echo $(SHELL_PROG)|sed '$(transform)'`$(exe_suffix);\
test -f /etc/shells \
&& (grep "^$$prog\$$" /etc/shells > /dev/null \
|| echo \
"NOTE: /etc/shells does not contain $$prog \
you should add it if you want to set your shell to $(SHELL_PROG)")
installdirs:
$(srcdir)/mkinstalldirs $(bindir) $(mandir)
uninstall:
rm -f $(bindir)/`echo $(SHELL_PROG)|sed '$(transform)'`$(exe_suffix)
rm -f $(mandir)/`echo $(SHELL_PROG)|sed '$(transform)'`.$(manext)
check test:
$(srcdir)/tests/th-sh $(srcdir)/tests/th -s $(srcdir)/tests -p ./$(SHELL_PROG)$(exe_suffix) -C pdksh,sh,ksh,posix,posix-upu $(TESTARGS)
$(SHELL_PROG)$(exe_suffix): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
# two steps to prevent the creation of a bogus tmpksh.1
$(SHELL_PROG).1: $(srcdir)/ksh.Man
$(srcdir)/mkman $(SHELL_PROG) $(srcdir)/ksh.Man > tmpksh.1
mv tmpksh.1 $(SHELL_PROG).1
info:
@echo "No info (yet)"
dvi:
$(srcdir)/configure: configure.in aclocal.m4
cd $(srcdir) && autoconf
$(srcdir)/config.h.in: stamp-h.in
$(srcdir)/stamp-h.in: configure.in aclocal.m4 acconfig.h
cd $(srcdir) && autoheader
date > $(srcdir)/stamp-h.in
config.h: stamp-h
stamp-h: config.h.in config.status
CONFIG_FILES="" CONFIG_HEADERS=config.h ./config.status
date > stamp-h
Makefile: Makefile.in config.status
CONFIG_FILES=Makefile CONFIG_HEADERS= ./config.status
config.status: configure
LDSTATIC="$(LDSTATIC)" ./config.status --recheck
# two steps to prevent the creation of a bogus siglist.out
siglist.out: config.h sh.h siglist.in siglist.sh
$(srcdir)/siglist.sh "$(CPP) $(CPPFLAGS) $(DEFS) -I. -I$(srcdir)" < $(srcdir)/siglist.in > tmpsiglist.out
mv tmpsiglist.out siglist.out
# two steps to prevent the creation of a bogus emacs.out
emacs.out: emacs.c
$(srcdir)/emacs-gen.sh $(srcdir)/emacs.c > tmpemacs.out
mv tmpemacs.out emacs.out
debugtools: check-fd$(exe_suffix) check-sigs$(exe_suffix) \
check-pgrp$(exe_suffix)
check-fd.o check-pgrp.o check-sigs.o: config.h
check-fd$(exe_suffix): check-fd.o
$(CC) $(LDFLAGS) -o $@ check-fd.o $(LIBS)
check-pgrp$(exe_suffix): check-pgrp.o
$(CC) $(LDFLAGS) -o $@ check-pgrp.o $(LIBS)
check-sigs$(exe_suffix): check-sigs.o
$(CC) $(LDFLAGS) -o $@ check-sigs.o $(LIBS)
TAGS: $(SRCS) $(HDRS)
cd $(srcdir) && etags $(SRCS) $(HDRS)
tags: $(SRCS) $(HDRS)
cd $(srcdir) && ctags -wt $(SRCS) $(HDRS)
clean:
rm -f ksh$(exe_suffix) sh$(exe_suffix) ksh.1 sh.1 $(OBJS) siglist.out \
emacs.out core a.out mon.out gmon.out \
version.c.bak Makefile.bak Makefile.tmp check-fd$(exe_suffix) \
check-pgrp$(exe_suffix) check-sigs$(exe_suffix)
mostlyclean: clean
distclean: clean
rm -f Makefile config.h stamp-h config.status config.log config.cache \
tags TAGS *~
realclean: distclean
dist: $(DISTFILES) $(ETCFILES) $(MISCFILES) $(TESTFILES) $(OS2FILES)
cd $(srcdir) && \
{ \
./new-version.sh; \
FNAME=pdksh-`sed -e '/"@(.)/!d' \
-e 's/[^0-9]*\([0-9.]*\).*/\1/' -e q version.c`; \
if test `echo $$FNAME|tr . ' '|wc -w|sed 's/[ ]*//g'` -gt 3; \
then \
FNAME=`echo $$FNAME | sed 's/pdksh-/pdksh-unstable-/'`; \
fi; \
echo Creating version $$FNAME; \
rm -rf $$FNAME; \
mkdir $$FNAME $$FNAME/etc $$FNAME/misc $$FNAME/tests $$FNAME/os2; \
cp -p $(DISTFILES) $$FNAME; \
cp -p $(ETCFILES) $$FNAME/etc; \
cp -p $(MISCFILES) $$FNAME/misc; \
cp -p $(TESTFILES) $$FNAME/tests; \
cp -p $(OS2FILES) $$FNAME/os2; \
./emacs-gen.sh emacs.c > os2/emacs.out; \
test -x ./Dist-fixup && ./Dist-fixup $$FNAME; \
sed -f os2/make.sed < $$FNAME/Makefile.in > $$FNAME/os2/Makefile; \
chmod -R a+rX,u+w,og-w $$FNAME; \
tar chzf $$FNAME.tar.gz $$FNAME; \
find $$FNAME -print | xargs pathchk -p; \
}
depend: $(SRCS)
sed -n '1,/[ ]PUT ANYTHING BELOW THIS LINE/p' < Makefile > Makefile.tmp
srcs=; for i in $(SRCS) ; do srcs="$$srcs $(srcdir)/$$i"; done; \
$(CC) -M $(DEFS) -I. -I$(srcdir) $(CFLAGS) $$srcs | \
sed -e 's?[ ]/[^ ]*??g' -e 's?[ ]./? ?g' \
-e 's?[ ]$(srcdir)//*? ?g' -e 's?^$(srcdir)//*??' \
-e '/^[ ]*\\[ ]*$$/d' -e '/^[^:]*:[ ]*$$/d' \
-e 's/^\([ ]*\)$$/ sh.h/' \
>> Makefile.tmp
mv Makefile.tmp Makefile
@echo 'Make depend done (stopping make)'; false
# DON'T PUT ANYTHING BELOW THIS LINE (and don't delete it - its for make depend)
alloc.o: alloc.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
c_ksh.o: c_ksh.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h \
sh.h
c_sh.o: c_sh.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_time.h \
ksh_times.h \
sh.h
c_test.o: c_test.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h c_test.h
c_ulimit.o: c_ulimit.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_time.h \
sh.h
edit.o: edit.c config.h conf-end.h sh.h \
shf.h table.h tree.h expand.h lex.h \
proto.h tty.h \
edit.h \
ksh_stat.h
emacs.o: emacs.c config.h conf-end.h sh.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_dir.h \
edit.h emacs.out
eval.o: eval.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
ksh_dir.h \
ksh_stat.h
exec.o: exec.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h c_test.h \
ksh_stat.h
expr.o: expr.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
sh.h
history.o: history.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h
io.o: io.c \
sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h
jobs.o: jobs.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_wait.h \
ksh_times.h ksh_time.h \
tty.h \
sh.h
lex.o: lex.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
sh.h
mail.o: mail.c config.h conf-end.h sh.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_time.h \
sh.h
main.o: main.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_time.h \
sh.h
misc.o: misc.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
sh.h
missing.o: missing.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_dir.h \
ksh_time.h \
ksh_times.h \
sh.h
path.o: path.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h
shf.o: shf.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_limval.h \
sh.h
sigact.o: sigact.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
syn.o: syn.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h c_test.h
table.o: table.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
trap.o: trap.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h siglist.out
tree.o: tree.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
tty.o: tty.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h tty.h \
sh.h
var.o: var.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_time.h \
ksh_limval.h \
ksh_stat.h \
sh.h
version.o: version.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
vi.o: vi.c config.h conf-end.h sh.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
ksh_stat.h edit.h

View File

@ -1,185 +0,0 @@
/*
* This file, acconfig.h, which is a part of pdksh (the public domain ksh),
* is placed in the public domain. It comes with no licence, warranty
* or guarantee of any kind (i.e., at your own risk).
*/
#ifndef CONFIG_H
#define CONFIG_H
@TOP@
/* Define if your kernal doesn't handle scripts starting with #! */
#undef SHARPBANG
/* Define if dup2() preserves the close-on-exec flag (ultrix does this) */
#undef DUP2_BROKEN
/* Define as the return value of signal handlers (0 or ). */
#undef RETSIGVAL
/* Define if you have posix signal routines (sigaction(), et. al.) */
#undef POSIX_SIGNALS
/* Define if you have BSD4.2 signal routines (sigsetmask(), et. al.) */
#undef BSD42_SIGNALS
/* Define if you have BSD4.1 signal routines (sigset(), et. al.) */
#undef BSD41_SIGNALS
/* Define if you have v7 signal routines (signal(), signal reset on delivery) */
#undef V7_SIGNALS
/* Define to use the fake posix signal routines (sigact.[ch]) */
#undef USE_FAKE_SIGACT
/* Define if signals don't interrupt read() */
#undef SIGNALS_DONT_INTERRUPT
/* Define if you have bsd versions of the setpgrp() and getpgrp() routines */
#undef BSD_PGRP
/* Define if you have POSIX versions of the setpgid() and getpgrp() routines */
#undef POSIX_PGRP
/* Define if you have sysV versions of the setpgrp() and getpgrp() routines */
#undef SYSV_PGRP
/* Define if you don't have setpgrp(), setpgid() or getpgrp() routines */
#undef NO_PGRP
/* Define to char if your compiler doesn't like the void keyword */
#undef void
/* Define to nothing if compiler doesn't like the volatile keyword */
#undef volatile
/* Define if C compiler groks function prototypes */
#undef HAVE_PROTOTYPES
/* Define if C compiler groks __attribute__((...)) (const, noreturn, format) */
#undef HAVE_GCC_FUNC_ATTR
/* Define to 32-bit signed integer type */
#undef INT32
/* Define to 32-bit signed integer type if <sys/types.h> doesn't define */
#undef clock_t
/* Define to the type of struct rlimit fields if the rlim_t type is missing */
#undef rlim_t
/* Define if time() is declared in <time.h> */
#undef TIME_DECLARED
/* Define to `unsigned' if <signal.h> doesn't define */
#undef sigset_t
/* Define if sys_errlist[] and sys_nerr are in the C library */
#undef HAVE_SYS_ERRLIST
/* Define if sys_errlist[] and sys_nerr are defined in <errno.h> */
#undef SYS_ERRLIST_DECLARED
/* Define if sys_siglist[] is in the C library */
#undef HAVE_SYS_SIGLIST
/* Define if you have a sane <termios.h> header file */
#undef HAVE_TERMIOS_H
/* Define if you can include <sys/ioctl.h> with <termios.h> */
#undef SYS_IOCTL_WITH_TERMIOS
/* Define if you can include <sys/ioctl.h> with <termio.h> */
#undef SYS_IOCTL_WITH_TERMIO
/* Define if you have a memset() function in your C library */
#undef HAVE_MEMSET
/* Define if you have a memmove() function in your C library */
#undef HAVE_MEMMOVE
/* Define if you have a bcopy() function in your C library */
#undef HAVE_BCOPY
/* Define if you have a lstat() function in your C library */
#undef HAVE_LSTAT
/* Define if you have a sane <termio.h> header file */
#undef HAVE_TERMIO_H
/* Define if you don't have times() or if it always returns 0 */
#undef TIMES_BROKEN
/* Define if opendir() will open non-directory files */
#undef OPENDIR_DOES_NONDIR
/* Define if the pgrp of setpgrp() can't be the pid of a zombie process */
#undef NEED_PGRP_SYNC
/* Define if you arg running SCO unix */
#undef OS_SCO
/* Define if you arg running ISC unix */
#undef OS_ISC
/* Define if you arg running OS2 with the EMX library */
#undef OS2
/* Define if you have a POSIX.1 compatiable <sys/wait.h> */
#undef POSIX_SYS_WAIT
/* Define if your OS maps references to /dev/fd/n to file descriptor n */
#undef HAVE_DEV_FD
/* Define if your C library's getwd/getcwd function dumps core in unreadable
* directories. */
#undef HPUX_GETWD_BUG
/* ------- ------ ----- ---- --- -- - - -- --- ---- ----- ------ ------- */
/* Defines from here on down are enable/disable options to configure */
/* Default PATH (see comments in configure.in for more details) */
#undef DEFAULT_PATH
/* Include ksh features? (see comments in configure.in for more details) */
#undef KSH
/* Include emacs editing? (see comments in configure.in for more details) */
#undef EMACS
/* Include vi editing? (see comments in configure.in for more details) */
#undef VI
/* Include job control? (see comments in configure.in for more details) */
#undef JOBS
/* Include brace-expansion? (see comments in configure.in for more details) */
#undef BRACE_EXPAND
/* Include any history? (see comments in configure.in for more details) */
#undef HISTORY
/* Include complex history? (see comments in configure.in for more details) */
#undef COMPLEX_HISTORY
/* Strict POSIX behaviour? (see comments in configure.in for more details) */
#undef POSIXLY_CORRECT
/* Specify default $ENV? (see comments in configure.in for more details) */
#undef DEFAULT_ENV
/* Include shl(1) support? (see comments in configure.in for more details) */
#undef SWTCH
/* Include game-of-life? (see comments in configure.in for more details) */
#undef SILLY
@BOTTOM@
/* Need to use a separate file to keep the configure script from commenting
* out the undefs....
*/
#include "conf-end.h"
#endif /* CONFIG_H */

View File

@ -1,89 +0,0 @@
/* A simple program to check which file descriptors are open and
* print some info about them.
*/
#include "config.h"
#include <stdio.h>
#include <sys/types.h>
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif /* HAVE_STDLIB_H */
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif /* HAVE_UNISTD_H */
#ifdef HAVE_FCNTL_H
# include <fcntl.h>
#else /* HAVE_FCNTL_H */
# include <sys/file.h>
#endif /* HAVE_FCNTL_H */
#include "ksh_stat.h"
int usage();
char *progname = "check-fd";
#define MAXFD 256 /* a somewhat arbitrary number */
int
main(argc, argv)
int argc;
char **argv;
{
extern int optind;
int opt;
int do_close = 0;
struct stat statb;
int i;
if (argc > 0 && argv[0] && *argv[0])
progname = argv[0];
while ((opt = getopt(argc, argv, "c")) != EOF) {
switch (opt) {
case 'c':
do_close = 1;
break;
default:
usage(1);
}
}
if (optind != argc) {
fprintf(stderr, "%s: too many arguments\n", progname);
usage(0);
}
if (do_close) {
for (i = 0; i < MAXFD; i++)
if (i == 1)
printf("(can't check 1)\n");
else if (close(i) >= 0)
printf("%d was open\n", i);
} else {
for (i = 0; i < MAXFD; i++)
if (fstat(i, &statb) == 0)
printf(
"%d is open (dev/inode %hd/%ld, flags 0x%x)\n",
i, statb.st_dev, statb.st_ino,
fcntl(i, F_GETFL, 0));
}
return 0;
}
int
usage(verbose)
int verbose;
{
fprintf(stderr, "Usage: %s [-?c]\n", progname);
if (verbose)
fprintf(stderr, "\
-c use close(2) instead of fstat(2) to check for open fds\n\
(prints dev, inode and fcntl(F_GETFL) flags)\n\
");
exit(1);
return 0;
}

View File

@ -1,101 +0,0 @@
/* A simple program to print information about process groups */
#include "config.h"
#include <stdio.h>
#include <sys/types.h>
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif /* HAVE_STDLIB_H */
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif /* HAVE_UNISTD_H */
#ifdef HAVE_FCNTL_H
# include <fcntl.h>
#else /* HAVE_FCNTL_H */
# include <sys/file.h>
#endif /* HAVE_FCNTL_H */
#ifdef BSD_PGRP
# include <sys/ioctl.h>
int
tcgetpgrp(fd)
int fd;
{
int r, grp;
if ((r = ioctl(fd, TIOCGPGRP, &grp)) < 0)
return r;
return grp;
}
# define getPGRP() getpgrp(0)
#else /* BSD_PGRP */
# define getPGRP() getpgrp()
#endif /* BSD_PGRP */
int usage();
char *progname = "check-pgrp";
int
main(argc, argv)
int argc;
char **argv;
{
extern int optind;
extern char *optarg;
int opt;
int ttyfd = 0;
int my_pgrp, my_pid, my_ppid, tty_pgrp;
char *tty_name;
char *e;
if (argc > 0 && argv[0] && *argv[0])
progname = argv[0];
while ((opt = getopt(argc, argv, "u:")) != EOF) {
switch (opt) {
case 'u':
ttyfd = atoi(optarg);
break;
default:
usage(1);
}
}
if (optind != argc) {
fprintf(stderr, "%s: too many arguments\n", progname);
usage(0);
}
my_pid = getpid();
my_ppid = getppid();
my_pgrp = getPGRP();
tty_pgrp = tcgetpgrp(ttyfd);
tty_name = ttyname(ttyfd);
printf("in %s pgrp\ntty %s (%s)\npid %d, ppid %d, pgrp %d, tty_pgrp %d\n",
my_pgrp == my_pid ? "my own"
: (my_pgrp == my_ppid ? "parent's" : "unknown"),
tty_name ? tty_name : "(none)",
tty_pgrp == my_pgrp ? "mine"
: (tty_pgrp == my_ppid ? "parent's" : "unknown"),
my_pid, my_ppid, my_pgrp, tty_pgrp);
return 0;
}
int
usage(verbose)
int verbose;
{
fprintf(stderr, "Usage: %s [-?] [-u fd]\n", progname);
if (verbose)
fprintf(stderr, "\
-u fd use fd as tty fd (default is 0)\n\
");
exit(1);
return 0;
}

View File

@ -1,255 +0,0 @@
/* A simple program to print information about signal handlers */
#include "config.h"
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <errno.h>
#ifdef HAVE_STRING_H
# include <string.h>
#else
# include <strings.h>
# define strchr index
# define strrchr rindex
#endif /* HAVE_STRING_H */
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif /* HAVE_STDLIB_H */
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif /* HAVE_UNISTD_H */
#ifndef SIG_ERR
# define SIG_ERR ((RETSIGTYPE (*)()) -1)
#endif /* SIG_ERR */
/* must be similar to struct Trap in sh.h */
struct signal_info {
int signal;
char *name;
char *mess;
};
struct signal_info siginfo[] = {
{ 0, "0", "Signal 0" },
#include "siglist.out"
{ 0, (char *) 0, (char *)0 },
};
int usage();
#if 0
RETSIGTYPE sig_catcher();
#endif /* 0 */
char *signal_name();
#ifndef HAVE_STRERROR
char *strerror(int);
#endif /* !HAVE_STRERROR */
char *progname = "check-sigs";
int caught_sigs;
int
main(argc, argv)
int argc;
char **argv;
{
extern int optind;
extern char *optarg;
extern int errno;
int opt;
int i;
int eno;
int report_all = 0;
RETSIGTYPE (*f)();
char *ofile = (char *) 0;
char *s;
int wait_forever = 0;
if (argc > 0 && argv[0] && *argv[0])
progname = argv[0];
while ((opt = getopt(argc, argv, "ao:w")) != EOF) {
switch (opt) {
case 'a':
report_all = 1;
break;
case 'o':
ofile = optarg;
break;
case 'w':
wait_forever = 1;
break;
default:
usage(1);
}
}
if (argc != optind)
usage(0);
if (ofile && freopen(ofile, "w", stdout) == (FILE *) 0) {
fprintf(stderr, "%s: Couldn't open output file `%s' - %s\n",
progname, ofile, strerror(errno));
exit(1);
}
if (!wait_forever) {
char *blocked = "";
#ifdef POSIX_SIGNALS
sigset_t mask;
sigprocmask(SIG_BLOCK, (sigset_t *) 0, &mask);
#endif /* POSIX_SIGNALS */
#ifdef BSD42_SIGNALS
int mask;
mask = sigblock(0);
#endif /* BSD42_SIGNALS */
for (i = 1; i < NSIG; i++) {
f = signal(i, SIG_DFL);
eno = errno;
#ifdef BSD42_SIGNALS
blocked = (mask & sigmask(i)) ? "blocked" : "";
#endif /* BSD42_SIGNALS */
#ifdef POSIX_SIGNALS
blocked = sigismember(&mask, i) ? "blocked" : "";
#endif /* POSIX_SIGNALS */
if (f == SIG_DFL && !report_all && !*blocked)
continue;
printf("%3d: %7s %30s: ",
i, blocked, (s = signal_name(i)) ? s : "");
if (f == SIG_IGN)
printf("ignored\n");
else if (f == SIG_ERR)
printf("error - %s\n", strerror(eno));
else if (f != SIG_DFL)
printf("caught - function address %lx\n",
(long) f);
else if (report_all)
printf("default\n");
}
}
#if 0 /* code assumes BSD signals - not worth posixizing */
if (wait_forever) {
printf("pid is %d\n", getpid());
sigsetmask(-1L);
for (i = 0; i < NSIG; i++)
(void) signal(i, sig_catcher);
while (1) {
sigpause(0L);
for (i = 1; i < NSIG; i++)
if (caught_sigs & sigmask(i))
printf("received signal %d - %s\n",
i,
(s = signal_name(i)) ? s
: "");
caught_sigs = 0L;
}
}
#endif
return 0;
}
int
usage(verbose)
int verbose;
{
fprintf(stderr, "Usage: %s [-?aw] [-o file]\n", progname);
if (verbose)
fprintf(stderr, "\
-a report on all signals - instead of just non-default signals\n\
-o f redirect standard output to file f\n\
-w wait forever, reporting all signals sent\n\
");
exit(1);
return 0;
}
#if 0
RETSIGTYPE
sig_catcher(sig)
int sig;
{
caught_sigs |= sigmask(sig);
return RETSIGVAL;
}
#endif /* 0 */
char *
signal_name(sig)
int sig;
{
static char buf[1024];
#ifdef HAVE_SYS_SIGLIST
# ifndef SYS_SIGLIST_DECLARED
extern char *sys_siglist[];
# endif
/* Use system description, if available... */
if (sys_siglist[sig] && sys_siglist[sig][0])
return sys_siglist[sig];
#endif /* HAVE_SYS_SIGLIST */
if (sig > 0 && sig < sizeof(siginfo) / sizeof(siginfo[0]) - 1) {
sprintf(buf, "SIG%s (%s)",
siginfo[sig].name, siginfo[sig].mess);
return buf;
}
return (char *) 0;
}
#ifndef HAVE_STRERROR
char *
strerror(err)
int err;
{
static char buf[64];
# ifdef HAVE_SYS_ERRLIST
# ifndef SYS_ERRLIST_DECLARED
extern int sys_nerr;
extern char *sys_errlist[];
# endif
char *p;
if (err < 0 || err >= sys_nerr)
sprintf(p = buf, "Unknown system error %d", err);
else
p = sys_errlist[err];
return p;
# else /* HAVE_SYS_ERRLIST */
switch (err) {
case EINVAL:
return "Invalid argument";
case EACCES:
return "Permission denied";
case ESRCH:
return "No such process";
case EPERM:
return "Not owner";
case ENOENT:
return "No such file or directory";
case ENOTDIR:
return "Not a directory";
case ENOEXEC:
return "Exec format error";
case ENOMEM:
return "Not enough memory";
case E2BIG:
return "Argument list too long";
default:
sprintf(buf, "Unknown system error %d", err);
return buf;
}
# endif /* HAVE_SYS_ERRLIST */
}
#endif /* !HAVE_STRERROR */

View File

@ -1,360 +0,0 @@
/* config.h.in. Generated automatically from configure.in by autoheader. */
/*
* This file, acconfig.h, which is a part of pdksh (the public domain ksh),
* is placed in the public domain. It comes with no licence, warranty
* or guarantee of any kind (i.e., at your own risk).
*/
#ifndef CONFIG_H
#define CONFIG_H
/* Define if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
#undef _ALL_SOURCE
#endif
/* Define if the closedir function returns void instead of int. */
#undef CLOSEDIR_VOID
/* Define to empty if the keyword does not work. */
#undef const
/* Define to `int' if <sys/types.h> doesn't define. */
#undef gid_t
/* Define if you have a working `mmap' system call. */
#undef HAVE_MMAP
/* Define if your struct stat has st_rdev. */
#undef HAVE_ST_RDEV
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
#undef HAVE_SYS_WAIT_H
/* Define if you have <unistd.h>. */
#undef HAVE_UNISTD_H
/* Define if on MINIX. */
#undef _MINIX
/* Define to `int' if <sys/types.h> doesn't define. */
#undef mode_t
/* Define to `long' if <sys/types.h> doesn't define. */
#undef off_t
/* Define to `int' if <sys/types.h> doesn't define. */
#undef pid_t
/* Define if the system does not provide POSIX.1 features except
with this defined. */
#undef _POSIX_1_SOURCE
/* Define if you need to in order for stat and other things to work. */
#undef _POSIX_SOURCE
/* Define as the return type of signal handlers (int or void). */
#undef RETSIGTYPE
/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */
#undef STAT_MACROS_BROKEN
/* Define if `sys_siglist' is declared by <signal.h>. */
#undef SYS_SIGLIST_DECLARED
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Define to `int' if <sys/types.h> doesn't define. */
#undef uid_t
/* Define if the closedir function returns void instead of int. */
#undef VOID_CLOSEDIR
/* Define if your kernal doesn't handle scripts starting with #! */
#undef SHARPBANG
/* Define if dup2() preserves the close-on-exec flag (ultrix does this) */
#undef DUP2_BROKEN
/* Define as the return value of signal handlers (0 or ). */
#undef RETSIGVAL
/* Define if you have posix signal routines (sigaction(), et. al.) */
#undef POSIX_SIGNALS
/* Define if you have BSD4.2 signal routines (sigsetmask(), et. al.) */
#undef BSD42_SIGNALS
/* Define if you have BSD4.1 signal routines (sigset(), et. al.) */
#undef BSD41_SIGNALS
/* Define if you have v7 signal routines (signal(), signal reset on delivery) */
#undef V7_SIGNALS
/* Define to use the fake posix signal routines (sigact.[ch]) */
#undef USE_FAKE_SIGACT
/* Define if signals don't interrupt read() */
#undef SIGNALS_DONT_INTERRUPT
/* Define if you have bsd versions of the setpgrp() and getpgrp() routines */
#undef BSD_PGRP
/* Define if you have POSIX versions of the setpgid() and getpgrp() routines */
#undef POSIX_PGRP
/* Define if you have sysV versions of the setpgrp() and getpgrp() routines */
#undef SYSV_PGRP
/* Define if you don't have setpgrp(), setpgid() or getpgrp() routines */
#undef NO_PGRP
/* Define to char if your compiler doesn't like the void keyword */
#undef void
/* Define to nothing if compiler doesn't like the volatile keyword */
#undef volatile
/* Define if C compiler groks function prototypes */
#undef HAVE_PROTOTYPES
/* Define if C compiler groks __attribute__((...)) (const, noreturn, format) */
#undef HAVE_GCC_FUNC_ATTR
/* Define to 32-bit signed integer type if <sys/types.h> doesn't define */
#undef clock_t
/* Define to the type of struct rlimit fields if the rlim_t type is missing */
#undef rlim_t
/* Define if time() is declared in <time.h> */
#undef TIME_DECLARED
/* Define to `unsigned' if <signal.h> doesn't define */
#undef sigset_t
/* Define if sys_errlist[] and sys_nerr are in the C library */
#undef HAVE_SYS_ERRLIST
/* Define if sys_errlist[] and sys_nerr are defined in <errno.h> */
#undef SYS_ERRLIST_DECLARED
/* Define if sys_siglist[] is in the C library */
#undef HAVE_SYS_SIGLIST
/* Define if you have a sane <termios.h> header file */
#undef HAVE_TERMIOS_H
/* Define if you have a memset() function in your C library */
#undef HAVE_MEMSET
/* Define if you have a memmove() function in your C library */
#undef HAVE_MEMMOVE
/* Define if you have a bcopy() function in your C library */
#undef HAVE_BCOPY
/* Define if you have a lstat() function in your C library */
#undef HAVE_LSTAT
/* Define if you have a sane <termio.h> header file */
#undef HAVE_TERMIO_H
/* Define if you don't have times() or if it always returns 0 */
#undef TIMES_BROKEN
/* Define if opendir() will open non-directory files */
#undef OPENDIR_DOES_NONDIR
/* Define if the pgrp of setpgrp() can't be the pid of a zombie process */
#undef NEED_PGRP_SYNC
/* Define if you arg running SCO unix */
#undef OS_SCO
/* Define if you arg running ISC unix */
#undef OS_ISC
/* Define if you arg running OS2 with the EMX library */
#undef OS2
/* Define if you have a POSIX.1 compatiable <sys/wait.h> */
#undef POSIX_SYS_WAIT
/* Define if your OS maps references to /dev/fd/n to file descriptor n */
#undef HAVE_DEV_FD
/* Define if your C library's getwd/getcwd function dumps core in unreadable
* directories. */
#undef HPUX_GETWD_BUG
/* Default PATH (see comments in configure.in for more details) */
#undef DEFAULT_PATH
/* Include ksh features? (see comments in configure.in for more details) */
#undef KSH
/* Include emacs editing? (see comments in configure.in for more details) */
#undef EMACS
/* Include vi editing? (see comments in configure.in for more details) */
#undef VI
/* Include job control? (see comments in configure.in for more details) */
#undef JOBS
/* Include brace-expansion? (see comments in configure.in for more details) */
#undef BRACE_EXPAND
/* Include any history? (see comments in configure.in for more details) */
#undef HISTORY
/* Include complex history? (see comments in configure.in for more details) */
#undef COMPLEX_HISTORY
/* Strict POSIX behaviour? (see comments in configure.in for more details) */
#undef POSIXLY_CORRECT
/* Specify default $ENV? (see comments in configure.in for more details) */
#undef DEFAULT_ENV
/* Include shl(1) support? (see comments in configure.in for more details) */
#undef SWTCH
/* Include game-of-life? (see comments in configure.in for more details) */
#undef SILLY
/* The number of bytes in a int. */
#undef SIZEOF_INT
/* The number of bytes in a long. */
#undef SIZEOF_LONG
/* Define if you have the _setjmp function. */
#undef HAVE__SETJMP
/* Define if you have the confstr function. */
#undef HAVE_CONFSTR
/* Define if you have the dup2 function. */
#undef HAVE_DUP2
/* Define if you have the flock function. */
#undef HAVE_FLOCK
/* Define if you have the getcwd function. */
#undef HAVE_GETCWD
/* Define if you have the getgroups function. */
#undef HAVE_GETGROUPS
/* Define if you have the getpagesize function. */
#undef HAVE_GETPAGESIZE
/* Define if you have the getrusage function. */
#undef HAVE_GETRUSAGE
/* Define if you have the getwd function. */
#undef HAVE_GETWD
/* Define if you have the killpg function. */
#undef HAVE_KILLPG
/* Define if you have the nice function. */
#undef HAVE_NICE
/* Define if you have the setrlimit function. */
#undef HAVE_SETRLIMIT
/* Define if you have the sigsetjmp function. */
#undef HAVE_SIGSETJMP
/* Define if you have the strcasecmp function. */
#undef HAVE_STRCASECMP
/* Define if you have the strerror function. */
#undef HAVE_STRERROR
/* Define if you have the strstr function. */
#undef HAVE_STRSTR
/* Define if you have the sysconf function. */
#undef HAVE_SYSCONF
/* Define if you have the tcsetpgrp function. */
#undef HAVE_TCSETPGRP
/* Define if you have the ulimit function. */
#undef HAVE_ULIMIT
/* Define if you have the valloc function. */
#undef HAVE_VALLOC
/* Define if you have the wait3 function. */
#undef HAVE_WAIT3
/* Define if you have the waitpid function. */
#undef HAVE_WAITPID
/* Define if you have the <dirent.h> header file. */
#undef HAVE_DIRENT_H
/* Define if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
/* Define if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define if you have the <ndir.h> header file. */
#undef HAVE_NDIR_H
/* Define if you have the <paths.h> header file. */
#undef HAVE_PATHS_H
/* Define if you have the <stddef.h> header file. */
#undef HAVE_STDDEF_H
/* Define if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define if you have the <sys/dir.h> header file. */
#undef HAVE_SYS_DIR_H
/* Define if you have the <sys/ndir.h> header file. */
#undef HAVE_SYS_NDIR_H
/* Define if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
/* Define if you have the <sys/resource.h> header file. */
#undef HAVE_SYS_RESOURCE_H
/* Define if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define if you have the <sys/wait.h> header file. */
#undef HAVE_SYS_WAIT_H
/* Define if you have the <ulimit.h> header file. */
#undef HAVE_ULIMIT_H
/* Define if you have the <values.h> header file. */
#undef HAVE_VALUES_H
/* Need to use a separate file to keep the configure script from commenting
* out the undefs....
*/
#include "conf-end.h"
#endif /* CONFIG_H */

View File

@ -1,209 +0,0 @@
:
# NAME:
# ksh.kshrc - global initialization for ksh
#
# DESCRIPTION:
# Each invocation of /bin/ksh processes the file pointed
# to by $ENV (usually $HOME/.kshrc).
# This file is intended as a global .kshrc file for the
# Korn shell. A user's $HOME/.kshrc file simply requires
# the line:
# . /etc/ksh.kshrc
# at or near the start to pick up the defaults in this
# file which can then be overridden as desired.
#
# SEE ALSO:
# $HOME/.kshrc
#
# RCSid:
# $Id: ksh.kshrc,v 1.1 2004/03/21 00:34:32 tg Exp $
#
# @(#)Copyright (c) 1991 Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
case "$-" in
*i*) # we are interactive
# we may have su'ed so reset these
# NOTE: SCO-UNIX doesn't have whoami,
# install whoami.sh
USER=`whoami 2>/dev/null`
USER=${USER:-`id | sed 's/^[^(]*(\([^)]*\)).*/\1/'`}
case $UID in
0) PS1S='# ';;
esac
PS1S=${PS1S:-'$ '}
HOSTNAME=${HOSTNAME:-`uname -n`}
HOST=${HOSTNAME%%.*}
PROMPT="$USER:!$PS1S"
#PROMPT="<$USER@$HOST:!>$PS1S"
PPROMPT='$USER:$PWD:!'"$PS1S"
#PPROMPT='<$USER@$HOST:$PWD:!>'"$PS1S"
PS1=$PPROMPT
# $TTY is the tty we logged in on,
# $tty is that which we are in now (might by pty)
tty=`tty`
tty=`basename $tty`
TTY=${TTY:-$tty}
set -o emacs
alias ls='ls -CF'
alias h='fc -l | more'
_cd() { "cd" $*; }
# the PD ksh is not 100% compatible
case "$KSH_VERSION" in
*PD*) # PD ksh
case "$TERM" in
pc3|xterm*)
# bind arrow keys
bind '^[['=prefix-2
bind '^XA'=up-history
bind '^XB'=down-history
bind '^XC'=forward-char
bind '^XD'=backward-char
;;
esac
;;
*) # real ksh ?
[ -r $HOME/.functions ] && . $HOME/.functions
set -o trackall
;;
esac
case "$TERM" in
sun*)
# these are not as neat as their csh equivalents
if [ "$tty" != console ]; then
# ilabel
ILS='\033]L'; ILE='\033\\'
# window title bar
WLS='\033]l'; WLE='\033\\'
fi
;;
xterm*)
ILS='\033]1;'; ILE='\007'
WLS='\033]2;'; WLE='\007'
parent="`ps -ax 2>/dev/null | grep $PPID | grep -v grep`"
case "$parent" in
*telnet*)
export TERM=xterms;;
esac
;;
*) ;;
esac
# do we want window decorations?
if [ "$ILS" ]; then
ilabel () { print -n "${ILS}$*${ILE}"; }
label () { print -n "${WLS}$*${WLE}"; }
alias stripe='label "$USER@$HOST ($tty) - $PWD"'
alias istripe='ilabel "$USER@$HOST ($tty)"'
wftp () { ilabel "ftp $*"; "ftp" $*; eval istripe; }
wcd () { _cd $*; eval stripe; }
wtelnet ()
{
"telnet" "$@"
eval istripe
eval stripe
}
wrlogin ()
{
"rlogin" "$@"
eval istripe
eval stripe
}
wsu ()
{
"su" "$@"
eval istripe
eval stripe
}
alias su=wsu
alias cd=wcd
alias ftp=wftp
alias telnet=wtelnet
alias rlogin=wrlogin
eval stripe
eval istripe
PS1=$PROMPT
fi
alias quit=exit
alias cls=clear
alias logout=exit
alias bye=exit
alias p='ps -l'
alias j=jobs
alias o='fg %-'
alias ls='ls -gCF'
# add your favourite aliases here
OS=${OS:-`uname -s`}
case $OS in
HP-UX)
alias ls='ls -CF'
;;
*BSD)
alias df='df -k'
alias du='du -k'
;;
esac
alias rsize='eval `/usr/bin/X11/resize`'
case "$TERM" in
sun*|xterm*)
case $tty in
tty[p-w]*)
case "$DISPLAY" in
"")
DISPLAY="`who | grep $TTY | sed -n 's/.*(\([^:)]*\)[:)].*/\1/p' | sed 's/\([a-zA-Z][^.]*\).*/\1/'`:0"
;;
esac
;;
esac
case "$DISPLAY" in
ozen*|:*)
stty erase "^?"
;;
*)
stty erase "^h"
;;
esac
export DISPLAY
;;
esac
;;
*) # non-interactive
;;
esac
# commands for both interactive and non-interactive shells
# is $1 missing from $2 (or PATH) ?
no_path () {
eval _v="\$${2:-PATH}"
case :$_v: in
*:$1:*) return 1;; # no we have it
esac
return 0
}
# if $1 exists and is not in path, append it
add_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
}
# if $1 exists and is not in path, prepend it
pre_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
}
# if $1 is in path, remove it
del_path () {
no_path $* || eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`
}

View File

@ -1,310 +0,0 @@
:
# NAME:
# profile - global initialization for sh,ksh
#
# DESCRIPTION:
# This file is processed during login by /bin/sh
# and /bin/ksh. It is used to setup the default user
# environment.
#
# SEE ALSO:
# $HOME/.profile
# /etc/ksh.kshrc
# RCSid:
# $Id: profile,v 1.1 2004/03/21 00:34:32 tg Exp $
#
# @(#)Copyright (c) 1991 Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
sigs="2 3"
trap "" $sigs # don't interrupt us
# simple versions. See ksh.kshrc for the clever ones
add_path () { [ -d $1 ] && eval ${2:-PATH}="\$${2:-PATH}:$1"; }
pre_path () { [ -d $1 ] && eval ${2:-PATH}="$1:\$${2:-PATH}"; }
del_path () { eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`; }
case "$_INIT_" in
*env*) ;;
*) # do these once
_INIT_="$_INIT_"env
export _INIT_
case `echo -n ""` in
-n*)
N=""; C="\c";;
*)
N="-n"; C="";;
esac
if [ -f /unix ]; then
# System V
[ -z "$TZ" -a -f /etc/TIMEZONE ] && . /etc/TIMEZONE
set -- `who -r`
case "$3" in
S|5|0) SINGLE=y;;
*) SINGLE=n;;
esac
else
SINGLE=n # doesn't matter so much
fi
OS=${OS:-`uname -s`}
ARCH=${ARCH:-`uname -m`}
HOSTNAME=`hostname 2>/dev/null`
HOSTNAME=${HOSTNAME:-`uname -n`}
export OS ARCH HOSTNAME
# pick one of the following for the default umask
umask 002 # relaxed -rwxrwxr-x
# umask 022 # cautious -rwxr-xr-x
# umask 027 # uptight -rwxr-x---
# umask 077 # paranoid -rwx------
# you can override the default umask
# for specific groups later...
if [ -d /local ]; then
LOCAL=/local
else
LOCAL=/usr/local
fi
# defaults (might be reset below)
PATH=/bin:/usr/bin
MANPATH=/usr/man
SPOOL=/usr/spool
defterm=vt220
# set system specific things,
# eg. set PATH,MANPATH
# override default ulimit if desired.
# defult ulmit is unlimited on SunOS
# and 4Mb for most System V
case $OS in
SunOS)
# On sun's /bin -> /usr/bin so leave it out!
PATH=/usr/bin:/usr/ucb:/usr/5bin:/usr/etc
SPOOL=/var/spool
LD_LIBRARY_PATH=/usr/lib
add_path /usr/snm/lib LD_LIBRARY_PATH
add_path /usr/X11R5/lib LD_LIBRARY_PATH
add_path /usr/openwin/lib LD_LIBRARY_PATH
export LD_LIBRARY_PATH
;;
SCO-UNIX)
defterm=ansi
;;
B.O.S.)
MANPATH=/usr/catman
SRC_COMPAT=_SYSV
export SRC_COMPAT
;;
NetBSD|386bsd)
MACHINE_ARCH=`uname -m`
MANPATH=/usr/share/man
add_path /usr/X386/man MANPATH
MAILDIR=/var/mail
SPOOL=/var/spool
export MACHINE_ARCH
;;
esac
# add_path only adds them if they exist
add_path /sbin
add_path /usr/sbin
add_path /usr/distbin
add_path /usr/ucb
add_path /usr/lbin
add_path /usr/dbin
add_path /usr/ldbin
add_path ${LOCAL}/bin
add_path /usr/bin/X11
add_path /usr/X11R5/bin
add_path /usr/openwin/bin
# ensure . is at end
PATH=$PATH:.
case "$HOME" in
/) ;;
""|/tmp)
echo "Using /tmp for HOME"
HOME=/tmp; export HOME
;;
*)
pre_path $HOME/bin
;;
esac
add_path /usr/X11R5/man MANPATH
add_path ${LOCAL}/man MANPATH
# make sure these are set at least once
LOGNAME=${LOGNAME:-`logname`}
USER=${USER:-$LOGNAME}
# NOTE: set up $GROUPDIR such that users cannot modify/install
# their own $GROUPDIR/profile
GROUPDIR=`dirname $HOME`
[ "$GROUPDIR" != /etc -a -f $GROUPDIR/profile ] && . $GROUPDIR/profile
export LOCAL TTY PATH LOGNAME USER
if [ -t 1 ]; then
# we are interactive
TTY=`tty`
TTY=`basename $TTY`
if [ -f /etc/organization ]; then
ORGANIZATION="`cat /etc/organization`"
COPYRIGHT="Copyright (c) `date +19%y` $ORGANIZATION"
export ORGANIZATION COPYRIGHT
fi
# set up some env variables
MAIL=${MAILDIR:-$SPOOL/mail}/$USER
MAILPATH=$MAIL:/etc/motd
EMACSDIR=${LOCAL}/lib/emacs
PAGER=${PAGER:-more}
export MAIL EMACSDIR MANPATH MAILPATH PAGER
CVSROOT=${LOCAL}/src/master
EDITOR=vi
VISUAL=vi
FCEDIT=$EDITOR
export CVSROOT FCEDIT EDITOR VISUAL
case $UID in
0) PS1S='# ';;
esac
PS1S=${PS1S:-'$ '}
PROMPT="<$LOGNAME@$HOSTNAME>$PS1S"
[ -f /etc/profile.TeX ] && . /etc/profile.TeX
else
TTY=none
fi
# test (and setup if we are Korn shell)
if [ "$RANDOM" != "$RANDOM" ]; then
# we are Korn shell
SHELL=/bin/ksh
ENV=${HOME%/}/.kshrc
if [ ! -f $ENV ]; then
ENV=/etc/ksh.kshrc
fi
HISTFILE=${HOME%/}/.ksh_hist
PROMPT="<$LOGNAME@$HOSTNAME:!>$PS1S"
export HISTSIZE HISTFILE ENV
CDPATH=.:$HOME
if [ "$TMOUT" ]; then
typeset -r TMOUT
fi
set -o emacs # biased :-)
else
SHELL=/bin/sh
fi
PS1=$PROMPT
export SHELL PS1 EDITOR PATH PROMPT HOSTNAME CDPATH
;;
esac
# login time initialization
case "$_INIT_" in
*log*) ;;
*) _INIT_="$_INIT_"log
case "$SINGLE" in
y) ;;
*)
if [ TTY != none -a "$0" != "-su" -a "$LOGNAME" = "`logname`" ]
then
case $TTY in
tty0*)
echo "`date '+%b %d %H:%M:%S'` $LOGNAME logged in on $TTY" > /dev/console;;
esac
stty sane # usually a good idea :-)
if [ ! -f ~/.hushlogin ]; then
# ensure known state
case $OS in
SunOS|*BSD) ;;
*)
stty isig icanon intr '^c' erase '^h' kill '^u' eof '^d'
mesg y
;;
esac
case $TERM in
network|unknown|dialup|"")
echo ${N} "Enter terminal type [$defterm]: ${C}" 1>&2
read tmpterm
TERM=${tmpterm:-$defterm}
;;
esac
case "$TERM" in
pc3|xterm)
stty erase ^?
;;
esac
# not all of the following are appropriate at all sites
# Sun's don't need to cat /etc/motd for instance
case "$OS" in
SunOS) ;;
SCO-UNIX)
[ -s /etc/motd ] && cat /etc/motd
[ -x /usr/bin/mail -a -s "$MAIL" ] &&
echo "You have mail."
[ -x /usr/bin/news ] && /usr/bin/news -n
;;
NetBSD|386bsd)
# hardware flow control works so use it
case $TTY in
tty0*) # dialups
stty -ixon -ixany
stty crtscts
;;
esac
;;
*)
[ -s /etc/motd ] && cat /etc/motd
if [ -x /usr/bin/mailx ]; then
if mailx -e; then
echo "You have mail."
# show the the headers, this might
# be better done in .profile so they
# can override it.
# mailx -H
fi
fi
[ -x /usr/bin/news ] && /usr/bin/news -n
;;
esac
if [ -f $LOCAL/etc/1stlogin.ann ]; then
[ -f $HOME/... ] || sh $LOCAL/etc/1stlogin.ann
fi
# [ -x /usr/games/fortune ] && /usr/games/fortune -a
# remind folk who turned on reply.pl to turn it off.
if [ -f $HOME/.forward ]; then
echo "Your mail is being forwarded to:"
cat $HOME/.forward
if [ -f $HOME/.recording ]; then
echo "Perhaps you should run \"reply.pl off\""
fi
fi
[ -x /usr/ucb/msgs ] && /usr/ucb/msgs -fq
fi
fi
unset tmpterm defterm C N
esac
case "$TERM" in
network|unknown|"") TERM=$defterm;;
esac
export TERM TTY
;;
esac
# Handle X-terminals if necessary
[ "$SINGLE" = n -a -f /etc/profile.X11 ] && . /etc/profile.X11
# make sure you have this bit last
trap $sigs # restore signals
unset sigs

View File

@ -1,64 +0,0 @@
:
# NAME:
# sys_config.sh - set system specific variables
#
# SYNOPSIS:
# . /etc/sys_config.sh
#
# DESCRIPTION:
# Source this script into shell scripts that want to handle
# various system types.
# You may well want to edit this on a particular system replacing
# `uname -s` etc with the result. So that the facility will work
# even when in single user mode and uname et al are not available.
#
# SEE ALSO:
# /etc/profile
# RCSid:
# $Id: sys_config.sh,v 1.1 2004/03/21 00:34:32 tg Exp $
#
# @(#)Copyright (c) 1991 Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
#
# determin machine type
if [ -f /386bsd ]; then # doesn't have uname or arch
ARCH=i386
OS=386bsd
HOSTNAME=`hostname`
elif [ -f /usr/bin/arch ]; then
ARCH=`arch`
elif [ -f /usr/bin/uname -o -f /bin/uname ]; then
ARCH=`uname -m`
fi
#
case "$ARCH" in
sun386) uname=/usr/5bin/uname
OS=SunOS
;;
*) uname=uname;;
esac
# set the operating system type
# you can't use `uname -s` with SCO UNIX
# it returns the same string as `uname -n`
# so set it manually
# OS=SCO-UNIX
# The eval below is a workaround for a bug in the PD ksh.
OS=${OS:-`eval $uname -s`}
HOSTNAME=${HOSTNAME:-`eval $uname -n`}
case `echo -n ""` in
-n*) _C_=""; _N_="-n";;
*) _C_="\c"; _N_="";;
esac
N="${_N_}"
C="${_C_}"
export OS ARCH HOSTNAME uname

View File

@ -1,119 +0,0 @@
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5; it is not part of GNU.
#
# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
#
# This script is compatible with the BSD install script, but was written
# from scratch.
#
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
instcmd="$mvprog"
chmodcmd=""
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
fi
# Make a temp file name in the proper directory.
dstdir=`dirname $dst`
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp
# and set any options; do chmod last to preserve setuid bits
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi
# Now rename the file to the real destination.
$doit $rmcmd $dst
$doit $mvcmd $dsttmp $dst
exit 0

3532
ksh.Man

File diff suppressed because it is too large Load Diff

652
misc/Bugs
View File

@ -1,652 +0,0 @@
if [ $# != 1 ] ; then
echo "Usage: ksh-prog Bugs ksh-prog" 1>&2
exit 1
fi
THIS_KSH=$1
shift
echo 'The following tests are known to fail:
39'
tbase=bug-t$$
tfile=/tmp/$tbase
sfile=/tmp/bug-s$$
# 1. Everywhere
# lex array code has problems....
# $ echo blah[
# missing ]
# $
# Different view of same bug:
# $ n=blah echo "hi[ $n ]"
# hi[ $n ]
# $
n=blah
x=$(echo hi[ $n ]=1)
if [ "$x" = 'hi[ $n ]=1' ] ; then
echo 'Bug 1 present (echo "hi[ $n ] " prints hi[ $n ]).'
fi
unset n x
#
# 2. Everywhere
# When PATH is set before running a command, the new path is not used
# in doing the path search
# $ echo echo hi > /tmp/q ; chmod a+rx /tmp/q
# $ PATH=/tmp q
# q: not found
# $
# in comexec() the two lines
# while (*vp != NULL)
# (void) typeset(*vp++, xxx, 0);
# need to be moved out of the switch to before findcom() is called - I
# don't know what this will break.
cat > $tfile << 'EOF'
#!/bin/sh
echo hi
exit 0
EOF
chmod a+rx $tfile
PATH=/tmp $tbase > /dev/null 2>&1
if [ $? != 0 ] ; then
echo "Bug 2 present: local assignments to PATH don't effect PATH search"
fi
rm -f $tfile
#
# 3. Sun OS 4.0.x (This seems to be a problem with sun's PENDIN not being done
# properly)
# sleep 5^J ls^J ls^J ls [only first ls runs]
# vi ... ZZ (while waiting type) [some of the input gets eaten]
# [not present in SunOS 4.1.x]
echo " [No automatic test for bug 3 - interactive]"
#
# 4. (fixed)
#
echo " [Don't know what bug 4 was]"
#
# 5. Everywhere
# File name completion (^X,*) does not mesh well with cd and
# symbolic links. cd does path simplification wrt $PWD before
# doing the actual chdir(), while file name completion does
# not do the simplification. E.g., you are in directory A
# which has a symbolic link to directory B, you create a file
# called foobar and you then cd to the symlink to B, and type
# $ echo ../foo^X
# and the shell beeps at you. Would be more consistent to
# do the completion after simplifing the `$PWD/..'.
echo " [No automatic test for bug 5 - interactive]"
#
# 6. Everywhere
# Parsing of $(..) expressions is non-optimal. It is
# impossible to have any parentheses inside the expression.
# I.e.,
# $ ksh -c 'echo $(echo \( )'
# no closing quote
# $ ksh -c 'echo $(echo "(" )'
# no closing quote
# $
# The solution is to hack the parsing clode in lex.c, the
# question is how to hack it: should any parentheses be
# escaped by a backslash, or should recursive parsing be done
# (so quotes could also be used to hide hem). The former is
# easier, the later better...
cat > $tfile << 'EOF'
echo $(echo \()
EOF
out=`$THIS_KSH $tfile 2>&1`
if [ "X$out" != 'X(' ] ; then
echo 'Bug 6 present: can'\''t quote ( inside $(..) escapes'
fi
rm -f $tfile
#
# 7. (fixed)
#
echo " [Don't know what bug 7 was]"
#
# 8. Everywhere - NOT A BUG - this is what at&t ksh does
# Strange typset -x behaviour in functions. The following function
# does not set the environment variable BLAH outside the function:
# function blah
# {
# typeset -x BLAH=foobar
# }
# This function does work:
# function blah
# { BLAH=foobar; export BLAH
# }
echo ' [Bug 8 was bogus]'
#
# 9. (fixed) Fix is to make sure Volatile is not defined to nothing
# (see defines in sh.h)
# Continue in a for loop does not work right:
# for i in a b c ; do
# if [ $i = b ] ; then
# continue
# fi
# echo $i
# done
# Prints a forever...
first=yes
for i in a b c ; do
if [ $i = b ] ; then
if [ $first = no ] ; then
echo 'Bug 9 present: continue in for loop broken'
break # hope break isn't broken too :-)
fi
first=no
continue
fi
done
#
# 10. Everywhere
# The following:
# set -- `false`
# echo $?
# shoud not print 0. (according to /bin/sh, at&t ksh, and the
# getopt(1) man page - not according to POSIX)
set -- `false`
if [ $? != 1 ] ; then
echo 'Bug 10 present: set exit code overrides exit code of command subst'
fi
#
# 11. Some places (sun4s but not mips)
# The following:
# x=/foo/bar/blah
# echo ${x##*/}
# should echo blah but on some machines echos /foo/bar/blah.
x=/foo/bar/blah
if [ ${x##*/} != blah ] ; then
echo 'Bug 11 present: ${x##*/} doesn'\''t work'
fi
unset x
#
# 12. Everywhere:
# Both of the following echos produce the same output under sh/ksh.att:
# #!/bin/sh
# x="foo bar"
# echo "`echo \"$x\"`"
# echo "`echo "$x"`"
# pdksh produces different output for the former (foo instead of foo\tbar)
x="foo bar"
if [ "X`echo \"$x\"`" != "Xfoo bar" ] ; then
echo 'Bug 12 present: quotes inside `` sequences different from sh'
fi
unset x
#
# 13. Everywhere
# The following command hangs forever:
# $ (: ; cat /etc/termcap) | sleep 2
# This is because the shell forks a shell to run the (..) command
# and this shell has the pipe open. When the sleep dies, the cat
# doesn't get a SIGPIPE 'cause a process (ie, the second shell)
# still has the pipe open.
trap 'echo "Bug 13 present: pipes not closed properly"; trap 2' 2
echo " [If this hangs for more than a second, hit ^C]"
(: ; cat /etc/termcap) | sleep 1
trap 2
echo " [relax, no bug 13]"
#
# 14. Everywhere
# The command
# $ (foobar) 2> /dev/null
# generates no output under /bin/sh, but pdksh produces the error
# foobar: not found
# Also, the command
# $ foobar 2> /dev/null
# generates an error under /bin/sh and pdksh, but at&t ksh produces
# no error (redirected to /dev/null).
cat > $tfile << 'EOF'
(you/should/not/see/this/error/1) 2> /dev/null
you/should/not/see/this/error/2 2> /dev/null
EOF
if $THIS_KSH $tfile 2>&1 | grep you/should > /dev/null; then
echo "Bug 14 present: shell 'command not found' error not redirected"
fi
rm -f $tfile
#
# 15. Everywhere
# The command
# $ whence foobar
# generates a blank line under pdksh and sets the exit status to 0.
# at&t ksh generates no output and sets the exit status to 1. Also,
# the command
# $ whence foobar cat
# generates no output under at&t ksh (pdksh generates a blank line
# and /bin/cat).
echo " [Note that there are three bug 15 tests: 15a, 15b, 15c]"
cat > $tfile << 'EOF'
whence does/not/exist > /dev/null
echo $?
EOF
out=`$THIS_KSH $tfile 2> /dev/null`
if [ "$out" != 1 ] ; then
echo 'Bug 15a present: exit status of whence wrong'
fi
rm -f $tfile
x=$(whence does/not/exist | wc -l)
case $x in
*0*) ;;
*) echo 'Bug 15b present: whence produces blank lines'
esac
x=$(whence does/not/exist cat | wc -l)
case $x in
*2*) echo 'Bug 15c present: whence continues after error'
esac
unset x
#
# 16. Everywhere
# ${var%%expr} seems to be broken in many places. On the mips
# the commands
# $ read line < /etc/passwd
# $ echo $line
# root:0:1:...
# $ echo ${line%%:*}
# root
# $ echo $line
# root
# $
# change the value of line. On sun4s & pas, the echo ${line%%:*} doesn't
# work. Haven't checked elsewhere...
read x < /etc/passwd
y=$x
echo ${x%%:*} > /dev/null
if [ "$x" != "$y" ] ; then
echo 'Bug 16 present: ${..%%..} trashes variables'
fi
unset x y
#
# 17. Everywhere
# The command
# . /foo/bar
# should set the exit status to non-zero (sh and at&t ksh do).
# XXX doting a non existant file is a fatal error for a script
cat > $tfile << 'EOF'
(. does/not/exist)
echo $?
EOF
out=`$THIS_KSH $tfile 2> /dev/null`
if [ "$out" != 1 ] ; then
echo 'Bug 17 present: exit status of . wrong'
fi
rm -f $tfile
#
# 18. Everywhere
# In vi mode ^X (and *) can dump core:
# $ ab[cd^XMemory fault (core dumped)
echo " [No automatic test for bug 18 - interactive]"
#
# 19. Everywhere
# Both of the following echos should produce the same thing, but don't:
# $ x=foo/bar
# $ echo ${x%/*}
# foo
# $ echo "${x%/*}"
# foo/bar
x=foo/bar
if [ "${x%/*}" != foo ] ; then
echo 'Bug 19 present: ${..%..} in double quotes broken'
fi
unset x
#
# 20. (same as 18)
#
#
# 21. Everywhere
# backslash does not work as expected in case labels:
# $ x='-x'
# $ case $x in
# -\?) echo hi
# esac
# hi
# $ x='-?'
# $ case $x in
# -\\?) echo hi
# esac
# hi
# $
case -x in
-\?) echo 'Bug 21 present: backslashes do not work in case patterns'
esac
#
# 22. Quoting backquotes inside backquotes doesn't work:
# $ echo `echo hi \`echo there\` folks`
# asks for more info. sh and at&t ksh both echo
# hi there folks
cat > $tfile << 'EOF'
echo `echo hi \`echo there\` folks`
EOF
out=`$THIS_KSH $tfile 2>&1`
if [ "$out" != 'hi there folks' ] ; then
echo 'Bug 22 present: quoting backquotes inside backquotes broken'
fi
rm -f $tfile
#
# 23. )) is not treated `correctly':
# $ (echo hi ; (echo there ; echo folks))
# missing ((
# $
# instead of (as sh and ksh.att)
# $ (echo hi ; (echo there ; echo folks))
# hi
# there
# folks
# $
cat > $tfile << 'EOF'
( : ; ( : ; echo hi))
EOF
out=`$THIS_KSH $tfile 2>&1`
if [ "$out" != 'hi' ] ; then
echo 'Bug 23 present: )) always assumed to be end of (( )) expr'
fi
rm -f $tfile
#
# 24. strangeness with file name completion involving symlinks to nowhere
# $ mkdir foo foo/bar
# $ ln -s /stuff/junk foo/bar/xx
# $ echo foo/*/xx 
# (beep)
# $
echo " [No automatic test for bug 24 - interactive]"
#
# 25. Check reading stdin in a while loop. The read should only read
# a single line, not a whole stdio buffer; the cat should get
# the rest.
#
(echo a; echo b) | while read x ; do
[ "$x" = b ] && echo 'Bug 25 present (read reads too much from pipe).'
cat > /dev/null
done
#
# 26a. Check reading stdin in a while loop. The read should read both
# lines, not just the first.
#
cat > $tfile << 'EOF'
a
b
EOF
cat > $sfile << 'EOF'
a=
while [ "$a" != xxx ] ; do
last=$x
read x
cat /dev/null | sed 's/x/y/'
a=x$a
done
if [ "$last" != b ] ; then
echo 'Bug 26 present (reading in a while loop broken).'
fi
EOF
$THIS_KSH $sfile < $tfile
rm -f $tfile $sfile
#
# 26b Check reading stdin in a while loop. The read should read both
# lines, not just the first. This differs from 26 in that lines
# are placed against the margin.
#
cat > $tfile << 'EOF'
ab
cd
EOF
cat > $sfile << 'EOF'
a=
while [ "$a" != xxx ] ; do
last=$x
read x
cat /dev/null | sed 's/x/y/'
a=x$a
done
if [ "$last" != cd ] ; then
echo "Bug 26b present (last line should be cd was $last.)"
fi
EOF
$THIS_KSH $sfile < $tfile
rm -f $tfile $sfile
#
# 27. Everywhere
# The command
# . /does/not/exist
# should cause a script to exit.
cat > $tfile << 'EOF'
. does/not/exist
echo hi
EOF
out=`$THIS_KSH $tfile 2> /dev/null`
if [ "$out" = hi ] ; then
echo "Bug 27 present: .'ing a non-existant file doesn't kill script"
fi
rm -f $tfile
#
# 28. Everywhere
# variable assignements not detected well
#
cat > $tfile << 'EOF'
a.x=1 echo hi
EOF
out=`$THIS_KSH $tfile 2> /dev/null`
if [ "$out" = hi ] ; then
echo "Bug 28 present: strange chars allowed in variables"
fi
rm -f $tfile
#
# 29. Everywhere
# alias expansion different from real ksh
#
cat > $tfile << 'EOF'
alias a='for ' b='i in'
a b hi ; do echo $i ; done
EOF
out=`$THIS_KSH $tfile 2> /dev/null`
if [ "$out" != hi ] ; then
echo "Bug 29 present: keyword in alias with trailing space doesn't work"
fi
rm -f $tfile
#
# 30. Everywhere
# strange characters allowed inside ${...}
#
cat > $tfile << 'EOF'
echo ${a{b}}
EOF
out=`$THIS_KSH $tfile 2> /dev/null`
if [ $? = 0 ] ; then
echo 'Bug 30 present: strange chars allowed inside ${..}'
fi
rm -f $tfile
#
# 31. Everywhere
# Does read handle partial lines correctly
#
cat > $tfile << 'EOF'
a A Aa
b B Bb
EOF
print -n 'c' >> $tfile
cat > $sfile << 'EOF'
a=
ret=
while [ "$a" != xxx ] ; do
read x y z
ret=$?
a=x$a
done
if [ "$x" != c ] ; then
echo 'Bug 31a present: read throws away partial lines'
fi
if [ "$ret" != 1 ] ; then
echo 'Bug 31b present: read does not return eof for partial lines'
fi
EOF
$THIS_KSH $sfile < $tfile 2> /dev/null
rm -f $sfile $tfile
#
# 32. Everywhere
# Does read set variables to null at eof?
#
cat > $tfile << 'EOF'
a A Aa
b B Bb
EOF
cat > $sfile << 'EOF'
a=
while [ "$a" != xxx ] ; do
read x y z
a=x$a
done
if [ -n "$x$y$z" ] ; then
echo "Bug 32 present: read does not set variables to null at eof"
fi
EOF
$THIS_KSH $sfile < $tfile
rm -f $sfile $tfile
#
# 33. Everywhere
# Does umask print a leading 0 when umask is 3 digits?
#
cat > $sfile << 'EOF'
umask 222
umask
EOF
out=`$THIS_KSH $sfile`
if [ X"$out" = X222 ] ; then
echo "Bug 33 present: umask doesn't always start with 0"
fi
rm -f $sfile
#
# 34. Everywhere
# Does umask print a umask of 0 sanely?
#
cat > $sfile << 'EOF'
umask 0
umask
EOF
out=`$THIS_KSH $sfile`
if [ X"$out" = X00 ] ; then
echo "Bug 34 present: umask prints 0 as \`$out'"
fi
rm -f $sfile
#
# 35. Everywhere
# Tempory files used for here-docs in functions get trashed after
# the function is parsed (before it is executed)
#
cat > $sfile << 'EOF'
f1() {
cat <<- EOF
F1
EOF
f2() {
cat <<- EOF
F2
EOF
}
}
f1
f2
unset -f f1
f2
EOF
out=`$THIS_KSH $sfile 2>&1`
expected='F1
F2
F2'
if [ X"$out" != X"$expected" ] ; then
echo "Bug 35 present: here documents in functions don't work"
fi
rm -f $sfile
#
# 36. Everywhere (test from <sjg@void.zen.oz.au>)
# Command substitution breaks reading in while loop
#
cat > $sfile << 'EOF'
(echo abcdef; echo; echo 123) |
while read line
do
# the following line breaks it
c=`echo $line | wc -c`
echo $c
done
EOF
out=`$THIS_KSH $sfile 2>&1`
expect='7
1
4'
if [ X"$out" != X"$expect" ] ; then
echo "Bug 36 present: reading broken by command substitution in while loops"
fi
rm -f $sfile
#
# 37. Machines with broken times() (reported by <sjg@void.zen.oz.au>)
# time does not report correct real time
#
out=`$THIS_KSH -c 'time sleep 1' 2>&1 | awk '
/^[ ]*0*\.0*s?[ ][ ]*real/ { print "bad" }
/^[ ]*real[ ][ ]*0*\.0*s?([ ]|$)/ { print "bad" }'`
if [ -n "$out" ] ; then
echo "Bug 37 present: time does not report real-time correctly"
fi
#
# 38. set -e doesn't ignore exit codes for if/while/until/&&/||/!.
#
out=`$THIS_KSH -e -c '
if false; then echo hi ; fi
false || true
false && true
while false; do echo hi; done
echo ok' 2>&1`
if [ X"$out" != Xok ] ; then
echo "Bug 38 present: set -e exits when it shouldn't"
fi
#
# 39. set -e: errors in command substitutions aren't ignored
#
out=`$THIS_KSH -e -c 'if test X\`false; echo hi\` = Xhi; then echo ok ; fi' 2>&1`
if [ X"$out" != Xok ] ; then
echo "Bug 39 present: set -e: errors in command substitutions not ignored"
fi

View File

@ -1,49 +0,0 @@
Fri Dec 3 21:39:47 1993 Piercarlo Grandi (pcg@aber.ac.uk)
* polished 4.9 for linux; corrected a terrible, linux
specific performance bug that caused all streams to
become unbuffered; made emacs.c more understandable.
With 4.9 pdksh is twice as fast and one third the size
of bash 1.13, and has most of the relevant functionality.
To me it is a drop-in replacement.
Sat May 8 15:55:24 1993 Simon J. Gerraty (sjg@zen.void.oz.au)
* Ported to 386bsd - sh directory only, stc/* not needed.
Sat Aug 1 17:11:24 1992 Simon J. Gerraty (sjg@zen)
* Incorporated massive contribution from Peter Collinson
Refer to Changes.pc
* Incorporated Emacs-style completion provided by
Neil.Smithline@eng.sun.com this a bit nicer than the standard ksh
file completion.
Sun May 3 17:50:03 1992 Simon J. Gerraty (sjg@zen)
* Updated MACHINES.
* Placed source under CVS. This should help with processing fixes
from the field.
Sat Apr 25 10:53:20 1992 Simon J. Gerraty (sjg@zen)
* Getting ready for 4.3 release.
Fri Nov 22 22:24:29 1991 Simon J. Gerraty (sjg at zen)
* Cleaned up the build process slightly. Makefiles in ./std tree
now maintain objects within the libraries rather than simply
building the .o's and archiving them. Of course the make(1) used
must know how to maintain libraries :-)
* Added bug.report as a template for bug reporting.
* Source in ./sh can be built independently of ./std tree if
desired. See comments in ./sh/Makefile.
* As originally distributed some of libstdc.a was not used and
libposix.a was not used at all. On Sun's this highlighted a bug
(incompatibility) in the times() call. Now the ./std/libs are
used fully, and the supplied times() call functions as expected.

View File

@ -1,61 +0,0 @@
Changes to the PD ksh since last time:
- clean up the option configuration stuff. Options in config.h should
now just be #define'd or not, not #define'd to 1 if you want them
and 0 if you don't
- ksh now uses the shell specified by the variable EXECSHELL to run
shell scripts. If EXECSHELL is unset or null it defaults to
/bin/sh. It does a path lookup on the value, so if you set it to
``ksh'' the ksh will run all scripts that don't start with #!. It
seems to run most sh scripts fine (now). I'd be very interested to
hear your experiences if you try this out, as for my next trick I'd
like to make ksh just fork itself to run scripts, which would speed
things up, and allow exportable functions and aliases (like he real
ksh). Just to assure you that it can do some hairy sh scripts, both
CC and coco work with ksh.
EXECSHELL won't work if the system's exec(2) call runs scripts...
- the ``let'' builtin now evaluates null or unset vars to 0, as per
The Book
- Various memory allocation/use problems were cleaned up. Hopefully
you'll never see the ``freeing free object'' error again (if you've
ever seen it).
- the ``test'' builtin is now much more tolerant in parsing its
arguments. This was to make it like the /bin/sh test.
- Temp files (for here documents or ``fc'') are now mode 0600
- Some format strings in the tree printing routines got ``expanded''
into SCCS keywords, so the results of``type <function>'' were
gave you interesting things like the time I last checked in the
file. This has been fixed.
- ``unset -f'' now really does unset functions.
- the ``trailing blank or tab in alias definition'' feature now works.
- A bug in command completion was fixed. Note command completion only
works on commands that have been hashed, so you want to ``set -h''
in your .kshrc, and you may wish to force hashing of some common
commands with the ``hash'' builtin.
- ``echo $$ | cat'' now works as in /bin/sh
Not new features, but newly discovered bugs:
- Local functions don't work correctly. This shouldn't be much
problem, since sh doesn't have them.
- Here documents in functions don't work. This is a problem with the
temp file allocation that requires more work to fix than I've gotten
around to doing. So avoid things like:
foo() {
cat <<- HereDoc
This is a test
HereDoc
}

View File

@ -1,44 +0,0 @@
I got the pd-ksh from John MacMillan after he indicated that he
had a version of it that had vi editing (I'd seen various versions
with emacs-editing, but none with vi).
It had a few bugs and areas which were not quite complete. I fixed
(or at least tried) to fix several; there are still some things
which I plan on doing (or at least looking into).
Bugs fixed (or at least abated):
vi-mode changes:
- Changed memcpy() to memmove(), which fixed the trashing of
the end of the edit buffer while inserting in the middle
of a line or with use of '#'
- using 'r' replacing the current character with ^@
- typing ctrl-c resulting in next command being garbled
- lack of support for '-' and '+' (pretty trivial)
- finish adding support for '*' (not entirely sure I'm freeing
malloc'ed memory correctly here, but I haven't had any problems)
- treats '_' as end of a word
general changes:
- reporting "not found" when a file actually doesn't have
the appropriate execute bit set (now says "cannot execute"
or "not found", as appropriate)
Still to do:
vi changes:
- fix ctrl-r (I've come up with a hack, but it involves
redrawing the screen a lot when it isn't necessary; I
really wouldn't consider this a fix)
- add support for 'v'
general changes:
- seems to be a memory leak when executing shells in the
current shell; repeatedly executing ". /etc/profile"
increased the size of the program as reported in the
"SZ" field of "ps -l"
- don't give a file its complete pathname in argv[0]; only
its filename (religious issue?)
- history recall should start at the previous command, not
the current one (typing "r r" causes an infinite loop)

View File

@ -1,28 +0,0 @@
Changes by Peter Collinson - Hillside Systems/BSDI - July 1992
a) Add select command - this cannot be ksh without that.
(It NEEDS typedefs too)
b) Remove all the bcopys from vi.c
add
#define memmove in sh.h for BSD systems
c) Add <Esc>* command to vi mode - expands to a list of files
using the menu printing routine
d) Add my version of history, that works much like the `proper' ksh
storing data in a file that is shared between different invocations
of the shell.
e) Add the ability to redirect to am expansion... ie
ls > o*
if o* is unique then it puts it into the file that matches
otherwise it puts it to a file called o*... this is current
behaviour.
f) Add alternations, from Csh.d) This is not part of ksh but is something
that csh users really miss from the Bourne shell derivatives. The idea
is that lists inside curly braces expand to arguments. ie.
exampl{a,b,c,d,e}
will expand to 5 arguments
exampla examplb examplc exampld example
Recursive lists are permitted.
g) Add suspend as a built-in alias.
h) Port to BSD/386 - add _POSIX_TERM and _BSDI as defines.

View File

@ -1,118 +0,0 @@
Public Domain Korn Shell
Version 4.9
PD KSH:
This is the latest version of the PD ksh (pdksh). It is not intended
to be the ultimate shell but rather a usable ksh work alike. For
those of us who have to work on multiple systems it is nice to have
the same user interface on all. I resisted moving to the ksh on a
System V machine where I worked, for nearly a year due to the lack of
a ksh on my Sun systems. When I first picked up the 3.2 PD KSH a
couple of years ago, it took only a few minutes to convert a C-shell
fan to a ksh fan :-) Pdksh is not 100% compatible with the ksh.
Having said that, I use it daily beside a real ksh88 and find them
virtually indistinguishable. With one exception - arrays! If some
one feels like adding arrays, I for one would appreciate it :-)
I only run this shell on sun's and BSD systems and only for
interactive use. I use it on sun4c, sun3, sun386 and 386bsd systems.
The shell itself has been compiled on the sun's both with and without
the POSIX/ANSI compatability libraries in ./std. I do not use ./std
for 386bsd and friends. See the file MACHINES for details of systems
that the shell has been built on.
I released version 4.0 of the shell (with the kind permission of
the previous maintainers and major contributors) to ensure that
it is available from usenet archive sites. Of course it remains
in the Public Domain. Equally obviously neither myself nor any
other contributors make any claims of suitability etc. Ie. NO
WARRANTY!!! If you make any changes and distribute them, please
leave your own finger prints in the source. Its bad enough
being flamed for my own bugs let alone anyone elses :-)
HISTORY:
This shell was written by Eric Gisin. It is based on Charles
Forsyth's public domain V7 shell, which he later contributed to
Minix. John R MacMillan picked up Eric Gisin's version after
Eric moved on to other projects (see ReadMe.jrm).
Since then there have been many contributors to this shell.
Most have left their fingerprints within the source and various
ReadMe.xxx and Changes.xxx files reflect their input.
This version is basically that known as Eric Gisin's version 3.3
alpha which I obtained indirectly from John R MacMillan who is
the most recent maintainer. This version has much improved
emacs-mode command line editing (my main contribution) plus
enough extra emacs-mode features to make it difficult to
distinguish from ksh88. Bug fixes from various contributors are
the only other changes from John MacMillan's version.
I have upped the version number for this release to distinguish
it from the original 3.3 version. This version is much improved
despite the small number of new features.
INSTALLATION:
The file INSTALL contains intructions for building and
installing the shell.
The original instructions indicated that a POSIX compliant
environment and possibly an ANSI compiler are required. I have
used both gcc and native Sun and the GreenHills ANSI compiler
without problems.
The POSIX/STDC compatability stuff in ./std seems to cause lots
of problems for some systems. This was at least in part because
I distributed it with half the librraies disabled :-), in any
case the shell itself in ./sh can now be compiled without any of
the ./std stuff which makes things much simpler on systems that
have a real POSIX environment.
Porting to new environemnts can be a real pain. I don't really
plan to make a huge effort in this area since I expect that this
shell will be mainly required on exotic or obscure systems (the
ones that the vendor does not provide a ksh for). Thus the
small "market" does not warrant a C-news or X11 style
portability effort. Of course if people send patches for
various systems I'm happy to try and integrate them.
ENVIRONMENT:
My main interest in this shell is for Sun workstations. Every
other UNIX system I use comes with a real ksh. Being a strictly
C-shell environment, some improved profile files are in order on
Sun's.
The etc directory contains a set of useful environment files.
These are the same files I use on several systems (many use a
real ksh):
./etc/profile
./etc/sys_config.sh
./etc/ksh.kshrc
The first one is obvious. The second, sys_config.sh is sourced
by /etc/profile and several other scripts. It is used to
determine the system type so that scripts like profile can be
used on multiple platforms.
The third one is also quite useful, add
. /etc/ksh.kshrc
to user's ~/.kshrc to simplify alias management.
BUGS:
Many folk have contributed to this shell.
I have attempted to credit (in sh/ChangeLog) the authors of bug
fixes received since the previous release.
There are surely still plenty of bugs to be found/fixed.
There is a template bug report in bug-report [borrowed from the
X11R5 mit tree], just fill in the blanks and mail to
pdksh-bug@zen.void.oz.au.
I hope you find this shell as useful as I do...
Simon J. Gerraty <sjg@zen.void.oz.au>

View File

@ -1,46 +0,0 @@
Public Domain KornShell
Quick installation notes for PD KornShell
PD KornShell can be installed on 4.2+ BSD systems, System V, and
POSIX-compatable systems. The makefiles all define _BSD, change
this to _SYSV, or _POSIX. The makefiles also contain CC=gcc,
delete this if you don't have GNU C. The ksh makefile also
contains some options, including JOBS (BSD/POSIX job control)
and EDIT (emacs command editing).
PD KornShell assumes you have standard C (ANSI) and POSIX header
files and functions. Since you probably don't, they are provided
in the "std" directory.
The Alpha test version will probably come as two tar files.
std.tar contains standard C and POSIX emulation and must be
extracted into a directory called std. ksh.tar contains the ksh
source and should be extracted into a directory called src or
ksh.
See std/ReadMe and install it. Only then can you make ksh in the
"src" directory.
To clear up questions about the origin of this shell, this shell
is NOT based on the "Minix shell". It is based on Charles
Forsyth's public domain V7 shell, which he later contributed to
Minix.
I have permission directly from Charles Forsyth to use his shell.
Eric Gisin, egisin@math.UWaterloo.CA (or Waterloo.EDU)
Things to do
- add sxt-based job control (see Brown's contribution on the Usenix 87 tape).
- add arrays and variable attributes.
- add MAILPATH and CDPATH.
- add vi editing mode (apparently someone has a PD version).
- add new features described in Korn's book.
Machines ported to
VAX, 68000, 80386
OS's ported to
BSD 4.2, BSD 4.3 (with and without YP and NFS
Sys V.3

View File

@ -1,88 +0,0 @@
HORIZONTAL SCROLLING
====================
I have migrated my 3.2 ksh edit.c mods into the 3.3 ksh
This file describes the mods in general and really only applies
(at this stage) to emacs-mode. I have not touched vi-mode apart
from making it use pprompt() so that '!' is correctly expanded
as in emacs-mode.
I would prefer to see both vi.c and emacs.c use a common set of
primatives in edit.c - but that looks like a lot of work.
Basically my mods affect the functions that move the cursor
about and redraw the edit line.
The input buffer "buf" is pointed to by "xbuf" and its end is
pointed to by "xend". The current position in "xbuf" and end of
the edit line are pointed to by "xcp" and "xep" respectively.
I have added "xbp" which points to the start of a display window
within "xbuf".
[A] starting position
buf
|<-------- $COLUMNS --------->|
| |<---- x_displen ------->|
| PS1|
+==========+==============--------+.......+
|\ \ \ \
xbuf xbp xcp xep xend
[B] scrolled
buf
| |<----- COLUMNS -------->|
| |<----- x_displen ------>|
|
+-----------+==========+==============--------+.......+
\ \ \ \ \
xbuf xbp xcp xep xend
In the above -------- represents the current edit line while
===== represents that portion which is visible on the screen.
Note that initially xbp == xbuf and PS1 is displayed.
PS1 uses some of the screen width and thus "x_displen" is less
than $COLUMNS.
Any time that "xcp" moves outside the region bounded by "xbp"
and "xbp" + "x_displen", the function x_adjust() is called to
relocate "xbp" appropriately and redraw the line.
Excessive I/O is avoided where possible. x_goto() for instance
calculates whether the destination is outside the visible
region, and if so simply adjusts "xcp" and calls x_adjust()
directly. Normally though x_adjust() is called from x_putc().
The above mechanism has be updated to use a function x_lastcp()
that returns a pointer that accurately reflects the last
visible char in the edit buffer. That is a more accurate
version of xbp + x_displen which does not account for TABS.
Other changes
=============
I have also added some emacs mode functions.
M-[0-9]
Set a numeric arg (positive only).
Used by all word related commands.
M-_
M-.
Retrieve word from previous command (default is last
word). Use M-[1-9] to select word.
M-u
M-l
M-c
UPPER,lower,Capitalize word.
Commands like delete-word now push the deleted text so that it
may be yanked back into place.
BUGS?
=====
There are bound to be some. Please report same to me:
Simon J. Gerraty <sjg@zen.void.oz.au>

View File

@ -1,118 +0,0 @@
BUILDING THE PD KSH
===================
As usual, there are differences between BSD and System V
versions. Ideally, all you have to do is edit the Makefile in
this directory to set the CONFIG macro to the appropriate value.
(Actually, you may wish to change the CONFIG macro in all
Makefiles; if you always invoke make(1) from here, CONFIG will
be passed down, but if you invoke make(1) from a subdirectory
you'll want the appropriate definition in that Makefile.)
Of course it's not quite that simple. You may, however, take
solace in the knowledge that it used to be worse.
The Compatibility Libraries
---------------------------
Eric Gisin wrote this shell using ANSI C and POSIX as
portability guidlines. Realizing that nobody had a POSIX
system and almost no one had an ANSI C environment, he provided
minimal compatibility libraries.
There are two libraries, one for POSIX (libposix.a) and one for
ANSI C (libstdc.a).
Libposix.a is pretty simple. Nothing in it has ever broken on
me, so I'd just leave it. It provides a version of dup2() for
System V systems.
Libstdc.a is a bit hairy. I recommend looking at the routines
provided and, and editing the std/stdc Makefile and only
including objects that have routines your system libc.a is
lacking. Various of the provided routines are just plain
flaky, but only when they're not really needed. The other
hairy thing he does is craft an ANSI stdio.h from the system
supplied one and one of his own. Again, it's better than it
used to be, but it's still a hack, and you may have to modify
it by hand.
You will also need a POSIX compatible set of directory reading
routines. System V.3 systems have this in libc.a. The
std/posix directory provides a something for BSD systems. I
use a slightly modified version of Doug Gwyn's PD version.
(The ``slightly modified'' is to work around a bug in Gwyn's version.
The POSIX routines are documented as returning failure if the file for
opendir(3) is not a directory. Gwyn attempts to open(2) the file, and
then stats it to see if the file is a directory. However, if the file
is a special file, and the open(2) doesn't return, you're screwed. My
change was to open the file with the O_NDELAY flag, but Gwyn didn't
feel this was portable (true, but I only do it where it works) and
that stat-ing before the open would be too slow (true). The upshot is
if you use his routines unmodified, don't ever do an "ls -l /dev/*/*".)
The Shell Source
----------------
The source for the shell itself is in the sh directory. There you
will want to edit config.h to determine the configuration options. Vi
mode is in kind of rough shape, but does work. DIRSTACK routines
aren't implemented yet, so again, why bother. SWTCH is a bit arcane,
but it you use shl(1) and you define EMACS or VI you want to define
this. JOBS is really only useful on BSD systems. It might work on
systems that have POSIX job control, but I wouldn't bet on it.
SHARPBANG is only useful on systems where the exec() family don't
honour the #!/prog/path convention.
This is where the shell gets built so you may wish to change
the OTHERLIBS macro in the Makefile to point to your POSIX
directory routines, or to use -lc_s, or whatever.
Miscellaneous
-------------
The Makefiles that actually compile things use the macro
CCOPTS, so you can change it in individual Makefiles or specify
it on the command line, eg. "make CCOPTS=-O OTHERLIBS=-lc_s".
LDOPTS is used in the Makefile where the ksh is actually built.
The very first time on a new system, do a "make clobber"
Good luck.
Documentation
-------------
The ksh.1 is a man page for the PD ksh, although it lags
somewhat behind the code. You get what you pay for.
The ksh88.1 is a man page for AT&T's ksh88 (the latest version)
provided for comparison.
History
-------
Much of the shell was written by Eric Gisin at the University
of Waterloo, using some pieces of other stuff, notably Charles
Forsythe's V7 shell, and some enhancements from the BRL shell.
He placed it (in a alpha test state) into the public domain
while I was at UW. I snarfed a copy, and got it running on my
UNIXpc, and later some machines at work. I sent Gisin some bug
reports, but he seems to have lost interest in the project.
This may be because he now does some work for MKS, who produce a
commercial version of the ksh for MS-DOS machines, so there may
be a conflict of interest.
So I gave up on getting future versions, and adopted it. I've
made some enhancements, and quite a few bug fixes, and various
people at work have contributed as well. It remains in the
public domain, although I imagine the people involved would
appreciate leaving their names attached (I'm exempt; I haven't
actually included my name anywhere but here).
The README in the sh directory is Gisin's, and tells a bit of
the story from his point of view. Note that his compilation
instructions don't really apply anymore.
John R. MacMillan

View File

@ -1,35 +0,0 @@
#!/bin/sh
# Make directory hierarchy.
# Written by Noah Friedman <friedman@prep.ai.mit.edu>
# Public domain.
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
errstatus=0
for file in ${1+"$@"} ; do
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${file} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
for d in ${1+"$@"} ; do
pathcomp="${pathcomp}${d}"
if test ! -d "${pathcomp}"; then
echo "mkdir $pathcomp" 1>&2
mkdir "${pathcomp}" || errstatus=$?
fi
pathcomp="${pathcomp}/"
done
done
exit $errstatus
# eof

44
mkman
View File

@ -1,44 +0,0 @@
#!/bin/sh
verbose=no
if [ X"$1" = X-v ] ; then
verbose=yes
shift
fi
if [ $# != 2 ] ; then
echo "Usage: $0 [-v] which-shell ksh.Man-file" 1>&2
exit 1;
fi
shell=$1
man=$2
case $shell in
sh) which=0;;
ksh) which=1;;
*)
echo "$0: bad shell option (must be sh or ksh)" 1>&2
exit 1
;;
esac
if [ ! -r "$man" ] ; then
echo "$0: can't read $man file" 1>&2
exit 1;
fi
#
# Now generate the appropriate man page...
#
[ $verbose = yes ] && echo "$0: Generating $which man page (0=sh,1=ksh)..." 1>&2
awk 'BEGIN { ksh = '$which'; pr = 1 }
/^\.sh\(/ { pr = ksh - 1; next }
/^\.sh\)/ { pr = 1; next }
/^\.ksh\(/ { pr = ksh; next }
/^\.ksh\)/ { pr = 1; next }
{ if (pr) print $0 } ' < $man
[ $verbose = yes ] && echo "$0: All done" 1>&2
exit 0

View File

@ -1,75 +0,0 @@
#!/bin/sh
#
# Update the date in the version file (version.c). If the existing
# date is todays date, a .number is apprended (or incremented) to
# make them distinct.
# Also update the version number and date in tests/version.t and ksh.Man.
#
# pattern that matches the date in the version string in version.c
# \1 is preamble (@(#)PD KSH ),
# \2 is the version (v1.2.3 ),
# \3 is the date (99/03/21.3),
# \4 is postamble (...)
# (use ? pattern delimiters).
DATEPAT='\(.*@(#).* \)\(v[.0-9]* \)\([0-9]*/[0-9]*/[.0-9]*\)\(.*\)'
vfile=version.c
vfiles="version.c tests/version.t ksh.Man"
version=`sed -n "s?$DATEPAT?\2?p" < $vfile`
odatev=`sed -n "s?$DATEPAT?\3?p" < $vfile`
odate=`echo "$odatev" | sed 's?\..*??'`
ov=`echo "$odatev" | sed 's?[^.]*\.*??'`
date=`date '+%y/%m/%d' 2> /dev/null`
case "$date" in
[0-9]*/[0-9]*/[0-9]*) ;;
*)
# old system - try to compensate...
date=`date | awk 'BEGIN {
months["Jan"] = 1; months["Feb"] = 2; months["Mar"] = 3;
months["Apr"] = 4; months["May"] = 5; months["Jun"] = 6;
months["Jul"] = 7; months["Aug"] = 8; months["Sep"] = 9;
months["Oct"] = 10; months["Nov"] = 11; months["Dec"] = 12;
} {
if (months[$2])
mon = sprintf("%02d", months[$2]);
else
mon = $2;
printf "%02d/%s/%02d\n", $6 % 100, mon, $3;
}'`
esac
if test x"$odate" = x"$date"; then
v=".$ov"
if test -z "$ov" ; then
v=1
else
v=`expr $ov + 1`
fi
date="$date.$v"
fi
for i in $vfiles; do
bfile=$i.bak
tfile=$i.new
# try to save permissions/ownership/group
cp -p $i $tfile 2> /dev/null
if sed "s?$DATEPAT?\1$version$date\4?" < $i > $tfile; then
if cmp -s $i $tfile; then
echo "$i not changed, not updating"
rm -f $tfile
else
rm -f $bfile
ln $i $bfile || exit 1
mv $tfile $i || exit 1
fi
else
echo "$0: error creating new $i" 1>&2
exit 1
fi
done
exit 0

View File

@ -1,323 +0,0 @@
#
# OS2_Makefile
#
srcdir = .
VPATH = .
CC = gcc
CPP = cpp
INSTALL = /bin/install -c
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL) -m 644
DEFS = -DHAVE_CONFIG_H
LIBS = -los2
CPPFLAGS =
CFLAGS = -O -DOS2
LDSTATIC =
LDFLAGS = -O -s $(LDSTATIC)
SHELL_PROG = ksh
prefix = c:/usr
exec_prefix = c:/usr
transform=@program_transform_name@
bindir = $(exec_prefix)/bin
mandir = $(prefix)/man/man$(manext)
manext = 1
# Suffix for executables: nothing for unix, .exe for os/2.
exe_suffix=.exe
SHELL = sh
SRCS = alloc.c c_ksh.c c_sh.c c_test.c c_ulimit.c edit.c emacs.c \
eval.c exec.c expr.c history.c io.c jobs.c lex.c mail.c \
main.c misc.c missing.c path.c shf.c sigact.c syn.c table.c trap.c \
tree.c tty.c var.c version.c vi.c
OBJS = os2.o alloc.o c_ksh.o c_sh.o c_test.o c_ulimit.o edit.o emacs.o \
eval.o exec.o expr.o history.o io.o jobs.o lex.o mail.o \
main.o misc.o missing.o path.o shf.o sigact.o syn.o table.o trap.o \
tree.o tty.o var.o version.o vi.o
HDRS = c_test.h edit.h expand.h ksh_dir.h ksh_limval.h ksh_stat.h ksh_time.h \
ksh_times.h ksh_wait.h lex.h proto.h sh.h shf.h sigact.h \
table.h tree.h tty.h
DISTFILES = $(SRCS) $(HDRS) ksh.Man Makefile.in configure.in \
config.h.in conf-end.h acconfig.h aclocal.m4 emacs-gen.sh \
mkinstalldirs install-sh new-version.sh siglist.in siglist.sh mkman \
check-fd.c check-pgrp.c check-sigs.c \
README NEWS CONTRIBUTORS LEGAL PROJECTS INSTALL NOTES BUG-REPORTS \
IAFA-PACKAGE ChangeLog ChangeLog.0 configure stamp-h.in
# ETCFILES also disted, but handled differently
ETCFILES = etc/ksh.kshrc etc/profile etc/sys_config.sh
# MISCFILES also disted, but handled differently
MISCFILES = misc/ChangeLog.sjg misc/Changes.jrm misc/Changes.mlj \
misc/Changes.pc misc/README.sjg misc/ReadMe.eg misc/ReadMe.emacs \
misc/ReadMe.jrm misc/Bugs
# TESTFILES also disted, but handled differently
TESTFILES = tests/README tests/th tests/th-sh tests/alias.t tests/arith.t \
tests/bksl-nl.t tests/brkcont.t tests/cdhist.t tests/eglob.t \
tests/glob.t tests/heredoc.t tests/history.t tests/ifs.t \
tests/integer.t tests/lineno.t tests/read.t tests/regress.t \
tests/syntax.t tests/unclass1.t tests/unclass2.t \
tests/version.t
# OS2FILES also disted, but handled differently
OS2FILES = os2/Makefile os2/config.h os2/config.status os2/configure.cmd \
os2/emacs.out os2/kshrc.ksh os2/make.sed os2/os2.c os2/os2siglist.out \
os2/README.os2 os2/NEWS.os2 os2/os2bugs os2/th.cmd os2/config.cache
all: $(SHELL_PROG)$(exe_suffix) $(SHELL_PROG).1
# This shouldn't be first - some makes don't know about PRECIOUS and assume it
# is the default target.
.PRECIOUS: configure config.h.in Makefile config.status
.c.o:
$(CC) -c $(CPPFLAGS) $(DEFS) -I. -I$(srcdir) $(CFLAGS) $<
install: installdirs all
$(INSTALL_PROGRAM) $(SHELL_PROG)$(exe_suffix) $(bindir)/$(SHELL_PROG)$(exe_suffix)
-$(INSTALL_DATA) $(SHELL_PROG).1 $(mandir)/$(SHELL_PROG).$(manext)
-@prog=$(bindir)/$(SHELL_PROG)$(exe_suffix);\
test -f /etc/shells \
&& (grep "^$$prog\$$" /etc/shells > /dev/null \
|| echo \
"NOTE: /etc/shells does not contain $$prog \
you should add it if you want to set your shell to $(SHELL_PROG)")
installdirs:
$(srcdir)/mkinstalldirs $(bindir) $(mandir)
uninstall:
rm -f $(bindir)/$(SHELL_PROG)$(exe_suffix)
rm -f $(mandir)/$(SHELL_PROG).$(manext)
check test:
th.cmd $(srcdir)/tests/th -s $(srcdir)/tests -p ./$(SHELL_PROG)$(exe_suffix) -C pdksh,sh,ksh,posix,posix-upu $(TESTARGS)
$(SHELL_PROG)$(exe_suffix): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
# two steps to prevent the creation of a bogus tmpksh.1
$(SHELL_PROG).1: $(srcdir)/ksh.Man
$(srcdir)/mkman $(SHELL_PROG) $(srcdir)/ksh.Man > tmpksh.1
mv tmpksh.1 $(SHELL_PROG).1
info:
@echo "No info (yet)"
dvi:
$(srcdir)/configure: configure.in aclocal.m4
cd $(srcdir) && autoconf
$(srcdir)/config.h.in: stamp-h.in
$(srcdir)/stamp-h.in: configure.in aclocal.m4 acconfig.h
cd $(srcdir) && autoheader
date > $(srcdir)/stamp-h.in
config.h:
cmd /c copy $(srcdir)\os2\config.h config.h > nul
touch config.h
Makefile:
cmd /c copy $(srcdir)\os2\Makefile Makefile > nul
touch Makefile
# two steps to prevent the creation of a bogus siglist.out
siglist.out:
cmd /c copy $(srcdir)\os2\os2siglist.out siglist.out > nul
touch siglist.out
# two steps to prevent the creation of a bogus emacs.out
emacs.out:
cmd /c copy $(srcdir)\os2\emacs.out emacs.out > nul
touch emacs.out
debugtools: check-fd$(exe_suffix) check-sigs$(exe_suffix) \
check-pgrp$(exe_suffix)
check-fd.o check-pgrp.o check-sigs.o: config.h
check-fd$(exe_suffix): check-fd.o
$(CC) $(LDFLAGS) -o $@ check-fd.o $(LIBS)
check-pgrp$(exe_suffix): check-pgrp.o
$(CC) $(LDFLAGS) -o $@ check-pgrp.o $(LIBS)
check-sigs$(exe_suffix): check-sigs.o
$(CC) $(LDFLAGS) -o $@ check-sigs.o $(LIBS)
TAGS: $(SRCS) $(HDRS)
cd $(srcdir) && etags $(SRCS) $(HDRS)
tags: $(SRCS) $(HDRS)
cd $(srcdir) && ctags -wt $(SRCS) $(HDRS)
clean:
rm -f ksh$(exe_suffix) sh$(exe_suffix) ksh.1 sh.1 $(OBJS) siglist.out \
emacs.out core a.out mon.out gmon.out \
version.c.bak Makefile.bak Makefile.tmp check-fd$(exe_suffix) \
check-pgrp$(exe_suffix) check-sigs$(exe_suffix)
mostlyclean: clean
distclean: clean
rm -f Makefile config.h stamp-h config.status config.log config.cache \
tags TAGS *~
realclean: distclean
dist: $(DISTFILES) $(ETCFILES) $(MISCFILES) $(TESTFILES) $(OS2FILES)
cd $(srcdir) && \
{ \
./new-version.sh; \
FNAME=pdksh-`sed -e '/"@(.)/!d' \
-e 's/[^0-9]*\([0-9.]*\).*/\1/' -e q version.c`; \
if test `echo $$FNAME|tr . ' '|wc -w|sed 's/[ ]*//g'` -gt 3; \
then \
FNAME=`echo $$FNAME | sed 's/pdksh-/pdksh-unstable-/'`; \
fi; \
echo Creating version $$FNAME; \
rm -rf $$FNAME; \
mkdir $$FNAME $$FNAME/etc $$FNAME/misc $$FNAME/tests $$FNAME/os2; \
cp -p $(DISTFILES) $$FNAME; \
cp -p $(ETCFILES) $$FNAME/etc; \
cp -p $(MISCFILES) $$FNAME/misc; \
cp -p $(TESTFILES) $$FNAME/tests; \
cp -p $(OS2FILES) $$FNAME/os2; \
./emacs-gen.sh emacs.c > os2/emacs.out; \
test -x ./Dist-fixup && ./Dist-fixup $$FNAME; \
sed -f os2/make.sed < $$FNAME/Makefile.in > $$FNAME/os2/Makefile; \
chmod -R a+rX,u+w,og-w $$FNAME; \
tar chzf $$FNAME.tar.gz $$FNAME; \
find $$FNAME -print | xargs pathchk -p; \
}
depend: $(SRCS)
sed -n '1,/[ ]PUT ANYTHING BELOW THIS LINE/p' < Makefile > Makefile.tmp
srcs=; for i in $(SRCS) ; do srcs="$$srcs $(srcdir)/$$i"; done; \
$(CC) -M $(DEFS) -I. -I$(srcdir) $(CFLAGS) $$srcs | \
sed -e 's?[ ]/[^ ]*??g' -e 's?[ ]./? ?g' \
-e 's?[ ]$(srcdir)//*? ?g' -e 's?^$(srcdir)//*??' \
-e '/^[ ]*\\[ ]*$$/d' -e '/^[^:]*:[ ]*$$/d' \
-e 's/^\([ ]*\)$$/ sh.h/' \
>> Makefile.tmp
mv Makefile.tmp Makefile
@echo 'Make depend done (stopping make)'; false
# DON'T PUT ANYTHING BELOW THIS LINE (and don't delete it - its for make depend)
alloc.o: alloc.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
c_ksh.o: c_ksh.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h \
sh.h
c_sh.o: c_sh.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_time.h \
ksh_times.h \
sh.h
c_test.o: c_test.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h c_test.h
c_ulimit.o: c_ulimit.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_time.h \
sh.h
edit.o: edit.c config.h conf-end.h sh.h \
shf.h table.h tree.h expand.h lex.h \
proto.h tty.h \
edit.h \
ksh_stat.h
emacs.o: emacs.c config.h conf-end.h sh.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_dir.h \
edit.h emacs.out
eval.o: eval.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
ksh_dir.h \
ksh_stat.h
exec.o: exec.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h c_test.h \
ksh_stat.h
expr.o: expr.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
sh.h
history.o: history.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h
io.o: io.c \
sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h
jobs.o: jobs.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_wait.h \
ksh_times.h ksh_time.h \
tty.h \
sh.h
lex.o: lex.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
sh.h
mail.o: mail.c config.h conf-end.h sh.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_time.h \
sh.h
main.o: main.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_time.h \
sh.h
misc.o: misc.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
sh.h
missing.o: missing.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_dir.h \
ksh_time.h \
ksh_times.h \
sh.h
path.o: path.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h
shf.o: shf.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h ksh_limval.h \
sh.h
sigact.o: sigact.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
syn.o: syn.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h c_test.h
table.o: table.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
trap.o: trap.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h siglist.out
tree.o: tree.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
tty.o: tty.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_stat.h tty.h \
sh.h
var.o: var.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h ksh_time.h \
ksh_limval.h \
ksh_stat.h \
sh.h
version.o: version.c sh.h config.h conf-end.h \
shf.h table.h tree.h expand.h lex.h \
proto.h
vi.o: vi.c config.h conf-end.h sh.h \
shf.h table.h tree.h expand.h lex.h \
proto.h \
ksh_stat.h edit.h

View File

@ -1,106 +0,0 @@
Version 5.2.6
1. The bug where hereis documents would leave temporary files behind has
been fixed.
2. Changed extension search order to place .exe files ahead of files with
no extension. This permits the gcc option -Zexe to work properly,
however it causes some limitations. Should this be a problem then I will
have to detect and ignore zero length files without an extension as a
special case for gcc. I would prefer not to do this.
3. Increased the number of file descriptors available to 40. This corrects
a problem that showed up on some warp connect systems.
4. Allowed any extension to be used for a script so long as the user
explicitly types it in.
Version 5.2.4
1. You can now open multiple files in a script, i.e. exec works. Some
better checking could still be done.
2. A bug in reading input files where data was getting shifted around
has been fixed. (forced binary mode to emx a number of places for input.)
3. Directories with same name as executables will no longer cause an error.
4. OS2 cmd processing of extproc header line only passes the file name
to the spawned process instead of the full pathname. This is a bug
in os2 IMHO since if you explicitely want a certain path for the
command you cannot guarantee it. A change was made to search the
path within ksh to permit this processing to work. Note that the
copy ksh finds might not be the one you wanted but at least you can
copy your cmd files around without having to modify them. A side
effect of this change is that typing: "ksh whatis" will now search
your path as well which does change the standard behavior of ksh.
5. #! processing will now search for the shell using the explicit path
and if not found then it will use the path variable.
Most of you won't notice any difference since the shell will still
be found but if you needed a particular one then this can be done.
Note that if you only want a particular pathname use "\"'s in the path.
6. Ksh will now honor the advertised EXECSHELL variable if it is set
instead of OS2_SHELL as the shell to be used if there is no
#! or extproc line in the file. The difference is EXECSHELL will not
have any options supplied while OS2_SHELL will automatically get
/c and the pathname will have '\' as the directory separator.
OS2_SHELL will still be used if EXECSHELL is not set.
7. A new option to print, -f, has been added for os2 users. It will
force forward slashes. It is useful when trying to massage an
environmental variable containing backslashes using something like
sed which always interpretes backslashes as escapes. There is
and example of this in the new kshrc.ksh that I have included.
8. Working with os2 variables can be a pain try to escape all of the ';'s
so I have supplied some new functions in the kshrc.ksh. Please
checkout add_path, pre_path, and del_path. These functions will
append a path, prepend a path, or delete a path from the variable
you specify, PATH by default. These are modification of the
samples shipped with the unix pdksh startup files.
9. The echo output and other outputs from ksh now use forward slashes
and in general forward slashes will be seen more often than before.
Backslashes will still be accepted on input and command line
completion but it was too painful to try and preserve the os2 look
for output and permit Unix scripts to work. If you prefer the
old method change the variable DIRSEP in sh.h and rebuild.
10. A bug requiring all command extensions to be in lower case was
fixed. This showed up most often in the setting of OS2_SHELL.
11. os2/configure will now set up to build either ksh or sh.
Version 5.2.2
o OS2 executable can be built directly from original sources! No patches
required. Just unload, cd to source directory, run os2\configure, and
then make (v3.73 minimum), nmake, or dmake.
o Built on emx09a. (513 was built on 08.)
o Now uses full signal processing from emx. Previous version used fake
signals. Better and more accurate signal status.
o TMPDIR variable can now point to a another drive. Which can be a FAT
drive.
o Improved case folding in vi mode for file name matches.
o Vi mode can now use cursor keys if desired. (Like emacs mode)
o Both vi and emacs mode now get a set of default stty settings. ^C
and ^U should now work during command line editing.
o #!/bin/sh and similar lines at the top of scripts are now stripped
of pathname prefixes permitting use of standard OS2 search paths.
This should permit better shell script portability.
o case statement variable usage is now case sensitive. Also applies
to several other variable constructions.
o Now accepts .sh as an executable extension.
o All commands that start a new window are automatically backgrounded.
o ksh can usually be made to grok gnu configure scripts but the results
are still very script dependant. See the readme.os2 for details.
Version 5.1.3
This was the original version 5 release based on an earlier port of
4.9 by Kai Rommel.

View File

@ -1,498 +0,0 @@
OS/2 port of pdksh version 5
June, 1996
Introduction
This document is intended to define the specific features and
differences in the os/2 port of pdksh. For general features and
descriptions of pdksh itself please refer to the standard pdksh README
or the man page. In general the port has tried to maintain as many of
the standard ksh features as possible. For installation details and
an introduction to ksh please read the README.1st file shipped in the
run time zip package for os2.
A default build of pdksh, called ksh.exe, is included in the os2
run time package. This version was built using the emx environment and
therefore requires that an emx run time package 0.9b or later be
installed on the system. This is not normally a problem since you
probably already installed it for 'ls' and other Unix commands from
the file gnufutil.zip. (If you haven't install gnufutil.zip you may
want to consider it.)
Building KSH.EXE
If you would rather build your own, you should obtain the sources from
ftp.cs.mun.ca in the directory pub/pdksh. You will need a copy of tar
and gunzip to unload the archive and install on an hpfs partition. Change
to the source directory and run the script os2\configure.cmd. (If you
prefer you can copy configure.cmd to the source directory.) This will
prepare the build environment so that your version of make can be used
to build the executable. Note that configure.cmd is still under
construction and you may need to make changes to the Makefile and to
config.h to match your specific needs. Copies of all of these files
will be placed into the source directory. In addition you may want to
make changes to config.h to define your particular preferences.
Configure.cmd for os2 support these optional options and arguments:
/h | /? | -h Print a usage message and exit.
/v | -v Print verbose output during configure
/d | -d build a debug version with symbols (for gcc)
sh build sh rather than ksh
Any configuration other that the default requires that sed be in your
search path. You should always get a copy of the latest pre-built version
of ksh as well since the file os2bugs may contain some last minute fixes
that were too late to include in the formal release, and you may find some
other updates. In addition the run time version supplies a couple of
sample icons for use with ksh.
At this point you can use your favorite make command to build the
executable. Pdksh is known to work with nmake and dmake, gnu make requires
at least version 3.7.3 and is the only one that will automatically make the
man page. You can manually run mkman after starting your new copy of ksh,
'ksh mkman ksh|sh ksh.man'. (A prebuilt sh and expanded cat version of
ksh.1 is included in the rt package.)
There is a built in check routine that is part of the makefile. Type
'make check' to run it. This routine needs a copy of perl on your
machine in order to support the test harness used to test the build. I
have built the infrastructure into the port to support this checking but
have not been able to get it all to run correctly yet. The problem is
because of a bug in the os2 port of ksh. To check the build without using
perl, run the command: 'ksh Bugs ksh'. This will use the older checking
facility. You should run this if you make any changes to the source to
insure that you haven't broken something crucial. Run make check on an
unmodified version first so that you will know what to expect. If you
want to get the perl version running please contact me for information.
KSH 5 VERSUS KSH 4.9
The KSH version 5 effort is being spearheaded by Michael Rendell. Michael
took over the effort from Simon J. Gerraty who maintained the version 4
code. While the version 4 code was a good implementation of ksh
version 5 strives to continue the conformance to the actual posix
definitions and to AT&T ksh.
For my version 5 port to os/2, I originally started with the 4.9 os/2
changes and applied them to the new version. Subsequently many changes
have been made so that there is little resemblance to that version.
One of my goals for version 5 is to make ksh not only and interactive
shell, but one that can run some limited Unix(tm) shell scripts as well.
Generally the two shells behave the same. Version 5 has no logout script
(This can be set up using a trap in your profile.ksh file if desired.) and
the option 'hashall' has been replaced with 'trackall'. (To see all of the
options use the command 'set -o'.) In addition the prompt has been changed
to conform with the at&t ksh shell instead of the csh like implemetation of
version 4. The '!' sign is used for the history number and $variable
substitutions can be used in the prompt. The commands generally behave more
consistently. For example bind now goes to standard out so it can be
redirected or piped. Arrays are now implemented as are almost all AT&T ksh
features plus a few more. The os/2 port provides file name completion that
is not case sensitive. The startup file kshrc.ksh is still supported, but
the way it works is slightly different.
OS2 IMPLEMENTATION VS. UNIX
The original OS/2 port was done by Kai Uwe Rommel. I have re-implemented
his ideas in this os/2 version. The os/2 version of ksh has been modified
to accept the standard os/2 conventions. Drive designations a:, etc., are
accepted and path separators in variables have been changed to ';'. In
addition either '/' or '\' can be used as a directory separator. The bind
command in emacs mode has been enhanced to accept function key and alt key
bindings. (To see what the alt key binding should be, use ^Q followed by
the key you are interested in. Replace the ^ alpha you see with ^0, typed
as two characters, in the bind command.) The cursor keys have been
implemented for command history for both emacs mode and vi insert mode.
Standard default stty settings are implemented for both modes as well.
A os2 only print option, -f, can be used to force forward slashes in its
argument. This can be used to switch a variable containing '\' to
output '/' in a pipe to a unix command that doesn't like '\' as a path
separator, such as sed.
/ vs. \ processing
The remapping of certain keys can lead to some confusion for Unix and OS/2
users. The '\' key has a different meaning in Unix where it is used
to escape a special meaning for the character following it or in the
case of the echo (typeset) command it provides special meanings to
certain characters. At the end of a line the '\' is used to escape the
line feed permitting a command to extend to multiple lines. In OS/2
this key is generally the directory name separator. To provide for
both functions in the OS/2 pdksh the '\' is defined to be a directory
separator in any pathname specification and will keep its escape
meaning when it is followed by any non-alphanumeric character. The
echo command retains its special interpretation of '\' and will, for
example, interpret \t as a tab when printing. This can be
disconcerting when you echo the variable that you just set to c:\tmp.
If you want to use echo on a variable with pathnames in it you should
either use uppercase names or a '/' as a separator. Another choice is
to alias echo to 'print -r' or perhaps 'echo -E'. This will disable
the special interpretaions. You could even use the new 'print -f' to
force any '\' to switch to '/', but this is less portable. If you have
loaded the printenv command it can be used to look at variables.
Unix uses '/' as a directory separator and the OS/2 implementation
permits and in some cases prefers this use as well. Generally you
can freely mix '/' and '\' characters in a pathname. However, 'cd \'
will not complete since '\' will escape the new line command and you
will get the secondary prompt. Just enter a / and the command will
complete. For many standard os/2 commands the '/' is used to indicate an
option and may want a '\' as a path separator. These will still work and
be correctly interpreted with pdksh as long as a '/' is not attached
directly to the command name. Just be sure and enter the syntax needed
by the command you are trying to execute.
While backslash processing is usually correct and automatic there are times
when it doesn't do what you might expect. For example ls \tmp\*.exe might
surprise you. In this case the '\' will be interpreted as an escape for
the '*' character. You may need quotes or several backslashes to get what
you want. Beginning with 5.2.4 the output of ksh favors '/' for any
generated pathnames. This is intended to make script processing for
unix scripts easier. Unfortunately, this may make interactive use for
os2 users that prefer the '\' key a little less desirable. Should you
prefer the earlier convention then you can rebuild the executable from
the sources. Only one change in sh.h, DIRSEP, controls this behavior.
; vs. : processing
Another conflict is the use of ':' and ';'. Unix uses ':' to separate
entries in variable assignment and ';' to indicate multiple commands
on the same line. OS/2 uses the ';' to separate entries in a variable.
This could lead to problems when making an assignment to a variable in
pdksh. You will need to escape the ';' in OS/2 to prevent the shell
from interpreting it as the end of the command. Either surround the
assignment command with quotes or use '\;'. Note that since a ';' is
not a valid filename or pathname character the '\' will be correctly
interpreted as an escape character.
Since having to escape the ';' character can be a pain when changing
environmental variables containing a list of paths there are some functions
defined in the sample kshrc.ksh file to ease this task. There are three
functions; add_path, pre_path, and del_path that can be used to append a
path, prepend a path or delete a path from any environmental variable (PATH
by default). If you needed to add a path to /emx/bin you might do "add_path
e:\emx\bin" for example, or perhaps "add_path e:\emx\book BOOKSHELF" to add
some books to the bookshelf. Note that you will need a copy of sed in your
search path to use the del_path function.
In OS/2 the ':' is used to separate the drive letter from the rest of
the pathname. This usage had been preserved in pdksh. You can imbed
the drive letter as needed in pathnames. In addition pdksh preserves
the notion of separate contexts for each drive. To change drives you
would use the cd command. "cd A:/" would change to the root on drive
A while "cd C:." would change to whatever was current context on drive
C. Some aliases are defined in the sample kshrc.ksh to permit the
usual A: to automatically do a change directory to the A drive.
Wildcard Processing
OS/2 and pdksh have similar notions about wildcard characters '*' and
'?' except that pdksh handles the expansion of these wildcard within
the shell and then passes the answer as a list to the application. If
the application needs to see the wildcard character then you must
escape it from the shell. Note that pdksh knows about other wildcard
techniques as well. Please see the man page.
Background Processing
Do to some limitations in the os2 fork process and other differences
between os2 and unix it is not possible to support back-grounding from
pdksh of commands that begin a new window. For this reason I have
automatically backgrounded all such tasks when they are started. This
will permit the os2 ksh to serve as a command line launch mechanism for
dos, full screen, and pm applications. (Note that currently ksh can only
launch an application of the same type (windowed, or fullscreen) that
ksh itself is unless you use the 'start' alias.
There is a 'start' alias defined in the sample kshrc.ksh file that can
be used to start normal command line commands in a new window. For example
you could say "start ksh" to start a copy of ksh itself in a new window.
Since it is a new window it will automatically return control to the existing
copy of ksh. Note that the start alias uses the os2 start command so
you could supply it with any standard start option such as /FS to force
a full screen copy. Please check your os2 command reference manual for
further information on start.
PDKSH, OS/2 and the ENVIRONMENT.
The environment in OS/2 and Unix are quite different. For one thing
you don't actually login to your machine in OS/2 and your initial
environment is established by your CONFIG.SYS file. The Shell will use
the variables that were set in CONFIG.SYS and you should really
consider assigning TMPDIR and HOME for use by pdksh. It will also use
ENV as a variable that names a startup file that will run each time
the shell is started, even if a script is started. This start up file
is located in your home directory. For compatability with 4.9 this
shell will also automatically use a startup shell kshrc.ksh if it
finds one in your home directory, is started interactively, and $ENV
is not set.
The variable OS2_SHELL should point to cmd.exe or a fully compatible
version and will be used as the shell of choice for any scripts that you
write that do not contain the #! or extproc information in the top line
of the script. If you prefer you can set the variable EXECSHELL to a
shell to be used instead of OS2_SHELL. The use of OS2_SHELL assumes that
the shell requires the /c option and that the shell needs all pathnames
separated with '\'. Setting EXECSHELL will disable both of these
assumptions.
A special feature is the support of the -l, login option. If this option is
entered when starting ksh then the shell will execute a loginfile called
profile.ksh if located in $INIT/etc, c:/usr/etc, or your home. If you are
using this shell as your primary shell you may wish to change the settings
in your os2 command shell notebook to call ksh.exe -l. I would not
recommend changing the default shell in config.sys.
Should you destroy your PATH variable try 'unset PATH'. A default
path may get you going again. In addition pdksh for OS/2 always uses
commands from current context first in the search path even if it is
not explicitly set. By default c: drive is used when no variables
are set. Specifically c:/usr/bin and c:/usr/etc can be used as defaults
various places in ksh. If you build your own version then this can be
changed.
Generally all of the environmental variables described in the man page will
work in OS2 so long as the tools in use understand them in the same way
as Unix would.
Using KSH
The shell itself can be called any name you wish. Good names include
pdksh.exe, ksh.exe, sh.exe. You can build two completely different
shells using the options file. A full blown Korn shell can be built
or a complete subset that behaves very much like a Bourne shell. The
smaller version is excellent for script support. In the run time
release I have provided the full shell under the name ksh.exe and the
smaller version under the name sh.exe. Be careful with names like
rksh.exe or you could end up with a restricted shell that can't do
everything.
In Unix an executable can be tagged with an attribute to
make it known to the system as an executable. In OS/2 this is done
with an extension. This shell knows all of the standard OS/2
extensions plus .ksh and .sh. (Yes it can run dos commands and OS/2 command
files as well.) The .ksh or .sh extension tells the shell that this is an
executable shell script. The current version will also treat a file
without an extension as an executable in the style of Unix. Scripts need not
necessarily be a ksh shell scripts however. The standard Unix #! line at
the top of the file determines the actual shell that will be used to run
the script. A feature in this release is that any Unix absolute
pathnames will be tried and, if they fail a second try will be made by
stripping the path from the #! line since Unix style paths are unlikely
to match os2 usage. Your standard PATH search path will be used.
Should the same filename with a different extension exist in the same
directory pdksh will use the extension typed in by the user or if
no extension is entered then the search order is, .ksh, .exe, no extension,
.sh, .cmd, .com, .bat. This search order permits ksh scripts to be used to
modify binary executable behavior while allowing the -Zexe option for emx
gcc. . Note that if you explicitly type the extension yourself then any
extension can be used so long as the #! processing line is at the top of
the file to let pdksh know what to do.
The sample kshrc.ksh file that comes with the distribution can be used as
an example that shows you how to create aliases that will simulate the
standard OS/2 commands. This means you can still use copy, dir, and del if
you want to. Keyboard bindings supplied will still provide the command
stack and suddenly you also have command line completion and alias
capability. To get the most from the shell you will probably want the set
of Unix commands developed by the Gnu team and ported to os2. You will
most certainly need them or a similar set if you want to run any Unix
scripts. A few functions are also provided in the sample kshrc.ksh file to
demonstrate the power of functions and to ease common tasks.
Unix file systems are case sensitive and ksh generally expects this also.
This means that internal commands as well as aliases are case sensitive.
You can use this to your advantage. For example you might want to run a dos
shell only to find out that 'command' is captured as an internal command by
ksh. Try 'COMMAND' or even 'Command' and you will get what you wanted.
The file name completion and wild card expansion has been modified for os2
to permit it to ignore case.
Working with Editing Modes
As delivered ksh for os2 supports three different editing modes to use
with the command line. By default the editing mode is the same as that
used in cmd.exe in that F1, F2, and F3 can be used to edit the previous
command. Left and right cursor keys can also be used to edit the command.
Support for this comes directly from the emx layer. The history mechanism
is supported in this mode but you will not be able to scroll trhough
history from the command line. Pdksh commands exist to display and edit
history and the EDITOR environmental variable can be set to specify the
editor you want. Two other mutually exclusive editing modes exist as well.
The sample kshrc.ksh file turns on emacs editing mode. In this mode
pdksh emulates the commands and keyboard binding present in emacs. The
keyboard binding is fully customizable by the user using the bind command.
For os2 the default build includes support of the cursor keys to edit
both current and previous commands. The sample kshrc.ksh file includes
some further mapping as examples of keyboard binding. The bind -m
command can be used to define special macro commands. Note that in emacs
the ESC key following by a letter key is usually synonymous with holding
down the ALT key and pressing a letter key. In the current os2 implementation
these keys are not tied together so they could be programmed independantly
although this could be confusing for the user. This may change in the
future.
Issuing the command 'set -o vi' turns on vi mode. This mode emulates the
keyboard binding from the vi editor. In addition using the tab key for
command line completion is separately programmable using the set command.
For os2 the cursor keys are also set up to work from within insert mode to
allow editing of both the current and previous commands without ever
leaving insert mode. The Esc Shft-A sequence can be used to jump to the end
of the line allowing you to append new information to the line. CTRL-X,
CTRL-E and CTRL-F permit command line completion within insert mode. Thus
you can use vi mode without ever having to learn traditional vi commands.
SHELL SCRIPT PROGRAMMING
One of my goals in porting this shell was to be able to do shell level
script programming and to run Unix shell scripts with minimal modification.
The first goal is easy and fully functional in this release. You can write
shell scripts for this or other shells. The name of the shell you want to
run the script is entered in the first line of the script itself after a
'#!' sequence. If you only enter the name of the command then pdksh will
use your search path to find the shell. This is the recommended approach,
however absolute paths of the form /bin/ etc. will be stripped
automatically if needed to permit running Unix scripts unmodified. To write
portable scripts use the 'uname' command from Gnu to set a variable that
can be checked for specialized approaches. As a special case absoulte
paths using '\' will not be stripped and an error will be generated if
the command is not found at the exact path specified.
It is even possible to use ksh as a scripting language when your main
shell is a standard OS/2 shell. To do this you would write your ksh
script as usual except that the first line in the script should read
'extproc ksh'. The script should be named with a '.cmd' extension so
that the OS/2 shell can find it. When the cmd.exe finds this line in
the file it will call ksh to process the script for you. A script
that is written this way can also be called directly from ksh. As a
matter of fact you could use this technique entirely for script
creation and name all your scripts with the .cmd extension. Pdksh
will honor 'extproc' exactly like the standard Unix '#!' processing.
Unlike Unix #! processing the OS2 cmd processing of an extproc header line
only passes the file name to the spawned process instead of the full
pathname. This is a bug in os2 IMHO since if you explicitely want a
certain path for the command you cannot guarantee it. The workaround was to
put the path in the extproc line and then shift the extra filename off the
argument list. For example my whatis.cmd file used to start like this.
extproc ksh c:/usr/bin/whatis.cmd
shift
You can still do this, but ksh will also search the path to find a copy
of the command, so this is no longer required. Of course, the copy that ksh
finds might not be the one you wanted but at least you can copy your cmd
files around without having to modify them. A side effect of this change
is that typing: "ksh whatis" will now search your path as well which does
change the standard behavior of ksh which some might construe as a feature!
The second goal of running Unix scripts with little or no modification is
much more difficult to achieve. Unix makes many assumptions about how the
system is set up which makes fully portable scripts difficult to accomplish
without the knowledge of the script internals. Many script assume the
presense of /dev/null and /tmp. (The emx layer provides an automatic map
for shell references to /dev/null and /dev/tty as of the 0.9a version and
pdksh also maps /dev/null to nul for the cases where emx doesn't see it
unless a /dev/null is present.) Some scripts assume /bin and certain
commands within /bin (usually cp and sh). Until I can figure out how to
make this more transparent you can simply make these directories on the
drive that you intend to run the script on. (Of course, you could also
modify the script.) Some scripts reset the PATH variable near the beginning
of the script. While you could copy a whole set of commands it is probably
easier to modify the script or use tvfs (more about tvfs later.) Another
standard "trick" in Bourne shell script programming is to modify IFS to
include a colon and then use the set command to parse a variable by setting
$1, $2, etc. In OS/2 this would need to be a ';'. For now you will have to
hand modify the script.
The latest release of ksh for os2 now supports multiple open files
using standard pdksh syntax. Note that error checking may not be
as complete as standard pdksh for some of this usage.
Of course Unix scripts expect the presence of Unix commands. You will
need to install a set of Unix utilities, Unix text processing
commands, and probably sed and a version of awk. I have created a
c:/usr directory on my system for Unix stuff. I have /usr/bin,
/usr/man, /usr/etc, /usr/home, and /usr/local. You could establish
even more, or perhaps less, Unix conformance. You will also need a ps
command. I use procs.exe which I renamed to ps.exe. Kill is a ksh
builtin.
RUNNING UNIX GNU CONFIGURE SCRIPTS.
A lot of people would like to use pdksh to permit them to run the
gnu automatic configure scripts. I am pleased to report that this
is possible using pdksh. However, I can't guarantee that the results
will match the true configuration for os2 since this is dependant on
the way the individual configure scripts are written.
To set up to run configure scripts you will need to have a copy of pdksh
called sh.exe somewhere in your path and, of course, you should be
running within a pdksh shell. One of the very early things done
by most configure scripts is to figure out the compiler. This will fail
since it depends on setting the IFS (see the above discussion). To
workaround this problem simply set CC to the compiler you want to use
prior to running the script. For example to use gcc: 'export CC=gcc'.
Most configure scripts couldn't figure out the names of os2 compilers
anyway. Now you should be able to simply type 'configure' and watch it
work. At some point the configure script will build a config.status
script to perform the final step. If this is not run using 'sh -c
config.status' or some such it will fail since .status is not an os2
legal executable suffix. You can run it manually however by typing
'ksh config.status'. If you have problems you should inspect the
config.status script and fix it as required. Using ksh -x config.status
will echo the lines as they are executed which should aid in debug.
Many configure scripts actually build and execute programs to test
for certain features. In OS2 using emx, the final link step must have
the .exe extension tied to the executable name or the linker will not
link correctly. You will need to modify the configure script to
insure the correct executable name. Once this is built it can be
renamed to a name without an extension if ksh is being used to run it.
A line similar to the following may work for you if you are using 2.0:
ac_link='${CC-cc} -o conftest.exe $CFLAGS $CPPFLAGS $LDFLAGS \
conftest.$ac_ext $LIBS && mv conftest.exe conftest'
This trick takes advantage of ksh's ability to run a command without an
extension. Even with these changes you may still find that configure does
not correctly identify some os2 features. I would recommend that the
config.cache file be edited as required or the resulting config.h file.
Another trick is to use the -Zexe option to gcc. This builds a zero length
file without an extension and the real executable with the extension .exe.
Makefiles and some configure scripts may be fooled by this behavior.
TVFS
An IBM employee written program called tvfs, toronto virtual file system,
can be downloaded from most os2 ftp sites and from IBM ftp sites. This
program permits you to simulate a Unix like file system that can span
physical drives and even network drives. Using tvfs you cd once into the
drive letter designated as the tvfs drive and from then on you can
reference all of your drives and directories by only using Unix style
pathnames if you wish. Even a limited form of symbolic links can be set
up on this drive. This can be a great aid in running Unix scripts and
makefiles as well as configure scripts.
WORK IN PROGRESS
There is still much to do and this project will probably never be complete.
The configure.cmd file needs work as does the Makefile. Please let me know
if you get this to compile using a C compiler other than gcc. The standard
defaults work in the Makefile but many other things are not implemented.
And of course there are bugs to fix and enhancements to be made. Check the
file os2bugs in the run time release for the latest information on bugs.
Please let me know if you like this port, have found a porting bug,
have fixed a bug, or have coded a spiffy enhancement. Michael Rendell
should be consulted for general pdksh items and is now actually
maintaining and enhancing all of the code. Please check the standard
README for more information and also the file os2bugs for current known
problems and limitations. I can be reached at daled@cadence.com.
Note that this is a home brew project and is in no way related to my
employment.
Dale DePriest

View File

@ -1,91 +0,0 @@
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
ac_cv_c_const=${ac_cv_c_const='yes'}
ac_cv_c_cross=${ac_cv_c_cross='no'}
ac_cv_decl_sys_siglist=${ac_cv_decl_sys_siglist='no'}
ac_cv_func_confstr=${ac_cv_func_confstr='no'}
ac_cv_func_flock=${ac_cv_func_flock='yes'}
ac_cv_func_getwd=${ac_cv_func_getwd='no'}
ac_cv_func_killpg=${ac_cv_func_killpg='no'}
ac_cv_func_mmap=${ac_cv_func_mmap='no'}
ac_cv_func_nice=${ac_cv_func_nice='no'}
ac_cv_func_setrlimit=${ac_cv_func_setrlimit='no'}
ac_cv_func_sigsetjmp=${ac_cv_func_sigsetjmp='yes'}
ac_cv_func_strcasecmp=${ac_cv_func_strcasecmp='no'}
ac_cv_func_strerror=${ac_cv_func_strerror='yes'}
ac_cv_func_strstr=${ac_cv_func_strstr='yes'}
ac_cv_func_sysconf=${ac_cv_func_sysconf='yes'}
ac_cv_func_tcsetpgrp=${ac_cv_func_tcsetpgrp='yes'}
ac_cv_func_ulimit=${ac_cv_func_ulimit='yes'}
ac_cv_func_wait3=${ac_cv_func_wait3='no'}
ac_cv_func_waitpid=${ac_cv_func_waitpid='yes'}
ac_cv_header_dirent_dirent_h=${ac_cv_header_dirent_dirent_h='yes'}
ac_cv_header_fcntl_h=${ac_cv_header_fcntl_h='yes'}
ac_cv_header_limits_h=${ac_cv_header_limits_h='yes'}
ac_cv_header_memory_h=${ac_cv_header_memory_h='yes'}
ac_cv_header_paths_h=${ac_cv_header_paths_h='no'}
ac_cv_header_stat_broken=${ac_cv_header_stat_broken='no'}
ac_cv_header_stddef_h=${ac_cv_header_stddef_h='yes'}
ac_cv_header_stdlib_h=${ac_cv_header_stdlib_h='yes'}
ac_cv_header_string_h=${ac_cv_header_string_h='yes'}
ac_cv_header_sys_param_h=${ac_cv_header_sys_param_h='yes'}
ac_cv_header_sys_resource_h=${ac_cv_header_sys_resource_h='yes'}
ac_cv_header_sys_time_h=${ac_cv_header_sys_time_h='yes'}
ac_cv_header_time=${ac_cv_header_time='yes'}
ac_cv_header_ulimit_h=${ac_cv_header_ulimit_h='no'}
ac_cv_header_values_h=${ac_cv_header_values_h='no'}
ac_cv_lib_dir=${ac_cv_lib_dir='no'}
ac_cv_path_install=${ac_cv_path_install=''./install-sh -c''}
ac_cv_prog_CC=${ac_cv_prog_CC='gcc'}
ac_cv_prog_CPP=${ac_cv_prog_CPP=''gcc -E''}
ac_cv_prog_gcc=${ac_cv_prog_gcc='yes'}
ac_cv_prog_gcc_g=${ac_cv_prog_gcc_g='yes'}
ac_cv_prog_gcc_traditional=${ac_cv_prog_gcc_traditional='no'}
ac_cv_sizeof_int=${ac_cv_sizeof_int='4'}
ac_cv_sizeof_long=${ac_cv_sizeof_long='4'}
ac_cv_struct_st_rdev=${ac_cv_struct_st_rdev='yes'}
ac_cv_sys_interpreter=${ac_cv_sys_interpreter='no'}
ac_cv_type_clock_t=${ac_cv_type_clock_t='yes'}
ac_cv_type_getgroups=${ac_cv_type_getgroups='gid_t'}
ac_cv_type_mode_t=${ac_cv_type_mode_t='yes'}
ac_cv_type_off_t=${ac_cv_type_off_t='yes'}
ac_cv_type_pid_t=${ac_cv_type_pid_t='yes'}
ac_cv_type_rlim_t=${ac_cv_type_rlim_t='no'}
ac_cv_type_signal=${ac_cv_type_signal='void'}
ac_cv_type_sigset_t=${ac_cv_type_sigset_t='yes'}
ac_cv_type_uid_t=${ac_cv_type_uid_t='yes'}
ksh_cv_c_func_attr=${ksh_cv_c_func_attr='yes'}
ksh_cv_c_prototypes=${ksh_cv_c_prototypes='yes'}
ksh_cv_c_void=${ksh_cv_c_void='yes'}
ksh_cv_c_volatile=${ksh_cv_c_volatile='yes'}
ksh_cv_decl_sys_errlist=${ksh_cv_decl_sys_errlist='no'}
ksh_cv_dev_fd=${ksh_cv_dev_fd='no'}
ksh_cv_dup2_clexec_broken=${ksh_cv_dup2_clexec_broken='no'}
ksh_cv_func_lstat=${ksh_cv_func_lstat='no'}
ksh_cv_func_memmove=${ksh_cv_func_memmove='yes'}
ksh_cv_func_memset=${ksh_cv_func_memset='yes'}
ksh_cv_func_times_broken=${ksh_cv_func_times_broken='no'}
ksh_cv_header_sys_wait_h=${ksh_cv_header_sys_wait_h='yes'}
ksh_cv_header_unistd=${ksh_cv_header_unistd='yes'}
ksh_cv_opendir_nondir=${ksh_cv_opendir_nondir='no'}
ksh_cv_os_type=${ksh_cv_os_type='OS2_EMX'}
ksh_cv_pgrp_check=${ksh_cv_pgrp_check='none'}
ksh_cv_rlim_check=${ksh_cv_rlim_check='long'}
ksh_cv_signal_check=${ksh_cv_signal_check='v7'}
ksh_cv_signal_retval=${ksh_cv_signal_retval=''}
ksh_cv_term_check=${ksh_cv_term_check='termio'}
ksh_cv_time_delcared=${ksh_cv_time_delcared='yes'}
ksh_cv_var_sys_errlist=${ksh_cv_var_sys_errlist='yes'}
ksh_cv_var_sys_siglist=${ksh_cv_var_sys_siglist='no'}

View File

@ -1,345 +0,0 @@
/* config.h. Generated automatically by configure. */
/* config.h.in. Generated automatically from configure.in by autoheader. */
/*
* This file, acconfig.h, which is a part of pdksh (the public domain ksh),
* is placed in the public domain. It comes with no licence, warranty
* or guarantee of any kind (i.e., at your own risk).
*/
#ifndef CONFIG_H
#define CONFIG_H
/* Define if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
/* #undef _ALL_SOURCE */
#endif
/* Define if the closedir function returns void instead of int. */
/* #undef CLOSEDIR_VOID */
/* Define to empty if the keyword does not work. */
/* #undef const */
/* Define to `int' if <sys/types.h> doesn't define. */
/* #undef gid_t */
/* Define if you have a working `mmap' system call. */
/* #undef HAVE_MMAP */
/* Define if your struct stat has st_rdev. */
#define HAVE_ST_RDEV 1
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
#define HAVE_SYS_WAIT_H 1
/* Define if you have <unistd.h>. */
#define HAVE_UNISTD_H 1
/* Define if on MINIX. */
/* #undef _MINIX */
/* Define to `int' if <sys/types.h> doesn't define. */
/* #undef mode_t */
/* Define to `long' if <sys/types.h> doesn't define. */
/* #undef off_t */
/* Define to `int' if <sys/types.h> doesn't define. */
/* #undef pid_t */
/* Define if the system does not provide POSIX.1 features except
with this defined. */
/* #undef _POSIX_1_SOURCE */
/* Define if you need to in order for stat and other things to work. */
/* #undef _POSIX_SOURCE */
/* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE void
/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */
/* #undef STAT_MACROS_BROKEN */
/* Define if `sys_siglist' is declared by <signal.h>. */
/* #undef SYS_SIGLIST_DECLARED */
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#define TIME_WITH_SYS_TIME 1
/* Define to `int' if <sys/types.h> doesn't define. */
/* #undef uid_t */
/* Define if the closedir function returns void instead of int. */
/* #undef VOID_CLOSEDIR */
/* Define if your kernal doesn't handle scripts starting with #! */
#define SHARPBANG 1
/* Define if dup2() preserves the close-on-exec flag (ultrix does this) */
/* #undef DUP2_BROKEN */
/* Define as the return value of signal handlers (0 or ). */
#define RETSIGVAL
/* Define if you have posix signal routines (sigaction(), et. al.) */
/* #undef POSIX_SIGNALS */
/* Define if you have BSD4.2 signal routines (sigsetmask(), et. al.) */
/* #undef BSD42_SIGNALS */
/* Define if you have BSD4.1 signal routines (sigset(), et. al.) */
/* #undef BSD41_SIGNALS */
/* Define if you have v7 signal routines (signal(), signal reset on delivery) */
#define V7_SIGNALS 1
/* Define to use the fake posix signal routines (sigact.[ch]) */
/* #define USE_FAKE_SIGACT 1 */
/* Define if signals don't interrupt read() */
/* #undef SIGNALS_DONT_INTERRUPT */
/* Define if you have bsd versions of the setpgrp() and getpgrp() routines */
/* #undef BSD_PGRP */
/* Define if you have POSIX versions of the setpgid() and getpgrp() routines */
/* #undef POSIX_PGRP */
/* Define if you have sysV versions of the setpgrp() and getpgrp() routines */
/* #undef SYSV_PGRP */
/* Define if you don't have setpgrp(), setpgid() or getpgrp() routines */
#define NO_PGRP 1
/* Define to char if your compiler doesn't like the void keyword */
/* #undef void */
/* Define to nothing if compiler doesn't like the volatile keyword */
/* #undef volatile */
/* Define if C compiler groks function prototypes */
#define HAVE_PROTOTYPES 1
/* Define if C compiler groks __attribute__((...)) (const, noreturn, format) */
#define HAVE_GCC_FUNC_ATTR 1
/* Define to 32-bit signed integer type if <sys/types.h> doesn't define */
/* #undef clock_t */
/* Define to the type of struct rlimit fields if the rlim_t type is missing */
#define rlim_t long
/* Define if time() is declared in <time.h> */
#define TIME_DECLARED 1
/* Define to `unsigned' if <signal.h> doesn't define */
/* #undef sigset_t */
/* Define if sys_errlist[] and sys_nerr are in the C library */
#define HAVE_SYS_ERRLIST 1
/* Define if sys_errlist[] and sys_nerr are defined in <errno.h> */
/* #undef SYS_ERRLIST_DECLARED */
/* Define if sys_siglist[] is in the C library */
/* #undef HAVE_SYS_SIGLIST */
/* Define if you have a sane <termios.h> header file */
#define HAVE_TERMIOS_H 1
/* Define if you have a memset() function in your C library */
#define HAVE_MEMSET 1
/* Define if you have a memmove() function in your C library */
#define HAVE_MEMMOVE 1
/* Define if you have a bcopy() function in your C library */
/* #undef HAVE_BCOPY */
/* Define if you have a lstat() function in your C library */
/* #undef HAVE_LSTAT */
/* Define if you have a sane <termio.h> header file */
#define HAVE_TERMIO_H 1
/* Define if you don't have times() or if it always returns 0 */
/* #undef TIMES_BROKEN */
/* Define if opendir() will open non-directory files */
/* #undef OPENDIR_DOES_NONDIR */
/* Define if the pgrp of setpgrp() can't be the pid of a zombie process */
/* #undef NEED_PGRP_SYNC */
/* Define if you arg running SCO unix */
/* #undef OS_SCO */
/* Define if you arg running ISC unix */
/* #undef OS_ISC */
/* Define if you arg running OS2 with the EMX library */
#define OS2 1
/* Define if you have a POSIX.1 compatiable <sys/wait.h> */
#define POSIX_SYS_WAIT 1
/* Define if your OS maps references to /dev/fd/n to file descriptor n */
/* #undef HAVE_DEV_FD */
/* Default PATH (see comments in configure.in for more details) */
#define DEFAULT_PATH "c:/usr/bin;c:/os2;/os2"
/* Include ksh features? (see comments in configure.in for more details) */
#define KSH 1
/* Include emacs editing? (see comments in configure.in for more details) */
#define EMACS 1
/* Include vi editing? (see comments in configure.in for more details) */
#define VI 1
/* Include job control? (see comments in configure.in for more details) */
#define JOBS 1
/* Include brace-expansion? (see comments in configure.in for more details) */
#define BRACE_EXPAND 1
/* Include any history? (see comments in configure.in for more details) */
#define HISTORY 1
/* Include complex history? (see comments in configure.in for more details) */
/* #undef COMPLEX_HISTORY */
/* Strict POSIX behaviour? (see comments in configure.in for more details) */
/* #undef POSIXLY_CORRECT */
/* Specify default $ENV? (see comments in configure.in for more details) */
/* #undef DEFAULT_ENV */
/* Include shl(1) support? (see comments in configure.in for more details) */
/* #undef SWTCH */
/* Include game-of-life? (see comments in configure.in for more details) */
/* #undef SILLY */
/* The number of bytes in a int. */
#define SIZEOF_INT 4
/* The number of bytes in a long. */
#define SIZEOF_LONG 4
/* Define if you have the _setjmp function. */
/* #undef HAVE__SETJMP */
/* Define if you have the confstr function. */
/* #undef HAVE_CONFSTR */
/* Define if you have the flock function. */
#define HAVE_FLOCK 1
/* Define if you have the getgroups function. */
/* #undef HAVE_GETGROUPS */
/* Define if you have the getrusage function. */
/* #undef HAVE_GETRUSAGE */
/* Define if you have the getwd function. */
/* #undef HAVE_GETWD */
/* Define if you have the killpg function. */
/* #undef HAVE_KILLPG */
/* Define if you have the nice function. */
/* #undef HAVE_NICE */
/* Define if you have the setrlimit function. */
/* #undef HAVE_SETRLIMIT */
/* Define if you have the sigsetjmp function. */
#define HAVE_SIGSETJMP 1
/* Define if you have the strcasecmp function. */
/* #undef HAVE_STRCASECMP */
/* Define if you have the strerror function. */
#define HAVE_STRERROR 1
/* Define if you have the strstr function. */
#define HAVE_STRSTR 1
/* Define if you have the sysconf function. */
#define HAVE_SYSCONF 1
/* Define if you have the tcsetpgrp function. */
#define HAVE_TCSETPGRP 1
/* Define if you have the ulimit function. */
#define HAVE_ULIMIT 1
/* Define if you have the wait3 function. */
/* #undef HAVE_WAIT3 */
/* Define if you have the waitpid function. */
#define HAVE_WAITPID 1
/* Define if you have the <dirent.h> header file. */
#define HAVE_DIRENT_H 1
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define if you have the <ndir.h> header file. */
/* #undef HAVE_NDIR_H */
/* Define if you have the <paths.h> header file. */
/* #undef HAVE_PATHS_H */
/* Define if you have the <stddef.h> header file. */
#define HAVE_STDDEF_H 1
/* Define if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define if you have the <sys/dir.h> header file. */
/* #undef HAVE_SYS_DIR_H */
/* Define if you have the <sys/ndir.h> header file. */
/* #undef HAVE_SYS_NDIR_H */
/* Define if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1
/* Define if you have the <sys/resource.h> header file. */
#define HAVE_SYS_RESOURCE_H 1
/* Define if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
/* Define if you have the <sys/wait.h> header file. */
#define HAVE_SYS_WAIT_H 1
/* Define if you have the <ulimit.h> header file. */
/* #undef HAVE_ULIMIT_H */
/* Define if you have the <values.h> header file. */
/* #undef HAVE_VALUES_H */
/* Need to use a separate file to keep the configure script from commenting
* out the undefs....
*/
#include "conf-end.h"
#endif /* CONFIG_H */

View File

@ -1,2 +0,0 @@
extproc ksh
echo Please run os2/configure.

View File

@ -1,111 +0,0 @@
@echo off
if "%1" == "/h" goto help
if "%1" == "/?" goto help
if "%1" == "-h" goto help
set verbose=no
set debug=no
set ushell=ksh
:parse
if "%1" == "/v" goto verbose
if "%1" == "-v" goto verbose
if "%1" == "/d" goto gdebug
if "%1" == "-d" goto gdebug
if "%1" == "sh" goto usersh
if exist os2 goto start
echo You are in the wrong directory. Change to source directory.
echo Copy this file and run again or type os2\configure.
goto end
:verbose
set verbose=yes
shift
goto parse
:gdebug
set debug=yes
shift
goto parse
:usersh
if %verbose% == yes echo Configuring for Bourne shell.
set ushell=sh
:start
if exist conftest.c erase conftest.c
if exist confdefs.h erase confdefs.h
if %verbose% == yes echo Searching for sed
:::::for %%i in (%path%) do if exist %%i\sed.exe goto s_success
sed --version && goto s_success
echo No sed in search path. Copying Makefile for gcc. You will need
echo to edit it if you are not using standard defaults.
copy os2\Makefile Makefile
goto copystuff
:help
echo Run os2\configure to set up for os/2 compilation.
echo You must have current context in the source directory.
echo usage: configure [[/v^|-v][/d^|-d]^|/h^|-h^|/?] [sh]
echo where /v means verbose output
echo /d means compile with symbols (debug)
goto end
:s_success
if %verbose% == yes echo checking for compiler
for %%i in (%path%) do if exist %%i\gcc.exe goto g_success
gcc --version && goto g_success
rem for the future we'll use sed processing
for %%i in (%path%) do if exist %%i\bcc.exe goto b_success
for %%i in (%path%) do if exist %%i\icc.exe goto i_success
echo Compiler not found. Check your path
goto end
:b_success
echo Borland C compiler found. Configuration not complete for
echo this compiler. You may need to edit the Makefile
set CC=bcc
set CPP=cpp
goto createstuff
:i_success
echo IBM C compiler found. Configuration not complete for
echo this compiler. You may need to edit the Makefile.
set CC=icc -q -Sm -Gm -Gt -Spl -D__STDC__
set CPP=cpp
goto createstuff
:checkshell
if %ushell% == sh goto fixshell
goto copystuff
:g_success
echo GNU C compiler found. This is the standard configuration.
copy os2\Makefile Makefile
if %debug% == no goto checkshell
set CC=gcc -g
set CPP=cpp
:createstuff
echo Creating files for you.
echo s/@CC@/%CC%/> os2\make.tmp
echo s/@CPP@/%CPP%/>> os2\make.tmp
echo s/@LDFLAGS@/-O/>> os2\make.tmp
if %ushell% == ksh goto skipsh
:fixshell
echo s!/bin/sh!ksh!>> os2\make.tmp
echo s/@SHELL_PROG@/sh/>> os2\make.tmp
:skipsh
copy os2\make.tmp+os2\make.sed os2\make.tmp
sed -f os2\make.tmp Makefile.in > Makefile
del os2\make.tmp
:copystuff
if %verbose% == yes echo Copying config.h and config.status files.
copy os2\config.h config.h
touch config.h
copy os2\config.status config.status
if %verbose% == yes echo Checking for os2.c and th.cmd.
if not exist os2.c copy os2\os2.c os2.c
if not exist th.cmd copy os2\th.cmd th.cmd
if %ushell% == ksh goto end
if %verbose% == yes echo Fixing config.h for building sh.
echo #ifdef KSH>> config.h
echo #undef KSH>> config.h
echo #undef VI>> config.h
echo #undef EMACS>> config.h
echo #undef EDIT>> config.h
echo #undef COMPLEX_HISTORY>> config.h
echo #undef EASY_HISTORY>> config.h
echo #undef HISTORY>> config.h
echo #undef BRACE_EXPAND>>config.h
echo #endif>> config.h
:end

View File

@ -1,132 +0,0 @@
/*
* NOTE: THIS FILE WAS GENERATED AUTOMATICALLY FROM emacs.c
*
* DO NOT BOTHER EDITING THIS FILE
*/
#define XFUNC_abort 0
static int x_abort ARGS((int c));
#define XFUNC_beg_hist 1
static int x_beg_hist ARGS((int c));
#define XFUNC_comp_comm 2
static int x_comp_comm ARGS((int c));
#define XFUNC_comp_file 3
static int x_comp_file ARGS((int c));
#define XFUNC_complete 4
static int x_complete ARGS((int c));
#define XFUNC_del_back 5
static int x_del_back ARGS((int c));
#define XFUNC_del_bword 6
static int x_del_bword ARGS((int c));
#define XFUNC_del_char 7
static int x_del_char ARGS((int c));
#define XFUNC_del_fword 8
static int x_del_fword ARGS((int c));
#define XFUNC_del_line 9
static int x_del_line ARGS((int c));
#define XFUNC_draw_line 10
static int x_draw_line ARGS((int c));
#define XFUNC_end_hist 11
static int x_end_hist ARGS((int c));
#define XFUNC_end_of_text 12
static int x_end_of_text ARGS((int c));
#define XFUNC_enumerate 13
static int x_enumerate ARGS((int c));
#define XFUNC_eot_del 14
static int x_eot_del ARGS((int c));
#define XFUNC_error 15
static int x_error ARGS((int c));
#define XFUNC_goto_hist 16
static int x_goto_hist ARGS((int c));
#define XFUNC_ins_string 17
static int x_ins_string ARGS((int c));
#define XFUNC_insert 18
static int x_insert ARGS((int c));
#define XFUNC_kill 19
static int x_kill ARGS((int c));
#define XFUNC_kill_region 20
static int x_kill_region ARGS((int c));
#define XFUNC_list_comm 21
static int x_list_comm ARGS((int c));
#define XFUNC_list_file 22
static int x_list_file ARGS((int c));
#define XFUNC_literal 23
static int x_literal ARGS((int c));
#define XFUNC_meta1 24
static int x_meta1 ARGS((int c));
#define XFUNC_meta2 25
static int x_meta2 ARGS((int c));
#define XFUNC_meta_yank 26
static int x_meta_yank ARGS((int c));
#define XFUNC_mv_back 27
static int x_mv_back ARGS((int c));
#define XFUNC_mv_begin 28
static int x_mv_begin ARGS((int c));
#define XFUNC_mv_bword 29
static int x_mv_bword ARGS((int c));
#define XFUNC_mv_end 30
static int x_mv_end ARGS((int c));
#define XFUNC_mv_forw 31
static int x_mv_forw ARGS((int c));
#define XFUNC_mv_fword 32
static int x_mv_fword ARGS((int c));
#define XFUNC_newline 33
static int x_newline ARGS((int c));
#define XFUNC_next_com 34
static int x_next_com ARGS((int c));
#define XFUNC_nl_next_com 35
static int x_nl_next_com ARGS((int c));
#define XFUNC_noop 36
static int x_noop ARGS((int c));
#define XFUNC_prev_com 37
static int x_prev_com ARGS((int c));
#define XFUNC_prev_histword 38
static int x_prev_histword ARGS((int c));
#define XFUNC_search_char_forw 39
static int x_search_char_forw ARGS((int c));
#define XFUNC_search_char_back 40
static int x_search_char_back ARGS((int c));
#define XFUNC_search_hist 41
static int x_search_hist ARGS((int c));
#define XFUNC_set_mark 42
static int x_set_mark ARGS((int c));
#define XFUNC_stuff 43
static int x_stuff ARGS((int c));
#define XFUNC_stuffreset 44
static int x_stuffreset ARGS((int c));
#define XFUNC_transpose 45
static int x_transpose ARGS((int c));
#define XFUNC_version 46
static int x_version ARGS((int c));
#define XFUNC_xchg_point_mark 47
static int x_xchg_point_mark ARGS((int c));
#define XFUNC_yank 48
static int x_yank ARGS((int c));
#define XFUNC_comp_list 49
static int x_comp_list ARGS((int c));
#define XFUNC_expand 50
static int x_expand ARGS((int c));
#define XFUNC_fold_capitialize 51
static int x_fold_capitialize ARGS((int c));
#define XFUNC_fold_lower 52
static int x_fold_lower ARGS((int c));
#define XFUNC_fold_upper 53
static int x_fold_upper ARGS((int c));
#define XFUNC_set_arg 54
static int x_set_arg ARGS((int c));
#define XFUNC_comment 55
static int x_comment ARGS((int c));
#ifdef SILLY
#define XFUNC_game_of_life 56
static int x_game_of_life ARGS((int c));
#else
#endif
#ifdef DEBUG
#define XFUNC_debug_info 57
static int x_debug_info ARGS((int c));
#else
#endif
#ifdef OS2
#define XFUNC_meta3 58
static int x_meta3 ARGS((int c));
#else
#endif

View File

@ -1,118 +0,0 @@
# kshrc.ksh startup file for OS/2 version of ksh
set -o trackall
set -o ignoreeof
alias a:='cd a:.'
alias b:='cd b:.'
alias c:='cd c:.'
alias d:='cd d:.'
alias e:='cd e:.'
alias f:='cd f:.'
alias g:='cd g:.'
alias h:='cd h:.'
alias i:='cd i:.'
alias j:='cd j:.'
alias k:='cd k:.'
alias l:='cd l:.'
alias m:='cd m:.'
alias h='fc -l'
alias j='jobs'
#alias which='type'
alias back='cd -'
alias cls='print -n "\033[H\033[2J"'
alias dir='cmd /c dir'
alias del='cmd /c del'
alias erase='cmd/c erase'
alias copy='cmd /c copy'
alias start='cmd /c start /f'
alias path='print -r $PATH'
alias ll='ls -lsAFk'
alias lf='ls -CAFk'
alias cp='cp -p'
alias ls='ls -F'
clock_p () {
PS1='${__[(H=SECONDS/3600%24)==(M=SECONDS/60%60)==(S=SECONDS%60)]-$H:$M:$S}>'
typeset -Z2 H M S; let SECONDS=`date '+(%H*60+%M)*60+%S'`
}
#function needed by add_path, pre_path, and del_path
no_path () {
eval _v="\$${2:-PATH}"
case \;$_v\; in
*\;$1\;*) return 1 ;; # no we have it
esac
return 0
}
#if $1 exists and is not in path, append it, or prepend it
add_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}\;$1"
}
pre_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1\;\$${2:-PATH}"
}
#if $1 is in path then remove it
del_path () {
no_path $* || eval ${2:-PATH}=`eval print -f '\;$'${2:-PATH}'\;' | sed -e "s!;$1;!;!g" -e "s!^;!!" -e "s!;\\$!!" -e "s!;!\\\\\;!g"`
}
unalias login newgrp
if [ "$KSH_VERSION" = "" ]
then PS1='$PWD>'
return #bail out for sh which doesn't have edit modes
fi
set -o emacs
bind ^Q=quote
bind ^I=complete
#bind ^[^[=list-file
#The next four have been preprogrammed
bind ^0H=up-history
bind ^0P=down-history
bind ^0K=backward-char
bind ^0M=forward-char
bind ^0s=backward-word
bind ^0t=forward-word
bind ^0G=beginning-of-line
bind ^0O=end-of-line
bind ^0w=beginning-of-history
bind ^0u=end-of-history
bind ^0S=eot-or-delete
FCEDIT=t2
PS1='[!]$PWD: '
function pushd {
if [ $# -eq 0 ]
then d=~
set -A dirstk ${dirstk[*]} $PWD
cd $d
else for d in $*
do if [ -d $d ] && [ -r $d ] && [ -x $d ]
then set -A dirstk ${dirstk[*]} $PWD
cd $d
else echo "$d: Cannot change directory"
break
fi
done
fi
echo ${dirstk[*]} $PWD
unset d ;
}
function popd {
if [ ${#dirstk[*]} -gt 0 ]
then let n=${#dirstk[*]}-1
cd ${dirstk[$n]}
unset dirstk[$n]
echo ${dirstk[*]} $PWD
else echo "popd: Directory stack empty"
fi
unset n ;
}

View File

@ -1,44 +0,0 @@
s/@SHELL_PROG@/ksh/
s!/bin/sh!sh!
s/@configure_input@/OS2_Makefile/
s/@srcdir@/./
s/@CC@/gcc/
s/@CPP@/cpp/
s/@CPPFLAGS@//
s/@INSTALL@/\/bin\/install -c/
s/@INSTALL_PROGRAM@/$(INSTALL)/
s/@INSTALL_DATA@/$(INSTALL) -m 644/
s/@DEFS@/-DHAVE_CONFIG_H/
s/@LIBS@/-los2/
s/@LDSTATIC@//
s/@LDFLAGS@/-O -s $(LDSTATIC)/
s/^\(CFLAGS[ ]*=\).*/\1 -O -DOS2/
s/^\(prefix[ ]*=\).*/\1 c:\/usr/
s/^\(exec_prefix[ ]*=\).*/\1 c:\/usr/
s/^\(exe_suffix[ ]*=\).*/\1.exe/
s/^\(OBJS[ ]*=\)/\1 os2.o/
s/`echo $(SHELL_PROG)|sed '$(transform)'`/$(SHELL_PROG)/
s#$(srcdir)/tests/th.sh#th.cmd#
/^configure:/,/^$/d
/^config.h.in:/,/^$/d
/^config.h:/,/^$/c\
config.h:\
cmd /c copy $(srcdir)\\os2\\config.h config.h > nul\
touch config.h\
/^Makefile:/,/^$/c\
Makefile:\
cmd /c copy $(srcdir)\\os2\\Makefile Makefile > nul\
touch Makefile\
/^config.status:/,/^$/d
/^siglist.out:/,/^$/c\
siglist.out:\
cmd /c copy $(srcdir)\\os2\\os2siglist.out siglist.out > nul\
touch siglist.out\
/^emacs.out:/,/^$/c\
emacs.out:\
cmd /c copy $(srcdir)\\os2\\emacs.out emacs.out > nul\
touch emacs.out\

264
os2/os2.c
View File

@ -1,264 +0,0 @@
#define INCL_DOS
#define INCL_DOSERRORS
#define INCL_DOSSESMGR
#define INCL_WINPROGRAMLIST
#include <os2.h>
#include "config.h"
#include "sh.h" /* To get inDOS(). */
#include <sys/ioctl.h>
#include <fcntl.h>
#include <io.h>
#include <process.h>
#include <errno.h>
#include <malloc.h>
#include <string.h>
static int isfullscreen(void)
{
PTIB ptib;
PPIB ppib;
DosGetInfoBlocks(&ptib, &ppib);
return (ppib -> pib_ultype != SSF_TYPE_WINDOWABLEVIO);
}
static int
quoted_strlen(char *s)
{
int ret = 0;
int seen_space = 0;
while (*s) {
if (seen_space == 0 && *s == ' ') {
ret += 2;
seen_space = 1;
} else if (*s == '\"') {
if (seen_space == 0) {
seen_space = 1;
ret += 4;
} else ret += 2;
} else ret++;
s++;
}
return ret;
}
static char *
quoted_strcpy(char *targ, char* src)
{
int seen_space = 0;
char *s = src, *t = targ;
while (*s) {
if ((*s == ' ') || (*s == '\"')) {
seen_space = 1;
break;
}
s++;
}
if (seen_space) {
*targ++ = '\"';
}
while (*src) {
if (*src == '\"') {
*targ++ = '\\';
}
*targ++ = *src++;
}
if (seen_space) {
*targ++ = '\"';
}
*targ = '\0';
return t;
}
static int
newsession(int type, int mode, char *cmd, char **args, char **env)
{
STARTDATA sd;
STATUSDATA st;
REQUESTDATA qr;
ULONG sid, pid, len, cnt, rc;
PVOID ptr;
BYTE prio;
static char queue[18];
static HQUEUE qid = -1;
char *ap, *ep, *p;
char object[256] = {0};
for ( cnt = 1, len = 0; args[cnt] != NULL; cnt++ )
len += quoted_strlen(args[cnt]) + 1;
p = ap = alloca(len + 2);
*p = 0;
for ( cnt = 1, len = 0; args[cnt] != NULL; cnt++ )
{
if ( cnt > 1 )
*p++ = ' ';
quoted_strcpy(p, args[cnt]);
p += strlen(p);
}
for ( cnt = 0, len = 0; env[cnt] != NULL; cnt++ )
len += strlen(env[cnt]) + 1;
p = ep = alloca(len + 2);
*p = 0;
for ( cnt = 0, len = 0; env[cnt] != NULL; cnt++ )
{
strcpy(p, env[cnt]);
p += strlen(p) + 1;
}
*p = 0;
if ( mode == P_WAIT && qid == -1 )
{
sprintf(queue, "\\queues\\ksh%04d", getpid());
if ( DosCreateQueue(&qid, QUE_FIFO, queue) )
return -1;
}
sd.Length = sizeof(sd);
sd.Related = (mode == P_WAIT) ? SSF_RELATED_CHILD : SSF_RELATED_INDEPENDENT;
sd.FgBg = SSF_FGBG_FORE;
sd.TraceOpt = SSF_TRACEOPT_NONE;
sd.PgmTitle = NULL;
sd.PgmName = cmd;
sd.PgmInputs = (PBYTE) ap;
sd.TermQ = (mode == P_WAIT) ? (PBYTE) queue : NULL;
sd.Environment = NULL;
sd.InheritOpt = SSF_INHERTOPT_PARENT;
sd.SessionType = type;
sd.IconFile = NULL;
sd.PgmHandle = 0;
sd.PgmControl = 0;
sd.Reserved = 0;
sd.ObjectBuffer = object;
sd.ObjectBuffLen = sizeof(object);
if ( DosStartSession(&sd, &sid, &pid) )
return errno = ENOEXEC, -1;
if ( mode == P_WAIT )
{
st.Length = sizeof(st);
st.SelectInd = SET_SESSION_UNCHANGED;
st.BondInd = SET_SESSION_BOND;
DosSetSession(sid, &st);
if ( DosReadQueue(qid, &qr, &len, &ptr, 0, DCWW_WAIT, &prio, 0) )
return -1;
rc = ((PUSHORT)ptr)[1];
DosFreeMem(ptr);
exit(rc);
}
else
exit(0);
}
int ksh_execve(char *cmd, char **args, char **env, int flags)
{
ULONG apptype;
char path[256], *p;
int rc;
strcpy(path, cmd);
for ( p = path; *p; p++ )
if ( *p == '/' )
*p = '\\';
if (_emx_env & 0x1000) { /* RSX, do best we can do. */
int len = strlen(cmd);
if (len > 4 && stricmp(cmd + len - 4, ".bat") == 0) {
/* execve would fail anyway, but most probably segfault. */
errno = ENOEXEC;
return -1;
}
goto do_execve;
}
if ( inDOS() ) {
fprintf(stderr, "ksh_execve requires OS/2 or RSX!\n");
exit(255);
}
if ( DosQueryAppType(path, &apptype) == 0 )
{
if (apptype & FAPPTYP_DOS)
return newsession(isfullscreen() ? SSF_TYPE_VDM :
SSF_TYPE_WINDOWEDVDM,
P_WAIT, path, args, env);
if ((apptype & FAPPTYP_WINDOWSREAL) ||
(apptype & FAPPTYP_WINDOWSPROT) ||
(apptype & FAPPTYP_WINDOWSPROT31))
return newsession(isfullscreen() ? PROG_WINDOW_AUTO :
PROG_SEAMLESSCOMMON,
P_WAIT, path, args, env);
if ( (apptype & FAPPTYP_EXETYPE) == FAPPTYP_WINDOWAPI ) {
printf(""); /* kludge to prevent PM apps from core dumping */
/* Start new session if interactive and not a part of a pipe. */
return newsession(SSF_TYPE_PM,
( (flags & XINTACT) && (flags & XPIPE)
/* _isterm(0) && _isterm(1) && _isterm(2) */
? P_NOWAIT
: P_WAIT),
path, args, env);
}
if ( (apptype & FAPPTYP_EXETYPE) == FAPPTYP_NOTWINDOWCOMPAT ||
(apptype & FAPPTYP_EXETYPE) == FAPPTYP_NOTSPEC )
if ( !isfullscreen() )
return newsession(SSF_TYPE_FULLSCREEN,
( (flags & XINTACT) && (flags & XPIPE)
/* _isterm(0) && _isterm(1) && _isterm(2) */
? P_NOWAIT
: P_WAIT),
path, args, env);
}
do_execve:
{
/* P_QUOTE is too agressive, it quotes `@args_from_file' too,
which breaks emxomfld calling LINK386 when EMXSHELL=ksh.
Thus we check whether we need to quote, and delegate the hard
work to P_QUOTE if needed. */
char **pp = args;
int do_quote = 0;
for (; !do_quote && *pp; pp++) {
for (p = *pp; *p; p++) {
if (*p == '*' || *p == '?') {
do_quote = 1;
break;
}
}
}
if ( (rc = spawnve(P_OVERLAY | (do_quote ? P_QUOTE : 0),
path, args, env)) != -1 )
exit(rc);
}
return -1;
}
void UnixName(char *path)
{
for ( ; *path; path++ )
if ( *path == '\\' )
*path = '/';
}
char *ksh_strchr_dirsep(const char *path)
{
char *p1 = strchr(path, '\\');
char *p2 = strchr(path, '/');
if ( !p1 ) return p2;
if ( !p2 ) return p1;
return (p1 > p2) ? p2 : p1;
}
char *ksh_strrchr_dirsep(const char *path)
{
char *p1 = strrchr(path, '\\');
char *p2 = strrchr(path, '/');
if ( !p1 ) return p2;
if ( !p2 ) return p1;
return (p1 > p2) ? p1 : p2;
}

View File

@ -1,19 +0,0 @@
Bugs and Limitations
1/99
1. Some of the makefile targets are not yet working. Those known to
work include all, uninstall,ksh, config.h, makefile,
debugtools (only check-fd and check-sigs.), test, clean, & distclean.
You need to run ksh Bugs ksh, or sh Bugs sh as appropriate.
2. You cannot start a full screen session from the windowed ksh command line.
3. Job control is not working and may never work in os/2 (no sigstp,
sigcont, etc).
4. ls [B]* fails even when a file Bozo exists. ls [b]* will work
due to case folding. The bug is in the way case folding is managed.
ls b* or ls B* will work as expected.
5. regress.t:regression-13 test fails. I do not understand why it can
work on *nix. In fact cat does not get SIGPIPE, but gets write failure.

View File

@ -1,24 +0,0 @@
/*
* signal handling
*/
{SIGHUP, "HUP", "Hangup"},
{SIGINT, "INT", "Interrupt"},
{SIGQUIT, "QUIT", "Quit"},
{SIGILL, "ILL", "Illegal instruction"},
{SIGTRAP, "TRAP", "Trace trap"},
{SIGABRT, "ABRT", "Abort"},
{SIGEMT, "EMT", "EMT trap"},
{SIGFPE, "FPE", "Floating exception"},
{SIGKILL, "KILL", "Killed"},
{SIGBUS, "BUS", "Bus error"},
{SIGSEGV, "SEGV", "Memory fault"},
{SIGSYS, "SYS", "Bad system call"},
{SIGPIPE, "PIPE", "Broken pipe"},
{SIGALRM, "ALRM", "Alarm clock"},
{SIGTERM, "TERM", "Terminated"},
{SIGUSR1, "USR1", "User defined #1"},
{SIGUSR2, "USR2", "User defined #2"},
{SIGCHLD, "CHLD", "Death of a child"},
{ 19, (char *) 0, "Signal 19"},
{ 20, (char *) 0, "Signal 20"},
{SIGBREAK, "BREAK", "Ctrl-Break"},

View File

@ -1,28 +0,0 @@
extproc ksh
#
# Simple script to find perl and run it
# for os2
IFS=\;$IFS
perl=
for i in $PATH; do
[ X"$i" = X ] && i=.
for j in perl perl5x perl5 ; do
[ -x $i/$j.exe ] && perl=$i/$j.exe && break 2
done
done
[ X"$perl" = X ] && {
echo "$0: can't find perl - bye\n" 1>&2
exit 1
}
perlpath=`dirname $perl`
if [ `basename $perlpath` = bin ]
then perlpath=`dirname $perlpath`
fi
if [ "$PERL5LIB" = "" ]
then PERL5LIB=$perlpath/lib
fi
export PERL5LIB
exec $perl "$@"

482
sigact.c
View File

@ -1,482 +0,0 @@
/* NAME:
* sigact.c - fake sigaction(2)
*
* SYNOPSIS:
* #include "sigact.h"
*
* int sigaction(int sig, struct sigaction *act,
* struct sigaction *oact);
* int sigaddset(sigset_t *mask, int sig);
* int sigdelset(sigset_t *mask, int sig);
* int sigemptyset(sigset_t *mask);
* int sigfillset(sigset_t *mask);
* int sigismember(sigset_t *mask, int sig);
* int sigpending(sigset_t *set);
* int sigprocmask(int how, sigset_t *set, sigset_t *oset);
* int sigsuspend(sigset_t *mask);
*
* RETSIGTYPE (*Signal(int sig, RETSIGTYPE (*disp)(int)))(int);
*
* DESCRIPTION:
* This is a fake sigaction implementation. It uses
* sigsetmask(2) et al or sigset(2) and friends if
* available, otherwise it just uses signal(2). If it
* thinks sigaction(2) really exists it compiles to "almost"
* nothing.
*
* In any case it provides a Signal() function that is
* implemented in terms of sigaction().
* If not using signal(2) as part of the underlying
* implementation (USE_SIGNAL or USE_SIGMASK), and
* NO_SIGNAL is not defined, it also provides a signal()
* function that calls Signal().
*
* The need for all this mucking about is the problems
* caused by mixing various signal handling mechanisms in
* the one process. This module allows for a consistent
* POSIX compliant interface to whatever is actually
* available.
*
* sigaction() allows the caller to examine and/or set the
* action to be associated with a given signal. "act" and
* "oact" are pointers to 'sigaction structs':
*.nf
*
* struct sigaction
* {
* RETSIGTYPE (*sa_handler)();
* sigset_t sa_mask;
* int sa_flags;
* };
*.fi
*
* RETSIGTYPE is normally 'void' in the POSIX implementation
* and for most current systems. On some older UNIX
* systems, signal handlers do not return 'void', so
* this implementation keeps 'sa_handler' inline with the
* hosts normal signal handling conventions.
* 'sa_mask' controls which signals will be blocked while
* the selected signal handler is active. It is not used
* in this implementation.
* 'sa_flags' controls various semantics such as whether
* system calls should be automagically restarted
* (SA_RESTART) etc. It is not used in this
* implementation.
* Either "act" or "oact" may be NULL in which case the
* appropriate operation is skipped.
*
* sigaddset() adds "sig" to the sigset_t pointed to by "mask".
*
* sigdelset() removes "sig" from the sigset_t pointed to
* by "mask".
*
* sigemptyset() makes the sigset_t pointed to by "mask" empty.
*
* sigfillset() makes the sigset_t pointed to by "mask"
* full ie. match all signals.
*
* sigismember() returns true if "sig" is found in "*mask".
*
* sigpending() is supposed to return "set" loaded with the
* set of signals that are blocked and pending for the
* calling process. It does nothing in this impementation.
*
* sigprocmask() is used to examine and/or change the
* signal mask for the calling process. Either "set" or
* "oset" may be NULL in which case the appropriate
* operation is skipped. "how" may be one of SIG_BLOCK,
* SIG_UNBLOCK or SIG_SETMASK. If this package is built
* with USE_SIGNAL, then this routine achieves nothing.
*
* sigsuspend() sets the signal mask to "*mask" and waits
* for a signal to be delivered after which the previous
* mask is restored.
*
*
* RETURN VALUE:
* 0==success, -1==failure
*
* BUGS:
* Since we fake most of this, don't expect fancy usage to
* work.
*
* AUTHOR:
* Simon J. Gerraty <sjg@zen.void.oz.au>
*/
/* COPYRIGHT:
* @(#)Copyright (c) 1992 Simon J. Gerraty
*
* This is free software. It comes with NO WARRANTY.
* Permission to use, modify and distribute this source code
* is granted subject to the following conditions.
* 1/ that that the above copyright notice and this notice
* are preserved in all copies and that due credit be given
* to the author.
* 2/ that any changes to this code are clearly commented
* as such so that the author does get blamed for bugs
* other than his own.
*
* Please send copies of changes and bug-fixes to:
* sjg@zen.void.oz.au
*
*/
/* Changes to sigact.c for pdksh, Michael Rendell <michael@cs.mun.ca>:
* - sigsuspend(): pass *mask to bsd4.2 sigpause instead of mask.
* - changed SIG_HDLR to RETSIGTYPE for use with GNU autoconf
* - added and used RETSIGVAL
* - include sh.h instead of signal.h (to get *_SIGNALS macros)
* - changed if !SA_NOCLDSTOP ... to USE_FAKE_SIGACT to avoid confusion
* - set the USE_* defines using the *_SIGNALS defines from autoconf
* - sigaction(): if using BSD signals, use sigvec() (used to use
* signal()) and set the SV_INTERRUPT flag (POSIX says syscalls
* are interrupted and pdksh needs this behaviour).
* - define IS_KSH before including anything; ifdef out routines
* not used in ksh if IS_KSH is defined (same in sigact.h).
* - use ARGS() instead of __P()
* - sigaction(),sigsuspend(),Signal(),signal(): use handler_t typedef
* instead of explicit type.
*/
/*
#include <signal.h>
*/
#define IS_KSH
#include "sh.h"
/*
#ifndef __P
# if defined(__STDC__) || defined(__cplusplus)
# define __P(p) p
# else
# define __P(p) ()
# endif
#endif
*/
/*
* some systems have a faulty sigaction() implementation!
* Allow us to bypass it.
* Or they may have installed sigact.h as signal.h which is why
* we have SA_NOCLDSTOP defined.
*/
#ifdef USE_FAKE_SIGACT /* let autoconf decide.. */
/* #if !defined(SA_NOCLDSTOP) || defined(_SIGACT_H) || defined(USE_SIGNAL) || defined(USE_SIGSET) || defined(USE_SIGMASK) */
/* Let autoconf decide which to use */
#ifdef BSD42_SIGNALS
# define USE_SIGMASK
#else
# ifdef BSD41_SIGNALS
# define USE_SIGSET
# else
# define USE_SIGNAL
# endif
#endif /* BSD42_SIGNALS */
/*
* if we haven't been told,
* try and guess what we should implement with.
*/
#if !defined(USE_SIGSET) && !defined(USE_SIGMASK) && !defined(USE_SIGNAL)
# if defined(sigmask) || defined(BSD) || defined(_BSD) && !defined(BSD41)
# define USE_SIGMASK
# else
# ifndef NO_SIGSET
# define USE_SIGSET
# else
# define USE_SIGNAL
# endif
# endif
#endif
/*
* if we still don't know, we're in trouble
*/
#if !defined(USE_SIGSET) && !defined(USE_SIGMASK) && !defined(USE_SIGNAL)
error must know what to implement with
#endif
#include "sigact.h"
/*
* in case signal() has been mapped to our Signal().
*/
#undef signal
int
sigaction(sig, act, oact)
int sig;
struct sigaction *act, *oact;
{
handler_t oldh;
if (act)
{
#ifdef USE_SIGSET
oldh = sigset(sig, act->sa_handler);
#else
# ifdef USE_SIGMASK
struct sigvec nsv,osv;
nsv.sv_handler = act->sa_handler;
nsv.sv_mask = 0; /* punt */
nsv.sv_flags = SV_INTERRUPT; /* punt */
sigvec(sig, &nsv, &osv);
oldh = osv.sv_handler;
# else /* USE_SIGMASK */
oldh = signal(sig, act->sa_handler);
# endif /* USE_SIGMASK */
#endif
}
else
{
if (oact)
{
#ifdef USE_SIGSET
oldh = sigset(sig, SIG_IGN);
#else
oldh = signal(sig, SIG_IGN);
#endif
if (oldh != SIG_IGN && oldh != SIG_ERR)
{
#ifdef USE_SIGSET
(void) sigset(sig, oldh);
#else
(void) signal(sig, oldh);
#endif
}
}
}
if (oact)
{
oact->sa_handler = oldh;
}
return 0; /* hey we're faking it */
}
int
sigaddset(mask, sig)
sigset_t *mask;
int sig;
{
*mask |= sigmask(sig);
return 0;
}
#ifndef IS_KSH
int
sigdelset(mask, sig)
sigset_t *mask;
int sig;
{
*mask &= ~(sigmask(sig));
return 0;
}
#endif /* IS_KSH */
int
sigemptyset(mask)
sigset_t *mask;
{
*mask = 0;
return 0;
}
#ifndef IS_KSH
int
sigfillset(mask)
sigset_t *mask;
{
*mask = ~0;
return 0;
}
#endif /* IS_KSH */
#ifndef IS_KSH
int
sigismember(mask, sig)
sigset_t *mask;
int sig;
{
return ((*mask) & sigmask(sig));
}
#endif /* IS_KSH */
#ifndef IS_KSH
int
sigpending(set)
sigset_t *set;
{
return 0; /* faking it! */
}
#endif /* IS_KSH */
int
sigprocmask(how, set, oset)
int how;
sigset_t *set, *oset;
{
#ifdef USE_SIGSET
register int i;
#endif
static sigset_t sm;
static int once = 0;
if (!once)
{
/*
* initally we clear sm,
* there after, it represents the last
* thing we did.
*/
once++;
#ifdef USE_SIGMASK
sm = sigblock(0);
#else
sm = 0;
#endif
}
if (oset)
*oset = sm;
if (set)
{
switch (how)
{
case SIG_BLOCK:
sm |= *set;
break;
case SIG_UNBLOCK:
sm &= ~(*set);
break;
case SIG_SETMASK:
sm = *set;
break;
}
#ifdef USE_SIGMASK
(void) sigsetmask(sm);
#else
# ifdef USE_SIGSET
for (i = 1; i < NSIG; i++)
{
if (how == SIG_UNBLOCK)
{
if (*set & sigmask(i))
sigrelse(i);
}
else
if (sm & sigmask(i))
{
sighold(i);
}
}
# endif
#endif
}
return 0;
}
int
sigsuspend(mask)
sigset_t *mask;
{
#ifdef USE_SIGMASK
sigpause(*mask);
#else
register int i;
# ifdef USE_SIGSET
for (i = 1; i < NSIG; i++)
{
if (*mask & sigmask(i))
{
/* not the same sigpause() as above! */
sigpause(i);
break;
}
}
# else /* signal(2) only */
handler_t oldh;
/*
* make sure that signals in mask will not
* be ignored.
*/
for (i = 1; i < NSIG; i++)
{
if (*mask & sigmask(i))
{
if ((oldh = signal(i, SIG_DFL)) != SIG_ERR &&
oldh != SIG_IGN &&
oldh != SIG_DFL)
(void) signal(i, oldh); /* restore handler */
}
}
pause(); /* wait for a signal */
# endif
#endif
return 0;
}
#endif /* USE_FAKE_SIGACT (was ! SA_NOCLDSTOP) */
#if !defined(RETSIGTYPE)
# define RETSIGTYPE void
# define RETSIGVAL
#endif
#if !defined(SIG_ERR)
# define SIG_ERR (RETSIGTYPE (*)())-1
#endif
/*
* an implementation of signal() using sigaction().
*/
#ifndef IS_KSH
handler_t Signal(sig, handler)
int sig;
handler_t handler;
{
struct sigaction act, oact;
act.sa_handler = handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if (sigaction(sig, &act, &oact) < 0)
return (SIG_ERR);
return (oact.sa_handler);
}
#endif /* IS_KSH */
#ifndef IS_KSH
#if !defined(USE_SIGNAL) && !defined(USE_SIGMASK) && !defined(NO_SIGNAL)
/*
* ensure we avoid signal mayhem
*/
handler_t signal(sig, handler)
int sig;
handler_t handler;
{
return (Signal(sig, handler));
}
#endif
#endif /* IS_KSH */
/* This lot (for GNU-Emacs) goes at the end of the file. */
/*
* Local Variables:
* version-control:t
* comment-column:40
* End:
*/

129
sigact.h
View File

@ -1,129 +0,0 @@
/* NAME:
* sigact.h - sigaction et al
*
* SYNOPSIS:
* #include "sigact.h"
*
* DESCRIPTION:
* This header is the interface to a fake sigaction(2)
* implementation. It provides a POSIX compliant interface
* to whatever signal handling mechanisms are available.
* It also provides a Signal() function that is implemented
* in terms of sigaction().
* If not using signal(2) as part of the underlying
* implementation (USE_SIGNAL or USE_SIGMASK), and
* NO_SIGNAL is not defined, it also provides a signal()
* function that calls Signal().
*
* SEE ALSO:
* sigact.c
*/
/*
* RCSid:
* $Id: sigact.h,v 1.1 2004/03/21 00:34:16 tg Exp $
*/
/* Changes to sigact.h for pdksh, Michael Rendell <michael@cs.mun.ca>:
* - changed SIG_HDLR to RETSIGTYPE for use with GNU autoconf
* - added RETSIGVAL
* - ifdef'd out ARGS(), volatile and const initializations
* - ifdef'd out sigset_t definition - let autoconf handle it
* - ifdef out routines not used in ksh if IS_KSH is defined
* (same in sigact.c).
*/
#ifndef _SIGACT_H
#define _SIGACT_H
/*
* most modern systems use void for signal handlers but
* not all.
*/
#ifndef RETSIGTYPE
# define RETSIGTYPE void
# define RETSIGVAL
#endif
#if 0 /* ARGS(), volatile and const are already set up in config*.h -mhr */
#undef ARGS
#if defined(__STDC__) || defined(__cplusplus)
# define ARGS(p) p
#else
# define ARGS(p) ()
# define volatile /* don't optimize please */
# define const /* read only */
#endif
#endif
#ifndef IS_KSH
handler_t Signal ARGS((int sig, handler_t disp));
#endif /* IS_KSH */
/*
* if you want to install this header as signal.h,
* modify this to pick up the original signal.h
*/
#ifndef SIGKILL
# include <signal.h>
#endif
#ifndef SIG_ERR
# define SIG_ERR ((handler_t) -1)
#endif
#ifndef BADSIG
# define BADSIG SIG_ERR
#endif
#ifndef SA_NOCLDSTOP
/* we assume we need the fake sigaction */
/* sa_flags */
#define SA_NOCLDSTOP 1 /* don't send SIGCHLD on child stop */
#define SA_RESTART 2 /* re-start I/O */
/* sigprocmask flags */
#define SIG_BLOCK 1
#define SIG_UNBLOCK 2
#define SIG_SETMASK 4
#if 0 /* autoconf will define sigset_t if it isn't available */
/*
* this is a bit untidy
*/
#if !defined(__sys_stdtypes_h)
typedef unsigned int sigset_t;
#endif
#endif /* 0 */
/*
* POSIX sa_handler should return void, but since we are
* implementing in terms of something else, it may
* be appropriate to use the normal RETSIGTYPE return type
*/
struct sigaction
{
handler_t sa_handler;
sigset_t sa_mask;
int sa_flags;
};
int sigaction ARGS(( int sig, struct sigaction *act, struct sigaction *oact ));
int sigaddset ARGS(( sigset_t *mask, int sig ));
#ifndef IS_KSH
int sigdelset ARGS(( sigset_t *mask, int sig ));
#endif /* IS_KSH */
int sigemptyset ARGS(( sigset_t *mask ));
#ifndef IS_KSH
int sigfillset ARGS(( sigset_t *mask ));
int sigismember ARGS(( sigset_t *mask, int sig ));
int sigpending ARGS(( sigset_t *set ));
#endif /* IS_KSH */
int sigprocmask ARGS(( int how, sigset_t *set, sigset_t *oset ));
int sigsuspend ARGS(( sigset_t *mask ));
#ifndef sigmask
# define sigmask(s) (1<<((s)-1)) /* convert SIGnum to mask */
#endif
#if !defined(NSIG) && defined(_NSIG)
# define NSIG _NSIG
#endif
#endif /* ! SA_NOCLDSTOP */
#endif /* _SIGACT_H */

View File

@ -1 +0,0 @@
Tue Apr 20 17:32:21 NDT 1999