these files were only to be added in vendor branch
This commit is contained in:
parent
d8e4d937ba
commit
dcd49c4606
330
Makefile.in
330
Makefile.in
|
@ -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
|
185
acconfig.h
185
acconfig.h
|
@ -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 */
|
89
check-fd.c
89
check-fd.c
|
@ -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;
|
||||
}
|
101
check-pgrp.c
101
check-pgrp.c
|
@ -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;
|
||||
}
|
255
check-sigs.c
255
check-sigs.c
|
@ -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 */
|
360
config.h.in
360
config.h.in
|
@ -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 */
|
209
etc/ksh.kshrc
209
etc/ksh.kshrc
|
@ -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;:\$;;"`
|
||||
}
|
310
etc/profile
310
etc/profile
|
@ -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
|
|
@ -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
|
119
install-sh
119
install-sh
|
@ -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
|
652
misc/Bugs
652
misc/Bugs
|
@ -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
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
}
|
|
@ -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)
|
|
@ -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.
|
118
misc/README.sjg
118
misc/README.sjg
|
@ -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>
|
|
@ -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
|
|
@ -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>
|
||||
|
118
misc/ReadMe.jrm
118
misc/ReadMe.jrm
|
@ -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
|
|
@ -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
44
mkman
|
@ -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
|
|
@ -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
|
323
os2/Makefile
323
os2/Makefile
|
@ -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
|
106
os2/NEWS.os2
106
os2/NEWS.os2
|
@ -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.
|
||||
|
498
os2/README.os2
498
os2/README.os2
|
@ -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
|
||||
|
|
@ -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'}
|
345
os2/config.h
345
os2/config.h
|
@ -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 */
|
|
@ -1,2 +0,0 @@
|
|||
extproc ksh
|
||||
echo Please run os2/configure.
|
|
@ -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
|
||||
|
||||
|
132
os2/emacs.out
132
os2/emacs.out
|
@ -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
|
118
os2/kshrc.ksh
118
os2/kshrc.ksh
|
@ -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 ;
|
||||
}
|
44
os2/make.sed
44
os2/make.sed
|
@ -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
264
os2/os2.c
|
@ -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;
|
||||
}
|
19
os2/os2bugs
19
os2/os2bugs
|
@ -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.
|
|
@ -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"},
|
28
os2/th.cmd
28
os2/th.cmd
|
@ -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
482
sigact.c
|
@ -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
129
sigact.h
|
@ -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 */
|
|
@ -1 +0,0 @@
|
|||
Tue Apr 20 17:32:21 NDT 1999
|
Loading…
Reference in New Issue