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…
x
Reference in New Issue
Block a user