perl 5.0 alpha 9
Larry Wall [Wed, 4 May 1994 23:00:00 +0000 (23:00 +0000)]
[editor's note: the sparc executables have not been included,
and emacs backup files have been removed]

444 files changed:
.config/README [deleted file]
.config/instruct [deleted file]
.package
AppleMPW [deleted file]
B1 [deleted file]
Bugs/amiga [deleted file]
Bugs/arraynotok [deleted file]
Bugs/clearmyarray [deleted file]
Bugs/clobberref [deleted file]
Bugs/delete_env [deleted file]
Bugs/f2p_prune [deleted file]
Bugs/formatsub [deleted file]
Bugs/lcsort [deleted file]
Bugs/lcsortdump [deleted file]
Bugs/localenv [new file with mode: 0644]
Bugs/mig [deleted file]
Bugs/myforeach [deleted file]
Bugs/numkey [deleted file]
Bugs/signedbits [deleted file]
Bugs/splitdump [deleted file]
Bugs/splitscalar [deleted file]
Bugs/subform [deleted file]
Bugs/substleak [deleted file]
Bugs/substrdump [deleted file]
Bugs/zeroanonref [deleted file]
Changes
Configure
Is [deleted file]
MANIFEST
MANIFEST.new
Makefile
Makefile.SH
NDBM_File.c
ODBM_File.c
PACKINGLIST@34 [deleted file]
POSIX.c
Quick [deleted file]
README.Conf
SDBM_File.c
TCL [deleted file]
Todo
U/Extensions.U
U/Guess.U [new file with mode: 0644]
U/Loc.U
U/Oldconfig.U
U/alignbytes.U [new file with mode: 0644]
U/cc.U
U/ccflags.U
U/d_casti32.U
U/d_htonl.U [new file with mode: 0644]
U/d_isascii.U
U/d_readdir.U [new file with mode: 0644]
U/d_safebcpy.U [new file with mode: 0644]
U/d_safemcpy.U [new file with mode: 0644]
U/d_setlocale.U
U/d_shmat.U [new file with mode: 0644]
U/d_strerror.U
U/d_vfork.U [new file with mode: 0644]
U/dlsrc.U
U/gidtype.U
U/groupstype.U
U/i_dlfcn.U
U/i_net_errno.U [new file with mode: 0644]
U/i_pwd.U [new file with mode: 0644]
U/i_sdbm.U [new file with mode: 0644]
U/i_sgtty.U [new file with mode: 0644]
U/i_termio.U [new file with mode: 0644]
U/i_termios.U [new file with mode: 0644]
U/i_vfork.U [new file with mode: 0644]
U/libc.U
U/libpth.U
U/libs.U
U/libyacc.U
U/lns.U [new file with mode: 0644]
U/loc_sed.U [new file with mode: 0644]
U/mallocsrc.U
U/prototype.U
U/sig_name.U [new file with mode: 0644]
U/voidflags.U
U/yacc.U
av.c
bar
bar.out [deleted file]
bar.pm [deleted file]
byacc [new symlink]
config.H
config.h
config.sh
config_h.SH
configpm
debstack [deleted file]
dl_sunos.c [new file with mode: 0644]
dlperl/Makefile [deleted file]
dlperl/dlperl.c [deleted file]
dlperl/dlperl.doc [deleted file]
dlperl/dlperl.man [deleted file]
dlperl/usersub.c [deleted file]
doSH [changed mode: 0644->0755]
doio.c
dump.c
eg/client [moved from client with 100% similarity]
eg/server [moved from server with 100% similarity]
embed.h
ext/dbm/ODBM_File.xs
ext/dbm/SDBM_File.so [new file with mode: 0755]
ext/dbm/perl [new symlink]
ext/dbm/sdbm/Makefile [new file with mode: 0755]
ext/dbm/sdbm/Makefile.SH [new file with mode: 0644]
ext/dbm/sdbm/README.too
ext/dbm/sdbm/dbm.h
ext/dbm/sdbm/hash.c
ext/dbm/sdbm/libsdbm.a [new file with mode: 0644]
ext/dbm/sdbm/libsdbm_pure_q552_110.a [new file with mode: 0644]
ext/dbm/sdbm/makefile.sdbm [new file with mode: 0644]
ext/dbm/sdbm/pair.c
ext/dbm/sdbm/sdbm.c
ext/dbm/sdbm/sdbm.h
ext/dbm/sdbm/tune.h
ext/dl/dl_hpux.c [new file with mode: 0644]
ext/dl/dl_next.c [new file with mode: 0644]
ext/dl/dl_sunos.c [new file with mode: 0644]
ext/dl/eg/test [new file with mode: 0755]
ext/dl/eg/test1 [new file with mode: 0755]
ext/posix/POSIX.xs
ext/posix/typemap
ext/typemap
fib4 [new file with mode: 0755]
fixmac [deleted file]
fixpp [deleted file]
fo [deleted file]
foo
foo.sh [deleted file]
formstuff [deleted file]
forop [deleted file]
global.sym
goto [deleted file]
gv.c
handy.h
hints/3b1cc
hints/aix_rs.sh
hints/cray.sh
hints/dec_osf_2_0.sh [new file with mode: 0644]
hints/hp9000_700.sh
hints/isc_3_2_3.sh
hints/next_3_2.sh [new file with mode: 0644]
hints/titan.sh
hv.c
installperl
interleave [deleted file]
keywords.h
lib/Config.pm
lib/English.pm
lib/Hostname.pm
lib/NDBM_File.pm [new file with mode: 0644]
lib/POSIX.pm
lib/SDBM_File.pm
lib/Termcap.pm [moved from lib/termcap.pl with 89% similarity]
lib/auto/NDBM_File.so [new file with mode: 0755]
lib/auto/NDBM_File/NDBM_File.so [new file with mode: 0755]
lib/auto/ODBM_File.so [new file with mode: 0755]
lib/auto/ODBM_File/ODBM_File.so [new file with mode: 0755]
lib/auto/POSIX.so [new file with mode: 0755]
lib/auto/POSIX/POSIX.so [new file with mode: 0755]
lib/auto/POSIX/_exit.al [new file with mode: 0644]
lib/auto/POSIX/abort.al [new file with mode: 0644]
lib/auto/POSIX/abs.al [new file with mode: 0644]
lib/auto/POSIX/access.al [new file with mode: 0644]
lib/auto/POSIX/alarm.al [new file with mode: 0644]
lib/auto/POSIX/asctime.al [new file with mode: 0644]
lib/auto/POSIX/assert.al [new file with mode: 0644]
lib/auto/POSIX/atan2.al [new file with mode: 0644]
lib/auto/POSIX/atexit.al [new file with mode: 0644]
lib/auto/POSIX/atof.al [new file with mode: 0644]
lib/auto/POSIX/atoi.al [new file with mode: 0644]
lib/auto/POSIX/atol.al [new file with mode: 0644]
lib/auto/POSIX/bsearch.al [new file with mode: 0644]
lib/auto/POSIX/calloc.al [new file with mode: 0644]
lib/auto/POSIX/cfgetispeed.al [new file with mode: 0644]
lib/auto/POSIX/cfgetospeed.al [new file with mode: 0644]
lib/auto/POSIX/cfsetispeed.al [new file with mode: 0644]
lib/auto/POSIX/cfsetospeed.al [new file with mode: 0644]
lib/auto/POSIX/chdir.al [new file with mode: 0644]
lib/auto/POSIX/chmod.al [new file with mode: 0644]
lib/auto/POSIX/chown.al [new file with mode: 0644]
lib/auto/POSIX/clearerr.al [new file with mode: 0644]
lib/auto/POSIX/clock.al [new file with mode: 0644]
lib/auto/POSIX/close.al [new file with mode: 0644]
lib/auto/POSIX/closedir.al [new file with mode: 0644]
lib/auto/POSIX/cos.al [new file with mode: 0644]
lib/auto/POSIX/creat.al [new file with mode: 0644]
lib/auto/POSIX/ctermid.al [new file with mode: 0644]
lib/auto/POSIX/ctime.al [new file with mode: 0644]
lib/auto/POSIX/cuserid.al [new file with mode: 0644]
lib/auto/POSIX/difftime.al [new file with mode: 0644]
lib/auto/POSIX/div.al [new file with mode: 0644]
lib/auto/POSIX/dup.al [new file with mode: 0644]
lib/auto/POSIX/dup2.al [new file with mode: 0644]
lib/auto/POSIX/errno.al [new file with mode: 0644]
lib/auto/POSIX/execl.al [new file with mode: 0644]
lib/auto/POSIX/execle.al [new file with mode: 0644]
lib/auto/POSIX/execlp.al [new file with mode: 0644]
lib/auto/POSIX/execv.al [new file with mode: 0644]
lib/auto/POSIX/execve.al [new file with mode: 0644]
lib/auto/POSIX/execvp.al [new file with mode: 0644]
lib/auto/POSIX/exit.al [new file with mode: 0644]
lib/auto/POSIX/exp.al [new file with mode: 0644]
lib/auto/POSIX/fabs.al [new file with mode: 0644]
lib/auto/POSIX/fclose.al [new file with mode: 0644]
lib/auto/POSIX/fcntl.al [new file with mode: 0644]
lib/auto/POSIX/fdopen.al [new file with mode: 0644]
lib/auto/POSIX/feof.al [new file with mode: 0644]
lib/auto/POSIX/ferror.al [new file with mode: 0644]
lib/auto/POSIX/fflush.al [new file with mode: 0644]
lib/auto/POSIX/fgetc.al [new file with mode: 0644]
lib/auto/POSIX/fgetpos.al [new file with mode: 0644]
lib/auto/POSIX/fgets.al [new file with mode: 0644]
lib/auto/POSIX/fileno.al [new file with mode: 0644]
lib/auto/POSIX/fopen.al [new file with mode: 0644]
lib/auto/POSIX/fork.al [new file with mode: 0644]
lib/auto/POSIX/fpathconf.al [new file with mode: 0644]
lib/auto/POSIX/fprintf.al [new file with mode: 0644]
lib/auto/POSIX/fputc.al [new file with mode: 0644]
lib/auto/POSIX/fputs.al [new file with mode: 0644]
lib/auto/POSIX/fread.al [new file with mode: 0644]
lib/auto/POSIX/free.al [new file with mode: 0644]
lib/auto/POSIX/freopen.al [new file with mode: 0644]
lib/auto/POSIX/fscanf.al [new file with mode: 0644]
lib/auto/POSIX/fseek.al [new file with mode: 0644]
lib/auto/POSIX/fsetpos.al [new file with mode: 0644]
lib/auto/POSIX/fstat.al [new file with mode: 0644]
lib/auto/POSIX/ftell.al [new file with mode: 0644]
lib/auto/POSIX/fwrite.al [new file with mode: 0644]
lib/auto/POSIX/getc.al [new file with mode: 0644]
lib/auto/POSIX/getchar.al [new file with mode: 0644]
lib/auto/POSIX/getcwd.al [new file with mode: 0644]
lib/auto/POSIX/getegid.al [new file with mode: 0644]
lib/auto/POSIX/getenv.al [new file with mode: 0644]
lib/auto/POSIX/geteuid.al [new file with mode: 0644]
lib/auto/POSIX/getgid.al [new file with mode: 0644]
lib/auto/POSIX/getgrgid.al [new file with mode: 0644]
lib/auto/POSIX/getgrnam.al [new file with mode: 0644]
lib/auto/POSIX/getgroups.al [new file with mode: 0644]
lib/auto/POSIX/getlogin.al [new file with mode: 0644]
lib/auto/POSIX/getpgrp.al [new file with mode: 0644]
lib/auto/POSIX/getpid.al [new file with mode: 0644]
lib/auto/POSIX/getppid.al [new file with mode: 0644]
lib/auto/POSIX/getpwnam.al [new file with mode: 0644]
lib/auto/POSIX/getpwuid.al [new file with mode: 0644]
lib/auto/POSIX/gets.al [new file with mode: 0644]
lib/auto/POSIX/getuid.al [new file with mode: 0644]
lib/auto/POSIX/gmtime.al [new file with mode: 0644]
lib/auto/POSIX/isatty.al [new file with mode: 0644]
lib/auto/POSIX/kill.al [new file with mode: 0644]
lib/auto/POSIX/labs.al [new file with mode: 0644]
lib/auto/POSIX/ldiv.al [new file with mode: 0644]
lib/auto/POSIX/link.al [new file with mode: 0644]
lib/auto/POSIX/localtime.al [new file with mode: 0644]
lib/auto/POSIX/log.al [new file with mode: 0644]
lib/auto/POSIX/longjmp.al [new file with mode: 0644]
lib/auto/POSIX/lseek.al [new file with mode: 0644]
lib/auto/POSIX/malloc.al [new file with mode: 0644]
lib/auto/POSIX/mblen.al [new file with mode: 0644]
lib/auto/POSIX/mbstowcs.al [new file with mode: 0644]
lib/auto/POSIX/mbtowc.al [new file with mode: 0644]
lib/auto/POSIX/memchr.al [new file with mode: 0644]
lib/auto/POSIX/memcmp.al [new file with mode: 0644]
lib/auto/POSIX/memcpy.al [new file with mode: 0644]
lib/auto/POSIX/memmove.al [new file with mode: 0644]
lib/auto/POSIX/memset.al [new file with mode: 0644]
lib/auto/POSIX/mkdir.al [new file with mode: 0644]
lib/auto/POSIX/mkfifo.al [new file with mode: 0644]
lib/auto/POSIX/mktime.al [new file with mode: 0644]
lib/auto/POSIX/offsetof.al [new file with mode: 0644]
lib/auto/POSIX/opendir.al [new file with mode: 0644]
lib/auto/POSIX/pathconf.al [new file with mode: 0644]
lib/auto/POSIX/pause.al [new file with mode: 0644]
lib/auto/POSIX/perror.al [new file with mode: 0644]
lib/auto/POSIX/pipe.al [new file with mode: 0644]
lib/auto/POSIX/pow.al [new file with mode: 0644]
lib/auto/POSIX/printf.al [new file with mode: 0644]
lib/auto/POSIX/putc.al [new file with mode: 0644]
lib/auto/POSIX/putchar.al [new file with mode: 0644]
lib/auto/POSIX/puts.al [new file with mode: 0644]
lib/auto/POSIX/qsort.al [new file with mode: 0644]
lib/auto/POSIX/raise.al [new file with mode: 0644]
lib/auto/POSIX/rand.al [new file with mode: 0644]
lib/auto/POSIX/read.al [new file with mode: 0644]
lib/auto/POSIX/readdir.al [new file with mode: 0644]
lib/auto/POSIX/realloc.al [new file with mode: 0644]
lib/auto/POSIX/remove.al [new file with mode: 0644]
lib/auto/POSIX/rename.al [new file with mode: 0644]
lib/auto/POSIX/rewind.al [new file with mode: 0644]
lib/auto/POSIX/rewinddir.al [new file with mode: 0644]
lib/auto/POSIX/rmdir.al [new file with mode: 0644]
lib/auto/POSIX/scanf.al [new file with mode: 0644]
lib/auto/POSIX/setbuf.al [new file with mode: 0644]
lib/auto/POSIX/setgid.al [new file with mode: 0644]
lib/auto/POSIX/setjmp.al [new file with mode: 0644]
lib/auto/POSIX/setpgid.al [new file with mode: 0644]
lib/auto/POSIX/setsid.al [new file with mode: 0644]
lib/auto/POSIX/setuid.al [new file with mode: 0644]
lib/auto/POSIX/setvbuf.al [new file with mode: 0644]
lib/auto/POSIX/sigaction.al [new file with mode: 0644]
lib/auto/POSIX/sigaddset.al [new file with mode: 0644]
lib/auto/POSIX/sigdelset.al [new file with mode: 0644]
lib/auto/POSIX/sigemptyset.al [new file with mode: 0644]
lib/auto/POSIX/sigfillset.al [new file with mode: 0644]
lib/auto/POSIX/sigismember.al [new file with mode: 0644]
lib/auto/POSIX/siglongjmp.al [new file with mode: 0644]
lib/auto/POSIX/signal.al [new file with mode: 0644]
lib/auto/POSIX/sigpending.al [new file with mode: 0644]
lib/auto/POSIX/sigprocmask.al [new file with mode: 0644]
lib/auto/POSIX/sigsetjmp.al [new file with mode: 0644]
lib/auto/POSIX/sigsuspend.al [new file with mode: 0644]
lib/auto/POSIX/sin.al [new file with mode: 0644]
lib/auto/POSIX/sleep.al [new file with mode: 0644]
lib/auto/POSIX/sprintf.al [new file with mode: 0644]
lib/auto/POSIX/sqrt.al [new file with mode: 0644]
lib/auto/POSIX/srand.al [new file with mode: 0644]
lib/auto/POSIX/sscanf.al [new file with mode: 0644]
lib/auto/POSIX/stat.al [new file with mode: 0644]
lib/auto/POSIX/strcat.al [new file with mode: 0644]
lib/auto/POSIX/strchr.al [new file with mode: 0644]
lib/auto/POSIX/strcmp.al [new file with mode: 0644]
lib/auto/POSIX/strcoll.al [new file with mode: 0644]
lib/auto/POSIX/strcpy.al [new file with mode: 0644]
lib/auto/POSIX/strcspn.al [new file with mode: 0644]
lib/auto/POSIX/strerror.al [new file with mode: 0644]
lib/auto/POSIX/strftime.al [new file with mode: 0644]
lib/auto/POSIX/strlen.al [new file with mode: 0644]
lib/auto/POSIX/strncat.al [new file with mode: 0644]
lib/auto/POSIX/strncmp.al [new file with mode: 0644]
lib/auto/POSIX/strncpy.al [new file with mode: 0644]
lib/auto/POSIX/stroul.al [new file with mode: 0644]
lib/auto/POSIX/strpbrk.al [new file with mode: 0644]
lib/auto/POSIX/strrchr.al [new file with mode: 0644]
lib/auto/POSIX/strspn.al [new file with mode: 0644]
lib/auto/POSIX/strstr.al [new file with mode: 0644]
lib/auto/POSIX/strtod.al [new file with mode: 0644]
lib/auto/POSIX/strtok.al [new file with mode: 0644]
lib/auto/POSIX/strtol.al [new file with mode: 0644]
lib/auto/POSIX/strxfrm.al [new file with mode: 0644]
lib/auto/POSIX/sysconf.al [new file with mode: 0644]
lib/auto/POSIX/system.al [new file with mode: 0644]
lib/auto/POSIX/tan.al [new file with mode: 0644]
lib/auto/POSIX/tcdrain.al [new file with mode: 0644]
lib/auto/POSIX/tcflow.al [new file with mode: 0644]
lib/auto/POSIX/tcflush.al [new file with mode: 0644]
lib/auto/POSIX/tcgetattr.al [new file with mode: 0644]
lib/auto/POSIX/tcgetpgrp.al [new file with mode: 0644]
lib/auto/POSIX/tcsendbreak.al [new file with mode: 0644]
lib/auto/POSIX/tcsetattr.al [new file with mode: 0644]
lib/auto/POSIX/tcsetpgrp.al [new file with mode: 0644]
lib/auto/POSIX/time.al [new file with mode: 0644]
lib/auto/POSIX/times.al [new file with mode: 0644]
lib/auto/POSIX/tmpfile.al [new file with mode: 0644]
lib/auto/POSIX/tmpnam.al [new file with mode: 0644]
lib/auto/POSIX/tolower.al [new file with mode: 0644]
lib/auto/POSIX/toupper.al [new file with mode: 0644]
lib/auto/POSIX/ttyname.al [new file with mode: 0644]
lib/auto/POSIX/tzname.al [new file with mode: 0644]
lib/auto/POSIX/tzset.al [new file with mode: 0644]
lib/auto/POSIX/umask.al [new file with mode: 0644]
lib/auto/POSIX/ungetc.al [new file with mode: 0644]
lib/auto/POSIX/unlink.al [new file with mode: 0644]
lib/auto/POSIX/utime.al [new file with mode: 0644]
lib/auto/POSIX/vfprintf.al [new file with mode: 0644]
lib/auto/POSIX/vprintf.al [new file with mode: 0644]
lib/auto/POSIX/vsprintf.al [new file with mode: 0644]
lib/auto/POSIX/wait.al [new file with mode: 0644]
lib/auto/POSIX/waitpid.al [new file with mode: 0644]
lib/auto/POSIX/wcstombs.al [new file with mode: 0644]
lib/auto/POSIX/wctomb.al [new file with mode: 0644]
lib/auto/POSIX/write.al [new file with mode: 0644]
lib/auto/SDBM_File.so [new file with mode: 0755]
lib/auto/SDBM_File/SDBM_File.so [new file with mode: 0755]
lib/auto/SDBM_File/foo [new file with mode: 0755]
lib/chat2.inter [new file with mode: 0644]
lib/dumpvar.pl
make.out
makedepend
makedepend.SH
makedir
makefile
makefile.lib [deleted file]
malloc.c
match_stuff [deleted file]
mg.c
mg.h
miniperlmain.c
miniperlmain.x [moved from libperl.rlb with 100% similarity]
net [new symlink]
oldcmdcruft [deleted file]
op.c
op.h
opcode.h
opcode.pl
oy [deleted file]
package [deleted file]
parse_format [deleted file]
pat/env.pat [new file with mode: 0644]
pat/inherit.pat [new file with mode: 0644]
perl.c
perl.h
perl.man
perl5-notes [new file with mode: 0644]
perlmain.c
perly.c
perly.h
perly.h.yacc [deleted file]
perly.y
perly.y.save [deleted file]
pp.c
pp.h
predump [deleted file]
proto.h
re_tests [deleted file]
run.c
save_ary.bad [deleted file]
scope.c
scope.h
sortfunc [deleted file]
sv.c
sv.h
sv_append_till [deleted file]
syntax [deleted file]
t/foo
t/lib/ndbm.t [new file with mode: 0755]
t/lib/sdbm.t
t/perl5a1.tar [new file with mode: 0644]
tofix [deleted file]
toke.c
toke.c.pat1 [new file with mode: 0644]
trace.out [moved from libtperl.rlb with 100% similarity]
trans_stuff [deleted file]
usersub.c
util.c
writemain
writemain.SH [new file with mode: 0644]
x2p/Makefile
x2p/makefile
x2p/malloc.c
x2p/str.c
xf

diff --git a/.config/README b/.config/README
deleted file mode 100644 (file)
index 943361f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-This directory created by Configure to save information that should
-persist across sessions.
-
-You may safely delete it if you wish.
diff --git a/.config/instruct b/.config/instruct
deleted file mode 100644 (file)
index 13027a5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-lwall
index a084d4f..223efc5 100644 (file)
--- a/.package
+++ b/.package
@@ -1,6 +1,6 @@
 : basic variables
-package=perl
-baserev=4.1
+package=perl5
+baserev=5.0
 patchbranch=1
 mydiff='diff -c'
 maintname='Larry Wall'
diff --git a/AppleMPW b/AppleMPW
deleted file mode 100644 (file)
index b1f223c..0000000
--- a/AppleMPW
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-                                               Larry Wall
-                                               Matthias Neeracher
-                                               c/o 4920 El Camino Real
-                                               Los Altos, CA 94022
-
-                                               March 26, 1993
-
-
-    Gary Little
-    M/S 37-X
-    Apple Computer, Inc.
-    20525 Mariani Ave.
-    Cupertino, CA 95014
-
-    Dear Gary,
-
-    We are writing you as the product manager of Apple's
-    EssentialsoToolsoObjects (E.T.O.) CD-ROM.  As the authors of Perl for
-    MPW, we hereby authorize Apple to distribute Perl for MPW including
-    source code on E.T.O. according to the terms of the "Artistic" license
-    distributed with Perl and enclosed with this letter.  The Perl for MPW
-    materials are hereby confirmed as being provided to Apple free of
-    charge, for the purpose of being distributed on E.T.O.  This
-    authorization includes distribution of Perl for MPW on successive
-    releases of E.T.O. and distribution of revisions to Perl for MPW that
-    we provide you with or agree to.
-
-    Thank you for your efforts in promoting the use of Perl amongst
-    Macintosh developers.
-
-    Sincerely,
-
-
-    ________________________         ________________________
-
-    Larry Wall                       Matthias Neeracher
diff --git a/B1 b/B1
deleted file mode 100644 (file)
index 9b70268..0000000
--- a/B1
+++ /dev/null
@@ -1,7 +0,0 @@
-$ActualRevision = "M";
-
-($junk, $ActualRevision) = '';
-
-chop($ActualRevision);
-
-($name, $ActualRevision, $junk) = split(/\s+/, $ActualRevision);
diff --git a/Bugs/amiga b/Bugs/amiga
deleted file mode 100644 (file)
index fdf9101..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-Article 38050 of comp.sys.amiga.programmer:
-Newsgroups: comp.sys.amiga.programmer
-Path: netlabs!news.cerf.net!usc!howland.reston.ans.net!pipex!uunet!majipoor.cygnus.com!fnf
-From: fnf@cygnus.com (Fred Fish)
-Subject: Re: FreshFish-dec93 CD; broken perl thereon
-Message-ID: <CKBuwv.7qF@cygnus.com>
-Organization: Cygnus Support, Mountain View, CA
-References: <1994Jan20.095600.8371@philips.oz.au> <D> <bruce.0r61@zuhause.mn.org>
-Date: Fri, 28 Jan 1994 06:48:29 GMT
-Lines: 129
-
-In article <bruce.0r61@zuhause.mn.org>,
-Bruce Albrecht <bruce@zuhause.MN.ORG> wrote:
->In article <1994Jan20.095600.8371@philips.oz.au> gduncan@philips.oz.au (Gary Duncan) writes:
->Me too.  I don't have the December Fresh Fish, so I can't comment on it,
->but I have been wondering what it will take to do a fresh port of it anyway.
-
-The diffs that I applied to the base FSF distribution are:
-
-diff -rc perl-4.036-fsf/Configure perl-4.036-amiga/Configure
-*** perl-4.036-fsf/Configure   Mon Feb  8 20:37:48 1993
---- perl-4.036-amiga/Configure Mon Sep 27 21:46:16 1993
-***************
-*** 4023,4029 ****
-      eval $ans;;
-  esac
-  chmod +x doSH
-! ./doSH
-  
-  if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
-      dflt=n
---- 4023,4029 ----
-      eval $ans;;
-  esac
-  chmod +x doSH
-! sh doSH
-  
-  if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
-      dflt=n
-diff -rc perl-4.036-fsf/Makefile.SH perl-4.036-amiga/Makefile.SH
-*** perl-4.036-fsf/Makefile.SH Mon Feb  8 20:35:21 1993
---- perl-4.036-amiga/Makefile.SH       Tue Sep 28 07:16:24 1993
-***************
-*** 349,355 ****
-  
-  test: perl
-       - cd t && chmod +x TEST */*.t
-!      - cd t && (rm -f perl; $(SLN) ../perl perl) && ./perl TEST </dev/tty
-  
-  clist:
-       echo $(c) | tr ' ' '\012' >.clist
---- 349,355 ----
-  
-  test: perl
-       - cd t && chmod +x TEST */*.t
-!      - cd t && (rm -f perl; $(SLN) ../perl perl) && ./perl TEST
-  
-  clist:
-       echo $(c) | tr ' ' '\012' >.clist
-***************
-*** 373,376 ****
-      ln Makefile ../Makefile
-      ;;
-  esac
-! rm -f makefile
---- 373,377 ----
-      ln Makefile ../Makefile
-      ;;
-  esac
-! #rm -f makefile  (AmigaDOS is case-independent)
-! 
-diff -rc perl-4.036-fsf/makedepend.SH perl-4.036-amiga/makedepend.SH
-*** perl-4.036-fsf/makedepend.SH       Mon Feb  8 20:36:27 1993
---- perl-4.036-amiga/makedepend.SH     Mon Sep 27 22:06:33 1993
-***************
-*** 63,71 ****
-  $cat /dev/null >.deptmp
-  $rm -f *.c.c c/*.c.c
-  if test -f Makefile; then
-!     cp Makefile makefile
-  fi
-! mf=makefile
-  if test -f $mf; then
-      defrule=`<$mf sed -n             \
-       -e '/^\.c\.o:.*;/{'             \
---- 63,71 ----
-  $cat /dev/null >.deptmp
-  $rm -f *.c.c c/*.c.c
-  if test -f Makefile; then
-!     cp Makefile Makefile.bak
-  fi
-! mf=Makefile
-  if test -f $mf; then
-      defrule=`<$mf sed -n             \
-       -e '/^\.c\.o:.*;/{'             \
-diff -rc perl-4.036-fsf/perl.h perl-4.036-amiga/perl.h
-*** perl-4.036-fsf/perl.h      Mon Feb  8 20:36:01 1993
---- perl-4.036-amiga/perl.h    Mon Sep 27 22:06:19 1993
-***************
-*** 79,85 ****
---- 79,87 ----
-   */
-  #define HAS_ALARM
-  #define HAS_CHOWN
-+ #ifndef amigados
-  #define HAS_CHROOT
-+ #endif
-  #define HAS_FORK
-  #define HAS_GETLOGIN
-  #define HAS_GETPPID
-***************
-*** 93,99 ****
---- 95,103 ----
-   * password and group functions in general.  All Unix systems do.
-   */
-  #define HAS_GROUP
-+ #ifndef amigados
-  #define HAS_PASSWD
-+ #endif
-  
-  #endif /* !MSDOS */
-  
-diff -rc perl-4.036-fsf/x2p/Makefile.SH perl-4.036-amiga/x2p/Makefile.SH
-*** perl-4.036-fsf/x2p/Makefile.SH     Mon Feb  8 20:36:33 1993
---- perl-4.036-amiga/x2p/Makefile.SH   Mon Sep 27 22:07:15 1993
-***************
-*** 157,160 ****
-      ln Makefile ../Makefile
-      ;;
-  esac
-! rm -f makefile
---- 157,160 ----
-      ln Makefile ../Makefile
-      ;;
-  esac
-! #rm -f makefile
-
-
-
-
-
-
diff --git a/Bugs/arraynotok b/Bugs/arraynotok
deleted file mode 100755 (executable)
index dd1b053..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/perl
-
-#
-# I thought that I would try out some perl 5 features for the first time.
-# So I wrote a small program, included below.  It died, and the partial
-# output looks very much like what I wanted to accompish.  Even if the program
-# had not died, there is still the problem that no output was given under the
-# label "sonia:".
-#
-# Since the output is close, perhaps a bug lurks within...(?)  I'm using the
-# compiled binary provided in the perl5a6 tar file.  I tried to write this
-# post so it could be given to perl with the -x flag.  You should get the
-# output I describe here --
-#                                                      James Bence
-#                                                      jbence@math.ucla.edu
-#
-# Output:
-#
-# Pushed ege into @sonia
-# Pushed caflisch into @joshua
-# Pushed catalina into @julia
-# Pushed lunnon into @sonia
-# Pushed m270alg into @redwood
-# Pushed harten into @joshua
-# Pushed ycc into @joshua
-# Pushed m270wsc into @redwood
-# 
-# 
-# joshua:
-#     caflisch harten ycc 
-# 
-# sonia:
-#     
-# 
-# redwood:
-#     m270alg m270wsc 
-# 
-# julia:
-#     Segmentation fault
-# 
-#
-
-require 5.000;
-
-while (<DATA>) {
-    ($login,$host) = split;
-    push(@{$hostref{$host}},$login);  # t/op/ref.t (22) suggests this is ok.
-    print "Pushed $login into \@$host\n";
-}
-
-print"\n\n";
-
-while ( ($host,$ref) = each(%hostref)) {
-    print "$host:\n    ";
-    $count = 0;
-    foreach $person (@{$ref}) {
-        print $person, " ";
-        $count++;
-        if ($count % 5 == 0) { print "\n    "; }
-    }
-    print "\n\n";
-}
-
-__END__
-ege         sonia
-caflisch    joshua
-catalina    julia
-lunnon      sonia
-m270alg     redwood
-harten      joshua
-ycc         joshua
-m270wsc     redwood
diff --git a/Bugs/clearmyarray b/Bugs/clearmyarray
deleted file mode 100644 (file)
index e4aecb3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-@a = ( 5, 6, 7, 8);
-&foo(1, 2, @a);
-
-sub foo { my($a, $b, @c) = @_;  print scalar(@c), "\n"; }
diff --git a/Bugs/clobberref b/Bugs/clobberref
deleted file mode 100644 (file)
index 4cba683..0000000
+++ /dev/null
@@ -1 +0,0 @@
-$B = [X, Y]; $B = 1; print $B
diff --git a/Bugs/delete_env b/Bugs/delete_env
deleted file mode 100644 (file)
index a4bf8ef..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-delete $ENV{TERM};
-system "env";
diff --git a/Bugs/f2p_prune b/Bugs/f2p_prune
deleted file mode 100644 (file)
index 519003d..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-Article 18849 of comp.lang.perl:
-Path: netlabs!news.cerf.net!usc!howland.reston.ans.net!xlink.net!zib-berlin.de!zrz.TU-Berlin.DE!w204zrz!koen1830
-From: koen1830@w204zrz.zrz.tu-berlin.de (Andreas Koenig)
-Newsgroups: comp.lang.perl
-Subject: Bug in find2perl
-Date: 14 Feb 1994 09:43:16 GMT
-Organization: mal franz, mal anna
-Lines: 22
-Message-ID: <2jnh3k$hcv@brachio.zrz.TU-Berlin.DE>
-Reply-To: k@franz.ww.TU-Berlin.DE
-NNTP-Posting-Host: w204zrz.zrz.tu-berlin.de
-Cc: 
-
-Hi all,
-
-I've encountered a bug in find2perl when used with the -prune Option.
-As there have been some bugreports recently, *and* also because there
-has to be fixed an incompatibility with perl5, I don't try to offer a
-fix, sorry. The bug comes and goes like this (verified for SUN and
-NeXT):
-
-%/usr/bin/find foo -print
-foo
-foo/bar
-foo/bar/baz
-%/usr/bin/find foo -prune -print
-foo
-%perl /usr/local/bin/find2perl foo -prune -print | perl
-foo
-foo/bar
-%perl5a5 /usr/local/bin/find2perl foo -prune -print | perl5a5
-Final $ should be \$ or $name at /usr/local/bin/find2perl line 553, at end of string
-syntax error at /usr/local/bin/find2perl line 553, near ""^$tmp$""
-Execution of /usr/local/bin/find2perl aborted due to compilation errors.
-
-
-
diff --git a/Bugs/formatsub b/Bugs/formatsub
deleted file mode 100755 (executable)
index e995846..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!./perl
-
-format STDOUT {
-    formline "@<<<<<<<<<<<<< @>>>>>>>>>>>\n", "foo", "bar";
-}
-
-write;
diff --git a/Bugs/lcsort b/Bugs/lcsort
deleted file mode 100644 (file)
index 2cbe861..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-Article 20341 of comp.lang.perl:
-Path: netlabs!news.cerf.net!mvb.saic.com!MathWorks.Com!news.kei.com!hookup!swrinde!gatech!taco.cc.ncsu.edu!taco.cc.ncsu.edu!setzer
-From: setzer@math.ncsu.edu (William Setzer)
-Newsgroups: comp.lang.perl
-Subject: perl5a6 bug: sort sub @ary
-Date: 30 Mar 94 13:49:20
-Organization: The Chebychev Church of Probability
-Lines: 23
-Distribution: world
-Message-ID: <SETZER.94Mar30134920@math.math.ncsu.edu>
-NNTP-Posting-Host: math.ncsu.edu
-
-Ok, here's a weird one.  Using the precompiled perl5a6 binary for the
-sun, the following dumps core:
-----
-@S = (0, 1, 2, 3);
-for ("A", "D", "b", "c") { $foo{$i++} = $_; }
-# for (sort { lc($foo{$a}) cmp  lc($foo{$b}) } @S) { print $foo{$_}, "\n"; }
-for (sort Alpha @S)      { print $foo{$_}, "\n"; }
-
-sub Alpha { lc($foo{$a}) cmp  lc($foo{$b}); }
-----
-[Output]
-Segmentation fault (core dumped)
-----
-However, if you comment out the "sort Alpha" and uncomment the "sort
-{lc(...) cmp lc(...) }" line, everything works as expected.  Also note
-that if you uncomment both "sort"s, everything also works as expected.
-Do-do-do-do [twilight zone music :-].
-
-William
-
-PS: Does anyone actually care about these bug reports?  I thought I
-    remember Larry saying that he preferred them in c.l.p., but it
-    wouldn't be the first time my memory has fritzed.
-
-
diff --git a/Bugs/lcsortdump b/Bugs/lcsortdump
deleted file mode 100644 (file)
index 4254305..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-@S = (0, 1, 2, 3);
-for ("A", "D", "b", "c") { $foo{$i++} = $_; }
-# for (sort { lc($foo{$a}) cmp  lc($foo{$b}) } @S) { print $foo{$_}, "\n"; }
-for (sort Alpha @S)      { print $foo{$_}, "\n"; }
-
-sub Alpha { lc($foo{$a}) cmp  lc($foo{$b}); }
diff --git a/Bugs/localenv b/Bugs/localenv
new file mode 100644 (file)
index 0000000..6ab1930
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    local(%ENV);
+    $ENV{OOPS} = OOPS;
+    system 'echo NOT $OOPS';
+}
+system 'echo $OOPS';
diff --git a/Bugs/mig b/Bugs/mig
deleted file mode 100755 (executable)
index a00a8e8..0000000
--- a/Bugs/mig
+++ /dev/null
@@ -1,17 +0,0 @@
-#!./perl
-
-$foo = <<EOF;
-Subject: foobar
-From: baz
-EOF
-
-$* = 1;
-
-$pat = '^([*+&!]*)(Subject:)';
-#$pat =~ s/([a-zA-Z])/[\u$1\l$1]/g;
-#print $pat;
-
-$foo =~ /$pat/g;
-
-print $', "\n";
-
diff --git a/Bugs/myforeach b/Bugs/myforeach
deleted file mode 100644 (file)
index 2ebb663..0000000
+++ /dev/null
@@ -1 +0,0 @@
-sub foo { my $i; for $i (@bar) { } }
diff --git a/Bugs/numkey b/Bugs/numkey
deleted file mode 100644 (file)
index 8d94cba..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-$zz = { 1, 9 };
-print %$zz;                     # wrong; outputs 9
-
-print "\n";
-
-$zz = { "1", 9 };
-print %$zz;                     # ok; outputs 19
-
-print "\n";
-
-%xx = ( 1, 9 );
-print %xx;                      # ok; outputs 19
diff --git a/Bugs/signedbits b/Bugs/signedbits
deleted file mode 100644 (file)
index 2141249..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-printf "%x\n", 0x40000000 | 0x00000010;
-printf "%x\n", 0x80000000 | 0x00000010;
diff --git a/Bugs/splitdump b/Bugs/splitdump
deleted file mode 100644 (file)
index 36d5c9d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-0 + split
diff --git a/Bugs/splitscalar b/Bugs/splitscalar
deleted file mode 100644 (file)
index 6da6d41..0000000
+++ /dev/null
@@ -1 +0,0 @@
-$_ = "a b c" ; $a = ( @b = split ) ; print "$a\n@b\n"
diff --git a/Bugs/subform b/Bugs/subform
deleted file mode 100644 (file)
index b27b8ad..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-Replied: Wed, 02 Mar 94 09:29:46 -0800
-Replied: brad_figg@rainbow.mentorg.com ("Brad Figg")
-Return-Path: brad_figg@rainbow.mentorg.com
-Return-Path: <brad_figg@rainbow.mentorg.com>
-Received: from mgc.mentorg.com by netlabs.com (4.1/SMI-4.1)
-       id AA15524; Wed, 2 Mar 94 09:17:50 PST
-Received: from rainbow.mentorg.com by mgc.mentorg.com with SMTP
-       (16.6/15.5+MGC-TD 2.20) id AA04359; Wed, 2 Mar 94 09:16:55 -0800
-Received: from wv.mentorg.com by rainbow.mentorg.com with SMTP
-       (15.11.1.6/15.5+MGC-TD 2.08) id AA22830; Wed, 2 Mar 94 09:16:53 -0800
-Received: from em-wv02.MENTORG.COM by wv.mentorg.com (8.6.4/CF5.11R)
-       id JAA18865; Wed, 2 Mar 1994 09:16:51 -0800
-Received: from cynic.MENTORG.COM by em-wv02.MENTORG.COM (4.1/CF3.4)
-       id AA23300; Wed, 2 Mar 94 09:16:50 PST
-Received: by cynic.MENTORG.COM (4.1/CF3.4)
-       id AA24503; Wed, 2 Mar 94 09:16:50 PST
-From: brad_figg@rainbow.mentorg.com ("Brad Figg")
-Message-Id: <9403020916.ZM24501@cynic>
-Date: Wed, 2 Mar 1994 09:16:50 -0800
-X-Mailer: Z-Mail (3.0.0 15dec93)
-To: lwall@netlabs.com
-Subject: Perl5 Alpha 6 bug (subs & formats)
-Content-Type: text/plain; charset=us-ascii
-Mime-Version: 1.0
-
-
-The following works just fine as is with Perl 4 but doesn't work with
-Perl5 Alpha 6 unless the format lines are moved outside the sub block.
-
-
-Brad
-
-p.s.  I'm not currently at a point where I can make the actual offer
-      but I'm just asking if you have any interest.  I have access to
-      'Purify' and 'Quantify' from Pure Software. I was thinking of
-      building Perl5 with these just to see what I'd get. Would you
-      be interested in the results?
-
-
------------------------Error.pl---------------------------------
-######################################################################
-##  Package Variables
-##
-
-package Error;
-
-push( @main'Versions, '$Id: Error.pl,v 1.3 1994/02/13 00:26:00 bradf Exp $' );
-
-$Strings[ ($None               =  0) ] =
-    "Everythings OK";
-$Strings[ ($BadFileOpen        =  0) ] =
-    "I was unable to open the file \'%s\' due to:\n$!";
-$Strings[ ($NoVersion          =  0) ] =
-    "Unable to read the first four bytes from the file." .
-    "  This probably means it is an empty file.";
-
-######################################################################
-##
-##  Emsg
-##
-##    Print a formatted error message to STDERR.
-##
-##    Args: 2
-##       1. An error message that may contain printf formatting strings.
-##       2. A list of arguments to be used for the format string
-##          expansions.
-##
-##    Returns:
-##
-##         if successful: none
-##       if unsuccessful: none
-##
-##    Calls:
-##
-##    Requires:
-##
-##    Notes:
-##
-
-sub Emsg
-  {
-    local( $String, @Args ) = @_;
-    local( $Err );
-
-format EFIRSTLINE =
-    *** Error: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$_
-               ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
-$_
-.
-
-format EBODY =
-               ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
-$_
-.
-
-
-    $~ = 'EFIRSTLINE';
-    $Err = sprintf( $String, @Args );
-    foreach (split( "\n", $Err )) {
-        if ( $_ eq '' ) { print( "\n" ); }
-        write;
-        $~ = 'EBODY';
-      }
-  }
-[Acked]
-
diff --git a/Bugs/substleak b/Bugs/substleak
deleted file mode 100644 (file)
index ff14446..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-Return-Path: Martin.Ward@durham.ac.uk
-Return-Path: <Martin.Ward@durham.ac.uk>
-Received: from scalpel.netlabs.com by netlabs.com (4.1/SMI-4.1)
-       id AA01931; Thu, 20 Jan 94 03:56:39 PST
-Received: from netlabs.com (vaccine-eng1.netlabs.com) by scalpel.netlabs.com (4.1/SMI-4.1)
-       id AA09639; Thu, 20 Jan 94 03:56:36 PST
-Received: from sun2.nsfnet-relay.ac.uk by netlabs.com (4.1/SMI-4.1)
-       id AA01923; Thu, 20 Jan 94 03:56:01 PST
-Via: uk.ac.durham; Thu, 20 Jan 1994 11:47:16 +0000
-Received: from easby.dur.ac.uk by durham.ac.uk; Thu, 20 Jan 94 11:47:05 GMT
-Received: from ws-csm3.durham.ac.uk (ws-csm3.dur) by uk.ac.durham.easby;
-          Thu, 20 Jan 94 11:46:29 GMT
-From: Martin.Ward@durham.ac.uk (Martin Ward)
-Date: Thu, 20 Jan 94 11:46:27 GMT
-Message-Id: <AA00871.9401201146.ws-csm3@uk.ac.durham>
-To: des0mpw@easby.durham.ac.uk, lwall@scalpel.netlabs.com
-Subject: Re: My last message
-
->: After saying I was stumped, I managed to track down the problem!
->: The problem was caused by a line much higher up:
->: 
->: $seqpat = "$bs[s]\000e\000q\000\{\000";       # } hack
->: 
->: Changing this by adding {} gives:
->: 
->: $seqpat = "${bs}[s]\000e\000q\000\{\000";       # } hack
->: 
->: which worked! No idea why :-)
->
->It apparently intuited $bs[s] to be an array reference.
-
-Aha! I think the interpretation is:
-"$bs[      s] .....
-^^^^^      ^^
-array ref  Therefore this is an expression, so "s]" is the start of
-           a pattern match/replace, so it scans for ...]....]
-
-I found the line by repeatedly chopping away everything after (and including)
-the line where perl _thought_ the error started. This gradually worked back
-through a nasty cascade of errors!
-
->: No speed improvement this time (the improvement in user time was swamped
->: by an increase in system time. This may be because it uses 5048k of
->: data/stack space, compared with 985k for perl4).
->
->That doesn't sound good.  I hope it's a bug.  Does it grow continuously?
->Hopefully it's just a memory leak.
-
-For perl4 the memory size (shown by top) grows by about 100-150k per 2 seconds,
-for perl5 it grows by about 1 - 1.5 Meg per 2 seconds. I don't use the script
-very often (and I have over 100 Meg of swap space) so its not a big problem.
-Still, with a 124k input file, the size for perl5 went up to 40 Meg!
-
-I have tracked down a memory leak, which is basically one line from the
-texqed script. Store this script in "tmp" and run "perl tmp /vmunix"
-(or some other large random file). Monitor the process using "top" in 
-another window.
-
-Perl4 is OK but perl5 leaks like a leaky cistern.
-
-
-#!/usr/local/bin/perl
-# print a "." every $interval lines:
-$interval = 10;
-open (PAIRS, "$ARGV[0]");
-open (OUT, "> /dev/null");
-$bs = "\\\\" . "\000";
-for (;;) {
-  $line++;
-  if (($line % $interval) == 0) {
-    print STDERR ".";
-  }
-  read(PAIRS, $_, 20);
-  last if ($_ eq "");
-  
-  s/$bs([_^\\])\000/\\\377$1\377/g;
-  
-  print OUT ;
-}
-
-print STDERR "\n";
-
-
-
-I hope you find this useful!
-
-NB Changing the "s/.../.../g" to an "m/.../" (with the same pattern)
-makes the leak go away even on input files where the pattern NEVER matches!!
-
-                       Martin.
-
-JANET: Martin.Ward@uk.ac.durham    Internet (eg US): Martin.Ward@durham.ac.uk
-or if that fails:  Martin.Ward%uk.ac.durham@nsfnet-relay.ac.uk  
-or even: Martin.Ward%DURHAM.AC.UK@CUNYVM.CUNY.EDU
-BITNET: Martin.Ward%durham.ac.uk@UKACRL UUCP:...!uknet!durham!Martin.Ward
-[Last acked 0.7 days ago--not acked]
-
diff --git a/Bugs/substrdump b/Bugs/substrdump
deleted file mode 100644 (file)
index aef3fe5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-    $a="abc";
-    substr(\$a,1,0)='a';
diff --git a/Bugs/zeroanonref b/Bugs/zeroanonref
deleted file mode 100644 (file)
index fd6def9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-$z = \'23'
diff --git a/Changes b/Changes
index 70e9e2b..aa0fec0 100644 (file)
--- a/Changes
+++ b/Changes
@@ -28,7 +28,7 @@ New things
     this means you can return from it.
 
     Format value lists may be spread over multiple lines by enclosing in
-    curlies.
+    a do {} block.
 
     You may now define BEGIN and END subroutines for each package.  The BEGIN
     subroutine executes the moment it's parsed.  The END subroutine executes
@@ -86,6 +86,10 @@ New things
     routine, which will be called if a non-existent subroutine is called in
     that package.
 
+    There is now a pragma mechanism, using the keywords "aver" and "deny".
+    Current pragmas are "integer" and "strict".  Unrecognized pragmas
+    are ignored.
+
 Incompatibilities
 -----------------
     @ now always interpolates an array in double-quotish strings.  Some programs
index bfa8fb3..38e554c 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.3 1993/12/15 08:15:07 ram Exp $
 #
-# Generated on Sat Apr  2 17:29:14 EST 1994 [metaconfig 3.0 PL22]
+# Generated on Wed May  4 14:59:36 EDT 1994 [metaconfig 3.0 PL22]
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -84,7 +84,6 @@ test -d UU || mkdir UU
 cd UU && rm -f *
 
 extensions=''
-d_bsd=''
 d_eunice=''
 d_xenix=''
 eunicefix=''
@@ -155,6 +154,8 @@ vi=''
 zcat=''
 hint=''
 myuname=''
+osname=''
+osvers=''
 Author=''
 Date=''
 Header=''
@@ -166,7 +167,7 @@ Revision=''
 Source=''
 State=''
 afs=''
-alignbytes=''
+memalignbytes=''
 bin=''
 binexp=''
 installbin=''
@@ -232,6 +233,9 @@ d_msgsnd=''
 d_open3=''
 d_portable=''
 d_readdir=''
+d_rewinddir=''
+d_seekdir=''
+d_telldir=''
 d_rename=''
 d_rmdir=''
 d_safebcpy=''
@@ -258,6 +262,7 @@ d_setruid=''
 d_setsid=''
 d_shm=''
 d_shmat=''
+d_voidshmat=''
 d_shmctl=''
 d_shmdt=''
 d_shmget=''
@@ -278,6 +283,8 @@ d_syserrlst=''
 d_symlink=''
 d_syscall=''
 d_system=''
+d_time=''
+timetype=''
 clocktype=''
 d_times=''
 d_truncate=''
@@ -294,8 +301,13 @@ d_charvspr=''
 d_vprintf=''
 d_wait4=''
 d_waitpid=''
+cccdlflags=''
+ccdlflags=''
+dldir=''
 dlobj=''
 dlsrc=''
+lddlflags=''
+shlibsuffix=''
 usedl=''
 gidtype=''
 groupstype=''
@@ -308,7 +320,9 @@ i_dlfcn=''
 i_fcntl=''
 i_gdbm=''
 i_grp=''
+i_memory=''
 i_ndbm=''
+i_neterrno=''
 i_niin=''
 i_sysin=''
 d_pwage=''
@@ -318,6 +332,7 @@ d_pwcomment=''
 d_pwexpire=''
 d_pwquota=''
 i_pwd=''
+i_sdbm=''
 i_stdarg=''
 i_stddef=''
 i_string=''
@@ -337,6 +352,7 @@ i_systime=''
 i_systimek=''
 i_time=''
 timeincl=''
+i_unistd=''
 i_utime=''
 i_varargs=''
 i_varhdr=''
@@ -349,6 +365,9 @@ libpth=''
 plibpth=''
 xlibpth=''
 libs=''
+lns=''
+lseektype=''
+d_mymalloc=''
 mallocobj=''
 mallocsrc=''
 malloctype=''
@@ -371,12 +390,15 @@ n=''
 groupcat=''
 hostcat=''
 passcat=''
+orderlib=''
+ranlib=''
 package=''
 spackage=''
 installprivlib=''
 privlib=''
 privlibexp=''
 prototype=''
+ptrsize=''
 randbits=''
 installscript=''
 scriptdir=''
@@ -572,7 +594,7 @@ true)
 esac
 
 : set package name
-package=perl
+package=perl5
 
 : Eunice requires " " instead of "", can you believe it
 echo " "
@@ -616,7 +638,9 @@ gccversion=''
 : no include file wanted by default
 inclwanted=''
 
- usedl=''
+: File to use for dynamic loading
+usedl=''
+gidtype=''
 groupstype=''
 : change the next line if compiling for Xenix/286 on Xenix/386
 xlibpth='/usr/lib/386 /lib/386'
@@ -631,7 +655,7 @@ libpth="$libpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
 : machines, like the mips.  Usually, it should be empty.
 plibpth=''
 
-libswanted="net socket nsl inet nm sdbm gdbm ndbm dbm malloc dl dld sun m c_s posix cposix ndir dir ucb bsd BSD PW x"
+libswanted=" net socket inet nsl nm sdbm gdbm ndbm dbm malloc dl dld sun m c_s posix cposix ndir dir ucb bsd BSD PW x "
 
 : full support for void wanted by default
 defvoidused=15
@@ -1004,11 +1028,13 @@ cp
 echo
 expr
 grep
+ln
 mkdir
 mv
 rm
 sed
 sort
+touch
 tr
 uniq
 "
@@ -1159,13 +1185,13 @@ EOM
        : Half the following guesses are probably wrong... If you have better
        : tests or hints, please send them to lwall@netlabs.com
        : The metaconfig authors would also appreciate a copy...
-       $test -f /irix && dflt="$dflt sgi"
-       $test -f /xenix && dflt="$dflt sco_xenix"
-       $test -f /dynix && dflt="$dflt dynix"
-       $test -f /dnix && dflt="$dflt dnix"
-       $test -f /bin/mips && /bin/mips && dflt="$dflt mips"
-       $test -d /NextApps && test -f /usr/adm/software_version && dflt="$dflt next"
-       $test -d /usr/include/minix && dflt="$dflt minix"
+       $test -f /irix && osname=sgi
+       $test -f /xenix && osname=sco_xenix
+       $test -f /dynix && osname=dynix
+       $test -f /dnix && osname=dnix
+       $test -f /bin/mips && /bin/mips && osname=mips
+       $test -d /NextApps && test -f /usr/adm/software_version && osname=next
+       $test -d /usr/include/minix && osname=minix
        if $test -f $uname; then
                set X $myuname
                shift
@@ -1173,63 +1199,80 @@ EOM
                $test -f $5.sh && dflt="$dflt $5"
 
                case "$5" in
-               fps*) dflt="$dflt fps";;
+               fps*) osname=fps ;;
                mips*)
                        case "$4" in
-                       umips) dflt="$dflt umips";;
-                       *) dflt="$dflt mips";;
+                       umips) osname=umips ;;
+                       *) osname=mips ;;
                        esac;;
-               [23]100) dflt="$dflt mips";;
-               next*) dflt="$dflt next" ;;
-               news*) dflt="$dflt news" ;;
+               [23]100) osname=mips ;;
+               next*) osname=next ;;
+               news*) osname=news ;;
                i386*) if $test -f /etc/kconfig; then
+                           osname=isc
                                if $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
-                                       dflt="$dflt isc_3_2_3"
+                                       osvers=3.2.3
                                elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
-                                       dflt="$dflt isc_3_2_2"
+                                       osvers=3.2.2
                            fi
-                               : i386.sh hint is wrong for Interactive.
-                               dflt=`echo $dflt | $sed 's/i386//'`
                       fi
                       ;;
                esac
 
                case "$1" in
-               aix) dflt="$dflt aix_rs" ;;
-               sun[Oo][Ss]) case "$3" in
-                       [34]*) vers=`echo $3 | $sed 's/\./_/g'`
-                               dflt="$dflt sunos_$vers" ;;
-                       5*) vers=`echo $3 | $sed 's/^5/2/g'`
-                               dflt="$dflt solaris_$vers" ;;
+               aix) osname=aix_rs ;;
+               sunos) osname=sunos
+                       case "$3" in
+                       [34]*) osvers=$3 ;;
+                       5*) osname=solaris
+                               osvers=`echo $3 | $sed 's/^5/2/g'` ;;
                        esac
                        ;;
-               [sS]olaris) case "$3" in
-                       5*) vers=`echo $3 | $sed 's/^5/2/g'`
-                               dflt="$dflt solaris_$vers" ;;
+               solaris) osname=solaris
+                       case "$3" in
+                       5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
                        esac
                        ;;
-               dnix) dflt="$dflt dnix" ;;
-               dgux) dflt="$dflt dgux" ;;
-               genix) dflt="$dflt genix" ;;
-               hp*ux) dflt="$dflt hpux" ;;
-               next) dflt="$dflt next" ;;
-               irix) dflt="$dflt sgi" ;;
-               ultrix) case "$3" in
-                       3*) dflt="$dflt ultrix_3" ;;
-                       4*) dflt="$dflt ultrix_4" ;;
+               dnix) osname=dnix ;;
+               dgux) osname=dgux ;;
+               genix) osname=genix ;;
+               hp*ux) osname=hpux ;;
+               next) osname=next ;;
+               irix) osname=sgi ;;
+               ultrix) osname=ultrix
+                       case "$3" in
+                       1*) osvers=1 ;;
+                       2*) osvers=2 ;;
+                       3*) osvers=3 ;;
+                       4*) osvers=4 ;;
                        esac
                        ;;
-               uts) dflt="$dflt uts" ;;
-               $2) case "$dflt" in
+               osf1)   case "$5" in
+                               alpha)  osname=dec_osf
+                                       case "$3" in
+                       [vt]1\.*) osvers=1 ;;
+                        [vt]2\.*) osvers=2 ;;
+                        [vt]3\.*) osvers=3 ;;
+                                       esac
+                    ;;
+                       hp*)    osname=hp_osf1  ;;      # TR
+                       mips)   osname=mips_osf1 ;;     # TR
+                       # TR =  Technology Releases: (un^N)supported
+                       esac
+                       ;;
+               uts) osname=uts ;;
+               $2) case "$osname" in
                        *isc*) ;;
                        *)      if test -f /etc/systemid; then
+                               osname=sco
+                               : Does anyone know if these next gyrations are needed
                                set `echo $3 | $sed 's/\./ /g'` $4
                                        if $test -f sco_$1_$2_$3.sh; then
-                                               dflt="$dflt sco_$1_$2_$3"
+                                               osvers=$1.$2.$3
                                        elif $test -f sco_$1_$2.sh; then
-                                               dflt="$dflt sco_$1_$2"
+                                               osvers=$1.$2
                                        elif $test -f sco_$1.sh; then
-                                               dflt="$dflt sco_$1"
+                                               osvers=$1
                                        fi
                                fi
                                ;;
@@ -1240,25 +1283,31 @@ EOM
                if test -f /vmunix -a -f news_os.sh; then
                        (what /vmunix | tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
                        if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
-                               dflt="$dflt news_os"
+                               osname=news_os
                        fi
                        $rm -f ../UU/kernel.what
                fi
        fi
-       set X `echo $dflt | tr ' ' '\012' | sort | uniq`
-       shift
-       dflt=''
-       for file in $*; do
-               if $test -f "$file.sh"; then
-                       dflt="$dflt $file"
-               fi
-       done
-       set X $dflt
-       shift
-       dflt=${1+"$@"}
-       case "$dflt" in
-       '') dflt=none;;
+       
+       : Now look for a hint file osname_osvers
+       file=`echo "${osname}_${osvers}" | sed -e 's@\.@_@g' -e 's@_$@@'`
+       case "$file" in
+       '') dflt=none ;;
+       *)  case "$osvers" in
+               '') dflt=$file 
+                       ;;
+               *)  if $test -f $file.sh ; then
+                               dflt=$file
+                       elif $test -f "${osname}.sh" ; then
+                               dflt="${osname}"
+                       else
+                               dflt=none
+                       fi
+                       ;;
+               esac
+               ;;
        esac
+                       
        $cat <<EOM
 
 You may give one or more space-separated answers, or "none" if appropriate.
@@ -1267,17 +1316,40 @@ If your OS version has no hints, DO NOT give a wrong version -- say "none".
 EOM
        rp="Which of these apply, if any?"
        . ../UU/myread
-       for file in $ans; do
+       tans=$ans
+       for file in $tans; do
                if $test -f $file.sh; then
                        . ./$file.sh
                        $cat $file.sh >> ../UU/config.sh
-               elif $test X$ans = X -o X$ans = Xnone ; then
+               elif $test X$tans = X -o X$tans = Xnone ; then
                        : nothing
                else
-                       echo "$file.sh does not exist -- ignored"
+                       : Give one chance to correct a possible typo.
+                       echo "$file.sh does not exist"
+                       dflt=$file
+                       rp="hint to use instead?"
+                       . ../UU/myread
+                       for file in $ans; do
+                               if $test -f "$file.sh"; then
+                                       . ./$file.sh
+                                       $cat $file.sh >> ../UU/config.sh
+                               elif $test X$ans = X -o X$ans = Xnone ; then
+                                       : nothing
+                               else
+                                       echo "$file.sh does not exist -- ignored."
+                               fi
+                       done
                fi
        done
+
        hint=recommended
+       : Remember our hint file for later.
+       if $test -f "$file.sh" ; then
+               hintfile="$file.sh"
+       else
+               hintfile=none
+       fi
+
        cd ..
 fi
 cd UU
@@ -1303,6 +1375,43 @@ for file in $loclist $trylist; do
        eval $file="\$_$file"
 done
 
+cat << EOM
+Configure uses the operating system name and version to set some defaults.
+Say "none" to leave it blank.
+EOM
+
+case "$osname" in
+       ''|' ')  
+               case "$hintfile" in
+               none) dflt=none ;;
+               *)  dflt=`echo $hintfile | sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
+               esac
+               ;;
+       *) dflt="$osname" ;;
+esac
+rp="Operating system name?"
+. ./myread
+case "$ans" in
+    none)  osname='' ;;
+    *) osname="$ans" ;;
+esac
+
+case "$osvers" in
+       ''|' ')  
+               case "$hintfile" in
+               none) dflt=none ;;
+               *)      dflt=`echo $hintfile | sed -e 's/\.sh$//' -e 's/^[^_]*//'`
+               dflt=`echo $dflt | sed -e 's/^_//' -e 's/_/./g'` ;;
+               esac
+               ;;
+       *) dflt="$osvers" ;;
+esac
+rp="Operating system version?"
+. ./myread
+case "$ans" in
+    none)  osvers='' ;;
+    *) osvers="$ans" ;;
+esac
 : who configured the system
 cf_time=`$date 2>&1`
 cf_by=`( (logname) 2>/dev/null || whoami) 2>&1`
@@ -1479,7 +1588,6 @@ echo exit 1 >osf1
 echo exit 1 >eunice
 echo exit 1 >xenix
 echo exit 1 >venix
-d_bsd="$undef"
 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
 then
@@ -1501,7 +1609,6 @@ elif test `echo abc | tr a-z A-Z` = Abc ; then
        fi
 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
        echo "Looks kind of like a BSD system, but we'll see..."
-       d_bsd="$define"
        echo exit 0 >bsd
 else
        echo "Looks kind of like a Version 7 system, but we'll see..."
@@ -1618,7 +1725,7 @@ return 1;
 #endif
 }
 EOM
-       if $cc -o gccvers $ccflags gccvers.c >/dev/null 2>&1; then
+       if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
            gccversion=`./gccvers`
                echo "You appear to have version $gccversion."
        else
@@ -1925,12 +2032,12 @@ case "$optimize" in
 'none') optimize=" ";;
 esac
 
+dflt=''
 case "$ccflags" in
 '')    case "$cc" in
        *gcc*) if $test "$gccversion" = "1"; then
                        dflt='-fpcc-struct-return'
                   fi ;;
-       *) dflt='';;
        esac
        case "$optimize" in
        *-g*) dflt="$dflt -DDEBUGGING";;
@@ -1944,7 +2051,6 @@ case "$ccflags" in
                ;;
        esac
        ;;
-*) dflt="$ccflags" ;;
 esac
 
 case "$mips_type" in
@@ -1988,6 +2094,10 @@ set signal.h _NO_PROTO; eval $inctest
 case "$dflt" in
 '') dflt=none;;
 esac
+case "$ccflags" in
+'') ;;
+*) dflt="$ccflags";;
+esac
 $cat <<EOH
 
 Your C compiler may want other flags.  For this question you should include
@@ -1996,8 +2106,8 @@ but you should NOT include libraries or ld flags like -lwhatever.  If you
 want $package to honor its debug switch, you should include -DDEBUGGING here.
 To use no flags, specify the word "none".
 
-Your C compiler might also need additional flags, such as -DJMPCLOBBER
-or -DCRIPPLED_CC.
+Your C compiler might also need additional flags, such as -DJMPCLOBBER,
+-DHIDEMYMALLOC or -DCRIPPLED_CC.
 EOH
 set X $dflt
 shift
@@ -2012,9 +2122,10 @@ esac
 : the following weeds options from ccflags that are of no interest to cpp
 cppflags="$ccflags"
 case "$cc" in
-*gcc*) if $test "$gccversion" = "1"; then
-               cppflags="$cppflags -D__GNUC__"
-           fi ;;
+*gcc*)  case "$gccversion" in
+       1) cppflags="$cppflags -D__GNUC__" ;;
+       esac
+       ;;
 esac
 case "$mips_type" in
 '');;
@@ -2027,7 +2138,7 @@ case "$cppflags" in
        for flag
        do
                case $flag in
-               -D*|-I*|-traditional|-ansi|-nostdinc) cppflags="$cppflags $flag";;
+               -D*|-I*|-traditional|-ansi|-nostdinc|-posix|-Xp) cppflags="$cppflags $flag";;
                esac
        done
        case "$cppflags" in
@@ -2104,27 +2215,27 @@ for thislib in $libswanted; do
        case "$thislib" in
        dbm) thatlib=ndbm;;
        *_s) thatlib=NONE;;
-       *) thatlib="${thislib}_s";;
+       *) thatlib=${thislib}_s;;
        esac
        xxx=`./loc lib$thislib.a X $libpth`
        yyy=`./loc lib$thatlib.a X $libpth`
-       zzz=`./loc lib$thislib.so.[0-9]'*' $libpth`
+       zzz=`./loc lib$thislib.so.[0-9]'*' X $libpth`
        if $test -f $xxx; then
                echo "Found -l$thislib."
                case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+               *"-l$thislib "*|*-l$thislib|*"-l$thatlib "*|*-l$thatlib) ;;
                *) dflt="$dflt -l$thislib";;
                esac
        elif $test -f $yyy; then
                echo "Found -l$thatlib."
                case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+               *"-l$thatlib "*|*-l$thatlib) ;;
                *) dflt="$dflt -l$thatlib";;
                esac
        elif $test -f $zzz; then
                echo "Found -$thislib."
                case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+               *"-l$thislib "*|*-l$thislib) ;;
                *) dflt="$dflt -l$thislib";;
                esac
        else
@@ -2133,13 +2244,13 @@ for thislib in $libswanted; do
                if $test -f $xxx; then
                        echo "Found -l$thislib."
                        case "$dflt" in
-                       "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+                       *"-l$thislib "*|*-l$thislib|*"-l$thatlib "*|*-l$thatlib) ;;
                        *) dflt="$dflt -l$thislib";;
                        esac
                elif $test -f $yyy; then
                        echo "Found -l$thatlib."
                        case "$dflt" in
-                       "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+                       *"-l$thatlib "*|*-l$thatlib) ;;
                        *) dflt="$dflt -l$thatlib";;
                        esac
                else
@@ -2758,6 +2869,9 @@ EOCP
                $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then
                h_fcntl=true;
                echo "<fcntl.h> defines the *_OK access constants." >&4
+       elif $test `./findhdr unistd.h` && \
+               $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then
+               echo "<unistd.h> defines the *_OK access constants." >&4
        else
                echo "I can't find the four *_OK access constants--I'll use mine." >&4
        fi
@@ -2816,7 +2930,7 @@ esac'
 : check for ability to cast large floats to 32-bit ints.
 echo " "
 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
-if $test "$intsize" -ge 4; then
+if $test "$intsize" -eq 4; then
     xxx=int
 else
     xxx=long
@@ -2858,7 +2972,7 @@ case "$yyy" in
 esac
 set d_casti32
 eval $setvar
-$rm -f try.*
+$rm -f try try.*
 : check for ability to cast negative floats to unsigned
 echo " "
 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
@@ -3177,10 +3291,70 @@ eval $inlibc
 set getpriority d_getprior
 eval $inlibc
 
+: define an alternate in-header-list? function
+inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
+cont=true; xxf="echo \"<\$1> found.\" >&4";
+case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
+*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
+esac;
+case $# in 4) instead=instead;; *) instead="at last";; esac;
+while $test "$cont"; do
+       xxx=`./findhdr $1`
+       var=$2; eval "was=\$$2";
+       if $test "$xxx" && $test -r "$xxx";
+       then eval $xxf;
+               eval "case \"\$$var\" in $undef) . whoa; esac"; eval "$var=\$td";
+               cont="";
+       else eval $xxnf;
+               eval "case \"\$$var\" in $define) . whoa; esac"; eval "$var=\$tu"; fi;
+       set $yyy; shift; shift; yyy=$@;
+       case $# in 0) cont="";;
+       2) xxf="echo \"but I found <\$1> $instead.\" >&4";
+               xxnf="echo \"and I did not find <\$1> either.\" >&4";;
+       *) xxf="echo \"but I found <\$1\> instead.\" >&4";
+               xxnf="echo \"there is no <\$1>, ...\" >&4";;
+       esac;
+done;
+while $test "$yyy";
+do set $yyy; var=$2; eval "was=\$$2";
+       eval "case \"\$$var\" in $define) . whoa; esac"; eval "$var=\$tu";
+       set $yyy; shift; shift; yyy=$@;
+done'
+
+: see if this is a netinet/in.h or sys/in.h system
+set netinet/in.h i_niin sys/in.h i_sysin
+eval $inhdr
+
 : see if htonl --and friends-- exists
 set htonl d_htonl
 eval $inlibc
-
+: Maybe they are macros.
+case "$d_htonl" in
+'define') ;;
+*) cat > try.c <<EOM
+#include <stdio.h>
+#include <sys/types.h>
+#$i_niin I_NETINET_IN
+#$i_sysin I_SYS_IN
+#ifdef I_NETINET_IN
+# include <netinet/in.h>
+#endif
+#ifdef I_SYS_IN
+# include <sys/in.h>
+#endif
+int main()
+{
+  int x;
+  printf("x = ", htonl(7));
+}
+EOM
+    if $cc $ccflags -c try.c >/dev/null 2>&1; then
+        d_htonl="$define"
+       echo "But it seems to be defined as a macro."
+    fi
+    $rm -f try.* try
+    ;;
+esac
 : Look for isascii
 echo " "
 $cat >isascii.c <<'EOCP'
@@ -3269,6 +3443,55 @@ fi
 set d_msg
 eval $setvar
 
+: determine which malloc to compile in
+:  Old versions had dflt='y' only for bsd or v7.
+echo " "
+case "$usemymalloc" in
+'')
+       if bsd || v7; then
+               dflt='y'
+       else
+               dflt='y'
+       fi
+       ;;
+*)  dflt="$usemymalloc"
+       ;;
+esac
+rp="Do you wish to attempt to use the malloc that comes with $package?"
+. ./myread
+usemymalloc="$ans"
+case "$ans" in
+y*) mallocsrc='malloc.c'
+    mallocobj='malloc.o'
+    d_mymalloc="$define"
+    ;;
+*) mallocsrc=''
+   mallocobj=''
+   d_mymalloc="$undef"
+   ;;
+esac
+
+: compute the type returned by malloc
+echo " "
+case "$malloctype" in
+'')
+       if $test `./findhdr malloc.h`; then
+               echo "#include <malloc.h>" > malloc.c
+       fi
+#include <malloc.h>
+       $cat >>malloc.c <<'END'
+void *malloc();
+END
+       if $cc $ccflags -c malloc.c >/dev/null 2>&1; then
+               malloctype='void *'
+       else
+               malloctype='char *'
+       fi
+       $rm -f malloc.[co]
+       ;;
+esac
+echo "Your system wants malloc to return '$malloctype', it would seem." >&4
+
 socketlib=''
 sockethdr=''
 : see whether socket exists
@@ -3378,7 +3601,7 @@ xxx=`./findhdr pwd.h`
 if $test "$xxx"; then
        i_pwd="$define"
        echo "<pwd.h> found." >&4
-       $cppstdin $cppflags < $xxx >$$.h
+       $cppstdin $cppflags $cppminus < $xxx >$$.h
        if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
                d_pwquota="$define"
        else
@@ -3421,9 +3644,15 @@ else
        echo "<pwd.h> NOT found." >&4
 fi
 
-: see if readdir exists
+: see if readdir and friends exist
 set readdir d_readdir
 eval $inlibc
+set seekdir d_seekdir
+eval $inlibc
+set telldir d_telldir
+eval $inlibc
+set rewinddir d_rewinddir
+eval $inlibc
 
 : see if rename exists
 set rename d_rename
@@ -3442,20 +3671,21 @@ case "$d_bcopy" in
        $cat >foo.c <<'EOCP'
 main()
 {
-char buf[128];
-register char *b;
-register int len;
-register int off;
-register int align;
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
 
 for (align = 7; align >= 0; align--) {
        for (len = 36; len; len--) {
                b = buf+align;
-               bcopy("abcdefghijklmnopqrstuvwxyz0123456789", b, len);
+               bcopy(abc, b, len);
                for (off = 1; off <= len; off++) {
                        bcopy(b, b+off, len);
                        bcopy(b+off, b, len);
-                       if (bcmp(b, "abcdefghijklmnopqrstuvwxyz0123456789", len))
+                       if (bcmp(b, abc, len))
                                exit(1);
                }
        }
@@ -3488,20 +3718,22 @@ case "$d_memcpy" in
        $cat >foo.c <<'EOCP'
 main()
 {
-char buf[128];
-register char *b;
-register int len;
-register int off;
-register int align;
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+
+memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
 
 for (align = 7; align >= 0; align--) {
        for (len = 36; len; len--) {
                b = buf+align;
-               memcpy("abcdefghijklmnopqrstuvwxyz0123456789", b, len);
+               memcpy(abc, b, len);
                for (off = 1; off <= len; off++) {
                        memcpy(b, b+off, len);
                        memcpy(b+off, b, len);
-                       if (memcmp(b, "abcdefghijklmnopqrstuvwxyz0123456789", len))
+                       if (memcmp(b, abc, len))
                                exit(1);
                }
        }
@@ -3620,7 +3852,19 @@ eval $inlibc
 : see if shmat exists
 set shmat d_shmat
 eval $inlibc
-
+: see what shmat returns
+d_voidshmat="$undef"
+case "$d_shmat" in
+define)
+    $cppstdin $cppflags $cppminus < $usrinc/sys/shm.h >voidshmat.txt 2>/dev/null
+    if $contains "void.*shmat" voidshmat.txt >/dev/null 2>&1; then
+       echo "and shmat returns (void*)"
+       d_voidshmat="$define"
+    else
+       echo "and shmat returns (char*)"
+    fi
+    ;;
+esac
 : see if shmdt exists
 set shmdt d_shmdt
 eval $inlibc
@@ -4022,15 +4266,24 @@ case "$d_phostname" in
 '') d_phostname="$undef";;
 esac
 
-: backward compatibility for d_hvfork
-if test X$d_hvfork != X; then
-       d_vfork="$d_hvfork"
-       d_hvfork=''
-fi
 : see if there is a vfork
 set vfork d_vfork
 eval $inlibc
-
+: But do we want to use it.  vfork is reportedly unreliable in 
+: perl in Solaris 2.x, and probably elsewhere.
+case "$d_vfork" in
+define)
+    dflt='n'
+    rp="Some systems have problems with vork.  Do you want to use it?"
+    . ./myread
+    case "$ans" in
+    y|Y) ;;
+    *) echo "Ok, we won't use vfork."
+       d_vfork="$undef"
+       ;;
+    esac
+    ;;
+esac
 : see if signal is declared as pointer to function returning int or void
 echo " "
 xxx=`./findhdr signal.h`
@@ -4111,35 +4364,6 @@ Log='$Log'
 RCSfile='$RCSfile'
 Revision='$Revision'
 
-: check for alignment requirements
-echo " "
-case "$alignbytes" in
-'') echo "Checking alignment constraints..." >&4
-       $cat >try.c <<'EOCP'
-struct foobar {
-       char foo;
-       double bar;
-} try;
-main()
-{
-       printf("%d\n", (char *)&try.bar - (char *)&try.foo);
-}
-EOCP
-       if $cc $ccflags try.c -o try >/dev/null 2>&1; then
-               dflt=`./try`
-       else
-               dflt='8'
-               echo"(I can't seem to compile the test program...)"
-       fi
-       ;;
-*) dflt="$alignbytes"
-       ;;
-esac
-rp="Doubles must be aligned on a how-many-byte boundary?"
-. ./myread
-alignbytes="$ans"
-$rm -f try.c try
-
 : is AFS running?
 echo " "
 if test -d /afs; then
@@ -4239,77 +4463,228 @@ rp="What is the order of bytes in a long?"
 byteorder="$ans"
 $rm -f try.c try
 
-: define an alternate in-header-list? function
-inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
-cont=true; xxf="echo \"<\$1> found.\" >&4";
-case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
-*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
-esac;
-case $# in 4) instead=instead;; *) instead="at last";; esac;
-while $test "$cont"; do
-       xxx=`./findhdr $1`
-       var=$2; eval "was=\$$2";
-       if $test "$xxx" && $test -r "$xxx";
-       then eval $xxf;
-               eval "case \"\$$var\" in $undef) . whoa; esac"; eval "$var=\$td";
-               cont="";
-       else eval $xxnf;
-               eval "case \"\$$var\" in $define) . whoa; esac"; eval "$var=\$tu"; fi;
-       set $yyy; shift; shift; yyy=$@;
-       case $# in 0) cont="";;
-       2) xxf="echo \"but I found <\$1> $instead.\" >&4";
-               xxnf="echo \"and I did not find <\$1> either.\" >&4";;
-       *) xxf="echo \"but I found <\$1\> instead.\" >&4";
-               xxnf="echo \"there is no <\$1>, ...\" >&4";;
-       esac;
-done;
-while $test "$yyy";
-do set $yyy; var=$2; eval "was=\$$2";
-       eval "case \"\$$var\" in $define) . whoa; esac"; eval "$var=\$tu";
-       set $yyy; shift; shift; yyy=$@;
-done'
-
 : see if dlfcn is available
 set dlfcn.h i_dlfcn
 eval $inhdr
-
 : determine which dynamic loading, if any, to compile in
 echo " "
 case "$usedl" in
-'')
-       case "$i_dlfcn" in
-       'define') dflt='y' ;;
-       *)        dflt='n' ;;
-       esac
-       ;;
-'define') dflt='y' ;;
-'y') dflt='y'
-     usedl='define' ;;
-*)  dflt='n' ;;
+'') case "$i_dlfcn" in
+    define) dflt='y' ;;
+    *)      dflt='n' ;;
+    esac
+    : Does a dl.c file exist for this operating system
+    $test -f ../ext/dl/dl_${osname}.c && dflt='y'
+    ;;
+define|y|true) dflt='y'
+    usedl="$define"
+    ;;
+*)  dflt='n'
+    ;;
 esac
 rp="Do you wish to attempt to use dynamic loading?"
 . ./myread
 usedl="$ans"
 case "$ans" in
-y*) usedl='define'; dlsrc='dl.c'; dlobj='dl.o';;
-*) usedl='undef'; dlsrc=''; dlobj='';;
+y*) usedl="$define"
+    if $test -f ../ext/dl/dl_${osname}.c ; then
+       dflt="ext/dl/dl_${osname}.c"
+    else
+       dflt='ext/dl/dl.c'
+    fi
+    echo "The following dynamic loading files are available:"
+    cd ..; ls -C ext/dl/dl*.c; cd UU
+    rp="Source file to use for dynamic loading"
+    fn="fne~"
+    . ./getfile
+    : emulate  basename and dirname
+    xxx=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@' -e 's@\.c$@@'`
+    dlobj=$xxx.o
+    dlsrc=$xxx.c
+    dldir=`echo $ans | $sed 's@\(.*\)/[^/]*$@\1@'`
+    case "$dldir" in
+    '') dldir="." ;;
+    *) ;;
+    esac
+    if $test -f ../$dldir/$dlsrc; then
+        usedl="$define"
+    else
+       echo "File $dlsrc does not exist -- ignored"
+       usedl="$undef"
+    fi
+
+    cat << EOM
+
+Some systems may require passing special flags to $cc -c to
+compile modules that will be used to create a shared library.
+To use no flags, say "none".
+EOM
+    case "$cccdlflags" in
+    ''|' ') case "$osname" in
+                       hpux)  dflt='+z' ;;
+                       next)  dflt='none' ;;
+                       sunos) dflt='none' ;;
+               *)     dflt='none' ;;
+                       esac
+                       ;;
+    *) dflt="$cccdlflags" ;;
+    esac
+    rp="Any special flags to pass to $cc -c to compile shared library modules?"
+    . ./myread
+    case "$ans" in
+    none) cccdlflags='' ;;
+    *) cccdlflags="$ans" ;;
+    esac
+
+    cat << 'EOM'
+
+Some systems may require passing special flags to ld to
+create a shared library.  To use no flags, say "none".
+EOM
+    case "$lddlflags" in
+    ''|' ') case "$osname" in
+                       hpux)  dflt='-b' ;;
+                       next)  dflt='none' ;;
+                       sunos) dflt='none' ;;
+               *)     dflt='none' ;;
+                       esac
+                       ;;
+    *) dflt="$lddlflags" ;;
+    esac
+    rp="Any special flags to pass to ld to create a shared library?"
+    . ./myread
+    case "$ans" in
+    none) lddlflags='' ;;
+    *) lddlflags="$ans" ;;
+    esac
+
+       cat <<EOM
+
+Some systems may require passing special flags to $cc to indicate that
+dynamic linking will be used.  To use no flags, say "none".
+EOM
+    case "$ccdlflags" in
+    ''|' ')
+               case "$osname" in
+               hpux)  dflt='none' ;;
+               next)  dflt='none' ;;
+               sunos) dflt='none' ;;
+           *)     dflt='none' ;;
+               esac
+               ;;
+    *)  dflt="$ccdlflags"
+           ;;
+    esac
+    rp="Any special flags to pass to $cc to use dynamic loading?"
+    . ./myread
+    case "$ans" in
+    none) ccdlflags='' ;;
+    *) ccdlflags="$ans" ;;
+    esac
+       cat <<EOM
+
+Some systems may require using a special suffix for shared libraries.
+To create the shared library for POSIX, for example, you may need to
+actually build the file POSIX.so.
+
+EOM
+    case "$shlibsuffix" in
+       '')
+               case "$osname" in
+               hpux)  dflt='.sl' ;;
+               next)  dflt='.so' ;;
+               sunos) dflt='.so' ;;
+               *)     dflt='.so' ;;
+               esac
+               ;;
+    *)  dflt="$shlibsuffix"
+       ;;
+    esac
+    rp="What is the suffix used for shared libraries?"
+    . ./myread
+    case "$ans" in
+    none) shlibsuffix='' ;;
+    *) shlibsuffix="$ans" ;;
+    esac
+    ;;
+*)  usedl="$undef"
+    : These are currently not used.
+    dlsrc=''
+    dlobj=''
+    dldir=''
+    lddlflags=''
+    ccdlflags=''
+    shlibsuffix='.o'
+    ;;
 esac
+: see if we have the old dbm
+set dbm.h i_dbm
+eval $inhdr
+
+: see if ndbm.h is available
+set ndbm.h i_ndbm
+eval $inhdr
+
+: see if gdbm.h is available
+set gdbm.h i_gdbm
+eval $inhdr
+
+: see if sdbm.h is wanted
 echo " "
+echo "$package includes an implementation of sdbm in ext/dbm/sdbm."
+case "$i_sdbm" in
+    ''|' ') val="$define" ;;
+    *) val="$i_sdbm" ;;
+esac
+set i_sdbm
+eval $setvar
 case "$extensions" in
 ' '|'') echo "Looking for extensions..."
        case "$find" in
                *find*) 
                cd ..
-               dflt="`$find ext -type f -name \*.xs -print`"
+               extensions=`$find ext -type f -name \*.xs -print`
+               set X $extensions
+               shift
+               extensions="$*"
                cd UU
                ;;
-       *)      dflt='ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/GDBM_File.xs ext/dbm/SDBM_File.xs ext/posix/POSIX.xs'
+       *)      extensions='ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/GDBM_File.xs ext/dbm/SDBM_File.xs ext/posix/POSIX.xs'
                ;;
        esac
        ;;
-none)  dflt='' ;;
-*)     dflt="$extensions" ;;
+none)  extensions='' ;;
+*)     ;;
 esac
+: Now see which are supported on this system.
+dflt=""
+for xxx in $extensions ; do
+    case "$xxx" in
+    *ODBM*) case "$i_dbm" in 
+           define) dflt="$dflt $xxx" ;;
+           *) ;;
+           esac
+           ;;
+    *NDBM*) case "$i_ndbm" in 
+           define) dflt="$dflt $xxx" ;;
+           *) ;;
+           esac
+           ;;
+    *GDBM*) case "$i_gdbm" in 
+           define) dflt="$dflt $xxx" ;;
+           *) ;;
+           esac
+           ;;
+    *SDBM*) case "$i_sdbm" in 
+           define) dflt="$dflt $xxx" ;;
+           *) ;;
+           esac
+           ;;
+    *)      dflt="$dflt $xxx"
+           ;;
+    esac
+done
+
 rp="What extensions do you wish to include?"
 . ./myread
 extensions="$ans"
@@ -4333,7 +4708,9 @@ esac
 echo " "
 rp="What is the type for group ids returned by getgid()?"
 . ./myread
-gidtype="$ans"
+val="$ans"
+set gidtype
+eval $setvar
 : see if getgroups exists
 set getgroups d_getgrps
 eval $inlibc
@@ -4347,14 +4724,16 @@ case "$d_getgrps" in
     echo " "
     $cat <<EOM
 What is the type of the second argument to getgroups()?  Usually this
-is the same as group ids, "$gidtype", but not always.
+is the same as group ids, $gidtype, but not always.
 EOM
     rp="What type is the second arguement to getgroups()?"
     . ./myread
-    groupstype="$ans"
+    val="$ans"
     ;;
-*)  groupstype="$gidtype";;
+*)  val="$gidtype";;
 esac
+set groupstype
+eval $setvar
 : determine where private executables go
 case "$privlib" in
 '')
@@ -4408,48 +4787,30 @@ rp='Where do you want to put the public libraries?'
 lib="$ans"
 libexp="$ansexp"
 
-: determine which malloc to compile in
-:  Old versions had dflt='y' only for bsd or v7.
-echo " "
-case "$usemymalloc" in
+: determine whether symbolic links are supported
+$touch blurfl
+if $ln -s blurfl sym > /dev/null 2>&1 ; then
+    lns="$ln -s"
+else
+    lns="$ln"
+fi
+rm -f blurfl sym
+: see what type lseek is declared as in the kernel
+case "$lseektype" in
 '')
-       if bsd || v7; then
-               dflt='y'
+       if $contains 'off_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
+               dflt='off_t';
        else
-               dflt='y'
+               dflt='long';
        fi
        ;;
-*)  dflt="$usemymalloc"
+*)  dflt="$lseektype"
        ;;
 esac
-rp="Do you wish to attempt to use the malloc that comes with $package?"
-. ./myread
-usemymalloc="$ans"
-case "$ans" in
-y*) mallocsrc='malloc.c'; mallocobj='malloc.o';;
-*) mallocsrc=''; mallocobj='';;
-esac
-
-: compute the type returned by malloc
 echo " "
-case "$malloctype" in
-'')
-       if $test `./findhdr malloc.h`; then
-               echo "#include <malloc.h>" > malloc.c
-       fi
-#include <malloc.h>
-       $cat >>malloc.c <<'END'
-void *malloc();
-END
-       if $cc $ccflags -c malloc.c >/dev/null 2>&1; then
-               malloctype='void *'
-       else
-               malloctype='char *'
-       fi
-       $rm -f malloc.[co]
-       ;;
-esac
-echo "Your system wants malloc to return '$malloctype', it would seem." >&4
+rp="What type is lseek's offset on this system declared as?"
+. ./myread
+lseektype="$ans"
 
 : determine where manual pages go
 $cat <<EOM
@@ -4519,6 +4880,35 @@ case "$mansrc" in
 *) manext=1;;
 esac
 
+: check for alignment requirements
+echo " "
+case "$memalignbytes" in
+'') echo "Checking alignment constraints..." >&4
+       $cat >try.c <<'EOCP'
+struct foobar {
+       char foo;
+       double bar;
+} try;
+main()
+{
+       printf("%d\n", (char *)&try.bar - (char *)&try.foo);
+}
+EOCP
+       if $cc $ccflags try.c -o try >/dev/null 2>&1; then
+               dflt=`./try`
+       else
+               dflt='8'
+               echo"(I can't seem to compile the test program...)"
+       fi
+       ;;
+*) dflt="$memalignbytes"
+       ;;
+esac
+rp="Doubles must be aligned on a how-many-byte boundary?"
+. ./myread
+memalignbytes="$ans"
+$rm -f try.c try
+
 : Cruising for prototypes
 echo " "
 echo "Checking out function prototypes..." >&4
@@ -4537,6 +4927,34 @@ set prototype
 eval $setvar
 $rm -f prototype*
 
+: check for length of pointer
+echo " "
+case "$ptrsize" in
+'')
+       echo "Checking to see how big your pointers are..." >&4
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       printf("%d\n", sizeof(char *));
+}
+EOCP
+       if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
+               dflt=`./try`
+       else
+               dflt='4'
+               echo "(I can't seem to compile the test program.  Guessing...)"
+       fi
+       ;;
+*)
+       dflt="$ptrsize"
+       ;;
+esac
+rp="What is the size of a pointer (in bytes)?"
+. ./myread
+ptrsize="$ans"
+$rm -f try.c try
+
 : check for size of random number generator
 echo " "
 case "$randbits" in
@@ -4575,6 +4993,47 @@ rp='How many bits does your rand() function produce?'
 randbits="$ans"
 $rm -f try.c try
 
+: see if ar generates random libraries by itself
+echo " "
+echo "Checking how to generate random libraries on your machine..." >&4
+$cat >a.c <<EOP
+f() { exit(0); }
+EOP
+cc -c a.c >/dev/null 2>&1
+ar rc ran.a a.o >/dev/null 2>&1
+$cat >b.c <<EOP
+main() { f(); }
+EOP
+cp ran.a lib.a
+if ar ts ran.a >/dev/null 2>&1; then
+       if $cc -o b b.c lib.a >/dev/null 2>&1; then
+               echo "ar appears to generate random libraries itself."
+               orderlib=false
+               ranlib=":"
+       else
+               echo "a table of contents needs to be added with 'ar ts'."
+               orderlib=false
+               ranlib="ar ts"
+       fi
+else
+       if $test -f /usr/bin/ranlib; then
+               ranlib=/usr/bin/ranlib
+       elif $test -f /bin/ranlib; then
+               ranlib=/bin/ranlib
+       fi
+
+       if $test -n "$ranlib"; then
+               echo "your system has $ranlib; we'll use that."
+               orderlib=false
+       else
+               echo "your system doesn't seem to support random libraries"
+               echo "so we'll use lorder and tsort to order the libraries."
+               orderlib=true
+               ranlib=":"
+       fi
+fi
+$rm -f a.* b.c b.o b ran.a lib.a
+
 : determine where public executables go
 case "$scriptdir" in
 '')
@@ -4663,8 +5122,18 @@ END {
        ;;
 esac
 echo "The following signals are available:"
-echo $sig_name | tr ' ' '\012' | $sed 's/^/    SIG/'
-
+echo $sig_name | 
+    $awk 'BEGIN { linelen = 0 }
+        { for (i = 1; i < NF; i++)
+          {
+             name = "SIG" $i " "
+             linelen = linelen + length(name)
+             if (linelen > 70)
+               {
+                 printf "\n"
+                 linelen = length(name)
+               }
+             printf "%s", name } }'
 : see what type of char stdio uses.
 echo " "
 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
@@ -4675,6 +5144,34 @@ else
        stdchar="char"
 fi
 
+: see if time exists
+echo " "
+if set time val -f d_time; eval $csym; $val; then
+       echo 'time() found.' >&4
+       val="$define"
+       case "$timetype" in
+       '')
+               if $contains 'time_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
+                       dflt='time_t';
+               else
+                       dflt='long';
+               fi
+               ;;
+       *)  dflt="$timetype"
+               ;;
+       esac
+       echo " "
+       rp="What type is returned by time() on this sytem?"
+       . ./myread
+       timetype="$ans"
+else
+       echo 'time() not found, hope that will do.' >&4
+       val="$undef"
+       timetype='int';
+fi
+set d_time
+eval $setvar
+
 : see what type uids are declared as in the kernel
 case "$uidtype" in
 '')
@@ -4802,8 +5299,7 @@ if $test -f "$bison"; then
        rp="$rp or bison -y"
 fi
 $cat <<EOM
-$package no longer requires a compiler compiler, so the following is
-optional.
+$package no longer requires a compiler compiler, so the following is optional.
 EOM
 rp="Which compiler compiler ($rp) shall I use?"
 . ./myread
@@ -4820,10 +5316,6 @@ case "$yacc" in
        ;;
 esac
 
-: see if we have the old dbm
-set dbm.h i_dbm
-eval $inhdr
-
 : see if this is a sys/file.h system
 val=''
 set sys/file.h val
@@ -4877,18 +5369,27 @@ esac
 set i_fcntl
 eval $setvar
 
-: see if gdbm.h is available
-set gdbm.h i_gdbm
-eval $inhdr
-
 : see if this is an grp system
 set grp.h i_grp
 eval $inhdr
 
-: see if ndbm.h is available
-set ndbm.h i_ndbm
+: see if memory.h is available.
+set memory.h i_memory
 eval $inhdr
-
+: See if it conflicts with string.h
+case "$i_memory" in
+define)
+    case "$strings" in
+    '') ;;
+    *)  $cppstdin $cppflags $cppminus < $strings > mem.h
+       if $contains 'memcpy' mem.h >/dev/null 2>&1; then
+           echo "We won't be including <memory.h>"
+           i_memory="$undef"
+       fi
+       rm -f mem.h
+       ;;
+    esac
+esac
 : see if there are directory access routines out there
 echo " "
 if $test `./findhdr ndir.h` && \
@@ -4919,10 +5420,32 @@ else
        fi
 fi
 
-: see if this is a netinet/in.h or sys/in.h system
-set netinet/in.h i_niin sys/in.h i_sysin
+: see if net/errno.h is available
+set net/errno.h i_neterrno
 eval $inhdr
-
+: Unfortunately, it causes problems on some systems.  Arrgh.
+case '$i_neterrno' in
+'define') echo "<net/errno.h> found."
+    cat > try.c <<'EOM'
+#include <stdio.h>
+#include <errno.h>
+#include <net/errno.h>
+int func()
+{
+int x;
+x = ENOTSOCK;
+return x;
+}
+EOM
+    if $cc $ccflags -c try.c >/dev/null 2>&1; then
+       i_neterrno="$define"
+    else
+       echo "But it causes problems, so we won't include it"
+       i_neterrno="$undef"
+    fi
+    $rm -f try.* try
+    ;;
+esac
 : see if stdarg is available
 set stdarg.h i_stdarg
 eval $inhdr
@@ -5147,6 +5670,10 @@ case "$flags" in
 esac
 $rm -f try.c try
 
+: see if this is a unistd.h system
+set unistd.h i_unistd
+eval $inhdr
+
 : see if this is an utime system
 set utime.h i_utime
 eval $inhdr
@@ -5230,9 +5757,12 @@ esac
 $rm -f varargs*
 
 : see if this is a vfork system
-set vfork.h i_vfork
-eval $inhdr
-
+case "$d_vfork" in
+define) set vfork.h i_vfork
+       eval $inhdr
+       ;;
+*)      i_vfork="$undef";;
+esac
 : end of configuration questions
 echo " "
 echo "End of configuration questions."
@@ -5274,7 +5804,6 @@ $startsh
 # Target system: $myuname
 
 extensions='$extensions'
-d_bsd='$d_bsd'
 d_eunice='$d_eunice'
 d_xenix='$d_xenix'
 eunicefix='$eunicefix'
@@ -5345,6 +5874,8 @@ vi='$vi'
 zcat='$zcat'
 hint='$hint'
 myuname='$myuname'
+osname='$osname'
+osvers='$osvers'
 Author='$Author'
 Date='$Date'
 Header='$Header'
@@ -5356,7 +5887,7 @@ Revision='$Revision'
 Source='$Source'
 State='$State'
 afs='$afs'
-alignbytes='$alignbytes'
+memalignbytes='$memalignbytes'
 bin='$bin'
 binexp='$binexp'
 installbin='$installbin'
@@ -5422,6 +5953,9 @@ d_msgsnd='$d_msgsnd'
 d_open3='$d_open3'
 d_portable='$d_portable'
 d_readdir='$d_readdir'
+d_rewinddir='$d_rewinddir'
+d_seekdir='$d_seekdir'
+d_telldir='$d_telldir'
 d_rename='$d_rename'
 d_rmdir='$d_rmdir'
 d_safebcpy='$d_safebcpy'
@@ -5448,6 +5982,7 @@ d_setruid='$d_setruid'
 d_setsid='$d_setsid'
 d_shm='$d_shm'
 d_shmat='$d_shmat'
+d_voidshmat='$d_voidshmat'
 d_shmctl='$d_shmctl'
 d_shmdt='$d_shmdt'
 d_shmget='$d_shmget'
@@ -5468,6 +6003,8 @@ d_syserrlst='$d_syserrlst'
 d_symlink='$d_symlink'
 d_syscall='$d_syscall'
 d_system='$d_system'
+d_time='$d_time'
+timetype='$timetype'
 clocktype='$clocktype'
 d_times='$d_times'
 d_truncate='$d_truncate'
@@ -5484,8 +6021,13 @@ d_charvspr='$d_charvspr'
 d_vprintf='$d_vprintf'
 d_wait4='$d_wait4'
 d_waitpid='$d_waitpid'
+cccdlflags='$cccdlflags'
+ccdlflags='$ccdlflags'
+dldir='$dldir'
 dlobj='$dlobj'
 dlsrc='$dlsrc'
+lddlflags='$lddlflags'
+shlibsuffix='$shlibsuffix'
 usedl='$usedl'
 gidtype='$gidtype'
 groupstype='$groupstype'
@@ -5498,7 +6040,9 @@ i_dlfcn='$i_dlfcn'
 i_fcntl='$i_fcntl'
 i_gdbm='$i_gdbm'
 i_grp='$i_grp'
+i_memory='$i_memory'
 i_ndbm='$i_ndbm'
+i_neterrno='$i_neterrno'
 i_niin='$i_niin'
 i_sysin='$i_sysin'
 d_pwage='$d_pwage'
@@ -5508,6 +6052,7 @@ d_pwcomment='$d_pwcomment'
 d_pwexpire='$d_pwexpire'
 d_pwquota='$d_pwquota'
 i_pwd='$i_pwd'
+i_sdbm='$i_sdbm'
 i_stdarg='$i_stdarg'
 i_stddef='$i_stddef'
 i_string='$i_string'
@@ -5527,6 +6072,7 @@ i_systime='$i_systime'
 i_systimek='$i_systimek'
 i_time='$i_time'
 timeincl='$timeincl'
+i_unistd='$i_unistd'
 i_utime='$i_utime'
 i_varargs='$i_varargs'
 i_varhdr='$i_varhdr'
@@ -5539,6 +6085,9 @@ libpth='$libpth'
 plibpth='$plibpth'
 xlibpth='$xlibpth'
 libs='$libs'
+lns='$lns'
+lseektype='$lseektype'
+d_mymalloc='$d_mymalloc'
 mallocobj='$mallocobj'
 mallocsrc='$mallocsrc'
 malloctype='$malloctype'
@@ -5561,12 +6110,15 @@ n='$n'
 groupcat='$groupcat'
 hostcat='$hostcat'
 passcat='$passcat'
+orderlib='$orderlib'
+ranlib='$ranlib'
 package='$package'
 spackage='$spackage'
 installprivlib='$installprivlib'
 privlib='$privlib'
 privlibexp='$privlibexp'
 prototype='$prototype'
+ptrsize='$ptrsize'
 randbits='$randbits'
 installscript='$installscript'
 scriptdir='$scriptdir'
diff --git a/Is b/Is
deleted file mode 100644 (file)
index d6c279c..0000000
--- a/Is
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifdef I_PWD
-#include <pwd.h>
-#endif
-#ifdef I_GRP
-#include <grp.h>
-#endif
-#ifdef I_UTIME
-#include <utime.h>
-#endif
-#ifdef I_FCNTL
-#include <fcntl.h>
-#endif
-#ifdef I_SYS_FILE
-#include <sys/file.h>
-#endif
index 39ad1e4..a71f86d 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,17 +1,14 @@
 Artistic               The "Artistic License"
+Configure               Portability tool
 Copying                        The GNU General Public License
 EXTERN.h               Included before foreign .h files
 INTERN.h               Included before domestic .h files
-Makefile.SH            A script that generates Makefile
 MANIFEST               This list of files
-NDBM_File.c
-ODBM_File.c
-POSIX.c
+Makefile.SH            A script that generates Makefile
 README                 The Instructions
 README.ncr             Special instructions for NCR
 README.uport           Special instructions for Microports
 README.xenix           Special instructions for Xenix
-SDBM_File.c
 XSUB.h
 atarist/FILES
 atarist/README.ST
@@ -44,6 +41,7 @@ atarist/usub/acurses.mus
 atarist/usub/makefile.st
 atarist/usub/usersub.c
 atarist/wildmat.c
+autosplit
 av.c
 av.h
 bar.pm
@@ -52,13 +50,15 @@ c2ph.doc            documentation for c2ph
 cflags.SH              A script that emits C compilation flags per file
 client                 A client to test sockets
 config.H               Sample config.h
-config_c++.h           TEMP FILE
-config_h.SH            Produces config.h
+config_h.SH             Produces config.h
+configpm               Produces lib/Config.pm
 cop.h
 cv.h
 deb.c
-dl.c
+dlperl/Makefile
 dlperl/dlperl.c
+dlperl/dlperl.doc
+dlperl/dlperl.man
 dlperl/usersub.c
 doSH                   Script to run all the *.SH files
 doio.c                 I/O operations
@@ -100,43 +100,76 @@ eg/sysvipc/ipcsem Example of Sys V IPC semaphores
 eg/sysvipc/ipcshm      Example of Sys V IPC shared memory
 eg/travesty            A program to print travesties of its input text
 eg/unuc.pats
+eg/uudecode
 eg/van/empty           A program to empty the trashcan
 eg/van/unvanish                A program to undo what vanish does
 eg/van/vanexp          A program to expire vanished files
 eg/van/vanish          A program to put files in a trashcan
 eg/who                 A sample who program
+emacs/cperl-mode
+emacs/emacs19
 emacs/perl-mode.el     Emacs major mode for perl
 emacs/perldb.el                Emacs debugging
 emacs/perldb.pl                Emacs debugging
 emacs/tedstuff         Some optional patches
 embed_h.SH
-ext/dbm/GDBM_File.c
-ext/dbm/NDBM_File.c
-ext/dbm/ODBM_File.c
-ext/dbm/SDBM_File.c
-ext/dbm/sdbm/.pure
+ext/README
+ext/curses/Makefile
+ext/curses/bsdcurses.mus
+ext/curses/curses.mus
+ext/curses/pager
+ext/dbm/GDBM_File.xs   GDBM extension
+ext/dbm/Makefile
+ext/dbm/NDBM_File.xs   NDBM extension
+ext/dbm/ODBM_File.xs   ODBM extension
+ext/dbm/SDBM_File.xs   SDBM extension
+ext/dbm/sdbm/CHANGES
+ext/dbm/sdbm/COMPARE
+ext/dbm/sdbm/Makefile.SH
 ext/dbm/sdbm/README.too
+ext/dbm/sdbm/biblio
 ext/dbm/sdbm/dba.c
 ext/dbm/sdbm/dbd.c
+ext/dbm/sdbm/dbe.1
 ext/dbm/sdbm/dbe.c
 ext/dbm/sdbm/dbm.c
 ext/dbm/sdbm/dbm.h
 ext/dbm/sdbm/dbu.c
+ext/dbm/sdbm/grind
 ext/dbm/sdbm/hash.c
 ext/dbm/sdbm/linux.patches
+ext/dbm/sdbm/makefile.sdbm
 ext/dbm/sdbm/pair.c
 ext/dbm/sdbm/pair.h
+ext/dbm/sdbm/readme.ms
 ext/dbm/sdbm/readme.ps
+ext/dbm/sdbm/sdbm.3
 ext/dbm/sdbm/sdbm.c
 ext/dbm/sdbm/sdbm.h
 ext/dbm/sdbm/tune.h
 ext/dbm/sdbm/util.c
-ext/dl/dl.c
+ext/dbm/typemap
+ext/dl/dl_hpux.c               Dynamic loading for HPUX.
+ext/dl/dl_next.c               Dynamic loading for NeXT
+ext/dl/dl_sunos.c              Dynamic loading for SunOS 4.1.?
+ext/dl/eg/Makefile
+ext/dl/eg/Makefile.att
 ext/dl/eg/main.c
 ext/dl/eg/test.c
 ext/dl/eg/test1.c
+ext/man2mus
+ext/mus
+ext/posix/POSIX.xs
+ext/posix/typemap
+ext/typemap
+ext/typemap.oi
+ext/typemap.xlib
+ext/typemap.xpm
+ext/xsubpp
+ext/xvarpp
 form.h                 Public declarations for the above
 gettest                        A little script to test the get* routines
+global.sym
 gv.c
 gv.h
 h2ph.SH                        A thing to turn C .h file into perl .ph files
@@ -163,6 +196,9 @@ hints/apollo_C6_7.sh
 hints/apollo_C6_8.sh   
 hints/aux.sh
 hints/cray.sh
+hints/dec_osf_1.sh
+hints/dec_osf_2.sh
+hints/dec_osf_3.sh
 hints/dgux.sh
 hints/dnix.sh
 hints/dynix.sh
@@ -182,6 +218,7 @@ hints/mips.sh
 hints/mpc.sh   
 hints/ncr_tower.sh
 hints/next.sh
+hints/next_3_2.sh
 hints/opus.sh  
 hints/osf1.sh
 hints/sco_2_3_0.sh
@@ -192,11 +229,16 @@ hints/sco_2_3_4.sh
 hints/sco_3.sh
 hints/sgi.sh
 hints/solaris_2_0.sh
+hints/solaris_2_1.sh
+hints/solaris_2_2.sh
+hints/solaris_2_3.sh
 hints/stellar.sh       
 hints/sunos_3_4.sh
 hints/sunos_3_5.sh
 hints/sunos_4_0_1.sh
 hints/sunos_4_0_2.sh
+hints/sunos_4_1_2.sh
+hints/sunos_4_1_3.sh
 hints/svr4.sh
 hints/ti1500.sh        
 hints/titan.sh
@@ -211,15 +253,16 @@ hv.c
 hv.h
 hvdbm.h
 installperl            Perl script to do "make install" dirty work
+interp.sym
 ioctl.pl               Sample ioctl.pl
 keywords.h
 lib/AutoLoader.pm
-lib/Config.pm
 lib/English.pm
 lib/Exporter.pm
 lib/FOOBAR.pm
 lib/FileHandle.pm
 lib/Hostname.pm
+lib/NDBM_File.pm
 lib/POSIX.pm
 lib/SDBM_File.pm
 lib/abbrev.pl          An abbreviation table builder
@@ -259,13 +302,13 @@ lib/tainted.pl
 lib/termcap.pl         Perl library supporting termcap usage
 lib/timelocal.pl       Perl library supporting inverse of localtime, gmtime
 lib/validate.pl                Perl library supporting wholesale file mode validation
-main.c
 makedepend.SH          Precursor to makedepend
 makedir.SH             Precursor to makedir
 makefile.lib           make libperl.a
 malloc.c               A version of malloc you might not want
 mg.c
 mg.h
+miniperlmain.c         Basic perl w/o dynamic loading or extensions.
 msdos/Changes.dds      Expanation of MS-DOS patches by Diomidis Spinellis
 msdos/Makefile         MS-DOS makefile
 msdos/README.msdos     Compiling and usage information
@@ -324,13 +367,13 @@ perly.c.byacc
 perly.c.diff
 perly.c.yacc
 perly.fixer            A program to remove yacc stack limitations
-perly.h
 perly.h.yacc
 perly.y                        Yacc grammar for perl
 perly.y.save
 pp.c                   Push/Pop code
 pp.h                   Push/Pop code defs
 proto.h
+protos
 regcomp.c              Regular expression compiler
 regcomp.h              Private declarations for above
 regexec.c              Regular expression evaluator
@@ -338,6 +381,7 @@ regexp.h            Public declarations for the above
 scope.c
 scope.h
 server                 A server to test sockets
+sortfunc
 sv.c
 sv.h
 t/README               Instructions for regression tests
@@ -369,6 +413,7 @@ t/io/print.t                See if print commands work
 t/io/tell.t            See if file seeking works
 t/lib/bigint.t
 t/lib/english.t
+t/lib/ndbm.t
 t/lib/sdbm.t
 t/op/append.t          See if . works
 t/op/array.t           See if array operations work
@@ -420,12 +465,12 @@ t/op/unshift.t            See if unshift works
 t/op/vec.t             See if vectors work
 t/op/write.t           See if write works
 taint.c
-test.pl
 toke.c                 The tokener
 unixish.h
 usersub.c              User supplied (possibly proprietary) subroutines
 util.c                 Utility routines
 util.h                 Public declarations for the above
+writemain.SH           Generate perlmain.c from miniperlmain.c+extensions.
 x2p/EXTERN.h           Same as above
 x2p/INTERN.h           Same as above
 x2p/Makefile.SH                Precursor to Makefile
@@ -446,4 +491,3 @@ x2p/str.h           Public declarations for the above
 x2p/util.c             Utility routines
 x2p/util.h             Public declarations for the above
 x2p/walk.c             Parse tree walker
-Configure                    Portability tool
index 1b3394e..a71f86d 100644 (file)
@@ -1,17 +1,14 @@
 Artistic               The "Artistic License"
+Configure               Portability tool
 Copying                        The GNU General Public License
 EXTERN.h               Included before foreign .h files
 INTERN.h               Included before domestic .h files
-Makefile.SH            A script that generates Makefile
 MANIFEST               This list of files
-NDBM_File.c
-ODBM_File.c
-POSIX.c
+Makefile.SH            A script that generates Makefile
 README                 The Instructions
 README.ncr             Special instructions for NCR
 README.uport           Special instructions for Microports
 README.xenix           Special instructions for Xenix
-SDBM_File.c
 XSUB.h
 atarist/FILES
 atarist/README.ST
@@ -44,6 +41,7 @@ atarist/usub/acurses.mus
 atarist/usub/makefile.st
 atarist/usub/usersub.c
 atarist/wildmat.c
+autosplit
 av.c
 av.h
 bar.pm
@@ -52,12 +50,15 @@ c2ph.doc            documentation for c2ph
 cflags.SH              A script that emits C compilation flags per file
 client                 A client to test sockets
 config.H               Sample config.h
-config_c++.h           TEMP FILE
+config_h.SH             Produces config.h
+configpm               Produces lib/Config.pm
 cop.h
 cv.h
 deb.c
-dl.c
+dlperl/Makefile
 dlperl/dlperl.c
+dlperl/dlperl.doc
+dlperl/dlperl.man
 dlperl/usersub.c
 doSH                   Script to run all the *.SH files
 doio.c                 I/O operations
@@ -99,43 +100,76 @@ eg/sysvipc/ipcsem  Example of Sys V IPC semaphores
 eg/sysvipc/ipcshm      Example of Sys V IPC shared memory
 eg/travesty            A program to print travesties of its input text
 eg/unuc.pats
+eg/uudecode
 eg/van/empty           A program to empty the trashcan
 eg/van/unvanish                A program to undo what vanish does
 eg/van/vanexp          A program to expire vanished files
 eg/van/vanish          A program to put files in a trashcan
 eg/who                 A sample who program
+emacs/cperl-mode
+emacs/emacs19
 emacs/perl-mode.el     Emacs major mode for perl
 emacs/perldb.el                Emacs debugging
 emacs/perldb.pl                Emacs debugging
 emacs/tedstuff         Some optional patches
 embed_h.SH
-ext/dbm/GDBM_File.c
-ext/dbm/NDBM_File.c
-ext/dbm/ODBM_File.c
-ext/dbm/SDBM_File.c
-ext/dbm/sdbm/.pure
+ext/README
+ext/curses/Makefile
+ext/curses/bsdcurses.mus
+ext/curses/curses.mus
+ext/curses/pager
+ext/dbm/GDBM_File.xs   GDBM extension
+ext/dbm/Makefile
+ext/dbm/NDBM_File.xs   NDBM extension
+ext/dbm/ODBM_File.xs   ODBM extension
+ext/dbm/SDBM_File.xs   SDBM extension
+ext/dbm/sdbm/CHANGES
+ext/dbm/sdbm/COMPARE
+ext/dbm/sdbm/Makefile.SH
 ext/dbm/sdbm/README.too
+ext/dbm/sdbm/biblio
 ext/dbm/sdbm/dba.c
 ext/dbm/sdbm/dbd.c
+ext/dbm/sdbm/dbe.1
 ext/dbm/sdbm/dbe.c
 ext/dbm/sdbm/dbm.c
 ext/dbm/sdbm/dbm.h
 ext/dbm/sdbm/dbu.c
+ext/dbm/sdbm/grind
 ext/dbm/sdbm/hash.c
 ext/dbm/sdbm/linux.patches
+ext/dbm/sdbm/makefile.sdbm
 ext/dbm/sdbm/pair.c
 ext/dbm/sdbm/pair.h
+ext/dbm/sdbm/readme.ms
 ext/dbm/sdbm/readme.ps
+ext/dbm/sdbm/sdbm.3
 ext/dbm/sdbm/sdbm.c
 ext/dbm/sdbm/sdbm.h
 ext/dbm/sdbm/tune.h
 ext/dbm/sdbm/util.c
-ext/dl/dl.c
+ext/dbm/typemap
+ext/dl/dl_hpux.c               Dynamic loading for HPUX.
+ext/dl/dl_next.c               Dynamic loading for NeXT
+ext/dl/dl_sunos.c              Dynamic loading for SunOS 4.1.?
+ext/dl/eg/Makefile
+ext/dl/eg/Makefile.att
 ext/dl/eg/main.c
 ext/dl/eg/test.c
 ext/dl/eg/test1.c
+ext/man2mus
+ext/mus
+ext/posix/POSIX.xs
+ext/posix/typemap
+ext/typemap
+ext/typemap.oi
+ext/typemap.xlib
+ext/typemap.xpm
+ext/xsubpp
+ext/xvarpp
 form.h                 Public declarations for the above
 gettest                        A little script to test the get* routines
+global.sym
 gv.c
 gv.h
 h2ph.SH                        A thing to turn C .h file into perl .ph files
@@ -162,6 +196,9 @@ hints/apollo_C6_7.sh
 hints/apollo_C6_8.sh   
 hints/aux.sh
 hints/cray.sh
+hints/dec_osf_1.sh
+hints/dec_osf_2.sh
+hints/dec_osf_3.sh
 hints/dgux.sh
 hints/dnix.sh
 hints/dynix.sh
@@ -181,6 +218,7 @@ hints/mips.sh
 hints/mpc.sh   
 hints/ncr_tower.sh
 hints/next.sh
+hints/next_3_2.sh
 hints/opus.sh  
 hints/osf1.sh
 hints/sco_2_3_0.sh
@@ -191,11 +229,16 @@ hints/sco_2_3_4.sh
 hints/sco_3.sh
 hints/sgi.sh
 hints/solaris_2_0.sh
+hints/solaris_2_1.sh
+hints/solaris_2_2.sh
+hints/solaris_2_3.sh
 hints/stellar.sh       
 hints/sunos_3_4.sh
 hints/sunos_3_5.sh
 hints/sunos_4_0_1.sh
 hints/sunos_4_0_2.sh
+hints/sunos_4_1_2.sh
+hints/sunos_4_1_3.sh
 hints/svr4.sh
 hints/ti1500.sh        
 hints/titan.sh
@@ -210,15 +253,16 @@ hv.c
 hv.h
 hvdbm.h
 installperl            Perl script to do "make install" dirty work
+interp.sym
 ioctl.pl               Sample ioctl.pl
 keywords.h
 lib/AutoLoader.pm
-lib/Config.pm
 lib/English.pm
 lib/Exporter.pm
 lib/FOOBAR.pm
 lib/FileHandle.pm
 lib/Hostname.pm
+lib/NDBM_File.pm
 lib/POSIX.pm
 lib/SDBM_File.pm
 lib/abbrev.pl          An abbreviation table builder
@@ -258,13 +302,13 @@ lib/tainted.pl
 lib/termcap.pl         Perl library supporting termcap usage
 lib/timelocal.pl       Perl library supporting inverse of localtime, gmtime
 lib/validate.pl                Perl library supporting wholesale file mode validation
-main.c
 makedepend.SH          Precursor to makedepend
 makedir.SH             Precursor to makedir
 makefile.lib           make libperl.a
 malloc.c               A version of malloc you might not want
 mg.c
 mg.h
+miniperlmain.c         Basic perl w/o dynamic loading or extensions.
 msdos/Changes.dds      Expanation of MS-DOS patches by Diomidis Spinellis
 msdos/Makefile         MS-DOS makefile
 msdos/README.msdos     Compiling and usage information
@@ -323,13 +367,13 @@ perly.c.byacc
 perly.c.diff
 perly.c.yacc
 perly.fixer            A program to remove yacc stack limitations
-perly.h
 perly.h.yacc
 perly.y                        Yacc grammar for perl
 perly.y.save
 pp.c                   Push/Pop code
 pp.h                   Push/Pop code defs
 proto.h
+protos
 regcomp.c              Regular expression compiler
 regcomp.h              Private declarations for above
 regexec.c              Regular expression evaluator
@@ -337,6 +381,7 @@ regexp.h            Public declarations for the above
 scope.c
 scope.h
 server                 A server to test sockets
+sortfunc
 sv.c
 sv.h
 t/README               Instructions for regression tests
@@ -368,6 +413,7 @@ t/io/print.t                See if print commands work
 t/io/tell.t            See if file seeking works
 t/lib/bigint.t
 t/lib/english.t
+t/lib/ndbm.t
 t/lib/sdbm.t
 t/op/append.t          See if . works
 t/op/array.t           See if array operations work
@@ -419,12 +465,12 @@ t/op/unshift.t            See if unshift works
 t/op/vec.t             See if vectors work
 t/op/write.t           See if write works
 taint.c
-test.pl
 toke.c                 The tokener
 unixish.h
 usersub.c              User supplied (possibly proprietary) subroutines
 util.c                 Utility routines
 util.h                 Public declarations for the above
+writemain.SH           Generate perlmain.c from miniperlmain.c+extensions.
 x2p/EXTERN.h           Same as above
 x2p/INTERN.h           Same as above
 x2p/Makefile.SH                Precursor to Makefile
@@ -445,5 +491,3 @@ x2p/str.h           Public declarations for the above
 x2p/util.c             Utility routines
 x2p/util.h             Public declarations for the above
 x2p/walk.c             Parse tree walker
-Configure                    Portability tool
-config_h.SH                  Produces config.h
index 0babdb1..8da9eee 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,8 @@
-# : Makefile.SH,v 15738Revision: 4.1 15738Date: 92/08/07 17:18:08 $
+# .SH,v $Revision: 4.1 $Date: 92/08/07 17:18:08 $
+# This file is derived from Makefile.SH.  Any changes made here will
+# be lost the next time you run Configure.
+#  Makefile is used to generate makefile.  The only difference
+#  is that makefile has the dependencies filled in at the end.
 #
 # $Log:        Makefile.SH,v $
 # Revision 4.1  92/08/07  17:18:08  lwall
@@ -36,14 +40,24 @@ mansrc = /usr/local/man/man1
 manext = 1
 LDFLAGS = 
 CLDFLAGS = 
+
 SMALL = 
 LARGE =  
 mallocsrc = malloc.c
 mallocobj = malloc.o
-dlsrc = dl.c
-dlobj = dl.o
-SLN = ln -s
+dlsrc = dl_sunos.c
+dlobj = dl_sunos.o
+dldir = ext/dl
+LNS = /bin/ln -s
 RMS = rm -f
+ranlib = /usr/bin/ranlib
+
+# The following are used to build and install shared libraries for
+# dynamic loading.
+LDDLFLAGS = 
+CCDLFLAGS = 
+CCCDLFLAGS = 
+SHLIBSUFFIX = .so
 
 libs = -ldbm -ldl -lm -lposix 
 
@@ -51,7 +65,7 @@ public = perl
 
 shellflags = 
 
-# To use an alternate make, set  in config.sh.
+## To use an alternate make, set  in config.sh.
 MAKE = make
 
 CCCMD = `sh $(shellflags) cflags $@`
@@ -64,7 +78,7 @@ manpages = perl.man h2ph.man
 
 util =
 
-sh = Makefile.SH makedepend.SH h2ph.SH
+sh = Makefile.SH cflags.SH embed_h.SH makedepend.SH makedir.SH writemain.SH
 
 h1 = EXTERN.h INTERN.h av.h cop.h config.h embed.h form.h handy.h
 h2 = hv.h op.h opcode.h perl.h regcomp.h regexp.h gv.h sv.h util.h
@@ -79,19 +93,19 @@ c1 = av.c scope.c op.c doop.c doio.c dump.c hv.c
 c2 = $(mallocsrc) mg.c perly.c pp.c regcomp.c regexec.c
 c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c
 
-c = $(c1) $(c2) $(c3)
+c = $(c1) $(c2) $(c3) $(dlsrc) miniperlmain.c perlmain.c
 
 s1 = av.c scope.c op.c doop.c doio.c dump.c hv.c
-s2 = $(mallocobj) mg.c perly.c pp.c regcomp.c regexec.c
+s2 = $(mallocsrc) mg.c perly.c pp.c regcomp.c regexec.c
 s3 = gv.c sv.c taint.c toke.c util.c deb.c run.c perly.c
 
-saber = $(s1) $(s2) $(s3)
+saber = $(s1) $(s2) $(s3) $(dlsrc)
 
 obj1 = av.o scope.o op.o doop.o doio.o dump.o hv.o
 obj2 = $(mallocobj) mg.o perly.o pp.o regcomp.o regexec.o
 obj3 = gv.o sv.o taint.o toke.o util.o deb.o run.o
 
-obj = $(obj1) $(obj2) $(obj3) $(dlobj)
+obj = $(obj1) $(obj2) $(obj3)
 
 lintflags = -hbvxac
 
@@ -100,85 +114,105 @@ addedbyconf = Makefile.old bsd eunice filexp loc pdp11 usg v7
 # grrr
 SHELL = /bin/sh
 
-.SUFFIXES: .x
-
 .c.o:
        $(CCCMD) $*.c
 
-.x.c:
-       sh writemain $*.x >$*.c
-
 all: miniperl perl lib/Config.pm
 
 #all: $(public) $(private) $(util) $(scripts)
 #      cd x2p; $(MAKE) all
 #      touch all
 
+# Phony target to force checking subdirectories.
+FORCE:
+
+
+$(dlsrc): $(dldir)/$(dlsrc)
+       cp $(dldir)/$(dlsrc) $(dlsrc)
+
+$(dlobj): $(dlsrc)
+       $(CCCMD) $(dlsrc)
+
+
 # NDBM_File extension
+NDBM_File.o: NDBM_File.c
+       $(CCCMD) $(CCCDLFLAGS) $*.c
+
 NDBM_File.c:   ext/dbm/NDBM_File.xs ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp ext/dbm/NDBM_File.xs >tmp
+       ./miniperl ext/xsubpp ext/dbm/NDBM_File.xs >tmp
        mv tmp NDBM_File.c
 
-NDBM_File.o: NDBM_File.c
+lib/auto/NDBM_File/NDBM_File$(SHLIBSUFFIX): NDBM_File.o 
+       test -d lib/auto/NDBM_File || mkdir lib/auto/NDBM_File
+       ld $(LDDLFLAGS) -o $@ NDBM_File.o 
 
 # ODBM_File extension
-ODBM_File.c:   ext/dbm/ODBM_File.xs ext/xsubpp ext/typemap
-       test -f miniperl || make miniperl
-       ext/xsubpp ext/dbm/ODBM_File.xs >tmp
-       mv tmp ODBM_File.c
-
 ODBM_File.o: ODBM_File.c
+       $(CCCMD) $(CCCDLFLAGS) $*.c
 
-# GDBM_File extension
-GDBM_File.c:   ext/dbm/GDBM_File.xs ext/xsubpp ext/typemap
+ODBM_File.c:   ext/dbm/ODBM_File.xs ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp ext/dbm/GDBM_File.xs >tmp
-       mv tmp GDBM_File.c
+       ./miniperl ext/xsubpp ext/dbm/ODBM_File.xs >tmp
+       mv tmp ODBM_File.c
 
-GDBM_File.o: GDBM_File.c
+lib/auto/ODBM_File/ODBM_File$(SHLIBSUFFIX): ODBM_File.o 
+       test -d lib/auto/ODBM_File || mkdir lib/auto/ODBM_File
+       ld $(LDDLFLAGS) -o $@ ODBM_File.o 
 
 # SDBM_File extension
+SDBM_File.o: SDBM_File.c
+       $(CCCMD) $(CCCDLFLAGS) $*.c
+
 SDBM_File.c:   ext/dbm/SDBM_File.xs ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp ext/dbm/SDBM_File.xs >tmp
+       ./miniperl ext/xsubpp ext/dbm/SDBM_File.xs >tmp
        mv tmp SDBM_File.c
 
-SDBM_File.o: SDBM_File.c
-
-lib/auto/SDBM_File/SDBM_File.so: SDBM_File.o ext/dbm/sdbm/libsdbm.a
-       @- mkdir lib/auto/SDBM_File 2>/dev/null
-       ld -o lib/auto/SDBM_File/SDBM_File.so SDBM_File.o ext/dbm/sdbm/libsdbm.a
-
-ext/dbm/sdbm/libsdbm.a: ext/dbm/sdbm/sdbm.c ext/dbm/sdbm/sdbm.h
-       cd ext/dbm/sdbm; $(MAKE) sdbm
+lib/auto/SDBM_File/SDBM_File$(SHLIBSUFFIX): SDBM_File.o ext/dbm/sdbm/libsdbm.a
+       test -d lib/auto/SDBM_File || mkdir lib/auto/SDBM_File
+       ld $(LDDLFLAGS) -o $@ SDBM_File.o ext/dbm/sdbm/libsdbm.a
 
 # POSIX extension
+POSIX.o: POSIX.c
+       $(CCCMD) $(CCCDLFLAGS) $*.c
+
 POSIX.c:       ext/posix/POSIX.xs ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp ext/posix/POSIX.xs >tmp
+       ./miniperl ext/xsubpp ext/posix/POSIX.xs >tmp
        mv tmp POSIX.c
 
-POSIX.o: POSIX.c
-lib/auto/POSIX/POSIX.so: POSIX.o ext/dbm/sdbm/libsdbm.a
-       @- mkdir lib/auto/POSIX 2>/dev/null
-       ld -o lib/auto/POSIX/POSIX.so POSIX.o ext/dbm/sdbm/libsdbm.a
-extobjs=  ext/dbm/NDBM_File.xs.o ext/dbm/ODBM_File.xs.o ext/dbm/GDBM_File.xs.o ext/dbm/SDBM_File.xs.o ext/posix/POSIX.xs.o
+lib/auto/POSIX/POSIX$(SHLIBSUFFIX): POSIX.o 
+       test -d lib/auto/POSIX || mkdir lib/auto/POSIX
+       ld $(LDDLFLAGS) -o $@ POSIX.o -lm
+
+# List of extensions (used by writemain) to generate perlmain.c
+ext=  NDBM_File ODBM_File SDBM_File POSIX
+extsrc=  NDBM_File.c ODBM_File.c SDBM_File.c POSIX.c
+# Extension dependencies.
+extdep=  lib/auto/NDBM_File/NDBM_File$(SHLIBSUFFIX) lib/auto/ODBM_File/ODBM_File$(SHLIBSUFFIX) lib/auto/SDBM_File/SDBM_File$(SHLIBSUFFIX) lib/auto/POSIX/POSIX$(SHLIBSUFFIX)
+# How to include extensions in linking command
+extobj= 
+
+ext/dbm/sdbm/libsdbm.a: ext/dbm/sdbm/sdbm.h ext/dbm/sdbm/sdbm.c
+       cd ext/dbm/sdbm; $(MAKE) -f Makefile libsdbm.a
+
 # The $& notation tells Sequent machines that it can do a parallel make,
 # and is harmless otherwise.
 
-miniperlmain.c: miniperlmain.x
-miniperlmain.o: miniperlmain.c
 miniperl: $& miniperlmain.o perl.o $(obj)
        $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain.o perl.o $(obj) $(libs)
 
-perlmain.c: perlmain.x
+perlmain.c: miniperlmain.c
+       sh writemain $(ext) > perlmain.c
+
 perlmain.o: perlmain.c
-perl: $& perlmain.o perl.o $(obj) NDBM_File.o ODBM_File.o POSIX.o
-       $(CC) $(LARGE) $(CLDFLAGS) -o perl perlmain.o perl.o $(obj) NDBM_File.o ODBM_File.o POSIX.o $(libs)
+
+perl: $& perlmain.o perl.o $(obj) $(dlobj) $(extdep)
+       $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain.o perl.o $(obj) $(dlobj) $(extobj) $(libs)
 
 libperl.rlb: libperl.a
-       ranlib libperl.a
+       $(ranlib) libperl.a
        touch libperl.rlb
 
 libperl.a: $& perl.o $(obj)
@@ -189,11 +223,11 @@ libperl.a: $& perl.o $(obj)
 # checks as well as the special code to validate that the script in question
 # has been invoked correctly.
 
-suidperl: $& sperl.o main.o libperl.rlb
-       $(CC) $(LARGE) $(CLDFLAGS) sperl.o main.o libperl.a $(libs) -o suidperl
+suidperl: $& sperl.o perlmain.o libperl.rlb
+       $(CC) $(LARGE) $(CLDFLAGS) sperl.o perlmain.o libperl.a $(libs) -o suidperl
 
-lib/Config.pm: config.sh
-       ./configpm
+lib/Config.pm: config.sh miniperl
+       ./miniperl configpm
 
 saber: $(saber)
        # load $(saber)
@@ -201,21 +235,16 @@ saber: $(saber)
 
 sperl.o: perl.c perly.h patchlevel.h $(h)
        $(RMS) sperl.c
-       $(SLN) perl.c sperl.c
+       $(LNS) perl.c sperl.c
        $(CCCMD) -DIAMSUID sperl.c
        $(RMS) sperl.c
 
-dl.o: ext/dl/dl.c
-       cp ext/dl/dl.c dl.c
-       $(CC) -c dl.c
-
-    
 perly.h: perly.c
        @ echo Dummy dependency for dumb parallel make
        touch perly.h
 
 opcode.h: opcode.pl
-       - opcode.pl
+       - perl opcode.pl
 
 embed.h: embed_h.SH global.sym interp.sym
        sh embed_h.SH
@@ -234,14 +263,21 @@ install: all
        ./perl installperl
 
 clean:
-       rm -f *.o all perl taintperl suidperl miniperl
+       rm -f *.o all perl miniperl
+       rm -f POSIX.c ?DBM_File.c perlmain.c
+       rm -f ext/dbm/sdbm/libsdbm.a
+       cd ext/dbm/sdbm; $(MAKE) -f Makefile clean
        cd x2p; $(MAKE) clean
 
 realclean: clean
        cd x2p; $(MAKE) realclean
+       cd ext/dbm/sdbm; $(MAKE) -f Makefile realclean
        rm -f *.orig */*.orig *~ */*~ core $(addedbyconf) h2ph h2ph.man
-       rm -f perly.h t/perl Makefile config.h makedepend makedir
-       rm -f makefile x2p/Makefile x2p/makefile cflags x2p/cflags
+       rm -f Makefile cflags embed_h makedepend makedir writemain
+       rm -f config.h t/perl makefile makefile.old cflags 
+       rm -rf lib/auto/?DBM_File lib/auto/POSIX
+       rm -f x2p/Makefile x2p/makefile x2p/makefile.old x2p/cflags
+       rm -f lib/Config.pm
        rm -f c2ph pstruct
 
 # The following lint has practically everything turned on.  Unfortunately,
@@ -258,17 +294,17 @@ depend: makedepend
        - test -s perly.h || /bin/rm -f perly.h
        cd x2p; $(MAKE) depend
 
-test: perl
+test: perl lib/Config.pm
        - cd t && chmod +x TEST */*.t
-       - cd t && (rm -f perl; $(SLN) ../perl perl) && ./perl TEST </dev/tty
+       - cd t && (rm -f perl; $(LNS) ../perl perl) && ./perl TEST </dev/tty
 
-clist:
+clist: $(c)
        echo $(c) | tr ' ' '\012' >.clist
 
-hlist:
+hlist:  $(h)
        echo $(h) | tr ' ' '\012' >.hlist
 
-shlist:
+shlist: $(sh)
        echo $(sh) | tr ' ' '\012' >.shlist
 
 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
index fe0549a..88b8b71 100644 (file)
@@ -17,25 +17,31 @@ case "$0" in
 */*) cd `expr X$0 : 'X\(.*\)/'` ;;
 esac
 
-case "$d_symlink" in
-*define*) sln='ln -s' ;;
-*) sln='ln';;
-esac
-
 case "$d_dosuid" in
 *define*) suidperl='suidperl' ;;
 *) suidperl='';;
 esac
 
+: Certain parts of Makefile need to be commented out if dynamic
+: loading is not used.
+case "$usedl" in
+define) comment='' ;;
+*)     comment='#' ;;
+esac
+
 echo "Extracting Makefile (with variable substitutions)"
 : This section of the file will have variable substitutions done on it.
 : Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
 : Protect any dollar signs and backticks that you do not want interpreted
 : by putting a backslash in front.  You may delete these comments.
 $spitshell >Makefile <<!GROK!THIS!
-# : Makefile.SH,v 15738Revision: 4.1 15738Date: 92/08/07 17:18:08 $
+# $Makefile.SH,v $Revision: 4.1 $Date: 92/08/07 17:18:08 $
+# This file is derived from Makefile.SH.  Any changes made here will
+# be lost the next time you run Configure.
+#  Makefile is used to generate makefile.  The only difference
+#  is that makefile has the dependencies filled in at the end.
 #
-# $Log:        Makefile.SH,v $
+# \$Log:       Makefile.SH,v \$
 # Revision 4.1  92/08/07  17:18:08  lwall
 # Stage 6 Snapshot
 # 
@@ -71,14 +77,24 @@ mansrc = $mansrc
 manext = $manext
 LDFLAGS = $ldflags
 CLDFLAGS = $ldflags
+
 SMALL = $small
 LARGE = $large $split
 mallocsrc = $mallocsrc
 mallocobj = $mallocobj
 dlsrc = $dlsrc
 dlobj = $dlobj
-SLN = $sln
+dldir = $dldir
+LNS = $lns
 RMS = rm -f
+ranlib = $ranlib
+
+# The following are used to build and install shared libraries for
+# dynamic loading.
+LDDLFLAGS = $lddlflags
+CCDLFLAGS = $ccdlflags
+CCCDLFLAGS = $cccdlflags
+SHLIBSUFFIX = $shlibsuffix
 
 libs = $libs $cryptlib
 
@@ -86,11 +102,11 @@ public = perl $suidperl
 
 shellflags = $shellflags
 
-# To use an alternate make, set $altmake in config.sh.
+## To use an alternate make, set $altmake in config.sh.
 MAKE = ${altmake-make}
 !GROK!THIS!
 
-: In the following dollars and backticks do not need the extra backslash.
+## In the following dollars and backticks do not need the extra backslash.
 $spitshell >>Makefile <<'!NO!SUBS!'
 
 CCCMD = `sh $(shellflags) cflags $@`
@@ -103,7 +119,7 @@ manpages = perl.man h2ph.man
 
 util =
 
-sh = Makefile.SH makedepend.SH h2ph.SH
+sh = Makefile.SH cflags.SH embed_h.SH makedepend.SH makedir.SH writemain.SH
 
 h1 = EXTERN.h INTERN.h av.h cop.h config.h embed.h form.h handy.h
 h2 = hv.h op.h opcode.h perl.h regcomp.h regexp.h gv.h sv.h util.h
@@ -118,19 +134,19 @@ c1 = av.c scope.c op.c doop.c doio.c dump.c hv.c
 c2 = $(mallocsrc) mg.c perly.c pp.c regcomp.c regexec.c
 c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c
 
-c = $(c1) $(c2) $(c3)
+c = $(c1) $(c2) $(c3) $(dlsrc) miniperlmain.c perlmain.c
 
 s1 = av.c scope.c op.c doop.c doio.c dump.c hv.c
-s2 = $(mallocobj) mg.c perly.c pp.c regcomp.c regexec.c
+s2 = $(mallocsrc) mg.c perly.c pp.c regcomp.c regexec.c
 s3 = gv.c sv.c taint.c toke.c util.c deb.c run.c perly.c
 
-saber = $(s1) $(s2) $(s3)
+saber = $(s1) $(s2) $(s3) $(dlsrc)
 
 obj1 = av.o scope.o op.o doop.o doio.o dump.o hv.o
 obj2 = $(mallocobj) mg.o perly.o pp.o regcomp.o regexec.o
 obj3 = gv.o sv.o taint.o toke.o util.o deb.o run.o
 
-obj = $(obj1) $(obj2) $(obj3) $(dlobj)
+obj = $(obj1) $(obj2) $(obj3)
 
 lintflags = -hbvxac
 
@@ -139,82 +155,126 @@ addedbyconf = Makefile.old bsd eunice filexp loc pdp11 usg v7
 # grrr
 SHELL = /bin/sh
 
-.SUFFIXES: .x
-
 .c.o:
        $(CCCMD) $*.c
 
-.x.c:
-       sh writemain $*.x >$*.c
-
 all: miniperl perl lib/Config.pm
 
 #all: $(public) $(private) $(util) $(scripts)
 #      cd x2p; $(MAKE) all
 #      touch all
+
+# Phony target to force checking subdirectories.
+FORCE:
+
 !NO!SUBS!
+
+### Some makes have problems with the following dependency
+### if $(dlsrc) or $(dlobj) is empty.
+### Therefore, comment it out if dlsrc is null.
+### 
+$spitshell >>Makefile <<!GROK!THIS!
+${comment}
+${comment}\$(dlsrc): \$(dldir)/\$(dlsrc)
+${comment}     cp \$(dldir)/\$(dlsrc) \$(dlsrc)
+
+${comment}\$(dlobj): \$(dlsrc)
+${comment}     \$(CCCMD) \$(dlsrc)
+
+!GROK!THIS!
+
 ###
 ### Boilerplate for all the .xs files in the ext directory.  
 ### XXX FIXME:  At some point we also need to copy .pm files out of 
 ### XXX the ext directory into lib.
-#  Configure sets extensions to a string like
-# "ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/GDBM_File.xs \
-#  ext/dbm/SDBM_File.xs ext/posix/POSIX.xs"
-extobjs=" "
+### XXX FIXME:  At some point we need to run autosplit on the .pm
+### XXX files.
+### Configure sets extensions to a string like
+### "ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/GDBM_File.xs \
+###  ext/dbm/SDBM_File.xs ext/posix/POSIX.xs"
+ext=" "
+extdep=" "
+extobj=" "
+extsrc=" "
+# extradep gives any extra dependencies of this extension.
+# extraobj gives any extra thinks to link with this extension.
 for f in $extensions
 do
-    base=`basename $f .xs`
-    dir=`dirname $f`
-    extobjs="$extobjs $f.o"
+    base=`echo $f | $sed -e 's@.*/\(.*\).xs@\1@'`
+    ext="$ext $base"
+    extsrc="$extsrc $base.c"
+    case $base in
+        SDBM_File) extradep="ext/dbm/sdbm/libsdbm.a"
+                   extraobj="ext/dbm/sdbm/libsdbm.a" ;;
+        POSIX) extradep=""   
+              extraobj="-lm" ;;
+        *) extradep=""
+          extraobj="" ;;
+    esac
+    case "$usedl" in
+       define) extdep="$extdep lib/auto/$base/${base}\$(SHLIBSUFFIX)"
+                ;;
+       *)      extdep="$extdep $base.o $extradep"
+               extobj="$extobj $base.o $extraobj" ;; 
+    esac
+    
     $spitshell >>Makefile <<!GROK!THIS!
 
 # $base extension
+$base.o: $base.c
+       \$(CCCMD) \$(CCCDLFLAGS) \$*.c
+
 $base.c:       $f ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp $f >tmp
+       ./miniperl ext/xsubpp $f >tmp
        mv tmp $base.c
 
-$base.o: $base.c
+${comment}lib/auto/$base/$base\$(SHLIBSUFFIX): $base.o $extradep
+${comment}     test -d lib/auto/$base || mkdir lib/auto/$base
+${comment}     ld \$(LDDLFLAGS) -o \$@ $base.o $extraobj
 !GROK!THIS!
 
-    case $base in
-    SDBM_File) $spitshell >>Makefile <<'!NO!SUBS!'
+done
 
-lib/auto/SDBM_File/SDBM_File.so: SDBM_File.o ext/dbm/sdbm/libsdbm.a
-       @- mkdir lib/auto/SDBM_File 2>/dev/null
-       ld -o lib/auto/SDBM_File/SDBM_File.so SDBM_File.o ext/dbm/sdbm/libsdbm.a
+$spitshell >>Makefile <<!GROK!THIS!
 
-ext/dbm/sdbm/libsdbm.a: ext/dbm/sdbm/sdbm.c ext/dbm/sdbm/sdbm.h
-       cd ext/dbm/sdbm; $(MAKE) sdbm
-!NO!SUBS!
-    ;;
-    POSIX) $spitshell >>Makefile <<'!NO!SUBS!'
-lib/auto/POSIX/POSIX.so: POSIX.o ext/dbm/sdbm/libsdbm.a
-       @- mkdir lib/auto/POSIX 2>/dev/null
-       ld -o lib/auto/POSIX/POSIX.so POSIX.o ext/dbm/sdbm/libsdbm.a
-!NO!SUBS!
-    ;;
-    esac
-done
+# List of extensions (used by writemain) to generate perlmain.c
+ext=$ext
+extsrc=$extsrc
+# Extension dependencies.
+extdep=$extdep
+# How to include extensions in linking command
+extobj=$extobj
 
-echo "extobjs=$extobjs" >> Makefile
+ext/dbm/sdbm/libsdbm.a: ext/dbm/sdbm/sdbm.h ext/dbm/sdbm/sdbm.c
+       cd ext/dbm/sdbm; \$(MAKE) -f Makefile libsdbm.a
 
+!GROK!THIS!
+
+### Now on to the rest of the Makefile.
 $spitshell >>Makefile <<'!NO!SUBS!'
 # The $& notation tells Sequent machines that it can do a parallel make,
 # and is harmless otherwise.
 
-miniperlmain.c: miniperlmain.x
-miniperlmain.o: miniperlmain.c
 miniperl: $& miniperlmain.o perl.o $(obj)
        $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain.o perl.o $(obj) $(libs)
 
-perlmain.c: perlmain.x
+perlmain.c: miniperlmain.c
+       sh writemain $(ext) > perlmain.c
+
 perlmain.o: perlmain.c
-perl: $& perlmain.o perl.o $(obj) NDBM_File.o ODBM_File.o POSIX.o
-       $(CC) $(LARGE) $(CLDFLAGS) -o perl perlmain.o perl.o $(obj) NDBM_File.o ODBM_File.o POSIX.o $(libs)
+
+perl: $& perlmain.o perl.o $(obj) $(dlobj) $(extdep)
+       $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain.o perl.o $(obj) $(dlobj) $(extobj) $(libs)
+
+pureperl: $& perlmain.o perl.o $(obj) $(dlobj) $(extdep)
+       purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain.o perl.o $(obj) $(dlobj) $(extobj) $(libs)
+
+quantperl: $& perlmain.o perl.o $(obj) $(dlobj) $(extdep)
+       quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain.o perl.o $(obj) $(dlobj) $(extobj) $(libs)
 
 libperl.rlb: libperl.a
-       ranlib libperl.a
+       $(ranlib) libperl.a
        touch libperl.rlb
 
 libperl.a: $& perl.o $(obj)
@@ -225,11 +285,11 @@ libperl.a: $& perl.o $(obj)
 # checks as well as the special code to validate that the script in question
 # has been invoked correctly.
 
-suidperl: $& sperl.o main.o libperl.rlb
-       $(CC) $(LARGE) $(CLDFLAGS) sperl.o main.o libperl.a $(libs) -o suidperl
+suidperl: $& sperl.o perlmain.o libperl.rlb
+       $(CC) $(LARGE) $(CLDFLAGS) sperl.o perlmain.o libperl.a $(libs) -o suidperl
 
-lib/Config.pm: config.sh
-       ./configpm
+lib/Config.pm: config.sh miniperl
+       ./miniperl configpm
 
 saber: $(saber)
        # load $(saber)
@@ -237,25 +297,16 @@ saber: $(saber)
 
 sperl.o: perl.c perly.h patchlevel.h $(h)
        $(RMS) sperl.c
-       $(SLN) perl.c sperl.c
+       $(LNS) perl.c sperl.c
        $(CCCMD) -DIAMSUID sperl.c
        $(RMS) sperl.c
 
-dl.o: ext/dl/dl.c
-       cp ext/dl/dl.c dl.c
-       $(CC) -c dl.c
-
-!NO!SUBS!
-
-### Now on to the rest of the Makefile.
-$spitshell >>Makefile <<'!NO!SUBS!'
-    
 perly.h: perly.c
        @ echo Dummy dependency for dumb parallel make
        touch perly.h
 
 opcode.h: opcode.pl
-       - opcode.pl
+       - perl opcode.pl
 
 embed.h: embed_h.SH global.sym interp.sym
        sh embed_h.SH
@@ -274,14 +325,21 @@ install: all
        ./perl installperl
 
 clean:
-       rm -f *.o all perl taintperl suidperl miniperl
+       rm -f *.o all perl miniperl
+       rm -f POSIX.c ?DBM_File.c perlmain.c
+       rm -f ext/dbm/sdbm/libsdbm.a
+       cd ext/dbm/sdbm; $(MAKE) -f Makefile clean
        cd x2p; $(MAKE) clean
 
 realclean: clean
        cd x2p; $(MAKE) realclean
+       cd ext/dbm/sdbm; $(MAKE) -f Makefile realclean
        rm -f *.orig */*.orig *~ */*~ core $(addedbyconf) h2ph h2ph.man
-       rm -f perly.h t/perl Makefile config.h makedepend makedir
-       rm -f makefile x2p/Makefile x2p/makefile cflags x2p/cflags
+       rm -f Makefile cflags embed_h makedepend makedir writemain
+       rm -f config.h t/perl makefile makefile.old cflags 
+       rm -rf lib/auto/?DBM_File lib/auto/POSIX
+       rm -f x2p/Makefile x2p/makefile x2p/makefile.old x2p/cflags
+       rm -f lib/Config.pm
        rm -f c2ph pstruct
 
 # The following lint has practically everything turned on.  Unfortunately,
@@ -298,28 +356,28 @@ depend: makedepend
        - test -s perly.h || /bin/rm -f perly.h
        cd x2p; $(MAKE) depend
 
-test: perl
+test: perl lib/Config.pm
        - cd t && chmod +x TEST */*.t
-       - cd t && (rm -f perl; $(SLN) ../perl perl) && ./perl TEST </dev/tty
+       - cd t && (rm -f perl; $(LNS) ../perl perl) && ./perl TEST </dev/tty
 
-clist:
+clist: $(c)
        echo $(c) | tr ' ' '\012' >.clist
 
-hlist:
+hlist:  $(h)
        echo $(h) | tr ' ' '\012' >.hlist
 
-shlist:
+shlist: $(sh)
        echo $(sh) | tr ' ' '\012' >.shlist
 
 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
 # If this runs make out of memory, delete /usr/include lines.
 !NO!SUBS!
 
-$eunicefix Makefile4
+$eunicefix Makefile
 case `pwd` in
 *SH)
-    $rm -f ../Makefile4
-    ln Makefile4 ../Makefile4
+    $rm -f ../Makefile
+    ln Makefile ../Makefile
     ;;
 esac
 rm -f makefile
index 9d5897e..d257e89 100644 (file)
@@ -42,8 +42,11 @@ register int items;
     {
        NDBM_File       db;
 
-       if (SvROK(ST(1)))
-           db = (NDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (SvROK(ST(1))) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (NDBM_File) tmp;
+       }
        else
            croak("db is not a reference");
        dbm_close(db);
@@ -65,8 +68,11 @@ register int items;
        datum   key;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "NDBM_File"))
-           db = (NDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "NDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (NDBM_File) tmp;
+       }
        else
            croak("db is not of type NDBM_File");
 
@@ -96,8 +102,11 @@ register int items;
        int     flags;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "NDBM_File"))
-           db = (NDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "NDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (NDBM_File) tmp;
+       }
        else
            croak("db is not of type NDBM_File");
 
@@ -134,8 +143,11 @@ register int items;
        datum   key;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "NDBM_File"))
-           db = (NDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "NDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (NDBM_File) tmp;
+       }
        else
            croak("db is not of type NDBM_File");
 
@@ -162,8 +174,11 @@ register int items;
        NDBM_File       db;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "NDBM_File"))
-           db = (NDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "NDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (NDBM_File) tmp;
+       }
        else
            croak("db is not of type NDBM_File");
 
@@ -188,8 +203,11 @@ register int items;
        datum   key;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "NDBM_File"))
-           db = (NDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "NDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (NDBM_File) tmp;
+       }
        else
            croak("db is not of type NDBM_File");
 
@@ -216,8 +234,11 @@ register int items;
        NDBM_File       db;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "NDBM_File"))
-           db = (NDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "NDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (NDBM_File) tmp;
+       }
        else
            croak("db is not of type NDBM_File");
 
@@ -241,8 +262,11 @@ register int items;
        NDBM_File       db;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "NDBM_File"))
-           db = (NDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "NDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (NDBM_File) tmp;
+       }
        else
            croak("db is not of type NDBM_File");
 
index 61849e3..8a073f3 100644 (file)
@@ -19,7 +19,9 @@ typedef void* ODBM_File;
 
 static int dbmrefcnt;
 
+#ifndef DBM_REPLACE
 #define DBM_REPLACE 0
+#endif
 
 static int
 XS_ODBM_File_odbm_new(ix, ax, items)
@@ -72,8 +74,11 @@ register int items;
     {
        ODBM_File       db;
 
-       if (SvROK(ST(1)))
-           db = (ODBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (SvROK(ST(1))) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (ODBM_File) tmp;
+       }
        else
            croak("db is not a reference");
        dbmrefcnt--;
@@ -96,8 +101,11 @@ register int items;
        datum   key;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "ODBM_File"))
-           db = (ODBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "ODBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (ODBM_File) tmp;
+       }
        else
            croak("db is not of type ODBM_File");
 
@@ -127,8 +135,11 @@ register int items;
        int     flags;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "ODBM_File"))
-           db = (ODBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "ODBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (ODBM_File) tmp;
+       }
        else
            croak("db is not of type ODBM_File");
 
@@ -165,8 +176,11 @@ register int items;
        datum   key;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "ODBM_File"))
-           db = (ODBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "ODBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (ODBM_File) tmp;
+       }
        else
            croak("db is not of type ODBM_File");
 
@@ -193,8 +207,11 @@ register int items;
        ODBM_File       db;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "ODBM_File"))
-           db = (ODBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "ODBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (ODBM_File) tmp;
+       }
        else
            croak("db is not of type ODBM_File");
 
@@ -219,8 +236,11 @@ register int items;
        datum   key;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "ODBM_File"))
-           db = (ODBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "ODBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (ODBM_File) tmp;
+       }
        else
            croak("db is not of type ODBM_File");
 
diff --git a/PACKINGLIST@34 b/PACKINGLIST@34
deleted file mode 100644 (file)
index 95a45f9..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-After all the perl kits are run you should have the following files:
-
-Filename               Kit Description
---------               --- -----------
-Artistic                37 The "Artistic License"
-Configure:AA             8 Run this first
-Configure:AB            14 
-Copying                 33 The GNU General Public License
-EXTERN.h                44 Included before foreign .h files
-INTERN.h                44 Included before domestic .h files
-MANIFEST                31 This list of files
-Makefile.SH             15 Precursor to Makefile
-PACKINGLIST             19 Which files came from which kits
-README                   1 The Instructions
-README.ncr               2 Special instructions for NCR
-README.uport             2 Special instructions for Microports
-README.xenix             2 Special instructions for Xenix
-Wishlist                44 Some things that may or may not happen
-arg.h                   22 Public declarations for the above
-array.c                 27 Numerically subscripted arrays
-array.h                 43 Public declarations for the above
-atarist/FILES           42 
-atarist/README.ST        1 
-atarist/RESULTS         40 
-atarist/atarist.c       36 
-atarist/config.h        23 
-atarist/echo.c          41 
-atarist/explain         40 
-atarist/makefile.sm     34 
-atarist/makefile.st     34 
-atarist/osbind.pl       36 
-atarist/perldb.diff     37 
-atarist/perlglob.c      43 
-atarist/test/binhandl   44 
-atarist/test/ccon       44 
-atarist/test/dbm        40 
-atarist/test/err        44 
-atarist/test/gdbm       44 
-atarist/test/gdbm.t     40 
-atarist/test/glob       44 
-atarist/test/osexample.pl44 
-atarist/test/pi.pl      39 
-atarist/test/printenv   20 
-atarist/test/readme     35 
-atarist/test/sig        44 
-atarist/test/tbinmode   44 
-atarist/usersub.c       44 
-atarist/usub/README.ATARI 2 
-atarist/usub/acurses.mus32 
-atarist/usub/makefile.st43 
-atarist/usub/usersub.c  43 
-atarist/wildmat.c       34 
-c2ph.SH                 25 program to translate dbx stabs to perl
-c2ph.doc                33 documentation for c2ph
-cflags.SH               40 A script that emits C compilation flags per file
-client                  43 A client to test sockets
-cmd.c                   19 Command interpreter
-cmd.h                   37 Public declarations for the above
-config.H                26 Sample config.h
-config_h.SH             22 Produces config.h
-cons.c                  17 Routines to construct cmd nodes of a parse tree
-consarg.c               20 Routines to construct arg nodes of a parse tree
-doSH                    43 Script to run all the *.SH files
-doarg.c                 13 Scalar expression evaluation
-doio.c:AA                4 I/O operations
-doio.c:AB               25 
-dolist.c                12 Array expression evaluation
-dump.c                  35 Debugging output
-eg/ADB                  27 An adb wrapper to put in your crash dir
-eg/README                1 Intro to example perl scripts
-eg/changes              43 A program to list recently changed files
-eg/down                 44 A program to do things to subdirectories
-eg/dus                  43 A program to do du -s on non-mounted dirs
-eg/findcp               42 A find wrapper that implements a -cp switch
-eg/findtar              44 A find wrapper that pumps out a tar file
-eg/g/gcp                40 A program to do a global rcp
-eg/g/gcp.man            41 Manual page for gcp
-eg/g/ged                28 A program to do a global edit
-eg/g/ghosts             43 A sample /etc/ghosts file
-eg/g/gsh                39 A program to do a global rsh
-eg/g/gsh.man            41 Manual page for gsh
-eg/muck                 39 A program to find missing make dependencies
-eg/muck.man             43 Manual page for muck
-eg/myrup                43 A program to find lightly loaded machines
-eg/nih                  44 Script to insert #! workaround
-eg/relink               40 A program to change symbolic links
-eg/rename               41 A program to rename files
-eg/rmfrom               44 A program to feed doomed filenames to
-eg/scan/scan_df         42 Scan for filesystem anomalies
-eg/scan/scan_last       42 Scan for login anomalies
-eg/scan/scan_messages   37 Scan for console message anomalies
-eg/scan/scan_passwd     43 Scan for passwd file anomalies
-eg/scan/scan_ps         43 Scan for process anomalies
-eg/scan/scan_sudo       42 Scan for sudo anomalies
-eg/scan/scan_suid       40 Scan for setuid anomalies
-eg/scan/scanner         41 An anomaly reporter
-eg/shmkill              43 A program to remove unused shared memory
-eg/sysvipc/README        2 Intro to Sys V IPC examples
-eg/sysvipc/ipcmsg       17 Example of SYS V IPC message queues
-eg/sysvipc/ipcsem       43 Example of Sys V IPC semaphores
-eg/sysvipc/ipcshm       42 Example of Sys V IPC shared memory
-eg/travesty             43 A program to print travesties of its input text
-eg/van/empty            43 A program to empty the trashcan
-eg/van/unvanish         42 A program to undo what vanish does
-eg/van/vanexp           44 A program to expire vanished files
-eg/van/vanish           41 A program to put files in a trashcan
-eg/who                  44 A sample who program
-emacs/perl-mode.el      27 Emacs major mode for perl
-emacs/perldb.el         24 Emacs debugging
-emacs/perldb.pl         27 Emacs debugging
-emacs/tedstuff          33 Some optional patches
-eval.c:AA                7 The expression evaluator
-eval.c:AB               30 
-form.c                  34 Format processing
-form.h                  43 Public declarations for the above
-gettest                 43 A little script to test the get* routines
-h2ph.SH                 36 A thing to turn C .h file into perl .ph files
-h2pl/README              2 How to turn .ph files into .pl files
-h2pl/cbreak.pl          43 cbreak routines using .ph
-h2pl/cbreak2.pl         43 cbreak routines using .pl
-h2pl/eg/sizeof.ph       44 Sample sizeof array initialization
-h2pl/eg/sys/errno.pl    41 Sample translated errno.pl
-h2pl/eg/sys/ioctl.pl    38 Sample translated ioctl.pl
-h2pl/eg/sysexits.pl     44 Sample translated sysexits.pl
-h2pl/getioctlsizes      44 Program to extract types from ioctl.h
-h2pl/mksizes            43 Program to make %sizeof array.
-h2pl/mkvars             43 Program to make .pl from .ph files
-h2pl/tcbreak            29 cbreak test routine using .ph
-h2pl/tcbreak2           22 cbreak test routine using .pl
-handy.h                 38 Handy definitions
-hash.c                  26 Associative arrays
-hash.h                  41 Public declarations for the above
-hints/3b1.sh            44 
-hints/3b1cc             41 
-hints/3b2.sh            44 
-hints/aix_rs.sh         44 
-hints/aix_rt.sh         44 
-hints/altos486.sh       44 
-hints/apollo_C6_7.sh    32 
-hints/apollo_C6_8.sh    43 
-hints/aux.sh            44 
-hints/cray.sh           44 
-hints/dgux.sh           44 
-hints/dnix.sh           44 
-hints/dynix.sh          44 
-hints/fps.sh            24 
-hints/genix.sh          44 
-hints/greenhills.sh     44 
-hints/hp9000_300.sh     44 
-hints/hp9000_400.sh     44 
-hints/hp9000_700.sh     44 
-hints/hp9000_800.sh     44 
-hints/hpux.sh           44 
-hints/i386.sh           44 
-hints/isc_3_2_2.sh      44 
-hints/isc_3_2_3.sh      44 
-hints/mc6000.sh         44 
-hints/mips.sh           44 
-hints/mpc.sh            44 
-hints/ncr_tower.sh      44 
-hints/next.sh           44 
-hints/opus.sh           44 
-hints/osf1.sh           44 
-hints/sco_2_3_0.sh      44 
-hints/sco_2_3_1.sh       1 
-hints/sco_2_3_2.sh      44 
-hints/sco_2_3_3.sh      44 
-hints/sco_2_3_4.sh      44 
-hints/sco_3.sh          44 
-hints/sgi.sh            44 
-hints/solaris_2_0.sh    44 
-hints/stellar.sh        44 
-hints/sunos_3_4.sh      44 
-hints/sunos_3_5.sh      44 
-hints/sunos_4_0_1.sh    44 
-hints/sunos_4_0_2.sh    44 
-hints/svr4.sh           15 
-hints/ti1500.sh         44 
-hints/titan.sh          42 
-hints/ultrix_1.sh       44 
-hints/ultrix_3.sh       44 
-hints/ultrix_4.sh       16 
-hints/unisysdynix.sh    44 
-hints/utekv.sh          43 
-hints/uts.sh            44 
-hints/vax.sh            33 
-installperl             37 Perl script to do "make install" dirty work
-ioctl.pl                39 Sample ioctl.pl
-lib/abbrev.pl           43 An abbreviation table builder
-lib/assert.pl           42 assertion and panic with stack trace
-lib/bigfloat.pl         36 An arbitrary precision floating point package
-lib/bigint.pl           34 An arbitrary precision integer arithmetic package
-lib/bigrat.pl           31 An arbitrary precision rational arithmetic package
-lib/cacheout.pl         43 Manages output filehandles when you need too many
-lib/chat2.pl            35 Randal's famous expect-ish routines
-lib/complete.pl         40 A command completion subroutine
-lib/ctime.pl            41 A ctime workalike
-lib/dumpvar.pl          43 A variable dumper
-lib/exceptions.pl       36 catch and throw routines
-lib/fastcwd.pl          43 a faster but more dangerous getcwd
-lib/find.pl             40 A find emulator--used by find2perl
-lib/finddepth.pl        40 A depth-first find emulator--used by find2perl
-lib/flush.pl            44 Routines to do single flush
-lib/getcwd.pl           42 a getcwd() emulator
-lib/getopt.pl           42 Perl library supporting option parsing
-lib/getopts.pl          42 Perl library supporting option parsing
-lib/importenv.pl        44 Perl routine to get environment into variables
-lib/look.pl             42 A "look" equivalent
-lib/newgetopt.pl        35 A perl library supporting long option parsing
-lib/open2.pl            41 
-lib/perldb.pl           23 Perl debugging routines
-lib/pwd.pl              42 Routines to keep track of PWD environment variable
-lib/shellwords.pl       43 Perl library to split into words with shell quoting
-lib/stat.pl             43 Perl library supporting stat function
-lib/syslog.pl           35 Perl library supporting syslogging
-lib/termcap.pl          39 Perl library supporting termcap usage
-lib/timelocal.pl        40 Perl library supporting inverse of localtime, gmtime
-lib/validate.pl         39 Perl library supporting wholesale file mode validation
-makedepend.SH           37 Precursor to makedepend
-makedir.SH              42 Precursor to makedir
-malloc.c                32 A version of malloc you might not want
-msdos/Changes.dds       41 Expanation of MS-DOS patches by Diomidis Spinellis
-msdos/Makefile          40 MS-DOS makefile
-msdos/README.msdos       1 Compiling and usage information
-msdos/Wishlist.dds      43 My wishlist
-msdos/chdir.c           41 A chdir that can change drives
-msdos/config.h          21 Definitions for msdos
-msdos/dir.h             42 MS-DOS header for directory access functions
-msdos/directory.c       38 MS-DOS directory access functions.
-msdos/eg/crlf.bat       43 Convert files from unix to MS-DOS line termination
-msdos/eg/drives.bat     42 List the system drives and their characteristics
-msdos/eg/lf.bat         43 Convert files from MS-DOS to Unix line termination
-msdos/glob.c            44 A command equivalent to csh glob
-msdos/msdos.c           37 MS-DOS ioctl, sleep, gete?[gu]if, spawn, aspawn
-msdos/popen.c           39 My_popen and my_pclose for MS-DOS
-msdos/usage.c           41 How to invoke perl under MS-DOS
-os2/Makefile            42 Makefile for OS/2
-os2/README.OS2           1 Notes for OS/2
-os2/a2p.cs              42 Compiler script for a2p
-os2/a2p.def             44 Linker defs for a2p
-os2/alarm.c             38 An implementation of alarm()
-os2/alarm.h             44 Header file for same
-os2/config.h            24 Configuration file for OS/2
-os2/crypt.c             35 
-os2/dir.h               41 Directory header
-os2/director.c          38 Directory routines
-os2/eg/alarm.pl         44 Example of alarm code
-os2/eg/os2.pl           41 Sample script for OS/2
-os2/eg/syscalls.pl      19 Example of syscall on OS/2
-os2/glob.c              44 Globbing routines
-os2/makefile            39 Make file
-os2/mktemp.c            44 Mktemp() using TMP
-os2/os2.c               36 Unix compatibility functions
-os2/perl.bad            44 names of protect-only API calls for BIND
-os2/perl.cs             43 Compiler script for perl
-os2/perl.def            23 Linker defs for perl
-os2/perldb.dif          30 Changes to make the debugger work
-os2/perlglob.bad        44 names of protect-only API calls for BIND
-os2/perlglob.cs         44 Compiler script for perlglob
-os2/perlglob.def        44 Linker defs for perlglob
-os2/perlsh.cmd          44 Poor man's shell for os2
-os2/popen.c             26 Code for opening pipes
-os2/s2p.cmd             18 s2p as command file
-os2/selfrun.bat         44 A self running perl script for DOS
-os2/selfrun.cmd         44 Example of extproc feature
-os2/suffix.c            38 Code for creating backup filenames
-os2/tests.dif           20 
-patchlevel.h            44 The current patch level of perl
-perl.c                  15 main()
-perl.h                  29 Global declarations
-perl.man:AA              9 The manual page(s)
-perl.man:AB             10 
-perl.man:AC              6 
-perl.man:AD             11 
-perl.man:AE             41 
-perlsh                  44 A poor man's perl shell
-perly.fixer             24 A program to remove yacc stack limitations
-perly.y                 30 Yacc grammar for perl
-regcomp.c                2 Regular expression compiler
-regcomp.h               35 Private declarations for above
-regexec.c               28 Regular expression evaluator
-regexp.h                39 Public declarations for the above
-server                  43 A server to test sockets
-spat.h                  38 Search pattern declarations
-stab.c                  29 Symbol table stuff
-stab.h                  25 Public declarations for the above
-str.c                   18 String handling package
-str.h                   36 Public declarations for the above
-t/README                 1 Instructions for regression tests
-t/TEST                  41 The regression tester
-t/base/cond.t           44 See if conditionals work
-t/base/if.t             44 See if if works
-t/base/lex.t            40 See if lexical items work
-t/base/pat.t            44 See if pattern matching works
-t/base/term.t           43 See if various terms work
-t/cmd/elsif.t           43 See if else-if works
-t/cmd/for.t             43 See if for loops work
-t/cmd/mod.t             43 See if statement modifiers work
-t/cmd/subval.t          13 See if subroutine values work
-t/cmd/switch.t          41 See if switch optimizations work
-t/cmd/while.t           40 See if while loops work
-t/comp/cmdopt.t         39 See if command optimization works
-t/comp/cpp.t            43 See if C preprocessor works
-t/comp/decl.t           44 See if declarations work
-t/comp/multiline.t      43 See if multiline strings work
-t/comp/package.t        43 See if packages work
-t/comp/script.t         44 See if script invokation works
-t/comp/term.t           42 See if more terms work
-t/io/argv.t             43 See if ARGV stuff works
-t/io/dup.t              43 See if >& works right
-t/io/fs.t               39 See if directory manipulations work
-t/io/inplace.t          44 See if inplace editing works
-t/io/pipe.t             43 See if secure pipes work
-t/io/print.t            44 See if print commands work
-t/io/tell.t             42 See if file seeking works
-t/lib/big.t             38 See if lib/bigint.pl works
-t/op/append.t           44 See if . works
-t/op/array.t            39 See if array operations work
-t/op/auto.t             21 See if autoincrement et all work
-t/op/chop.t             43 See if chop works
-t/op/cond.t             44 See if conditional expressions work
-t/op/dbm.t              40 See if dbm binding works
-t/op/delete.t           43 See if delete works
-t/op/do.t               42 See if subroutines work
-t/op/each.t             42 See if associative iterators work
-t/op/eval.t             42 See if eval operator works
-t/op/exec.t             43 See if exec and system work
-t/op/exp.t              43 See if math functions work
-t/op/flip.t             43 See if range operator works
-t/op/fork.t             44 See if fork works
-t/op/glob.t             44 See if <*> works
-t/op/goto.t             43 See if goto works
-t/op/groups.t           43 See if $( works
-t/op/index.t            12 See if index works
-t/op/int.t              44 See if int works
-t/op/join.t             44 See if join works
-t/op/list.t             40 See if array lists work
-t/op/local.t            43 See if local works
-t/op/magic.t            42 See if magic variables work
-t/op/mkdir.t            44 See if mkdir works
-t/op/oct.t              44 See if oct and hex work
-t/op/ord.t              44 See if ord works
-t/op/pack.t             43 See if pack and unpack work
-t/op/pat.t              38 See if esoteric patterns work
-t/op/push.t             42 See if push and pop work
-t/op/range.t            43 See if .. works
-t/op/re_tests           32 Input file for op.regexp
-t/op/read.t             44 See if read() works
-t/op/readdir.t          44 See if readdir() works
-t/op/regexp.t           43 See if regular expressions work
-t/op/repeat.t           42 See if x operator works
-t/op/s.t                38 See if substitutions work
-t/op/sleep.t            44 See if sleep works
-t/op/sort.t             42 See if sort works
-t/op/split.t            41 See if split works
-t/op/sprintf.t          44 See if sprintf works
-t/op/stat.t             37 See if stat works
-t/op/study.t            41 See if study works
-t/op/substr.t            2 See if substr works
-t/op/time.t             42 See if time functions work
-t/op/undef.t            42 See if undef works
-t/op/unshift.t          44 See if unshift works
-t/op/vec.t              43 See if vectors work
-t/op/write.t            41 See if write works
-toke.c:AA                3 The tokener
-toke.c:AB               31 
-usersub.c               39 User supplied (possibly proprietary) subroutines
-usub/Makefile           44 Makefile for curseperl
-usub/README              1 Instructions for user supplied subroutines
-usub/bsdcurses.mus      32 what used to be curses.mus
-usub/curses.mus         21 Glue routines for BSD curses
-usub/man2mus            42 A manual page to .mus translator
-usub/mus                40 A .mus to .c translator
-usub/pager              39 A sample pager in curseperl
-usub/usersub.c          41 An initialization file to call curses glue routines
-util.c                  16 Utility routines
-util.h                  42 Public declarations for the above
-x2p/EXTERN.h            44 Same as above
-x2p/INTERN.h            44 Same as above
-x2p/Makefile.SH         23 Precursor to Makefile
-x2p/a2p.h               14 Global declarations
-x2p/a2p.man             36 Manual page for awk to perl translator
-x2p/a2p.y               17 A yacc grammer for awk
-x2p/a2py.c              28 Awk compiler, sort of
-x2p/cflags.SH           41 A script that emits C compilation flags per file
-x2p/find2perl.SH        33 A find to perl translator
-x2p/handy.h             42 Handy definitions
-x2p/hash.c              38 Associative arrays again
-x2p/hash.h              42 Public declarations for the above
-x2p/s2p.SH              31 Sed to perl translator
-x2p/s2p.man             40 Manual page for sed to perl translator
-x2p/str.c               16 String handling package
-x2p/str.h               42 Public declarations for the above
-x2p/util.c              37 Utility routines
-x2p/util.h              42 Public declarations for the above
-x2p/walk.c:AA            5 Parse tree walker
-x2p/walk.c:AB           42 
diff --git a/POSIX.c b/POSIX.c
index bfd6ac3..b5036e5 100644 (file)
--- a/POSIX.c
+++ b/POSIX.c
@@ -13,7 +13,9 @@
 #include <limits.h>
 #include <locale.h>
 #include <math.h>
+#ifdef I_PWD
 #include <pwd.h>
+#endif
 #include <setjmp.h>
 #include <signal.h>
 #ifdef I_STDARG
@@ -30,7 +32,7 @@
 #include <sys/types.h>
 #include <sys/utsname.h>
 #include <sys/wait.h>
-#ifndef CR3
+#if defined(I_TERMIOS) && !defined(CR3)
 #include <termios.h>
 #endif
 #include <time.h>
@@ -44,7 +46,7 @@ typedef HV* POSIX__SigAction;
 #define HAS_UNAME
 
 #ifndef HAS_GETPGRP
-#define getpgrp(a,b) not_here("getpgrp")
+#define getpgrp() not_here("getpgrp")
 #endif
 #ifndef HAS_NICE
 #define nice(a) not_here("nice")
@@ -55,9 +57,6 @@ typedef HV* POSIX__SigAction;
 #ifndef HAS_SETPGID
 #define setpgid(a,b) not_here("setpgid")
 #endif
-#ifndef HAS_SETPGRP
-#define setpgrp(a,b) not_here("setpgrp")
-#endif
 #ifndef HAS_SETSID
 #define setsid() not_here("setsid")
 #endif
@@ -2074,8 +2073,11 @@ register int items;
     {
        POSIX__SigSet   sigset;
 
-       if (SvROK(ST(1)))
-           sigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (SvROK(ST(1))) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           sigset = (POSIX__SigSet) tmp;
+       }
        else
            croak("sigset is not a reference");
        safefree(sigset);
@@ -2097,8 +2099,11 @@ register int items;
        int     sig = (int)SvIV(ST(2));
        SysRet  RETVAL;
 
-       if (sv_isa(ST(1), "POSIX::SigSet"))
-           sigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "POSIX::SigSet")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           sigset = (POSIX__SigSet) tmp;
+       }
        else
            croak("sigset is not of type POSIX::SigSet");
 
@@ -2128,8 +2133,11 @@ register int items;
        int     sig = (int)SvIV(ST(2));
        SysRet  RETVAL;
 
-       if (sv_isa(ST(1), "POSIX::SigSet"))
-           sigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "POSIX::SigSet")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           sigset = (POSIX__SigSet) tmp;
+       }
        else
            croak("sigset is not of type POSIX::SigSet");
 
@@ -2158,8 +2166,11 @@ register int items;
        POSIX__SigSet   sigset;
        SysRet  RETVAL;
 
-       if (sv_isa(ST(1), "POSIX::SigSet"))
-           sigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "POSIX::SigSet")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           sigset = (POSIX__SigSet) tmp;
+       }
        else
            croak("sigset is not of type POSIX::SigSet");
 
@@ -2188,8 +2199,11 @@ register int items;
        POSIX__SigSet   sigset;
        SysRet  RETVAL;
 
-       if (sv_isa(ST(1), "POSIX::SigSet"))
-           sigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "POSIX::SigSet")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           sigset = (POSIX__SigSet) tmp;
+       }
        else
            croak("sigset is not of type POSIX::SigSet");
 
@@ -2219,8 +2233,11 @@ register int items;
        int     sig = (int)SvIV(ST(2));
        int     RETVAL;
 
-       if (sv_isa(ST(1), "POSIX::SigSet"))
-           sigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "POSIX::SigSet")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           sigset = (POSIX__SigSet) tmp;
+       }
        else
            croak("sigset is not of type POSIX::SigSet");
 
@@ -2266,7 +2283,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isalnum(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2289,7 +2306,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isalpha(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2312,7 +2329,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!iscntrl(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2335,7 +2352,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isdigit(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2358,7 +2375,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isgraph(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2381,7 +2398,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!islower(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2404,7 +2421,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isprint(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2427,7 +2444,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!ispunct(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2450,7 +2467,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isspace(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2473,7 +2490,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isupper(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2496,7 +2513,7 @@ register int items;
        int     RETVAL;
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isxdigit(*s))
                RETVAL = 0;
        ST(0) = sv_newmortal();
@@ -2652,12 +2669,12 @@ register int items;
        croak("Usage: POSIX::acos(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = acos(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2672,12 +2689,12 @@ register int items;
        croak("Usage: POSIX::asin(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = asin(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2692,12 +2709,12 @@ register int items;
        croak("Usage: POSIX::atan(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = atan(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2712,12 +2729,12 @@ register int items;
        croak("Usage: POSIX::ceil(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = ceil(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2732,12 +2749,12 @@ register int items;
        croak("Usage: POSIX::cosh(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = cosh(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2752,12 +2769,12 @@ register int items;
        croak("Usage: POSIX::floor(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = floor(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2772,13 +2789,13 @@ register int items;
        croak("Usage: POSIX::fmod(x,y)");
     }
     {
-       double  x = SvNV(ST(1));
-       double  y = SvNV(ST(2));
+       double  x = (double)SvNV(ST(1));
+       double  y = (double)SvNV(ST(2));
        double  RETVAL;
 
        RETVAL = fmod(x, y);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2793,7 +2810,7 @@ register int items;
        croak("Usage: POSIX::frexp(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        dSP;
        int expvar;
        sp--;
@@ -2815,13 +2832,13 @@ register int items;
        croak("Usage: POSIX::ldexp(x,exp)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        int     exp = (int)SvIV(ST(2));
        double  RETVAL;
 
        RETVAL = ldexp(x, exp);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2836,12 +2853,12 @@ register int items;
        croak("Usage: POSIX::log10(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = log10(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2856,7 +2873,7 @@ register int items;
        croak("Usage: POSIX::modf(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        dSP;
        double intvar;
        sp--;
@@ -2878,12 +2895,12 @@ register int items;
        croak("Usage: POSIX::sinh(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = sinh(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2898,12 +2915,12 @@ register int items;
        croak("Usage: POSIX::tanh(x)");
     }
     {
-       double  x = SvNV(ST(1));
+       double  x = (double)SvNV(ST(1));
        double  RETVAL;
 
        RETVAL = tanh(x);
        ST(0) = sv_newmortal();
-       sv_setnv(ST(0), RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -2939,7 +2956,7 @@ register int items;
 
 
        if (!siggv)
-           gv_fetchpv("SIG", TRUE);
+           gv_fetchpv("SIG", TRUE, SVt_PVHV);
 
        {
            struct sigaction act;
@@ -2975,7 +2992,7 @@ register int items;
                    act.sa_mask = *sigset;
                }
                else
-                   sigemptyset(act.sa_mask);
+                   sigemptyset(& act.sa_mask);
 
                /* Set up any desired flags. */
                svp = hv_fetch(action, "FLAGS", 5, FALSE);
@@ -2984,11 +3001,11 @@ register int items;
 
            /* Now work around sigaction oddities */
            if (action && oldaction)
-               RETVAL = sigaction(sig, act, oact);
+               RETVAL = sigaction(sig, & act, & oact);
            else if (action)
-               RETVAL = sigaction(sig, act, (struct sigaction*)0);
+               RETVAL = sigaction(sig, & act, (struct sigaction*)0);
            else if (oldaction)
-               RETVAL = sigaction(sig, (struct sigaction*)0, oact);
+               RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
 
            if (oldaction) {
                /* Get back the mask. */
@@ -3030,8 +3047,11 @@ register int items;
        POSIX__SigSet   sigset;
        SysRet  RETVAL;
 
-       if (sv_isa(ST(1), "POSIX::SigSet"))
-           sigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "POSIX::SigSet")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           sigset = (POSIX__SigSet) tmp;
+       }
        else
            croak("sigset is not of type POSIX::SigSet");
 
@@ -3062,16 +3082,22 @@ register int items;
        POSIX__SigSet   oldsigset;
        SysRet  RETVAL;
 
-       if (sv_isa(ST(2), "POSIX::SigSet"))
-           sigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(2)));
+       if (sv_isa(ST(2), "POSIX::SigSet")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(2)));
+           sigset = (POSIX__SigSet) tmp;
+       }
        else
            croak("sigset is not of type POSIX::SigSet");
 
        if (items < 3)
            oldsigset = 0;
        else {
-           if (sv_isa(ST(3), "POSIX::SigSet"))
-               oldsigset = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(3)));
+           if (sv_isa(ST(3), "POSIX::SigSet")) {
+               unsigned long tmp;
+               tmp = (unsigned long)SvNV((SV*)SvRV(ST(3)));
+               oldsigset = (POSIX__SigSet) tmp;
+           }
            else
                croak("oldsigset is not of type POSIX::SigSet");
        }
@@ -3101,8 +3127,11 @@ register int items;
        POSIX__SigSet   signal_mask;
        SysRet  RETVAL;
 
-       if (sv_isa(ST(1), "POSIX::SigSet"))
-           signal_mask = (POSIX__SigSet)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "POSIX::SigSet")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           signal_mask = (POSIX__SigSet) tmp;
+       }
        else
            croak("signal_mask is not of type POSIX::SigSet");
 
@@ -3146,11 +3175,16 @@ register int items;
     }
     {
        int     fd = (int)SvIV(ST(1));
-       int     RETVAL;
+       SysRet  RETVAL;
 
        RETVAL = close(fd);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3166,11 +3200,16 @@ register int items;
     }
     {
        int     fd = (int)SvIV(ST(1));
-       int     RETVAL;
+       SysRet  RETVAL;
 
        RETVAL = dup(fd);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3187,72 +3226,16 @@ register int items;
     {
        int     fd1 = (int)SvIV(ST(1));
        int     fd2 = (int)SvIV(ST(2));
-       int     RETVAL;
+       SysRet  RETVAL;
 
        RETVAL = dup2(fd1, fd2);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_fstat(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 2) {
-       croak("Usage: POSIX::fstat(fd, buf)");
-    }
-    {
-       int     fd = (int)SvIV(ST(1));
-       struct stat * buf = (struct stat*)sv_grow(ST(2),sizeof(struct stat));
-       int     RETVAL;
-
-       RETVAL = fstat(fd, buf);
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-       SvCUR(ST(2)) = sizeof(struct stat);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_getpgrp(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 1) {
-       croak("Usage: POSIX::getpgrp(pid)");
-    }
-    {
-       int     pid = (int)SvIV(ST(1));
-       int     RETVAL;
-
-       RETVAL = getpgrp(pid);
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_link(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::link()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = link();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3267,49 +3250,19 @@ register int items;
        croak("Usage: POSIX::lseek()");
     }
     {
-       int     RETVAL;
+       int;
+       Off_t;
+       int;
+       SysRet  RETVAL;
 
        RETVAL = lseek();
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_lstat(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::lstat()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = lstat();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_mkdir(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::mkdir()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = mkdir();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3325,11 +3278,16 @@ register int items;
     }
     {
        int     incr = (int)SvIV(ST(1));
-       int     RETVAL;
+       SysRet  RETVAL;
 
        RETVAL = nice(incr);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3345,10 +3303,15 @@ register int items;
     }
     {
        int     RETVAL;
-
-       RETVAL = pipe();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       dSP;
+       int fds[2];
+       sp--;
+       if (pipe(fds) != -1) {
+           EXTEND(sp,2);
+           PUSHs(sv_2mortal(newSViv(fds[0])));
+           PUSHs(sv_2mortal(newSViv(fds[1])));
+       }
+       ax = sp - stack_base;
     }
     return ax;
 }
@@ -3363,49 +3326,20 @@ register int items;
        croak("Usage: POSIX::read()");
     }
     {
-       int     RETVAL;
-
-       RETVAL = read();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_rename(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::rename()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = rename();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_rmdir(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::rmdir()");
-    }
-    {
-       int     RETVAL;
+       SysRet  RETVAL;
+       int fd;
+       char * buffer;
+       size_t nbytes;
 
-       RETVAL = rmdir();
+       RETVAL = read(fd, buffer, nbytes);
+       croak("POSIX::read() not implemented yet\n");
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3416,15 +3350,21 @@ register int ix;
 register int ax;
 register int items;
 {
-    if (items != 0) {
-       croak("Usage: POSIX::setgid()");
+    if (items != 1) {
+       croak("Usage: POSIX::setgid(gid)");
     }
     {
-       int     RETVAL;
+       Gid_t   gid = (Gid_t)SvNV(ST(1));
+       SysRet  RETVAL;
 
-       RETVAL = setgid();
+       RETVAL = setgid(gid);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3439,34 +3379,18 @@ register int items;
        croak("Usage: POSIX::setpgid(pid, pgid)");
     }
     {
-       pid_t   pid = (int)SvIV(ST(1));
-       pid_t   pgid = (int)SvIV(ST(2));
-       int     RETVAL;
+       pid_t   pid = (pid_t)SvNV(ST(1));
+       pid_t   pgid = (pid_t)SvNV(ST(2));
+       SysRet  RETVAL;
 
        RETVAL = setpgid(pid, pgid);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_setpgrp(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 2) {
-       croak("Usage: POSIX::setpgrp(pid, pgrp)");
-    }
-    {
-       int     pid = (int)SvIV(ST(1));
-       int     pgrp = (int)SvIV(ST(2));
-       int     RETVAL;
-
-       RETVAL = setpgrp(pid, pgrp);
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3485,7 +3409,7 @@ register int items;
 
        RETVAL = setsid();
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -3496,72 +3420,21 @@ register int ix;
 register int ax;
 register int items;
 {
-    if (items != 0) {
-       croak("Usage: POSIX::setuid()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = setuid();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_stat(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::stat()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = stat();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_symlink(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::symlink()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = symlink();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_system(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::system()");
+    if (items != 1) {
+       croak("Usage: POSIX::setuid(uid)");
     }
     {
-       int     RETVAL;
+       Uid_t   uid = (Uid_t)SvNV(ST(1));
+       SysRet  RETVAL;
 
-       RETVAL = system();
+       RETVAL = setuid(uid);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3581,7 +3454,7 @@ register int items;
 
        RETVAL = tcgetpgrp(fd);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       sv_setnv(ST(0), (double)RETVAL);
     }
     return ax;
 }
@@ -3597,52 +3470,17 @@ register int items;
     }
     {
        int     fd = (int)SvIV(ST(1));
-       pid_t   pgrp_id = (int)SvIV(ST(2));
-       int     RETVAL;
+       pid_t   pgrp_id = (pid_t)SvNV(ST(2));
+       SysRet  RETVAL;
 
        RETVAL = tcsetpgrp(fd, pgrp_id);
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_times(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 1) {
-       croak("Usage: POSIX::times(tms)");
-    }
-    {
-       struct tms * tms = (struct tms*)sv_grow(ST(1), sizeof(struct tms));
-       int     RETVAL;
-
-       RETVAL = times(tms);
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-       SvCUR(ST(1)) = sizeof(struct tms);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_umask(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::umask()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = umask();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3657,16 +3495,17 @@ register int items;
        croak("Usage: POSIX::uname()");
     }
     {
+       int     RETVAL;
        dSP;
-       struct utsname utsname;
+       struct utsname buf;
        sp--;
-       if (uname(&utsname) >= 0) {
+       if (uname(&buf) >= 0) {
            EXTEND(sp, 5);
-           PUSHs(sv_2mortal(newSVpv(utsname.sysname, 0)));
-           PUSHs(sv_2mortal(newSVpv(utsname.nodename, 0)));
-           PUSHs(sv_2mortal(newSVpv(utsname.release, 0)));
-           PUSHs(sv_2mortal(newSVpv(utsname.version, 0)));
-           PUSHs(sv_2mortal(newSVpv(utsname.machine, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
        }
        ax = sp - stack_base;
     }
@@ -3674,85 +3513,6 @@ register int items;
 }
 
 static int
-XS_POSIX_unlink(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::unlink()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = unlink();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_utime(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::utime()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = utime();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_wait(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 0) {
-       croak("Usage: POSIX::wait()");
-    }
-    {
-       int     RETVAL;
-
-       RETVAL = wait();
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
-XS_POSIX_waitpid(ix, ax, items)
-register int ix;
-register int ax;
-register int items;
-{
-    if (items != 3) {
-       croak("Usage: POSIX::waitpid(pid, statusp, options)");
-    }
-    {
-       int     pid = (int)SvIV(ST(1));
-       int     statusp = (int)SvIV(ST(2));
-       int     options = (int)SvIV(ST(3));
-       int     RETVAL;
-
-       RETVAL = waitpid(pid, &statusp, options);
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
-    }
-    return ax;
-}
-
-static int
 XS_POSIX_write(ix, ax, items)
 register int ix;
 register int ax;
@@ -3762,11 +3522,20 @@ register int items;
        croak("Usage: POSIX::write()");
     }
     {
-       int     RETVAL;
+       SysRet  RETVAL;
+       int fd;
+       char * buffer;
+       size_t nbytes;
 
-       RETVAL = write();
+       RETVAL = write(fd, buffer, nbytes);
+       croak("POSIX::write() not implemented yet\n");
        ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (I32)RETVAL);
+       if (RETVAL != -1) {
+           if (RETVAL == 0)
+               sv_setpvn(ST(0), "0 but true", 10);
+           else
+               sv_setiv(ST(0), (I32)RETVAL);
+       }
     }
     return ax;
 }
@@ -3821,33 +3590,16 @@ int items;
     newXSUB("POSIX::close", 0, XS_POSIX_close, file);
     newXSUB("POSIX::dup", 0, XS_POSIX_dup, file);
     newXSUB("POSIX::dup2", 0, XS_POSIX_dup2, file);
-    newXSUB("POSIX::fstat", 0, XS_POSIX_fstat, file);
-    newXSUB("POSIX::getpgrp", 0, XS_POSIX_getpgrp, file);
-    newXSUB("POSIX::link", 0, XS_POSIX_link, file);
     newXSUB("POSIX::lseek", 0, XS_POSIX_lseek, file);
-    newXSUB("POSIX::lstat", 0, XS_POSIX_lstat, file);
-    newXSUB("POSIX::mkdir", 0, XS_POSIX_mkdir, file);
     newXSUB("POSIX::nice", 0, XS_POSIX_nice, file);
     newXSUB("POSIX::pipe", 0, XS_POSIX_pipe, file);
     newXSUB("POSIX::read", 0, XS_POSIX_read, file);
-    newXSUB("POSIX::rename", 0, XS_POSIX_rename, file);
-    newXSUB("POSIX::rmdir", 0, XS_POSIX_rmdir, file);
     newXSUB("POSIX::setgid", 0, XS_POSIX_setgid, file);
     newXSUB("POSIX::setpgid", 0, XS_POSIX_setpgid, file);
-    newXSUB("POSIX::setpgrp", 0, XS_POSIX_setpgrp, file);
     newXSUB("POSIX::setsid", 0, XS_POSIX_setsid, file);
     newXSUB("POSIX::setuid", 0, XS_POSIX_setuid, file);
-    newXSUB("POSIX::stat", 0, XS_POSIX_stat, file);
-    newXSUB("POSIX::symlink", 0, XS_POSIX_symlink, file);
-    newXSUB("POSIX::system", 0, XS_POSIX_system, file);
     newXSUB("POSIX::tcgetpgrp", 0, XS_POSIX_tcgetpgrp, file);
     newXSUB("POSIX::tcsetpgrp", 0, XS_POSIX_tcsetpgrp, file);
-    newXSUB("POSIX::times", 0, XS_POSIX_times, file);
-    newXSUB("POSIX::umask", 0, XS_POSIX_umask, file);
     newXSUB("POSIX::uname", 0, XS_POSIX_uname, file);
-    newXSUB("POSIX::unlink", 0, XS_POSIX_unlink, file);
-    newXSUB("POSIX::utime", 0, XS_POSIX_utime, file);
-    newXSUB("POSIX::wait", 0, XS_POSIX_wait, file);
-    newXSUB("POSIX::waitpid", 0, XS_POSIX_waitpid, file);
     newXSUB("POSIX::write", 0, XS_POSIX_write, file);
 }
diff --git a/Quick b/Quick
deleted file mode 100644 (file)
index 13d6ae0..0000000
--- a/Quick
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/usr/local/bin/perl5
-#
-# This document is in the public domain.
-#
-# The purpose is to document by example some of the new Perl5 features.
-# It also functions as a mini test suite; you can extracted the
-# expected output using:
-#     perl -ne 'm/.*prints ``(.*)..$/ && print $1,"\n";'
-# There are a couple of places that print out internal address so it's
-# not perfect yet, those should be fixed.
-#
-# Thanks to the following for their input:
-#     Johan.Vromans@NL.net
-#     Daniel Faken <absinthe@viva.chem.washington.edu>
-#     Tom Christiansen <tchrist@wraeththu.cs.colorado.edu>
-#     Dean Roehrich <roehrich@ferrari.cray.com>
-#     Larry Wall <lwall@netlabs.com>
-#
-# TODO when I get perl5a6 to play with
-#      *foo = \&func;                  # replaces only function (etc)
-#      AUTOLOAD { ...; }               # called if method not found
-#      goto &func;                     # goto's a function
-#      require FOOBAR;                 # loads FOOBAR.pm
-#      @ISA
-#
-#      import()/@EXPORT/etc
-
-#   my
-       # static scoping
-       sub samp1 { print $z,"\n"; }
-       sub samp2 { my($z) = "world"; &samp1; }
-       $z = "hello"; &samp2;           # prints ``hello''
-
-#   package;
-       # for catching non-local variable references
-       sub samp3 {
-           my $x = shift;              # local() would work also
-           package;                    # empty package
-           $main::count += $x;         # this is ok.
-           # $y = 1;                   # compile time error
-       }
-
-#   =>
-       # works like comma (,); use for key/value pairs
-        # sometimes used to disambiguate the final expression in a block
-       # might someday supply warnings if you get out of sync
-       %foo = ( abc => foo );
-       print $foo{abc},"\n";           # prints ``foo''
-
-#   ::
-       # works like tick (') (use of ' is deprecated in perl5)
-        print $main::foo{abc},"\n";    # prints ``foo''
-
-#   bless ref;
-       # Bless takes a reference and returns an "object"
-       $oref = bless \$scalar;
-
-#   ->
-       # dereferences an "object"
-       $x = { def => bar };            # $x is ref to anonymous hash
-       print $x->{def},"\n";           # prints ``bar''
-
-       # method derefs must be bless'ed
-       {
-           package sample;
-           sub samp4 { my($this) = shift; print $this->{def},"\n"; }
-           sub samp5 { print "samp5: @_\n"; }
-           $main::y = bless $main::x;  # $x is ref, $y is "object"
-       }
-       $y->samp4();                    # prints ``bar''
-
-       # indirect object calls
-       samp5 $y arglist;               # prints ``samp5: sample=HASH(0xa85e0) arglist''
-
-       # static method calls (often used for constructors, see below)
-       samp5 sample arglist;           # prints ``samp5: sample arglist''
-
-#   function calls without &
-       sub samp6 { print "look ma\n"; }
-       samp6;                          # prints ``look ma''
-
-#   ref
-       # returns "object" type
-       {
-           package OBJ1;
-           $x = bless \$y;             # returns "object" $x in "class" OBJ1
-           print ref $x,"\n";          # prints ``OBJ1''
-       }
-
-       # and non-references return undef.
-       $z = 1;
-       print "non-ref\n" if !defined(ref $z);          # prints ``non-ref''
-
-       # ref's to "builtins" return type
-       print ref \$ascalar,"\n";               # prints ``SCALAR''
-       print ref \@array,"\n";                 # prints ``ARRAY''
-       print ref \%hash,"\n";                  # prints ``HASH''
-       sub func { print shift,"\n"; }
-       print ref \&func,"\n";                  # prints ``CODE''
-       print ref \\$scalar,"\n";               # prints ``REF''
-
-#   tie
-       # bind a variable to a package with magic functions:
-        #     new, fetch, store, delete, firstkey, nextkey (XXX: others???)
-       # Usage: tie variable, PackageName, ARGLIST
-       {
-           package TIEPACK;
-           sub new { print "NEW: @_\n"; my($class, $x) = @_; bless \$x }
-           sub fetch { print "fetch @_\n"; my($this) = @_; ${$this} }
-           sub store { print "store @_\n"; my($this, $x) = @_; ${$this} = $x }
-           sub DESTROY { print "DESTROY @_\n" }
-       }
-       tie $h, TIEPACK, "black_tie";   # prints ``NEW: TIEPACK black_tie''
-       print $h, "\n";                 # prints ``fetch TIEPACK=SCALAR(0x882a0)''
-                                       # prints ``black_tie''
-       $h = 'bar';                     # prints ``store TIEPACK=SCALAR(0x882a0) bar''
-       untie $h;                       # DESTROY (XXX: broken in perl5a5???)
-
-#   References and Anonymous data-structures
-       $sref = \$scalar;               # $$sref is scalar
-       $aref = \@array;                # @$aref is array
-       $href = \%hash;                 # %$href is hash table
-       $fref = \&func;                 # &$fref is function
-       $refref = \$fref;               # ref to ref to function
-       &$$refref("call the function"); # prints ``call the function''
-
-       %hash = ( abc => foo );         # hash (just like perl4)
-       print $hash{abc},"\n";          # prints ``foo''
-       $ref = { abc => bar };          # reference to anon hash
-       print $ref->{abc},"\n";         # prints ``bar''
-
-       @ary = ( 0, 1, 2 );             # array (just like perl4)
-       print $ary[1],"\n";             # prints ``1''
-       $ref = [ 3, 4, 5 ];             # reference to anon array
-       print $ref->[1],"\n";           # prints ``4''
-
-#   Nested data-structures
-       @foo = ( 0, { name => foobar }, 2, 3 );         # $#foo == 3
-       $aref = [ 0, { name => foobar }, 2, 3 ];        # ref to anon array
-       $href = {                                       # ref to hash of arrays
-           John => [ Mary, Pat, Blanch ],
-           Paul => [ Sally, Jill, Jane ],
-           Mark => [ Ann, Bob, Dawn ],
-       };
-       print $href->{Paul}->[0], "\n";                 # prints ``Sally''
-       print $href->{Paul}[0],"\n";                    # shorthand version, prints ``Sally''
-
-#   Multiple Inheritence (get rich quick :-)
-       {
-           package OBJ2; sub abc { print "abc\n"; }
-           package OBJ3; sub def { print "def\n"; }
-           package OBJ4; @ISA = ("OBJ2", "OBJ3");
-           $x = bless { foo => bar };
-           $x->abc;                                    # prints ``abc''
-           $x->def;                                    # prints ``def''
-       }
-
-#   Packages, Classes, Objects, Methods, Constructors, Destructors, etc.
-       # XXX: I'll add more explinations/samples about the above here
-       {
-           package OBJ5;
-           sub new { print "NEW: @_\n"; my($x) = "empty"; bless \$x }
-           sub DESTROY { print "DESTROY\n" }
-           sub output { my($this) = shift; print "value = $$this\n"; }
-       }
-       # Constructors are often written as static method calls:
-       $x = new OBJ5;          # prints ``NEW: OBJ5''
-       $x->output;             # prints ``value = empty''
-       # The destructor is responsible for calling any base class destructors.
-       undef $x;
index 0ceab96..807b457 100644 (file)
@@ -1,4 +1,86 @@
-From: doughera@lafcol.lafayette.edu (Andy Dougherty
+From: doughera@lafcol.lafayette.edu (Andy Dougherty)
+Subject: RE: First stab at Configure Support for perl5alpha
+Date: Fri Apr 29 16:43:18 EDT 1994
+
+I have incorporated various fixes/suggestions into the Configure
+support for perl5alpha8.  The main changes are the following:
+   -Better incorporation of extensions in Makefile.SH.
+   -miniperlmain.c no longer requires dynamic loading.
+   -perl can use dynamic loading if available, but extensions can
+    also be compiled in statically, if desired.
+   -perlmain.c now built from miniperlmain.c by writemain.SH,
+    which is called in the makefile.  Only the requested extensions
+    are compiled in.
+   -dynamic loading broken up into dl_sunos.c, dl_next.c, dl_hpux.c.
+    Configure will look for dl_$osname.c, where osname is determined
+    at the same time as hints are suggested.
+   -Configure support added for sdbm library (ext/dbm/sdbm/libsdbm.a).
+    This still needs testing.
+   -Tests for extensions now check in %Config to see if that extension
+    is available.  Note, however, the sdbm is not an *optional*
+    extension, so it will fail (and make test will complain)
+    if sdbm is not installed.  Thus perl programmers can safely assume
+    that at least sdbm is available.
+   -configpm now correctly handles comments at the end of config.sh
+    (which Configure places there if a hints file tries to propagate
+    unknown variables, such as libswanted).
+   -makedepend now works in UU/ subdirectory (so it doesn't delete
+    miniperlmain.c on systems with 14-character file name limits).
+   -ext/typemap:  My compiler couldn't handle some of the more complex
+    casts, so an intermediate unsigned long variable has been introduced.
+    I should probably re-do this in terms of a CRIPPLED_CC macro in
+    XSUB.h, but it's not clear to me that it's worth it.
+   -some new or updated hints files.
+   -miscellaneous bug fixes.
+
+Problems remaining:
+
+   -POSIX module is still under construction.
+   -Dynamic loading of extensions works on SunOS 4.1.3, but it
+    might need modifications to work with other systems.
+   -It is possible to do mixed dynamic/static loading, that is,
+    load commonly used modules statically and other modules
+    dynamically.  Currently, this must be done by hand by setting
+    extobj in makefile and hand-editing perlmain.c.
+    The newXSUB line for the static module must be moved into
+    the #ifdef USE_DYNAMIC_LOADING section in perlmain.c, and the
+    module .o file must be added to the extobj= line in makefile.
+   -lib/[sn]dbm.t tests create a new file with a hard-wired set of
+    flags.  These should be replaced with O_CREAT | O_RDWR, which
+    will be available from POSIX.pm, once it is up and running.
+    For now, you might have to change the 0x202 to 0x102 (or perhaps
+    0x402) in lib/[sn]dbm.t for the tests to succeed.
+   -I have applied several suggested fixes for use on the DEC alpha,
+    but I haven't been able to keep up with all of them.
+   -Though CRIPPLED_CC works, it might be desireable to have Configure
+    try to figure it out.
+    
+To apply:      Obtain a clean copy of perl5alpha8
+               cd <your perl5alpha8 directory>
+               patch -p1 < <this patch>
+
+As before, I am willing to continue to coordinate and develop the
+Configure support.
+
+Thanks to the following for various and often quite substantial 
+patches and suggestions:
+       Peter Galbavy <peter@wonderland.org>
+       Jarkko Hietaniemi <jhi@alpha.hut.fi>
+       Andreas Koenig <koen1830@w203zrz.zrz.tu-berlin.de>
+        Raphael Manfredi <ram@acri.fr>
+       David Meyer <dmm0t@rincewind.mech.virginia.edu>
+       Jeff Okamoto <okamoto@hpcc101.corp.hp.com>
+       John Stoffel <john@WPI.EDU>
+       Larry Wall (lwall@netlabs.com>
+
+    Andy Dougherty             doughera@lafcol.lafayette.edu
+    Dept. of Physics           Phone: (610) 250-5212
+    Lafayette College          FAX:   (610) 250-9263
+    Easton, PA  18042-1782
+
+=================================================================
+
+From: doughera@lafcol.lafayette.edu (Andy Dougherty)
 Subject: First stab at Configure Support for perl5alpha
 Date: Mon Apr  4 15:13:50 EDT 1994
 
index 631a01b..fcf2259 100644 (file)
@@ -42,8 +42,11 @@ register int items;
     {
        SDBM_File       db;
 
-       if (SvROK(ST(1)))
-           db = (SDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (SvROK(ST(1))) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (SDBM_File) tmp;
+       }
        else
            croak("db is not a reference");
        sdbm_close(db);
@@ -65,8 +68,11 @@ register int items;
        datum   key;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "SDBM_File"))
-           db = (SDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "SDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (SDBM_File) tmp;
+       }
        else
            croak("db is not of type SDBM_File");
 
@@ -96,8 +102,11 @@ register int items;
        int     flags;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "SDBM_File"))
-           db = (SDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "SDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (SDBM_File) tmp;
+       }
        else
            croak("db is not of type SDBM_File");
 
@@ -134,8 +143,11 @@ register int items;
        datum   key;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "SDBM_File"))
-           db = (SDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "SDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (SDBM_File) tmp;
+       }
        else
            croak("db is not of type SDBM_File");
 
@@ -162,8 +174,11 @@ register int items;
        SDBM_File       db;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "SDBM_File"))
-           db = (SDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "SDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (SDBM_File) tmp;
+       }
        else
            croak("db is not of type SDBM_File");
 
@@ -188,8 +203,11 @@ register int items;
        datum   key;
        datum   RETVAL;
 
-       if (sv_isa(ST(1), "SDBM_File"))
-           db = (SDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "SDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (SDBM_File) tmp;
+       }
        else
            croak("db is not of type SDBM_File");
 
@@ -216,8 +234,11 @@ register int items;
        SDBM_File       db;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "SDBM_File"))
-           db = (SDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "SDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (SDBM_File) tmp;
+       }
        else
            croak("db is not of type SDBM_File");
 
@@ -241,8 +262,11 @@ register int items;
        SDBM_File       db;
        int     RETVAL;
 
-       if (sv_isa(ST(1), "SDBM_File"))
-           db = (SDBM_File)(unsigned long)SvNV((SV*)SvRV(ST(1)));
+       if (sv_isa(ST(1), "SDBM_File")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV(ST(1)));
+           db = (SDBM_File) tmp;
+       }
        else
            croak("db is not of type SDBM_File");
 
diff --git a/TCL b/TCL
deleted file mode 100644 (file)
index 5409bbf..0000000
--- a/TCL
+++ /dev/null
@@ -1,169 +0,0 @@
-Article 1475 of comp.lang.tcl:
-Path: netlabs!news!usc!cs.utexas.edu!sun-barr!ames!agate!sprite.Berkeley.EDU!ouster
-From: ouster@sprite.Berkeley.EDU (John Ousterhout)
-Newsgroups: comp.lang.tcl
-Subject: Planning for Tcl 7.0
-Message-ID: <1avu22INN5ao@agate.berkeley.edu>
-Date: 8 Oct 92 00:06:26 GMT
-Organization: U.C. Berkeley Sprite Project
-Lines: 156
-NNTP-Posting-Host: tyranny.berkeley.edu
-
-
-For the last year I've made only small changes to Tcl while focussing
-on the canvas and text widgets for Tk.  I'm now making plans to catch
-up on a bunch of much-needed bug fixes and enhancements to Tcl.  Some
-of the changes I'm considering are not backwards-compatible.  The
-purpose of this message is to let know know what changes I'm considering
-for Tcl 7.0 and to solicit feedback.  I'm particularly interested in
-comments on the changes that are incompatible:  I'll probably drop
-the changes for which I get lots of negative feedback and not much
-positive feedback.  If there are other changes that you think are
-important but aren't contained on this list, let me know and I may add
-them.
-
-Incompatible changes:
----------------------
-
-The changes listed below are likely to require changes to existing
-scripts and/or C code.  Each change includes an explanation of why the
-change might be useful.  I'd like to know whether or not you think the change
-is useful enough to justify the incompatibility.
-
-1. Eliminate the "|" option in the "open" command.  Instead, add a
-"popen" command that does the same thing. Rationale: in the current
-implementation you can't open a file whose name begins with "|".
-Also, I think the "popen" command would be more logical.
-
-2. Eliminate the Tcl_WaitPids procedure and use the waitpid POSIX call
-instead.  Also change the wait code to periodically poll for dead
-child processes so that zombie processes don't get left around forever.
-Rationale: the current code tends to leave zombies around in some
-situations.  Switching to waitpid should solve this problem in a
-relatively portable fashion.  The only incompatibility will be for
-C procedures that call Tcl_WaitPids;  they'll have to switch to call
-waitpid instead.  I'll provide a compatibility version of waitpid for
-use on systems that don't have it yet.
-
-3. Clean up backslash processing in several ways:
-    - Change backslash-newline to eat up all the whitespace following the
-      newline and replace the sequence with a single whitespace character.
-      Right now it only eats up the newline character and replaces it
-      with an empty string.  Rationale:  this would be more consistent
-      with other programs that process backslash-newline sequences.
-    - Eliminate the sequences \Mxx, \Cxxx, and \e.
-      Rationale: these sequences are left around from ancient times.
-      They're not particular compatible with any other program.  I
-      should have removed them in Tcl 6.0 but didn't.  They did get
-      removed from the documentation, however, so no-one should be
-      using them (?).
-    - Change \x (where x is not one of the characters that gets special
-      backslash treatment) to expand to x, not \x.
-      Rationale: the current behavior is inconsistent with all other
-      programs I know of that handle backslashes, and I think it's
-      confusing.
-    - Change "format" so it doesn't do an additional layer of backslash
-      processing on its format string.
-      Rationale:  I don't know why it currently behaves as it does, and
-      I think it's confusing.
-
-4. Change "regsub" so that when no match occurs it sets the result
-variable to the original string, rather than leaving it unmodified.
-Rationale:  the current behavior results in extra tests of the regsub
-result that could sometimes be avoided with the proposed new behavior.
-I doubt that there's much code that will break with the change (this
-would have to be code that depends on the result variable *not* being
-modified).
-
-5. Change the name "UNIX" in the "errorCode" variable to "POSIX".
-Rationale:  I suspect that I'm eventually going to get a call from the
-USL lawyers on this one if I don't change it.  Better to change it now
-in an orderly fashion so I don't have change it hastily in the future.
-
-6. Change glob to return only the names of existing files.
-Rationale:  at present "glob */foo" expands * and generates a result
-without checking to see if each directory has a "foo" file in it.  This
-makes the current behavior incompatible with csh, for example.  One
-question is whether constructs like "glob {a,b}.c" should also check for
-the existence of each of the files.  At present they don't (i.e. a.c and
-b.c will be returned even if they don't exist), but neither does csh.  My
-inclination is to make the behavior match csh (names containing *?[] are
-checked for existence, others aren't).  I'd be interested to hear
-opinions on this one:  check all names for existence, check only names
-including *?[] (for csh compatibility), or keep it as it is?
-
-7. Change "gets" so it returns 1 for success and 0 for failure.  At present
-it returns the line length for success and -1 for failure.
-Rationale: this would allow slightly simple Tcl scripts:  you could just
-say
-    while [gets $f line] {...}
-instead of
-    while {[gets $f line] >= 0} {...}
-I'm not really convinced that this one is important enough to justify the
-incompatibility, so it won't take much negative feedback to kill it.
-
-Other changes:
---------------
-
-The changes listed below shouldn't introduce substantial compatibility
-problems.  Of course, any change can potentially cause scripts to stop
-working (e.g. almost any change will break the test suite), but very
-few if any people should be affected by these changes.
-
-8. Implement Tcl_CreateExternVar() procedure along lines proposed by
-Andreas Stolcke to tie a C variable to a Tcl variable with automatic
-updates between them.
-
-9. Changes to exec:
-    - Allow redirection to an existing file descriptor in "exec",
-      with a mechanism like >&1 or >& stdout.
-    - Allow file names immediately after ">" and "<" without
-      intervening spaces.
-
-10. Changes related to files:
-    - Fix Scott Bolte bug (closing stdin and stdout).
-    - Move TclGetOpenFile and OpenFile stuff to tcl.h so that they're
-      accessible to applications.
-    - Extend access modes in open to include the complete set of POSIX
-      access modes (such as O_EXCL and O_NONBLOCK).
-
-11. Re-instate Tcl_WatchInterp to notify application when an interpreter
-is deleted.
-
-12. Add "elseif" mechanism to "if" command for chaining "else {if ..."
-constructs more cleanly.  Require exact matches on "then" and "else"
-keywords.
-
-13. Remove UNIX system call declarations from tclUnix.h.  Use them from
-unistd.h instead, and provide a default version of unistd.h for systems
-that don't have one.
-
-14. Changes in the expr command, mostly following suggestions made by
-George Howlett a long time ago:
-    - Increase precision of floating-point results.
-    - Make floating-point numbers always print with a point.
-    - Add transcendental functions like sin and exp.
-    - Add explicit integer and floating conversion operations.
-    - Don't promote large integers to floating-point automatically.
-    - Allow multiple arguments to expr command.
-
-15. Extend lsort to allow alternate sorting mechanisms, like numeric,
-or client-supplied.
-
-16. Allow alternate pattern-matching forms (e.g. exact or regexp) for
-lsearch and case.
-
-17. Add XPG/3 positional argument specifiers to format (code contributed
-by Mark Diekhans).
-
-18. Change "file readlink" to return an error on systems that don't
-support it rather than removing the option entirely.
-
-19. Add a mechanism for scheduling a Tcl command to be executed when the
-interpreter reaches a clean point.  This is needed for things like
-signal support.
-
-20. Change upvar so that you can refer to an element of an array as
-well as a whole array.
-
-
diff --git a/Todo b/Todo
index 16255ea..6e75f7e 100755 (executable)
--- a/Todo
+++ b/Todo
@@ -11,9 +11,8 @@ Tie Modules
 Bugs
        Make yyparse recursion longjmp() proof.
        Make "delete $array{$key} while ($key) = each %array" safe
-       Wrong line reported for runtime elsif condition error
-       TOOSTRICT is not too strict
-       recv and sysread should taint
+       <$handle> doesn't work intuitively if $handle is ARGV
+       Anything in the Bugs directory
 
 Regexp extensions
        /m  for multiline
@@ -27,6 +26,7 @@ Regexp extensions
 Would be nice to have
        Profiler
        pack "(stuff)*"
+       Contiguous bitfields in pack/unpack
        lexperl
        Bundled perl preprocessor
        Make $[ compile-time instead of run-time
@@ -42,11 +42,12 @@ Would be nice to have
        Multiple levels of warning
        .= shouldn't complain about undefined under -w
        report HANDLE [formats].
+       tie(FILEHANDLE, ...)
+       __DATA__
 
-Pragmas ("assume" maybe?)
-       integer, float
-       nodebug, debug
-       autocroak?
+Possible averments
+       debugger
+       optimize
 
 Optimizations
        Optimize switch statements
@@ -80,3 +81,4 @@ Vague possibilities
        compile to real threaded code
        structured types
        paren counting in tokener to queue remote expectations
+       autocroak?
index 3e10a38..ec14205 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: Extensions.U,v$
 ?RCS:
 ?RCS: You may redistribute only under the terms of the Artistic Licence,
 ?RCS:
 ?RCS: $Log: Extensions.U,v $
 ?RCS:
-?MAKE:extensions : find package 
+?MAKE:extensions : find Myread i_dbm i_ndbm i_gdbm i_sdbm
 ?MAKE: -pick add $@ %<
 ?S:extensions:
 ?S:    This variable holds a list of extension files we want to
 ?S:    include in perl.  
 ?S:.
+?T:xxx
 ?INIT:: List of extensions we want:
 ?INIT:extensions=''
 ?X: 
-echo " "
 case "$extensions" in
 ' '|'') echo "Looking for extensions..."
        case "$find" in
                *find*) 
                cd ..
-               dflt="`$find ext -type f -name \*.xs -print`"
+               extensions=`$find ext -type f -name \*.xs -print`
+               set X $extensions
+               shift
+               extensions="$*"
                cd UU
                ;;
-       *)      dflt='ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/GDBM_File.xs ext/dbm/SDBM_File.xs ext/posix/POSIX.xs'
+       *)      extensions='ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/GDBM_File.xs ext/dbm/SDBM_File.xs ext/posix/POSIX.xs'
                ;;
        esac
        ;;
-none)  dflt='' ;;
-*)     dflt="$extensions" ;;
+none)  extensions='' ;;
+*)     ;;
 esac
+: Now see which are supported on this system.
+dflt=""
+for xxx in $extensions ; do
+    case "$xxx" in
+    *ODBM*) case "$i_dbm" in 
+           define) dflt="$dflt $xxx" ;;
+           *) ;;
+           esac
+           ;;
+    *NDBM*) case "$i_ndbm" in 
+           define) dflt="$dflt $xxx" ;;
+           *) ;;
+           esac
+           ;;
+    *GDBM*) case "$i_gdbm" in 
+           define) dflt="$dflt $xxx" ;;
+           *) ;;
+           esac
+           ;;
+    *SDBM*) case "$i_sdbm" in 
+           define) dflt="$dflt $xxx" ;;
+           *) ;;
+           esac
+           ;;
+    *)      dflt="$dflt $xxx"
+           ;;
+    esac
+done
+
 rp="What extensions do you wish to include?"
 . ./myread
 extensions="$ans"
diff --git a/U/Guess.U b/U/Guess.U
new file mode 100644 (file)
index 0000000..c7566db
--- /dev/null
+++ b/U/Guess.U
@@ -0,0 +1,153 @@
+?RCS: $Id: Guess.U,v 3.0.1.3 1993/12/15 08:14:35 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: Guess.U,v $
+?RCS: Revision 3.0.1.3  1993/12/15  08:14:35  ram
+?RCS: patch15: variable d_bsd was not always set properly
+?RCS:
+?RCS: Revision 3.0.1.2  1993/08/30  08:57:14  ram
+?RCS: patch8: fixed comment which wrongly attributed the usrinc symbol
+?RCS: patch8: no more ugly messages when no /usr/include/ctype.h
+?RCS:
+?RCS: Revision 3.0.1.1  1993/08/27  14:37:37  ram
+?RCS: patch7: added support for OSF/1 machines
+?RCS:
+?RCS: Revision 3.0  1993/08/18  12:04:57  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X: 
+?X: This unit hazards some guesses as to what the general nature of the system
+?X: is.  The information it collects here is used primarily to establish default
+?X: answers to other questions.
+?X: 
+?MAKE:Guess d_eunice d_xenix: cat test echo n c contains rm Loc eunicefix
+?MAKE: -pick add $@ %<
+?S:d_eunice:
+?S:    This variable conditionally defines the symbols EUNICE and VAX, which
+?S:    alerts the C program that it must deal with ideosyncracies of VMS.
+?S:.
+?S:d_xenix:
+?S:    This variable conditionally defines the symbol XENIX, which alerts
+?S:    the C program that it runs under Xenix.
+?S:.
+?X:We don't use BSD in the source.  It's too vague, and often defined
+?X:in header files anyway (e.g. NetBSD).
+?X:?S:d_bsd:
+?X:?S: This symbol conditionally defines the symbol BSD when running on a
+?X:?S: BSD system.
+?X:?S:.
+?C:EUNICE:
+?C:    This symbol, if defined, indicates that the program is being compiled
+?C:    under the EUNICE package under VMS.  The program will need to handle
+?C:    things like files that don't go away the first time you unlink them,
+?C:    due to version numbering.  It will also need to compensate for lack
+?C:    of a respectable link() command.
+?C:.
+?C:VMS:
+?C:    This symbol, if defined, indicates that the program is running under
+?C:    VMS.  It is currently only set in conjunction with the EUNICE symbol.
+?C:.
+?C:XENIX:
+?C:    This symbol, if defined, indicates thet the program is running under
+?C:    Xenix (at least 3.0 ?).
+?C:.
+?X:We don't use BSD in the source.  It's too vague.
+?X:?C:BSD:
+?X:?C: This symbol, if defined, indicates that the program is running under
+?X:?C: a BSD system.
+?X:?C:.
+?H:#$d_eunice EUNICE           /**/
+?H:#$d_eunice VMS              /**/
+?H:#$d_xenix XENIX             /**/
+?X:?H:#$d_bsd BSD              /**/
+?H:.
+?T:xxx
+: make some quick guesses about what we are up against
+echo " "
+$echo $n "Hmm...  $c"
+echo exit 1 >bsd
+echo exit 1 >usg
+echo exit 1 >v7
+echo exit 1 >osf1
+echo exit 1 >eunice
+echo exit 1 >xenix
+echo exit 1 >venix
+?X:
+?X: Do not use 'usrinc', or we get a circular dependency. because
+?X: usrinc is defined in usrinc.U, which relies on us...
+?X:
+$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
+if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
+then
+       echo "Looks kind of like an OSF/1 system, but we'll see..."
+       echo exit 0 >osf1
+elif test `echo abc | tr a-z A-Z` = Abc ; then
+       xxx=`./loc addbib blurfl $pth`
+       if $test -f $xxx; then
+       echo "Looks kind of like a USG system with BSD features, but we'll see..."
+               echo exit 0 >bsd
+               echo exit 0 >usg
+       else
+               if $contains SIGTSTP foo >/dev/null 2>&1 ; then
+                       echo "Looks kind of like an extended USG system, but we'll see..."
+               else
+                       echo "Looks kind of like a USG system, but we'll see..."
+               fi
+               echo exit 0 >usg
+       fi
+elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
+       echo "Looks kind of like a BSD system, but we'll see..."
+       echo exit 0 >bsd
+else
+       echo "Looks kind of like a Version 7 system, but we'll see..."
+       echo exit 0 >v7
+fi
+case "$eunicefix" in
+*unixtovms*)
+       $cat <<'EOI'
+There is, however, a strange, musty smell in the air that reminds me of
+something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
+EOI
+       echo exit 0 >eunice
+       d_eunice="$define"
+: it so happens the Eunice I know will not run shell scripts in Unix format
+       ;;
+*)
+       echo " "
+       echo "Congratulations.  You aren't running Eunice."
+       d_eunice="$undef"
+       ;;
+esac
+if test -f /xenix; then
+       echo "Actually, this looks more like a XENIX system..."
+       echo exit 0 >xenix
+       d_xenix="$define"
+else
+       echo " "
+       echo "It's not Xenix..."
+       d_xenix="$undef"
+fi
+chmod +x xenix
+$eunicefix xenix
+if test -f /venix; then
+       echo "Actually, this looks more like a VENIX system..."
+       echo exit 0 >venix
+else
+       echo " "
+       if xenix; then
+               : null
+       else
+               echo "Nor is it Venix..."
+       fi
+fi
+chmod +x bsd usg v7 osf1 eunice xenix venix
+$eunicefix bsd usg v7 osf1 eunice xenix venix
+$rm -f foo
+
diff --git a/U/Loc.U b/U/Loc.U
index 79096ef..fcb7a64 100644 (file)
--- a/U/Loc.U
+++ b/U/Loc.U
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: Loc.U,v 3.0.1.3 1994/01/24 14:01:44 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -165,11 +156,12 @@ trylist="
 ?vi:vi
 ?zcat:zcat
 "
-?LINT:set Loc Mcc awk bash bison byacc cat chgrp chmod chown compress cp cpio cpp \
-       csh date echo egrep emacs expr flex gcc grep inews ksh less line lint ln \
-       lp lpr ls mail mailx make mkdir more mv nroff perl pg pmake pr rm rmail \
-       sed sendmail sh shar sleep smail sort submit tail tar tbl test touch tr \
-       troff uname uniq uuname vi zcat
+?LINT:set Loc Mcc awk bash bison byacc cat chgrp chmod chown compress cp \
+       cpio cpp csh date echo egrep emacs expr find flex gcc grep inews \
+       ksh less line lint ln lp lpr ls mail mailx make mkdir more mv \
+       nroff perl pg pmake pr rm rmail sed sendmail sh shar sleep \
+       smail sort submit tail tar tbl test touch tr troff uname uniq \
+       uuname vi zcat
 pth=`echo $PATH | sed -e 's/:/ /g'`
 pth="$pth /lib /usr/lib"
 for file in $loclist; do
index 18c2a81..2b6d3a0 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: Oldconfig.U,v 3.0.1.2 1994/01/24 14:05:02 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -34,8 +25,8 @@
 ?X: This unit tries to remember what we did last time we ran Configure, mostly
 ?X: for the sake of setting defaults.
 ?X: 
-?MAKE:Oldconfig hint myuname: Instruct Myread uname sed test cat rm n c \
-       contains Loc Options
+?MAKE:Oldconfig hint myuname osname osvers: Instruct Myread uname \
+       sed test cat rm n c contains Loc Options
 ?MAKE: -pick wipe $@ %<
 ?S:myuname:
 ?S:    The output of 'uname -a' if available, otherwise the hostname. On Xenix,
 ?S:    Gives the type of hints used for previous answers. May be one of
 ?S:    "default", "recommended" or "previous".
 ?S:.
-?T:tmp file oldmyuname tans _
+?S:osname:
+?S:    This variable contains the operating system name (e.g. sunos, 
+?S:    solaris, hpux, etc.).  It can be useful later on for setting
+?S:    defaults. It is set to '' if we can't figure it out.
+?S:.
+?S:osvers:
+?S:    This variable contains the operating system version (e.g.
+?S:    4.1.3, 5.2, etc.).  It is primarily used for helping select
+?S:    an appropriate hints file, but might be useful elsewhere for
+?S:    setting defaults.  It is set to '' if we can't figure it out.
+?S:.
+?T:tmp file oldmyuname hintfile tans _
 ?LINT:change n c
 : Try to determine whether config.sh was made on this system
 case "$config_sh" in
@@ -112,13 +114,13 @@ EOM
        : Half the following guesses are probably wrong... If you have better
        : tests or hints, please send them to <MAINTLOC>
        : The metaconfig authors would also appreciate a copy...
-       $test -f /irix && dflt="$dflt sgi"
-       $test -f /xenix && dflt="$dflt sco_xenix"
-       $test -f /dynix && dflt="$dflt dynix"
-       $test -f /dnix && dflt="$dflt dnix"
-       $test -f /bin/mips && /bin/mips && dflt="$dflt mips"
-       $test -d /NextApps && test -f /usr/adm/software_version && dflt="$dflt next"
-       $test -d /usr/include/minix && dflt="$dflt minix"
+       $test -f /irix && osname=sgi
+       $test -f /xenix && osname=sco_xenix
+       $test -f /dynix && osname=dynix
+       $test -f /dnix && osname=dnix
+       $test -f /bin/mips && /bin/mips && osname=mips
+       $test -d /NextApps && test -f /usr/adm/software_version && osname=next
+       $test -d /usr/include/minix && osname=minix
 ?X: If we have uname, we already computed a suitable uname -a output, correctly
 ?X: formatted for Xenix, and it lies in $myuname.
        if $test -f $uname; then
@@ -128,63 +130,80 @@ EOM
                $test -f $5.sh && dflt="$dflt $5"
 
                case "$5" in
-               fps*) dflt="$dflt fps";;
+               fps*) osname=fps ;;
                mips*)
                        case "$4" in
-                       umips) dflt="$dflt umips";;
-                       *) dflt="$dflt mips";;
+                       umips) osname=umips ;;
+                       *) osname=mips ;;
                        esac;;
-               [23]100) dflt="$dflt mips";;
-               next*) dflt="$dflt next" ;;
-               news*) dflt="$dflt news" ;;
+               [23]100) osname=mips ;;
+               next*) osname=next ;;
+               news*) osname=news ;;
                i386*) if $test -f /etc/kconfig; then
+                           osname=isc
                                if $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
-                                       dflt="$dflt isc_3_2_3"
+                                       osvers=3.2.3
                                elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
-                                       dflt="$dflt isc_3_2_2"
+                                       osvers=3.2.2
                            fi
-                               : i386.sh hint is wrong for Interactive.
-                               dflt=`echo $dflt | $sed 's/i386//'`
                       fi
                       ;;
                esac
 
                case "$1" in
-               aix) dflt="$dflt aix_rs" ;;
-               sun[Oo][Ss]) case "$3" in
-                       [34]*) vers=`echo $3 | $sed 's/\./_/g'`
-                               dflt="$dflt sunos_$vers" ;;
-                       5*) vers=`echo $3 | $sed 's/^5/2/g'`
-                               dflt="$dflt solaris_$vers" ;;
+               aix) osname=aix_rs ;;
+               sunos) osname=sunos
+                       case "$3" in
+                       [34]*) osvers=$3 ;;
+                       5*) osname=solaris
+                               osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+                       esac
+                       ;;
+               solaris) osname=solaris
+                       case "$3" in
+                       5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
                        esac
                        ;;
-               [sS]olaris) case "$3" in
-                       5*) vers=`echo $3 | $sed 's/^5/2/g'`
-                               dflt="$dflt solaris_$vers" ;;
+               dnix) osname=dnix ;;
+               dgux) osname=dgux ;;
+               genix) osname=genix ;;
+               hp*ux) osname=hpux ;;
+               next) osname=next ;;
+               irix) osname=sgi ;;
+               ultrix) osname=ultrix
+                       case "$3" in
+                       1*) osvers=1 ;;
+                       2*) osvers=2 ;;
+                       3*) osvers=3 ;;
+                       4*) osvers=4 ;;
                        esac
                        ;;
-               dnix) dflt="$dflt dnix" ;;
-               dgux) dflt="$dflt dgux" ;;
-               genix) dflt="$dflt genix" ;;
-               hp*ux) dflt="$dflt hpux" ;;
-               next) dflt="$dflt next" ;;
-               irix) dflt="$dflt sgi" ;;
-               ultrix) case "$3" in
-                       3*) dflt="$dflt ultrix_3" ;;
-                       4*) dflt="$dflt ultrix_4" ;;
+               osf1)   case "$5" in
+                               alpha)  osname=dec_osf
+                                       case "$3" in
+                       [vt]1\.*) osvers=1 ;;
+                        [vt]2\.*) osvers=2 ;;
+                        [vt]3\.*) osvers=3 ;;
+                                       esac
+                    ;;
+                       hp*)    osname=hp_osf1  ;;      # TR
+                       mips)   osname=mips_osf1 ;;     # TR
+                       # TR =  Technology Releases: (un^N)supported
                        esac
                        ;;
-               uts) dflt="$dflt uts" ;;
-               $2) case "$dflt" in
+               uts) osname=uts ;;
+               $2) case "$osname" in
                        *isc*) ;;
                        *)      if test -f /etc/systemid; then
+                               osname=sco
+                               : Does anyone know if these next gyrations are needed
                                set `echo $3 | $sed 's/\./ /g'` $4
                                        if $test -f sco_$1_$2_$3.sh; then
-                                               dflt="$dflt sco_$1_$2_$3"
+                                               osvers=$1.$2.$3
                                        elif $test -f sco_$1_$2.sh; then
-                                               dflt="$dflt sco_$1_$2"
+                                               osvers=$1.$2
                                        elif $test -f sco_$1.sh; then
-                                               dflt="$dflt sco_$1"
+                                               osvers=$1
                                        fi
                                fi
                                ;;
@@ -196,25 +215,31 @@ EOM
                if test -f /vmunix -a -f news_os.sh; then
                        (what /vmunix | tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
                        if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
-                               dflt="$dflt news_os"
+                               osname=news_os
                        fi
                        $rm -f ../UU/kernel.what
                fi
        fi
-       set X `echo $dflt | tr ' ' '\012' | sort | uniq`
-       shift
-       dflt=''
-       for file in $*; do
-               if $test -f "$file.sh"; then
-                       dflt="$dflt $file"
-               fi
-       done
-       set X $dflt
-       shift
-       dflt=${1+"$@"}
-       case "$dflt" in
-       '') dflt=none;;
+       
+       : Now look for a hint file osname_osvers
+       file=`echo "${osname}_${osvers}" | sed -e 's@\.@_@g' -e 's@_$@@'`
+       case "$file" in
+       '') dflt=none ;;
+       *)  case "$osvers" in
+               '') dflt=$file 
+                       ;;
+               *)  if $test -f $file.sh ; then
+                               dflt=$file
+                       elif $test -f "${osname}.sh" ; then
+                               dflt="${osname}"
+                       else
+                               dflt=none
+                       fi
+                       ;;
+               esac
+               ;;
        esac
+                       
        $cat <<EOM
 
 You may give one or more space-separated answers, or "none" if appropriate.
@@ -223,17 +248,40 @@ If your OS version has no hints, DO NOT give a wrong version -- say "none".
 EOM
        rp="Which of these apply, if any?"
        . ../UU/myread
-       for file in $ans; do
+       tans=$ans
+       for file in $tans; do
                if $test -f $file.sh; then
                        . ./$file.sh
                        $cat $file.sh >> ../UU/config.sh
-               elif $test X$ans = X -o X$ans = Xnone ; then
+               elif $test X$tans = X -o X$tans = Xnone ; then
                        : nothing
                else
-                       echo "$file.sh does not exist -- ignored"
+                       : Give one chance to correct a possible typo.
+                       echo "$file.sh does not exist"
+                       dflt=$file
+                       rp="hint to use instead?"
+                       . ../UU/myread
+                       for file in $ans; do
+                               if $test -f "$file.sh"; then
+                                       . ./$file.sh
+                                       $cat $file.sh >> ../UU/config.sh
+                               elif $test X$ans = X -o X$ans = Xnone ; then
+                                       : nothing
+                               else
+                                       echo "$file.sh does not exist -- ignored."
+                               fi
+                       done
                fi
        done
+
        hint=recommended
+       : Remember our hint file for later.
+       if $test -f "$file.sh" ; then
+               hintfile="$file.sh"
+       else
+               hintfile=none
+       fi
+
        cd ..
 fi
 cd UU
@@ -282,3 +330,40 @@ for file in $loclist $trylist; do
        eval $file="\$_$file"
 done
 
+cat << EOM
+Configure uses the operating system name and version to set some defaults.
+Say "none" to leave it blank.
+EOM
+
+case "$osname" in
+       ''|' ')  
+               case "$hintfile" in
+               none) dflt=none ;;
+               *)  dflt=`echo $hintfile | sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
+               esac
+               ;;
+       *) dflt="$osname" ;;
+esac
+rp="Operating system name?"
+. ./myread
+case "$ans" in
+    none)  osname='' ;;
+    *) osname="$ans" ;;
+esac
+
+case "$osvers" in
+       ''|' ')  
+               case "$hintfile" in
+               none) dflt=none ;;
+               *)      dflt=`echo $hintfile | sed -e 's/\.sh$//' -e 's/^[^_]*//'`
+               dflt=`echo $dflt | sed -e 's/^_//' -e 's/_/./g'` ;;
+               esac
+               ;;
+       *) dflt="$osvers" ;;
+esac
+rp="Operating system version?"
+. ./myread
+case "$ans" in
+    none)  osvers='' ;;
+    *) osvers="$ans" ;;
+esac
diff --git a/U/alignbytes.U b/U/alignbytes.U
new file mode 100644 (file)
index 0000000..3852646
--- /dev/null
@@ -0,0 +1,57 @@
+?RCS: $Id: alignbytes.U,v 3.0 1993/08/18 12:05:23 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: alignbytes.U,v $
+?RCS: Revision 3.0  1993/08/18  12:05:23  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:memalignbytes: Myread cat cc ccflags rm
+?MAKE: -pick add $@ %<
+?S:memalignbytes:
+?S:    This variable holds the number of bytes required to align a
+?S:    double. Usual values are 2, 4 and 8.
+?S:.
+?X: This used to be called ALIGNBYTES, but that conflicts with
+?X: <machines/param.h> in NetBSD.
+?C:MEM_ALIGNBYTES (ALIGNBYTES):
+?C:    This symbol contains the number of bytes required to align a
+?C:    double. Usual values are 2, 4 and 8.
+?C:.
+?H:#define MEM_ALIGNBYTES $memalignbytes       /**/
+?H:.
+: check for alignment requirements
+echo " "
+case "$memalignbytes" in
+'') echo "Checking alignment constraints..." >&4
+       $cat >try.c <<'EOCP'
+struct foobar {
+       char foo;
+       double bar;
+} try;
+main()
+{
+       printf("%d\n", (char *)&try.bar - (char *)&try.foo);
+}
+EOCP
+       if $cc $ccflags try.c -o try >/dev/null 2>&1; then
+               dflt=`./try`
+       else
+               dflt='8'
+               echo"(I can't seem to compile the test program...)"
+       fi
+       ;;
+*) dflt="$memalignbytes"
+       ;;
+esac
+rp="Doubles must be aligned on a how-many-byte boundary?"
+. ./myread
+memalignbytes="$ans"
+$rm -f try.c try
+
diff --git a/U/cc.U b/U/cc.U
index 63a621b..0495017 100644 (file)
--- a/U/cc.U
+++ b/U/cc.U
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: cc.U,v 3.0 1993/08/18 12:05:30 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -21,7 +12,7 @@
 ?RCS: Revision 3.0  1993/08/18  12:05:30  ram
 ?RCS: Baseline for dist 3.0 netwide release.
 ?RCS:
-?MAKE:gccversion cc: cat contains sysman +large cpp \
+?MAKE:gccversion cc: cat contains sysman +large cpp rm test \
        Mcc Myread Guess Oldconfig Loc
 ?MAKE: -pick add $@ %<
 ?S:cc:
@@ -33,6 +24,7 @@
 ?S:    If GNU cc (gcc) is used, this variable holds '1' or '2' to 
 ?S:    indicate whether the compiler is version 1 or 2.  This is used in
 ?S:    setting some of the default cflags.
+?S:.
 ?D:cc='cc'
 ?INIT:gccversion=''
 ?LINT:change cpp
@@ -105,7 +97,7 @@ return 1;
 #endif
 }
 EOM
-       if $cc -o gccvers $ccflags gccvers.c >/dev/null 2>&1; then
+       if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
            gccversion=`./gccvers`
                echo "You appear to have version $gccversion."
        else
index e9e3304..1b9bf39 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: ccflags.U,v 3.0.1.3 1993/09/13 15:58:29 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -83,12 +74,12 @@ case "$optimize" in
 'none') optimize=" ";;
 esac
 
+dflt=''
 case "$ccflags" in
 '')    case "$cc" in
        *gcc*) if $test "$gccversion" = "1"; then
                        dflt='-fpcc-struct-return'
                   fi ;;
-       *) dflt='';;
        esac
        case "$optimize" in
        *-g*) dflt="$dflt -DDEBUGGING";;
@@ -103,7 +94,6 @@ case "$ccflags" in
                ;;
        esac
        ;;
-*) dflt="$ccflags" ;;
 esac
 
 ?X: In USG mode, a MIPS system may need some BSD includes
@@ -153,6 +143,10 @@ set signal.h _NO_PROTO; eval $inctest
 case "$dflt" in
 '') dflt=none;;
 esac
+case "$ccflags" in
+'') ;;
+*) dflt="$ccflags";;
+esac
 $cat <<EOH
 
 Your C compiler may want other flags.  For this question you should include
@@ -161,8 +155,8 @@ but you should NOT include libraries or ld flags like -lwhatever.  If you
 want $package to honor its debug switch, you should include -DDEBUGGING here.
 To use no flags, specify the word "none".
 
-Your C compiler might also need additional flags, such as -DJMPCLOBBER
-or -DCRIPPLED_CC.
+Your C compiler might also need additional flags, such as -DJMPCLOBBER,
+-DHIDEMYMALLOC or -DCRIPPLED_CC.
 EOH
 ?X: strip leading space
 set X $dflt
@@ -178,9 +172,10 @@ esac
 : the following weeds options from ccflags that are of no interest to cpp
 cppflags="$ccflags"
 case "$cc" in
-*gcc*) if $test "$gccversion" = "1"; then
-               cppflags="$cppflags -D__GNUC__"
-           fi ;;
+*gcc*)  case "$gccversion" in
+       1) cppflags="$cppflags -D__GNUC__" ;;
+       esac
+       ;;
 esac
 case "$mips_type" in
 '');;
@@ -193,7 +188,7 @@ case "$cppflags" in
        for flag
        do
                case $flag in
-               -D*|-I*|-traditional|-ansi|-nostdinc) cppflags="$cppflags $flag";;
+               -D*|-I*|-traditional|-ansi|-nostdinc|-posix|-Xp) cppflags="$cppflags $flag";;
                esac
        done
        case "$cppflags" in
index efcfd07..f33b5f8 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: d_casti32.U,v 3.0 1993/08/18 12:05:47 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -24,7 +15,7 @@
 ?X:
 ?X:    Can the compiler cast large floats to 32-bit integers?
 ?X:
-?MAKE:d_casti32: cat cc ccflags rm intsize Setvar
+?MAKE:d_casti32: cat cc ccflags rm intsize Setvar test
 ?MAKE: -pick add $@ %<
 ?S:d_casti32:
 ?S:    This variable conditionally defines CASTI32, which indicates
@@ -41,7 +32,7 @@
 : check for ability to cast large floats to 32-bit ints.
 echo " "
 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
-if $test "$intsize" -ge 4; then
+if $test "$intsize" -eq 4; then
     xxx=int
 else
     xxx=long
@@ -83,4 +74,4 @@ case "$yyy" in
 esac
 set d_casti32
 eval $setvar
-$rm -f try.*
+$rm -f try try.*
diff --git a/U/d_htonl.U b/U/d_htonl.U
new file mode 100644 (file)
index 0000000..0cb1647
--- /dev/null
@@ -0,0 +1,76 @@
+?RCS: $Id: d_htonl.U,v 3.0 1993/08/18 12:06:22 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: d_htonl.U,v $
+?RCS: Revision 3.0  1993/08/18  12:06:22  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_htonl: cc ccflags Inlibc i_niin i_sysin rm
+?MAKE: -pick add $@ %<
+?S:d_htonl:
+?S:    This variable conditionally defines HAS_HTONL if htonl() and its
+?S:    friends are available to do network order byte swapping.
+?S:.
+?C:HAS_HTONL (HTONL):
+?C:    This symbol, if defined, indicates that the htonl() routine (and
+?C:    friends htons() ntohl() ntohs()) are available to do network
+?C:    order byte swapping.
+?C:.
+?C:HAS_HTONS (HTONS):
+?C:    This symbol, if defined, indicates that the htons() routine (and
+?C:    friends htonl() ntohl() ntohs()) are available to do network
+?C:    order byte swapping.
+?C:.
+?C:HAS_NTOHL (NTOHL):
+?C:    This symbol, if defined, indicates that the ntohl() routine (and
+?C:    friends htonl() htons() ntohs()) are available to do network
+?C:    order byte swapping.
+?C:.
+?C:HAS_NTOHS (NTOHS):
+?C:    This symbol, if defined, indicates that the ntohs() routine (and
+?C:    friends htonl() htons() ntohl()) are available to do network
+?C:    order byte swapping.
+?C:.
+?H:#$d_htonl HAS_HTONL         /**/
+?H:#$d_htonl HAS_HTONS         /**/
+?H:#$d_htonl HAS_NTOHL         /**/
+?H:#$d_htonl HAS_NTOHS         /**/
+?H:.
+?LINT:set d_htonl
+: see if htonl --and friends-- exists
+set htonl d_htonl
+eval $inlibc
+: Maybe they are macros.
+case "$d_htonl" in
+'define') ;;
+*) cat > try.c <<EOM
+#include <stdio.h>
+#include <sys/types.h>
+#$i_niin I_NETINET_IN
+#$i_sysin I_SYS_IN
+#ifdef I_NETINET_IN
+# include <netinet/in.h>
+#endif
+#ifdef I_SYS_IN
+# include <sys/in.h>
+#endif
+int main()
+{
+  int x;
+  printf("x = ", htonl(7));
+}
+EOM
+    if $cc $ccflags -c try.c >/dev/null 2>&1; then
+        d_htonl="$define"
+       echo "But it seems to be defined as a macro."
+    fi
+    $rm -f try.* try
+    ;;
+esac
index 6a461c3..70fba19 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: d_isascii.U,v 3.0 1993/08/18 12:06:44 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -21,7 +12,7 @@
 ?RCS: Revision 3.0  1993/08/18  12:06:44  ram
 ?RCS: Baseline for dist 3.0 netwide release.
 ?RCS:
-?MAKE:d_isascii: test cc cat cppflags libs rm Setvar Findhdr
+?MAKE:d_isascii: cc cat cppflags rm Setvar Findhdr
 ?MAKE: -pick add $@ %<
 ?S:d_isascii:
 ?S:    This variable conditionally defines the HAS_ISASCII manifest constant,
diff --git a/U/d_readdir.U b/U/d_readdir.U
new file mode 100644 (file)
index 0000000..e9364b4
--- /dev/null
@@ -0,0 +1,70 @@
+?RCS: $Id: d_readdir.U,v 3.0 1993/08/18 12:06:52 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: d_readdir.U,v $
+?RCS: Revision 3.0  1993/08/18  12:06:52  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:    Force checking for <dirent.h> inclusion
+?X:INC: i_dirent
+?MAKE:d_readdir d_seekdir d_telldir d_rewinddir: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_readdir:
+?S:    This variable conditionally defines HAS_READDIR if readdir() is
+?S:    available to read directory entries.
+?S:.
+?C:HAS_READDIR (READDIR):
+?C:    This symbol, if defined, indicates that the readdir routine is
+?C:    available to read directory entries. You may have to include
+?C:    <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_readdir HAS_READDIR             /**/
+?H:.
+?S:d_seekdir:
+?S:    This variable conditionally defines HAS_SEEKDIR if seekdir() is
+?S:    available.
+?S:.
+?C:HAS_SEEKDIR:
+?C:    This symbol, if defined, indicates that the seekdir routine is
+?C:    available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_seekdir HAS_SEEKDIR             /**/
+?H:.
+?S:d_telldir:
+?S:    This variable conditionally defines HAS_TELLDIR if telldir() is
+?S:    available.
+?S:.
+?C:HAS_TELLDIR:
+?C:    This symbol, if defined, indicates that the telldir routine is
+?C:    available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_telldir HAS_TELLDIR             /**/
+?H:.
+?S:d_rewinddir:
+?S:    This variable conditionally defines HAS_REWINDDIR if rewinddir() is
+?S:    available.
+?S:.
+?C:HAS_REWINDDIR:
+?C:    This symbol, if defined, indicates that the rewinddir routine is
+?C:    available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_rewinddir HAS_REWINDDIR         /**/
+?H:.
+?LINT:set d_readdir d_seekdir d_telldir d_rewinddir
+: see if readdir and friends exist
+set readdir d_readdir
+eval $inlibc
+set seekdir d_seekdir
+eval $inlibc
+set telldir d_telldir
+eval $inlibc
+set rewinddir d_rewinddir
+eval $inlibc
+
diff --git a/U/d_safebcpy.U b/U/d_safebcpy.U
new file mode 100644 (file)
index 0000000..b7373a0
--- /dev/null
@@ -0,0 +1,81 @@
+?RCS: $Id: d_safebcpy.U,v 3.0 1993/08/18 12:06:58 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: d_safebcpy.U,v $
+?RCS: 
+?RCS: Copy "abcde..." string to char abc[] so that gcc doesn't 
+?RCS: try to store the string in read-only memory.
+?RCS: 
+?RCS: Revision 3.0  1993/08/18  12:06:58  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_safebcpy: cat d_bcopy +cc +ccflags +libs rm Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_safebcpy:
+?S:    This variable conditionally defines the HAS_SAFE_BCOPY symbol if
+?S:    the bcopy() routine can do overlapping copies.
+?S:.
+?C:HAS_SAFE_BCOPY (SAFE_BCOPY):
+?C:    This symbol, if defined, indicates that the bcopy routine is available
+?C:    to copy potentially overlapping memory blocks. Otherwise you should
+?C:    probably use memmove() or memcpy(). If neither is defined, roll your
+?C:    own version.
+?C:.
+?H:#$d_safebcpy HAS_SAFE_BCOPY /**/
+?H:.
+?LINT: set d_safebcpy
+: can bcopy handle overlapping blocks?
+?X: assume the worst
+val="$undef"
+case "$d_bcopy" in
+"$define")
+       echo " "
+       echo "Checking to see if your bcopy() can do overlapping copies..." >&4
+       $cat >foo.c <<'EOCP'
+main()
+{
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
+
+for (align = 7; align >= 0; align--) {
+       for (len = 36; len; len--) {
+               b = buf+align;
+               bcopy(abc, b, len);
+               for (off = 1; off <= len; off++) {
+                       bcopy(b, b+off, len);
+                       bcopy(b+off, b, len);
+                       if (bcmp(b, abc, len))
+                               exit(1);
+               }
+       }
+}
+exit(0);
+}
+EOCP
+       if $cc foo.c -o safebcpy $ccflags $libs >/dev/null 2>&1 ; then
+               if ./safebcpy 2>/dev/null; then
+                       echo "Yes, it can."
+                       val="$define"
+               else
+                       echo "It can't, sorry."
+               fi
+       else
+               echo "(I can't compile the test program, so we'll assume not...)"
+       fi
+       ;;
+esac
+$rm -f foo.* safebcpy core
+set d_safebcpy
+eval $setvar
+
diff --git a/U/d_safemcpy.U b/U/d_safemcpy.U
new file mode 100644 (file)
index 0000000..2f32680
--- /dev/null
@@ -0,0 +1,82 @@
+?RCS: $Id: d_safemcpy.U,v 3.0 1993/08/18 12:06:58 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: d_safemcpy.U,v $
+?RCS: 
+?RCS: Copy "abcde..." string to char abc[] so that
+?RCS: gcc doesn't try to store the string in read-only memory.
+?RCS: 
+?RCS: Revision 3.0  1993/08/18  12:06:58  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_safemcpy: cat d_memcpy +cc +ccflags +libs rm Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_safemcpy:
+?S:    This variable conditionally defines the HAS_SAFE_MEMCPY symbol if
+?S:    the memcpy() routine can do overlapping copies.
+?S:.
+?C:HAS_SAFE_MEMCPY (SAFE_MEMCPY):
+?C:    This symbol, if defined, indicates that the memcpy routine is available
+?C:    to copy potentially overlapping memory blocks. Otherwise you should
+?C:    probably use memmove() or memcpy(). If neither is defined, roll your
+?C:    own version.
+?C:.
+?H:#$d_safemcpy HAS_SAFE_MEMCPY        /**/
+?H:.
+?LINT: set d_safemcpy
+: can memcpy handle overlapping blocks?
+?X: assume the worst
+val="$undef"
+case "$d_memcpy" in
+"$define")
+       echo " "
+       echo "Checking to see if your memcpy() can do overlapping copies..." >&4
+       $cat >foo.c <<'EOCP'
+main()
+{
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+
+memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
+
+for (align = 7; align >= 0; align--) {
+       for (len = 36; len; len--) {
+               b = buf+align;
+               memcpy(abc, b, len);
+               for (off = 1; off <= len; off++) {
+                       memcpy(b, b+off, len);
+                       memcpy(b+off, b, len);
+                       if (memcmp(b, abc, len))
+                               exit(1);
+               }
+       }
+}
+exit(0);
+}
+EOCP
+       if $cc foo.c -o safemcpy $ccflags $libs >/dev/null 2>&1 ; then
+               if ./safemcpy 2>/dev/null; then
+                       echo "Yes, it can."
+                       val="$define"
+               else
+                       echo "It can't, sorry."
+               fi
+       else
+               echo "(I can't compile the test program, so we'll assume not...)"
+       fi
+       ;;
+esac
+$rm -f foo.* safemcpy core
+set d_safemcpy
+eval $setvar
+
index 81b2d61..14ce638 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: d_setlocale.U,v 3.0 1993/08/18 12:07:36 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
diff --git a/U/d_shmat.U b/U/d_shmat.U
new file mode 100644 (file)
index 0000000..e3f8097
--- /dev/null
@@ -0,0 +1,54 @@
+?RCS: $Id: d_shmat.U,v 3.0 1993/08/18 12:07:18 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: d_shmat.U,v $
+?RCS: Revision 3.0  1993/08/18  12:07:18  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmat d_voidshmat: Inlibc cppstdin cppflags cppminus usrinc \
+       contains
+?MAKE: -pick add $@ %<
+?S:d_shmat:
+?S:    This variable conditionally defines the HAS_SHMAT symbol, which
+?S:    indicates to the C program that the shmat() routine is available.
+?S:.
+?S:d_voidshmat:
+?S:    This symbol, if defined, indicates that the shmat() routine
+?S:    returns a pointer of type void*.  Otherwise, char* is assumed.
+?S:.
+?C:HAS_SHMAT:
+?C:    This symbol, if defined, indicates that the shmat() routine is
+?C:    available to attach a shared memory segment to the process space.
+?C:.
+?H:#$d_shmat HAS_SHMAT         /**/
+?H:.
+?C:VOIDSHMAT:
+?C:    This symbol, if defined, indicates that the shmat() routine
+?C:    returns a pointer of type void*.  Otherwise, char* is assumed.
+?C:.
+?H:#$d_voidshmat       VOIDSHMAT               /**/
+?H:.
+?LINT:set d_shmat d_voidshmat
+: see if shmat exists
+set shmat d_shmat
+eval $inlibc
+: see what shmat returns
+d_voidshmat="$undef"
+case "$d_shmat" in
+define)
+    $cppstdin $cppflags $cppminus < $usrinc/sys/shm.h >voidshmat.txt 2>/dev/null
+    if $contains "void.*shmat" voidshmat.txt >/dev/null 2>&1; then
+       echo "and shmat returns (void*)"
+       d_voidshmat="$define"
+    else
+       echo "and shmat returns (char*)"
+    fi
+    ;;
+esac
index 4a4a618..252d9df 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: d_strerror.U,v 3.0.1.1 1994/01/24 14:08:56 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
diff --git a/U/d_vfork.U b/U/d_vfork.U
new file mode 100644 (file)
index 0000000..fb67434
--- /dev/null
@@ -0,0 +1,56 @@
+?RCS: $Id: d_vfork.U,v 3.0.1.2 1993/10/16 13:49:39 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: d_vfork.U,v $
+?RCS: Revision 3.0.1.2  1993/10/16  13:49:39  ram
+?RCS: patch12: added magic for vfork()
+?RCS:
+?RCS: Revision 3.0.1.1  1993/09/13  16:06:57  ram
+?RCS: patch10: removed automatic remapping of vfork on fork (WAD)
+?RCS: patch10: added compatibility code for older config.sh (WAD)
+?RCS:
+?RCS: Revision 3.0  1993/08/18  12:07:55  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_vfork: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_vfork:
+?S:    This variable conditionally defines the HAS_VFORK symbol, which
+?S:    indicates the vfork() routine is available.
+?S:.
+?C:HAS_VFORK (VFORK):
+?C:    This symbol, if defined, indicates that vfork() exists.
+?C:.
+?H:#$d_vfork HAS_VFORK /**/
+?H:.
+?M:vfork: HAS_VFORK
+?M:#ifndef HAS_VFORK
+?M:#define vfork fork
+?M:#endif
+?M:.
+?LINT:set d_vfork
+: see if there is a vfork
+set vfork d_vfork
+eval $inlibc
+: But do we want to use it.  vfork is reportedly unreliable in 
+: perl in Solaris 2.x, and probably elsewhere.
+case "$d_vfork" in
+define)
+    dflt='n'
+    rp="Some systems have problems with vork.  Do you want to use it?"
+    . ./myread
+    case "$ans" in
+    y|Y) ;;
+    *) echo "Ok, we won't use vfork."
+       d_vfork="$undef"
+       ;;
+    esac
+    ;;
+esac
index e67e1fd..616818d 100644 (file)
--- a/U/dlsrc.U
+++ b/U/dlsrc.U
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: dlsrc.U,v$
 ?RCS:
 ?RCS: You may redistribute only under the terms of the Artistic Licence,
 ?RCS:
 ?RCS: $Log: dlsrc.U,v $
 ?RCS:
-?MAKE:dlsrc dlobj usedl: Myread Oldconfig package \
-       Guess test rm cat i_dlfcn cc ccflags Findhdr
+?X:  hpux support thanks to Jeff Okamoto <okamoto@hpcc101.corp.hp.com>
+?X: 
+?X:  To create a shared library, you must compile ALL source files in the
+?X:  library with +z (or possibly +Z if the library is whopping huge),
+?X:  then link the library with -b.  Example:
+?X:      cc -c +z module_a.c
+?X:      cc -c +z module_b.c
+?X:      ld -b module_a.o module_b.o -o module.sl
+?X:  
+?MAKE:usedl dlsrc dlobj dldir cccdlflags lddlflags ccdlflags \
+       shlibsuffix: Getfile Myread test osname sed i_dlfcn Findhdr cc
 ?MAKE: -pick add $@ %<
 ?S:usedl:
 ?S:    This variable contains indicates if the the system supports dynamic
 ?S:    loading of some sort.  See also dlsrc and dlobj.
 ?S:.
 ?S:dlsrc:
-?S:    This variable contains the name of the dynamic loading file that 
+?S:    This variable contains the name of the dynamic loading file that
 ?S:    will be used with the package.
 ?S:.
 ?S:dlobj:
 ?S:    This variable contains the name of the dynamic loading object
-?S:    file that will be used with the package.
+?S:    file that will be used with the package.  This is used in Makefile.
+?S:.
+?S:dldir:
+?S:    This variable contains the directory from which to fetch dlsrc.
+?S:    It is up to the makefile to use it.
+?S:.
+?S:cccdlflags:
+?S:    This variable contains any special flags that might need to be
+?S:    passed with cc -c to compile modules to be used to create a shared
+?S:    library that will be used for dynamic loading.  For hpux, this 
+?S:    should be +z.  It is up to the makefile to use it.
+?S:.
+?S:lddlflags:
+?S:    This variable contains any special flags that might need to be
+?S:    passed to ld to create a shared library suitable for dynamic
+?S:    loading.  It is up to the makefile to use it.  For hpux, it
+?S:    should be -b.  For sunos 4.1, it is empty.
+?S:.
+?S:ccdlflags:
+?S:    This variable contains any special flags that might need to be
+?S:    passed to cc to link with a shared library for dynamic loading. 
+?S:    It is up to the makefile to use it.  For sunos 4.1, it should
+?S:    be empty.
 ?S:.
-?C:USE_DYNAMIC_LOADING~%<:
+?S:shlibsuffix:
+?S:    Shared libraries are built by Makefile in the form
+?S:    lib/auto/xxx/xxx${shsuffix}, where xxx is
+?S:    the name of the library, e.g. /lib/auto/POSIX/POSIX.so 
+?S:.
+?C:USE_DYNAMIC_LOADING ~ %<:
 ?C:    This symbol, if defined, indicates that dynamic loading of
 ?C:    some sort is available.
 ?C:.
 ?H:?%<:#$usedl USE_DYNAMIC_LOADING             /**/
 ?H:.
 ?W:%<:dlopen
-?INIT: usedl=''
-?X: 
-?X:  Can anyone suggest a test for whether this works on a given system?
-?X: 
+?INIT:: File to use for dynamic loading
+?INIT:usedl=''
+?T:xxx
+?X:
+?X:  We select a default of 'define' for usedl if either dl_$osname.c
+?X:  exists or if i_dlfcn is defined (which probably means dl_sunos.c
+?X:  will work.)
+?X:
 : determine which dynamic loading, if any, to compile in
 echo " "
 case "$usedl" in
-'')
-       case "$i_dlfcn" in
-       'define') dflt='y' ;;
-       *)        dflt='n' ;;
-       esac
-       ;;
-'define') dflt='y' ;;
-'y') dflt='y'
-     usedl='define' ;;
-*)  dflt='n' ;;
+'') case "$i_dlfcn" in
+    define) dflt='y' ;;
+    *)      dflt='n' ;;
+    esac
+    : Does a dl.c file exist for this operating system
+    $test -f ../ext/dl/dl_${osname}.c && dflt='y'
+    ;;
+define|y|true) dflt='y'
+    usedl="$define"
+    ;;
+*)  dflt='n'
+    ;;
 esac
 rp="Do you wish to attempt to use dynamic loading?"
 . ./myread
 usedl="$ans"
 case "$ans" in
-y*) usedl='define'; dlsrc='dl.c'; dlobj='dl.o';;
-*) usedl='undef'; dlsrc=''; dlobj='';;
+y*) usedl="$define"
+    if $test -f ../ext/dl/dl_${osname}.c ; then
+       dflt="ext/dl/dl_${osname}.c"
+    else
+       dflt='ext/dl/dl.c'
+    fi
+    echo "The following dynamic loading files are available:"
+    cd ..; ls -C ext/dl/dl*.c; cd UU
+    rp="Source file to use for dynamic loading"
+    fn="fne~"
+    . ./getfile
+    : emulate  basename and dirname
+    xxx=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@' -e 's@\.c$@@'`
+    dlobj=$xxx.o
+    dlsrc=$xxx.c
+    dldir=`echo $ans | $sed 's@\(.*\)/[^/]*$@\1@'`
+    case "$dldir" in
+    '') dldir="." ;;
+    *) ;;
+    esac
+    if $test -f ../$dldir/$dlsrc; then
+        usedl="$define"
+    else
+       echo "File $dlsrc does not exist -- ignored"
+       usedl="$undef"
+    fi
+
+    cat << EOM
+
+Some systems may require passing special flags to $cc -c to
+compile modules that will be used to create a shared library.
+To use no flags, say "none".
+EOM
+    case "$cccdlflags" in
+    ''|' ') case "$osname" in
+                       hpux)  dflt='+z' ;;
+                       next)  dflt='none' ;;
+                       sunos) dflt='none' ;;
+               *)     dflt='none' ;;
+                       esac
+                       ;;
+    *) dflt="$cccdlflags" ;;
+    esac
+    rp="Any special flags to pass to $cc -c to compile shared library modules?"
+    . ./myread
+    case "$ans" in
+    none) cccdlflags='' ;;
+    *) cccdlflags="$ans" ;;
+    esac
+
+    cat << 'EOM'
+
+Some systems may require passing special flags to ld to
+create a shared library.  To use no flags, say "none".
+EOM
+?X: I have received one report that NeXT requires -r here.
+?X: On SunOS 4.1.3, that makes the library no longer shared.
+    case "$lddlflags" in
+    ''|' ') case "$osname" in
+                       hpux)  dflt='-b' ;;
+                       next)  dflt='none' ;;
+                       sunos) dflt='none' ;;
+               *)     dflt='none' ;;
+                       esac
+                       ;;
+    *) dflt="$lddlflags" ;;
+    esac
+    rp="Any special flags to pass to ld to create a shared library?"
+    . ./myread
+    case "$ans" in
+    none) lddlflags='' ;;
+    *) lddlflags="$ans" ;;
+    esac
+
+       cat <<EOM
+
+Some systems may require passing special flags to $cc to indicate that
+dynamic linking will be used.  To use no flags, say "none".
+EOM
+    case "$ccdlflags" in
+    ''|' ')
+               case "$osname" in
+               hpux)  dflt='none' ;;
+               next)  dflt='none' ;;
+               sunos) dflt='none' ;;
+           *)     dflt='none' ;;
+               esac
+               ;;
+    *)  dflt="$ccdlflags"
+           ;;
+    esac
+    rp="Any special flags to pass to $cc to use dynamic loading?"
+    . ./myread
+    case "$ans" in
+    none) ccdlflags='' ;;
+    *) ccdlflags="$ans" ;;
+    esac
+       cat <<EOM
+
+Some systems may require using a special suffix for shared libraries.
+To create the shared library for POSIX, for example, you may need to
+actually build the file POSIX.so.
+
+EOM
+    case "$shlibsuffix" in
+       '')
+               case "$osname" in
+               hpux)  dflt='.sl' ;;
+               next)  dflt='.so' ;;
+               sunos) dflt='.so' ;;
+               *)     dflt='.so' ;;
+               esac
+               ;;
+    *)  dflt="$shlibsuffix"
+       ;;
+    esac
+    rp="What is the suffix used for shared libraries?"
+    . ./myread
+    case "$ans" in
+    none) shlibsuffix='' ;;
+    *) shlibsuffix="$ans" ;;
+    esac
+    ;;
+?X: End of usedl=y section
+*)  usedl="$undef"
+    : These are currently not used.
+    dlsrc=''
+    dlobj=''
+    dldir=''
+    lddlflags=''
+    ccdlflags=''
+    shlibsuffix='.o'
+    ;;
 esac
index 870fce8..962f3d8 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: gidtype.U,v 3.0 1993/08/18 12:08:11 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
 ?RCS: Revision 3.0  1993/08/18  12:08:11  ram
 ?RCS: Baseline for dist 3.0 netwide release.
 ?RCS:
-?MAKE:gidtype: Myread Oldconfig contains Findhdr
+?MAKE:gidtype: Myread Oldconfig contains Findhdr Setvar
 ?MAKE: -pick add $@ %<
 ?S:gidtype:
-?S:    This variable defines Gid_t to be something like gid_t, int, 
+?S:    This variable defines Gid_t to be something like gid_t, int,
 ?S:    ushort, or whatever type is used to declare the return type
 ?S:    of getgid().  Typically, it is the type of group ids in the kernel.
 ?S:.
@@ -38,6 +29,7 @@
 ?H:#define Gid_t $gidtype              /* Type for getgid(), etc... */
 ?H:.
 ?T:xxx
+?INIT:gidtype=''
 : see what type gids are declared as in the kernel
 case "$gidtype" in
 '')
@@ -57,4 +49,6 @@ esac
 echo " "
 rp="What is the type for group ids returned by getgid()?"
 . ./myread
-gidtype="$ans"
+val="$ans"
+set gidtype
+eval $setvar
index f8ebab4..355ea14 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: groupstype.U,v$
 ?RCS:
 ?RCS: You may redistribute only under the terms of the Artistic Licence,
@@ -17,7 +8,7 @@
 ?RCS:
 ?RCS: $Log: groupstype.U,v $
 ?RCS:
-?MAKE:groupstype: gidtype d_getgrps Myread Oldconfig contains Findhdr
+?MAKE:groupstype: gidtype d_getgrps Myread Oldconfig Findhdr cat Setvar
 ?MAKE: -pick add $@ %<
 ?INIT:groupstype=''
 ?S:groupstype:
@@ -48,11 +39,13 @@ case "$d_getgrps" in
     echo " "
     $cat <<EOM
 What is the type of the second argument to getgroups()?  Usually this
-is the same as group ids, "$gidtype", but not always.
+is the same as group ids, $gidtype, but not always.
 EOM
     rp="What type is the second arguement to getgroups()?"
     . ./myread
-    groupstype="$ans"
+    val="$ans"
     ;;
-*)  groupstype="$gidtype";;
+*)  val="$gidtype";;
 esac
+set groupstype
+eval $setvar
index 0f0f9c1..dcffe12 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: i_dlfcn.U,v $
 ?RCS:
 ?RCS: You may redistribute only under the terms of the Artistic Licence,
@@ -34,4 +25,3 @@
 : see if dlfcn is available
 set dlfcn.h i_dlfcn
 eval $inhdr
-
diff --git a/U/i_net_errno.U b/U/i_net_errno.U
new file mode 100644 (file)
index 0000000..c5fb911
--- /dev/null
@@ -0,0 +1,50 @@
+?RCS: $Id: i_net_errno.U,v $
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: i_net_errno.U,v $
+?RCS:
+?MAKE:i_neterrno: Inhdr cc ccflags rm
+?MAKE: -pick add $@ %<
+?S:i_neterrno:
+?S:    This variable conditionally defines the I_NET_ERRNO symbol, which
+?S:    indicates to the C program that <net/errno.h> exists and should
+?S:    be included.
+?S:.
+?C:I_NET_ERRNO:
+?C:    This symbol, if defined, indicates that <net/errno.h> exists and 
+?C:    should be included.
+?C:.
+?H:#$i_neterrno I_NET_ERRNO            /**/
+?H:.
+?LINT:set i_neterrno
+: see if net/errno.h is available
+set net/errno.h i_neterrno
+eval $inhdr
+: Unfortunately, it causes problems on some systems.  Arrgh.
+case '$i_neterrno' in
+'define') echo "<net/errno.h> found."
+    cat > try.c <<'EOM'
+#include <stdio.h>
+#include <errno.h>
+#include <net/errno.h>
+int func()
+{
+int x;
+x = ENOTSOCK;
+return x;
+}
+EOM
+    if $cc $ccflags -c try.c >/dev/null 2>&1; then
+       i_neterrno="$define"
+    else
+       echo "But it causes problems, so we won't include it"
+       i_neterrno="$undef"
+    fi
+    $rm -f try.* try
+    ;;
+esac
diff --git a/U/i_pwd.U b/U/i_pwd.U
new file mode 100644 (file)
index 0000000..69aa030
--- /dev/null
+++ b/U/i_pwd.U
@@ -0,0 +1,134 @@
+?RCS: $Id: i_pwd.U,v 3.0 1993/08/18 12:08:25 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: i_pwd.U,v $
+?RCS: Revision 3.0  1993/08/18  12:08:25  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether there is a pwd system or not
+?X:
+?MAKE:i_pwd d_pwquota d_pwage d_pwchange d_pwclass d_pwexpire d_pwcomment: \
+       test contains rm cppstdin cppflags cppminus Findhdr
+?MAKE: -pick add $@ %<
+?S:i_pwd:
+?S:    This variable conditionally defines I_PWD, which indicates
+?S:    to the C program that it should include <pwd.h>.
+?S:.
+?S:d_pwquota:
+?S:    This varaible conditionally defines PWQUOTA, which indicates
+?S:    that struct passwd contains pw_quota.
+?S:.
+?S:d_pwage:
+?S:    This varaible conditionally defines PWAGE, which indicates
+?S:    that struct passwd contains pw_age.
+?S:.
+?S:d_pwchange:
+?S:    This varaible conditionally defines PWCHANGE, which indicates
+?S:    that struct passwd contains pw_change.
+?S:.
+?S:d_pwclass:
+?S:    This varaible conditionally defines PWCLASS, which indicates
+?S:    that struct passwd contains pw_class.
+?S:.
+?S:d_pwexpire:
+?S:    This varaible conditionally defines PWEXPIRE, which indicates
+?S:    that struct passwd contains pw_expire.
+?S:.
+?S:d_pwcomment:
+?S:    This varaible conditionally defines PWCOMMENT, which indicates
+?S:    that struct passwd contains pw_comment.
+?S:.
+?C:I_PWD:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <pwd.h>.
+?C:.
+?C:PWQUOTA:
+?C:    This symbol, if defined, indicates to the C program that struct passwd
+?C:    contains pw_quota.
+?C:.
+?C:PWAGE:
+?C:    This symbol, if defined, indicates to the C program that struct passwd
+?C:    contains pw_age.
+?C:.
+?C:PWCHANGE:
+?C:    This symbol, if defined, indicates to the C program that struct passwd
+?C:    contains pw_change.
+?C:.
+?C:PWCLASS:
+?C:    This symbol, if defined, indicates to the C program that struct passwd
+?C:    contains pw_class.
+?C:.
+?C:PWEXPIRE:
+?C:    This symbol, if defined, indicates to the C program that struct passwd
+?C:    contains pw_expire.
+?C:.
+?C:PWCOMMENT:
+?C:    This symbol, if defined, indicates to the C program that struct passwd
+?C:    contains pw_comment.
+?C:.
+?H:#$i_pwd I_PWD               /**/
+?H:#$d_pwquota PWQUOTA /**/
+?H:#$d_pwage PWAGE     /**/
+?H:#$d_pwchange PWCHANGE       /**/
+?H:#$d_pwclass PWCLASS /**/
+?H:#$d_pwexpire PWEXPIRE       /**/
+?H:#$d_pwcomment PWCOMMENT     /**/
+?H:.
+?T:xxx
+: see if this is a pwd system
+echo " "
+xxx=`./findhdr pwd.h`
+if $test "$xxx"; then
+       i_pwd="$define"
+       echo "<pwd.h> found." >&4
+       $cppstdin $cppflags $cppminus < $xxx >$$.h
+       if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
+               d_pwquota="$define"
+       else
+               d_pwquota="$undef"
+       fi
+       if $contains 'pw_age' $$.h >/dev/null 2>&1; then
+               d_pwage="$define"
+       else
+               d_pwage="$undef"
+       fi
+       if $contains 'pw_change' $$.h >/dev/null 2>&1; then
+               d_pwchange="$define"
+       else
+               d_pwchange="$undef"
+       fi
+       if $contains 'pw_class' $$.h >/dev/null 2>&1; then
+               d_pwclass="$define"
+       else
+               d_pwclass="$undef"
+       fi
+       if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
+               d_pwexpire="$define"
+       else
+               d_pwexpire="$undef"
+       fi
+       if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
+               d_pwcomment="$define"
+       else
+               d_pwcomment="$undef"
+       fi
+       $rm -f $$.h
+else
+       i_pwd="$undef"
+       d_pwquota="$undef"
+       d_pwage="$undef"
+       d_pwchange="$undef"
+       d_pwclass="$undef"
+       d_pwexpire="$undef"
+       d_pwcomment="$undef"
+       echo "<pwd.h> NOT found." >&4
+fi
+
diff --git a/U/i_sdbm.U b/U/i_sdbm.U
new file mode 100644 (file)
index 0000000..3e01615
--- /dev/null
@@ -0,0 +1,37 @@
+?RCS: $Id: i_sdbm.U,v $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: i_sdbm.U,v $
+?RCS:
+?MAKE:i_sdbm: Inhdr package Setvar
+?MAKE: -pick add $@ %<
+?S:i_sdbm:
+?S:    This variable conditionally defines the I_SDBM symbol, which
+?S:    indicates to the C program that sdbm.h exists and should
+?S:    be included.
+?S:.
+?C:I_SDBM (HAS_SDBM):
+?C:    This symbol, if defined, indicates that sdbm.h exists and should
+?C:    be included.
+?C:.
+?H:#$i_sdbm I_SDBM     /**/
+?H:.
+?LINT:set i_sdbm
+: see if sdbm.h is wanted
+?X: Since perl includes sdbm, don't ask here.  Always include it.
+?X: But, we'll allow a hints file to over-rule us.
+echo " "
+echo "$package includes an implementation of sdbm in ext/dbm/sdbm."
+case "$i_sdbm" in
+    ''|' ') val="$define" ;;
+    *) val="$i_sdbm" ;;
+esac
+set i_sdbm
+eval $setvar
diff --git a/U/i_sgtty.U b/U/i_sgtty.U
new file mode 100644 (file)
index 0000000..b890d78
--- /dev/null
@@ -0,0 +1,128 @@
+?MAKE:i_sgtty: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, and
+?S:    indicates whether a C program should include <sgtty.h>.
+?S:.
+?C:I_SGTTY:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <sgtty.h>.
+?C:.
+?H:#$i_sgtty I_SGTTY          /**/
+?H:.
+?LINT:set i_sgtty
+: see if this is a sgtty.h system
+set sgtty.h i_sgtty
+eval $inhdr
+?MAKE:i_sgtty: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, and
+?S:    indicates whether a C program should include <sgtty.h>.
+?S:.
+?C:I_SGTTY:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <sgtty.h>.
+?C:.
+?H:#$i_sgtty I_SGTTY          /**/
+?H:.
+?LINT:set i_sgtty
+: see if this is a sgtty.h system
+set sgtty.h i_sgtty
+eval $inhdr
+?MAKE:i_sgtty: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, and
+?S:    indicates whether a C program should include <sgtty.h>.
+?S:.
+?C:I_SGTTY:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <sgtty.h>.
+?C:.
+?H:#$i_sgtty I_SGTTY          /**/
+?H:.
+?LINT:set i_sgtty
+: see if this is a sgtty.h system
+set sgtty.h i_sgtty
+eval $inhdr
+?MAKE:i_sgtty: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, and
+?S:    indicates whether a C program should include <sgtty.h>.
+?S:.
+?C:I_SGTTY:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <sgtty.h>.
+?C:.
+?H:#$i_sgtty I_SGTTY          /**/
+?H:.
+?LINT:set i_sgtty
+: see if this is a sgtty.h system
+set sgtty.h i_sgtty
+eval $inhdr
+?MAKE:i_sgtty: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, and
+?S:    indicates whether a C program should include <sgtty.h>.
+?S:.
+?C:I_SGTTY:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <sgtty.h>.
+?C:.
+?H:#$i_sgtty I_SGTTY          /**/
+?H:.
+?LINT:set i_sgtty
+: see if this is a sgtty.h system
+set sgtty.h i_sgtty
+eval $inhdr
+?MAKE:i_sgtty: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, and
+?S:    indicates whether a C program should include <sgtty.h>.
+?S:.
+?C:I_SGTTY:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <sgtty.h>.
+?C:.
+?H:#$i_sgtty I_SGTTY          /**/
+?H:.
+?LINT:set i_sgtty
+: see if this is a sgtty.h system
+set sgtty.h i_sgtty
+eval $inhdr
+?MAKE:i_sgtty: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, and
+?S:    indicates whether a C program should include <sgtty.h>.
+?S:.
+?C:I_SGTTY:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <sgtty.h>.
+?C:.
+?H:#$i_sgtty I_SGTTY          /**/
+?H:.
+?LINT:set i_sgtty
+: see if this is a sgtty.h system
+set sgtty.h i_sgtty
+eval $inhdr
+?MAKE:i_sgtty: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, and
+?S:    indicates whether a C program should include <sgtty.h>.
+?S:.
+?C:I_SGTTY:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <sgtty.h>.
+?C:.
+?H:#$i_sgtty I_SGTTY          /**/
+?H:.
+?LINT:set i_sgtty
+: see if this is a sgtty.h system
+set sgtty.h i_sgtty
+eval $inhdr
diff --git a/U/i_termio.U b/U/i_termio.U
new file mode 100644 (file)
index 0000000..f1eb947
--- /dev/null
@@ -0,0 +1,117 @@
+?RCS: $Id: i_termio.U,v 3.0 1993/08/18 12:08:44 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: i_termio.U,v $
+?RCS: Revision 3.0  1993/08/18  12:08:44  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X:    Include all three (possible) definitions in config_h.SH.
+?X:    There are enough implementations of posix termios.h out there 
+?X:    that do not work well with other system headers or are
+?X:    incomplete.  This makes it easier for the user to back off 
+?X:    and try sgtty.h or i_termio.h instead.
+?X:
+?MAKE:i_termio i_sgtty i_termios: test Inlibc Cppsym Guess Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:i_termio:
+?S:    This variable conditionally defines the I_TERMIO symbol, which
+?S:    indicates to the C program that it should include <termio.h> rather
+?S:    than <sgtty.h>.
+?S:.
+?S:i_termios:
+?S:    This variable conditionally defines the I_TERMIOS symbol, which
+?S:    indicates to the C program that the POSIX <termios.h> file is
+?S:    to be included.
+?S:.
+?S:i_sgtty:
+?S:    This variable conditionally defines the I_SGTTY symbol, which
+?S:    indicates to the C program that it should include <sgtty.h> rather
+?S:    than <termio.h>.
+?S:.
+?C:I_TERMIO ~ %<:
+?C:    This symbol, if defined, indicates that the program should include
+?C:    <termio.h> rather than <sgtty.h>.  There are also differences in
+?C:    the ioctl() calls that depend on the value of this symbol.
+?C:.
+?C:I_TERMIOS ~ %<:
+?C:    This symbol, if defined, indicates that the program should include
+?C:    the POSIX termios.h rather than sgtty.h or termio.h.
+?C:    There are also differences in the ioctl() calls that depend on the
+?C:    value of this symbol.
+?C:.
+?C:I_SGTTY ~ %<:
+?C:    This symbol, if defined, indicates that the program should include
+?C:    <sgtty.h> rather than <termio.h>.  There are also differences in
+?C:    the ioctl() calls that depend on the value of this symbol.
+?C:.
+?H:?%<:#$i_termio I_TERMIO             /**/
+?H:?%<:#$i_termios I_TERMIOS           /**/
+?H:?%<:#$i_sgtty I_SGTTY               /**/
+?H:.
+?T:val2 val3
+?LINT:set i_termio i_sgtty i_termios
+: see if this is a termio system
+val="$undef"
+val2="$undef"
+val3="$undef"
+?X: Prefer POSIX-approved termios.h over all else
+if $test `./findhdr termios.h`; then
+       set tcsetattr i_termios
+       eval $inlibc
+       val3="$i_termios"
+fi
+echo " "
+case "$val3" in
+"$define") echo "You have POSIX termios.h... good!" >&4;;
+*) if Cppsym pyr; then
+               case "`/bin/universe`" in
+               ucb) if $test `./findhdr sgtty.h`; then
+                               val2="$define"
+                               echo "<sgtty.h> found." >&4
+                       else
+                               echo "System is pyramid with BSD universe."
+                               echo "<sgtty.h> not found--you could have problems." >&4
+                       fi;;
+               *) if $test `./findhdr termio.h`; then
+                               val="$define"
+                               echo "<termio.h> found." >&4
+                       else
+                               echo "System is pyramid with USG universe."
+                               echo "<termio.h> not found--you could have problems." >&4
+                       fi;;
+               esac
+?X: Start with USG to avoid problems if both usg/bsd was guessed
+       elif usg; then
+               if $test `./findhdr termio.h`; then
+                       echo "<termio.h> found." >&4
+                       val="$define"
+               elif $test `./findhdr sgtty.h`; then
+                       echo "<sgtty.h> found." >&4
+                       val2="$define"
+               else
+echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
+               fi
+       else
+               if $test `./findhdr sgtty.h`; then
+                       echo "<sgtty.h> found." >&4
+                       val2="$define"
+               elif $test `./findhdr termio.h`; then
+                       echo "<termio.h> found." >&4
+                       val="$define"
+               else
+echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
+               fi
+       fi;;
+esac
+set i_termio; eval $setvar
+val=$val2; set i_sgtty; eval $setvar
+val=$val3; set i_termios; eval $setvar
+
diff --git a/U/i_termios.U b/U/i_termios.U
new file mode 100644 (file)
index 0000000..f676710
--- /dev/null
@@ -0,0 +1,64 @@
+?MAKE:i_termios: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_termios:
+?S:    This variable conditionally defines the I_TERMIOS symbol, and
+?S:    indicates whether a C program should include <sys/termios.h>.
+?S:.
+?C:I_TERMIOS:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <termios.h>.
+?C:.
+?H:#$i_termios I_TERMIOS          /**/
+?H:.
+?LINT:set i_termios
+: see if this is a termios.h system
+set termios.h i_termios
+eval $inhdr
+?MAKE:i_termios: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_termios:
+?S:    This variable conditionally defines the I_TERMIOS symbol, and
+?S:    indicates whether a C program should include <sys/termios.h>.
+?S:.
+?C:I_TERMIOS:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <termios.h>.
+?C:.
+?H:#$i_termios I_TERMIOS          /**/
+?H:.
+?LINT:set i_termios
+: see if this is a termios.h system
+set termios.h i_termios
+eval $inhdr
+?MAKE:i_termios: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_termios:
+?S:    This variable conditionally defines the I_TERMIOS symbol, and
+?S:    indicates whether a C program should include <sys/termios.h>.
+?S:.
+?C:I_TERMIOS:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <termios.h>.
+?C:.
+?H:#$i_termios I_TERMIOS          /**/
+?H:.
+?LINT:set i_termios
+: see if this is a termios.h system
+set termios.h i_termios
+eval $inhdr
+?MAKE:i_termios: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_termios:
+?S:    This variable conditionally defines the I_TERMIOS symbol, and
+?S:    indicates whether a C program should include <sys/termios.h>.
+?S:.
+?C:I_TERMIOS:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include <termios.h>.
+?C:.
+?H:#$i_termios I_TERMIOS          /**/
+?H:.
+?LINT:set i_termios
+: see if this is a termios.h system
+set termios.h i_termios
+eval $inhdr
diff --git a/U/i_vfork.U b/U/i_vfork.U
new file mode 100644 (file)
index 0000000..19af424
--- /dev/null
@@ -0,0 +1,34 @@
+?RCS: $Id: i_vfork.U,v 3.0 1993/08/18 12:08:50 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: i_vfork.U,v $
+?RCS: Revision 3.0  1993/08/18  12:08:50  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_vfork: Inhdr d_vfork
+?MAKE: -pick add $@ %<
+?S:i_vfork:
+?S:    This variable conditionally defines the I_VFORK symbol, and indicates
+?S:    whether a C program should include vfork.h.
+?S:.
+?C:I_VFORK:
+?C:    This symbol, if defined, indicates to the C program that it should
+?C:    include vfork.h.
+?C:.
+?H:#$i_vfork I_VFORK   /**/
+?H:.
+?LINT:set i_vfork
+: see if this is a vfork system
+case "$d_vfork" in
+define) set vfork.h i_vfork
+       eval $inhdr
+       ;;
+*)      i_vfork="$undef";;
+esac
index 54879b1..9f497f1 100644 (file)
--- a/U/libc.U
+++ b/U/libc.U
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: libc.U,v 3.0.1.3 1994/01/24 14:12:17 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
index 99cf22c..2c030c2 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: libpth.U,v 3.0 1993/08/18 12:09:02 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -32,7 +23,7 @@
 ?S:.
 ?S:plibpth:
 ?S:    Holds the private path used by Configure to find out the libraries.
-?S:    Its value is prepend to libpth. This variable takes care of special
+?S:    Its value is prepended to libpth. This variable takes care of special
 ?S:    machines, like the mips.  Usually, it should be empty.
 ?S:.
 ?T: xxx yyy
index c1f951a..45625ab 100644 (file)
--- a/U/libs.U
+++ b/U/libs.U
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: libs.U,v 3.0.1.1 1993/08/25 14:02:31 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
 ?X: -lBSD, -lPW, and -lx only get used if there are unresolved
 ?X: routines at link time.  Usually, these are backwards compatability
 ?X: libraries, and may not be as reliable as the standard c library.
+?X:
+?X: The -lsocket -linet -lnsl order has been reported to be necessary
+?X: for at least one SVR4 implementation.
+?X:
 ?X: The ordering of c_s, posix, and cposix is a guess and almost
 ?X: certainly wrong on about half of all systems.
-?INIT:libswanted="net socket nsl inet nm sdbm gdbm ndbm dbm malloc dl dld sun m c_s posix cposix ndir dir ucb bsd BSD PW x"
+?X:
+?X: The extra space at the beginning and end is for some old hints
+?X: files which assumed there was always a space around each library.
+?X:
+?INIT:libswanted=" net socket inet nsl nm sdbm gdbm ndbm dbm malloc dl dld sun m c_s posix cposix ndir dir ucb bsd BSD PW x "
 ?INIT:
 : Looking for optional libraries
 echo " "
@@ -55,27 +54,27 @@ for thislib in $libswanted; do
        case "$thislib" in
        dbm) thatlib=ndbm;;
        *_s) thatlib=NONE;;
-       *) thatlib="${thislib}_s";;
+       *) thatlib=${thislib}_s;;
        esac
        xxx=`./loc lib$thislib.a X $libpth`
        yyy=`./loc lib$thatlib.a X $libpth`
-       zzz=`./loc lib$thislib.so.[0-9]'*' $libpth`
+       zzz=`./loc lib$thislib.so.[0-9]'*' X $libpth`
        if $test -f $xxx; then
                echo "Found -l$thislib."
                case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+               *"-l$thislib "*|*-l$thislib|*"-l$thatlib "*|*-l$thatlib) ;;
                *) dflt="$dflt -l$thislib";;
                esac
        elif $test -f $yyy; then
                echo "Found -l$thatlib."
                case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+               *"-l$thatlib "*|*-l$thatlib) ;;
                *) dflt="$dflt -l$thatlib";;
                esac
        elif $test -f $zzz; then
                echo "Found -$thislib."
                case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+               *"-l$thislib "*|*-l$thislib) ;;
                *) dflt="$dflt -l$thislib";;
                esac
        else
@@ -84,13 +83,13 @@ for thislib in $libswanted; do
                if $test -f $xxx; then
                        echo "Found -l$thislib."
                        case "$dflt" in
-                       "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+                       *"-l$thislib "*|*-l$thislib|*"-l$thatlib "*|*-l$thatlib) ;;
                        *) dflt="$dflt -l$thislib";;
                        esac
                elif $test -f $yyy; then
                        echo "Found -l$thatlib."
                        case "$dflt" in
-                       "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+                       *"-l$thatlib "*|*-l$thatlib) ;;
                        *) dflt="$dflt -l$thatlib";;
                        esac
                else
index cfee077..c12e5a5 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: libyacc.U,v 3.0.1.1 1994/01/24 14:13:49 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
diff --git a/U/lns.U b/U/lns.U
new file mode 100644 (file)
index 0000000..fcefb1f
--- /dev/null
+++ b/U/lns.U
@@ -0,0 +1,21 @@
+?RCS: $Id: lns.U,v $
+?RCS:
+?RCS: $Log: lns.U,v $
+?RCS:
+?MAKE:lns: ln touch
+?MAKE: -pick add $@ %<
+?S:lns:
+?S:    This variable holds the name of the command to make 
+?S:    symbolic links (if they are supported).  It can be used
+?S:    in the Makefile. It is either 'ln -s' or 'ln'
+?S:.
+?X:  We can't rely on d_symlink because that may be listed in the
+?X:  C library but unimplemented.
+: determine whether symbolic links are supported
+$touch blurfl
+if $ln -s blurfl sym > /dev/null 2>&1 ; then
+    lns="$ln -s"
+else
+    lns="$ln"
+fi
+rm -f blurfl sym
diff --git a/U/loc_sed.U b/U/loc_sed.U
new file mode 100644 (file)
index 0000000..9eb8b21
--- /dev/null
@@ -0,0 +1,10 @@
+?RCS: $Id: loc_sed.U,v $
+?RCS:
+?MAKE:: sed
+?MAKE: -pick add $@ %<
+?C:LOC_SED:
+?C:    This symbol holds the complete pathname to the sed program.
+?C:.
+?H:#define LOC_SED     "$sed"  /**/
+?H:.
+?X: This is used in perl.c.
index 3fc4ee7..9fd5382 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: mallocsrc.U,v 3.0 1993/08/18 12:09:12 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -21,8 +12,8 @@
 ?RCS: Revision 3.0  1993/08/18  12:09:12  ram
 ?RCS: Baseline for dist 3.0 netwide release.
 ?RCS:
-?MAKE:mallocsrc mallocobj usemymalloc malloctype: Myread Oldconfig package \
-       Guess test rm cat +cc +ccflags Findhdr
+?MAKE:mallocsrc mallocobj usemymalloc malloctype d_mymalloc: Myread Oldconfig package \
+       Guess Setvar test rm cat +cc +ccflags Findhdr
 ?MAKE: -pick add $@ %<
 ?S:usemymalloc:
 ?S:    This variable contains y if the malloc that comes with this package
 ?S:    Otherwise the value is null.  This variable is intended for generating
 ?S:    Makefiles.
 ?S:.
+?S:d_mymalloc:
+?S:    This variable conditionally defines MYMALLOC in case other parts
+?S:    of the source want to take special action if MYMALLOC is used.
+?S:    This may include different sorts of profiling or error detection.
+?S:.
 ?S:mallocobj:
 ?S:    This variable contains the name of the malloc.o that this package
 ?S:    generates, if that malloc.o is preferred over the system malloc.
 ?C:.
 ?H:#define Malloc_t $malloctype                        /**/
 ?H:.
+?C:MYMALLOC:
+?C:    This symbol, if defined, indicates that we're using our own malloc.
+?C:.
+?H:#$d_mymalloc MYMALLOC                       /**/
+?H:.
 ?X: Cannot test for mallocsrc; it is the unit's name and there is a bug in
 ?X: the interpreter which defines all the names, even though they are not used.
 @if mallocobj
@@ -71,11 +72,17 @@ rp="Do you wish to attempt to use the malloc that comes with $package?"
 . ./myread
 usemymalloc="$ans"
 case "$ans" in
-y*) mallocsrc='malloc.c'; mallocobj='malloc.o';;
-*) mallocsrc=''; mallocobj='';;
+y*) mallocsrc='malloc.c'
+    mallocobj='malloc.o'
+    d_mymalloc="$define"
+    ;;
+*) mallocsrc=''
+   mallocobj=''
+   d_mymalloc="$undef"
+   ;;
 esac
-
 @end
+
 @if MALLOCPTRTYPE || Malloc_t
 : compute the type returned by malloc
 echo " "
index 8fa80e8..b0332f5 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: prototype.U,v 3.0.1.2 1994/01/24 14:15:36 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
diff --git a/U/sig_name.U b/U/sig_name.U
new file mode 100644 (file)
index 0000000..9b3f9e3
--- /dev/null
@@ -0,0 +1,86 @@
+?RCS: $Id: sig_name.U,v 3.0 1993/08/18 12:09:47 ram Exp $
+?RCS:
+?RCS: Copyright (c) 1991-1993, Raphael Manfredi
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: $Log: sig_name.U,v $
+?RCS: Revision 3.0  1993/08/18  12:09:47  ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sig_name: awk rm Findhdr
+?MAKE: -pick add $@ %<
+?S:sig_name:
+?S:    This variable holds the signal names, space separated. The leading
+?S:    SIG in signals name is removed.
+?S:.
+?C:SIG_NAME:
+?C:    This symbol contains a list of signal names in order. This is intended
+?C:    to be used as a static array initialization, like this:
+?C:            char *sig_name[] = { SIG_NAME };
+?C:    The signals in the list are separated with commas, and each signal
+?C:    is surrounded by double quotes. There is no leading SIG in the signal
+?C:    name, i.e. SIGQUIT is known as "QUIT".
+?C:.
+?H:#define SIG_NAME "`echo $sig_name | sed 's/ /","/g'`"       /**/
+?H:.
+?T:xxx
+: generate list of signal names
+echo " "
+case "$sig_name" in
+'')
+       echo "Generating a list of signal names..." >&4
+       xxx=`./findhdr signal.h`" "`./findhdr sys/signal.h`
+       set X `cat $xxx 2>&1 | $awk '
+$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $3 ~ /^[1-9][0-9]*$/ {
+       sig[$3] = substr($2,4,20)
+       if (max < $3 && $3 < 60) {
+               max = $3
+       }
+}
+
+END {
+       for (i = 1; i <= max; i++) {
+               if (sig[i] == "")
+                       printf "%d", i
+               else
+                       printf "%s", sig[i]
+               if (i < max)
+                       printf " "
+       }
+       printf "\n"
+}
+'`
+       shift
+       case $# in
+       0)
+               echo 'kill -l' >/tmp/foo$$
+               set X `csh -f </tmp/foo$$`
+               $rm -f /tmp/foo$$
+               shift
+               case $# in
+               0)set HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM
+               ;;
+               esac
+               ;;
+       esac
+       sig_name="ZERO $*"
+       ;;
+esac
+echo "The following signals are available:"
+echo $sig_name | 
+    $awk 'BEGIN { linelen = 0 }
+        { for (i = 1; i < NF; i++)
+          {
+             name = "SIG" $i " "
+             linelen = linelen + length(name)
+             if (linelen > 70)
+               {
+                 printf "\n"
+                 linelen = length(name)
+               }
+             printf "%s", name } }'
index 50b5d92..7d9a0d0 100644 (file)
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: voidflags.U,v 3.0 1993/08/18 12:10:01 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
 ?C:    level of void support necessary is not present, defines void to int.
 ?C:.
 ?H:?%<:#ifndef VOIDUSED
-?H:?%<:#  ifdef VOIDWANT
-?H:?%<:#    define VOIDUSED VOIDWANT
-?H:?%<:#  else
-?H:?%<:#    define VOIDUSED $defvoidused
-?H:?%<:#  endif
+?H:?%<:#  define VOIDUSED $defvoidused
 ?H:?%<:#endif
 ?H:?%<:#define VOIDFLAGS $voidflags
 ?H:?%<:#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
@@ -62,7 +49,7 @@
 ?H:?%<:#  define VOID void
 ?H:?%<:#endif
 ?H:.
-?W:%<:void VOID VOIDWANT
+?W:%<:void VOID VOIDUSED
 ?INIT:: full support for void wanted by default
 ?INIT:defvoidused=15
 ?INIT:
index 0b777a7..679970c 100644 (file)
--- a/U/yacc.U
+++ b/U/yacc.U
@@ -1,12 +1,3 @@
-?X:  These units are based on the ones supplied with dist-3.0
-?X:  patchlevel 22.  They have been changed or enhanced to work with
-?X:  perl5alpha.  I would appreciate hearing about any changes,
-?X:  corrections, or enhancements.
-?X:    Andy Dougherty                  doughera@lafcol.lafayette.edu
-?X:    Dept. of Physics                
-?X:    Lafayette College       
-?X:    Easton, PA  18042-1782
-?X:     Sat Apr  2 15:45:17 EST 1994
 ?RCS: $Id: yacc.U,v 3.0 1993/08/18 12:10:03 ram Exp $
 ?RCS:
 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
@@ -21,7 +12,7 @@
 ?RCS: Revision 3.0  1993/08/18  12:10:03  ram
 ?RCS: Baseline for dist 3.0 netwide release.
 ?RCS:
-?MAKE:yacc yaccflags: Guess Myread Oldconfig byacc bison cat test
+?MAKE:yacc yaccflags: Guess Myread Oldconfig byacc bison cat test package
 ?MAKE: -pick add $@ %<
 ?S:yacc:
 ?S:    This variable holds the name of the compiler compiler we
@@ -48,8 +39,7 @@ if $test -f "$bison"; then
        rp="$rp or bison -y"
 fi
 $cat <<EOM
-$package no longer requires a compiler compiler, so the following is
-optional.
+$package no longer requires a compiler compiler, so the following is optional.
 EOM
 rp="Which compiler compiler ($rp) shall I use?"
 . ./myread
diff --git a/av.c b/av.c
index 7232e8a..58489fd 100644 (file)
--- a/av.c
+++ b/av.c
@@ -262,14 +262,6 @@ register AV *av;
     AvMAX(av) = AvFILL(av) = -1;
 }
 
-void
-av_free(av)
-AV *av;
-{
-    av_undef(av);
-    Safefree(av);
-}
-
 bool
 av_push(av,val)
 register AV *av;
diff --git a/bar b/bar
index 59bf5cf..8c82917 100755 (executable)
--- a/bar
+++ b/bar
@@ -1,6 +1,9 @@
 #!./perl
 
-require POSIX; import POSIX;
+BEGIN {require POSIX; import POSIX; }
+
+
+print POSIX::pipe(), "\n";
 
 $sigset = new POSIX::SigSet 1,3;
 delset $sigset 1;
diff --git a/bar.out b/bar.out
deleted file mode 100644 (file)
index 4cdb333..0000000
--- a/bar.out
+++ /dev/null
@@ -1,500 +0,0 @@
-
-SUB main::BEGIN = {
-8   TYPE = subroutine exit  ===> DONE
-    FLAGS = (UNKNOWN,KIDS)
-    {
-        TYPE = line sequence  ===> (8)
-        FLAGS = (UNKNOWN,KIDS,PARENS)
-        {
-1           TYPE = next statement  ===> 2
-            FLAGS = (SCALAR)
-            LINE = 4
-        }
-        {
-3           TYPE = require  ===> 4
-            FLAGS = (SCALAR,KIDS)
-            {
-                TYPE = scalar  ===> (3)
-                FLAGS = (SCALAR,KIDS)
-                {
-                    TYPE = null operation  ===> (2)
-                      (was pushmark)
-                    FLAGS = (SCALAR)
-                }
-                {
-2                   TYPE = constant item  ===> 3
-                    FLAGS = (SCALAR)
-                    SV = PV("stat.pl")
-                }
-            }
-        }
-        {
-4           TYPE = next statement  ===> 5
-            FLAGS = (SCALAR)
-            LINE = 5
-        }
-        {
-7           TYPE = print  ===> 8
-            FLAGS = (SCALAR,KIDS)
-            {
-5               TYPE = pushmark  ===> 6
-                FLAGS = (SCALAR)
-            }
-            {
-                TYPE = scalar  ===> (7)
-                FLAGS = (SCALAR,KIDS)
-                {
-                    TYPE = null operation  ===> (6)
-                      (was pushmark)
-                    FLAGS = (SCALAR)
-                }
-                {
-6                   TYPE = constant item  ===> 7
-                    FLAGS = (SCALAR)
-                    SV = PV("here
-")
-                }
-            }
-        }
-    }
-}
-{
-111 TYPE = eval exit  ===> DONE
-    FLAGS = (UNKNOWN,KIDS)
-    {
-        TYPE = line sequence  ===> (111)
-        FLAGS = (UNKNOWN,KIDS)
-        {
-31          TYPE = next statement  ===> 32
-            LINE = 8
-        }
-        {
-36          TYPE = scalar assignment  ===> 37
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-34              TYPE = addition  ===> 35
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-32                  TYPE = constant item  ===> 33
-                    FLAGS = (SCALAR)
-                    SV = IV(0)
-                }
-                {
-                    TYPE = null operation  ===> (34)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-33                      TYPE = scalar variable  ===> 34
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (36)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-35                  TYPE = scalar variable  ===> 36
-                    FLAGS = (SCALAR)
-                    GV = main::ST_DEV
-                }
-            }
-        }
-        {
-37          TYPE = next statement  ===> 38
-            LINE = 9
-        }
-        {
-42          TYPE = scalar assignment  ===> 43
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-40              TYPE = addition  ===> 41
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-38                  TYPE = constant item  ===> 39
-                    FLAGS = (SCALAR)
-                    SV = IV(1)
-                }
-                {
-                    TYPE = null operation  ===> (40)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-39                      TYPE = scalar variable  ===> 40
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (42)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-41                  TYPE = scalar variable  ===> 42
-                    FLAGS = (SCALAR)
-                    GV = main::ST_INO
-                }
-            }
-        }
-        {
-43          TYPE = next statement  ===> 44
-            LINE = 10
-        }
-        {
-48          TYPE = scalar assignment  ===> 49
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-46              TYPE = addition  ===> 47
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-44                  TYPE = constant item  ===> 45
-                    FLAGS = (SCALAR)
-                    SV = IV(2)
-                }
-                {
-                    TYPE = null operation  ===> (46)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-45                      TYPE = scalar variable  ===> 46
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (48)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-47                  TYPE = scalar variable  ===> 48
-                    FLAGS = (SCALAR)
-                    GV = main::ST_MODE
-                }
-            }
-        }
-        {
-49          TYPE = next statement  ===> 50
-            LINE = 11
-        }
-        {
-54          TYPE = scalar assignment  ===> 55
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-52              TYPE = addition  ===> 53
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-50                  TYPE = constant item  ===> 51
-                    FLAGS = (SCALAR)
-                    SV = IV(3)
-                }
-                {
-                    TYPE = null operation  ===> (52)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-51                      TYPE = scalar variable  ===> 52
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (54)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-53                  TYPE = scalar variable  ===> 54
-                    FLAGS = (SCALAR)
-                    GV = main::ST_NLINK
-                }
-            }
-        }
-        {
-55          TYPE = next statement  ===> 56
-            LINE = 12
-        }
-        {
-60          TYPE = scalar assignment  ===> 61
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-58              TYPE = addition  ===> 59
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-56                  TYPE = constant item  ===> 57
-                    FLAGS = (SCALAR)
-                    SV = IV(4)
-                }
-                {
-                    TYPE = null operation  ===> (58)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-57                      TYPE = scalar variable  ===> 58
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (60)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-59                  TYPE = scalar variable  ===> 60
-                    FLAGS = (SCALAR)
-                    GV = main::ST_UID
-                }
-            }
-        }
-        {
-61          TYPE = next statement  ===> 62
-            LINE = 13
-        }
-        {
-66          TYPE = scalar assignment  ===> 67
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-64              TYPE = addition  ===> 65
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-62                  TYPE = constant item  ===> 63
-                    FLAGS = (SCALAR)
-                    SV = IV(5)
-                }
-                {
-                    TYPE = null operation  ===> (64)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-63                      TYPE = scalar variable  ===> 64
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (66)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-65                  TYPE = scalar variable  ===> 66
-                    FLAGS = (SCALAR)
-                    GV = main::ST_GID
-                }
-            }
-        }
-        {
-67          TYPE = next statement  ===> 68
-            LINE = 14
-        }
-        {
-72          TYPE = scalar assignment  ===> 73
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-70              TYPE = addition  ===> 71
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-68                  TYPE = constant item  ===> 69
-                    FLAGS = (SCALAR)
-                    SV = IV(6)
-                }
-                {
-                    TYPE = null operation  ===> (70)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-69                      TYPE = scalar variable  ===> 70
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (72)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-71                  TYPE = scalar variable  ===> 72
-                    FLAGS = (SCALAR)
-                    GV = main::ST_RDEV
-                }
-            }
-        }
-        {
-73          TYPE = next statement  ===> 74
-            LINE = 15
-        }
-        {
-78          TYPE = scalar assignment  ===> 79
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-76              TYPE = addition  ===> 77
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-74                  TYPE = constant item  ===> 75
-                    FLAGS = (SCALAR)
-                    SV = IV(7)
-                }
-                {
-                    TYPE = null operation  ===> (76)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-75                      TYPE = scalar variable  ===> 76
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (78)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-77                  TYPE = scalar variable  ===> 78
-                    FLAGS = (SCALAR)
-                    GV = main::ST_SIZE
-                }
-            }
-        }
-        {
-79          TYPE = next statement  ===> 80
-            LINE = 16
-        }
-        {
-84          TYPE = scalar assignment  ===> 85
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-82              TYPE = addition  ===> 83
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-80                  TYPE = constant item  ===> 81
-                    FLAGS = (SCALAR)
-                    SV = IV(8)
-                }
-                {
-                    TYPE = null operation  ===> (82)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-81                      TYPE = scalar variable  ===> 82
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (84)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-83                  TYPE = scalar variable  ===> 84
-                    FLAGS = (SCALAR)
-                    GV = main::ST_ATIME
-                }
-            }
-        }
-        {
-85          TYPE = next statement  ===> 86
-            LINE = 17
-        }
-        {
-90          TYPE = scalar assignment  ===> 91
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-88              TYPE = addition  ===> 89
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-86                  TYPE = constant item  ===> 87
-                    FLAGS = (SCALAR)
-                    SV = IV(9)
-                }
-                {
-                    TYPE = null operation  ===> (88)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-87                      TYPE = scalar variable  ===> 88
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (90)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-89                  TYPE = scalar variable  ===> 90
-                    FLAGS = (SCALAR)
-                    GV = main::ST_MTIME
-                }
-            }
-        }
-        {
-91          TYPE = next statement  ===> 92
-            LINE = 18
-        }
-        {
-96          TYPE = scalar assignment  ===> 97
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-94              TYPE = addition  ===> 95
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-92                  TYPE = constant item  ===> 93
-                    FLAGS = (SCALAR)
-                    SV = IV(10)
-                }
-                {
-                    TYPE = null operation  ===> (94)
-                      (was ref-to-scalar cast)
-                    FLAGS = (SCALAR,KIDS)
-                    {
-93                      TYPE = scalar variable  ===> 94
-                        FLAGS = (SCALAR)
-                        GV = main::[
-                    }
-                }
-            }
-            {
-                TYPE = null operation  ===> (96)
-                  (was ref-to-scalar cast)
-                FLAGS = (SCALAR,KIDS,LVAL,SPECIAL)
-                {
-95                  TYPE = scalar variable  ===> 96
-                    FLAGS = (SCALAR)
-                    GV = main::ST_CTIME
-                }
-            }
-        }
-        {
-97          TYPE = next statement  ===> 98
-            LINE = 19
-        }
-        {
-102         TYPE = scalar assignment  ===> 103
-            FLAGS = (SCALAR,KIDS,STACKED)
-            {
-100             TYPE = addition  ===> 101
-                TARG = 1
-                FLAGS = (SCALAR,KIDS)
-                {
-98                  TYPE = constant item  ===> 99
-                    FLAGS = (SCALAR)
-                    SV = IV(11)
-                }
diff --git a/bar.pm b/bar.pm
deleted file mode 100755 (executable)
index 330c168..0000000
--- a/bar.pm
+++ /dev/null
@@ -1,10 +0,0 @@
-#!./perl
-
-print "";
-@c = caller;
-print "@c";
-__END__
-
-require POSIX; import POSIX getpid;
-
-print &getpid, "\n";
diff --git a/byacc b/byacc
new file mode 120000 (symlink)
index 0000000..14034ef
--- /dev/null
+++ b/byacc
@@ -0,0 +1 @@
+../perl-byacc1.8.2/byacc
\ No newline at end of file
index d3a0e57..22594b7 100644 (file)
--- a/config.H
+++ b/config.H
-#ifndef config_h
-#define config_h
-/* config.h
- * This file was produced by running the config.h.SH script, which
+/* config.H:  This is a sample config.h file.  config.h is produced 
+   from config_h.SH by Configure.  This file is intended only for
+   those having problems with the regular Configure process.
+*/
+/*
+ * This file was produced by running the config_h.SH script, which
  * gets its values from config.sh, which is generally produced by
  * running Configure.
  *
  * Feel free to modify any of this as the need arises.  Note, however,
  * that running config.h.SH again will wipe out any changes you've made.
  * For a more permanent change edit config.sh and rerun config.h.SH.
+ *
+ * $Id: Config_h.U,v 3.0.1.2 1993/08/24 12:13:20 ram Exp $
  */
- /*SUPPRESS 460*/
-
-
-/* EUNICE
- *     This symbol, if defined, indicates that the program is being compiled
- *     under the EUNICE package under VMS.  The program will need to handle
- *     things like files that don't go away the first time you unlink them,
- *     due to version numbering.  It will also need to compensate for lack
- *     of a respectable link() command.
- */
-/* VMS
- *     This symbol, if defined, indicates that the program is running under
- *     VMS.  It is currently only set in conjunction with the EUNICE symbol.
- */
-/*#undef       EUNICE          /**/
-/*#undef       VMS             /**/
 
-/* LOC_SED
- *     This symbol holds the complete pathname to the sed program.
+/* Configuration time: Thu Apr 28 11:13:38 EDT 1994
+ * Configured by: doughera
+ * Target system: sunos einstein 4.1.3 3 sun4c 
  */
-#define LOC_SED "/bin/sed"             /**/
 
-/* ALIGNBYTES
- *     This symbol contains the number of bytes required to align a double.
- *     Usual values are 2, 4, and 8.
- */
-#define ALIGNBYTES 8           /**/
+#ifndef _config_h_
+#define _config_h_
 
-/* BIN
- *     This symbol holds the name of the directory in which the user wants
- *     to keep publicly executable images for the package in question.  It
- *     is most often a local directory such as /usr/local/bin.
+/* BIN:
+ *     This symbol holds the path of the bin directory where the package will
+ *     be installed. Program must be prepared to deal with ~name substitution.
  */
-#define BIN "/usr/local/bin"             /**/
+#define BIN "/usr/local/bin"   /**/
 
-/* BYTEORDER
- *     This symbol contains an encoding of the order of bytes in a long.
- *     Usual values (in hex) are 0x1234, 0x4321, 0x2143, 0x3412...
+/* BYTEORDER:
+ *     This symbol hold the hexadecimal constant defined in byteorder,
+ *     i.e. 0x1234 or 0x4321, etc...
  */
-#define BYTEORDER 0x4321               /**/
+#define BYTEORDER 0x4321       /* large digits for MSB */
 
-/* CPPSTDIN
+/* CPPSTDIN:
  *     This symbol contains the first part of the string which will invoke
  *     the C preprocessor on the standard input and produce to standard
- *     output.  Typical value of "cc -E" or "/lib/cpp".
+ *     output.  Typical value of "cc -E" or "/lib/cpp", but it can also
+ *     call a wrapper. See CPPRUN.
  */
-/* CPPMINUS
+/* CPPMINUS:
  *     This symbol contains the second part of the string which will invoke
  *     the C preprocessor on the standard input and produce to standard
  *     output.  This symbol will have the value "-" if CPPSTDIN needs a minus
  *     to specify standard input, otherwise the value is "".
  */
-#define CPPSTDIN "/usr/lib/cpp"
+#define CPPSTDIN "/home/doughera/src/perl5a8-ad/cppstdin"
 #define CPPMINUS ""
 
-/* HAS_BCMP
- *     This symbol, if defined, indicates that the bcmp routine is available
- *     to compare blocks of memory.  If undefined, use memcmp.  If that's
- *     not available, roll your own.
+/* HAS_BCMP:
+ *     This symbol is defined if the bcmp() routine is available to
+ *     compare blocks of memory.
  */
-#define        HAS_BCMP                /**/
+#define HAS_BCMP       /**/
 
-/* HAS_BCOPY
- *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy blocks of memory.  Otherwise you should probably use memcpy().
- *     If neither is defined, roll your own.
- */
-/* SAFE_BCOPY
- *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping copy blocks of bcopy.  Otherwise you
- *     should probably use memmove() or memcpy().  If neither is defined,
- *     roll your own.
+/* HAS_BCOPY:
+ *     This symbol is defined if the bcopy() routine is available to
+ *     copy blocks of memory.
  */
-#define        HAS_BCOPY               /**/
-#define        SAFE_BCOPY              /**/
+#define HAS_BCOPY      /**/
 
-/* HAS_BZERO
- *     This symbol, if defined, indicates that the bzero routine is available
- *     to zero blocks of memory.  Otherwise you should probably use memset()
- *     or roll your own.
+/* HAS_BZERO:
+ *     This symbol is defined if the bzero() routine is available to
+ *     set a memory block to 0.
  */
-#define        HAS_BZERO               /**/
+#define HAS_BZERO      /**/
 
-/* CASTNEGFLOAT
- *     This symbol, if defined, indicates that this C compiler knows how to
- *     cast negative or large floating point numbers to unsigned longs, ints
- *     and shorts.
+/* CASTNEGFLOAT:
+ *     This symbol is defined if the C compiler can cast negative
+ *     numbers to unsigned longs, ints and shorts.
  */
-/* CASTFLAGS
+/* CASTFLAGS:
  *     This symbol contains flags that say what difficulties the compiler
  *     has casting odd floating values to unsigned long:
+ *             0 = ok
  *             1 = couldn't cast < 0
  *             2 = couldn't cast >= 0x80000000
  */
-#define        CASTNEGFLOAT    /**/
-#define        CASTFLAGS 0     /**/
+#define        CASTNEGFLOAT            /**/
+#define CASTFLAGS 0            /**/
 
-/* CHARSPRINTF
+/* CHARSPRINTF:
  *     This symbol is defined if this system declares "char *sprintf()" in
  *     stdio.h.  The trend seems to be to declare it as "int sprintf()".  It
  *     is up to the package author to declare sprintf correctly based on the
  */
 #define        CHARSPRINTF     /**/
 
-/* HAS_CHSIZE
+/* HAS_CHSIZE:
  *     This symbol, if defined, indicates that the chsize routine is available
  *     to truncate files.  You might need a -lx to get this routine.
  */
-/*#undef       HAS_CHSIZE              /**/
+/*#define      HAS_CHSIZE              /**/
+
+/* HASCONST:
+ *     This symbol, if defined, indicates that this C compiler knows about
+ *     the const type. There is no need to actually test for that symbol
+ *     within your programs. The mere use of the "const" keyword will
+ *     trigger the necessary tests.
+ */
+/*#define HASCONST     /**/
+#ifndef HASCONST
+#define const
+#endif
 
-/* HAS_CRYPT
+/* HAS_CRYPT:
  *     This symbol, if defined, indicates that the crypt routine is available
  *     to encrypt passwords and the like.
  */
-#define        HAS_CRYPT               /**/
+#define HAS_CRYPT              /**/
 
-/* CSH
+/* CSH:
  *     This symbol, if defined, indicates that the C-shell exists.
  *     If defined, contains the full pathname of csh.
  */
-#define CSH "/bin/csh"         /**/
+#define CSH "/usr/bin/csh"             /**/
 
-/* DOSUID
+/* DOSUID:
  *     This symbol, if defined, indicates that the C program should
  *     check the script that it is executing for setuid/setgid bits, and
  *     attempt to emulate setuid/setgid on systems that have disabled
  *     subprocesses to which it must pass the filename rather than the
  *     file descriptor of the script to be executed.
  */
-/*#undef DOSUID                /**/
+/*#define DOSUID               /**/
 
-/* HAS_DUP2
- *     This symbol, if defined, indicates that the dup2 routine is available
- *     to dup file descriptors.  Otherwise you should use dup().
+/* HAS_DUP2:
+ *     This symbol, if defined, indicates that the dup2 routine is
+ *     available to duplicate file descriptors.
  */
-#define        HAS_DUP2                /**/
+#define HAS_DUP2       /**/
 
-/* HAS_FCHMOD
+/* HAS_FCHMOD:
  *     This symbol, if defined, indicates that the fchmod routine is available
  *     to change mode of opened files.  If unavailable, use chmod().
  */
-#define        HAS_FCHMOD              /**/
+#define HAS_FCHMOD             /**/
 
-/* HAS_FCHOWN
+/* HAS_FCHOWN:
  *     This symbol, if defined, indicates that the fchown routine is available
  *     to change ownership of opened files.  If unavailable, use chown().
  */
-#define        HAS_FCHOWN              /**/
+#define HAS_FCHOWN             /**/
 
-/* HAS_FCNTL
+/* HAS_FCNTL:
  *     This symbol, if defined, indicates to the C program that
  *     the fcntl() function exists.
  */
-#define        HAS_FCNTL               /**/
+#define HAS_FCNTL              /**/
 
-/* FLEXFILENAMES
+/* FLEXFILENAMES:
  *     This symbol, if defined, indicates that the system supports filenames
  *     longer than 14 characters.
  */
 #define        FLEXFILENAMES           /**/
 
-/* HAS_FLOCK
- *     This symbol, if defined, indicates that the flock() routine is
+/* HAS_FLOCK:
+ *     This symbol, if defined, indicates that the flock routine is
  *     available to do file locking.
  */
-#define        HAS_FLOCK               /**/
+#define HAS_FLOCK              /**/
 
-/* HAS_GETGROUPS
+/* HAS_GETGROUPS:
  *     This symbol, if defined, indicates that the getgroups() routine is
  *     available to get the list of process groups.  If unavailable, multiple
  *     groups are probably not supported.
  */
-#define        HAS_GETGROUPS           /**/
+#define HAS_GETGROUPS          /**/
 
-/* HAS_GETHOSTENT
- *     This symbol, if defined, indicates that the gethostent() routine is
+/* HAS_GETHOSTENT:
+ *     This symbol, if defined, indicates that the gethostent routine is
  *     available to lookup host names in some data base or other.
  */
-#define        HAS_GETHOSTENT          /**/
+#define HAS_GETHOSTENT         /**/
+
+/* HAS_UNAME:
+ *     This symbol, if defined, indicates that the C program may use the
+ *     uname() routine to derive the host name.  See also HAS_GETHOSTNAME
+ *     and PHOSTNAME.
+ */
+#define HAS_UNAME              /**/
 
-/* HAS_GETPGRP
- *     This symbol, if defined, indicates that the getpgrp() routine is
+/* HAS_GETPGRP:
+ *     This symbol, if defined, indicates that the getpgrp routine is
  *     available to get the current process group.
  */
-#define        HAS_GETPGRP             /**/
+#define HAS_GETPGRP            /**/
 
-/* HAS_GETPGRP2
+/* HAS_GETPGRP2:
  *     This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
  *     routine is available to get the current process group.
  */
-/*#undef       HAS_GETPGRP2            /**/
+/*#define HAS_GETPGRP2         /**/
 
-/* HAS_GETPRIORITY
- *     This symbol, if defined, indicates that the getpriority() routine is
+/* HAS_GETPRIORITY:
+ *     This symbol, if defined, indicates that the getpriority routine is
  *     available to get a process's priority.
  */
-#define        HAS_GETPRIORITY         /**/
-
-/* HAS_HTONS
- *     This symbol, if defined, indicates that the htons routine (and friends)
- *     are available to do network order byte swapping.
- */
-/* HAS_HTONL
- *     This symbol, if defined, indicates that the htonl routine (and friends)
- *     are available to do network order byte swapping.
- */
-/* HAS_NTOHS
- *     This symbol, if defined, indicates that the ntohs routine (and friends)
- *     are available to do network order byte swapping.
- */
-/* HAS_NTOHL
- *     This symbol, if defined, indicates that the ntohl routine (and friends)
- *     are available to do network order byte swapping.
- */
-#define        HAS_HTONS       /**/
-#define        HAS_HTONL       /**/
-#define        HAS_NTOHS       /**/
-#define        HAS_NTOHL       /**/
+#define HAS_GETPRIORITY                /**/
 
-/* index
- *     This preprocessor symbol is defined, along with rindex, if the system
- *     uses the strchr and strrchr routines instead.
- */
-/* rindex
- *     This preprocessor symbol is defined, along with index, if the system
- *     uses the strchr and strrchr routines instead.
- */
-/*#undef       index strchr    /* cultural */
-/*#undef       rindex strrchr  /*  differences? */
-
-/* HAS_ISASCII
- *     This symbol, if defined, indicates that the isascii routine is available
- *     to test characters for asciiness.
- */
-#define        HAS_ISASCII             /**/
-
-/* HAS_KILLPG
+/* HAS_KILLPG:
  *     This symbol, if defined, indicates that the killpg routine is available
  *     to kill process groups.  If unavailable, you probably should use kill
  *     with a negative process number.
  */
-#define        HAS_KILLPG              /**/
+#define HAS_KILLPG     /**/
 
-/* HAS_LSTAT
- *     This symbol, if defined, indicates that the lstat() routine is
- *     available to stat symbolic links.
+/* HAS_LINK:
+ *     This symbol, if defined, indicates that the link routine is
+ *     available to create hard links.
  */
-#define        HAS_LSTAT               /**/
+#define HAS_LINK       /**/
 
-/* HAS_MEMCMP
- *     This symbol, if defined, indicates that the memcmp routine is available
- *     to compare blocks of memory.  If undefined, roll your own.
+/* HAS_LSTAT:
+ *     This symbol, if defined, indicates that the lstat routine is
+ *     available to do file stats on symbolic links.
  */
-#define        HAS_MEMCMP              /**/
+#define HAS_LSTAT              /**/
 
-/* HAS_MEMCPY
- *     This symbol, if defined, indicates that the memcpy routine is available
- *     to copy blocks of memory.  Otherwise you should probably use bcopy().
- *     If neither is defined, roll your own.
+/* HAS_MEMCMP:
+ *     This symbol, if defined, indicates that the memcmp routine is available
+ *     to compare blocks of memory.
  */
-/* SAFE_MEMCPY
+#define HAS_MEMCMP     /**/
+
+/* HAS_MEMCPY:
  *     This symbol, if defined, indicates that the memcpy routine is available
- *     to copy potentially overlapping copy blocks of memory.  Otherwise you
- *     should probably use memmove() or bcopy().  If neither is defined,
- *     roll your own.
+ *     to copy blocks of memory.
  */
-#define        HAS_MEMCPY              /**/
-/*#undef       SAFE_MEMCPY             /**/
+#define HAS_MEMCPY     /**/
 
-/* HAS_MEMMOVE
+/* HAS_MEMMOVE:
  *     This symbol, if defined, indicates that the memmove routine is available
- *     to move potentially overlapping blocks of memory.  Otherwise you
- *     should use bcopy() or roll your own.
+ *     to copy potentially overlapping blocks of memory. This should be used
+ *     only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
+ *     own version.
  */
-/*#undef       HAS_MEMMOVE             /**/
+/*#define HAS_MEMMOVE  /**/
 
-/* HAS_MEMSET
+/* HAS_MEMSET:
  *     This symbol, if defined, indicates that the memset routine is available
- *     to set a block of memory to a character.  If undefined, roll your own.
+ *     to set blocks of memory.
  */
-#define        HAS_MEMSET              /**/
+#define HAS_MEMSET     /**/
 
-/* HAS_MKDIR
+/* HAS_MKDIR:
  *     This symbol, if defined, indicates that the mkdir routine is available
  *     to create directories.  Otherwise you should fork off a new process to
  *     exec /bin/mkdir.
  */
-#define        HAS_MKDIR               /**/
+#define HAS_MKDIR              /**/
 
-/* HAS_MSG
+/* HAS_MSG:
  *     This symbol, if defined, indicates that the entire msg*(2) library is
- *     supported.
+ *     supported (IPC mechanism based on message queues).
  */
-#define        HAS_MSG         /**/
+#define HAS_MSG                /**/
 
-/* HAS_MSGCTL
+/* HAS_MSGCTL:
  *     This symbol, if defined, indicates that the msgctl() routine is
- *     available to control message passing.
+ *     available to perform message control operations.
  */
-#define        HAS_MSGCTL              /**/
+#define HAS_MSGCTL             /**/
 
-/* HAS_MSGGET
+/* HAS_MSGGET:
  *     This symbol, if defined, indicates that the msgget() routine is
- *     available to get messages.
+ *     available to get a new message queue.
  */
-#define        HAS_MSGGET              /**/
+#define HAS_MSGGET             /**/
 
-/* HAS_MSGRCV
+/* HAS_MSGRCV:
  *     This symbol, if defined, indicates that the msgrcv() routine is
- *     available to receive messages.
+ *     available to extract a message from the message queue.
  */
-#define        HAS_MSGRCV              /**/
+#define HAS_MSGRCV             /**/
 
-/* HAS_MSGSND
+/* HAS_MSGSND:
  *     This symbol, if defined, indicates that the msgsnd() routine is
- *     available to send messages.
- */
-#define        HAS_MSGSND              /**/
-
-/* HAS_NDBM
- *     This symbol, if defined, indicates that ndbm.h exists and should
- *     be included.
- */
-#define        HAS_NDBM                /**/
-
-/* HAS_ODBM
- *     This symbol, if defined, indicates that dbm.h exists and should
- *     be included.
+ *     available to send a message into the message queue.
  */
-#define        HAS_ODBM                /**/
+#define HAS_MSGSND             /**/
 
-/* HAS_OPEN3
+/* HAS_OPEN3:
  *     This manifest constant lets the C program know that the three
  *     argument form of open(2) is available.
  */
-#define        HAS_OPEN3               /**/
+#define HAS_OPEN3              /**/
 
-/* HAS_READDIR
- *     This symbol, if defined, indicates that the readdir routine is available
- *     from the C library to read directories.
- */
-#define        HAS_READDIR             /**/
-
-/* HAS_RENAME
+/* HAS_RENAME:
  *     This symbol, if defined, indicates that the rename routine is available
  *     to rename files.  Otherwise you should do the unlink(), link(), unlink()
  *     trick.
  */
-#define        HAS_RENAME              /**/
+#define HAS_RENAME     /**/
 
-/* HAS_REWINDDIR
- *     This symbol, if defined, indicates that the rewindir routine is
- *     available to rewind directories.
+/* HAS_RMDIR:
+ *     This symbol, if defined, indicates that the rmdir routine is
+ *     available to remove directories. Otherwise you should fork off a
+ *     new process to exec /bin/rmdir.
  */
-#define        HAS_REWINDDIR           /**/
+#define HAS_RMDIR              /**/
 
-/* HAS_RMDIR
- *     This symbol, if defined, indicates that the rmdir routine is available
- *     to remove directories.  Otherwise you should fork off a new process to
- *     exec /bin/rmdir.
- */
-#define        HAS_RMDIR               /**/
-
-/* HAS_SEEKDIR
- *     This symbol, if defined, indicates that the seekdir routine is
- *     available to seek into directories.
+/* HAS_SELECT:
+ *     This symbol, if defined, indicates that the select routine is
+ *     available to select active file descriptors. If the timeout field
+ *     is used, <sys/time.h> may need to be included.
  */
-#define        HAS_SEEKDIR             /**/
+#define HAS_SELECT     /**/
 
-/* HAS_SELECT
- *     This symbol, if defined, indicates that the select() subroutine
- *     exists.
- */
-#define        HAS_SELECT      /**/
-
-/* HAS_SEM
+/* HAS_SEM:
  *     This symbol, if defined, indicates that the entire sem*(2) library is
  *     supported.
  */
-#define        HAS_SEM         /**/
+#define HAS_SEM                /**/
 
-/* HAS_SEMCTL
+/* HAS_SEMCTL:
  *     This symbol, if defined, indicates that the semctl() routine is
- *     available to control semaphores.
+ *     available to perform semaphore control operations.
  */
-#define        HAS_SEMCTL              /**/
+#define HAS_SEMCTL     /**/
 
-/* HAS_SEMGET
+/* HAS_SEMGET:
  *     This symbol, if defined, indicates that the semget() routine is
- *     available to get semaphores ids.
+ *     available to get a set of semaphores.
  */
-#define        HAS_SEMGET              /**/
+#define HAS_SEMGET     /**/
 
-/* HAS_SEMOP
+/* HAS_SEMOP:
  *     This symbol, if defined, indicates that the semop() routine is
- *     available to perform semaphore operations.
+ *     available to execute semaphore operations.
  */
-#define        HAS_SEMOP               /**/
+#define HAS_SEMOP              /**/
 
-/* HAS_SETEGID
+/* HAS_SETEGID:
  *     This symbol, if defined, indicates that the setegid routine is available
  *     to change the effective gid of the current program.
  */
-#define        HAS_SETEGID             /**/
+#define HAS_SETEGID            /**/
 
-/* HAS_SETEUID
+/* HAS_SETEUID:
  *     This symbol, if defined, indicates that the seteuid routine is available
  *     to change the effective uid of the current program.
  */
-#define        HAS_SETEUID             /**/
+#define HAS_SETEUID            /**/
+
+/* HAS_SETPGID:
+ *     This symbol, if defined, indicates that the setpgid routine is
+ *     available to set process group ID.
+ */
+#define HAS_SETPGID    /**/
 
-/* HAS_SETPGRP
- *     This symbol, if defined, indicates that the setpgrp() routine is
+/* HAS_SETPGRP:
+ *     This symbol, if defined, indicates that the setpgrp routine is
  *     available to set the current process group.
  */
-#define        HAS_SETPGRP             /**/
+#define HAS_SETPGRP            /**/
 
-/* HAS_SETPGRP2
+/* HAS_SETPGRP2:
  *     This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
  *     routine is available to set the current process group.
  */
-/*#undef       HAS_SETPGRP2            /**/
+/*#define HAS_SETPGRP2         /**/
 
-/* HAS_SETPRIORITY
- *     This symbol, if defined, indicates that the setpriority() routine is
+/* HAS_SETPRIORITY:
+ *     This symbol, if defined, indicates that the setpriority routine is
  *     available to set a process's priority.
  */
-#define        HAS_SETPRIORITY         /**/
+#define HAS_SETPRIORITY                /**/
 
-/* HAS_SETREGID
+/* HAS_SETREGID:
  *     This symbol, if defined, indicates that the setregid routine is
- *     available to change the real and effective gid of the current program.
+ *     available to change the real and effective gid of the current
+ *     process.
  */
-/* HAS_SETRESGID
+/* HAS_SETRESGID:
  *     This symbol, if defined, indicates that the setresgid routine is
  *     available to change the real, effective and saved gid of the current
- *     program.
+ *     process.
  */
-#define        HAS_SETREGID            /**/
-/*#undef       HAS_SETRESGID           /**/
+#define HAS_SETREGID           /**/
+/*#define HAS_SETRESGID                /**/
 
-/* HAS_SETREUID
+/* HAS_SETREUID:
  *     This symbol, if defined, indicates that the setreuid routine is
- *     available to change the real and effective uid of the current program.
+ *     available to change the real and effective uid of the current
+ *     process.
  */
-/* HAS_SETRESUID
+/* HAS_SETRESUID:
  *     This symbol, if defined, indicates that the setresuid routine is
  *     available to change the real, effective and saved uid of the current
- *     program.
+ *     process.
  */
-#define        HAS_SETREUID            /**/
-/*#undef       HAS_SETRESUID           /**/
+#define HAS_SETREUID           /**/
+/*#define HAS_SETRESUID                /**/
 
-/* HAS_SETRGID
+/* HAS_SETRGID:
  *     This symbol, if defined, indicates that the setrgid routine is available
  *     to change the real gid of the current program.
  */
-#define        HAS_SETRGID             /**/
+#define HAS_SETRGID            /**/
 
-/* HAS_SETRUID
+/* HAS_SETRUID:
  *     This symbol, if defined, indicates that the setruid routine is available
  *     to change the real uid of the current program.
  */
-#define        HAS_SETRUID             /**/
+#define HAS_SETRUID            /**/
 
-/* HAS_SHM
- *     This symbol, if defined, indicates that the entire shm*(2) library is
- *     supported.
+/* HAS_SETSID:
+ *     This symbol, if defined, indicates that the setsid routine is
+ *     available to set the process group ID.
  */
-#define        HAS_SHM         /**/
+#define HAS_SETSID     /**/
 
-/* HAS_SHMAT
- *     This symbol, if defined, indicates that the shmat() routine is
- *     available to attach a shared memory segment.
- */
-/* VOID_SHMAT
- *     This symbol, if defined, indicates that the shmat() routine
- *     returns a pointer of type void*.
+/* HAS_SHM:
+ *     This symbol, if defined, indicates that the entire shm*(2) library is
+ *     supported.
  */
-#define        HAS_SHMAT               /**/
+#define HAS_SHM                /**/
 
-/*#undef       VOIDSHMAT               /**/
-
-/* HAS_SHMCTL
+/* HAS_SHMCTL:
  *     This symbol, if defined, indicates that the shmctl() routine is
- *     available to control a shared memory segment.
+ *     available to perform shared memory control operations.
  */
-#define        HAS_SHMCTL              /**/
+#define HAS_SHMCTL             /**/
 
-/* HAS_SHMDT
+/* HAS_SHMDT:
  *     This symbol, if defined, indicates that the shmdt() routine is
- *     available to detach a shared memory segment.
+ *     available to detach a shared memory segment from the process space.
  */
-#define        HAS_SHMDT               /**/
+#define HAS_SHMDT              /**/
 
-/* HAS_SHMGET
+/* HAS_SHMGET:
  *     This symbol, if defined, indicates that the shmget() routine is
- *     available to get a shared memory segment id.
+ *     available to request a shared memory segment from the kernel.
  */
-#define        HAS_SHMGET              /**/
+#define HAS_SHMGET             /**/
 
-/* HAS_SOCKET
+/* HAS_SOCKET:
  *     This symbol, if defined, indicates that the BSD socket interface is
  *     supported.
  */
-/* HAS_SOCKETPAIR
- *     This symbol, if defined, indicates that the BSD socketpair call is
+/* HAS_SOCKETPAIR:
+ *     This symbol, if defined, indicates that the BSD socketpair() call is
  *     supported.
  */
-/* OLDSOCKET
+/* USE_OLDSOCKET:
  *     This symbol, if defined, indicates that the 4.1c BSD socket interface
- *     is supported instead of the 4.2/4.3 BSD socket interface.
+ *     is supported instead of the 4.2/4.3 BSD socket interface. For instance,
+ *     there is no setsockopt() call.
  */
-#define        HAS_SOCKET              /**/
-
-#define        HAS_SOCKETPAIR  /**/
+#define HAS_SOCKET             /**/
+#define HAS_SOCKETPAIR /**/
+/*#define USE_OLDSOCKET        /**/
 
-/*#undef       OLDSOCKET       /**/
-
-/* STATBLOCKS
+/* USE_STAT_BLOCKS:
  *     This symbol is defined if this system has a stat structure declaring
  *     st_blksize and st_blocks.
  */
-#define        STATBLOCKS      /**/
+#define USE_STAT_BLOCKS        /**/
 
-/* STDSTDIO
+/* USE_STD_STDIO:
  *     This symbol is defined if this system has a FILE structure declaring
  *     _ptr and _cnt in stdio.h.
  */
-#define        STDSTDIO        /**/
+#define USE_STD_STDIO  /**/
 
-/* STRUCTCOPY
+/* USE_STRUCT_COPY:
  *     This symbol, if defined, indicates that this C compiler knows how
  *     to copy structures.  If undefined, you'll need to use a block copy
  *     routine of some sort instead.
  */
-#define        STRUCTCOPY      /**/
-
-/* HAS_STRERROR
- *     This symbol, if defined, indicates that the strerror() routine is
- *     available to translate error numbers to strings.
- */
-/*#undef       HAS_STRERROR            /**/
+#define        USE_STRUCT_COPY /**/
 
-/* HAS_SYMLINK
+/* HAS_SYMLINK:
  *     This symbol, if defined, indicates that the symlink routine is available
  *     to create symbolic links.
  */
-#define        HAS_SYMLINK             /**/
+#define HAS_SYMLINK    /**/
 
-/* HAS_SYSCALL
- *     This symbol, if defined, indicates that the syscall routine is available
- *     to call arbitrary system calls.  If undefined, that's tough.
+/* HAS_SYSCALL:
+ *     This symbol, if defined, indicates that the syscall routine is
+ *     available to call arbitrary system calls. If undefined, that's tough.
  */
-#define        HAS_SYSCALL             /**/
+#define HAS_SYSCALL    /**/
 
-/* HAS_TELLDIR
- *     This symbol, if defined, indicates that the telldir routine is
- *     available to tell your location in directories.
+/* HAS_SYSTEM:
+ *     This symbol, if defined, indicates that the system routine is
+ *     available to issue a shell command.
  */
-#define        HAS_TELLDIR             /**/
+#define HAS_SYSTEM     /**/
 
-/* HAS_TRUNCATE
+/* Time_t:
+ *     This symbol holds the type returned by time(). It can be long,
+ *     or time_t on BSD sites (in which case <sys/types.h> should be
+ *     included).
+ */
+#define Time_t long            /* Time type */
+
+/* HAS_TIMES:
+ *     This symbol, if defined, indicates that the times() routine exists.
+ *     Note that this became obsolete on some systems (SUNOS), which now
+ * use getrusage(). It may be necessary to include <sys/times.h>.
+ */
+#define HAS_TIMES              /**/
+
+/* HAS_TRUNCATE:
  *     This symbol, if defined, indicates that the truncate routine is
  *     available to truncate files.
  */
-#define        HAS_TRUNCATE            /**/
+#define HAS_TRUNCATE   /**/
 
-/* HAS_VFORK
- *     This symbol, if defined, indicates that vfork() exists.
+/* I_NDIR:
+ *     This symbol, if defined, indicates that the program should include the
+ *     system's version of ndir.h, rather than the one with this package.
  */
-#define        HAS_VFORK       /**/
+/*#define I_NDIR               /**/
 
-/* VOIDSIG
- *     This symbol is defined if this system declares "void (*signal())()" in
- *     signal.h.  The old way was to declare it as "int (*signal())()".  It
+/* VOIDSIG:
+ *     This symbol is defined if this system declares "void (*signal(...))()" in
+ *     signal.h.  The old way was to declare it as "int (*signal(...))()".  It
  *     is up to the package author to declare things correctly based on the
  *     symbol.
  */
-/* TO_SIGNAL
- *     This symbol's value is either "void" or "int", corresponding to the
- *     appropriate return "type" of a signal handler.  Thus, one can declare
- *     a signal handler using "TO_SIGNAL (*handler())()", and define the
- *     handler using "TO_SIGNAL handler(sig)".
- */
-#define        VOIDSIG         /**/
-#define        TO_SIGNAL       int     /**/
+#define VOIDSIG        /**/
 
-/* HASVOLATILE
+/* HASVOLATILE:
  *     This symbol, if defined, indicates that this C compiler knows about
  *     the volatile declaration.
  */
-/*#undef       HASVOLATILE     /**/
+/*#define      HASVOLATILE     /**/
+#ifndef HASVOLATILE
+#define volatile
+#endif
 
-/* HAS_VPRINTF
+/* HAS_VPRINTF:
  *     This symbol, if defined, indicates that the vprintf routine is available
  *     to printf with a pointer to an argument list.  If unavailable, you
  *     may need to write your own, probably in terms of _doprnt().
  */
-/* CHARVSPRINTF
+/* USE_CHAR_VSPRINTF:
  *     This symbol is defined if this system has vsprintf() returning type
  *     (char*).  The trend seems to be to declare it as "int vsprintf()".  It
  *     is up to the package author to declare vsprintf correctly based on the
  *     symbol.
  */
-#define        HAS_VPRINTF     /**/
-#define        CHARVSPRINTF    /**/
+#define HAS_VPRINTF    /**/
+#define USE_CHAR_VSPRINTF      /**/
 
-/* HAS_WAIT4
+/* HAS_WAIT4:
  *     This symbol, if defined, indicates that wait4() exists.
  */
-#define        HAS_WAIT4       /**/
+#define HAS_WAIT4      /**/
 
-/* HAS_WAITPID
- *     This symbol, if defined, indicates that waitpid() exists.
+/* HAS_WAITPID:
+ *     This symbol, if defined, indicates that the waitpid routine is
+ *     available to wait for child process.
  */
-#define        HAS_WAITPID     /**/
+#define HAS_WAITPID    /**/
 
-/* GIDTYPE
- *     This symbol has a value like gid_t, int, ushort, or whatever type is
- *     used to declare group ids in the kernel.
+/* I_DBM:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <dbm.h>.
  */
-#define GIDTYPE gid_t          /**/
+#define I_DBM  /**/
 
-/* GROUPSTYPE
- *     This symbol has a value like gid_t, int, ushort, or whatever type is
- *     used in the return value of getgroups().
+/* I_DIRENT:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <dirent.h>. Using this symbol also triggers the definition
+ *     of the Direntry_t define which ends up being 'struct dirent' or
+ *     'struct direct' depending on the availability of <dirent.h>.
+ */
+/* DIRNAMLEN:
+ *     This symbol, if defined, indicates to the C program that the length
+ *     of directory entry names is provided by a d_namlen field.  Otherwise
+ *     you need to do strlen() on the d_name field.
  */
-#define GROUPSTYPE int         /**/
+#define I_DIRENT               /**/
+/*#define DIRNAMLEN    /**/
+#ifdef I_DIRENT
+#define Direntry_t struct dirent
+#else
+#define Direntry_t struct direct
+#endif
 
-/* I_FCNTL
+/* I_FCNTL:
  *     This manifest constant tells the C program to include <fcntl.h>.
  */
-/*#undef       I_FCNTL /**/
+/*#define I_FCNTL      /**/
 
-/* I_GDBM
+/* I_GDBM:
  *     This symbol, if defined, indicates that gdbm.h exists and should
  *     be included.
  */
-/*#undef       I_GDBM          /**/
+/*#define I_GDBM       /**/
 
-/* I_GRP
+/* I_GRP:
  *     This symbol, if defined, indicates to the C program that it should
- *     include grp.h.
+ *     include <grp.h>.
  */
-#define        I_GRP           /**/
+#define I_GRP          /**/
 
-/* I_NETINET_IN
- *     This symbol, if defined, indicates to the C program that it should
- *     include netinet/in.h.
- */
-/* I_SYS_IN
- *     This symbol, if defined, indicates to the C program that it should
- *     include sys/in.h.
+/* I_NDBM:
+ *     This symbol, if defined, indicates that ndbm.h exists and should
+ *     be included.
  */
-#define        I_NETINET_IN            /**/
-/*#undef       I_SYS_IN                /**/
+#define I_NDBM /**/
 
-/* I_PWD
+/* I_NETINET_IN:
  *     This symbol, if defined, indicates to the C program that it should
- *     include pwd.h.
- */
-/* PWQUOTA
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_quota.
+ *     include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
  */
-/* PWAGE
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_age.
+/* I_SYS_IN:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <sys/in.h> instead of <netinet/in.h>.
  */
-/* PWCHANGE
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_change.
+#define I_NETINET_IN   /**/
+/*#define I_SYS_IN             /**/
+
+/* I_STDARG:
+ *     This symbol, if defined, indicates that <stdarg.h> exists and should
+ *     be included.
  */
-/* PWCLASS
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_class.
+/*#define I_STDARG             /**/
+
+/* I_STDDEF:
+ *     This symbol, if defined, indicates that <stddef.h> exists and should
+ *     be included.
  */
-/* PWEXPIRE
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_expire.
+#define I_STDDEF       /**/
+
+/* I_STRING:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <string.h> (USG systems) instead of <strings.h> (BSD systems).
  */
-/* PWCOMMENT
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_comment.
+#define I_STRING               /**/
+
+/* I_SYS_DIR:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <sys/dir.h>.
  */
-#define        I_PWD           /**/
-/*#undef       PWQUOTA         /**/
-#define        PWAGE           /**/
-/*#undef       PWCHANGE        /**/
-/*#undef       PWCLASS         /**/
-/*#undef       PWEXPIRE        /**/
-#define        PWCOMMENT       /**/
+#define I_SYS_DIR              /**/
 
-/* I_SYS_FILE
- *     This manifest constant tells the C program to include <sys/file.h>.
+/* I_SYS_FILE:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <sys/file.h> to get definition of R_OK and friends.
  */
-#define        I_SYS_FILE      /**/
+#define I_SYS_FILE             /**/
 
-/* I_SYSIOCTL
- *     This symbol, if defined, indicates that sys/ioctl.h exists and should
- *     be included.
+/* I_SYS_IOCTL:
+ *     This symbol, if defined, indicates that <sys/ioctl.h> exists and should
+ *     be included. Otherwise, include <sgtty.h> or <termio.h>.
  */
-#define        I_SYSIOCTL              /**/
+#define        I_SYS_IOCTL             /**/
 
-/* I_TIME
- *     This symbol is defined if the program should include <time.h>.
+/* I_SYS_NDIR:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <sys/ndir.h>.
  */
-/* I_SYS_TIME
- *     This symbol is defined if the program should include <sys/time.h>.
+/*#define I_SYS_NDIR   /**/
+
+/* I_SYS_SELECT:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <sys/select.h> in order to get definition of struct timeval.
  */
-/* SYSTIMEKERNEL
- *     This symbol is defined if the program should include <sys/time.h>
- *     with KERNEL defined.
+/*#define I_SYS_SELECT /**/
+
+/* I_TIME:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <time.h>.
  */
-/* I_SYS_SELECT
- *     This symbol is defined if the program should include <sys/select.h>.
+/* I_SYS_TIME:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <sys/time.h>.
  */
-/*#undef       I_TIME          /**/
-#define        I_SYS_TIME      /**/
-/*#undef       SYSTIMEKERNEL   /**/
-/*#undef       I_SYS_SELECT    /**/
-
-/* I_UTIME
+/* I_SYS_TIME_KERNEL:
  *     This symbol, if defined, indicates to the C program that it should
- *     include utime.h.
+ *     include <sys/time.h> with KERNEL defined.
  */
-#define        I_UTIME         /**/
+/*#define I_TIME               /**/
+#define I_SYS_TIME             /**/
+/*#define I_SYS_TIME_KERNEL            /**/
 
-/* I_VARARGS
+/* I_UTIME:
  *     This symbol, if defined, indicates to the C program that it should
- *     include varargs.h.
+ *     include <utime.h>.
  */
-#define        I_VARARGS               /**/
+#define I_UTIME                /**/
 
-/* I_VFORK
+/* I_VARARGS:
  *     This symbol, if defined, indicates to the C program that it should
- *     include vfork.h.
+ *     include <varargs.h>.
  */
-#define        I_VFORK         /**/
+#define I_VARARGS              /**/
 
-/* INTSIZE
+/* INTSIZE:
  *     This symbol contains the size of an int, so that the C preprocessor
  *     can make decisions based on it.
  */
 #define INTSIZE 4              /**/
 
-/* I_DIRENT
- *     This symbol, if defined, indicates that the program should use the
- *     P1003-style directory routines, and include <dirent.h>.
+/* Off_t:
+ *     This symbol holds the type used to declare offsets in the kernel.
+ *     It can be int, long, off_t, etc... It may be necessary to include
+ *     <sys/types.h> to get any typedef'ed information.
  */
-/* I_SYS_DIR
- *     This symbol, if defined, indicates that the program should use the
- *     directory functions by including <sys/dir.h>.
+#define Off_t off_t            /* <offset> type */
+
+/* PRIVLIB:
+ *     This symbol contains the name of the private library for this package.
+ *     The library is private in the sense that it needn't be in anyone's
+ *     execution path, but it should be accessible by the world.  The program
+ *     should be prepared to do ~ expansion.
  */
-/* I_NDIR
- *     This symbol, if defined, indicates that the program should include the
- *     system's version of ndir.h, rather than the one with this package.
+#define PRIVLIB "/usr/local/lib/perl"          /**/
+
+/* RANDBITS:
+ *     This symbol contains the number of bits of random number the rand()
+ *     function produces.  Usual values are 15, 16, and 31.
  */
-/* I_SYS_NDIR
- *     This symbol, if defined, indicates that the program should include the
- *     system's version of sys/ndir.h, rather than the one with this package.
+#define RANDBITS 31            /**/
+
+/* SCRIPTDIR:
+ *     This symbol holds the name of the directory in which the user wants
+ *     to put publicly executable scripts for the package in question.  It
+ *     is often a directory that is mounted across diverse architectures.
+ *     Programs must be prepared to deal with ~name expansion.
  */
-/* I_MY_DIR
- *     This symbol, if defined, indicates that the program should compile
- *     the ndir.c code provided with the package.
+#define SCRIPTDIR "/usr/local/bin"     /**/
+
+/* STDCHAR:
+ *     This symbol is defined to be the type of char used in stdio.h.
+ *     It has the values "unsigned char" or "char".
  */
-/* DIRNAMLEN
- *     This symbol, if defined, indicates to the C program that the length
- *     of directory entry names is provided by a d_namlen field.  Otherwise
- *     you need to do strlen() on the d_name field.
+#define STDCHAR unsigned char  /**/
+
+/* Uid_t:
+ *     This symbol holds the type used to declare user ids in the kernel.
+ *     It can be int, ushort, uid_t, etc... It may be necessary to include
+ *     <sys/types.h> to get any typedef'ed information.
  */
-#define        I_DIRENT        /**/
-/*#undef       I_SYS_DIR       /**/
-/*#undef       I_NDIR          /**/
-/*#undef       I_SYS_NDIR      /**/
-/*#undef       I_MY_DIR        /**/
-/*#undef       DIRNAMLEN       /**/
+#define Uid_t uid_t            /* UID type */
 
-/* MYMALLOC
- *     This symbol, if defined, indicates that we're using our own malloc.
+/* EUNICE:
+ *     This symbol, if defined, indicates that the program is being compiled
+ *     under the EUNICE package under VMS.  The program will need to handle
+ *     things like files that don't go away the first time you unlink them,
+ *     due to version numbering.  It will also need to compensate for lack
+ *     of a respectable link() command.
  */
-/* MALLOCPTRTYPE
- *     This symbol defines the kind of ptr returned by malloc and realloc.
+/* VMS:
+ *     This symbol, if defined, indicates that the program is running under
+ *     VMS.  It is currently only set in conjunction with the EUNICE symbol.
  */
-#define MYMALLOC                       /**/
+/*#define EUNICE               /**/
+/*#define VMS          /**/
 
-#define MALLOCPTRTYPE char         /**/
+/* MEM_ALIGNBYTES:
+ *     This symbol contains the number of bytes required to align a
+ *     double. Usual values are 2, 4 and 8.
+ */
+#define MEM_ALIGNBYTES 8       /**/
 
+/* CASTI32:
+ *     This symbol is defined if the C compiler can cast negative
+ *     or large floating point numbers to 32-bit ints.
+ */
+#define        CASTI32         /**/
 
-/* RANDBITS
- *     This symbol contains the number of bits of random number the rand()
- *     function produces.  Usual values are 15, 16, and 31.
+/* HAS_HTONL:
+ *     This symbol, if defined, indicates that the htonl() routine (and
+ *     friends htons() ntohl() ntohs()) are available to do network
+ *     order byte swapping.
  */
-#define RANDBITS 31            /**/
+/* HAS_HTONS:
+ *     This symbol, if defined, indicates that the htons() routine (and
+ *     friends htonl() ntohl() ntohs()) are available to do network
+ *     order byte swapping.
+ */
+/* HAS_NTOHL:
+ *     This symbol, if defined, indicates that the ntohl() routine (and
+ *     friends htonl() htons() ntohs()) are available to do network
+ *     order byte swapping.
+ */
+/* HAS_NTOHS:
+ *     This symbol, if defined, indicates that the ntohs() routine (and
+ *     friends htonl() htons() ntohl()) are available to do network
+ *     order byte swapping.
+ */
+#define HAS_HTONL              /**/
+#define HAS_HTONS              /**/
+#define HAS_NTOHL              /**/
+#define HAS_NTOHS              /**/
 
-/* SCRIPTDIR
- *     This symbol holds the name of the directory in which the user wants
- *     to keep publicly executable scripts for the package in question.  It
- *     is often a directory that is mounted across diverse architectures.
+/* HAS_ISASCII:
+ *     This manifest constant lets the C program know that the
+ *     isascii is available.
  */
-#define SCRIPTDIR "/usr/local/bin"             /**/
+#define HAS_ISASCII            /**/
 
-/* SIG_NAME
- *     This symbol contains an list of signal names in order.
+/* HAS_READDIR:
+ *     This symbol, if defined, indicates that the readdir routine is
+ *     available to read directory entries. You may have to include
+ *     <dirent.h>. See I_DIRENT.
  */
-#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","LOST","USR1","USR2"               /**/
+#define HAS_READDIR            /**/
 
-/* STDCHAR
- *     This symbol is defined to be the type of char used in stdio.h.
- *     It has the values "unsigned char" or "char".
+/* HAS_SEEKDIR:
+ *     This symbol, if defined, indicates that the seekdir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
  */
-#define STDCHAR unsigned char  /**/
+#define HAS_SEEKDIR            /**/
+
+/* HAS_TELLDIR:
+ *     This symbol, if defined, indicates that the telldir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
+ */
+#define HAS_TELLDIR            /**/
+
+/* HAS_REWINDDIR:
+ *     This symbol, if defined, indicates that the rewinddir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
+ */
+#define HAS_REWINDDIR          /**/
+
+/* HAS_SAFE_BCOPY:
+ *     This symbol, if defined, indicates that the bcopy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+#define HAS_SAFE_BCOPY /**/
+
+/* HAS_SAFE_MEMCPY:
+ *     This symbol, if defined, indicates that the memcpy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+/*#define HAS_SAFE_MEMCPY      /**/
 
-/* UIDTYPE
- *     This symbol has a value like uid_t, int, ushort, or whatever type is
- *     used to declare user ids in the kernel.
+/* HAS_SETLOCALE:
+ *     This symbol, if defined, indicates that the setlocale routine is
+ *     available to handle locale-specific ctype implementations.
  */
-#define UIDTYPE uid_t          /**/
+#define HAS_SETLOCALE  /**/
 
-/* VOIDHAVE
+/* HAS_SHMAT:
+ *     This symbol, if defined, indicates that the shmat() routine is
+ *     available to attach a shared memory segment to the process space.
+ */
+#define HAS_SHMAT              /**/
+
+/* VOIDSHMAT:
+ *     This symbol, if defined, indicates that the shmat() routine
+ *     returns a pointer of type void*.  Otherwise, char* is assumed.
+ */
+/*#define      VOIDSHMAT               /**/
+
+/* HAS_STRERROR:
+ *     This symbol, if defined, indicates that the strerror routine is
+ *     available to translate error numbers to strings. See the writeup
+ *     of Strerror() in this file before you try to define your own.
+ */
+/* HAS_SYS_ERRLIST:
+ *     This symbol, if defined, indicates that the sys_errlist array is
+ *     available to translate error numbers to strings. The extern int
+ *     sys_nerr gives the size of that table.
+ */
+/* Strerror:
+ *     This preprocessor symbol is defined as a macro if strerror() is
+ *     not available to translate error numbers to strings but sys_errlist[]
+ *     array is there.
+ */
+/*#define HAS_STRERROR         /**/
+#define HAS_SYS_ERRLIST        /**/
+#ifdef HAS_STRERROR
+#  define Strerror strerror
+#else
+#define Strerror(e) ((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e]) /**/
+#endif
+
+/* HAS_VFORK:
+ *     This symbol, if defined, indicates that vfork() exists.
+ */
+/*#define HAS_VFORK    /**/
+
+/* USE_DYNAMIC_LOADING:
+ *     This symbol, if defined, indicates that dynamic loading of
+ *     some sort is available.
+ */
+#define USE_DYNAMIC_LOADING            /**/
+
+/* Gid_t:
+ *     This symbol holds the return type of getgid() and the type of
+ *     argument to setrgid() and related functions.  Typically,
+ *     it is the type of group ids in the kernel.
+ *     It can be int, ushort, uid_t, etc... It may be necessary to include
+ *     <sys/types.h> to get any typedef'ed information.
+ */
+#define Gid_t gid_t            /* Type for getgid(), etc... */
+
+/* GROUPSTYPE:
+ *     This symbol holds the type used for the second argument to
+ *     getgroups().  Usually, this is the same of gidtype, but
+ *     sometimes it isn't.  It can be int, ushort, uid_t, etc... 
+ *     It may be necessary to include <sys/types.h> to get any 
+ *     typedef'ed information.  This is only required if you have
+ *     getgroups().
+ */
+#ifdef HAS_GETGROUPS
+#define GROUPSTYPE int /* Type for 2nd arg to getgroups() */
+#endif
+
+/* I_DLFCN:
+ *     This symbol, if defined, indicates that <dlfcn.h> exists and should
+ *     be included.
+ */
+#define I_DLFCN                /**/
+
+/* I_MEMORY:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <memory.h>.
+ */
+#define I_MEMORY               /**/
+
+/* I_NET_ERRNO:
+ *     This symbol, if defined, indicates that <net/errno.h> exists and 
+ *     should be included.
+ */
+/*#define I_NET_ERRNO          /**/
+
+/* I_PWD:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <pwd.h>.
+ */
+/* PWQUOTA:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_quota.
+ */
+/* PWAGE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_age.
+ */
+/* PWCHANGE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_change.
+ */
+/* PWCLASS:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_class.
+ */
+/* PWEXPIRE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_expire.
+ */
+/* PWCOMMENT:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_comment.
+ */
+#define I_PWD          /**/
+/*#define PWQUOTA      /**/
+#define PWAGE  /**/
+/*#define PWCHANGE     /**/
+/*#define PWCLASS      /**/
+/*#define PWEXPIRE     /**/
+#define PWCOMMENT      /**/
+
+/* I_TERMIO:
+ *     This symbol, if defined, indicates that the program should include
+ *     <termio.h> rather than <sgtty.h>.  There are also differences in
+ *     the ioctl() calls that depend on the value of this symbol.
+ */
+/* I_TERMIOS:
+ *     This symbol, if defined, indicates that the program should include
+ *     the POSIX termios.h rather than sgtty.h or termio.h.
+ *     There are also differences in the ioctl() calls that depend on the
+ *     value of this symbol.
+ */
+/* I_SGTTY:
+ *     This symbol, if defined, indicates that the program should include
+ *     <sgtty.h> rather than <termio.h>.  There are also differences in
+ *     the ioctl() calls that depend on the value of this symbol.
+ */
+/*#define I_TERMIO             /**/
+#define I_TERMIOS              /**/
+/*#define I_SGTTY              /**/
+
+/* I_VFORK:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include vfork.h.
+ */
+/*#define I_VFORK      /**/
+
+/* LOC_SED:
+ *     This symbol holds the complete pathname to the sed program.
+ */
+#define LOC_SED        "/usr/bin/sed"  /**/
+
+/* Malloc_t:
+ *     This symbol is the type of pointer returned by malloc and realloc.
+ */
+#define Malloc_t char *                        /**/
+
+/* MYMALLOC:
+ *     This symbol, if defined, indicates that we're using our own malloc.
+ */
+#define MYMALLOC                       /**/
+
+/* CAN_PROTOTYPE:
+ *     If defined, this macro indicates that the C compiler can handle
+ *     function prototypes.
+ */
+/*#define      CAN_PROTOTYPE   /**/
+#ifdef CAN_PROTOTYPE
+#else
+#endif
+
+/* PTRSIZE:
+ *     This symbol contains the size of a pointer to a long so that 
+ *     the C preprocessor can make decisions based on it.
+ */
+#define PTRSIZE 4              /**/
+
+/* SIG_NAME:
+ *     This symbol contains a list of signal names in order. This is intended
+ *     to be used as a static array initialization, like this:
+ *             char *sig_name[] = { SIG_NAME };
+ *     The signals in the list are separated with commas, and each signal
+ *     is surrounded by double quotes. There is no leading SIG in the signal
+ *     name, i.e. SIGQUIT is known as "QUIT".
+ */
+#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","LOST","USR1","USR2"       /**/
+
+/* VOIDFLAGS:
  *     This symbol indicates how much support of the void type is given by this
  *     compiler.  What various bits mean:
  *
  *         2 = supports arrays of pointers to functions returning void
  *         4 = supports comparisons between pointers to void functions and
  *                 addresses of void functions
+ *         8 = suports declaration of generic void pointers
  *
- *     The package designer should define VOIDWANT to indicate the requirements
- *     of the package.  This can be done either by #defining VOIDWANT before
- *     including config.h, or by defining voidwant in Myinit.U.  If the level
- *     of void support necessary is not present, config.h defines void to "int",
- *     VOID to the empty string, and VOIDP to "char *".
- */
-/* void
- *     This symbol is used for void casts.  On implementations which support
- *     void appropriately, its value is "void".  Otherwise, its value maps
- *     to "int".
- */
-/* VOID
- *     This symbol's value is "void" if the implementation supports void
- *     appropriately.  Otherwise, its value is the empty string.  The primary
- *     use of this symbol is in specifying void parameter lists for function
- *     prototypes.
- */
-/* VOIDP
- *     This symbol is used for casting generic pointers.  On implementations
- *     which support void appropriately, its value is "void *".  Otherwise,
- *     its value is "char *".
- */
-#ifndef VOIDWANT
-#define VOIDWANT 7
+ *     The package designer should define VOIDUSED to indicate the requirements
+ *     of the package.  This can be done either by #defining VOIDUSED before
+ *     including config.h, or by defining defvoidused in Myinit.U.  If the
+ *     latter approach is taken, only those flags will be tested.  If the
+ *     level of void support necessary is not present, defines void to int.
+ */
+#ifndef VOIDUSED
+#  define VOIDUSED 15
 #endif
-#define VOIDHAVE 7
-#if (VOIDHAVE & VOIDWANT) != VOIDWANT
-#define void int               /* is void to be avoided? */
-#define VOID
-#define VOIDP (char *)
-#define M_VOID         /* Xenix strikes again */
+#define VOIDFLAGS 15
+#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
+#  define void int             /* is void to be avoided? */
+#  define M_VOID                       /* Xenix strikes again */
+#  define VOID
 #else
-#define VOID void
-#define VOIDP (void *)
+#  define VOID void
 #endif
 
-/* PRIVLIB
- *     This symbol contains the name of the private library for this package.
- *     The library is private in the sense that it needn't be in anyone's
- *     execution path, but it should be accessible by the world.  The program
- *     should be prepared to do ~ expansion.
+/*
+ * The following symbols are obsolete. They are mapped to the the new
+ * symbols only to ease the transition process. The sources should be
+ * updated so as to use the new symbols only, as the support for these
+ * obsolete symbols may end without notice.
  */
-#define PRIVLIB "/usr/local/lib/perl"          /**/
+
+#ifdef MEM_ALIGNBYTES
+#define ALIGNBYTES MEM_ALIGNBYTES
+#endif
+
+#ifdef USE_CHAR_VSPRINTF
+#define CHARVSPRINTF USE_CHAR_VSPRINTF
+#endif
+
+#ifdef Gid_t
+#define GIDTYPE Gid_t
+#endif
+
+#ifdef I_GDBM
+#define HAS_GDBM I_GDBM
+#endif
+
+#ifdef I_NDBM
+#define HAS_NDBM I_NDBM
+#endif
+
+#ifdef I_DBM
+#define HAS_ODBM I_DBM
+#endif
+
+#ifdef I_SYS_IOCTL
+#define I_SYSIOCTL I_SYS_IOCTL
+#endif
+
+#ifdef Malloc_t
+#define MALLOCPTRTYPE Malloc_t
+#endif
+
+#ifdef USE_OLDSOCKET
+#define OLDSOCKET USE_OLDSOCKET
+#endif
+
+#ifdef HAS_SAFE_BCOPY
+#define SAFE_BCOPY HAS_SAFE_BCOPY
+#endif
+
+#ifdef HAS_SAFE_MEMCPY
+#define SAFE_MEMCPY HAS_SAFE_MEMCPY
+#endif
+
+#ifdef USE_STAT_BLOCKS
+#define STATBLOCKS USE_STAT_BLOCKS
+#endif
+
+#ifdef USE_STD_STDIO
+#define STDSTDIO USE_STD_STDIO
+#endif
+
+#ifdef USE_STRUCT_COPY
+#define STRUCTCOPY USE_STRUCT_COPY
+#endif
+
+#ifdef Uid_t
+#define UIDTYPE Uid_t
+#endif
+
+#ifdef HAS_SYSTEM
+#define SYSTEM HAS_SYSTEM
+#endif
 
 #endif
index be6ef1c..d4252a3 100644 (file)
--- a/config.h
+++ b/config.h
@@ -10,7 +10,7 @@
  * $Id: Config_h.U,v 3.0.1.2 1993/08/24 12:13:20 ram Exp $
  */
 
-/* Configuration time: Mon Apr  4 15:17:26 PDT 1994
+/* Configuration time: Wed May  4 15:10:39 PDT 1994
  * Configured by: lwall
  * Target system: sunos scalpel 4.1.3 3 sun4c 
  */
 #ifndef _config_h_
 #define _config_h_
 
-/* EUNICE:
- *     This symbol, if defined, indicates that the program is being compiled
- *     under the EUNICE package under VMS.  The program will need to handle
- *     things like files that don't go away the first time you unlink them,
- *     due to version numbering.  It will also need to compensate for lack
- *     of a respectable link() command.
- */
-/* VMS:
- *     This symbol, if defined, indicates that the program is running under
- *     VMS.  It is currently only set in conjunction with the EUNICE symbol.
- */
-/* BSD:
- *     This symbol, if defined, indicates that the program is running under
- *     a BSD system.
- */
-/*#define EUNICE               /**/
-/*#define VMS          /**/
-#define BSD            /**/
-
-/* ALIGNBYTES:
- *     This symbol contains the number of bytes required to align a
- *     double. Usual values are 2, 4 and 8.
- */
-#define ALIGNBYTES 8   /**/
-
 /* BIN:
  *     This symbol holds the path of the bin directory where the package will
  *     be installed. Program must be prepared to deal with ~name substitution.
@@ -67,7 +42,7 @@
  *     output.  This symbol will have the value "-" if CPPSTDIN needs a minus
  *     to specify standard input, otherwise the value is "".
  */
-#define CPPSTDIN "/tmp_mnt/vol/src/local/lwall/perl5/cppstdin"
+#define CPPSTDIN "/tmp_mnt/net/vaccine/export/src/local/lwall/perl5/cppstdin"
 #define CPPMINUS ""
 
 /* HAS_BCMP:
  *     This symbol, if defined, indicates that the C-shell exists.
  *     If defined, contains the full pathname of csh.
  */
-/*#define CSH "csh"            /**/
+#define CSH "/bin/csh"         /**/
 
 /* DOSUID:
  *     This symbol, if defined, indicates that the C program should
  */
 #define HAS_GETPRIORITY                /**/
 
-/* HAS_HTONL:
- *     This symbol, if defined, indicates that the htonl() routine (and
- *     friends htons() ntohl() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_HTONS:
- *     This symbol, if defined, indicates that the htons() routine (and
- *     friends htonl() ntohl() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_NTOHL:
- *     This symbol, if defined, indicates that the ntohl() routine (and
- *     friends htonl() htons() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_NTOHS:
- *     This symbol, if defined, indicates that the ntohs() routine (and
- *     friends htonl() htons() ntohl()) are available to do network
- *     order byte swapping.
- */
-#define HAS_HTONL              /**/
-#define HAS_HTONS              /**/
-#define HAS_NTOHL              /**/
-#define HAS_NTOHS              /**/
-
 /* HAS_KILLPG:
  *     This symbol, if defined, indicates that the killpg routine is available
  *     to kill process groups.  If unavailable, you probably should use kill
  */
 #define HAS_OPEN3              /**/
 
-/* HAS_READDIR:
- *     This symbol, if defined, indicates that the readdir routine is
- *     available to read directory entries. You may have to include
- *     <dirent.h>. See I_DIRENT.
- */
-#define HAS_READDIR            /**/
-
 /* HAS_RENAME:
  *     This symbol, if defined, indicates that the rename routine is available
  *     to rename files.  Otherwise you should do the unlink(), link(), unlink()
  */
 #define HAS_RMDIR              /**/
 
-/* HAS_SAFE_BCOPY:
- *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#define HAS_SAFE_BCOPY /**/
-
-/* HAS_SAFE_MEMCPY:
- *     This symbol, if defined, indicates that the memcpy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-/*#define HAS_SAFE_MEMCPY      /**/
-
 /* HAS_SELECT:
  *     This symbol, if defined, indicates that the select routine is
  *     available to select active file descriptors. If the timeout field
  */
 #define HAS_SHM                /**/
 
-/* HAS_SHMAT:
- *     This symbol, if defined, indicates that the shmat() routine is
- *     available to attach a shared memory segment to the process space.
- */
-#define HAS_SHMAT              /**/
-
 /* HAS_SHMCTL:
  *     This symbol, if defined, indicates that the shmctl() routine is
  *     available to perform shared memory control operations.
  */
 #define HAS_SYSTEM     /**/
 
+/* Time_t:
+ *     This symbol holds the type returned by time(). It can be long,
+ *     or time_t on BSD sites (in which case <sys/types.h> should be
+ *     included).
+ */
+#define Time_t long            /* Time type */
+
 /* HAS_TIMES:
  *     This symbol, if defined, indicates that the times() routine exists.
  *     Note that this became obsolete on some systems (SUNOS), which now
  */
 /*#define I_NDIR               /**/
 
-/* HAS_VFORK:
- *     This symbol, if defined, indicates that vfork() exists.
- */
-#define HAS_VFORK      /**/
-
 /* VOIDSIG:
  *     This symbol is defined if this system declares "void (*signal(...))()" in
  *     signal.h.  The old way was to declare it as "int (*signal(...))()".  It
 #define I_NETINET_IN   /**/
 /*#define I_SYS_IN             /**/
 
-/* I_PWD:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <pwd.h>.
- */
-/* PWQUOTA:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_quota.
- */
-/* PWAGE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_age.
- */
-/* PWCHANGE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_change.
- */
-/* PWCLASS:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_class.
- */
-/* PWEXPIRE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_expire.
- */
-/* PWCOMMENT:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_comment.
- */
-#define I_PWD          /**/
-/*#define PWQUOTA      /**/
-#define PWAGE  /**/
-/*#define PWCHANGE     /**/
-/*#define PWCLASS      /**/
-/*#define PWEXPIRE     /**/
-#define PWCOMMENT      /**/
-
 /* I_STDARG:
  *     This symbol, if defined, indicates that <stdarg.h> exists and should
  *     be included.
  */
 #define I_STDDEF       /**/
 
+/* I_STRING:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <string.h> (USG systems) instead of <strings.h> (BSD systems).
+ */
+#define I_STRING               /**/
+
 /* I_SYS_DIR:
  *     This symbol, if defined, indicates to the C program that it should
  *     include <sys/dir.h>.
  *     This symbol, if defined, indicates to the C program that it should
  *     include <sys/time.h>.
  */
+/* I_SYS_TIME_KERNEL:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <sys/time.h> with KERNEL defined.
+ */
 /*#define I_TIME               /**/
 #define I_SYS_TIME             /**/
+/*#define I_SYS_TIME_KERNEL            /**/
+
+/* I_UNISTD:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <unistd.h>.
+ */
+#define I_UNISTD               /**/
 
 /* I_UTIME:
  *     This symbol, if defined, indicates to the C program that it should
  */
 #define I_VARARGS              /**/
 
-/* I_VFORK:
- *     This symbol, if defined, indicates to the C program that it should
- *     include vfork.h.
- */
-#define I_VFORK        /**/
-
 /* INTSIZE:
  *     This symbol contains the size of an int, so that the C preprocessor
  *     can make decisions based on it.
  */
 #define INTSIZE 4              /**/
 
+/* Off_t:
+ *     This symbol holds the type used to declare offsets in the kernel.
+ *     It can be int, long, off_t, etc... It may be necessary to include
+ *     <sys/types.h> to get any typedef'ed information.
+ */
+#define Off_t off_t            /* <offset> type */
+
 /* PRIVLIB:
  *     This symbol contains the name of the private library for this package.
  *     The library is private in the sense that it needn't be in anyone's
  */
 #define PRIVLIB "/usr/local/lib/perl"          /**/
 
+/* PTRSIZE:
+ *     This symbol contains the size of a pointer, so that the C preprocessor
+ *     can make decisions based on it.
+ */
+#define PTRSIZE 4              /**/
+
 /* RANDBITS:
  *     This symbol contains the number of bits of random number the rand()
  *     function produces.  Usual values are 15, 16, and 31.
  */
 #define SCRIPTDIR "/usr/local/bin"     /**/
 
-/* SIG_NAME:
- *     This symbol contains a list of signal names in order. This is intended
- *     to be used as a static array initialization, like this:
- *             char *sig_name[] = { SIG_NAME };
- *     The signals in the list are separated with commas, and each signal
- *     is surrounded by double quotes. There is no leading SIG in the signal
- *     name, i.e. SIGQUIT is known as "QUIT".
- */
-#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","LOST","USR1","USR2"       /**/
-
 /* STDCHAR:
  *     This symbol is defined to be the type of char used in stdio.h.
  *     It has the values "unsigned char" or "char".
  */
 #define Uid_t uid_t            /* UID type */
 
+/* EUNICE:
+ *     This symbol, if defined, indicates that the program is being compiled
+ *     under the EUNICE package under VMS.  The program will need to handle
+ *     things like files that don't go away the first time you unlink them,
+ *     due to version numbering.  It will also need to compensate for lack
+ *     of a respectable link() command.
+ */
+/* VMS:
+ *     This symbol, if defined, indicates that the program is running under
+ *     VMS.  It is currently only set in conjunction with the EUNICE symbol.
+ */
+/*#define EUNICE               /**/
+/*#define VMS          /**/
+
+/* MEM_ALIGNBYTES:
+ *     This symbol contains the number of bytes required to align a
+ *     double. Usual values are 2, 4 and 8.
+ */
+#define MEM_ALIGNBYTES 8       /**/
+
 /* CASTI32:
  *     This symbol is defined if the C compiler can cast negative
  *     or large floating point numbers to 32-bit ints.
  */
 #define        CASTI32         /**/
 
+/* HAS_HTONL:
+ *     This symbol, if defined, indicates that the htonl() routine (and
+ *     friends htons() ntohl() ntohs()) are available to do network
+ *     order byte swapping.
+ */
+/* HAS_HTONS:
+ *     This symbol, if defined, indicates that the htons() routine (and
+ *     friends htonl() ntohl() ntohs()) are available to do network
+ *     order byte swapping.
+ */
+/* HAS_NTOHL:
+ *     This symbol, if defined, indicates that the ntohl() routine (and
+ *     friends htonl() htons() ntohs()) are available to do network
+ *     order byte swapping.
+ */
+/* HAS_NTOHS:
+ *     This symbol, if defined, indicates that the ntohs() routine (and
+ *     friends htonl() htons() ntohl()) are available to do network
+ *     order byte swapping.
+ */
+#define HAS_HTONL              /**/
+#define HAS_HTONS              /**/
+#define HAS_NTOHL              /**/
+#define HAS_NTOHS              /**/
+
 /* HAS_ISASCII:
  *     This manifest constant lets the C program know that the
  *     isascii is available.
  */
 #define HAS_ISASCII            /**/
 
+/* HAS_READDIR:
+ *     This symbol, if defined, indicates that the readdir routine is
+ *     available to read directory entries. You may have to include
+ *     <dirent.h>. See I_DIRENT.
+ */
+#define HAS_READDIR            /**/
+
+/* HAS_SEEKDIR:
+ *     This symbol, if defined, indicates that the seekdir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
+ */
+#define HAS_SEEKDIR            /**/
+
+/* HAS_TELLDIR:
+ *     This symbol, if defined, indicates that the telldir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
+ */
+#define HAS_TELLDIR            /**/
+
+/* HAS_REWINDDIR:
+ *     This symbol, if defined, indicates that the rewinddir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
+ */
+#define HAS_REWINDDIR          /**/
+
+/* HAS_SAFE_BCOPY:
+ *     This symbol, if defined, indicates that the bcopy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+#define HAS_SAFE_BCOPY /**/
+
+/* HAS_SAFE_MEMCPY:
+ *     This symbol, if defined, indicates that the memcpy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+/*#define HAS_SAFE_MEMCPY      /**/
+
 /* HAS_SETLOCALE:
  *     This symbol, if defined, indicates that the setlocale routine is
  *     available to handle locale-specific ctype implementations.
  */
 #define HAS_SETLOCALE  /**/
 
+/* HAS_SHMAT:
+ *     This symbol, if defined, indicates that the shmat() routine is
+ *     available to attach a shared memory segment to the process space.
+ */
+#define HAS_SHMAT              /**/
+
+/* VOIDSHMAT:
+ *     This symbol, if defined, indicates that the shmat() routine
+ *     returns a pointer of type void*.  Otherwise, char* is assumed.
+ */
+/*#define      VOIDSHMAT               /**/
+
 /* HAS_STRERROR:
  *     This symbol, if defined, indicates that the strerror routine is
  *     available to translate error numbers to strings. See the writeup
 #define Strerror(e) ((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e]) /**/
 #endif
 
+/* HAS_VFORK:
+ *     This symbol, if defined, indicates that vfork() exists.
+ */
+/*#define HAS_VFORK    /**/
+
 /* USE_DYNAMIC_LOADING:
  *     This symbol, if defined, indicates that dynamic loading of
  *     some sort is available.
 #define GROUPSTYPE int /* Type for 2nd arg to getgroups() */
 #endif
 
+/* I_DLFCN:
+ *     This symbol, if defined, indicates that <dlfcn.h> exists and should
+ *     be included.
+ */
+#define I_DLFCN                /**/
+
+/* I_MEMORY:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <memory.h>.
+ */
+#define I_MEMORY               /**/
+
+/* I_NET_ERRNO:
+ *     This symbol, if defined, indicates that <net/errno.h> exists and 
+ *     should be included.
+ */
+/*#define I_NET_ERRNO          /**/
+
+/* I_PWD:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <pwd.h>.
+ */
+/* PWQUOTA:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_quota.
+ */
+/* PWAGE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_age.
+ */
+/* PWCHANGE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_change.
+ */
+/* PWCLASS:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_class.
+ */
+/* PWEXPIRE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_expire.
+ */
+/* PWCOMMENT:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_comment.
+ */
+#define I_PWD          /**/
+/*#define PWQUOTA      /**/
+#define PWAGE  /**/
+/*#define PWCHANGE     /**/
+/*#define PWCLASS      /**/
+/*#define PWEXPIRE     /**/
+#define PWCOMMENT      /**/
+
+/* I_TERMIO:
+ *     This symbol, if defined, indicates that the program should include
+ *     <termio.h> rather than <sgtty.h>.  There are also differences in
+ *     the ioctl() calls that depend on the value of this symbol.
+ */
+/* I_TERMIOS:
+ *     This symbol, if defined, indicates that the program should include
+ *     the POSIX termios.h rather than sgtty.h or termio.h.
+ *     There are also differences in the ioctl() calls that depend on the
+ *     value of this symbol.
+ */
+/* I_SGTTY:
+ *     This symbol, if defined, indicates that the program should include
+ *     <sgtty.h> rather than <termio.h>.  There are also differences in
+ *     the ioctl() calls that depend on the value of this symbol.
+ */
+/*#define I_TERMIO             /**/
+#define I_TERMIOS              /**/
+/*#define I_SGTTY              /**/
+
+/* I_VFORK:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include vfork.h.
+ */
+/*#define I_VFORK      /**/
+
+/* LOC_SED:
+ *     This symbol holds the complete pathname to the sed program.
+ */
+#define LOC_SED        "/bin/sed"      /**/
+
 /* Malloc_t:
  *     This symbol is the type of pointer returned by malloc and realloc.
  */
 #define Malloc_t char *                        /**/
 
+/* MYMALLOC:
+ *     This symbol, if defined, indicates that we're using our own malloc.
+ */
+#define MYMALLOC                       /**/
+
 /* CAN_PROTOTYPE:
  *     If defined, this macro indicates that the C compiler can handle
  *     function prototypes.
 #else
 #endif
 
+/* SIG_NAME:
+ *     This symbol contains a list of signal names in order. This is intended
+ *     to be used as a static array initialization, like this:
+ *             char *sig_name[] = { SIG_NAME };
+ *     The signals in the list are separated with commas, and each signal
+ *     is surrounded by double quotes. There is no leading SIG in the signal
+ *     name, i.e. SIGQUIT is known as "QUIT".
+ */
+#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","LOST","USR1","USR2"       /**/
+
 /* VOIDFLAGS:
  *     This symbol indicates how much support of the void type is given by this
  *     compiler.  What various bits mean:
  *     level of void support necessary is not present, defines void to int.
  */
 #ifndef VOIDUSED
-#  ifdef VOIDWANT
-#    define VOIDUSED VOIDWANT
-#  else
-#    define VOIDUSED 15
-#  endif
+#  define VOIDUSED 15
 #endif
 #define VOIDFLAGS 15
 #if (VOIDFLAGS & VOIDUSED) != VOIDUSED
  * obsolete symbols may end without notice.
  */
 
+#ifdef MEM_ALIGNBYTES
+#define ALIGNBYTES MEM_ALIGNBYTES
+#endif
+
 #ifdef USE_CHAR_VSPRINTF
 #define CHARVSPRINTF USE_CHAR_VSPRINTF
 #endif
 #define HAS_GDBM I_GDBM
 #endif
 
+#ifdef I_NDBM
+#define HAS_NDBM I_NDBM
+#endif
+
+#ifdef I_DBM
+#define HAS_ODBM I_DBM
+#endif
+
+#ifdef I_SYS_IOCTL
+#define I_SYSIOCTL I_SYS_IOCTL
+#endif
+
+#ifdef Malloc_t
+#define MALLOCPTRTYPE Malloc_t
+#endif
+
+#ifdef USE_OLDSOCKET
+#define OLDSOCKET USE_OLDSOCKET
+#endif
+
 #ifdef HAS_SAFE_BCOPY
 #define SAFE_BCOPY HAS_SAFE_BCOPY
 #endif
 
+#ifdef HAS_SAFE_MEMCPY
+#define SAFE_MEMCPY HAS_SAFE_MEMCPY
+#endif
+
 #ifdef USE_STAT_BLOCKS
 #define STATBLOCKS USE_STAT_BLOCKS
 #endif
 #define STDSTDIO USE_STD_STDIO
 #endif
 
+#ifdef USE_STRUCT_COPY
+#define STRUCTCOPY USE_STRUCT_COPY
+#endif
+
+#ifdef HAS_SYSTEM
+#define SYSTEM HAS_SYSTEM
+#endif
+
 #ifdef Uid_t
 #define UIDTYPE Uid_t
 #endif
index 97429bb..640042f 100644 (file)
--- a/config.sh
+++ b/config.sh
@@ -6,86 +6,83 @@
 # instead choose to run each of the .SH files by yourself, or "Configure -S".
 #
 
-# Configuration time: Mon Apr  4 15:17:26 PDT 1994
+# Configuration time: Wed May  4 15:10:39 PDT 1994
 # Configured by: lwall
 # Target system: sunos scalpel 4.1.3 3 sun4c 
 
-extensions='ext/dbm/NDBM_File.xs
-ext/dbm/ODBM_File.xs
-ext/dbm/GDBM_File.xs
-ext/dbm/SDBM_File.xs
-ext/posix/POSIX.xs'
-d_bsd='define'
+extensions=' ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/SDBM_File.xs ext/posix/POSIX.xs'
 d_eunice='undef'
 d_xenix='undef'
 eunicefix=':'
 Mcc='Mcc'
-awk='awk'
+awk='/bin/awk'
 bash=''
-bison='bison'
+bison='/usr/local/bin/bison'
 byacc='byacc'
-cat='cat'
+cat='/bin/cat'
 chgrp=''
 chmod=''
 chown=''
 compress=''
-cp='cp'
+cp='/bin/cp'
 cpio=''
-cpp='cpp'
-csh='csh'
-date='date'
-echo='echo'
-egrep='egrep'
+cpp='/usr/lib/cpp'
+csh='/bin/csh'
+date='/bin/date'
+echo='/bin/echo'
+egrep='/bin/egrep'
 emacs=''
-expr='expr'
-find='find'
+expr='/bin/expr'
+find='/bin/find'
 flex=''
 gcc=''
-grep='grep'
+grep='/bin/grep'
 inews=''
 ksh=''
 less=''
-line='line'
+line='/bin/line'
 lint=''
-ln=''
+ln='/bin/ln'
 lp=''
 lpr=''
 ls=''
 mail=''
 mailx=''
 make=''
-mkdir='mkdir'
+mkdir='/bin/mkdir'
 more=''
-mv='mv'
-nroff='nroff'
-perl='perl'
+mv='/bin/mv'
+nroff='/bin/nroff'
+perl='/home/netlabs1/lwall/pl/perl'
 pg=''
 pmake=''
 pr=''
-rm='rm'
+rm='/bin/rm'
 rmail=''
-sed='sed'
+sed='/bin/sed'
 sendmail=''
 sh=''
 shar=''
 sleep=''
 smail=''
-sort='sort'
+sort='/bin/sort'
 submit=''
 tail=''
 tar=''
 tbl=''
 test='test'
-touch=''
-tr='tr'
+touch='/bin/touch'
+tr='/bin/tr'
 troff=''
-uname='uname'
-uniq='uniq'
+uname='/bin/uname'
+uniq='/bin/uniq'
 uuname=''
 vi=''
 zcat=''
 hint='recommended'
 myuname='sunos scalpel 4.1.3 3 sun4c '
+osname='sunos'
+osvers='4.1.3'
 Author=''
 Date='$Date'
 Header=''
@@ -97,7 +94,7 @@ Revision='$Revision'
 Source=''
 State=''
 afs='false'
-alignbytes='8'
+memalignbytes='8'
 bin='/usr/local/bin'
 binexp='/usr/local/bin'
 installbin='/usr/local/bin'
@@ -110,12 +107,12 @@ ldflags=''
 lkflags=''
 optimize='-g'
 cf_by='lwall'
-cf_time='Mon Apr  4 15:17:26 PDT 1994'
+cf_time='Wed May  4 15:10:39 PDT 1994'
 contains='grep'
 cpplast=''
 cppminus=''
-cpprun='cpp'
-cppstdin='/tmp_mnt/vol/src/local/lwall/perl5/cppstdin'
+cpprun='/usr/lib/cpp'
+cppstdin='/tmp_mnt/net/vaccine/export/src/local/lwall/perl5/cppstdin'
 d_access='define'
 d_bcmp='define'
 d_bcopy='define'
@@ -128,7 +125,7 @@ d_chsize='undef'
 d_const='undef'
 cryptlib=''
 d_crypt='define'
-d_csh='undef'
+d_csh='define'
 d_dosuid='undef'
 d_dup2='define'
 d_fchmod='define'
@@ -161,8 +158,11 @@ d_msgget='define'
 d_msgrcv='define'
 d_msgsnd='define'
 d_open3='define'
-d_portable='define'
+d_portable='undef'
 d_readdir='define'
+d_rewinddir='define'
+d_seekdir='define'
+d_telldir='define'
 d_rename='define'
 d_rmdir='define'
 d_safebcpy='define'
@@ -189,6 +189,7 @@ d_setruid='define'
 d_setsid='define'
 d_shm='define'
 d_shmat='define'
+d_voidshmat='undef'
 d_shmctl='define'
 d_shmdt='define'
 d_shmget='define'
@@ -209,6 +210,8 @@ d_syserrlst='define'
 d_symlink='define'
 d_syscall='define'
 d_system='define'
+d_time='define'
+timetype='long'
 clocktype='long'
 d_times='define'
 d_truncate='define'
@@ -217,7 +220,7 @@ i_ndir='undef'
 ndirc=''
 ndirlib=''
 ndiro=''
-d_vfork='define'
+d_vfork='undef'
 d_voidsig='define'
 signal_t='void'
 d_volatile='undef'
@@ -225,8 +228,13 @@ d_charvspr='define'
 d_vprintf='define'
 d_wait4='define'
 d_waitpid='define'
-dlobj='dl.o'
-dlsrc='dl.c'
+cccdlflags=''
+ccdlflags=''
+dldir='ext/dl'
+dlobj='dl_sunos.o'
+dlsrc='dl_sunos.c'
+lddlflags=''
+shlibsuffix='.so'
 usedl='define'
 gidtype='gid_t'
 groupstype='int'
@@ -239,7 +247,9 @@ i_dlfcn='define'
 i_fcntl='undef'
 i_gdbm='undef'
 i_grp='define'
+i_memory='define'
 i_ndbm='define'
+i_neterrno='undef'
 i_niin='define'
 i_sysin='undef'
 d_pwage='define'
@@ -249,6 +259,7 @@ d_pwcomment='define'
 d_pwexpire='undef'
 d_pwquota='undef'
 i_pwd='define'
+i_sdbm='define'
 i_stdarg='undef'
 i_stddef='define'
 i_string='define'
@@ -268,10 +279,11 @@ i_systime='define'
 i_systimek='undef'
 i_time='undef'
 timeincl='/usr/include/sys/time.h '
+i_unistd='define'
 i_utime='define'
 i_varargs='define'
 i_varhdr='varargs.h'
-i_vfork='define'
+i_vfork='undef'
 intsize='4'
 lib='/usr/local/lib'
 libexp='/usr/local/lib'
@@ -280,6 +292,9 @@ libpth='  /lib /usr/lib /usr/ucblib /usr/local/lib'
 plibpth=''
 xlibpth='/usr/lib/386 /lib/386'
 libs='-ldbm -ldl -lm -lposix'
+lns='/bin/ln -s'
+lseektype='off_t'
+d_mymalloc='define'
 mallocobj='malloc.o'
 mallocsrc='malloc.c'
 malloctype='char *'
@@ -302,12 +317,15 @@ n='-n'
 groupcat=''
 hostcat='ypcat hosts'
 passcat=''
+orderlib='false'
+ranlib='/usr/bin/ranlib'
 package='perl'
 spackage=''
 installprivlib='/usr/local/lib/perl'
 privlib='/usr/local/lib/perl'
 privlibexp='/usr/local/lib/perl'
 prototype='undef'
+ptrsize='4'
 randbits='31'
 installscript='/usr/local/bin'
 scriptdir='/usr/local/bin'
index 8c63a9f..65b8f9f 100755 (executable)
@@ -36,31 +36,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #ifndef _config_h_
 #define _config_h_
 
-/* EUNICE:
- *     This symbol, if defined, indicates that the program is being compiled
- *     under the EUNICE package under VMS.  The program will need to handle
- *     things like files that don't go away the first time you unlink them,
- *     due to version numbering.  It will also need to compensate for lack
- *     of a respectable link() command.
- */
-/* VMS:
- *     This symbol, if defined, indicates that the program is running under
- *     VMS.  It is currently only set in conjunction with the EUNICE symbol.
- */
-/* BSD:
- *     This symbol, if defined, indicates that the program is running under
- *     a BSD system.
- */
-#$d_eunice EUNICE              /**/
-#$d_eunice VMS         /**/
-#$d_bsd BSD            /**/
-
-/* ALIGNBYTES:
- *     This symbol contains the number of bytes required to align a
- *     double. Usual values are 2, 4 and 8.
- */
-#define ALIGNBYTES $alignbytes /**/
-
 /* BIN:
  *     This symbol holds the path of the bin directory where the package will
  *     be installed. Program must be prepared to deal with ~name substitution.
@@ -246,31 +221,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_getprior HAS_GETPRIORITY           /**/
 
-/* HAS_HTONL:
- *     This symbol, if defined, indicates that the htonl() routine (and
- *     friends htons() ntohl() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_HTONS:
- *     This symbol, if defined, indicates that the htons() routine (and
- *     friends htonl() ntohl() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_NTOHL:
- *     This symbol, if defined, indicates that the ntohl() routine (and
- *     friends htonl() htons() ntohs()) are available to do network
- *     order byte swapping.
- */
-/* HAS_NTOHS:
- *     This symbol, if defined, indicates that the ntohs() routine (and
- *     friends htonl() htons() ntohl()) are available to do network
- *     order byte swapping.
- */
-#$d_htonl HAS_HTONL            /**/
-#$d_htonl HAS_HTONS            /**/
-#$d_htonl HAS_NTOHL            /**/
-#$d_htonl HAS_NTOHS            /**/
-
 /* HAS_KILLPG:
  *     This symbol, if defined, indicates that the killpg routine is available
  *     to kill process groups.  If unavailable, you probably should use kill
@@ -359,13 +309,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_open3 HAS_OPEN3            /**/
 
-/* HAS_READDIR:
- *     This symbol, if defined, indicates that the readdir routine is
- *     available to read directory entries. You may have to include
- *     <dirent.h>. See I_DIRENT.
- */
-#$d_readdir HAS_READDIR                /**/
-
 /* HAS_RENAME:
  *     This symbol, if defined, indicates that the rename routine is available
  *     to rename files.  Otherwise you should do the unlink(), link(), unlink()
@@ -380,22 +323,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_rmdir HAS_RMDIR            /**/
 
-/* HAS_SAFE_BCOPY:
- *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#$d_safebcpy HAS_SAFE_BCOPY    /**/
-
-/* HAS_SAFE_MEMCPY:
- *     This symbol, if defined, indicates that the memcpy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#$d_safemcpy HAS_SAFE_MEMCPY   /**/
-
 /* HAS_SELECT:
  *     This symbol, if defined, indicates that the select routine is
  *     available to select active file descriptors. If the timeout field
@@ -513,12 +440,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_shm HAS_SHM                /**/
 
-/* HAS_SHMAT:
- *     This symbol, if defined, indicates that the shmat() routine is
- *     available to attach a shared memory segment to the process space.
- */
-#$d_shmat HAS_SHMAT            /**/
-
 /* HAS_SHMCTL:
  *     This symbol, if defined, indicates that the shmctl() routine is
  *     available to perform shared memory control operations.
@@ -591,6 +512,13 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_system HAS_SYSTEM  /**/
 
+/* Time_t:
+ *     This symbol holds the type returned by time(). It can be long,
+ *     or time_t on BSD sites (in which case <sys/types.h> should be
+ *     included).
+ */
+#define Time_t $timetype               /* Time type */
+
 /* HAS_TIMES:
  *     This symbol, if defined, indicates that the times() routine exists.
  *     Note that this became obsolete on some systems (SUNOS), which now
@@ -610,11 +538,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$i_ndir I_NDIR                /**/
 
-/* HAS_VFORK:
- *     This symbol, if defined, indicates that vfork() exists.
- */
-#$d_vfork HAS_VFORK    /**/
-
 /* VOIDSIG:
  *     This symbol is defined if this system declares "void (*signal(...))()" in
  *     signal.h.  The old way was to declare it as "int (*signal(...))()".  It
@@ -716,42 +639,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #$i_niin I_NETINET_IN  /**/
 #$i_sysin I_SYS_IN             /**/
 
-/* I_PWD:
- *     This symbol, if defined, indicates to the C program that it should
- *     include <pwd.h>.
- */
-/* PWQUOTA:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_quota.
- */
-/* PWAGE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_age.
- */
-/* PWCHANGE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_change.
- */
-/* PWCLASS:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_class.
- */
-/* PWEXPIRE:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_expire.
- */
-/* PWCOMMENT:
- *     This symbol, if defined, indicates to the C program that struct passwd
- *     contains pw_comment.
- */
-#$i_pwd I_PWD          /**/
-#$d_pwquota PWQUOTA    /**/
-#$d_pwage PWAGE        /**/
-#$d_pwchange PWCHANGE  /**/
-#$d_pwclass PWCLASS    /**/
-#$d_pwexpire PWEXPIRE  /**/
-#$d_pwcomment PWCOMMENT        /**/
-
 /* I_STDARG:
  *     This symbol, if defined, indicates that <stdarg.h> exists and should
  *     be included.
@@ -764,6 +651,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$i_stddef I_STDDEF    /**/
 
+/* I_STRING:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <string.h> (USG systems) instead of <strings.h> (BSD systems).
+ */
+#$i_string I_STRING            /**/
+
 /* I_SYS_DIR:
  *     This symbol, if defined, indicates to the C program that it should
  *     include <sys/dir.h>.
@@ -802,8 +695,19 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  *     This symbol, if defined, indicates to the C program that it should
  *     include <sys/time.h>.
  */
+/* I_SYS_TIME_KERNEL:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <sys/time.h> with KERNEL defined.
+ */
 #$i_time I_TIME                /**/
 #$i_systime I_SYS_TIME         /**/
+#$i_systimek I_SYS_TIME_KERNEL         /**/
+
+/* I_UNISTD:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <unistd.h>.
+ */
+#$i_unistd I_UNISTD            /**/
 
 /* I_UTIME:
  *     This symbol, if defined, indicates to the C program that it should
@@ -817,18 +721,19 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$i_varargs I_VARARGS          /**/
 
-/* I_VFORK:
- *     This symbol, if defined, indicates to the C program that it should
- *     include vfork.h.
- */
-#$i_vfork I_VFORK      /**/
-
 /* INTSIZE:
  *     This symbol contains the size of an int, so that the C preprocessor
  *     can make decisions based on it.
  */
 #define INTSIZE $intsize               /**/
 
+/* Off_t:
+ *     This symbol holds the type used to declare offsets in the kernel.
+ *     It can be int, long, off_t, etc... It may be necessary to include
+ *     <sys/types.h> to get any typedef'ed information.
+ */
+#define Off_t $lseektype               /* <offset> type */
+
 /* PRIVLIB:
  *     This symbol contains the name of the private library for this package.
  *     The library is private in the sense that it needn't be in anyone's
@@ -837,6 +742,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define PRIVLIB "$privlib"             /**/
 
+/* PTRSIZE:
+ *     This symbol contains the size of a pointer, so that the C preprocessor
+ *     can make decisions based on it.
+ */
+#define PTRSIZE $ptrsize               /**/
+
 /* RANDBITS:
  *     This symbol contains the number of bits of random number the rand()
  *     function produces.  Usual values are 15, 16, and 31.
@@ -851,16 +762,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define SCRIPTDIR "$scriptdir" /**/
 
-/* SIG_NAME:
- *     This symbol contains a list of signal names in order. This is intended
- *     to be used as a static array initialization, like this:
- *             char *sig_name[] = { SIG_NAME };
- *     The signals in the list are separated with commas, and each signal
- *     is surrounded by double quotes. There is no leading SIG in the signal
- *     name, i.e. SIGQUIT is known as "QUIT".
- */
-#define SIG_NAME "`echo $sig_name | sed 's/ /","/g'`"  /**/
-
 /* STDCHAR:
  *     This symbol is defined to be the type of char used in stdio.h.
  *     It has the values "unsigned char" or "char".
@@ -874,24 +775,122 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define Uid_t $uidtype         /* UID type */
 
+/* EUNICE:
+ *     This symbol, if defined, indicates that the program is being compiled
+ *     under the EUNICE package under VMS.  The program will need to handle
+ *     things like files that don't go away the first time you unlink them,
+ *     due to version numbering.  It will also need to compensate for lack
+ *     of a respectable link() command.
+ */
+/* VMS:
+ *     This symbol, if defined, indicates that the program is running under
+ *     VMS.  It is currently only set in conjunction with the EUNICE symbol.
+ */
+#$d_eunice EUNICE              /**/
+#$d_eunice VMS         /**/
+
+/* MEM_ALIGNBYTES:
+ *     This symbol contains the number of bytes required to align a
+ *     double. Usual values are 2, 4 and 8.
+ */
+#define MEM_ALIGNBYTES $memalignbytes  /**/
+
 /* CASTI32:
  *     This symbol is defined if the C compiler can cast negative
  *     or large floating point numbers to 32-bit ints.
  */
 #$d_casti32    CASTI32         /**/
 
+/* HAS_HTONL:
+ *     This symbol, if defined, indicates that the htonl() routine (and
+ *     friends htons() ntohl() ntohs()) are available to do network
+ *     order byte swapping.
+ */
+/* HAS_HTONS:
+ *     This symbol, if defined, indicates that the htons() routine (and
+ *     friends htonl() ntohl() ntohs()) are available to do network
+ *     order byte swapping.
+ */
+/* HAS_NTOHL:
+ *     This symbol, if defined, indicates that the ntohl() routine (and
+ *     friends htonl() htons() ntohs()) are available to do network
+ *     order byte swapping.
+ */
+/* HAS_NTOHS:
+ *     This symbol, if defined, indicates that the ntohs() routine (and
+ *     friends htonl() htons() ntohl()) are available to do network
+ *     order byte swapping.
+ */
+#$d_htonl HAS_HTONL            /**/
+#$d_htonl HAS_HTONS            /**/
+#$d_htonl HAS_NTOHL            /**/
+#$d_htonl HAS_NTOHS            /**/
+
 /* HAS_ISASCII:
  *     This manifest constant lets the C program know that the
  *     isascii is available.
  */
 #$d_isascii HAS_ISASCII                /**/
 
+/* HAS_READDIR:
+ *     This symbol, if defined, indicates that the readdir routine is
+ *     available to read directory entries. You may have to include
+ *     <dirent.h>. See I_DIRENT.
+ */
+#$d_readdir HAS_READDIR                /**/
+
+/* HAS_SEEKDIR:
+ *     This symbol, if defined, indicates that the seekdir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
+ */
+#$d_seekdir HAS_SEEKDIR                /**/
+
+/* HAS_TELLDIR:
+ *     This symbol, if defined, indicates that the telldir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
+ */
+#$d_telldir HAS_TELLDIR                /**/
+
+/* HAS_REWINDDIR:
+ *     This symbol, if defined, indicates that the rewinddir routine is
+ *     available. You may have to include <dirent.h>. See I_DIRENT.
+ */
+#$d_rewinddir HAS_REWINDDIR            /**/
+
+/* HAS_SAFE_BCOPY:
+ *     This symbol, if defined, indicates that the bcopy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+#$d_safebcpy HAS_SAFE_BCOPY    /**/
+
+/* HAS_SAFE_MEMCPY:
+ *     This symbol, if defined, indicates that the memcpy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+#$d_safemcpy HAS_SAFE_MEMCPY   /**/
+
 /* HAS_SETLOCALE:
  *     This symbol, if defined, indicates that the setlocale routine is
  *     available to handle locale-specific ctype implementations.
  */
 #$d_setlocale HAS_SETLOCALE    /**/
 
+/* HAS_SHMAT:
+ *     This symbol, if defined, indicates that the shmat() routine is
+ *     available to attach a shared memory segment to the process space.
+ */
+#$d_shmat HAS_SHMAT            /**/
+
+/* VOIDSHMAT:
+ *     This symbol, if defined, indicates that the shmat() routine
+ *     returns a pointer of type void*.  Otherwise, char* is assumed.
+ */
+#$d_voidshmat  VOIDSHMAT               /**/
+
 /* HAS_STRERROR:
  *     This symbol, if defined, indicates that the strerror routine is
  *     available to translate error numbers to strings. See the writeup
@@ -915,6 +914,11 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #$d_strerrm Strerror(e) ((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e]) /**/
 #endif
 
+/* HAS_VFORK:
+ *     This symbol, if defined, indicates that vfork() exists.
+ */
+#$d_vfork HAS_VFORK    /**/
+
 /* USE_DYNAMIC_LOADING:
  *     This symbol, if defined, indicates that dynamic loading of
  *     some sort is available.
@@ -942,11 +946,101 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #define GROUPSTYPE $groupstype /* Type for 2nd arg to getgroups() */
 #endif
 
+/* I_DLFCN:
+ *     This symbol, if defined, indicates that <dlfcn.h> exists and should
+ *     be included.
+ */
+#$i_dlfcn I_DLFCN              /**/
+
+/* I_MEMORY:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <memory.h>.
+ */
+#$i_memory I_MEMORY            /**/
+
+/* I_NET_ERRNO:
+ *     This symbol, if defined, indicates that <net/errno.h> exists and 
+ *     should be included.
+ */
+#$i_neterrno I_NET_ERRNO               /**/
+
+/* I_PWD:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <pwd.h>.
+ */
+/* PWQUOTA:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_quota.
+ */
+/* PWAGE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_age.
+ */
+/* PWCHANGE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_change.
+ */
+/* PWCLASS:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_class.
+ */
+/* PWEXPIRE:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_expire.
+ */
+/* PWCOMMENT:
+ *     This symbol, if defined, indicates to the C program that struct passwd
+ *     contains pw_comment.
+ */
+#$i_pwd I_PWD          /**/
+#$d_pwquota PWQUOTA    /**/
+#$d_pwage PWAGE        /**/
+#$d_pwchange PWCHANGE  /**/
+#$d_pwclass PWCLASS    /**/
+#$d_pwexpire PWEXPIRE  /**/
+#$d_pwcomment PWCOMMENT        /**/
+
+/* I_TERMIO:
+ *     This symbol, if defined, indicates that the program should include
+ *     <termio.h> rather than <sgtty.h>.  There are also differences in
+ *     the ioctl() calls that depend on the value of this symbol.
+ */
+/* I_TERMIOS:
+ *     This symbol, if defined, indicates that the program should include
+ *     the POSIX termios.h rather than sgtty.h or termio.h.
+ *     There are also differences in the ioctl() calls that depend on the
+ *     value of this symbol.
+ */
+/* I_SGTTY:
+ *     This symbol, if defined, indicates that the program should include
+ *     <sgtty.h> rather than <termio.h>.  There are also differences in
+ *     the ioctl() calls that depend on the value of this symbol.
+ */
+#$i_termio I_TERMIO            /**/
+#$i_termios I_TERMIOS          /**/
+#$i_sgtty I_SGTTY              /**/
+
+/* I_VFORK:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include vfork.h.
+ */
+#$i_vfork I_VFORK      /**/
+
+/* LOC_SED:
+ *     This symbol holds the complete pathname to the sed program.
+ */
+#define LOC_SED        "$sed"  /**/
+
 /* Malloc_t:
  *     This symbol is the type of pointer returned by malloc and realloc.
  */
 #define Malloc_t $malloctype                   /**/
 
+/* MYMALLOC:
+ *     This symbol, if defined, indicates that we're using our own malloc.
+ */
+#$d_mymalloc MYMALLOC                  /**/
+
 /* CAN_PROTOTYPE:
  *     If defined, this macro indicates that the C compiler can handle
  *     function prototypes.
@@ -956,6 +1050,16 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #else
 #endif
 
+/* SIG_NAME:
+ *     This symbol contains a list of signal names in order. This is intended
+ *     to be used as a static array initialization, like this:
+ *             char *sig_name[] = { SIG_NAME };
+ *     The signals in the list are separated with commas, and each signal
+ *     is surrounded by double quotes. There is no leading SIG in the signal
+ *     name, i.e. SIGQUIT is known as "QUIT".
+ */
+#define SIG_NAME "`echo $sig_name | sed 's/ /","/g'`"  /**/
+
 /* VOIDFLAGS:
  *     This symbol indicates how much support of the void type is given by this
  *     compiler.  What various bits mean:
@@ -973,11 +1077,7 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  *     level of void support necessary is not present, defines void to int.
  */
 #ifndef VOIDUSED
-#  ifdef VOIDWANT
-#    define VOIDUSED VOIDWANT
-#  else
-#    define VOIDUSED $defvoidused
-#  endif
+#  define VOIDUSED $defvoidused
 #endif
 #define VOIDFLAGS $voidflags
 #if (VOIDFLAGS & VOIDUSED) != VOIDUSED
@@ -995,6 +1095,10 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  * obsolete symbols may end without notice.
  */
 
+#ifdef MEM_ALIGNBYTES
+#define ALIGNBYTES MEM_ALIGNBYTES
+#endif
+
 #ifdef USE_CHAR_VSPRINTF
 #define CHARVSPRINTF USE_CHAR_VSPRINTF
 #endif
@@ -1007,10 +1111,34 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #define HAS_GDBM I_GDBM
 #endif
 
+#ifdef I_NDBM
+#define HAS_NDBM I_NDBM
+#endif
+
+#ifdef I_DBM
+#define HAS_ODBM I_DBM
+#endif
+
+#ifdef I_SYS_IOCTL
+#define I_SYSIOCTL I_SYS_IOCTL
+#endif
+
+#ifdef Malloc_t
+#define MALLOCPTRTYPE Malloc_t
+#endif
+
+#ifdef USE_OLDSOCKET
+#define OLDSOCKET USE_OLDSOCKET
+#endif
+
 #ifdef HAS_SAFE_BCOPY
 #define SAFE_BCOPY HAS_SAFE_BCOPY
 #endif
 
+#ifdef HAS_SAFE_MEMCPY
+#define SAFE_MEMCPY HAS_SAFE_MEMCPY
+#endif
+
 #ifdef USE_STAT_BLOCKS
 #define STATBLOCKS USE_STAT_BLOCKS
 #endif
@@ -1019,6 +1147,14 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #define STDSTDIO USE_STD_STDIO
 #endif
 
+#ifdef USE_STRUCT_COPY
+#define STRUCTCOPY USE_STRUCT_COPY
+#endif
+
+#ifdef HAS_SYSTEM
+#define SYSTEM HAS_SYSTEM
+#endif
+
 #ifdef Uid_t
 #define UIDTYPE Uid_t
 #endif
index 31585c4..95fa949 100755 (executable)
--- a/configpm
+++ b/configpm
@@ -2,13 +2,6 @@
 
 @ARGV = "./config.sh";
 
-undef $/;
-$_ = <>;
-s:^#!/bin/sh\n::;
-s/'undef'/undef/g;
-s/\n(\w+)=/;\n\$Config{'$1'} = /g;
-s/;\n\$Config/\n\$Config/;
-
 open STDOUT, ">lib/Config.pm"
     or die "Can't open lib/Config.pm: $!\n";
 $myver = sprintf("%.3f", $]);
@@ -23,5 +16,13 @@ require Exporter;
 
 ENDOFBEG
 
-print $_;
-
+while (<>) {
+    s:^#!/bin/sh::;
+    s/'undef'/undef/;  # So we can say "if $Config{'foo'}".
+    s/=true$/='true'/; # Catch CONFIG=true line from Configure.
+    s/^(\w+)=/\$Config{'$1'} = /;
+    s/$/;/ unless (/^#/ || /^$/);
+    print $_;
+}
+print "1;\n";
+exit 0;
diff --git a/debstack b/debstack
deleted file mode 100644 (file)
index f0af5ea..0000000
--- a/debstack
+++ /dev/null
@@ -1,14 +0,0 @@
-    if (debug & 4) {
-/*     fprintf(stderr, "%8lx %8lx %8ld %8ld %8ld\n",
-           stack, stack_base, *markstack_ptr, stack_sp-stack_base, stack_max-stack_base);
-       fprintf(stderr, "%8lx %8lx %8ld %l8d %8ld\n",
-           curstack, stack->av_array, curstack, stack->av_fill, stack->av_max);
-*/
-       fprintf(stderr, "STACK");
-       for (i = 0; i <= 30; i++) {
-           if (stack->av_array[i] || stack->av_array[i+1] || stack->av_array[i+2])
-               fprintf(stderr, "\t%s%s", SvPEEK(stack->av_array[i]),
-                   stack_sp == &stack->av_array[i] ? " *" : "");
-       }
-       fprintf(stderr, "\n");
-    }
diff --git a/dl_sunos.c b/dl_sunos.c
new file mode 100644 (file)
index 0000000..badd66d
--- /dev/null
@@ -0,0 +1,56 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#ifdef I_DLFCN
+# include <dlfcn.h>
+#endif
+
+static int
+XS_DynamicLoader_bootstrap(ix, ax, items)
+register int ix;
+register int ax;
+register int items;
+{
+    if (items < 1 || items > 1) {
+       croak("Usage: DynamicLoader::bootstrap(package)");
+    }
+    {
+       char*   package = SvPV(ST(1),na);
+       void* obj = 0;
+       int (*bootproc)();
+       char tmpbuf[1024];
+       char tmpbuf2[128];
+       AV *av = GvAVn(incgv);
+       I32 i;
+
+       for (i = 0; i <= AvFILL(av); i++) {
+           (void)sprintf(tmpbuf, "%s/auto/%s/%s.so",
+               SvPVx(*av_fetch(av, i, TRUE), na), package, package);
+           if (obj = dlopen(tmpbuf,1))
+               break;
+       }
+       if (!obj)
+           croak("Can't find loadable object for package %s in @INC", package);
+
+       sprintf(tmpbuf2, "boot_%s", package);
+       bootproc = (int (*)())dlsym(obj, tmpbuf2);
+       if (!bootproc)
+           croak("Shared object %s contains no %s function", tmpbuf, tmpbuf2);
+       bootproc();
+
+       ST(0) = sv_mortalcopy(&sv_yes);
+    }
+    return ax;
+}
+
+int
+boot_DynamicLoader(ix,sp,items)
+int ix;
+int sp;
+int items;
+{
+    char* file = __FILE__;
+
+    newXSUB("DynamicLoader::bootstrap", 0, XS_DynamicLoader_bootstrap, file);
+}
diff --git a/dlperl/Makefile b/dlperl/Makefile
deleted file mode 100644 (file)
index 64cfc76..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-
-# perl
-# - location of uperl.o and include files
-PERL = ../perl-lib
-# - libraries required by perl - from config.sh
-PERL_LIBS = -ldbm -lm -lposix
-
-UPERL  = $(PERL)/uperl4.035.o
-UPERL  = ../sybperl/uperl2.o
-
-DP_C   = \
-       dlperl.c \
-       usersub.c
-
-DP_H   =
-
-
-CC     = gcc-2.2.2
-CPPFLAGS= -I$(PERL)
-#CFLAGS        = -g
-
-ALL    = \
-       dlperl
-
-
-all: $(ALL) tags
-
-dlperl: $(UPERL) $(DP_C:.c=.o)
-       $(LINK.c) -o dlperl $(UPERL) $(DP_C:.c=.o) \
-               $(PERL_LIBS) \
-               -ldl -lc.1.6
-       ld-rules -clobber dlperl
-
-dlperl.s: dlperl.c
-       $(COMPILE.c) -S $(OUTPUT_OPTION) dlperl.c
-
-tags:  $(DP_C) $(DP_H)
-       ctags $(DP_C) $(DP_H)
-
-lint:
-       $(LINT.c) $(DP_C) $(LINT_LN)
-
-clean:
-       rm -f core *.o
-
-clobber:       clean
-       rm -f $(ALL) tags
-
-install:
-
-.KEEP_STATE:
diff --git a/dlperl/dlperl.c b/dlperl/dlperl.c
deleted file mode 100644 (file)
index 49d48bb..0000000
+++ /dev/null
@@ -1,1037 +0,0 @@
-static char    sccsid[] = "@(#)dlperl.c        1.2 10/12/92 (DLPERL)";
-
-/*
- *     name:   dlperl.c
- * synopsis:   dlperl - perl interface to dynamically linked usubs
- *   sccsid:   @(#)dlperl.c    1.2 10/12/92
- */
-
-/*
- * NOTE: this code is *not* portable
- *      - uses SPARC assembler with gcc asm extensions
- *      - is SPARC ABI specific
- *      - uses SunOS 4.x dlopen
- *
- * NOTE: not all types are currently implemented
- *       - multiple indirections (pointers to pointers, etc.)
- *      - structures
- *      - quad-precison (long double)
- */
-
-#include <dlfcn.h>
-#include <alloca.h>
-#include <ctype.h>
-
-/* perl */
-#include "EXTERN.h"
-#include "perl.h"
-
-/* globals */
-int    Dl_warn                 = 1;
-int    Dl_errno;
-#define DL_ERRSTR_SIZ          256
-char   Dl_errstr[DL_ERRSTR_SIZ];
-#define WORD_SIZE      (sizeof(int))
-
-static int     userval();
-static int     userset();
-static int     usersub();
-
-
-/*
- * glue perl subroutines and variables to dlperl functions
- */
-enum usersubs {
-       US_dl_open,
-       US_dl_sym,
-       US_dl_call,
-       US_dl_close,
-};
-
-enum uservars {
-       UV_DL_VERSION,
-       UV_DL_WARN,
-       UV_dl_errno,
-       UV_dl_errstr,
-};
-
-
-int
-dlperl_init()
-{
-       struct ufuncs   uf;
-       char    *file = "dlperl.c";
-
-       uf.uf_val = userval;
-       uf.uf_set = userset;
-
-#define MAGICVAR(name, ix) uf.uf_index = ix, magicname(name, &uf, sizeof uf)
-
-       /* subroutines */
-       make_usub("dl_open",            US_dl_open,             usersub, file);
-       make_usub("dl_sym",             US_dl_sym,              usersub, file);
-       make_usub("dl_call",            US_dl_call,             usersub, file);
-       make_usub("dl_close",           US_dl_close,            usersub, file);
-
-       /* variables */
-       MAGICVAR("DL_VERSION",          (int) UV_DL_VERSION);
-       MAGICVAR("DL_WARN",             (int) UV_DL_WARN);
-       MAGICVAR("dl_errno",            (int) UV_dl_errno);
-       MAGICVAR("dl_errstr",           (int) UV_dl_errstr);
-
-       return 0;
-}
-
-
-/*
- * USERVAL AND USERSET
- */
-
-/*
- * assign dlperl variables to perl variables
- */
-/*ARGSUSED*/
-static int
-userval(ix, str)
-int    ix;
-STR    *str;
-{
-       switch(ix) {
-       case UV_DL_VERSION:
-               str_set(str, sccsid);
-               break;
-       case UV_DL_WARN:
-               str_numset(str, (double) Dl_warn);
-               break;
-       case UV_dl_errno:
-               str_numset(str, (double) Dl_errno);
-               break;
-       case UV_dl_errstr:
-               str_set(str, Dl_errstr);
-               break;
-       default:
-               fatal("dlperl: unimplemented userval");
-               break;
-       }
-       return 0;
-}
-
-/*
- * assign perl variables to dlperl variables
- */
-static int
-userset(ix, str)
-int    ix;
-STR    *str;
-{
-       switch(ix) {
-       case UV_DL_WARN:
-               Dl_warn = (int) str_gnum(str);
-               break;
-       default:
-               fatal("dlperl: unimplemented userset");
-               break;
-       }
-       return 0;
-}
-
-
-/*
- * USERSUBS
- */
-static int
-usersub(ix, sp, items)
-int    ix;
-register int   sp;
-register int   items;
-{
-       int     oldsp = sp;
-       STR     **st = stack->ary_array + sp;
-       register STR    *Str;   /* used in str_get and str_gnum macros */
-
-       Dl_errno = 0;
-       *Dl_errstr = '\0';
-
-       switch(ix) {
-       case US_dl_open:
-       {
-               char    *file;
-               void    *dl_so;
-
-               if(items != 1) {
-                       fatal("Usage: $dl_so = &dl_open($file)");
-                       return oldsp;
-               }
-
-               file = str_get(st[1]);
-               dl_so = dlopen(file, 1);
-
-               --sp;
-               if(dl_so == NULL) {
-                       Dl_errno = 1;
-                       (void) sprintf(Dl_errstr, "&dl_open: %s", dlerror());
-                       if(Dl_warn) warn(Dl_errstr);
-
-                       astore(stack, ++sp, str_mortal(&str_undef));
-               } else {
-                       astore(stack, ++sp, str_2mortal(str_make(
-                               (char *) &dl_so, sizeof(void *))));
-               }
-               break;
-       }
-       case US_dl_sym:
-       {
-               void    *dl_so;
-               char    *symbol;
-               void    *dl_func;
-
-               if(items != 2) {
-                       fatal("Usage: $dl_func = &dl_sym($dl_so, $symbol)");
-                       return oldsp;
-               }
-
-               dl_so = *(void **) str_get(st[1]);
-               symbol = str_get(st[2]);
-               dl_func = dlsym(dl_so, symbol);
-
-               --sp;
-               if(dl_func == NULL) {
-                       Dl_errno = 1;
-                       (void) sprintf(Dl_errstr, "&dl_sym: %s", dlerror());
-                       if(Dl_warn) warn(Dl_errstr);
-
-                       astore(stack, ++sp, str_mortal(&str_undef));
-               } else {
-                       astore(stack, ++sp, str_2mortal(str_make(
-                               (char *) &dl_func, sizeof(void *))));
-               }
-               break;
-       }
-       case US_dl_call:
-       {
-               void    *dl_func;
-               char    *parms_desc, *return_desc;
-               int     nstack, nparm, narr, nlen, nrep;
-               int     f_indirect, f_no_parm, f_result;
-               char    c, *c_p;                int     c_pn = 0;
-               unsigned char   C, *C_p;        int     C_pn = 0;
-               short   s, *s_p;                int     s_pn = 0;
-               unsigned short  S, *S_p;        int     S_pn = 0;
-               int     i, *i_p;                int     i_pn = 0;
-               unsigned int    I, *I_p;        int     I_pn = 0;
-               long    l, *l_p;                int     l_pn = 0;
-               unsigned long   L, *L_p;        int     L_pn = 0;
-               float   f, *f_p;                int     f_pn = 0;
-               double  d, *d_p;                int     d_pn = 0;
-               char    *a, **a_p;              int     a_pn = 0;
-               char    *p, **p_p;              int     p_pn = 0;
-               unsigned int    *stack_base, *stack_p;
-               unsigned int    *xp;
-               void    (*func)();
-               unsigned int    ret_o;
-               double  ret_fd;
-               float   ret_f;
-               char    *c1;
-               int     n1, n2;
-
-               if(items < 3) {
-fatal("Usage: @vals = &dl_call($dl_func, $parms_desc, $return_desc, @parms)");
-                       return oldsp;
-               }
-               dl_func = *(void **) str_get(st[1]);
-               parms_desc = str_get(st[2]);
-               return_desc = str_get(st[3]);
-
-               /* determine size of stack and temporaries */
-#      define CNT_STK_TMP(PN, SN)                                      \
-               n2 = 0; do {                                            \
-                       if(f_indirect) {                                \
-                               PN += narr;                             \
-                               ++nstack;                               \
-                               if(!f_no_parm)                          \
-                                       nparm += narr;                  \
-                       } else {                                        \
-                               nstack += SN;                           \
-                               if(!f_no_parm)                          \
-                                       ++nparm;                        \
-                       }                                               \
-               } while(++n2 < nrep);                                   \
-               f_indirect = f_no_parm = narr = nrep = 0;
-
-               nstack = 0;
-               nparm = 0;
-               f_indirect = f_no_parm = narr = nrep = 0;
-               for(c1 = parms_desc;*c1;++c1) {
-                       switch(*c1) {
-                       case ' ':
-                       case '\t':
-                               break;
-
-                       case 'c': /* signed char */
-                               CNT_STK_TMP(c_pn, 1);
-                               break;
-                       case 'C': /* unsigned char */
-                               CNT_STK_TMP(C_pn, 1);
-                               break;
-                       case 's': /* signed short */
-                               CNT_STK_TMP(s_pn, 1);
-                               break;
-                       case 'S': /* unsigned short */
-                               CNT_STK_TMP(S_pn, 1);
-                               break;
-                       case 'i': /* signed int */
-                               CNT_STK_TMP(i_pn, 1);
-                               break;
-                       case 'I': /* unsigned int */
-                               CNT_STK_TMP(I_pn, 1);
-                               break;
-                       case 'l': /* signed long */
-                               CNT_STK_TMP(l_pn, 1);
-                               break;
-                       case 'L': /* unsigned long */
-                               CNT_STK_TMP(L_pn, 1);
-                               break;
-                       case 'f': /* float */
-                               CNT_STK_TMP(f_pn, 1);
-                               break;
-                       case 'd': /* double */
-                               CNT_STK_TMP(d_pn, 2);
-                               break;
-                       case 'a': /* ascii (null-terminated) string */
-                               CNT_STK_TMP(a_pn, 1);
-                               break;
-                       case 'p': /* pointer to <nlen> buffer */
-                               CNT_STK_TMP(p_pn, 1);
-                               break;
-
-                       case '&': /* pointer = [1] */
-                               if(f_indirect) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-               "&dl_call: parms_desc %s: too many indirections, with char %c",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               f_indirect = 1;
-                               narr = 1;
-                               break;
-                       case '[': /* array */
-                               if(f_indirect) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-               "&dl_call: parms_desc %s: too many indirections, with char %c",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               f_indirect = 1;
-                               ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               while(isdigit(*c1)) {
-                                       narr = narr * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               if(*c1 != ']') {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                       "&dl_call: parms_desc %s: bad char %c, expected ]",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               break;
-                       case '<': /* length */
-                               ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               while(isdigit(*c1))
-                                       ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               if(*c1 != '>') {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                       "&dl_call: parms_desc %s: bad char %c, expected >",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               break;
-                       case '+':
-                               break;
-                       case '-':
-                               f_no_parm = 1;
-                               break;
-                       case '0': case '1': case '2': case '3': case '4':
-                       case '5': case '6': case '7': case '8': case '9':
-                               if(nrep) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                                               "&dl_call: too many repeats");
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               while(isdigit(*c1)) {
-                                       nrep = nrep * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               --c1;
-                               break;
-                       default:
-                               Dl_errno = 1;
-                               (void) sprintf(Dl_errstr,
-                                       "&dl_call: parms_desc %s: bad char %c",
-                                       parms_desc, *c1);
-                               if(Dl_warn) warn(Dl_errstr);
-                               return oldsp;
-                       }
-               }
-               /* trailing &[]<>+-0-9 is ignored */
-               if(nparm != items - 3) {
-                       Dl_errno = 1;
-                       (void) sprintf(Dl_errstr,
-                               "&dl_call: bad parameter count %d, expected %d",
-                               items - 3, nparm);
-                       if(Dl_warn) warn(Dl_errstr);
-                       return oldsp;
-               }
-               nparm = 4;
-
-               /* allocate temporaries */
-               if((c_pn && (c_p = (char *)
-                       alloca(c_pn * sizeof(char))) == NULL) ||
-                  (C_pn && (C_p = (unsigned char *)
-                       alloca(C_pn * sizeof(unsigned char))) == NULL) ||
-                  (s_pn && (s_p = (short *)
-                       alloca(s_pn * sizeof(short))) == NULL) ||
-                  (S_pn && (S_p = (unsigned short *)
-                       alloca(S_pn * sizeof(unsigned short))) == NULL) ||
-                  (i_pn && (i_p = (int *)
-                       alloca(i_pn * sizeof(int))) == NULL) ||
-                  (I_pn && (I_p = (unsigned int *)
-                       alloca(I_pn * sizeof(unsigned int))) == NULL) ||
-                  (l_pn && (l_p = (long *)
-                       alloca(l_pn * sizeof(long))) == NULL) ||
-                  (L_pn && (L_p = (unsigned long *)
-                       alloca(L_pn * sizeof(unsigned long))) == NULL) ||
-                  (f_pn && (f_p = (float *)
-                       alloca(f_pn * sizeof(float))) == NULL) ||
-                  (d_pn && (d_p = (double *)
-                       alloca(d_pn * sizeof(double))) == NULL) ||
-                  (a_pn && (a_p = (char **)
-                       alloca(a_pn * sizeof(char *))) == NULL) ||
-                  (p_pn && (p_p = (char **)
-                       alloca(p_pn * sizeof(char *))) == NULL)) {
-                       Dl_errno = 1;
-                       (void) sprintf(Dl_errstr, "&dl_call: bad alloca");
-                       if(Dl_warn) warn(Dl_errstr);
-                       return oldsp;
-               }
-
-               /* grow stack - maintains stack alignment (double word) */
-               /* NOTE: no functions should be called otherwise the stack */
-               /*       that is being built will be corrupted */
-               /* NOTE: some of the stack is pre-allocated, but is not */
-               /*       reused here */
-               if(alloca(nstack * WORD_SIZE) == NULL) {
-                       Dl_errno = 1;
-                       (void) sprintf(Dl_errstr, "&dl_call: bad alloca");
-                       if(Dl_warn) warn(Dl_errstr);
-                       return oldsp;
-               }
-
-               /* stack base */
-#if !defined(lint)
-               asm("add %%sp,68,%%o0;st %%o0,%0" :
-                       "=g" (stack_base) : /* input */ : "%%o0");
-#else
-               stack_base = 0;
-#endif
-               stack_p = stack_base;
-
-               /* layout stack */
-#      define LAY_STK_NUM(T, P, PN)                                    \
-               n2 = 0; do {                                            \
-                       if(f_indirect) {                                \
-                               *stack_p++ = (unsigned int) &P[PN];     \
-                               if(f_no_parm) {                         \
-                                       PN += narr;                     \
-                               } else {                                \
-                                       for(n1 = 0;n1 < narr;++n1) {    \
-                                           P[PN++] = (T)               \
-                                               str_gnum(st[nparm++]);  \
-                                       }                               \
-                               }                                       \
-                       } else {                                        \
-                               if(f_no_parm) {                         \
-                                       ++stack_p;                      \
-                               } else {                                \
-                                       *stack_p++ = (T)                \
-                                               str_gnum(st[nparm++]);  \
-                               }                                       \
-                       }                                               \
-               } while(++n2 < nrep);                                   \
-               f_indirect = f_no_parm = narr = nrep = 0;
-
-#      define LAY_STK_DOUBLE(T, P, PN)                                 \
-               n2 = 0; do {                                            \
-                       if(f_indirect) {                                \
-                               *stack_p++ = (unsigned int) &P[PN];     \
-                               if(f_no_parm) {                         \
-                                       PN += narr;                     \
-                               } else {                                \
-                                       for(n1 = 0;n1 < narr;++n1) {    \
-                                           P[PN++] = (T)               \
-                                               str_gnum(st[nparm++]);  \
-                                       }                               \
-                               }                                       \
-                       } else {                                        \
-                               if(f_no_parm) {                         \
-                                       stack_p += 2;                   \
-                               } else {                                \
-                                       d = (T) str_gnum(st[nparm++]);  \
-                                       xp = (unsigned int *) &d;       \
-                                       *stack_p++ = *xp++;             \
-                                       *stack_p++ = *xp;               \
-                               }                                       \
-                       }                                               \
-               } while(++n2 < nrep);                                   \
-               f_indirect = f_no_parm = narr = nrep = 0;
-
-#      define LAY_STK_STR(P, PN)                                       \
-               n2 = 0; do {                                            \
-                       if(f_indirect) {                                \
-                               *stack_p++ = (unsigned int) &P[PN];     \
-                               if(f_no_parm) {                         \
-                                       PN += narr;                     \
-                               } else {                                \
-                                       for(n1 = 0;n1 < narr;++n1) {    \
-                                           P[PN++] =                   \
-                                               str_get(st[nparm++]);   \
-                                       }                               \
-                               }                                       \
-                       } else {                                        \
-                               if(f_no_parm) {                         \
-                                       ++stack_p;                      \
-                               } else {                                \
-                                       *stack_p++ = (unsigned int)     \
-                                               str_get(st[nparm++]);   \
-                               }                                       \
-                       }                                               \
-               } while(++n2 < nrep);                                   \
-               f_indirect = f_no_parm = narr = nrep = 0;
-
-               c_pn = C_pn = s_pn = S_pn = i_pn = I_pn = l_pn = L_pn = 0;
-               f_pn = d_pn = a_pn = p_pn = 0;
-               f_indirect = f_no_parm = narr = nrep = 0;
-               for(c1 = parms_desc;*c1;++c1) {
-                       switch(*c1) {
-                       case ' ':
-                       case '\t':
-                               break;
-
-                       case 'c': /* signed char */
-                               LAY_STK_NUM(char, c_p, c_pn);
-                               break;
-                       case 'C': /* unsigned char */
-                               LAY_STK_NUM(unsigned char, C_p, C_pn);
-                               break;
-                       case 's': /* signed short */
-                               LAY_STK_NUM(short, s_p, s_pn);
-                               break;
-                       case 'S': /* unsigned short */
-                               LAY_STK_NUM(unsigned short, S_p, S_pn);
-                               break;
-                       case 'i': /* signed int */
-                               LAY_STK_NUM(int, i_p, i_pn);
-                               break;
-                       case 'I': /* unsigned int */
-                               LAY_STK_NUM(unsigned int, I_p, I_pn);
-                               break;
-                       case 'l': /* signed long */
-                               LAY_STK_NUM(long, l_p, l_pn);
-                               break;
-                       case 'L': /* unsigned long */
-                               LAY_STK_NUM(unsigned long, L_p, L_pn);
-                               break;
-                       case 'f': /* float */
-                               LAY_STK_NUM(float, f_p, f_pn);
-                               break;
-                       case 'd': /* double */
-                               LAY_STK_DOUBLE(double, d_p, d_pn);
-                               break;
-                       case 'a': /* ascii (null-terminated) string */
-                               LAY_STK_STR(a_p, a_pn);
-                               break;
-                       case 'p': /* pointer to <nlen> buffer */
-                               LAY_STK_STR(p_p, p_pn);
-                               break;
-
-                       case '&': /* pointer = [1] */
-                               if(f_indirect) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-               "&dl_call: parms_desc %s: too many indirections, with char %c",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               f_indirect = 1;
-                               narr = 1;
-                               break;
-                       case '[': /* array */
-                               if(f_indirect) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-               "&dl_call: parms_desc %s: too many indirections, with char %c",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               f_indirect = 1;
-                               ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               while(isdigit(*c1)) {
-                                       narr = narr * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               if(*c1 != ']') {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                       "&dl_call: parms_desc %s: bad char %c, expected ]",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               break;
-                       case '<': /* length */
-                               ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               while(isdigit(*c1))
-                                       ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               if(*c1 != '>') {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                       "&dl_call: parms_desc %s: bad char %c, expected >",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               break;
-                       case '+':
-                               break;
-                       case '-':
-                               f_no_parm = 1;
-                               break;
-                       case '0': case '1': case '2': case '3': case '4':
-                       case '5': case '6': case '7': case '8': case '9':
-                               if(nrep) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                                               "&dl_call: too many repeats");
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               while(isdigit(*c1)) {
-                                       nrep = nrep * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               --c1;
-                               break;
-                       default:
-                               Dl_errno = 1;
-                               (void) sprintf(Dl_errstr,
-                                       "&dl_call: parms_desc %s: bad char %c",
-                                       parms_desc, *c1);
-                               if(Dl_warn) warn(Dl_errstr);
-                               return oldsp;
-                       }
-               }
-               /* trailing &[]<>+-0-9 is ignored */
-
-               /* call function */
-               /* NOTE: the first 6 words are passed in registers %o0 - %o5 */
-               /*       %sp+68 to %sp+92 are vacant, but allocated */
-               /*       and shadow %o0 - %o5 */
-               /*       above stack_base starts at %sp+68 and the function */
-               /*       call below sets up %o0 - %o5 from stack_base */
-               func = (void (*)()) dl_func;
-               (*func)(stack_base[0], stack_base[1], stack_base[2],
-                       stack_base[3], stack_base[4], stack_base[5]);
-
-               /* save return value */
-               /* NOTE: return values are either in %o0 or %f0 */
-#if !defined(lint)
-               asm("st %%o0,%0" : "=g" (ret_o) : /* input */);
-               asm("std %%f0,%0" : "=g" (ret_fd) : /* input */);
-               asm("st %%f0,%0" : "=g" (ret_f) : /* input */);
-#else
-               ret_o = 0; ret_fd = 0.0; ret_f = 0.0;
-#endif
-
-               /* parameter results */
-#      define RES_NUM(P, PN, SN)                                       \
-               n2 = 0; do {                                            \
-                       if(f_indirect) {                                \
-                               ++nstack;                               \
-                               if(f_result) {                          \
-                                       for(n1 = 0;n1 < narr;++n1) {    \
-                                         astore(stack, ++sp, str_2mortal( \
-                                           str_nmake((double) P[PN++]))); \
-                                       }                               \
-                               } else {                                \
-                                       PN += narr;                     \
-                               }                                       \
-                       } else {                                        \
-                               nstack += SN;                           \
-                               if(f_result) {                          \
-                                       astore(stack, ++sp,             \
-                                               str_mortal(&str_undef));\
-                               }                                       \
-                       }                                               \
-               } while(++n2 < nrep);                                   \
-               f_indirect = f_result = narr = nlen = nrep = 0;
-
-#      define RES_STR(P, PN, L, SN)                                    \
-               n2 = 0; do {                                            \
-                       if(f_indirect) {                                \
-                               ++nstack;                               \
-                               if(f_result) {                          \
-                                       for(n1 = 0;n1 < narr;++n1) {    \
-                                         astore(stack, ++sp, str_2mortal( \
-                                           str_make(P[PN++], L)));     \
-                                       }                               \
-                               } else {                                \
-                                       PN += narr;                     \
-                               }                                       \
-                       } else {                                        \
-                               if(f_result) {                          \
-                                       astore(stack, ++sp, str_2mortal(\
-                                         str_make((char *)     \
-                                           stack_base[nstack], L)));   \
-                               }                                       \
-                               nstack += SN;                           \
-                       }                                               \
-               } while(++n2 < nrep);                                   \
-               f_indirect = f_result = narr = nlen = nrep = 0;
-
-               --sp;
-               nstack = 0;
-               c_pn = C_pn = s_pn = S_pn = i_pn = I_pn = l_pn = L_pn = 0;
-               f_pn = d_pn = a_pn = p_pn = 0;
-               f_indirect = f_result = narr = nlen = nrep = 0;
-               for(c1 = parms_desc;*c1;++c1) {
-                       switch(*c1) {
-                       case ' ':
-                       case '\t':
-                               break;
-
-                       case 'c': /* signed char */
-                               RES_NUM(c_p, c_pn, 1);
-                               break;
-                       case 'C': /* unsigned char */
-                               RES_NUM(C_p, C_pn, 1);
-                               break;
-                       case 's': /* signed short */
-                               RES_NUM(s_p, s_pn, 1);
-                               break;
-                       case 'S': /* unsigned short */
-                               RES_NUM(S_p, S_pn, 1);
-                               break;
-                       case 'i': /* signed int */
-                               RES_NUM(i_p, i_pn, 1);
-                               break;
-                       case 'I': /* unsigned int */
-                               RES_NUM(I_p, I_pn, 1);
-                               break;
-                       case 'l': /* signed long */
-                               RES_NUM(l_p, l_pn, 1);
-                               break;
-                       case 'L': /* unsigned long */
-                               RES_NUM(L_p, L_pn, 1);
-                               break;
-                       case 'f': /* float */
-                               RES_NUM(f_p, f_pn, 1);
-                               break;
-                       case 'd': /* double */
-                               RES_NUM(d_p, d_pn, 2);
-                               break;
-                       case 'a': /* ascii (null-terminated) string */
-                               RES_STR(a_p, a_pn, 0, 1);
-                               break;
-                       case 'p': /* pointer to <nlen> buffer */
-                               RES_STR(p_p, p_pn, nlen, 1);
-                               break;
-
-                       case '&': /* pointer = [1] */
-                               if(f_indirect) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-               "&dl_call: parms_desc %s: too many indirections, with char %c",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               f_indirect = 1;
-                               narr = 1;
-                               break;
-                       case '[': /* array */
-                               if(f_indirect) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-               "&dl_call: parms_desc %s: too many indirections, with char %c",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               f_indirect = 1;
-                               ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               while(isdigit(*c1)) {
-                                       narr = narr * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               if(*c1 != ']') {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                       "&dl_call: parms_desc %s: bad char %c, expected ]",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               break;
-                       case '<': /* length */
-                               ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               while(isdigit(*c1)) {
-                                       nlen = nlen * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               if(*c1 != '>') {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                       "&dl_call: parms_desc %s: bad char %c, expected >",
-                                               parms_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               break;
-                       case '+':
-                               f_result = 1;
-                               break;
-                       case '-':
-                               break;
-                       case '0': case '1': case '2': case '3': case '4':
-                       case '5': case '6': case '7': case '8': case '9':
-                               if(nrep) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                                               "&dl_call: too many repeats");
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               while(isdigit(*c1)) {
-                                       nrep = nrep * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               --c1;
-                               break;
-                       default:
-                               Dl_errno = 1;
-                               (void) sprintf(Dl_errstr,
-                                       "&dl_call: parms_desc %s: bad char %c",
-                                       parms_desc, *c1);
-                               if(Dl_warn) warn(Dl_errstr);
-                               return oldsp;
-                       }
-               }
-               /* trailing &[]<>+-0-9 is ignored */
-
-               /* return value */
-#      define RET_NUM(T, S, P, R)                                      \
-               if(f_indirect) {                                        \
-                       P = (T *) ret_o;                                \
-                       for(n1 = 0;n1 < narr;++n1) {                    \
-                               S = *P++;                               \
-                               astore(stack, ++sp, str_2mortal(        \
-                                       str_nmake((double) S)));        \
-                       }                                               \
-               } else {                                                \
-                       S = (T) R;                                      \
-                       astore(stack, ++sp, str_2mortal(                \
-                               str_nmake((double) S)));                \
-               }
-
-#      define RET_STR(S, P, L)                                         \
-               if(f_indirect) {                                        \
-                       P = (char **) ret_o;                            \
-                       for(n1 = 0;n1 < narr;++n1) {                    \
-                               S = *P++;                               \
-                               astore(stack, ++sp, str_2mortal(        \
-                                       str_make((char *) S, L)));      \
-                       }                                               \
-               } else {                                                \
-                       S = (char *) ret_o;                             \
-                       astore(stack, ++sp, str_2mortal(                \
-                               str_make((char *) S, L)));              \
-               }
-
-               f_indirect = nlen = narr = 0;
-               for(c1 = return_desc;*c1;++c1) {
-                       switch(*c1) {
-                       case ' ':
-                       case '\t':
-                               break;
-
-                       case 'c': /* signed char */
-                               RET_NUM(char, c, c_p, ret_o);
-                               goto ret_exit;
-                       case 'C': /* unsigned char */
-                               RET_NUM(unsigned char, C, C_p, ret_o);
-                               goto ret_exit;
-                       case 's': /* signed short */
-                               RET_NUM(short, s, s_p, ret_o);
-                               goto ret_exit;
-                       case 'S': /* unsigned short */
-                               RET_NUM(unsigned short, S, S_p, ret_o);
-                               goto ret_exit;
-                       case 'i': /* signed int */
-                               RET_NUM(int, i, i_p, ret_o);
-                               goto ret_exit;
-                       case 'I': /* unsigned int */
-                               RET_NUM(unsigned int, I, I_p, ret_o);
-                               goto ret_exit;
-                       case 'l': /* signed long */
-                               RET_NUM(long, l, l_p, ret_o);
-                               goto ret_exit;
-                       case 'L': /* unsigned long */
-                               RET_NUM(unsigned long, L, L_p, ret_o);
-                               goto ret_exit;
-                       case 'f': /* float */
-                               RET_NUM(float, f, f_p, ret_f);
-                               break;
-                       case 'd': /* double */
-                               RET_NUM(double, d, d_p, ret_fd);
-                               goto ret_exit;
-                       case 'a': /* ascii (null-terminated) string */
-                               RET_STR(a, a_p, 0);
-                               goto ret_exit;
-                       case 'p': /* pointer to <nlen> buffer */
-                               RET_STR(p, p_p, nlen);
-                               goto ret_exit;
-
-                       case '&': /* pointer = [1] */
-                               if(f_indirect) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-               "&dl_call: return_desc %s: too many indirections, with char %c",
-                                               return_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               f_indirect = 1;
-                               narr = 1;
-                               break;
-                       case '[': /* array */
-                               if(f_indirect) {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-               "&dl_call: return_desc %s: too many indirections, with char %c",
-                                               return_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               f_indirect = 1;
-                               ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               while(isdigit(*c1)) {
-                                       narr = narr * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               if(*c1 != ']') {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                       "&dl_call: return_desc %s: bad char %c, expected ]",
-                                               return_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               break;
-                       case '<': /* length */
-                               ++c1;
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               while(isdigit(*c1)) {
-                                       nlen = nlen * 10 + (*c1 - '0');
-                                       ++c1;
-                               }
-                               while(*c1 == ' ' && *c1 == '\t')
-                                       ++c1;
-                               if(*c1 != '>') {
-                                       Dl_errno = 1;
-                                       (void) sprintf(Dl_errstr,
-                       "&dl_call: return_desc %s: bad char %c, expected >",
-                                               return_desc, *c1);
-                                       if(Dl_warn) warn(Dl_errstr);
-                                       return oldsp;
-                               }
-                               break;
-                       default:
-                               Dl_errno = 1;
-                               (void) sprintf(Dl_errstr,
-                                       "&dl_call: return_desc %s: bad char %c",
-                                       return_desc, *c1);
-                               if(Dl_warn) warn(Dl_errstr);
-                               return oldsp;
-                       }
-               }
-ret_exit:      /* anything beyond first [cCsSiIlLdfap] is ignored */
-               break;
-       }
-       case US_dl_close:
-       {
-               void    *dl_so;
-               int     dl_err;
-
-               if(items != 1) {
-                       fatal("Usage: $dl_err = &dl_close($dl_so)");
-                       return oldsp;
-               }
-
-               dl_so = *(void **) str_get(st[1]);
-               dl_err = dlclose(dl_so);
-
-               --sp;
-               if(dl_err) {
-                       Dl_errno = 1;
-                       (void) sprintf(Dl_errstr, "&dl_close: %s", dlerror());
-                       if(Dl_warn) warn(Dl_errstr);
-               }
-               astore(stack, ++sp, str_2mortal(str_nmake((double) dl_err)));
-               break;
-       }
-       default:
-               fatal("dlperl: unimplemented usersub");
-               break;
-       }
-       return sp;
-}
diff --git a/dlperl/dlperl.doc b/dlperl/dlperl.doc
deleted file mode 100644 (file)
index 7da0dfe..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-
-
-
-DLPERL(1)                USER COMMANDS                  DLPERL(1)
-
-
-
-NAME
-     dlperl - dynamic link-editor subroutines for perl
-
-SYNOPSIS
-     $dl_so = &dl_open($file)
-     $dl_func = &dl_sym($dl_so, $symbol)
-     @vals = &dl_call($dl_func, $parms_desc, $return_desc, @parms)
-     $dl_err = &dl_close($dl_so)
-
-     $DL_VERSION
-     $DL_WARN
-     $dl_errno
-     $dl_errstr
-
-DESCRIPTION
-     _\bD_\bl_\bp_\be_\br_\bl is _\bp_\be_\br_\bl plus user defined  subroutines  (_\bu_\bs_\bu_\bb_\bs)  that
-     interface to the dynamic link-editor and can call most C and
-     Fortran functions whose object code has been linked  into  a
-     shared object file.
-
-     Subroutines
-
-     All  _\bd_\bl_\bp_\be_\br_\bl  subroutines  set  the  two   predefined   names
-     $dl_errno  and  $dl_errstr.   Only  partial  descriptions of
-     &dl_open, &dl_sym and &dl_close appear below, see _\bd_\bl_\bo_\bp_\be_\bn(_\b3_\bx)
-     for  a  complete description.  The following subroutines are
-     defined by _\bd_\bl_\bp_\be_\br_\bl:
-
-     &dl_open($file)
-             Adds the shared object  $_\bf_\bi_\bl_\be  to  _\bd_\bl_\bp_\be_\br_\bl's  address
-             space.   Returns  a  descriptor that can be used for
-             later reference to the object in  calls  to  &dl_sym
-             and  &dl_close.  When an error occurs an undef value
-             is returned.
-
-     &dl_sym($dl_so, $symbol)
-             Obtains an address binding for the function  $_\bs_\by_\bm_\bb_\bo_\bl
-             as  it  occurs  in  the  shared object identified by
-             $_\bd_\bl__\bs_\bo.  When an error  occurs  an  undef  value  is
-             returned.
-
-     &dl_call($dl_func, $parms_desc, $return_desc, @parms)
-             Calls the  function  identified  by  $_\bd_\bl__\bf_\bu_\bn_\bc.   The
-             function's   entry   parameters   are  described  by
-             $_\bp_\ba_\br_\bm_\bs__\bd_\be_\bs_\bc and assigned values  from  @_\bp_\ba_\br_\bm_\bs.   The
-             function's  exit value is described by $_\br_\be_\bt_\bu_\br_\bn__\bd_\be_\bs_\bc.
-             An array is returned that contains the values of any
-             result  parameters  and  the  return value.  When an
-             error  occurs  because  of  a  problem  parsing  the
-             descriptions  or  because  of an incorrect parameter
-             count no values are returned (although the  underly-
-             ing function may have been called).
-
-
-
-Sun Release 4.1       Last change: 10/16/92                     1
-
-
-
-
-
-
-DLPERL(1)                USER COMMANDS                  DLPERL(1)
-
-
-
-             The descriptions are sequences  of  characters  that
-             give the order and type of parameters:
-
-                  c    A signed char value.
-                  C    An unsigned char value.
-                  s    A signed short value.
-                  S    An unsigned short value.
-                  i    A signed integer value.
-                  I    An unsigned integer value.
-                  l    A signed long value.
-                  L    An unsigned long value.
-                  f    A single-precision float.
-                  d    A double-precision float.
-                  a    An ascii (null-terminated) string.
-                  p    A pointer to <length> buffer.
-
-             Each letter may optionally be preceded by  a  number
-             that gives a repeat count.  An array is specified by
-             a preceding [_\ba_\br_\br_\ba_\by__\bs_\bi_\bz_\be] (or & as  a  shorthand  for
-             [_\b1]).   (Multi-dimension  arrays  are  not currently
-             supported.)  Each scalar or array  element  is  ini-
-             tialized  from  @_\bp_\ba_\br_\bm_\bs.   A  preceding  - leaves the
-             parameter uninitialized.  Type _\bp expects a preceding
-             <_\bb_\bu_\bf_\bf_\be_\br__\bl_\be_\bn_\bg_\bt_\bh>.  A preceding + specifies that after
-             the function is called that  particular  parameter's
-             value   is  to  be  returned  (multiple  values  are
-             returned for array types, a + with a  integral  type
-             like  _\bi  returns  an undef value).  The $_\br_\be_\bt_\bu_\br_\bn__\bd_\be_\bs_\bc
-             contains only one letter with no repeat count, -  or
-             +.
-
-             An undef or zero-length $_\bp_\ba_\br_\bm__\bd_\be_\bs_\bc means  the  func-
-             tion  has  no parameters.  An undef or a zero-length
-             $_\br_\be_\bt_\bu_\br_\bn__\bd_\be_\bs_\bc  means  the  function   returns   void.
-             Strings  or  buffers  that must be a specific length
-             (because the values are overwritten)  must  be  pre-
-             extended.   Although  type _\bf is supported, compilers
-             typically pass floats as doubles.
-
-     &dl_close($dl_so)
-             Removes the shared object identified by $_\bd_\bl__\bs_\bo  from
-             _\bd_\bl_\bp_\be_\br_\bl's  address  space.  If successful, a value of
-             zero is returned.  When an error occurs  a  non-zero
-             value is returned.
-
-     Predefined Names
-
-     The following names have special meaning to _\bd_\bl_\bp_\be_\br_\bl.
-
-     $DL_VERSION
-             The version of _\bd_\bl_\bp_\be_\br_\bl.  This variable is read-only.
-
-
-
-
-Sun Release 4.1       Last change: 10/16/92                     2
-
-
-
-
-
-
-DLPERL(1)                USER COMMANDS                  DLPERL(1)
-
-
-
-     $DL_WARN
-             The  current  value  of  the  _\bd_\bl_\bp_\be_\br_\bl  warning  flag.
-             Default  is 1.  If non-zero, when errors occur warn-
-             ings are sent to standard error.  The warning is the
-             same information that is stored in $dl_errstr.
-
-     $dl_errno
-             The error number for the error that occurred.  If  a
-             _\bd_\bl_\bp_\be_\br_\bl  subroutine  completes successfully $dl_errno
-             is set to zero.  This variable is read-only.
-
-     $dl_errstr
-             The error message for the error that occurred.  If a
-             _\bd_\bl_\bp_\be_\br_\bl  subroutine completes successfully $dl_errstr
-             is set to a zero length string.   This  variable  is
-             read-only.
-
-EXAMPLES
-     This is an example of calling a simple C function:
-
-          open(OUT, ">example.c");
-          print OUT <<'EOC';
-               void
-               example(a1, a2, i1, d1, a3)
-               char *a1[2];
-               char *a2[2];
-               int  i1;
-               double    *d1;
-               char *a3[4];
-               {
-                    a3[i1 + (int) *d1] = a1[0];
-                    a3[i1 * (int) *d1] = a1[1];
-                    a3[(int) *d1 - i1] = a2[0];
-                    a3[(int) *d1 - 2 * i1] = a2[1];
-               }
-          EOC
-          close(OUT);
-
-          system("cc -c example.c;ld -o example.so example.o");
-
-          $dl_so = &dl_open("example.so");
-          die "$0: $dl_errstr" if($dl_errno);
-
-          $dl_func = &dl_sym($dl_so, "example");
-          die "$0: $dl_errstr" if($dl_errno);
-
-          $dl_func =~ s/(['\\])/\\$1/g;
-          eval <<EOC;
-               sub example {
-                    &dl_call('$dl_func', "2[2]a i &d -+[4]a", undef, @_);
-               }
-          EOC
-
-
-
-Sun Release 4.1       Last change: 10/16/92                     3
-
-
-
-
-
-
-DLPERL(1)                USER COMMANDS                  DLPERL(1)
-
-
-
-          @vals = &example("hacker,", "Perl", "another", "Just", 1, 2);
-          print "@vals\n";
-
-          &dl_close($dl_so);
-          die "$0: $dl_errstr" if($dl_errno);
-
-          unlink('example.c', 'example.o', 'example.so');
-
-     If a more complicated interface is needed,  the  dynamically
-     linked  function  can  define _\bu_\bs_\bu_\bb_\bs by calling internal _\bp_\be_\br_\bl
-     functions.
-
-AUTHOR
-     Eric Fifer <egf@sbi.com>
-
-SEE ALSO
-     perl(1), dlopen(3X), ld(1)
-
-BUGS
-     Additional parameter types should be implemented to  support
-     structures,  multi-dimension  arrays,  pointers  to  arrays,
-     pointers to functions, etc.
-
-     Unlike the _\bp_\ba_\bc_\bk operator,  the  repeat  count  precedes  the
-     letter  in  the $_\bp_\ba_\br_\bm__\bd_\be_\bs_\bc syntax.  The array size preceding
-     the parameter letter is also unconventional.
-
-     All errors set $dl_errno to 1.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Sun Release 4.1       Last change: 10/16/92                     4
-
-
-
diff --git a/dlperl/dlperl.man b/dlperl/dlperl.man
deleted file mode 100644 (file)
index 8879133..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-.\"
-.\"     name:  dlperl.man
-.\" synopsis:  dlperl man page
-.\"   sccsid:  @(#)dlperl.man  1.4 10/16/92 (DLPERL)
-.\"
-.ds RP 10/16/92
-.rn '' }`
-.de Sh
-.br
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp
-.if t .sp .5v
-.if n .sp
-..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-'''
-'''     Set up \*(-- to give an unbreakable dash;
-'''     string Tr holds user defined translation string.
-'''     Bell System Logo is used as a dummy character.
-'''
-.tr \(*W-|\(bv\*(Tr
-.ie n \{\
-.ds -- \(*W-
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-.ds L' '
-.ds R' '
-'br\}
-.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds L' `
-.ds R' '
-'br\}
-.TH DLPERL 1 "\*(RP"
-.UC
-.SH NAME
-dlperl \- dynamic link-editor subroutines for perl
-.SH SYNOPSIS
-.nf
-.ft B
-$dl_so = &dl_open($file)
-$dl_func = &dl_sym($dl_so, $symbol)
-@vals = &dl_call($dl_func, $parms_desc, $return_desc, @parms)
-$dl_err = &dl_close($dl_so)
-.ft
-.fi
-.LP
-.nf
-.ft B
-$DL_VERSION
-$DL_WARN
-$dl_errno
-$dl_errstr
-.ft
-.fi
-.SH DESCRIPTION
-.I Dlperl
-is \fIperl\fP plus user defined subroutines (\fIusubs\fP) that
-interface to the dynamic link-editor and can call most C and Fortran
-functions whose object code has been linked into a shared object file.
-.Sh "Subroutines"
-All \fIdlperl\fP subroutines set the two predefined names $dl_errno and
-$dl_errstr.  Only partial descriptions of &dl_open, &dl_sym and
-&dl_close appear below, see \fIdlopen(3x)\fP for a complete
-description.  The following subroutines are defined by \fIdlperl\fP:
-.Ip "&dl_open($file)" 8 2
-Adds the shared object \fI$file\fP to \fIdlperl\fP's address space.
-Returns a descriptor that can be used for later reference to the object
-in calls to &dl_sym and &dl_close.  When an error occurs
-an undef value is returned.
-.Ip "&dl_sym($dl_so, $symbol)" 8 2
-Obtains an address binding for the function \fI$symbol\fP as it occurs
-in the shared object identified by \fI$dl_so\fP.  When an error occurs
-an undef value is returned.
-.Ip "&dl_call($dl_func, $parms_desc, $return_desc, @parms)" 8 2
-Calls the function identified by \fI$dl_func\fP.  The function's entry
-parameters are described by \fI$parms_desc\fP and assigned values from
-\fI@parms\fP.  The function's exit value is described by
-\fI$return_desc\fP.  An array is returned that contains the values of
-any result parameters and the return value.  When an error occurs
-because of a problem parsing the descriptions or because of an
-incorrect parameter count no values are returned (although the
-underlying function may have been called).
-.Sp
-The descriptions are sequences of characters that give the order and
-type of parameters:
-.nf
-
-       c       A signed char value.
-       C       An unsigned char value.
-       s       A signed short value.
-       S       An unsigned short value.
-       i       A signed integer value.
-       I       An unsigned integer value.
-       l       A signed long value.
-       L       An unsigned long value.
-       f       A single-precision float.
-       d       A double-precision float.
-       a       An ascii (null-terminated) string.
-       p       A pointer to <length> buffer.
-
-.fi
-Each letter may optionally be preceded by a number that gives a repeat
-count.  An array is specified by a preceding \fI[array_size\fP] (or
-\fI&\fP as a shorthand for \fI[1]\fP).  (Multi-dimension arrays are not
-currently supported.)  Each scalar or array element is initialized from
-\fI@parms\fP.  A preceding \fI-\fP leaves the parameter uninitialized.
-Type \fIp\fP expects a preceding \fI<buffer_length>\fP.  A preceding
-\fI+\fP specifies that after the function is called that particular
-parameter's value is to be returned (multiple values are returned for
-array types, a \fI+\fP with a integral type like \fIi\fP returns an
-undef value).  The \fI$return_desc\fP contains only one letter with no
-repeat count, \fI-\fP or \fI+\fP.
-.Sp
-An undef or zero-length \fI$parm_desc\fP means the function has no
-parameters.  An undef or a zero-length \fI$return_desc\fP means the
-function returns void.  Strings or buffers that must be a specific
-length (because the values are overwritten) must be pre-extended.
-Although type \fIf\fP is supported, compilers typically pass floats as
-doubles.
-.Ip "&dl_close($dl_so)" 8 2
-Removes the shared object identified by \fI$dl_so\fP from
-\fIdlperl\fP's address space.  If successful, a value of zero is
-returned.  When an error occurs a non-zero value is returned.
-.Sh "Predefined Names"
-The following names have special meaning to \fIdlperl\fP.
-.Ip $DL_VERSION 8
-The version of \fIdlperl\fP.  This variable is read-only.
-.Ip $DL_WARN 8
-The current value of the \fIdlperl\fP warning flag.  Default is 1.  If
-non-zero, when errors occur warnings are sent to standard error.  The
-warning is the same information that is stored in $dl_errstr.
-.Ip $dl_errno 8
-The error number for the error that occurred.  If a \fIdlperl\fP
-subroutine completes successfully $dl_errno is set to zero.  This variable
-is read-only.
-.Ip $dl_errstr 8
-The error message for the error that occurred.  If a \fIdlperl\fP
-subroutine completes successfully $dl_errstr is set to a zero length
-string.  This variable is read-only.
-.SH EXAMPLES
-This is an example of calling a simple C function:
-.Sp
-.nf
-       open(OUT, ">example.c");
-       print OUT <<'EOC';
-               void
-               example(a1, a2, i1, d1, a3)
-               char    *a1[2];
-               char    *a2[2];
-               int     i1;
-               double  *d1;
-               char    *a3[4];
-               {
-                       a3[i1 + (int) *d1] = a1[0];
-                       a3[i1 * (int) *d1] = a1[1];
-                       a3[(int) *d1 - i1] = a2[0];
-                       a3[(int) *d1 - 2 * i1] = a2[1];
-               }
-       EOC
-       close(OUT);
-
-       system("cc -c example.c;ld -o example.so example.o");
-
-       $dl_so = &dl_open("example.so");
-       die "$0: $dl_errstr" if($dl_errno);
-
-       $dl_func = &dl_sym($dl_so, "example");
-       die "$0: $dl_errstr" if($dl_errno);
-
-       $dl_func =~ s/(['\e\e])/\e\e$1/g;
-       eval <<EOC;
-               sub example {
-                       &dl_call('$dl_func', "2[2]a i &d -+[4]a", undef, @_);
-               }
-       EOC
-
-       @vals = &example("hacker,", "Perl", "another", "Just", 1, 2);
-       print "@vals\en";
-
-       &dl_close($dl_so);
-       die "$0: $dl_errstr" if($dl_errno);
-
-       unlink('example.c', 'example.o', 'example.so');
-.fi
-.LP
-If a more complicated interface is needed, the dynamically linked
-function can define \fIusubs\fP by calling internal \fIperl\fP
-functions.
-.SH AUTHOR
-Eric Fifer <egf@sbi.com>
-.SH SEE ALSO
-.BR perl (1),
-.BR dlopen (3X),
-.BR ld (1)
-.SH BUGS
-Additional parameter types should be implemented to support structures,
-multi-dimension arrays, pointers to arrays, pointers to functions, etc.
-.LP
-Unlike the \fIpack\fP operator, the repeat count precedes the letter in
-the \fI$parm_desc\fP syntax.  The array size preceding the parameter
-letter is also unconventional.
-.LP
-All errors set $dl_errno to 1.
-.rn }` ''
diff --git a/dlperl/usersub.c b/dlperl/usersub.c
deleted file mode 100644 (file)
index 4ba3d6d..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/* $RCSfile: usersub.c,v $$Revision: 4.0.1.1 $$Date: 91/11/05 19:07:24 $
- *
- * $Log:       usersub.c,v $
- * Revision 4.0.1.1  91/11/05  19:07:24  lwall
- * patch11: there are now subroutines for calling back from C into Perl
- * 
- * Revision 4.0  91/03/20  01:56:34  lwall
- * 4.0 baseline.
- * 
- * Revision 3.0.1.1  90/08/09  04:06:10  lwall
- * patch19: Initial revision
- * 
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-
-int
-userinit()
-{
-    dlperl_init();
-}
-
-/* Be sure to refetch the stack pointer after calling these routines. */
-
-int
-callback(subname, sp, gimme, hasargs, numargs)
-char *subname;
-int sp;                        /* stack pointer after args are pushed */
-int gimme;             /* called in array or scalar context */
-int hasargs;           /* whether to create a @_ array for routine */
-int numargs;           /* how many args are pushed on the stack */
-{
-    static ARG myarg[3];       /* fake syntax tree node */
-    int arglast[3];
-    
-    arglast[2] = sp;
-    sp -= numargs;
-    arglast[1] = sp--;
-    arglast[0] = sp;
-
-    if (!myarg[0].arg_ptr.arg_str)
-       myarg[0].arg_ptr.arg_str = str_make("",0);
-
-    myarg[1].arg_type = A_WORD;
-    myarg[1].arg_ptr.arg_stab = stabent(subname, FALSE);
-
-    myarg[2].arg_type = hasargs ? A_EXPR : A_NULL;
-
-    return do_subr(myarg, gimme, arglast);
-}
-
-int
-callv(subname, sp, gimme, argv)
-char *subname;
-register int sp;       /* current stack pointer */
-int gimme;             /* called in array or scalar context */
-register char **argv;  /* null terminated arg list, NULL for no arglist */
-{
-    register int items = 0;
-    int hasargs = (argv != 0);
-
-    astore(stack, ++sp, Nullstr);      /* reserve spot for 1st return arg */
-    if (hasargs) {
-       while (*argv) {
-           astore(stack, ++sp, str_2mortal(str_make(*argv,0)));
-           items++;
-           argv++;
-       }
-    }
-    return callback(subname, sp, gimme, hasargs, items);
-}
diff --git a/doSH b/doSH
old mode 100644 (file)
new mode 100755 (executable)
index 1e95ad6..e176054
--- a/doSH
+++ b/doSH
@@ -1,48 +1,12 @@
-#!/bin/sh
-
-: if this fails, just run all the .SH files by hand
-. ./config.sh
-
-(
-    cd x2p
-    rm -f config.sh
-    case "$d_symlink" in
-    *define*) ln -s ../config.sh . || ln ../config.sh .;;
-    *) ln ../config.sh . || ln -s ../config.sh .
-    esac
-)
-
-cp cppstdin x2p
-
-echo " "
-echo "Doing variable substitutions on .SH files..."
-set x `awk '{print $1}' <MANIFEST | grep '\.SH'`
-shift
-case $# in
-0) set x *.SH; shift;;
-esac
-if test ! -f $1; then
-    shift
-fi
-for file in $*; do
-    set X
-    shift
-    chmod +x $file
-    case "$file" in
-    */*)
-       dir=`expr X$file : 'X\(.*\)/'`
-       file=`expr X$file : 'X.*/\(.*\)'`
-       (cd $dir && . ./$file)
-       ;;
-    *)
-       . ./$file
-       ;;
-    esac
-done
-if test -f config.h.SH; then
-    if test ! -f config.h; then
-       : oops, they left it out of MANIFEST, probably, so do it anyway.
-       . ./config.h.SH
-    fi
+:  doSH is obsolete.  Just use Configure -S
+:  
+if test -f Configure ; then TOP=.;
+elif test -f ../Configure ; then TOP=..;
+elif test -f ../../Configure ; then TOP=../..;
+elif test -f ../../../Configure ; then TOP=../../..;
+elif test -f ../../../../Configure ; then TOP=../../../..;
+else
+       echo "Can't find Configure" ; exit 1
 fi
-exit 0
+
+sh $TOP/Configure -S
diff --git a/doio.c b/doio.c
index 3d94e17..d7b964c 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -166,7 +166,7 @@ I32 len;
            if (isDIGIT(*name))
                fd = atoi(name);
            else {
-               gv = gv_fetchpv(name,FALSE);
+               gv = gv_fetchpv(name,FALSE,SVt_PVIO);
                if (!gv || !GvIO(gv)) {
 #ifdef EINVAL
                    errno = EINVAL;
@@ -332,7 +332,7 @@ register GV *gv;
     int filegid;
 
     if (!argvoutgv)
-       argvoutgv = gv_fetchpv("ARGVOUT",TRUE);
+       argvoutgv = gv_fetchpv("ARGVOUT",TRUE,SVt_PVIO);
     if (filemode & (S_ISUID|S_ISGID)) {
        fflush(IoIFP(GvIO(argvoutgv)));  /* chmod must follow last write */
 #ifdef HAS_FCHMOD
@@ -353,7 +353,7 @@ register GV *gv;
            if (inplace) {
                TAINT_PROPER("inplace open");
                if (strEQ(oldname,"-")) {
-                   defoutgv = gv_fetchpv("STDOUT",TRUE);
+                   defoutgv = gv_fetchpv("STDOUT",TRUE,SVt_PVIO);
                    return IoIFP(GvIO(gv));
                }
 #ifndef FLEXFILENAMES
@@ -457,7 +457,7 @@ register GV *gv;
     }
     if (inplace) {
        (void)do_close(argvoutgv,FALSE);
-       defoutgv = gv_fetchpv("STDOUT",TRUE);
+       defoutgv = gv_fetchpv("STDOUT",TRUE,SVt_PVIO);
     }
     return Nullfp;
 }
@@ -580,7 +580,7 @@ GV *gv;
 
     while (IoIFP(io)) {
 
-#ifdef STDSTDIO                        /* (the code works without this) */
+#ifdef USE_STD_STDIO                   /* (the code works without this) */
        if (IoIFP(io)->_cnt > 0)        /* cheat a little, since */
            return FALSE;               /* this is the most usual case */
 #endif
@@ -590,7 +590,7 @@ GV *gv;
            (void)ungetc(ch, IoIFP(io));
            return FALSE;
        }
-#ifdef STDSTDIO
+#ifdef USE_STD_STDIO
        if (IoIFP(io)->_cnt < -1)
            IoIFP(io)->_cnt = -1;
 #endif
@@ -738,7 +738,7 @@ SV *argstr;
 
 I32 chsize(fd, length)
 I32 fd;                        /* file descriptor */
-off_t length;          /* length to set file to */
+Off_t length;          /* length to set file to */
 {
     extern long lseek();
     struct flock fl;
@@ -1524,7 +1524,7 @@ SV **sp;
     STRLEN len;
     struct shmid_ds shmds;
 #ifndef VOIDSHMAT
-    extern char *shmat();
+    extern char *shmat P((int, char *, int));
 #endif
 
     id = SvIVx(*++mark);
diff --git a/dump.c b/dump.c
index 19633dc..932e1a2 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -61,6 +61,8 @@ HV* stash;
            HV *hv;
            if (GvCV(gv))
                dump_sub(gv);
+           if (GvFORM(gv))
+               dump_form(gv);
            if (*entry->hent_key == '_' && (hv = GvHV(gv)) && HvNAME(hv) &&
              hv != defstash)
                dump_packsubs(hv);              /* nested package */
@@ -73,18 +75,31 @@ dump_sub(gv)
 GV* gv;
 {
     SV *sv = sv_newmortal();
-    if (GvCV(gv)) {
-       gv_fullname(sv,gv);
-       dump("\nSUB %s = ", SvPVX(sv));
-       if (CvUSERSUB(GvCV(gv)))
-           dump("(xsub 0x%x %d)\n",
-               (long)CvUSERSUB(GvCV(gv)),
-               CvUSERINDEX(GvCV(gv)));
-       else if (CvROOT(GvCV(gv)))
-           dump_op(CvROOT(GvCV(gv)));
-       else
-           dump("<undef>\n");
-    }
+
+    gv_fullname(sv,gv);
+    dump("\nSUB %s = ", SvPVX(sv));
+    if (CvUSERSUB(GvCV(gv)))
+       dump("(xsub 0x%x %d)\n",
+           (long)CvUSERSUB(GvCV(gv)),
+           CvUSERINDEX(GvCV(gv)));
+    else if (CvROOT(GvCV(gv)))
+       dump_op(CvROOT(GvCV(gv)));
+    else
+       dump("<undef>\n");
+}
+
+void
+dump_form(gv)
+GV* gv;
+{
+    SV *sv = sv_newmortal();
+
+    gv_fullname(sv,gv);
+    dump("\nFORMAT %s = ", SvPVX(sv));
+    if (CvROOT(GvFORM(gv)))
+       dump_op(CvROOT(GvFORM(gv)));
+    else
+       dump("<undef>\n");
 }
 
 void
@@ -171,9 +186,22 @@ register OP *op;
            if (op->op_private & OPpREPEAT_DOLIST)
                (void)strcat(buf,"DOLIST,");
        }
-       else if (op->op_type == OP_ENTERSUBR) {
-           if (op->op_private & OPpSUBR_DB)
+       else if (op->op_type == OP_ENTERSUBR ||
+                op->op_type == OP_RV2SV ||
+                op->op_type == OP_RV2AV ||
+                op->op_type == OP_RV2HV ||
+                op->op_type == OP_RV2GV ||
+                op->op_type == OP_AELEM ||
+                op->op_type == OP_HELEM )
+       {
+           if (op->op_private & OPpDEREF_DB)
                (void)strcat(buf,"DB,");
+           if (op->op_private & OPpDEREF_AV)
+               (void)strcat(buf,"AV,");
+           if (op->op_private & OPpDEREF_HV)
+               (void)strcat(buf,"HV,");
+           if (op->op_private & HINT_STRICT_REFS)
+               (void)strcat(buf,"STRICT_REFS,");
        }
        else if (op->op_type == OP_CONST) {
            if (op->op_private & OPpCONST_BARE)
similarity index 100%
rename from client
rename to eg/client
similarity index 100%
rename from server
rename to eg/server
diff --git a/embed.h b/embed.h
index d94649d..f797078 100644 (file)
--- a/embed.h
+++ b/embed.h
@@ -40,7 +40,7 @@
 #define freq           perl_freq
 #define gid            perl_gid
 #define hexdigit       perl_hexdigit
-#define in_format      perl_in_format
+#define hints          perl_hints
 #define in_my          perl_in_my
 #define know_next      perl_know_next
 #define last_lop       perl_last_lop
@@ -57,7 +57,6 @@
 #define multi_open     perl_multi_open
 #define multi_start    perl_multi_start
 #define na             perl_na
-#define needblockscope perl_needblockscope
 #define nexttype       perl_nexttype
 #define nextval                perl_nextval
 #define no_aelem       perl_no_aelem
 #define av_fake                perl_av_fake
 #define av_fetch       perl_av_fetch
 #define av_fill                perl_av_fill
-#define av_free                perl_av_free
 #define av_len         perl_av_len
 #define av_make                perl_av_make
 #define av_pop         perl_av_pop
 #define cpy7bit                perl_cpy7bit
 #define cpytill                perl_cpytill
 #define croak          perl_croak
-#define cv_clear       perl_cv_clear
+#define cv_undef       perl_cv_undef
 #define cxinc          perl_cxinc
 #define deb            perl_deb
 #define deb_growlevel  perl_deb_growlevel
 #define gv_init                perl_gv_init
 #define he_delayfree   perl_he_delayfree
 #define he_free                perl_he_free
+#define hint           perl_hint
 #define hoistmust      perl_hoistmust
 #define hv_clear       perl_hv_clear
 #define hv_delete      perl_hv_delete
 #define hv_fetch       perl_hv_fetch
-#define hv_free                perl_hv_free
 #define hv_iterinit    perl_hv_iterinit
 #define hv_iterkey     perl_hv_iterkey
 #define hv_iternext    perl_hv_iternext
 #define pp_index       perl_pp_index
 #define pp_indread     perl_pp_indread
 #define pp_int         perl_pp_int
-#define pp_intadd      perl_pp_intadd
 #define pp_interp      perl_pp_interp
 #define pp_ioctl       perl_pp_ioctl
 #define pp_iter                perl_pp_iter
index 74554c7..04d7b9e 100644 (file)
@@ -19,7 +19,9 @@ typedef void* ODBM_File;
 
 static int dbmrefcnt;
 
+#ifndef DBM_REPLACE
 #define DBM_REPLACE 0
+#endif
 
 MODULE = ODBM_File     PACKAGE = ODBM_File     PREFIX = odbm_
 
diff --git a/ext/dbm/SDBM_File.so b/ext/dbm/SDBM_File.so
new file mode 100755 (executable)
index 0000000..87f4749
Binary files /dev/null and b/ext/dbm/SDBM_File.so differ
diff --git a/ext/dbm/perl b/ext/dbm/perl
new file mode 120000 (symlink)
index 0000000..899dc46
--- /dev/null
@@ -0,0 +1 @@
+../../perl
\ No newline at end of file
diff --git a/ext/dbm/sdbm/Makefile b/ext/dbm/sdbm/Makefile
new file mode 100755 (executable)
index 0000000..80b09cd
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# This Makefile is for the library part of sdbm.  For the
+# Full package, see makefile.sdbm.
+# 
+# Makefile for public domain ndbm-clone: sdbm
+# DUFF: use duff's device (loop unroll) in parts of the code
+#
+#
+CC = cc
+ranlib = /usr/bin/ranlib
+TOP = ../../..
+LDFLAGS = 
+CLDFLAGS = 
+SMALL = 
+LARGE =  
+
+# To use an alternate make, set  in config.sh.
+MAKE = make
+
+SHELL = /bin/sh
+CCCMD = `sh $(shellflags) $(TOP)/cflags $@`
+
+.c.o:
+       $(CCCMD) -I$(TOP) -DSDBM -DDUFF $*.c
+
+LIBOBJS = sdbm.o pair.o hash.o
+LIBSRCS = sdbm.c pair.c hash.c
+HDRS = tune.h sdbm.h pair.h $(TOP)/config.h
+
+libsdbm.a: $(LIBOBJS)
+       ar cr libsdbm.a $(LIBOBJS)
+       $(ranlib) libsdbm.a
+
+$(LIBOBJS): $(HDRS)
+
+lint:
+       lint -abchx $(LIBSRCS)
+
+clean:
+       rm -f *.o *.a mon.out core
+
+realclean:     clean
+       rm -f dbu libsdbm.a dbd dba dbe x-dbu *.dir *.pag
+       rm -f makefile Makefile
+
+purge: realclean
+
diff --git a/ext/dbm/sdbm/Makefile.SH b/ext/dbm/sdbm/Makefile.SH
new file mode 100644 (file)
index 0000000..9a19fa2
--- /dev/null
@@ -0,0 +1,80 @@
+if test -f config.sh; then TOP=.;
+elif test -f ../config.sh; then TOP=..;
+elif test -f ../../config.sh; then TOP=../..;
+elif test -f ../../../config.sh; then TOP=../../..;
+elif test -f ../../../../config.sh; then TOP=../../../..;
+else
+       echo "Can't find config.sh."; exit 1
+fi
+case $CONFIG in
+'')
+       . $TOP/config.sh
+       ;;
+esac
+: This forces SH files to create target in same directory as SH file.
+: This is so that make depend always knows where to find SH derivatives.
+
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+
+echo "Extracting ext/dbm/sdbm/Makefile (with variable substitutions)"
+: This section of the file will have variable substitutions done on it.
+: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
+: Protect any dollar signs and backticks that you do not want interpreted
+: by putting a backslash in front.  You may delete these comments.
+$spitshell >Makefile <<!GROK!THIS!
+#
+# This Makefile is for the library part of sdbm.  For the
+# Full package, see makefile.sdbm.
+# 
+# Makefile for public domain ndbm-clone: sdbm
+# DUFF: use duff's device (loop unroll) in parts of the code
+#
+#
+CC = $cc
+ranlib = $ranlib
+TOP = $TOP
+LDFLAGS = $ldflags
+CLDFLAGS = $ldflags
+SMALL = $small
+LARGE = $large $split
+
+# To use an alternate make, set $altmake in config.sh.
+MAKE = ${altmake-make}
+
+!GROK!THIS!
+
+: In the following dollars and backticks do not need the extra backslash.
+$spitshell >>Makefile <<'!NO!SUBS!'
+SHELL = /bin/sh
+CCCMD = `sh $(shellflags) $(TOP)/cflags $@`
+
+.c.o:
+       $(CCCMD) -I$(TOP) -DSDBM -DDUFF $*.c
+
+LIBOBJS = sdbm.o pair.o hash.o
+LIBSRCS = sdbm.c pair.c hash.c
+HDRS = tune.h sdbm.h pair.h $(TOP)/config.h
+
+libsdbm.a: $(LIBOBJS)
+       ar cr libsdbm.a $(LIBOBJS)
+       $(ranlib) libsdbm.a
+
+$(LIBOBJS): $(HDRS)
+
+lint:
+       lint -abchx $(LIBSRCS)
+
+clean:
+       rm -f *.o *.a mon.out core
+
+realclean:     clean
+       rm -f dbu libsdbm.a dbd dba dbe x-dbu *.dir *.pag
+       rm -f makefile Makefile
+
+purge: realclean
+
+!NO!SUBS!
+chmod 755 Makefile
+$eunicefix Makefile
index d60ccf0..c2d0959 100644 (file)
@@ -1,3 +1,9 @@
 This version of sdbm merely has all the dbm_* names translated to sdbm_*
 so that we can link ndbm and sdbm into the same executable.  (It also has
 the bad() macro redefined to allow a zero-length key.)
+
+
+Fri Apr 15 10:15:30 EDT 1994.
+
+Additional portability/configuration changes for libsdbm by Andy Dougherty
+doughera@lafcol.lafayette.edu.
index dce48fe..1196953 100644 (file)
@@ -26,7 +26,9 @@
 #define    NULL    ((char *) 0)
 #endif
 
-#include <ndbm.h>
+#ifdef I_NDBM
+# include <ndbm.h>
+#endif
 
 datum    fetch();
 datum    firstkey();
index 9b55a7f..eb585ac 100644 (file)
@@ -7,6 +7,7 @@
  * hashing routine
  */
 
+#include "config.h"
 #include "sdbm.h"
 /*
  * polynomial conversion ignoring overflows
diff --git a/ext/dbm/sdbm/libsdbm.a b/ext/dbm/sdbm/libsdbm.a
new file mode 100644 (file)
index 0000000..baf4b73
Binary files /dev/null and b/ext/dbm/sdbm/libsdbm.a differ
diff --git a/ext/dbm/sdbm/libsdbm_pure_q552_110.a b/ext/dbm/sdbm/libsdbm_pure_q552_110.a
new file mode 100644 (file)
index 0000000..3b426e8
Binary files /dev/null and b/ext/dbm/sdbm/libsdbm_pure_q552_110.a differ
diff --git a/ext/dbm/sdbm/makefile.sdbm b/ext/dbm/sdbm/makefile.sdbm
new file mode 100644 (file)
index 0000000..c959c1f
--- /dev/null
@@ -0,0 +1,55 @@
+#
+# makefile for public domain ndbm-clone: sdbm
+# DUFF: use duff's device (loop unroll) in parts of the code
+#
+CFLAGS = -O -DSDBM -DDUFF -DBSD42 -pic
+#LDFLAGS = -p
+
+OBJS = sdbm.o pair.o hash.o
+SRCS = sdbm.c pair.c hash.c dbu.c dba.c dbd.c util.c
+HDRS = tune.h sdbm.h pair.h
+MISC = README CHANGES COMPARE sdbm.3 dbe.c dbe.1 dbm.c dbm.h biblio \
+       readme.ms readme.ps
+
+all: dbu dba dbd dbe
+
+dbu: dbu.o sdbm util.o
+       cc $(LDFLAGS) -o dbu dbu.o util.o libsdbm.a
+
+dba: dba.o util.o
+       cc $(LDFLAGS) -o dba dba.o util.o
+dbd: dbd.o util.o
+       cc $(LDFLAGS) -o dbd dbd.o util.o
+dbe: dbe.o sdbm
+       cc $(LDFLAGS) -o dbe dbe.o libsdbm.a
+
+sdbm: $(OBJS)
+       ar cr libsdbm.a $(OBJS)
+       ranlib libsdbm.a
+###    cp libsdbm.a /usr/lib/libsdbm.a
+
+dba.o: sdbm.h
+dbu.o: sdbm.h
+util.o:sdbm.h
+
+$(OBJS): sdbm.h tune.h pair.h
+
+#
+# dbu using berkelezoid ndbm routines [if you have them] for testing
+#
+#x-dbu: dbu.o util.o
+#      cc $(CFLAGS) -o x-dbu dbu.o util.o
+lint:
+       lint -abchx $(SRCS)
+
+clean:
+       rm -f *.o mon.out core
+
+purge:         clean
+       rm -f dbu libsdbm.a dbd dba dbe x-dbu *.dir *.pag
+
+shar:
+       shar $(MISC) makefile $(SRCS) $(HDRS) >SDBM.SHAR
+
+readme:
+       nroff -ms readme.ms | col -b >README
index a394171..575b34c 100644 (file)
 static char rcsid[] = "$Id: pair.c,v 1.10 90/12/13 13:00:35 oz Exp $";
 #endif
 
+#include "config.h"
 #include "sdbm.h"
 #include "tune.h"
 #include "pair.h"
 
-#ifndef BSD42
-#include <memory.h>
-#endif
-
 #define exhash(item)   sdbm_hash((item).dptr, (item).dsize)
 
 /* 
@@ -195,7 +192,7 @@ datum key;
                        }
                }
 #else
-#ifdef MEMMOVE
+#ifdef HAS_MEMMOVE
                memmove(dst, src, m);
 #else
                while (m--)
index d4ecdce..d09adcc 100644 (file)
 static char rcsid[] = "$Id: sdbm.c,v 1.16 90/12/13 13:01:31 oz Exp $";
 #endif
 
+#include "config.h"
 #include "sdbm.h"
 #include "tune.h"
 #include "pair.h"
 
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef BSD42
-#include <sys/file.h>
-#else
-#include <fcntl.h>
-#include <memory.h>
+#ifdef I_FCNTL
+# include <fcntl.h>
 #endif
-#include <errno.h>
-#include <string.h>
-
-#ifdef __STDC__
-#include <stddef.h>
+#ifdef I_SYS_FILE
+# include <sys/file.h>
 #endif
 
-#ifndef NULL
-#define NULL   0
+#ifdef I_STRING
+# include <string.h>
+#else
+# include <strings.h>
 #endif
 
 /*
@@ -41,9 +36,9 @@ static char rcsid[] = "$Id: sdbm.c,v 1.16 90/12/13 13:01:31 oz Exp $";
 extern int errno;
 #endif
 
-extern char *malloc proto((unsigned int));
+extern Malloc_t malloc proto((MEM_SIZE));
 extern void free proto((void *));
-extern long lseek();
+extern Off_t lseek();
 
 /*
  * forward
@@ -522,3 +517,4 @@ register DBM *db;
 
        return ioerr(db), nullitem;
 }
+
index e2fc762..f94b054 100644 (file)
@@ -89,3 +89,153 @@ extern long sdbm_hash proto((char *, int));
 #define dbm_error sdbm_error;
 #define dbm_clearerr sdbm_clearerr;
 #endif
+
+/* Most of the following is stolen from perl.h. */
+#ifndef H_PERL  /* Include guard */
+
+/*
+ * The following contortions are brought to you on behalf of all the
+ * standards, semi-standards, de facto standards, not-so-de-facto standards
+ * of the world, as well as all the other botches anyone ever thought of.
+ * The basic theory is that if we work hard enough here, the rest of the
+ * code can be a lot prettier.  Well, so much for theory.  Sorry, Henry...
+ */
+
+#include <errno.h>
+#ifdef HAS_SOCKET
+#   ifdef I_NET_ERRNO
+#     include <net/errno.h>
+#   endif
+#endif
+
+#ifdef MYMALLOC
+#   ifdef HIDEMYMALLOC
+#      define malloc Mymalloc
+#      define realloc Myremalloc
+#      define free Myfree
+#   endif
+#   define safemalloc malloc
+#   define saferealloc realloc
+#   define safefree free
+#endif
+
+#if defined(__STDC__) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
+# define STANDARD_C 1
+#endif
+
+#if defined(STANDARD_C)
+#   define P(args) args
+#else
+#   define P(args) ()
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+#include <setjmp.h>
+
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+
+#ifndef MSDOS
+#   ifdef PARAM_NEEDS_TYPES
+#      include <sys/types.h>
+#   endif
+#   include <sys/param.h>
+#endif
+
+#ifndef _TYPES_                /* If types.h defines this it's easy. */
+#   ifndef major               /* Does everyone's types.h define this? */
+#      include <sys/types.h>
+#   endif
+#endif
+
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+
+#include <sys/stat.h>
+
+#ifndef SEEK_SET
+# ifdef L_SET
+#  define SEEK_SET     L_SET
+# else
+#  define SEEK_SET     0  /* Wild guess. */
+# endif
+#endif
+
+/* Use all the "standard" definitions? */
+#ifdef STANDARD_C
+#   include <stdlib.h>
+#   ifdef I_STRING
+#     include <string.h>
+#   endif
+#   define MEM_SIZE size_t
+#else
+#   ifdef I_MEMORY
+#     include <memory.h>
+#   endif
+    typedef unsigned int MEM_SIZE;
+#endif /* STANDARD_C */
+
+#if defined(HAS_MEMCMP) && defined(mips) && defined(ultrix)
+#   undef HAS_MEMCMP
+#endif
+
+#ifdef HAS_MEMCPY
+#  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
+#    ifndef memcpy
+        extern char * memcpy P((char*, char*, int));
+#    endif
+#  endif
+#else
+#   ifndef memcpy
+#      ifdef HAS_BCOPY
+#          define memcpy(d,s,l) bcopy(s,d,l)
+#      else
+#          define memcpy(d,s,l) my_bcopy(s,d,l)
+#      endif
+#   endif
+#endif /* HAS_MEMCPY */
+
+#ifdef HAS_MEMSET
+#  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
+#    ifndef memset
+       extern char *memset P((char*, int, int));
+#    endif
+#  endif
+#  define memzero(d,l) memset(d,0,l)
+#else
+#   ifndef memzero
+#      ifdef HAS_BZERO
+#          define memzero(d,l) bzero(d,l)
+#      else
+#          define memzero(d,l) my_bzero(d,l)
+#      endif
+#   endif
+#endif /* HAS_MEMSET */
+
+#ifdef HAS_MEMCMP
+#  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
+#    ifndef memcmp
+       extern int memcmp P((char*, char*, int));
+#    endif
+#  endif
+#else
+#   ifndef memcmp
+#      define memcmp(s1,s2,l) my_memcmp(s1,s2,l)
+#   endif
+#endif /* HAS_MEMCMP */
+
+/* we prefer bcmp slightly for comparisons that don't care about ordering */
+#ifndef HAS_BCMP
+#   ifndef bcmp
+#      define bcmp(s1,s2,l) memcmp(s1,s2,l)
+#   endif
+#endif /* HAS_BCMP */
+
+#ifdef I_NETINET_IN
+#   include <netinet/in.h>
+#endif
+
+#endif /* Include guard */
index 9d8a35b..b95c8c8 100644 (file)
@@ -6,17 +6,6 @@
 
 #define BYTESIZ                8
 
-#ifdef SVID
-#include <unistd.h>
-#endif
-
-#ifdef BSD42
-#define SEEK_SET       L_SET
-#define        memset(s,c,n)   bzero(s, n)             /* only when c is zero */
-#define        memcpy(s1,s2,n) bcopy(s2, s1, n)
-#define        memcmp(s1,s2,n) bcmp(s1,s2,n)
-#endif
-
 /*
  * important tuning parms (hah)
  */
diff --git a/ext/dl/dl_hpux.c b/ext/dl/dl_hpux.c
new file mode 100644 (file)
index 0000000..57adcc6
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+Date: Mon, 25 Apr 94 14:15:30 PDT
+From: Jeff Okamoto <okamoto@hpcc101.corp.hp.com>
+To: doughera@lafcol.lafayette.edu
+Cc: okamoto@hpcc101.corp.hp.com, Jarkko.Hietaniemi@hut.fi, ram@acri.fr,
+     john@WPI.EDU, k@franz.ww.TU-Berlin.DE, dmm0t@rincewind.mech.virginia.edu,
+     lwall@netlabs.com
+Subject: dl.c.hpux
+
+This is what I hacked around and came up with for HP-UX.  (Or maybe it should
+be called dl_hpux.c).  Notice the change in suffix from .so to .sl (the
+default suffix for HP-UX shared libraries).
+
+Jeff
+*/
+#include <dl.h>
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+static int
+XS_DynamicLoader_bootstrap(ix, ax, items)
+register int ix;
+register int ax;
+register int items;
+{
+    if (items < 1 || items > 1) {
+       croak("Usage: DynamicLoader::bootstrap(package)");
+    }
+    {
+       char*   package = SvPV(ST(1),na);
+       shl_t obj = NULL;
+       int (*bootproc)();
+       char tmpbuf[1024];
+       char tmpbuf2[128];
+       AV *av = GvAVn(incgv);
+       I32 i;
+
+       for (i = 0; i <= AvFILL(av); i++) {
+           (void)sprintf(tmpbuf, "%s/auto/%s/%s.sl",
+               SvPVx(*av_fetch(av, i, TRUE), na), package, package);
+           if (obj = shl_load(tmpbuf,
+               BIND_IMMEDIATE | BIND_NONFATAL | BIND_NOSTART,0L))
+               break;
+       }
+       if (obj != (shl_t) NULL)
+           croak("Can't find loadable object for package %s in @INC", package);
+
+       sprintf(tmpbuf2, "boot_%s", package);
+       i = shl_findsym(&obj, tmpbuf2, TYPE_PROCEDURE, &bootproc);
+       if (i == -1)
+           croak("Shared object %s contains no %s function", tmpbuf, tmpbuf2);
+       bootproc();
+
+       ST(0) = sv_mortalcopy(&sv_yes);
+    }
+    return ax;
+}
+
+int
+boot_DynamicLoader(ix,sp,items)
+int ix;
+int sp;
+int items;
+{
+    char* file = __FILE__;
+
+    newXSUB("DynamicLoader::bootstrap", 0, XS_DynamicLoader_bootstrap, file);
+}
+
diff --git a/ext/dl/dl_next.c b/ext/dl/dl_next.c
new file mode 100644 (file)
index 0000000..66e9512
--- /dev/null
@@ -0,0 +1,69 @@
+/* dl_next.c
+   Author:  tom@smart.bo.open.de (Thomas Neumann).
+   Based on dl_sunos.c
+*/
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <mach-o/rld.h>
+#include <streams/streams.h>
+
+static int
+XS_DynamicLoader_bootstrap(ix, ax, items)
+register int ix;
+register int ax;
+register int items;
+{
+    if (items < 1 || items > 1) {
+       croak("Usage: DynamicLoader::bootstrap(package)");
+    }
+    {
+       char*   package = SvPV(ST(1),na);
+       int rld_success;
+       NXStream *nxerr = NXOpenFile(fileno(stderr), NX_READONLY);
+       int (*bootproc)();
+       char tmpbuf[1024];
+       char tmpbuf2[128];
+       AV *av = GvAVn(incgv);
+       I32 i;
+
+       for (i = 0; i <= AvFILL(av); i++) {
+           char *p[2];
+           p[0] = tmpbuf;
+           p[1] = 0;
+           sprintf(tmpbuf, "%s/auto/%s/%s.so",
+                   SvPVx(*av_fetch(av, i, TRUE), na), package, package);
+           if (rld_success = rld_load(nxerr, (struct mach_header **)0, p,
+                                      (const char *)0))
+           {
+               break;
+           }
+       }
+       if (!rld_success) {
+           NXClose(nxerr);
+           croak("Can't find loadable object for package %s in @INC", package);
+
+       }
+       sprintf(tmpbuf2, "_boot_%s", package);
+       if (!rld_lookup(nxerr, tmpbuf2, (unsigned long *)&bootproc)) {
+           NXClose(nxerr);
+           croak("Shared object %s contains no %s function", tmpbuf, tmpbuf2);
+       }
+       NXClose(nxerr);
+       (*bootproc)();
+       ST(0) = sv_mortalcopy(&sv_yes);
+    }
+    return ax;
+}
+
+int
+boot_DynamicLoader(ix,sp,items)
+int ix;
+int sp;
+int items;
+{
+    char* file = __FILE__;
+
+    newXSUB("DynamicLoader::bootstrap", 0, XS_DynamicLoader_bootstrap, file);
+}
diff --git a/ext/dl/dl_sunos.c b/ext/dl/dl_sunos.c
new file mode 100644 (file)
index 0000000..badd66d
--- /dev/null
@@ -0,0 +1,56 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#ifdef I_DLFCN
+# include <dlfcn.h>
+#endif
+
+static int
+XS_DynamicLoader_bootstrap(ix, ax, items)
+register int ix;
+register int ax;
+register int items;
+{
+    if (items < 1 || items > 1) {
+       croak("Usage: DynamicLoader::bootstrap(package)");
+    }
+    {
+       char*   package = SvPV(ST(1),na);
+       void* obj = 0;
+       int (*bootproc)();
+       char tmpbuf[1024];
+       char tmpbuf2[128];
+       AV *av = GvAVn(incgv);
+       I32 i;
+
+       for (i = 0; i <= AvFILL(av); i++) {
+           (void)sprintf(tmpbuf, "%s/auto/%s/%s.so",
+               SvPVx(*av_fetch(av, i, TRUE), na), package, package);
+           if (obj = dlopen(tmpbuf,1))
+               break;
+       }
+       if (!obj)
+           croak("Can't find loadable object for package %s in @INC", package);
+
+       sprintf(tmpbuf2, "boot_%s", package);
+       bootproc = (int (*)())dlsym(obj, tmpbuf2);
+       if (!bootproc)
+           croak("Shared object %s contains no %s function", tmpbuf, tmpbuf2);
+       bootproc();
+
+       ST(0) = sv_mortalcopy(&sv_yes);
+    }
+    return ax;
+}
+
+int
+boot_DynamicLoader(ix,sp,items)
+int ix;
+int sp;
+int items;
+{
+    char* file = __FILE__;
+
+    newXSUB("DynamicLoader::bootstrap", 0, XS_DynamicLoader_bootstrap, file);
+}
diff --git a/ext/dl/eg/test b/ext/dl/eg/test
new file mode 100755 (executable)
index 0000000..2a8b925
Binary files /dev/null and b/ext/dl/eg/test differ
diff --git a/ext/dl/eg/test1 b/ext/dl/eg/test1
new file mode 100755 (executable)
index 0000000..e9a37e9
Binary files /dev/null and b/ext/dl/eg/test1 differ
index 0c48b9e..a439494 100644 (file)
@@ -13,7 +13,9 @@
 #include <limits.h>
 #include <locale.h>
 #include <math.h>
+#ifdef I_PWD
 #include <pwd.h>
+#endif
 #include <setjmp.h>
 #include <signal.h>
 #ifdef I_STDARG
@@ -30,7 +32,7 @@
 #include <sys/types.h>
 #include <sys/utsname.h>
 #include <sys/wait.h>
-#ifndef CR3
+#if defined(I_TERMIOS) && !defined(CR3)
 #include <termios.h>
 #endif
 #include <time.h>
@@ -44,7 +46,7 @@ typedef HV* POSIX__SigAction;
 #define HAS_UNAME
 
 #ifndef HAS_GETPGRP
-#define getpgrp(a,b) not_here("getpgrp")
+#define getpgrp() not_here("getpgrp")
 #endif
 #ifndef HAS_NICE
 #define nice(a) not_here("nice")
@@ -55,9 +57,6 @@ typedef HV* POSIX__SigAction;
 #ifndef HAS_SETPGID
 #define setpgid(a,b) not_here("setpgid")
 #endif
-#ifndef HAS_SETPGRP
-#define setpgrp(a,b) not_here("setpgrp")
-#endif
 #ifndef HAS_SETSID
 #define setsid() not_here("setsid")
 #endif
@@ -2090,7 +2089,7 @@ isalnum(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isalnum(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2102,7 +2101,7 @@ isalpha(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isalpha(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2114,7 +2113,7 @@ iscntrl(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!iscntrl(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2126,7 +2125,7 @@ isdigit(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isdigit(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2138,7 +2137,7 @@ isgraph(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isgraph(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2150,7 +2149,7 @@ islower(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!islower(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2162,7 +2161,7 @@ isprint(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isprint(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2174,7 +2173,7 @@ ispunct(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!ispunct(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2186,7 +2185,7 @@ isspace(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isspace(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2198,7 +2197,7 @@ isupper(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isupper(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2210,7 +2209,7 @@ isxdigit(charstring)
     CODE:
        char *s;
        RETVAL = 1;
-       for (s = charstring; *s; s++)
+       for (s = charstring; *s && RETVAL; s++)
            if (!isxdigit(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2370,7 +2369,7 @@ sigaction(sig, action, oldaction = 0)
 # interface look beautiful, which is hard.
 
        if (!siggv)
-           gv_fetchpv("SIG", TRUE);
+           gv_fetchpv("SIG", TRUE, SVt_PVHV);
 
        {
            struct sigaction act;
@@ -2406,7 +2405,7 @@ sigaction(sig, action, oldaction = 0)
                    act.sa_mask = *sigset;
                }
                else
-                   sigemptyset(act.sa_mask);
+                   sigemptyset(& act.sa_mask);
 
                /* Set up any desired flags. */
                svp = hv_fetch(action, "FLAGS", 5, FALSE);
@@ -2415,11 +2414,11 @@ sigaction(sig, action, oldaction = 0)
 
            /* Now work around sigaction oddities */
            if (action && oldaction)
-               RETVAL = sigaction(sig, act, oact);
+               RETVAL = sigaction(sig, & act, & oact);
            else if (action)
-               RETVAL = sigaction(sig, act, (struct sigaction*)0);
+               RETVAL = sigaction(sig, & act, (struct sigaction*)0);
            else if (oldaction)
-               RETVAL = sigaction(sig, (struct sigaction*)0, oact);
+               RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
 
            if (oldaction) {
                /* Get back the mask. */
@@ -2473,135 +2472,99 @@ void
 _exit(status)
        int             status
 
-int
+SysRet
 close(fd)
        int             fd
 
-int
+SysRet
 dup(fd)
        int             fd
 
-int
+SysRet
 dup2(fd1, fd2)
        int             fd1
        int             fd2
 
-int
-fstat(fd, buf)
-       int             fd
-       struct stat *   buf = (struct stat*)sv_grow(ST(2),sizeof(struct stat));
-    CLEANUP:
-       SvCUR(ST(2)) = sizeof(struct stat);
-
-int
-getpgrp(pid)
-       int             pid
-
-int
-link()
-
-int
+SysRet
 lseek()
+       int             fd
+       Off_t           offset
+       int             whence
 
-int
-lstat()
-
-int
-mkdir()
-
-int
+SysRet
 nice(incr)
        int             incr
 
 int
 pipe()
+    PPCODE:
+       int fds[2];
+       sp--;
+       if (pipe(fds) != -1) {
+           EXTEND(sp,2);
+           PUSHs(sv_2mortal(newSViv(fds[0])));
+           PUSHs(sv_2mortal(newSViv(fds[1])));
+       }
 
-int
+SysRet
 read()
+    CODE:
+       int fd;
+       char * buffer;
+       size_t nbytes;
 
-int
-rename()
-
-int
-rmdir()
+       RETVAL = read(fd, buffer, nbytes);
+       croak("POSIX::read() not implemented yet\n");
+    OUTPUT:
+       RETVAL
 
-int
-setgid()
+SysRet
+setgid(gid)
+       Gid_t           gid
 
-int
+SysRet
 setpgid(pid, pgid)
        pid_t           pid
        pid_t           pgid
 
-int
-setpgrp(pid, pgrp)
-       int             pid
-       int             pgrp
-
 pid_t
 setsid()
 
-int
-setuid()
-
-int
-stat()
-
-int
-symlink()
-
-int
-system()
+SysRet
+setuid(uid)
+       Uid_t           uid
 
 pid_t
 tcgetpgrp(fd)
        int             fd
 
-int
+SysRet
 tcsetpgrp(fd, pgrp_id)
        int             fd
        pid_t           pgrp_id
 
 int
-times(tms)
-       struct tms *    tms = (struct tms*)sv_grow(ST(1), sizeof(struct tms));
-    CLEANUP:
-       SvCUR(ST(1)) = sizeof(struct tms);
-
-int
-umask()
-
-void
 uname()
     PPCODE:
-       struct utsname utsname;
+       struct utsname buf;
        sp--;
-       if (uname(&utsname) >= 0) {
+       if (uname(&buf) >= 0) {
            EXTEND(sp, 5);
-           PUSHs(sv_2mortal(newSVpv(utsname.sysname, 0)));
-           PUSHs(sv_2mortal(newSVpv(utsname.nodename, 0)));
-           PUSHs(sv_2mortal(newSVpv(utsname.release, 0)));
-           PUSHs(sv_2mortal(newSVpv(utsname.version, 0)));
-           PUSHs(sv_2mortal(newSVpv(utsname.machine, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
+           PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
        }
 
-int
-unlink()
-
-int
-utime()
-
-int
-wait()
-
-int
-waitpid(pid, statusp, options)
-       int             pid
-       int             &statusp
-       int             options
-    OUTPUT:
-       statusp
-
-int
+SysRet
 write()
+    CODE:
+       int fd;
+       char * buffer;
+       size_t nbytes;
 
+       RETVAL = write(fd, buffer, nbytes);
+       croak("POSIX::write() not implemented yet\n");
+    OUTPUT:
+       RETVAL
index 4cf2975..e339f10 100644 (file)
@@ -1,6 +1,10 @@
-mode_t                 T_INT
-pid_t                  T_INT
-fd                     T_INT
+mode_t                 T_NV
+pid_t                  T_NV
+Uid_t                  T_NV
+Time_t                 T_NV
+Gid_t                  T_NV
+Off_t                  T_NV
+fd                     T_IV
 FILE *                 T_PTR
 FileHandle             T_PTROBJ
 POSIX::SigSet          T_PTROBJ
index 24895dc..1d0c9ba 100644 (file)
@@ -1,13 +1,14 @@
 # $Header$ 
 # basic C types
-int                    T_INT
-unsigned               T_U_INT
-unsigned int           T_U_INT
-long                   T_LONG
-unsigned long          T_U_LONG
-short                  T_SHORT
-unsigned short         T_U_SHORT
+int                    T_IV
+unsigned               T_IV
+unsigned int           T_IV
+long                   T_NV
+unsigned long          T_NV
+short                  T_IV
+unsigned short         T_IV
 char                   T_CHAR
+unsigned char          T_U_CHAR
 char *                 T_STRING
 unsigned char *                T_STRING
 caddr_t                        T_STRING
@@ -20,10 +21,12 @@ AV *                        T_AVOBJ
 HV *                   T_HVOBJ
 CV *                   T_CVOBJ
 
-I32                    T_LONG
-I16                    T_SHORT
+I32                    T_IV
+I16                    T_IV
+I8                     T_IV
 U32                    T_U_LONG
 U16                    T_U_SHORT
+U8                     T_IV
 Result                 T_U_CHAR
 Boolean                        T_U_CHAR
 double                 T_DOUBLE
@@ -55,6 +58,8 @@ T_CVOBJ
            croak(\"$var is not of type ${ntype}\")
 T_SYSRET
        $var NOT IMPLEMENTED
+T_IV
+       $var = ($type)SvIV($arg)
 T_INT
        $var = (int)SvIV($arg)
 T_ENUM
@@ -75,37 +80,53 @@ T_U_CHAR
        $var = (unsigned char)SvIV($arg)
 T_FLOAT
        $var = (float)SvNV($arg)
+T_NV
+       $var = ($type)SvNV($arg)
 T_DOUBLE
-       $var = SvNV($arg)
+       $var = (double)SvNV($arg)
 T_STRING
        $var = SvPV($arg,na)
 T_PTR
        $var = ($type)(unsigned long)SvNV($arg)
 T_PTRREF
-       if (SvROK($arg))
-           $var = ($type)(unsigned long)SvNV((SV*)SvRV($arg));
+       if (SvROK($arg)) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV($arg));
+           $var = ($type) tmp;
+       }
        else
            croak(\"$var is not a reference\")
 T_PTROBJ
-       if (sv_isa($arg, \"${ntype}\"))
-           $var = ($type)(unsigned long)SvNV((SV*)SvRV($arg));
+       if (sv_isa($arg, \"${ntype}\")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV($arg));
+           $var = ($type) tmp;
+       }
        else
            croak(\"$var is not of type ${ntype}\")
 T_PTRDESC
        if (sv_isa($arg, \"${ntype}\")) {
-           ${type}_desc = (\U${type}_DESC\E*)(unsigned long)SvNV((SV*)SvRV($arg));
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV($arg));
+           ${type}_desc = (\U${type}_DESC\E*) tmp; 
            $var = ${type}_desc->ptr;
        }
        else
            croak(\"$var is not of type ${ntype}\")
 T_REFREF
-       if (SvROK($arg))
-           $var = *($type)(unsigned long)SvNV((SV*)SvRV($arg));
+       if (SvROK($arg)) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV($arg));
+           $var = *($type) tmp;
+       }
        else
            croak(\"$var is not a reference\")
 T_REFOBJ
-       if (sv_isa($arg, \"${ntype}\"))
-           $var = *($type)(unsigned long)SvNV((SV*)SvRV($arg));
+       if (sv_isa($arg, \"${ntype}\")) {
+           unsigned long tmp;
+           tmp = (unsigned long)SvNV((SV*)SvRV($arg));
+           $var = *($type) tmp;
+       }
        else
            croak(\"$var is not of type ${ntype}\")
 T_OPAQUE
@@ -136,6 +157,8 @@ T_HVOBJ
        $arg = newRV((SV*)$var);
 T_CVOBJ
        $arg = newRV((SV*)$var);
+T_IV
+       sv_setiv($arg, (I32)$var);
 T_INT
        sv_setiv($arg, (I32)$var);
 T_SYSRET
@@ -163,8 +186,10 @@ T_U_CHAR
        sv_setiv($arg, (I32)$var);
 T_FLOAT
        sv_setnv($arg, (double)$var);
+T_NV
+       sv_setnv($arg, (double)$var);
 T_DOUBLE
-       sv_setnv($arg, $var);
+       sv_setnv($arg, (double)$var);
 T_STRING
        sv_setpv($arg, $var);
 T_PTR
diff --git a/fib4 b/fib4
new file mode 100755 (executable)
index 0000000..71b11f1
--- /dev/null
+++ b/fib4
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+
+sub fib
+{
+    local($a) = $_[0];
+    ($a < 2) ? $a : &fib($a-1) + &fib($a-2);
+}
+
+sub myruntime
+{
+    local(@t) = times;          #  in seconds
+    $t[0] + $t[1];
+}
+
+$x = (shift || 20);
+print "Starting fib($x)\n";
+$before = &myruntime;
+$y = &fib($x);
+$after = &myruntime;
+printf("Done. Result $y in %g cpu seconds.\n", $after-$before);
+
diff --git a/fixmac b/fixmac
deleted file mode 100755 (executable)
index c2f633b..0000000
--- a/fixmac
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/perl -i.bak
-
-while (<>) {
-    s/\bSvIV\b/SvIVX/g;
-    s/\bSvNV\b/SvNVX/g;
-    s/\bSvPV\b/SvPVX/g;
-    s/\bSvIVn/SvIV/g;
-    s/\bSvNVn/SvNV/g;
-    s/\bSvPVn/SvPV/g;
-    print;
-}
diff --git a/fixpp b/fixpp
deleted file mode 100755 (executable)
index f75a175..0000000
--- a/fixpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/perl
-
-@lines = <>;
-for (@lines) {
-    $line++;
-
-    if (/^PP\(pp_(\w+)/) { $newname = $1; $fixed = 1; $mark = 0; next; }
-    if (/^}/) { $fixed{$newname} = $fixed; $mark{$newname} = $mark; $newname=''}
-
-    next unless $fixed;
-
-    if (/^#ifdef NOTDEF/) { $fixed = 0; }
-    if (/MSP;/) { $mark = 1; }
-
-    if (/\bMEXTEND/ && $mark == 0) { warn "Inconsistent mark line $line\n"; }
-    if (/\bMXPUSH/ && $mark == 0) { warn "Inconsistent mark line $line\n"; }
-    if (/\bMRETURN/ && $mark == 0) { warn "Inconsistent mark line $line\n"; }
-
-    if (/\bEXTEND/ && $mark == 1) { warn "Inconsistent mark line $line\n"; }
-    if (/\bXPUSH/ && $mark == 1) { warn "Inconsistent mark line $line\n"; }
-    if (/\bRETURN/ && $mark == 1) { warn "Inconsistent mark line $line\n"; }
-
-}
-
-for (@lines) {
-    if (m#^    0, /\* pp_(\w+)#) {
-       $_ = "  pp_$1,\n" if $fixed{$1};
-    }
-    elsif (m#^ [01], /\* (\w+)[^,]#) {
-       s/\d/$mark{$1} + 0/e;
-    }
-    last if /^PP/;
-}
-
-print @lines;
diff --git a/fo b/fo
deleted file mode 100755 (executable)
index b0619cb..0000000
--- a/fo
+++ /dev/null
@@ -1,179 +0,0 @@
-#!./perl
-
-print "1..37\n";
-
-# Test glob operations.
-
-$bar = "ok 1\n";
-$foo = "ok 2\n";
-{
-    local(*foo) = *bar;
-    print $foo;
-}
-print $foo;
-
-$baz = "ok 3\n";
-$foo = "ok 4\n";
-{
-    local(*foo) = 'baz';
-    print $foo;
-}
-print $foo;
-
-$foo = "ok 6\n";
-{
-    local(*foo);
-    print $foo;
-    $foo = "ok 5\n";
-    print $foo;
-}
-print $foo;
-
-# Test fake references.
-
-$baz = "ok 7\n";
-$bar = 'baz';
-$foo = 'bar';
-print $$$foo;
-
-# Test real references.
-
-$FOO = \$BAR;
-$BAR = \$BAZ;
-$BAZ = "ok 8\n";
-print $$$FOO;
-
-# Test references to real arrays.
-
-@ary = (9,10,11,12);
-$ref[0] = \@a;
-$ref[1] = \@b;
-$ref[2] = \@c;
-$ref[3] = \@d;
-for $i (3,1,2,0) {
-    push(@{$ref[$i]}, "ok $ary[$i]\n");
-}
-print @a;
-print ${$ref[1]}[0];
-print @{$ref[2]}[0];
-print @{'d'};
-
-# Test references to references.
-
-$refref = \\$x;
-$x = "ok 13\n";
-print $$$refref;
-
-# Test nested anonymous lists.
-
-$ref = [[],2,[3,4,5,]];
-print scalar @$ref == 3 ? "ok 14\n" : "not ok 14\n";
-print $$ref[1] == 2 ? "ok 15\n" : "not ok 15\n";
-print ${$$ref[2]}[2] == 5 ? "ok 16\n" : "not ok 16\n";
-print scalar @{$$ref[0]} == 0 ? "ok 17\n" : "not ok 17\n";
-
-print $ref->[1] == 2 ? "ok 18\n" : "not ok 18\n";
-print $ref->[2]->[0] == 3 ? "ok 19\n" : "not ok 18\n";
-
-# Test references to hashes of references.
-
-$refref = \%whatever;
-$refref->{"key"} = $ref;
-print $refref->{"key"}->[2]->[0] == 3 ? "ok 20\n" : "not ok 20\n";
-
-# Test to see if anonymous subarrays spring into existence.
-
-$spring[5]->[0] = 123;
-$spring[5]->[1] = 456;
-push(@{$spring[5]}, 789);
-print join(':',@{$spring[5]}) eq "123:456:789" ? "ok 21\n" : "not ok 21\n";
-
-# Test to see if anonymous subhashes spring into existence.
-
-@{$spring2{"foo"}} = (1,2,3);
-$spring2{"foo"}->[3] = 4;
-print join(':',@{$spring2{"foo"}}) eq "1:2:3:4" ? "ok 22\n" : "not ok 22\n";
-
-# Test references to subroutines.
-
-sub mysub { print "ok 23\n" }
-$subref = \&mysub;
-&$subref;
-
-$subrefref = \\&mysub2;
-&$$subrefref("ok 24\n");
-sub mysub2 { print shift }
-
-# Test the ref operator.
-
-print ref $subref      eq CODE  ? "ok 25\n" : "not ok 25\n";
-print ref $ref         eq ARRAY ? "ok 26\n" : "not ok 26\n";
-print ref $refref      eq HASH  ? "ok 27\n" : "not ok 27\n";
-
-# Test anonymous hash syntax.
-
-$anonhash = {};
-print ref $anonhash    eq HASH  ? "ok 28\n" : "not ok 28\n";
-$anonhash2 = {FOO => BAR, ABC => XYZ,};
-print join('', sort values %$anonhash2) eq BARXYZ ? "ok 29\n" : "not ok 29\n";
-
-# Test bless operator.
-
-package MYHASH;
-
-$object = bless $main'anonhash2;
-print ref $object      eq MYHASH  ? "ok 30\n" : "not ok 30\n";
-print $object->{ABC}   eq XYZ     ? "ok 31\n" : "not ok 31\n";
-
-$object2 = bless {};
-print ref $object2     eq MYHASH  ? "ok 32\n" : "not ok 32\n";
-
-# Test ordinary call on object method.
-
-&mymethod($object,33);
-
-sub mymethod {
-    local($THIS, @ARGS) = @_;
-    die "Not a MYHASH" unless ref $THIS eq MYHASH;
-    print $THIS->{FOO} eq BAR  ? "ok $ARGS[0]\n" : "not ok $ARGS[0]\n";
-}
-
-# Test automatic destructor call.
-
-$string = "not ok 34\n";
-$object = "foo";
-$string = "ok 34\n";
-$main'anonhash2 = "foo";
-$string = "not ok 34\n";
-
-sub DESTROY {
-    print $string;
-
-    # Test that the object has already been "cursed".
-    print ref shift eq HASH ? "ok 35\n" : "not ok 35\n";
-}
-
-# Now test inheritance of methods.
-
-package OBJ;
-
-@ISA = (BASEOBJ);
-
-$main'object = bless {FOO => foo, BAR => bar};
-
-package main;
-
-# Test arrow-style method invocation.
-
-print $object->doit("BAR") eq bar ? "ok 36\n" : "not ok 36\n";
-
-# Test indirect-object-style method invocation.
-
-$foo = doit $object "FOO";
-print $foo eq foo ? "ok 37\n" : "not ok 37\n";
-
-sub BASEOBJ'doit {
-    local $ref = shift;
-    die "Not an OBJ" unless ref $ref eq OBJ;
-    $ref->{shift};
-}
diff --git a/foo b/foo
index 88dac06..fcd3091 100755 (executable)
--- a/foo
+++ b/foo
@@ -1,17 +1,5 @@
 #!./perl
 
-$foo = <<EOF;
-Subject: foobar
-From: baz
-EOF
-
-$* = 1;
-
-$pat = '^([*+&!]*)(Subject:)';
-#$pat =~ s/([a-zA-Z])/[\u$1\l$1]/g;
-#print $pat;
-
-$foo =~ /$pat/ig;
-
-print $', "\n";
+require 'dumpvar.pl';
 
+&dumpvar("main");
diff --git a/foo.sh b/foo.sh
deleted file mode 100644 (file)
index 7ca6463..0000000
--- a/foo.sh
+++ /dev/null
@@ -1 +0,0 @@
-sharpbang='#!'
diff --git a/formstuff b/formstuff
deleted file mode 100644 (file)
index f0e4724..0000000
--- a/formstuff
+++ /dev/null
@@ -1,223 +0,0 @@
-FF *
-parse_format()
-{
-    FF froot;
-    FF *flinebeg;
-    char *eol;
-    register FF *fprev = &froot;
-    register FF *fcmd;
-    register char *s;
-    register char *t;
-    register SV *sv;
-    bool noblank;
-    bool repeater;
-
-    Zero(&froot, 1, FF);
-    s = bufptr;
-    while (s < bufend || (rsfp && (s = sv_gets(linestr,rsfp, 0)) != Nullch)) {
-       curcop->cop_line++;
-       if (in_eval && !rsfp) {
-           eol = index(s,'\n');
-           if (!eol++)
-               eol = bufend;
-       }
-       else
-           eol = bufend = linestr->sv_ptr + linestr->sv_cur;
-       if (perldb) {
-           SV *tmpstr = NEWSV(89,0);
-
-           sv_setpvn(tmpstr, s, eol-s);
-           av_store(GvAV(curcop->cop_filegv), (int)curcop->cop_line,tmpstr);
-       }
-       if (*s == '.') {
-           /*SUPPRESS 530*/
-           for (t = s+1; *t == ' ' || *t == '\t'; t++) ;
-           if (*t == '\n') {
-               bufptr = s;
-               return froot.ff_next;
-           }
-       }
-       if (*s == '#') {
-           s = eol;
-           continue;
-       }
-       flinebeg = Nullfield;
-       noblank = FALSE;
-       repeater = FALSE;
-       while (s < eol) {
-           Newz(804,fcmd,1,FF);
-           fprev->ff_next = fcmd;
-           fprev = fcmd;
-           for (t=s; t < eol && *t != '@' && *t != '^'; t++) {
-               if (*t == '~') {
-                   noblank = TRUE;
-                   *t = ' ';
-                   if (t[1] == '~') {
-                       repeater = TRUE;
-                       t[1] = ' ';
-                   }
-               }
-           }
-           fcmd->ff_pre = nsavestr(s, t-s);
-           fcmd->ff_presize = t-s;
-           s = t;
-           if (s >= eol) {
-               if (noblank)
-                   fcmd->ff_flags |= FFf_NOBLANK;
-               if (repeater)
-                   fcmd->ff_flags |= FFf_REPEAT;
-               break;
-           }
-           if (!flinebeg)
-               flinebeg = fcmd;                /* start values here */
-           if (*s++ == '^')
-               fcmd->ff_flags |= FFf_CHOP;     /* for doing text filling */
-           switch (*s) {
-           case '*':
-               fcmd->ff_type = FFt_LINES;
-               *s = '\0';
-               break;
-           case '<':
-               fcmd->ff_type = FFt_LEFT;
-               while (*s == '<')
-                   s++;
-               break;
-           case '>':
-               fcmd->ff_type = FFt_RIGHT;
-               while (*s == '>')
-                   s++;
-               break;
-           case '|':
-               fcmd->ff_type = FFt_CENTER;
-               while (*s == '|')
-                   s++;
-               break;
-           case '#':
-           case '.':
-               /* Catch the special case @... and handle it as a string
-                  field. */
-               if (*s == '.' && s[1] == '.') {
-                   goto default_format;
-               }
-               fcmd->ff_type = FFt_DECIMAL;
-               {
-                   char *p;
-
-                   /* Read a run_format in the form @####.####, where either group
-                      of ### may be empty, or the final .### may be missing. */
-                   while (*s == '#')
-                       s++;
-                   if (*s == '.') {
-                       s++;
-                       p = s;
-                       while (*s == '#')
-                           s++;
-                       fcmd->ff_decimals = s-p;
-                       fcmd->ff_flags |= FFf_DP;
-                   } else {
-                       fcmd->ff_decimals = 0;
-                   }
-               }
-               break;
-           default:
-           default_format:
-               fcmd->ff_type = FFt_LEFT;
-               break;
-           }
-           if (fcmd->ff_flags & FFf_CHOP && *s == '.') {
-               fcmd->ff_flags |= FFf_MORE;
-               while (*s == '.')
-                   s++;
-           }
-           fcmd->ff_size = s-t;
-       }
-       if (flinebeg) {
-         again:
-           if (s >= bufend &&
-             (!rsfp || (s = sv_gets(linestr, rsfp, 0)) == Nullch) )
-               goto badform;
-           curcop->cop_line++;
-           if (in_eval && !rsfp) {
-               eol = index(s,'\n');
-               if (!eol++)
-                   eol = bufend;
-           }
-           else
-               eol = bufend = linestr->sv_ptr + linestr->sv_cur;
-           if (perldb) {
-               SV *tmpstr = NEWSV(90,0);
-
-               sv_setpvn(tmpstr, s, eol-s);
-               av_store(GvAV(curcop->cop_filegv),
-                   (int)curcop->cop_line,tmpstr);
-           }
-           if (strnEQ(s,".\n",2)) {
-               bufptr = s;
-               yyerror("Missing values line");
-               return froot.ff_next;
-           }
-           if (*s == '#') {
-               s = eol;
-               goto again;
-           }
-           sv = flinebeg->ff_unparsed = NEWSV(91,eol - s);
-           sv->sv_u.sv_hv = curstash;
-           sv_setpvn(sv,"(",1);
-           flinebeg->ff_line = curcop->cop_line;
-           eol[-1] = '\0';
-           if (!flinebeg->ff_next->ff_type || index(s, ',')) {
-               eol[-1] = '\n';
-               sv_catpvn(sv, s, eol - s - 1);
-               sv_catpvn(sv,",$$);",5);
-               s = eol;
-           }
-           else {
-               eol[-1] = '\n';
-               while (s < eol && isSPACE(*s))
-                   s++;
-               t = s;
-               while (s < eol) {
-                   switch (*s) {
-                   case ' ': case '\t': case '\n': case ';':
-                       sv_catpvn(sv, t, s - t);
-                       sv_catpvn(sv, "," ,1);
-                       while (s < eol && (isSPACE(*s) || *s == ';'))
-                           s++;
-                       t = s;
-                       break;
-                   case '$':
-                       sv_catpvn(sv, t, s - t);
-                       t = s;
-                       s = scan_ident(s,eol,tokenbuf,FALSE);
-                       sv_catpvn(sv, t, s - t);
-                       t = s;
-                       if (s < eol && *s && index("$'\"",*s))
-                           sv_catpvn(sv, ",", 1);
-                       break;
-                   case '"': case '\'':
-                       sv_catpvn(sv, t, s - t);
-                       t = s;
-                       s++;
-                       while (s < eol && (*s != *t || s[-1] == '\\'))
-                           s++;
-                       if (s < eol)
-                           s++;
-                       sv_catpvn(sv, t, s - t);
-                       t = s;
-                       if (s < eol && *s && index("$'\"",*s))
-                           sv_catpvn(sv, ",", 1);
-                       break;
-                   default:
-                       yyerror("Please use commas to separate fields");
-                   }
-               }
-               sv_catpvn(sv,"$$);",4);
-           }
-       }
-    }
-  badform:
-    bufptr = SvPV(linestr);
-    yyerror("Format not terminated");
-    return froot.ff_next;
-}
-
diff --git a/forop b/forop
deleted file mode 100644 (file)
index d741d7a..0000000
--- a/forop
+++ /dev/null
@@ -1,47 +0,0 @@
-OP *
-newFOROP(label,forline,scalar,expr,block,cont)
-char *label;
-line_t forline;
-OP *scalar;
-OP *expr
-OP *block
-OP *cont;
-{
-    OP *newop;
-
-    copline = forline;
-
-    /*
-     * The following gobbledygook catches EXPRs that
-     * aren't explicit array refs and translates
-     *         foreach VAR (EXPR)
-     * into
-     *         @ary = EXPR;
-     *         foreach VAR (@ary)
-     * where @ary is a hidden array made by newGVgen().
-     * (Note that @ary may become a local array if
-     * it is determined that it might be called
-     * recursively.  See cmd_tosave().)
-     */
-    if (expr->op_type != OP_ARRAY) {
-       scrstab = gv_AVadd(newGVgen());
-       newop = append_elem(OP_LINESEQ,
-           newSTATEOP(label,
-             newBINOP(OP_ASSIGN,
-               listref(newUNOP(OP_ARRAY,
-                 gv_to_op(A_STAB,scrstab))),
-               forcelist(expr))),
-           loopscope(over(scalar,newSTATEOP(label,
-             newLOOPOP( 0,
-               newUNOP(OP_ARRAY,
-                 gv_to_op(A_STAB,scrstab)),
-               block,cont)))));
-       newop->cop_line = forline;
-       newop->cop_head->cop_line = forline;
-    }
-    else {
-       newop = loopscope(over(scalar,newSTATEOP(label,
-       newLOOPOP(1,expr,block,cont) )));
-    }
-    return newop;
-}
index 21c6ca6..d496c90 100644 (file)
@@ -37,7 +37,7 @@ fold
 freq
 gid
 hexdigit
-in_format
+hints
 in_my
 know_next
 last_lop
@@ -54,7 +54,6 @@ multi_end
 multi_open
 multi_start
 na
-needblockscope
 nexttype
 nextval
 no_aelem
@@ -185,7 +184,6 @@ av_clear
 av_fake
 av_fetch
 av_fill
-av_free
 av_len
 av_make
 av_pop
@@ -232,7 +230,7 @@ convert
 cpy7bit
 cpytill
 croak
-cv_clear
+cv_undef
 cxinc
 deb
 deb_growlevel
@@ -302,11 +300,11 @@ gv_fullname
 gv_init
 he_delayfree
 he_free
+hint
 hoistmust
 hv_clear
 hv_delete
 hv_fetch
-hv_free
 hv_iterinit
 hv_iterkey
 hv_iternext
@@ -577,7 +575,6 @@ pp_hslice
 pp_index
 pp_indread
 pp_int
-pp_intadd
 pp_interp
 pp_ioctl
 pp_iter
diff --git a/goto b/goto
deleted file mode 100755 (executable)
index 7024b7f..0000000
--- a/goto
+++ /dev/null
@@ -1,10 +0,0 @@
-#!./perl -Dpxstl
-#!./perl -w
-
-foo: while (1) {
-       bar: {
-               goto bar;
-               bar: ;
-       }
-       print "here\n";
-}
diff --git a/gv.c b/gv.c
index e5eee1c..790e0be 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -71,7 +71,7 @@ char *name;
     GV *gv;
 
     sprintf(tmpbuf,"::_<%s", name);
-    gv = gv_fetchpv(tmpbuf, TRUE);
+    gv = gv_fetchpv(tmpbuf, TRUE, SVt_PVGV);
     sv_setpv(GvSV(gv), name);
     if (*name == '/')
        SvMULTI_on(gv);
@@ -164,16 +164,17 @@ char* name;
     
     for (nend = name; *nend; nend++) {
        if (*nend == ':' || *nend == '\'') {
-           return gv_fetchpv(name, FALSE);
+           return gv_fetchpv(name, FALSE, SVt_PVCV);
        }
     }
     return gv_fetchmeth(stash, name, nend - name);
 }
 
 GV *
-gv_fetchpv(nambeg,add)
+gv_fetchpv(nambeg,add,svtype)
 char *nambeg;
 I32 add;
+I32 svtype;
 {
     register char *name = nambeg;
     register GV *gv = 0;
@@ -182,31 +183,35 @@ I32 add;
     register char *namend;
     HV *stash = 0;
     bool global = FALSE;
-    char tmpbuf[256];
+    char *tmpbuf;
 
     for (namend = name; *namend; namend++) {
        if ((*namend == '\'' && namend[1]) ||
            (*namend == ':' && namend[1] == ':'))
        {
-           len = namend - name;
-           *tmpbuf = '_';
-           Copy(name, tmpbuf+1, len, char);
-           len++;
-           tmpbuf[len] = '\0';
            if (!stash)
                stash = defstash;
 
-           if (len > 1) {
+           len = namend - name;
+           if (len > 0) {
+               New(601, tmpbuf, len+2, char);
+               *tmpbuf = '_';
+               Copy(name, tmpbuf+1, len, char);
+               tmpbuf[++len] = '\0';
                gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
+               Safefree(tmpbuf);
                if (!gvp || *gvp == (GV*)&sv_undef)
                    return Nullgv;
                gv = *gvp;
+
                if (SvTYPE(gv) == SVt_PVGV)
                    SvMULTI_on(gv);
                else
                    gv_init(gv, stash, nambeg, namend - nambeg, (add & 2));
+
                if (!(stash = GvHV(gv)))
                    stash = GvHV(gv) = newHV();
+
                if (!HvNAME(stash))
                    HvNAME(stash) = nsavestr(nambeg, namend - nambeg);
            }
@@ -250,8 +255,10 @@ I32 add;
                global = TRUE;
            if (global)
                stash = defstash;
-           else if ((COP*)curcop == &compiling)
-               stash = curstash;
+           else if ((COP*)curcop == &compiling) {
+               if (!(hints & HINT_STRICT_VARS) || svtype == SVt_PVCV)
+                   stash = curstash;
+           }
            else
                stash = curcop->cop_stash;
        }
@@ -291,6 +298,14 @@ I32 add;
            AV* av = GvAVn(gv);
            SvMULTI_on(gv);
            sv_magic((SV*)av, (SV*)gv, 'I', 0, 0);
+           if (add & 2 && strEQ(nambeg,"Any_DBM_File::ISA") && AvFILL(av) == -1)
+           {
+               av_push(av, newSVpv("NDBM_File",0));
+               av_push(av, newSVpv("DB_File",0));
+               av_push(av, newSVpv("GDBM_File",0));
+               av_push(av, newSVpv("SDBM_File",0));
+               av_push(av, newSVpv("ODBM_File",0));
+           }
        }
        break;
     case 'S':
@@ -445,7 +460,7 @@ newIO()
     sv_upgrade(io,SVt_PVIO);
     SvREFCNT(io) = 1;
     SvOBJECT_on(io);
-    iogv = gv_fetchpv("FileHandle::", TRUE);
+    iogv = gv_fetchpv("FileHandle::", TRUE, SVt_PVIO);
     SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
     return io;
 }
@@ -486,7 +501,7 @@ GV *
 newGVgen()
 {
     (void)sprintf(tokenbuf,"_GEN_%d",gensym++);
-    return gv_fetchpv(tokenbuf,TRUE);
+    return gv_fetchpv(tokenbuf,TRUE, SVt_PVGV);
 }
 
 /* hopefully this is only called on local symbol table entries */
@@ -553,36 +568,3 @@ register GV *gv;
        return GvGP(gv_HVadd(gv))->gp_hv;
 }
 #endif                 /* Microport 2.4 hack */
-
-GV *
-fetch_gv(op,num)
-OP *op;
-I32 num;
-{
-    if (op->op_private < num)
-       return 0;
-    if (op->op_flags & OPf_STACKED)
-        return gv_fetchpv(SvPVx(*(stack_sp--), na),TRUE);
-    else
-        return cGVOP->op_gv;
-}
-
-IO *
-fetch_io(op,num)
-OP *op;
-I32 num;
-{
-    GV *gv;
-
-    if (op->op_private < num)
-       return 0;
-    if (op->op_flags & OPf_STACKED)
-        gv = gv_fetchpv(SvPVx(*(stack_sp--), na),TRUE);
-    else
-        gv = cGVOP->op_gv;
-
-    if (!gv)
-       return 0;
-
-    return GvIOn(gv);
-}
diff --git a/handy.h b/handy.h
index 102b840..a450b4c 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -26,6 +26,7 @@
  * 
  */
 
+#if !defined(__STDC__)
 #ifdef NULL
 #undef NULL
 #endif
@@ -34,6 +35,8 @@
 #else
 #  define NULL 0L
 #endif
+#endif
+
 #define Null(type) ((type)NULL)
 #define Nullch Null(char*)
 #define Nullfp Null(FILE*)
 #define TRUE (1)
 #define FALSE (0)
 
+#ifdef UNICOS
+#define I8     char
+#define U8     unsigned char
+#define I16    short
+#define U16    unsigned short
+#define I32    int
+#define U32    unsigned int
+
+#else
+
 typedef char           I8;
 typedef unsigned char  U8;
 
@@ -61,13 +74,15 @@ typedef short               I16;
 typedef unsigned short U16;
 
 #if INTSIZE == 4
-typedef int            I32;
-typedef unsigned int   U32;
+  typedef int          I32;
+  typedef unsigned int U32;
 #else
-typedef long           I32;
-typedef unsigned long  U32;
+  typedef long         I32;
+  typedef unsigned long        U32;
 #endif
 
+#endif /* UNICOS */
+
 #define Ctl(ch) (ch & 037)
 
 #define strNE(s1,s2) (strcmp(s1,s2))
@@ -86,13 +101,13 @@ typedef unsigned long      U32;
 #endif
 
 #if defined(CTYPE256) || (!defined(isascii) && !defined(HAS_ISASCII))
-#define isALNUM(c)   (isalpha(c) || isdigit(c) || c == '_')
-#define isIDFIRST(c) (isalpha(c) || (c) == '_')
-#define isALPHA(c)   isalpha(c)
-#define isSPACE(c)   isspace(c)
-#define isDIGIT(c)   isdigit(c)
-#define isUPPER(c)   isupper(c)
-#define isLOWER(c)   islower(c)
+#define isALNUM(c)   (isalpha((unsigned char)(c)) || isdigit((unsigned char)(c)) || c == '_')
+#define isIDFIRST(c) (isalpha((unsigned char)(c)) || (c) == '_')
+#define isALPHA(c)   isalpha((unsigned char)(c))
+#define isSPACE(c)   isspace((unsigned char)(c))
+#define isDIGIT(c)   isdigit((unsigned char)(c))
+#define isUPPER(c)   isupper((unsigned char)(c))
+#define isLOWER(c)   islower((unsigned char)(c))
 #else
 #define isALNUM(c)   (isascii(c) && (isalpha(c) || isdigit(c) || c == '_'))
 #define isIDFIRST(c) (isascii(c) && (isalpha(c) || (c) == '_'))
index 5570fbd..0001e04 100644 (file)
@@ -1,5 +1,7 @@
 # To incorporate the 7300/3b1 shared library, run this script in place
 # of 'CC'.
+# You can skip this is you have the shcc program installed as cc in
+# your path.
 # First: Run 'Configure' through to the end and run 'make depend'.
 # Second: Edit 'makefile' ( not Makefile ) and set CC = 3b1cc.
 # Third: Edit 'x2p/makefile' and set CC = 3b1cc.
index 5bf193b..b2bbb9b 100644 (file)
@@ -4,7 +4,7 @@ d_setrgid='undef'
 d_setruid='undef'
 d_setegid='undef'
 d_seteuid='undef'
-alignbytes=8
+memalignbytes=8
 ccflags="$ccflags -D_NO_PROTO"
 cppstdin='/lib/cpp -D_AIX -D_IBMR2 -U__STR__'
 cppminus=''
index 952a021..2ce9566 100644 (file)
@@ -1,3 +1,8 @@
 case `uname -r` in
 6.1*) shellflags="-m+65536" ;;
 esac
+ccflags="$ccflags -DUNICOS -h nomessage=118:151:172"
+usemymalloc='n'
+libswanted='malloc m'
+d_setregid='undef'
+d_setreuid='undef'
diff --git a/hints/dec_osf_2_0.sh b/hints/dec_osf_2_0.sh
new file mode 100644 (file)
index 0000000..207e565
--- /dev/null
@@ -0,0 +1,13 @@
+# hints/dec_osf_2_0.sh
+d_odbm='undef'              # We don't need both odbm and ndbm
+gidtype='gid_t'
+groupstype='gid_t'
+d_voidshmat='define'
+clocktype='time_t'
+libpth="$libpth /usr/shlib" # Use the shared libraries if possible
+libc='/usr/shlib/libc.so'   # The archive version is /lib/libc.a
+case `uname -m` in
+    mips|alpha)   optimize="$optimize -g"
+                  ccflags="$ccflags -D_BSD -DSTANDARD_C -DDEBUGGING" ;;
+    *)            ccflags="$ccflags -D_BSD -DSTANDARD_C -DDEBUGGING" ;;
+esac
index 5b15a89..eee8a4e 100644 (file)
@@ -1,5 +1,5 @@
 libswanted='ndbm m'
-ccflags="$ccflags -DJMPCLOBBER"
+ccflags="$ccflags -Aa -D_POSIX_SOURCE -D_HPUX_SOURCE -DJMPCLOBBER"
 optimize='+O1'
 d_mymalloc=define
-alignbytes=8
+memalignbytes=8
index cad7a5b..5b99353 100644 (file)
@@ -1,2 +1,3 @@
-set `echo $libswanted | sed -e 's/ PW / /' -e 's/ x / /'`
+set `echo "$libswanted" | sed -e 's/ PW / /' -e 's/ x / /'`
 libswanted="$*"
+ccflags="$ccflags -DCRIPPLED_CC -DDEBUGGING"
diff --git a/hints/next_3_2.sh b/hints/next_3_2.sh
new file mode 100644 (file)
index 0000000..a77e2ae
--- /dev/null
@@ -0,0 +1,8 @@
+hintfile='next_3_2'
+ccflags='-posix -Disascii=NXIsAscii -DDEBUGGING -DHIDEMYMALLOC'
+ldflags='-u libsys_s'
+i_dirent='undef'
+groupstype='int'
+libs='-ldbm'
+optimize='-O'
+lddlflags='-r'
index 0ed27e3..1801e82 100644 (file)
@@ -2,7 +2,7 @@
 # Created by: JT McDuffie (jt@kpc.com)  26 DEC 1991
 bin='/usr/local/bin'
 installbin='/usr/local/bin'
-alignbytes="8"
+memalignbytes="8"
 byteorder="4321"
 cppstdin='/lib/cpp'
 cppminus=''
diff --git a/hv.c b/hv.c
index 2468e87..3e0bed2 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -339,23 +339,16 @@ HV *hv;
     xhv = (XPVHV*)SvANY(hv);
     hfreeentries(hv);
     Safefree(xhv->xhv_array);
+    if (HvNAME(hv)) {
+       Safefree(HvNAME(hv));
+       HvNAME(hv) = 0;
+    }
     xhv->xhv_array = 0;
     xhv->xhv_max = 7;          /* it's a normal associative array */
     xhv->xhv_fill = 0;
     (void)hv_iterinit(hv);     /* so each() will start off right */
 }
 
-void
-hv_free(hv)
-register HV *hv;
-{
-    if (!hv)
-       return;
-    hfreeentries(hv);
-    Safefree(HvARRAY(hv));
-    Safefree(hv);
-}
-
 I32
 hv_iterinit(hv)
 HV *hv;
index 4f3fc00..e4e0e44 100755 (executable)
@@ -48,7 +48,6 @@ if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
        unless $installbin =~ m#^/afs/#;
 
 -x 'perl'              || die "perl isn't executable!\n";
--x 'taintperl'         || die "taintperl isn't executable!\n";
 -x 'suidperl'          || die "suidperl isn't executable!\n" if $d_dosuid;
 
 -x 't/TEST'            || warn "WARNING: You've never run 'make test'!!!",
@@ -59,10 +58,6 @@ if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
 &unlink("$installbin/perl$ver");
 &cmd("cp perl $installbin/perl$ver");
 
-&unlink("$installbin/tperl$ver");
-&cmd("cp taintperl $installbin/tperl$ver");
-&chmod(0755, "$installbin/tperl$ver");         # force non-suid for security
-
 &unlink("$installbin/sperl$ver");
 if ($d_dosuid) {
     &cmd("cp suidperl $installbin/sperl$ver");
@@ -77,9 +72,8 @@ exit 0 if $versiononly;
 ($ddev,$dino) = stat('.');
 
 if ($bdev != $ddev || $bino != $dino) {
-    &unlink("$installbin/perl", "$installbin/taintperl", "$installbin/suidperl");
+    &unlink("$installbin/perl", "$installbin/suidperl");
     &link("$installbin/perl$ver", "$installbin/perl");
-    &link("$installbin/tperl$ver", "$installbin/taintperl");
     &link("$installbin/sperl$ver", "$installbin/suidperl") if $d_dosuid;
 }
 
@@ -145,6 +139,18 @@ if (chdir "lib") {
     ($ldev,$lino) = stat('.');
 
     if ($pdev != $ldev || $pino != $lino) {
+       # Optimize for quick access.  First the auto directory.
+       system "tar cf - auto | (cd $installprivlib; tar xvf -)";
+       # Next the Perl modules.
+       foreach $file (<*.pm>) {
+           system "cmp", "-s", $file, "$privlib/$file";
+           if ($?) {
+               &unlink("$installprivlib/$file");
+               &cmd("cp $file $installprivlib");
+               &chmod(0644, "$installprivlib/$file");
+           }
+       }
+       # Finally the old library files.
        foreach $file (<*.pl>) {
            system "cmp", "-s", $file, "$privlib/$file";
            if ($?) {
@@ -160,8 +166,6 @@ else {
     warn "Can't cd to lib to install lib files: $!\n";
 }
 
-&chmod(0755, "usub/mus");
-
 print STDERR "  Installation complete\n";
 
 exit 0;
diff --git a/interleave b/interleave
deleted file mode 100755 (executable)
index 6abe1ec..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/perl
-
-while (<>) {
-    chop;
-    $stuff[$i++] .= $_;
-    $i = 0 if eof;
-}
-
-$" = "\n";  print "@stuff\n";
index 54b629d..14aa732 100644 (file)
 #define KEY_alarm              16
 #define KEY_and                        17
 #define KEY_atan2              18
-#define KEY_bind               19
-#define KEY_binmode            20
-#define KEY_bless              21
-#define KEY_caller             22
-#define KEY_chdir              23
-#define KEY_chmod              24
-#define KEY_chop               25
-#define KEY_chown              26
-#define KEY_chr                        27
-#define KEY_chroot             28
-#define KEY_close              29
-#define KEY_closedir           30
-#define KEY_cmp                        31
-#define KEY_connect            32
-#define KEY_continue           33
-#define KEY_cos                        34
-#define KEY_crypt              35
-#define KEY_dbmclose           36
-#define KEY_dbmopen            37
-#define KEY_defined            38
-#define KEY_delete             39
-#define KEY_die                        40
-#define KEY_do                 41
-#define KEY_dump               42
-#define KEY_each               43
-#define KEY_else               44
-#define KEY_elsif              45
-#define KEY_endgrent           46
-#define KEY_endhostent         47
-#define KEY_endnetent          48
-#define KEY_endprotoent                49
-#define KEY_endpwent           50
-#define KEY_endservent         51
-#define KEY_eof                        52
-#define KEY_eq                 53
-#define KEY_eval               54
-#define KEY_exec               55
-#define KEY_exit               56
-#define KEY_exp                        57
-#define KEY_fcntl              58
-#define KEY_fileno             59
-#define KEY_flock              60
-#define KEY_for                        61
-#define KEY_foreach            62
-#define KEY_fork               63
-#define KEY_format             64
-#define KEY_formline           65
-#define KEY_ge                 66
-#define KEY_getc               67
-#define KEY_getgrent           68
-#define KEY_getgrgid           69
-#define KEY_getgrnam           70
-#define KEY_gethostbyaddr      71
-#define KEY_gethostbyname      72
-#define KEY_gethostent         73
-#define KEY_getlogin           74
-#define KEY_getnetbyaddr       75
-#define KEY_getnetbyname       76
-#define KEY_getnetent          77
-#define KEY_getpeername                78
-#define KEY_getpgrp            79
-#define KEY_getppid            80
-#define KEY_getpriority                81
-#define KEY_getprotobyname     82
-#define KEY_getprotobynumber   83
-#define KEY_getprotoent                84
-#define KEY_getpwent           85
-#define KEY_getpwnam           86
-#define KEY_getpwuid           87
-#define KEY_getservbyname      88
-#define KEY_getservbyport      89
-#define KEY_getservent         90
-#define KEY_getsockname                91
-#define KEY_getsockopt         92
-#define KEY_glob               93
-#define KEY_gmtime             94
-#define KEY_goto               95
-#define KEY_grep               96
-#define KEY_gt                 97
-#define KEY_hex                        98
-#define KEY_if                 99
-#define KEY_index              100
-#define KEY_int                        101
-#define KEY_ioctl              102
-#define KEY_join               103
-#define KEY_keys               104
-#define KEY_kill               105
-#define KEY_last               106
-#define KEY_lc                 107
-#define KEY_lcfirst            108
-#define KEY_le                 109
-#define KEY_length             110
-#define KEY_link               111
-#define KEY_listen             112
-#define KEY_local              113
-#define KEY_localtime          114
-#define KEY_log                        115
-#define KEY_lstat              116
-#define KEY_lt                 117
-#define KEY_m                  118
-#define KEY_mkdir              119
-#define KEY_msgctl             120
-#define KEY_msgget             121
-#define KEY_msgrcv             122
-#define KEY_msgsnd             123
-#define KEY_my                 124
-#define KEY_ne                 125
-#define KEY_next               126
-#define KEY_oct                        127
-#define KEY_open               128
-#define KEY_opendir            129
-#define KEY_or                 130
-#define KEY_ord                        131
-#define KEY_pack               132
-#define KEY_package            133
-#define KEY_pipe               134
-#define KEY_pop                        135
-#define KEY_print              136
-#define KEY_printf             137
-#define KEY_push               138
-#define KEY_q                  139
-#define KEY_qq                 140
-#define KEY_qw                 141
-#define KEY_qx                 142
-#define KEY_rand               143
-#define KEY_read               144
-#define KEY_readdir            145
-#define KEY_readline           146
-#define KEY_readlink           147
-#define KEY_readpipe           148
-#define KEY_recv               149
-#define KEY_redo               150
-#define KEY_ref                        151
-#define KEY_rename             152
-#define KEY_require            153
-#define KEY_reset              154
-#define KEY_return             155
-#define KEY_reverse            156
-#define KEY_rewinddir          157
-#define KEY_rindex             158
-#define KEY_rmdir              159
-#define KEY_s                  160
-#define KEY_scalar             161
-#define KEY_seek               162
-#define KEY_seekdir            163
-#define KEY_select             164
-#define KEY_semctl             165
-#define KEY_semget             166
-#define KEY_semop              167
-#define KEY_send               168
-#define KEY_setgrent           169
-#define KEY_sethostent         170
-#define KEY_setnetent          171
-#define KEY_setpgrp            172
-#define KEY_setpriority                173
-#define KEY_setprotoent                174
-#define KEY_setpwent           175
-#define KEY_setservent         176
-#define KEY_setsockopt         177
-#define KEY_shift              178
-#define KEY_shmctl             179
-#define KEY_shmget             180
-#define KEY_shmread            181
-#define KEY_shmwrite           182
-#define KEY_shutdown           183
-#define KEY_sin                        184
-#define KEY_sleep              185
-#define KEY_socket             186
-#define KEY_socketpair         187
-#define KEY_sort               188
-#define KEY_splice             189
-#define KEY_split              190
-#define KEY_sprintf            191
-#define KEY_sqrt               192
-#define KEY_srand              193
-#define KEY_stat               194
-#define KEY_study              195
-#define KEY_sub                        196
-#define KEY_substr             197
-#define KEY_symlink            198
-#define KEY_syscall            199
-#define KEY_sysread            200
-#define KEY_system             201
-#define KEY_syswrite           202
-#define KEY_tell               203
-#define KEY_telldir            204
-#define KEY_tie                        205
-#define KEY_time               206
-#define KEY_times              207
-#define KEY_tr                 208
-#define KEY_truncate           209
-#define KEY_uc                 210
-#define KEY_ucfirst            211
-#define KEY_umask              212
-#define KEY_undef              213
-#define KEY_unless             214
-#define KEY_unlink             215
-#define KEY_unpack             216
-#define KEY_unshift            217
-#define KEY_untie              218
-#define KEY_until              219
-#define KEY_utime              220
-#define KEY_values             221
-#define KEY_vec                        222
-#define KEY_wait               223
-#define KEY_waitpid            224
-#define KEY_wantarray          225
-#define KEY_warn               226
-#define KEY_while              227
-#define KEY_write              228
-#define KEY_x                  229
-#define KEY_y                  230
+#define KEY_aver               19
+#define KEY_bind               20
+#define KEY_binmode            21
+#define KEY_bless              22
+#define KEY_caller             23
+#define KEY_chdir              24
+#define KEY_chmod              25
+#define KEY_chop               26
+#define KEY_chown              27
+#define KEY_chr                        28
+#define KEY_chroot             29
+#define KEY_close              30
+#define KEY_closedir           31
+#define KEY_cmp                        32
+#define KEY_connect            33
+#define KEY_continue           34
+#define KEY_cos                        35
+#define KEY_crypt              36
+#define KEY_dbmclose           37
+#define KEY_dbmopen            38
+#define KEY_defined            39
+#define KEY_delete             40
+#define KEY_deny               41
+#define KEY_die                        42
+#define KEY_do                 43
+#define KEY_dump               44
+#define KEY_each               45
+#define KEY_else               46
+#define KEY_elsif              47
+#define KEY_endgrent           48
+#define KEY_endhostent         49
+#define KEY_endnetent          50
+#define KEY_endprotoent                51
+#define KEY_endpwent           52
+#define KEY_endservent         53
+#define KEY_eof                        54
+#define KEY_eq                 55
+#define KEY_eval               56
+#define KEY_exec               57
+#define KEY_exit               58
+#define KEY_exp                        59
+#define KEY_fcntl              60
+#define KEY_fileno             61
+#define KEY_flock              62
+#define KEY_for                        63
+#define KEY_foreach            64
+#define KEY_fork               65
+#define KEY_format             66
+#define KEY_formline           67
+#define KEY_ge                 68
+#define KEY_getc               69
+#define KEY_getgrent           70
+#define KEY_getgrgid           71
+#define KEY_getgrnam           72
+#define KEY_gethostbyaddr      73
+#define KEY_gethostbyname      74
+#define KEY_gethostent         75
+#define KEY_getlogin           76
+#define KEY_getnetbyaddr       77
+#define KEY_getnetbyname       78
+#define KEY_getnetent          79
+#define KEY_getpeername                80
+#define KEY_getpgrp            81
+#define KEY_getppid            82
+#define KEY_getpriority                83
+#define KEY_getprotobyname     84
+#define KEY_getprotobynumber   85
+#define KEY_getprotoent                86
+#define KEY_getpwent           87
+#define KEY_getpwnam           88
+#define KEY_getpwuid           89
+#define KEY_getservbyname      90
+#define KEY_getservbyport      91
+#define KEY_getservent         92
+#define KEY_getsockname                93
+#define KEY_getsockopt         94
+#define KEY_glob               95
+#define KEY_gmtime             96
+#define KEY_goto               97
+#define KEY_grep               98
+#define KEY_gt                 99
+#define KEY_hex                        100
+#define KEY_if                 101
+#define KEY_index              102
+#define KEY_int                        103
+#define KEY_ioctl              104
+#define KEY_join               105
+#define KEY_keys               106
+#define KEY_kill               107
+#define KEY_last               108
+#define KEY_lc                 109
+#define KEY_lcfirst            110
+#define KEY_le                 111
+#define KEY_length             112
+#define KEY_link               113
+#define KEY_listen             114
+#define KEY_local              115
+#define KEY_localtime          116
+#define KEY_log                        117
+#define KEY_lstat              118
+#define KEY_lt                 119
+#define KEY_m                  120
+#define KEY_mkdir              121
+#define KEY_msgctl             122
+#define KEY_msgget             123
+#define KEY_msgrcv             124
+#define KEY_msgsnd             125
+#define KEY_my                 126
+#define KEY_ne                 127
+#define KEY_next               128
+#define KEY_oct                        129
+#define KEY_open               130
+#define KEY_opendir            131
+#define KEY_or                 132
+#define KEY_ord                        133
+#define KEY_pack               134
+#define KEY_package            135
+#define KEY_pipe               136
+#define KEY_pop                        137
+#define KEY_print              138
+#define KEY_printf             139
+#define KEY_push               140
+#define KEY_q                  141
+#define KEY_qq                 142
+#define KEY_qw                 143
+#define KEY_qx                 144
+#define KEY_rand               145
+#define KEY_read               146
+#define KEY_readdir            147
+#define KEY_readline           148
+#define KEY_readlink           149
+#define KEY_readpipe           150
+#define KEY_recv               151
+#define KEY_redo               152
+#define KEY_ref                        153
+#define KEY_rename             154
+#define KEY_require            155
+#define KEY_reset              156
+#define KEY_return             157
+#define KEY_reverse            158
+#define KEY_rewinddir          159
+#define KEY_rindex             160
+#define KEY_rmdir              161
+#define KEY_s                  162
+#define KEY_scalar             163
+#define KEY_seek               164
+#define KEY_seekdir            165
+#define KEY_select             166
+#define KEY_semctl             167
+#define KEY_semget             168
+#define KEY_semop              169
+#define KEY_send               170
+#define KEY_setgrent           171
+#define KEY_sethostent         172
+#define KEY_setnetent          173
+#define KEY_setpgrp            174
+#define KEY_setpriority                175
+#define KEY_setprotoent                176
+#define KEY_setpwent           177
+#define KEY_setservent         178
+#define KEY_setsockopt         179
+#define KEY_shift              180
+#define KEY_shmctl             181
+#define KEY_shmget             182
+#define KEY_shmread            183
+#define KEY_shmwrite           184
+#define KEY_shutdown           185
+#define KEY_sin                        186
+#define KEY_sleep              187
+#define KEY_socket             188
+#define KEY_socketpair         189
+#define KEY_sort               190
+#define KEY_splice             191
+#define KEY_split              192
+#define KEY_sprintf            193
+#define KEY_sqrt               194
+#define KEY_srand              195
+#define KEY_stat               196
+#define KEY_study              197
+#define KEY_sub                        198
+#define KEY_substr             199
+#define KEY_symlink            200
+#define KEY_syscall            201
+#define KEY_sysread            202
+#define KEY_system             203
+#define KEY_syswrite           204
+#define KEY_tell               205
+#define KEY_telldir            206
+#define KEY_tie                        207
+#define KEY_time               208
+#define KEY_times              209
+#define KEY_tr                 210
+#define KEY_truncate           211
+#define KEY_uc                 212
+#define KEY_ucfirst            213
+#define KEY_umask              214
+#define KEY_undef              215
+#define KEY_unless             216
+#define KEY_unlink             217
+#define KEY_unpack             218
+#define KEY_unshift            219
+#define KEY_untie              220
+#define KEY_until              221
+#define KEY_utime              222
+#define KEY_values             223
+#define KEY_vec                        224
+#define KEY_wait               225
+#define KEY_waitpid            226
+#define KEY_wantarray          227
+#define KEY_warn               228
+#define KEY_while              229
+#define KEY_write              230
+#define KEY_x                  231
+#define KEY_y                  232
index 5ea45e6..20df7e0 100644 (file)
@@ -6,6 +6,7 @@ require Exporter;
 $] == 5.000 or die sprintf
     "Perl lib version (5.000) doesn't match executable version (%.3f)\n", $];
 
+
 #
 # This file was produced by running the Configure script. It holds all the
 # definitions figured out by Configure. Should you modify one of these values,
@@ -13,86 +14,83 @@ $] == 5.000 or die sprintf
 # instead choose to run each of the .SH files by yourself, or "Configure -S".
 #
 
-# Configuration time: Mon Apr  4 15:17:26 PDT 1994
+# Configuration time: Wed May  4 15:10:39 PDT 1994
 # Configured by: lwall
 # Target system: sunos scalpel 4.1.3 3 sun4c 
 
-$Config{'extensions'} = 'ext/dbm/NDBM_File.xs
-ext/dbm/ODBM_File.xs
-ext/dbm/GDBM_File.xs
-ext/dbm/SDBM_File.xs
-ext/posix/POSIX.xs';
-$Config{'d_bsd'} = 'define';
+$Config{'extensions'} = ' ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/SDBM_File.xs ext/posix/POSIX.xs';
 $Config{'d_eunice'} = undef;
 $Config{'d_xenix'} = undef;
 $Config{'eunicefix'} = ':';
 $Config{'Mcc'} = 'Mcc';
-$Config{'awk'} = 'awk';
+$Config{'awk'} = '/bin/awk';
 $Config{'bash'} = '';
-$Config{'bison'} = 'bison';
+$Config{'bison'} = '/usr/local/bin/bison';
 $Config{'byacc'} = 'byacc';
-$Config{'cat'} = 'cat';
+$Config{'cat'} = '/bin/cat';
 $Config{'chgrp'} = '';
 $Config{'chmod'} = '';
 $Config{'chown'} = '';
 $Config{'compress'} = '';
-$Config{'cp'} = 'cp';
+$Config{'cp'} = '/bin/cp';
 $Config{'cpio'} = '';
-$Config{'cpp'} = 'cpp';
-$Config{'csh'} = 'csh';
-$Config{'date'} = 'date';
-$Config{'echo'} = 'echo';
-$Config{'egrep'} = 'egrep';
+$Config{'cpp'} = '/usr/lib/cpp';
+$Config{'csh'} = '/bin/csh';
+$Config{'date'} = '/bin/date';
+$Config{'echo'} = '/bin/echo';
+$Config{'egrep'} = '/bin/egrep';
 $Config{'emacs'} = '';
-$Config{'expr'} = 'expr';
-$Config{'find'} = 'find';
+$Config{'expr'} = '/bin/expr';
+$Config{'find'} = '/bin/find';
 $Config{'flex'} = '';
 $Config{'gcc'} = '';
-$Config{'grep'} = 'grep';
+$Config{'grep'} = '/bin/grep';
 $Config{'inews'} = '';
 $Config{'ksh'} = '';
 $Config{'less'} = '';
-$Config{'line'} = 'line';
+$Config{'line'} = '/bin/line';
 $Config{'lint'} = '';
-$Config{'ln'} = '';
+$Config{'ln'} = '/bin/ln';
 $Config{'lp'} = '';
 $Config{'lpr'} = '';
 $Config{'ls'} = '';
 $Config{'mail'} = '';
 $Config{'mailx'} = '';
 $Config{'make'} = '';
-$Config{'mkdir'} = 'mkdir';
+$Config{'mkdir'} = '/bin/mkdir';
 $Config{'more'} = '';
-$Config{'mv'} = 'mv';
-$Config{'nroff'} = 'nroff';
-$Config{'perl'} = 'perl';
+$Config{'mv'} = '/bin/mv';
+$Config{'nroff'} = '/bin/nroff';
+$Config{'perl'} = '/home/netlabs1/lwall/pl/perl';
 $Config{'pg'} = '';
 $Config{'pmake'} = '';
 $Config{'pr'} = '';
-$Config{'rm'} = 'rm';
+$Config{'rm'} = '/bin/rm';
 $Config{'rmail'} = '';
-$Config{'sed'} = 'sed';
+$Config{'sed'} = '/bin/sed';
 $Config{'sendmail'} = '';
 $Config{'sh'} = '';
 $Config{'shar'} = '';
 $Config{'sleep'} = '';
 $Config{'smail'} = '';
-$Config{'sort'} = 'sort';
+$Config{'sort'} = '/bin/sort';
 $Config{'submit'} = '';
 $Config{'tail'} = '';
 $Config{'tar'} = '';
 $Config{'tbl'} = '';
 $Config{'test'} = 'test';
-$Config{'touch'} = '';
-$Config{'tr'} = 'tr';
+$Config{'touch'} = '/bin/touch';
+$Config{'tr'} = '/bin/tr';
 $Config{'troff'} = '';
-$Config{'uname'} = 'uname';
-$Config{'uniq'} = 'uniq';
+$Config{'uname'} = '/bin/uname';
+$Config{'uniq'} = '/bin/uniq';
 $Config{'uuname'} = '';
 $Config{'vi'} = '';
 $Config{'zcat'} = '';
 $Config{'hint'} = 'recommended';
 $Config{'myuname'} = 'sunos scalpel 4.1.3 3 sun4c ';
+$Config{'osname'} = 'sunos';
+$Config{'osvers'} = '4.1.3';
 $Config{'Author'} = '';
 $Config{'Date'} = '$Date';
 $Config{'Header'} = '';
@@ -104,7 +102,7 @@ $Config{'Revision'} = '$Revision';
 $Config{'Source'} = '';
 $Config{'State'} = '';
 $Config{'afs'} = 'false';
-$Config{'alignbytes'} = '8';
+$Config{'memalignbytes'} = '8';
 $Config{'bin'} = '/usr/local/bin';
 $Config{'binexp'} = '/usr/local/bin';
 $Config{'installbin'} = '/usr/local/bin';
@@ -117,12 +115,12 @@ $Config{'ldflags'} = '';
 $Config{'lkflags'} = '';
 $Config{'optimize'} = '-g';
 $Config{'cf_by'} = 'lwall';
-$Config{'cf_time'} = 'Mon Apr  4 15:17:26 PDT 1994';
+$Config{'cf_time'} = 'Wed May  4 15:10:39 PDT 1994';
 $Config{'contains'} = 'grep';
 $Config{'cpplast'} = '';
 $Config{'cppminus'} = '';
-$Config{'cpprun'} = 'cpp';
-$Config{'cppstdin'} = '/tmp_mnt/vol/src/local/lwall/perl5/cppstdin';
+$Config{'cpprun'} = '/usr/lib/cpp';
+$Config{'cppstdin'} = '/tmp_mnt/net/vaccine/export/src/local/lwall/perl5/cppstdin';
 $Config{'d_access'} = 'define';
 $Config{'d_bcmp'} = 'define';
 $Config{'d_bcopy'} = 'define';
@@ -135,7 +133,7 @@ $Config{'d_chsize'} = undef;
 $Config{'d_const'} = undef;
 $Config{'cryptlib'} = '';
 $Config{'d_crypt'} = 'define';
-$Config{'d_csh'} = undef;
+$Config{'d_csh'} = 'define';
 $Config{'d_dosuid'} = undef;
 $Config{'d_dup2'} = 'define';
 $Config{'d_fchmod'} = 'define';
@@ -168,8 +166,11 @@ $Config{'d_msgget'} = 'define';
 $Config{'d_msgrcv'} = 'define';
 $Config{'d_msgsnd'} = 'define';
 $Config{'d_open3'} = 'define';
-$Config{'d_portable'} = 'define';
+$Config{'d_portable'} = undef;
 $Config{'d_readdir'} = 'define';
+$Config{'d_rewinddir'} = 'define';
+$Config{'d_seekdir'} = 'define';
+$Config{'d_telldir'} = 'define';
 $Config{'d_rename'} = 'define';
 $Config{'d_rmdir'} = 'define';
 $Config{'d_safebcpy'} = 'define';
@@ -196,6 +197,7 @@ $Config{'d_setruid'} = 'define';
 $Config{'d_setsid'} = 'define';
 $Config{'d_shm'} = 'define';
 $Config{'d_shmat'} = 'define';
+$Config{'d_voidshmat'} = undef;
 $Config{'d_shmctl'} = 'define';
 $Config{'d_shmdt'} = 'define';
 $Config{'d_shmget'} = 'define';
@@ -216,6 +218,8 @@ $Config{'d_syserrlst'} = 'define';
 $Config{'d_symlink'} = 'define';
 $Config{'d_syscall'} = 'define';
 $Config{'d_system'} = 'define';
+$Config{'d_time'} = 'define';
+$Config{'timetype'} = 'long';
 $Config{'clocktype'} = 'long';
 $Config{'d_times'} = 'define';
 $Config{'d_truncate'} = 'define';
@@ -224,7 +228,7 @@ $Config{'i_ndir'} = undef;
 $Config{'ndirc'} = '';
 $Config{'ndirlib'} = '';
 $Config{'ndiro'} = '';
-$Config{'d_vfork'} = 'define';
+$Config{'d_vfork'} = undef;
 $Config{'d_voidsig'} = 'define';
 $Config{'signal_t'} = 'void';
 $Config{'d_volatile'} = undef;
@@ -232,8 +236,13 @@ $Config{'d_charvspr'} = 'define';
 $Config{'d_vprintf'} = 'define';
 $Config{'d_wait4'} = 'define';
 $Config{'d_waitpid'} = 'define';
-$Config{'dlobj'} = 'dl.o';
-$Config{'dlsrc'} = 'dl.c';
+$Config{'cccdlflags'} = '';
+$Config{'ccdlflags'} = '';
+$Config{'dldir'} = 'ext/dl';
+$Config{'dlobj'} = 'dl_sunos.o';
+$Config{'dlsrc'} = 'dl_sunos.c';
+$Config{'lddlflags'} = '';
+$Config{'shlibsuffix'} = '.so';
 $Config{'usedl'} = 'define';
 $Config{'gidtype'} = 'gid_t';
 $Config{'groupstype'} = 'int';
@@ -246,7 +255,9 @@ $Config{'i_dlfcn'} = 'define';
 $Config{'i_fcntl'} = undef;
 $Config{'i_gdbm'} = undef;
 $Config{'i_grp'} = 'define';
+$Config{'i_memory'} = 'define';
 $Config{'i_ndbm'} = 'define';
+$Config{'i_neterrno'} = undef;
 $Config{'i_niin'} = 'define';
 $Config{'i_sysin'} = undef;
 $Config{'d_pwage'} = 'define';
@@ -256,6 +267,7 @@ $Config{'d_pwcomment'} = 'define';
 $Config{'d_pwexpire'} = undef;
 $Config{'d_pwquota'} = undef;
 $Config{'i_pwd'} = 'define';
+$Config{'i_sdbm'} = 'define';
 $Config{'i_stdarg'} = undef;
 $Config{'i_stddef'} = 'define';
 $Config{'i_string'} = 'define';
@@ -275,10 +287,11 @@ $Config{'i_systime'} = 'define';
 $Config{'i_systimek'} = undef;
 $Config{'i_time'} = undef;
 $Config{'timeincl'} = '/usr/include/sys/time.h ';
+$Config{'i_unistd'} = 'define';
 $Config{'i_utime'} = 'define';
 $Config{'i_varargs'} = 'define';
 $Config{'i_varhdr'} = 'varargs.h';
-$Config{'i_vfork'} = 'define';
+$Config{'i_vfork'} = undef;
 $Config{'intsize'} = '4';
 $Config{'lib'} = '/usr/local/lib';
 $Config{'libexp'} = '/usr/local/lib';
@@ -287,6 +300,9 @@ $Config{'libpth'} = '  /lib /usr/lib /usr/ucblib /usr/local/lib';
 $Config{'plibpth'} = '';
 $Config{'xlibpth'} = '/usr/lib/386 /lib/386';
 $Config{'libs'} = '-ldbm -ldl -lm -lposix';
+$Config{'lns'} = '/bin/ln -s';
+$Config{'lseektype'} = 'off_t';
+$Config{'d_mymalloc'} = 'define';
 $Config{'mallocobj'} = 'malloc.o';
 $Config{'mallocsrc'} = 'malloc.c';
 $Config{'malloctype'} = 'char *';
@@ -309,12 +325,15 @@ $Config{'n'} = '-n';
 $Config{'groupcat'} = '';
 $Config{'hostcat'} = 'ypcat hosts';
 $Config{'passcat'} = '';
+$Config{'orderlib'} = 'false';
+$Config{'ranlib'} = '/usr/bin/ranlib';
 $Config{'package'} = 'perl';
 $Config{'spackage'} = '';
 $Config{'installprivlib'} = '/usr/local/lib/perl';
 $Config{'privlib'} = '/usr/local/lib/perl';
 $Config{'privlibexp'} = '/usr/local/lib/perl';
 $Config{'prototype'} = undef;
+$Config{'ptrsize'} = '4';
 $Config{'randbits'} = '31';
 $Config{'installscript'} = '/usr/local/bin';
 $Config{'scriptdir'} = '/usr/local/bin';
@@ -339,4 +358,5 @@ $Config{'voidflags'} = '15';
 $Config{'yacc'} = 'yacc';
 $Config{'yaccflags'} = '';
 $Config{'PATCHLEVEL'} = 0;
-$Config{'CONFIG'} = true
+$Config{'CONFIG'} = 'true';
+1;
index ba89b16..79cceee 100644 (file)
@@ -120,6 +120,7 @@ require Exporter;
 # Internals.
 
        *PERL_VERSION                           = \$]   ;
+       *ACCUMULATOR                            = \$^A  ;
        *DEBUGGING                              = \$^D  ;
        *SYSTEM_FD_MAX                          = \$^F  ;
        *INPLACE_EDIT                           = \$^I  ;
index 4a59695..f61592e 100644 (file)
@@ -22,14 +22,14 @@ sub hostname {
        syscall(&SYS_gethostname, $host, 65) == 0;
     }
 
-    # method 3 - sysV uname command
+    # method 3 - trusty old hostname command
     || eval {
-       $host = `uname -n 2>/dev/null`; ## sysVish
+       $host = `hostname 2>/dev/null`; # bsdish
     }
 
-    # method 4 - trusty old hostname command
+    # method 4 - sysV uname command (may truncate)
     || eval {
-       $host = `hostname 2>/dev/null`; # bsdish
+       $host = `uname -n 2>/dev/null`; ## sysVish
     }
 
     # method 5 - Apollo pre-SR10
diff --git a/lib/NDBM_File.pm b/lib/NDBM_File.pm
new file mode 100644 (file)
index 0000000..637001f
--- /dev/null
@@ -0,0 +1,9 @@
+package NDBM_File;
+
+require Exporter;
+@ISA = (Exporter, DynamicLoader);
+@EXPORT = split(' ', 'new fetch store delete firstkey nextkey error clearerr');
+
+bootstrap NDBM_File;
+
+1;
index 4d08f25..e2ccbcc 100644 (file)
@@ -521,8 +521,8 @@ sub remove {
 }
 
 sub rename {
-    unimpl "rename(xxx)", caller if @_ != 123;
-    rename($_[0]);
+    usage "rename(oldfilename, newfilename)", caller if @_ != 2;
+    rename($_[0], $_[1]);
 }
 
 sub rewind {
@@ -707,7 +707,7 @@ sub stroul {
 }
 
 sub system {
-    unimpl "system(xxx)", caller if @_ != 123;
+    usage "system(command)", caller if @_ != 1;
     system($_[0]);
 }
 
@@ -832,18 +832,22 @@ sub strxfrm {
 }
 
 sub chmod {
-    unimpl "chmod(xxx)", caller if @_ != 123;
-    chmod($_[0]);
+    usage "chmod(filename, mode)", caller if @_ != 2;
+    chmod($_[0], $_[1]);
 }
 
 sub fstat {
-    unimpl "fstat(xxx)", caller if @_ != 123;
-    fstat($_[0]);
+    usage "fstat(fd)", caller if @_ != 1;
+    local(*TMP);
+    open(TMP, "<&$_[0]");              # Gross.
+    local(@l) = stat(TMP);
+    close(TMP);
+    @l;
 }
 
 sub mkdir {
-    unimpl "mkdir(xxx)", caller if @_ != 123;
-    mkdir($_[0]);
+    usage "mkdir(directoryname, mode)", caller if @_ != 2;
+    mkdir($_[0], $_[1]);
 }
 
 sub mkfifo {
@@ -852,28 +856,32 @@ sub mkfifo {
 }
 
 sub stat {
-    unimpl "stat(xxx)", caller if @_ != 123;
+    usage "stat(filename)", caller if @_ != 1;
     stat($_[0]);
 }
 
 sub umask {
-    unimpl "umask(xxx)", caller if @_ != 123;
+    usage "umask(mask)", caller if @_ != 1;
     umask($_[0]);
 }
 
 sub times {
-    unimpl "times(xxx)", caller if @_ != 123;
-    times($_[0]);
+    usage "times()", caller if @_ != 0;
+    times();
 }
 
 sub wait {
-    unimpl "wait(xxx)", caller if @_ != 123;
-    wait($_[0]);
+    usage "wait(statusvariable)", caller if @_ != 1;
+    local $result = wait();
+    $_[0] = $?;
+    $result;
 }
 
 sub waitpid {
-    unimpl "waitpid(xxx)", caller if @_ != 123;
-    waitpid($_[0]);
+    usage "waitpid(pid, statusvariable, options)", caller if @_ != 3;
+    local $result = waitpid($_[0], $_[2]);
+    $_[1] = $?;
+    $result;
 }
 
 sub cfgetispeed {
@@ -1002,8 +1010,8 @@ sub chdir {
 }
 
 sub chown {
-    unimpl "chown(xxx)", caller if @_ != 123;
-    chown($_[0]);
+    usage "chown(filename, uid, gid)", caller if @_ != 3;
+    chown($_[0], $_[1], $_[2]);
 }
 
 sub close {
@@ -1077,32 +1085,33 @@ sub getcwd {
 }
 
 sub getegid {
-    unimpl "getegid(xxx)", caller if @_ != 123;
-    getegid($_[0]);
+    usage "getegid()", caller if @_ != 0;
+    $) + 0;
 }
 
 sub geteuid {
-    unimpl "geteuid(xxx)", caller if @_ != 123;
-    geteuid($_[0]);
+    usage "geteuid()", caller if @_ != 0;
+    $> + 0;
 }
 
 sub getgid {
-    unimpl "getgid(xxx)", caller if @_ != 123;
-    getgid($_[0]);
+    usage "getgid()", caller if @_ != 0;
+    $( + 0;
 }
 
 sub getgroups {
-    unimpl "getgroups(xxx)", caller if @_ != 123;
-    getgroups($_[0]);
+    usage "getgroups()", caller if @_ != 0;
+    local(%seen) = ();
+    grep(!%seen{$_}++, split(' ', $) ));
 }
 
 sub getlogin {
-    unimpl "getlogin(xxx)", caller if @_ != 123;
-    getlogin($_[0]);
+    usage "getlogin(xxx)", caller if @_ != 0;
+    getlogin();
 }
 
 sub getpgrp {
-    unimpl "getpgrp(xxx)", caller if @_ != 123;
+    usage "getpgrp()", caller if @_ != 0;
     getpgrp($_[0]);
 }
 
@@ -1117,8 +1126,8 @@ sub getppid {
 }
 
 sub getuid {
-    unimpl "getuid(xxx)", caller if @_ != 123;
-    getuid($_[0]);
+    usage "getuid()", caller if @_ != 0;
+    $<;
 }
 
 sub isatty {
@@ -1127,8 +1136,8 @@ sub isatty {
 }
 
 sub link {
-    unimpl "link(xxx)", caller if @_ != 123;
-    link($_[0]);
+    usage "link(oldfilename, newfilename)", caller if @_ != 2;
+    link($_[0], $_[1]);
 }
 
 sub lseek {
@@ -1157,7 +1166,7 @@ sub read {
 }
 
 sub rmdir {
-    unimpl "rmdir(xxx)", caller if @_ != 123;
+    usage "rmdir(directoryname)", caller if @_ != 1;
     rmdir($_[0]);
 }
 
@@ -1207,7 +1216,7 @@ sub ttyname {
 }
 
 sub unlink {
-    unimpl "unlink(xxx)", caller if @_ != 123;
+    usage "unlink(filename)", caller if @_ != 1;
     unlink($_[0]);
 }
 
@@ -1217,7 +1226,7 @@ sub write {
 }
 
 sub utime {
-    unimpl "utime(xxx)", caller if @_ != 123;
-    utime($_[0]);
+    usage "utime(filename, atime, mtime)", caller if @_ != 3;
+    utime($_[1], $_[2], $_[0]);
 }
 
index 470d891..544f66f 100644 (file)
@@ -2,7 +2,7 @@ package SDBM_File;
 
 require Exporter;
 @ISA = (Exporter, DynamicLoader);
-@EXPORT = split(' ', 'new fetch store delete firstkey nextkey error clearerr');
+@EXPORT = qw(new fetch store delete firstkey nextkey error clearerr);
 
 bootstrap SDBM_File;
 
similarity index 89%
rename from lib/termcap.pl
rename to lib/Termcap.pm
index 22c1817..da4c7ce 100644 (file)
@@ -1,10 +1,19 @@
-;# $RCSfile: termcap.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:16 $
+package Termcap;
+
+require 5.000;
+require Exporter;
+@ISA = (Exporter);
+@EXPORT = qw(&Tgetent $ispeed $ospeed &Tputs %TC &Tgoto);
+
+
+;# Termcap.pm
 ;#
 ;# Usage:
 ;#     require 'ioctl.pl';
+;#     require Termcap;
+;#     import Termcap;
 ;#     ioctl(TTY,$TIOCGETP,$foo);
 ;#     ($ispeed,$ospeed) = unpack('cc',$foo);
-;#     require 'termcap.pl';
 ;#     &Tgetent('vt100');      # sets $TC{'cm'}, etc.
 ;#     &Tputs(&Tgoto($TC{'cm'},$col,$row), 0, 'FILEHANDLE');
 ;#     &Tputs($TC{'dl'},$affcnt,'FILEHANDLE');
@@ -14,7 +23,7 @@ sub Tgetent {
     local($TERMCAP,$_,$entry,$loop,$field);
 
     warn "Tgetent: no ospeed set" unless $ospeed;
-    foreach $key (keys(TC)) {
+    foreach $key (keys(%TC)) {
        delete $TC{$key};
     }
     $TERM = $ENV{'TERM'} unless $TERM;
@@ -56,7 +65,7 @@ sub Tgetent {
            $TC{$field} = 1;
        }
        elsif ($field =~ /^(\w\w)#(.*)/) {
-           $TC{$1} = $2 if $TC{$1} eq '';
+           $TC{$1} = $2 unless defined $TC{$1};
        }
        elsif ($field =~ /^(\w\w)=(.*)/) {
            $entry = $1;
@@ -73,11 +82,11 @@ sub Tgetent {
            s/\^(.)/pack('c',ord($1) & 31)/eg;
            s/\\(.)/$1/g;
            s/\377/^/g;
-           $TC{$entry} = $_ if $TC{$entry} eq '';
+           $TC{$entry} = $_ unless defined $TC{$entry};
        }
     }
-    $TC{'pc'} = "\0" if $TC{'pc'} eq '';
-    $TC{'bc'} = "\b" if $TC{'bc'} eq '';
+    $TC{'pc'} = "\0" unless defined $TC{'pc'};
+    $TC{'bc'} = "\b" unless defined $TC{'bc'};
 }
 
 @Tputs = (0,200,133.3,90.9,74.3,66.7,50,33.3,16.7,8.3,5.5,4.1,2,1,.5,.2);
diff --git a/lib/auto/NDBM_File.so b/lib/auto/NDBM_File.so
new file mode 100755 (executable)
index 0000000..af2b0d3
Binary files /dev/null and b/lib/auto/NDBM_File.so differ
diff --git a/lib/auto/NDBM_File/NDBM_File.so b/lib/auto/NDBM_File/NDBM_File.so
new file mode 100755 (executable)
index 0000000..49c04e6
Binary files /dev/null and b/lib/auto/NDBM_File/NDBM_File.so differ
diff --git a/lib/auto/ODBM_File.so b/lib/auto/ODBM_File.so
new file mode 100755 (executable)
index 0000000..5044c8a
Binary files /dev/null and b/lib/auto/ODBM_File.so differ
diff --git a/lib/auto/ODBM_File/ODBM_File.so b/lib/auto/ODBM_File/ODBM_File.so
new file mode 100755 (executable)
index 0000000..f61231f
Binary files /dev/null and b/lib/auto/ODBM_File/ODBM_File.so differ
diff --git a/lib/auto/POSIX.so b/lib/auto/POSIX.so
new file mode 100755 (executable)
index 0000000..7065a09
Binary files /dev/null and b/lib/auto/POSIX.so differ
diff --git a/lib/auto/POSIX/POSIX.so b/lib/auto/POSIX/POSIX.so
new file mode 100755 (executable)
index 0000000..17560bd
Binary files /dev/null and b/lib/auto/POSIX/POSIX.so differ
diff --git a/lib/auto/POSIX/_exit.al b/lib/auto/POSIX/_exit.al
new file mode 100644 (file)
index 0000000..7666ceb
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub _exit {
+    unimpl "_exit(xxx)", caller if @_ != 123;
+    _exit($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/abort.al b/lib/auto/POSIX/abort.al
new file mode 100644 (file)
index 0000000..58e7ce9
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub abort {
+    unimpl "abort(xxx)", caller if @_ != 123;
+    abort($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/abs.al b/lib/auto/POSIX/abs.al
new file mode 100644 (file)
index 0000000..4a832b4
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub abs {
+    usage "abs(x)", caller if @_ != 1;
+    abs($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/access.al b/lib/auto/POSIX/access.al
new file mode 100644 (file)
index 0000000..89bbfb0
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub access {
+    unimpl "access(xxx)", caller if @_ != 123;
+    access($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/alarm.al b/lib/auto/POSIX/alarm.al
new file mode 100644 (file)
index 0000000..183b6d9
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub alarm {
+    unimpl "alarm(xxx)", caller if @_ != 123;
+    alarm($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/asctime.al b/lib/auto/POSIX/asctime.al
new file mode 100644 (file)
index 0000000..067e0f4
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub asctime {
+    unimpl "asctime(xxx)", caller if @_ != 123;
+    asctime($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/assert.al b/lib/auto/POSIX/assert.al
new file mode 100644 (file)
index 0000000..f32a853
--- /dev/null
@@ -0,0 +1,12 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub assert {
+    usage "assert(expr)", caller if @_ != 1;
+    if (!$_[0]) {
+       local ($pack,$file,$line) = caller;
+       die "Assertion failed at $file line $line\n";
+    }
+}
+
+1;
diff --git a/lib/auto/POSIX/atan2.al b/lib/auto/POSIX/atan2.al
new file mode 100644 (file)
index 0000000..1b2e23a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub atan2 {
+    usage "atan2(x,y)", caller if @_ != 2;
+    atan2($_[0], $_[1]);
+}
+
+1;
diff --git a/lib/auto/POSIX/atexit.al b/lib/auto/POSIX/atexit.al
new file mode 100644 (file)
index 0000000..054d8da
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub atexit {
+    unimpl "atexit() is C-specific: use END {} instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/atof.al b/lib/auto/POSIX/atof.al
new file mode 100644 (file)
index 0000000..0875991
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub atof {
+    unimpl "atof() is C-specific, stopped", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/atoi.al b/lib/auto/POSIX/atoi.al
new file mode 100644 (file)
index 0000000..6f18387
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub atoi {
+    unimpl "atoi() is C-specific, stopped", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/atol.al b/lib/auto/POSIX/atol.al
new file mode 100644 (file)
index 0000000..9393d21
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub atol {
+    unimpl "atol() is C-specific, stopped", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/bsearch.al b/lib/auto/POSIX/bsearch.al
new file mode 100644 (file)
index 0000000..ed104ad
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub bsearch {
+    unimpl "bsearch(xxx)", caller if @_ != 123;
+    bsearch($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/calloc.al b/lib/auto/POSIX/calloc.al
new file mode 100644 (file)
index 0000000..d533523
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub calloc {
+    unimpl "calloc(xxx)", caller if @_ != 123;
+    calloc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/cfgetispeed.al b/lib/auto/POSIX/cfgetispeed.al
new file mode 100644 (file)
index 0000000..a95efd6
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub cfgetispeed {
+    unimpl "cfgetispeed(xxx)", caller if @_ != 123;
+    cfgetispeed($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/cfgetospeed.al b/lib/auto/POSIX/cfgetospeed.al
new file mode 100644 (file)
index 0000000..69e66ad
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub cfgetospeed {
+    unimpl "cfgetospeed(xxx)", caller if @_ != 123;
+    cfgetospeed($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/cfsetispeed.al b/lib/auto/POSIX/cfsetispeed.al
new file mode 100644 (file)
index 0000000..cbcc646
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub cfsetispeed {
+    unimpl "cfsetispeed(xxx)", caller if @_ != 123;
+    cfsetispeed($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/cfsetospeed.al b/lib/auto/POSIX/cfsetospeed.al
new file mode 100644 (file)
index 0000000..7dae85c
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub cfsetospeed {
+    unimpl "cfsetospeed(xxx)", caller if @_ != 123;
+    cfsetospeed($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/chdir.al b/lib/auto/POSIX/chdir.al
new file mode 100644 (file)
index 0000000..9e1f685
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub chdir {
+    unimpl "chdir(xxx)", caller if @_ != 123;
+    chdir($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/chmod.al b/lib/auto/POSIX/chmod.al
new file mode 100644 (file)
index 0000000..24fe4c5
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub chmod {
+    usage "chmod(filename, mode)", caller if @_ != 2;
+    chmod($_[0], $_[1]);
+}
+
+1;
diff --git a/lib/auto/POSIX/chown.al b/lib/auto/POSIX/chown.al
new file mode 100644 (file)
index 0000000..127d898
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub chown {
+    usage "chown(filename, uid, gid)", caller if @_ != 3;
+    chown($_[0], $_[1], $_[2]);
+}
+
+1;
diff --git a/lib/auto/POSIX/clearerr.al b/lib/auto/POSIX/clearerr.al
new file mode 100644 (file)
index 0000000..412f521
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub clearerr {
+    usage "clearerr(filehandle)", caller if @_ != 1;
+    seek($_[0], 0, 1);
+}
+
+1;
diff --git a/lib/auto/POSIX/clock.al b/lib/auto/POSIX/clock.al
new file mode 100644 (file)
index 0000000..7fae255
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub clock {
+    unimpl "clock(xxx)", caller if @_ != 123;
+    clock($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/close.al b/lib/auto/POSIX/close.al
new file mode 100644 (file)
index 0000000..ce47188
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub close {
+    unimpl "close(xxx)", caller if @_ != 123;
+    close($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/closedir.al b/lib/auto/POSIX/closedir.al
new file mode 100644 (file)
index 0000000..bb12a26
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub closedir {
+    usage "closedir(dirhandle)", caller if @_ != 1;
+    closedir($_[0]);
+    ungensym($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/cos.al b/lib/auto/POSIX/cos.al
new file mode 100644 (file)
index 0000000..4ea59df
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub cos {
+    usage "cos(x)", caller if @_ != 1;
+    cos($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/creat.al b/lib/auto/POSIX/creat.al
new file mode 100644 (file)
index 0000000..74656e7
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub creat {
+    usage "creat(filename, mode)", caller if @_ != 2;
+    &open($_[0], &O_WRONLY | &O_CREAT | &O_TRUNC, $_[2]);
+}
+
+1;
diff --git a/lib/auto/POSIX/ctermid.al b/lib/auto/POSIX/ctermid.al
new file mode 100644 (file)
index 0000000..37a8f71
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub ctermid {
+    unimpl "ctermid(xxx)", caller if @_ != 123;
+    ctermid($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/ctime.al b/lib/auto/POSIX/ctime.al
new file mode 100644 (file)
index 0000000..d12aa4e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub ctime {
+    unimpl "ctime(xxx)", caller if @_ != 123;
+    ctime($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/cuserid.al b/lib/auto/POSIX/cuserid.al
new file mode 100644 (file)
index 0000000..546c309
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub cuserid {
+    unimpl "cuserid(xxx)", caller if @_ != 123;
+    cuserid($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/difftime.al b/lib/auto/POSIX/difftime.al
new file mode 100644 (file)
index 0000000..dd4b3db
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub difftime {
+    unimpl "difftime(xxx)", caller if @_ != 123;
+    difftime($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/div.al b/lib/auto/POSIX/div.al
new file mode 100644 (file)
index 0000000..0102b32
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub div {
+    unimpl "div(xxx)", caller if @_ != 123;
+    div($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/dup.al b/lib/auto/POSIX/dup.al
new file mode 100644 (file)
index 0000000..393119e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub dup {
+    unimpl "dup(xxx)", caller if @_ != 123;
+    dup($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/dup2.al b/lib/auto/POSIX/dup2.al
new file mode 100644 (file)
index 0000000..c85f16e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub dup2 {
+    unimpl "dup2(xxx)", caller if @_ != 123;
+    dup2($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/errno.al b/lib/auto/POSIX/errno.al
new file mode 100644 (file)
index 0000000..971b7e8
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub errno {
+    usage "errno()", caller if @_ != 0;
+    $! + 0;
+}
+
+1;
diff --git a/lib/auto/POSIX/execl.al b/lib/auto/POSIX/execl.al
new file mode 100644 (file)
index 0000000..c89c6fd
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub execl {
+    unimpl "execl(xxx)", caller if @_ != 123;
+    execl($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/execle.al b/lib/auto/POSIX/execle.al
new file mode 100644 (file)
index 0000000..530ac76
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub execle {
+    unimpl "execle(xxx)", caller if @_ != 123;
+    execle($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/execlp.al b/lib/auto/POSIX/execlp.al
new file mode 100644 (file)
index 0000000..ea78975
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub execlp {
+    unimpl "execlp(xxx)", caller if @_ != 123;
+    execlp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/execv.al b/lib/auto/POSIX/execv.al
new file mode 100644 (file)
index 0000000..382ec7d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub execv {
+    unimpl "execv(xxx)", caller if @_ != 123;
+    execv($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/execve.al b/lib/auto/POSIX/execve.al
new file mode 100644 (file)
index 0000000..9f5790a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub execve {
+    unimpl "execve(xxx)", caller if @_ != 123;
+    execve($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/execvp.al b/lib/auto/POSIX/execvp.al
new file mode 100644 (file)
index 0000000..38677d8
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub execvp {
+    unimpl "execvp(xxx)", caller if @_ != 123;
+    execvp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/exit.al b/lib/auto/POSIX/exit.al
new file mode 100644 (file)
index 0000000..fc46de2
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub exit {
+    unimpl "exit(xxx)", caller if @_ != 123;
+    exit($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/exp.al b/lib/auto/POSIX/exp.al
new file mode 100644 (file)
index 0000000..70683e0
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub exp {
+    usage "exp(x)", caller if @_ != 1;
+    exp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fabs.al b/lib/auto/POSIX/fabs.al
new file mode 100644 (file)
index 0000000..5683d66
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fabs {
+    usage "fabs(x)", caller if @_ != 1;
+    abs($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fclose.al b/lib/auto/POSIX/fclose.al
new file mode 100644 (file)
index 0000000..493b964
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fclose {
+    unimpl "fclose() is C-specific--use close instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/fcntl.al b/lib/auto/POSIX/fcntl.al
new file mode 100644 (file)
index 0000000..8108a00
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fcntl {
+    usage "fcntl(filehandle, cmd, arg)", caller if @_ != 3;
+    fcntl($_[0], $_[1], $_[2]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fdopen.al b/lib/auto/POSIX/fdopen.al
new file mode 100644 (file)
index 0000000..23487ca
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fdopen {
+    unimpl "fdopen(xxx)", caller if @_ != 123;
+    fdopen($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/feof.al b/lib/auto/POSIX/feof.al
new file mode 100644 (file)
index 0000000..895d58b
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub feof {
+    usage "feof(filehandle)", caller if @_ != 1;
+    eof($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/ferror.al b/lib/auto/POSIX/ferror.al
new file mode 100644 (file)
index 0000000..0588424
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub ferror {
+    unimpl "ferror(xxx)", caller if @_ != 123;
+    ferror($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fflush.al b/lib/auto/POSIX/fflush.al
new file mode 100644 (file)
index 0000000..b7b7676
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fflush {
+    unimpl "fflush(xxx)", caller if @_ != 123;
+    fflush($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fgetc.al b/lib/auto/POSIX/fgetc.al
new file mode 100644 (file)
index 0000000..41cd70f
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fgetc {
+    usage "fgetc(filehandle)", caller if @_ != 1;
+    getc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fgetpos.al b/lib/auto/POSIX/fgetpos.al
new file mode 100644 (file)
index 0000000..679fcd5
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fgetpos {
+    unimpl "fgetpos(xxx)", caller if @_ != 123;
+    fgetpos($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fgets.al b/lib/auto/POSIX/fgets.al
new file mode 100644 (file)
index 0000000..7a475b3
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fgets {
+    usage "fgets(filehandle)", caller if @_ != 1;
+    local($handle) = @_;
+    scalar <$handle>;
+}
+
+1;
diff --git a/lib/auto/POSIX/fileno.al b/lib/auto/POSIX/fileno.al
new file mode 100644 (file)
index 0000000..62c7c0a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fileno {
+    usage "fileno(filehandle)", caller if @_ != 1;
+    fileno($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fopen.al b/lib/auto/POSIX/fopen.al
new file mode 100644 (file)
index 0000000..f4394ad
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fopen {
+    unimpl "fopen() is C-specific--use open instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/fork.al b/lib/auto/POSIX/fork.al
new file mode 100644 (file)
index 0000000..0646615
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fork {
+    usage "fork()", caller if @_ != 0;
+    fork;
+}
+
+1;
diff --git a/lib/auto/POSIX/fpathconf.al b/lib/auto/POSIX/fpathconf.al
new file mode 100644 (file)
index 0000000..533f906
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fpathconf {
+    unimpl "fpathconf(xxx)", caller if @_ != 123;
+    fpathconf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fprintf.al b/lib/auto/POSIX/fprintf.al
new file mode 100644 (file)
index 0000000..b577f9a
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fprintf {
+    unimpl "fprintf() is C-specific--use printf instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/fputc.al b/lib/auto/POSIX/fputc.al
new file mode 100644 (file)
index 0000000..0cdf82c
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fputc {
+    unimpl "fputc() is C-specific--use print instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/fputs.al b/lib/auto/POSIX/fputs.al
new file mode 100644 (file)
index 0000000..208eea6
--- /dev/null
@@ -0,0 +1,11 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fputs {
+    unimpl "fputs() is C-specific--use print instead", caller;
+    usage "fputs(string, handle)", caller if @_ != 2;
+    local($handle) = pop;
+    print $handle @_;
+}
+
+1;
diff --git a/lib/auto/POSIX/fread.al b/lib/auto/POSIX/fread.al
new file mode 100644 (file)
index 0000000..5b5c0c5
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fread {
+    unimpl "fread() is C-specific--use read instead", caller;
+    unimpl "fread(xxx)", caller if @_ != 123;
+    fread($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/free.al b/lib/auto/POSIX/free.al
new file mode 100644 (file)
index 0000000..319a76d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub free {
+    unimpl "free(xxx)", caller if @_ != 123;
+    free($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/freopen.al b/lib/auto/POSIX/freopen.al
new file mode 100644 (file)
index 0000000..ed4eca6
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub freopen {
+    unimpl "freopen() is C-specific--use open instead", caller;
+    unimpl "freopen(xxx)", caller if @_ != 123;
+    freopen($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fscanf.al b/lib/auto/POSIX/fscanf.al
new file mode 100644 (file)
index 0000000..80a8e61
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fscanf {
+    unimpl "fscanf() is C-specific--use <> and regular expressions instead", caller;
+    unimpl "fscanf(xxx)", caller if @_ != 123;
+    fscanf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fseek.al b/lib/auto/POSIX/fseek.al
new file mode 100644 (file)
index 0000000..55da72a
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fseek {
+    unimpl "fseek() is C-specific--use seek instead", caller;
+    unimpl "fseek(xxx)", caller if @_ != 123;
+    fseek($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fsetpos.al b/lib/auto/POSIX/fsetpos.al
new file mode 100644 (file)
index 0000000..9b59546
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fsetpos {
+    unimpl "fsetpos() is C-specific--use seek instead", caller;
+    unimpl "fsetpos(xxx)", caller if @_ != 123;
+    fsetpos($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fstat.al b/lib/auto/POSIX/fstat.al
new file mode 100644 (file)
index 0000000..64ac1b6
--- /dev/null
@@ -0,0 +1,13 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fstat {
+    usage "fstat(fd)", caller if @_ != 1;
+    local(*TMP);
+    open(TMP, "<&$_[0]");              # Gross.
+    local(@l) = stat(TMP);
+    close(TMP);
+    @l;
+}
+
+1;
diff --git a/lib/auto/POSIX/ftell.al b/lib/auto/POSIX/ftell.al
new file mode 100644 (file)
index 0000000..aa922c6
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub ftell {
+    unimpl "ftell() is C-specific--use tell instead", caller;
+    unimpl "ftell(xxx)", caller if @_ != 123;
+    ftell($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/fwrite.al b/lib/auto/POSIX/fwrite.al
new file mode 100644 (file)
index 0000000..09d8e7d
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub fwrite {
+    unimpl "fwrite() is C-specific--use print instead", caller;
+    unimpl "fwrite(xxx)", caller if @_ != 123;
+    fwrite($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/getc.al b/lib/auto/POSIX/getc.al
new file mode 100644 (file)
index 0000000..5919395
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getc {
+    usage "getc(handle)", caller if @_ != 1;
+    getc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/getchar.al b/lib/auto/POSIX/getchar.al
new file mode 100644 (file)
index 0000000..08e5111
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getchar {
+    usage "getchar()", caller if @_ != 0;
+    getc(STDIN);
+}
+
+1;
diff --git a/lib/auto/POSIX/getcwd.al b/lib/auto/POSIX/getcwd.al
new file mode 100644 (file)
index 0000000..1e1ec7c
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getcwd {
+    unimpl "getcwd(xxx)", caller if @_ != 123;
+    getcwd($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/getegid.al b/lib/auto/POSIX/getegid.al
new file mode 100644 (file)
index 0000000..6f3719c
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getegid {
+    usage "getegid()", caller if @_ != 0;
+    $) + 0;
+}
+
+1;
diff --git a/lib/auto/POSIX/getenv.al b/lib/auto/POSIX/getenv.al
new file mode 100644 (file)
index 0000000..04fc148
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getenv {
+    unimpl "getenv(xxx)", caller if @_ != 123;
+    getenv($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/geteuid.al b/lib/auto/POSIX/geteuid.al
new file mode 100644 (file)
index 0000000..74b10ff
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub geteuid {
+    usage "geteuid()", caller if @_ != 0;
+    $> + 0;
+}
+
+1;
diff --git a/lib/auto/POSIX/getgid.al b/lib/auto/POSIX/getgid.al
new file mode 100644 (file)
index 0000000..a106618
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getgid {
+    usage "getgid()", caller if @_ != 0;
+    $( + 0;
+}
+
+1;
diff --git a/lib/auto/POSIX/getgrgid.al b/lib/auto/POSIX/getgrgid.al
new file mode 100644 (file)
index 0000000..485ed2b
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getgrgid {
+    usage "getgrgid(gid)", caller if @_ != 1;
+    getgrgid($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/getgrnam.al b/lib/auto/POSIX/getgrnam.al
new file mode 100644 (file)
index 0000000..1dcbc69
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getgrnam {
+    usage "getgrnam(name)", caller if @_ != 1;
+    getgrnam($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/getgroups.al b/lib/auto/POSIX/getgroups.al
new file mode 100644 (file)
index 0000000..34ae5e8
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getgroups {
+    usage "getgroups()", caller if @_ != 0;
+    local(%seen) = ();
+    grep(!%seen{$_}++, split(' ', $) ));
+}
+
+1;
diff --git a/lib/auto/POSIX/getlogin.al b/lib/auto/POSIX/getlogin.al
new file mode 100644 (file)
index 0000000..8f61cb2
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getlogin {
+    usage "getlogin(xxx)", caller if @_ != 0;
+    getlogin();
+}
+
+1;
diff --git a/lib/auto/POSIX/getpgrp.al b/lib/auto/POSIX/getpgrp.al
new file mode 100644 (file)
index 0000000..0364706
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getpgrp {
+    usage "getpgrp()", caller if @_ != 0;
+    getpgrp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/getpid.al b/lib/auto/POSIX/getpid.al
new file mode 100644 (file)
index 0000000..51deea4
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getpid {
+    usage "getpid()", caller if @_ != 0;
+    $$;
+}
+
+1;
diff --git a/lib/auto/POSIX/getppid.al b/lib/auto/POSIX/getppid.al
new file mode 100644 (file)
index 0000000..95450e9
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getppid {
+    usage "getppid()", caller if @_ != 0;
+    getppid;
+}
+
+1;
diff --git a/lib/auto/POSIX/getpwnam.al b/lib/auto/POSIX/getpwnam.al
new file mode 100644 (file)
index 0000000..d4cbc8d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getpwnam {
+    usage "getpwnam(name)", caller if @_ != 1;
+    getpwnam($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/getpwuid.al b/lib/auto/POSIX/getpwuid.al
new file mode 100644 (file)
index 0000000..cfb1265
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getpwuid {
+    usage "getpwuid(uid)", caller if @_ != 1;
+    getpwuid($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/gets.al b/lib/auto/POSIX/gets.al
new file mode 100644 (file)
index 0000000..d989692
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub gets {
+    usage "gets(handle)", caller if @_ != 1;
+    local($handle) = shift;
+    scalar <$handle>;
+}
+
+1;
diff --git a/lib/auto/POSIX/getuid.al b/lib/auto/POSIX/getuid.al
new file mode 100644 (file)
index 0000000..6b97d48
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub getuid {
+    usage "getuid()", caller if @_ != 0;
+    $<;
+}
+
+1;
diff --git a/lib/auto/POSIX/gmtime.al b/lib/auto/POSIX/gmtime.al
new file mode 100644 (file)
index 0000000..520d2da
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub gmtime {
+    unimpl "gmtime(xxx)", caller if @_ != 123;
+    gmtime($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/isatty.al b/lib/auto/POSIX/isatty.al
new file mode 100644 (file)
index 0000000..dfc50f4
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub isatty {
+    unimpl "isatty(xxx)", caller if @_ != 123;
+    isatty($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/kill.al b/lib/auto/POSIX/kill.al
new file mode 100644 (file)
index 0000000..138a6d7
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub kill {
+    usage "kill(pid, sig)", caller if @_ != 2;
+    kill $_[1], $_[0];
+}
+
+1;
diff --git a/lib/auto/POSIX/labs.al b/lib/auto/POSIX/labs.al
new file mode 100644 (file)
index 0000000..90426e8
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub labs {
+    unimpl "labs(xxx)", caller if @_ != 123;
+    labs($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/ldiv.al b/lib/auto/POSIX/ldiv.al
new file mode 100644 (file)
index 0000000..788fb32
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub ldiv {
+    unimpl "ldiv(xxx)", caller if @_ != 123;
+    ldiv($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/link.al b/lib/auto/POSIX/link.al
new file mode 100644 (file)
index 0000000..662ad9d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub link {
+    usage "link(oldfilename, newfilename)", caller if @_ != 2;
+    link($_[0], $_[1]);
+}
+
+1;
diff --git a/lib/auto/POSIX/localtime.al b/lib/auto/POSIX/localtime.al
new file mode 100644 (file)
index 0000000..5e4d61a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub localtime {
+    unimpl "localtime(xxx)", caller if @_ != 123;
+    localtime($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/log.al b/lib/auto/POSIX/log.al
new file mode 100644 (file)
index 0000000..2ba36f2
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub log {
+    usage "log(x)", caller if @_ != 1;
+    log($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/longjmp.al b/lib/auto/POSIX/longjmp.al
new file mode 100644 (file)
index 0000000..d403d46
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub longjmp {
+    unimpl "longjmp() is C-specific: use die instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/lseek.al b/lib/auto/POSIX/lseek.al
new file mode 100644 (file)
index 0000000..ded754a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub lseek {
+    unimpl "lseek(xxx)", caller if @_ != 123;
+    lseek($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/malloc.al b/lib/auto/POSIX/malloc.al
new file mode 100644 (file)
index 0000000..e860639
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub malloc {
+    unimpl "malloc(xxx)", caller if @_ != 123;
+    malloc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/mblen.al b/lib/auto/POSIX/mblen.al
new file mode 100644 (file)
index 0000000..1a7b7f3
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub mblen {
+    unimpl "mblen(xxx)", caller if @_ != 123;
+    mblen($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/mbstowcs.al b/lib/auto/POSIX/mbstowcs.al
new file mode 100644 (file)
index 0000000..8f15fe3
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub mbstowcs {
+    unimpl "mbstowcs(xxx)", caller if @_ != 123;
+    mbstowcs($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/mbtowc.al b/lib/auto/POSIX/mbtowc.al
new file mode 100644 (file)
index 0000000..695dcb9
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub mbtowc {
+    unimpl "mbtowc(xxx)", caller if @_ != 123;
+    mbtowc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/memchr.al b/lib/auto/POSIX/memchr.al
new file mode 100644 (file)
index 0000000..28b0c12
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub memchr {
+    unimpl "memchr(xxx)", caller if @_ != 123;
+    memchr($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/memcmp.al b/lib/auto/POSIX/memcmp.al
new file mode 100644 (file)
index 0000000..8406f28
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub memcmp {
+    unimpl "memcmp(xxx)", caller if @_ != 123;
+    memcmp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/memcpy.al b/lib/auto/POSIX/memcpy.al
new file mode 100644 (file)
index 0000000..eee2dd6
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub memcpy {
+    unimpl "memcpy(xxx)", caller if @_ != 123;
+    memcpy($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/memmove.al b/lib/auto/POSIX/memmove.al
new file mode 100644 (file)
index 0000000..c926d78
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub memmove {
+    unimpl "memmove(xxx)", caller if @_ != 123;
+    memmove($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/memset.al b/lib/auto/POSIX/memset.al
new file mode 100644 (file)
index 0000000..369930e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub memset {
+    unimpl "memset(xxx)", caller if @_ != 123;
+    memset($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/mkdir.al b/lib/auto/POSIX/mkdir.al
new file mode 100644 (file)
index 0000000..0b10882
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub mkdir {
+    usage "mkdir(directoryname, mode)", caller if @_ != 2;
+    mkdir($_[0], $_[1]);
+}
+
+1;
diff --git a/lib/auto/POSIX/mkfifo.al b/lib/auto/POSIX/mkfifo.al
new file mode 100644 (file)
index 0000000..8b6ad72
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub mkfifo {
+    unimpl "mkfifo(xxx)", caller if @_ != 123;
+    mkfifo($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/mktime.al b/lib/auto/POSIX/mktime.al
new file mode 100644 (file)
index 0000000..df7e355
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub mktime {
+    unimpl "mktime(xxx)", caller if @_ != 123;
+    mktime($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/offsetof.al b/lib/auto/POSIX/offsetof.al
new file mode 100644 (file)
index 0000000..fb5ecfb
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub offsetof {
+    unimpl "offsetof() is C-specific, stopped", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/opendir.al b/lib/auto/POSIX/opendir.al
new file mode 100644 (file)
index 0000000..7c264d4
--- /dev/null
@@ -0,0 +1,12 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub opendir {
+    usage "opendir(directory)", caller if @_ != 1;
+    local($dirhandle) = &gensym;
+    opendir($dirhandle, $_[0])
+       ? $dirhandle
+       : (ungensym($dirhandle), undef);
+}
+
+1;
diff --git a/lib/auto/POSIX/pathconf.al b/lib/auto/POSIX/pathconf.al
new file mode 100644 (file)
index 0000000..4a66189
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub pathconf {
+    unimpl "pathconf(xxx)", caller if @_ != 123;
+    pathconf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/pause.al b/lib/auto/POSIX/pause.al
new file mode 100644 (file)
index 0000000..41fcea6
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub pause {
+    unimpl "pause(xxx)", caller if @_ != 123;
+    pause($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/perror.al b/lib/auto/POSIX/perror.al
new file mode 100644 (file)
index 0000000..36ae11e
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub perror {
+    unimpl "perror() is C-specific--print $! instead", caller;
+    unimpl "perror(xxx)", caller if @_ != 123;
+    perror($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/pipe.al b/lib/auto/POSIX/pipe.al
new file mode 100644 (file)
index 0000000..d65b5ec
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub pipe {
+    unimpl "pipe(xxx)", caller if @_ != 123;
+    pipe($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/pow.al b/lib/auto/POSIX/pow.al
new file mode 100644 (file)
index 0000000..0893b22
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub pow {
+    usage "pow(x,exponent)", caller if @_ != 2;
+    $_[0] ** $_[1];
+}
+
+1;
diff --git a/lib/auto/POSIX/printf.al b/lib/auto/POSIX/printf.al
new file mode 100644 (file)
index 0000000..f911780
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub printf {
+    usage "printf(pattern, args...)", caller if @_ < 1;
+    printf STDOUT @_;
+}
+
+1;
diff --git a/lib/auto/POSIX/putc.al b/lib/auto/POSIX/putc.al
new file mode 100644 (file)
index 0000000..59eaca8
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub putc {
+    unimpl "putc() is C-specific--use print instead", caller;
+    unimpl "putc(xxx)", caller if @_ != 123;
+    putc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/putchar.al b/lib/auto/POSIX/putchar.al
new file mode 100644 (file)
index 0000000..1d6016c
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub putchar {
+    unimpl "putchar() is C-specific--use print instead", caller;
+    unimpl "putchar(xxx)", caller if @_ != 123;
+    putchar($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/puts.al b/lib/auto/POSIX/puts.al
new file mode 100644 (file)
index 0000000..84d3d80
--- /dev/null
@@ -0,0 +1,10 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub puts {
+    unimpl "puts() is C-specific--use print instead", caller;
+    unimpl "puts(xxx)", caller if @_ != 123;
+    puts($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/qsort.al b/lib/auto/POSIX/qsort.al
new file mode 100644 (file)
index 0000000..93eb124
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub qsort {
+    unimpl "qsort(xxx)", caller if @_ != 123;
+    qsort($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/raise.al b/lib/auto/POSIX/raise.al
new file mode 100644 (file)
index 0000000..de43d2a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub raise {
+    usage "raise(sig)", caller if @_ != 1;
+    kill $$, $_[0];    # Is this good enough?
+}
+
+1;
diff --git a/lib/auto/POSIX/rand.al b/lib/auto/POSIX/rand.al
new file mode 100644 (file)
index 0000000..08c3a1b
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub rand {
+    unimpl "rand(xxx)", caller if @_ != 123;
+    rand($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/read.al b/lib/auto/POSIX/read.al
new file mode 100644 (file)
index 0000000..50363af
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub read {
+    unimpl "read(xxx)", caller if @_ != 123;
+    read($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/readdir.al b/lib/auto/POSIX/readdir.al
new file mode 100644 (file)
index 0000000..84792b0
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub readdir {
+    usage "readdir(dirhandle)", caller if @_ != 1;
+    readdir($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/realloc.al b/lib/auto/POSIX/realloc.al
new file mode 100644 (file)
index 0000000..4899b05
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub realloc {
+    unimpl "realloc(xxx)", caller if @_ != 123;
+    realloc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/remove.al b/lib/auto/POSIX/remove.al
new file mode 100644 (file)
index 0000000..83d2b8a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub remove {
+    unimpl "remove(xxx)", caller if @_ != 123;
+    remove($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/rename.al b/lib/auto/POSIX/rename.al
new file mode 100644 (file)
index 0000000..b657c5a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub rename {
+    usage "rename(oldfilename, newfilename)", caller if @_ != 2;
+    rename($_[0], $_[1]);
+}
+
+1;
diff --git a/lib/auto/POSIX/rewind.al b/lib/auto/POSIX/rewind.al
new file mode 100644 (file)
index 0000000..0bbcc84
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub rewind {
+    unimpl "rewind(xxx)", caller if @_ != 123;
+    rewind($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/rewinddir.al b/lib/auto/POSIX/rewinddir.al
new file mode 100644 (file)
index 0000000..610f458
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub rewinddir {
+    usage "rewinddir(dirhandle)", caller if @_ != 1;
+    rewinddir($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/rmdir.al b/lib/auto/POSIX/rmdir.al
new file mode 100644 (file)
index 0000000..a439aa6
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub rmdir {
+    usage "rmdir(directoryname)", caller if @_ != 1;
+    rmdir($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/scanf.al b/lib/auto/POSIX/scanf.al
new file mode 100644 (file)
index 0000000..f154409
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub scanf {
+    unimpl "scanf(xxx)", caller if @_ != 123;
+    scanf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/setbuf.al b/lib/auto/POSIX/setbuf.al
new file mode 100644 (file)
index 0000000..96f2e97
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub setbuf {
+    unimpl "setbuf(xxx)", caller if @_ != 123;
+    setbuf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/setgid.al b/lib/auto/POSIX/setgid.al
new file mode 100644 (file)
index 0000000..fcbb8b6
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub setgid {
+    unimpl "setgid(xxx)", caller if @_ != 123;
+    setgid($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/setjmp.al b/lib/auto/POSIX/setjmp.al
new file mode 100644 (file)
index 0000000..93e614a
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub setjmp {
+    unimpl "setjmp() is C-specific: use eval {} instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/setpgid.al b/lib/auto/POSIX/setpgid.al
new file mode 100644 (file)
index 0000000..948e79a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub setpgid {
+    unimpl "setpgid(xxx)", caller if @_ != 123;
+    setpgid($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/setsid.al b/lib/auto/POSIX/setsid.al
new file mode 100644 (file)
index 0000000..7edc965
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub setsid {
+    unimpl "setsid(xxx)", caller if @_ != 123;
+    setsid($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/setuid.al b/lib/auto/POSIX/setuid.al
new file mode 100644 (file)
index 0000000..02da7d3
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub setuid {
+    unimpl "setuid(xxx)", caller if @_ != 123;
+    setuid($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/setvbuf.al b/lib/auto/POSIX/setvbuf.al
new file mode 100644 (file)
index 0000000..5303581
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub setvbuf {
+    unimpl "setvbuf(xxx)", caller if @_ != 123;
+    setvbuf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigaction.al b/lib/auto/POSIX/sigaction.al
new file mode 100644 (file)
index 0000000..c2b8300
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigaction {
+    unimpl "sigaction(xxx)", caller if @_ != 123;
+    sigaction($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigaddset.al b/lib/auto/POSIX/sigaddset.al
new file mode 100644 (file)
index 0000000..9a0ea67
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigaddset {
+    unimpl "sigaddset(xxx)", caller if @_ != 123;
+    sigaddset($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigdelset.al b/lib/auto/POSIX/sigdelset.al
new file mode 100644 (file)
index 0000000..c252f9f
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigdelset {
+    unimpl "sigdelset(xxx)", caller if @_ != 123;
+    sigdelset($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigemptyset.al b/lib/auto/POSIX/sigemptyset.al
new file mode 100644 (file)
index 0000000..f665f62
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigemptyset {
+    unimpl "sigemptyset(xxx)", caller if @_ != 123;
+    sigemptyset($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigfillset.al b/lib/auto/POSIX/sigfillset.al
new file mode 100644 (file)
index 0000000..b685797
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigfillset {
+    unimpl "sigfillset(xxx)", caller if @_ != 123;
+    sigfillset($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigismember.al b/lib/auto/POSIX/sigismember.al
new file mode 100644 (file)
index 0000000..67c9d98
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigismember {
+    unimpl "sigismember(xxx)", caller if @_ != 123;
+    sigismember($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/siglongjmp.al b/lib/auto/POSIX/siglongjmp.al
new file mode 100644 (file)
index 0000000..48ab95e
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub siglongjmp {
+    unimpl "siglongjmp() is C-specific: use die instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/signal.al b/lib/auto/POSIX/signal.al
new file mode 100644 (file)
index 0000000..2471bd3
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub signal {
+    unimpl "signal(xxx)", caller if @_ != 123;
+    signal($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigpending.al b/lib/auto/POSIX/sigpending.al
new file mode 100644 (file)
index 0000000..bb2c76d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigpending {
+    unimpl "sigpending(xxx)", caller if @_ != 123;
+    sigpending($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigprocmask.al b/lib/auto/POSIX/sigprocmask.al
new file mode 100644 (file)
index 0000000..a6d42a2
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigprocmask {
+    unimpl "sigprocmask(xxx)", caller if @_ != 123;
+    sigprocmask($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sigsetjmp.al b/lib/auto/POSIX/sigsetjmp.al
new file mode 100644 (file)
index 0000000..b737259
--- /dev/null
@@ -0,0 +1,8 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigsetjmp {
+    unimpl "sigsetjmp() is C-specific: use eval {} instead", caller;
+}
+
+1;
diff --git a/lib/auto/POSIX/sigsuspend.al b/lib/auto/POSIX/sigsuspend.al
new file mode 100644 (file)
index 0000000..159f1d5
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sigsuspend {
+    unimpl "sigsuspend(xxx)", caller if @_ != 123;
+    sigsuspend($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sin.al b/lib/auto/POSIX/sin.al
new file mode 100644 (file)
index 0000000..90681ff
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sin {
+    usage "sin(x)", caller if @_ != 1;
+    sin($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sleep.al b/lib/auto/POSIX/sleep.al
new file mode 100644 (file)
index 0000000..ac326e8
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sleep {
+    unimpl "sleep(xxx)", caller if @_ != 123;
+    sleep($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sprintf.al b/lib/auto/POSIX/sprintf.al
new file mode 100644 (file)
index 0000000..5a61a83
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sprintf {
+    unimpl "sprintf(xxx)", caller if @_ != 123;
+    sprintf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sqrt.al b/lib/auto/POSIX/sqrt.al
new file mode 100644 (file)
index 0000000..f2efe5d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sqrt {
+    usage "sqrt(x)", caller if @_ != 1;
+    sqrt($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/srand.al b/lib/auto/POSIX/srand.al
new file mode 100644 (file)
index 0000000..563757d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub srand {
+    unimpl "srand(xxx)", caller if @_ != 123;
+    srand($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sscanf.al b/lib/auto/POSIX/sscanf.al
new file mode 100644 (file)
index 0000000..0570141
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sscanf {
+    unimpl "sscanf(xxx)", caller if @_ != 123;
+    sscanf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/stat.al b/lib/auto/POSIX/stat.al
new file mode 100644 (file)
index 0000000..636607e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub stat {
+    usage "stat(filename)", caller if @_ != 1;
+    stat($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strcat.al b/lib/auto/POSIX/strcat.al
new file mode 100644 (file)
index 0000000..b80dd70
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strcat {
+    unimpl "strcat(xxx)", caller if @_ != 123;
+    strcat($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strchr.al b/lib/auto/POSIX/strchr.al
new file mode 100644 (file)
index 0000000..9dbea2e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strchr {
+    unimpl "strchr(xxx)", caller if @_ != 123;
+    strchr($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strcmp.al b/lib/auto/POSIX/strcmp.al
new file mode 100644 (file)
index 0000000..72f5304
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strcmp {
+    unimpl "strcmp(xxx)", caller if @_ != 123;
+    strcmp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strcoll.al b/lib/auto/POSIX/strcoll.al
new file mode 100644 (file)
index 0000000..a904097
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strcoll {
+    unimpl "strcoll(xxx)", caller if @_ != 123;
+    strcoll($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strcpy.al b/lib/auto/POSIX/strcpy.al
new file mode 100644 (file)
index 0000000..aa3e05d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strcpy {
+    unimpl "strcpy(xxx)", caller if @_ != 123;
+    strcpy($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strcspn.al b/lib/auto/POSIX/strcspn.al
new file mode 100644 (file)
index 0000000..00a5c1a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strcspn {
+    unimpl "strcspn(xxx)", caller if @_ != 123;
+    strcspn($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strerror.al b/lib/auto/POSIX/strerror.al
new file mode 100644 (file)
index 0000000..d4dbd7e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strerror {
+    unimpl "strerror(xxx)", caller if @_ != 123;
+    strerror($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strftime.al b/lib/auto/POSIX/strftime.al
new file mode 100644 (file)
index 0000000..578b324
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strftime {
+    unimpl "strftime(xxx)", caller if @_ != 123;
+    strftime($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strlen.al b/lib/auto/POSIX/strlen.al
new file mode 100644 (file)
index 0000000..afb3a7e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strlen {
+    unimpl "strlen(xxx)", caller if @_ != 123;
+    strlen($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strncat.al b/lib/auto/POSIX/strncat.al
new file mode 100644 (file)
index 0000000..d5694bd
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strncat {
+    unimpl "strncat(xxx)", caller if @_ != 123;
+    strncat($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strncmp.al b/lib/auto/POSIX/strncmp.al
new file mode 100644 (file)
index 0000000..d85972c
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strncmp {
+    unimpl "strncmp(xxx)", caller if @_ != 123;
+    strncmp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strncpy.al b/lib/auto/POSIX/strncpy.al
new file mode 100644 (file)
index 0000000..1ebe12d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strncpy {
+    unimpl "strncpy(xxx)", caller if @_ != 123;
+    strncpy($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/stroul.al b/lib/auto/POSIX/stroul.al
new file mode 100644 (file)
index 0000000..bbdb71e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub stroul {
+    unimpl "stroul(xxx)", caller if @_ != 123;
+    stroul($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strpbrk.al b/lib/auto/POSIX/strpbrk.al
new file mode 100644 (file)
index 0000000..ee8bef9
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strpbrk {
+    unimpl "strpbrk(xxx)", caller if @_ != 123;
+    strpbrk($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strrchr.al b/lib/auto/POSIX/strrchr.al
new file mode 100644 (file)
index 0000000..175f326
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strrchr {
+    unimpl "strrchr(xxx)", caller if @_ != 123;
+    strrchr($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strspn.al b/lib/auto/POSIX/strspn.al
new file mode 100644 (file)
index 0000000..1856cae
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strspn {
+    unimpl "strspn(xxx)", caller if @_ != 123;
+    strspn($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strstr.al b/lib/auto/POSIX/strstr.al
new file mode 100644 (file)
index 0000000..c9ef04a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strstr {
+    unimpl "strstr(xxx)", caller if @_ != 123;
+    strstr($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strtod.al b/lib/auto/POSIX/strtod.al
new file mode 100644 (file)
index 0000000..44ada12
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strtod {
+    unimpl "strtod(xxx)", caller if @_ != 123;
+    strtod($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strtok.al b/lib/auto/POSIX/strtok.al
new file mode 100644 (file)
index 0000000..4782514
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strtok {
+    unimpl "strtok(xxx)", caller if @_ != 123;
+    strtok($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strtol.al b/lib/auto/POSIX/strtol.al
new file mode 100644 (file)
index 0000000..4a40dff
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strtol {
+    unimpl "strtol(xxx)", caller if @_ != 123;
+    strtol($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/strxfrm.al b/lib/auto/POSIX/strxfrm.al
new file mode 100644 (file)
index 0000000..9ad22f1
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub strxfrm {
+    unimpl "strxfrm(xxx)", caller if @_ != 123;
+    strxfrm($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/sysconf.al b/lib/auto/POSIX/sysconf.al
new file mode 100644 (file)
index 0000000..5dfeab8
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub sysconf {
+    unimpl "sysconf(xxx)", caller if @_ != 123;
+    sysconf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/system.al b/lib/auto/POSIX/system.al
new file mode 100644 (file)
index 0000000..c143ca1
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub system {
+    usage "system(command)", caller if @_ != 1;
+    system($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tan.al b/lib/auto/POSIX/tan.al
new file mode 100644 (file)
index 0000000..a86b877
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tan {
+    usage "tan(x)", caller if @_ != 1;
+    tan($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tcdrain.al b/lib/auto/POSIX/tcdrain.al
new file mode 100644 (file)
index 0000000..97ea14f
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tcdrain {
+    unimpl "tcdrain(xxx)", caller if @_ != 123;
+    tcdrain($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tcflow.al b/lib/auto/POSIX/tcflow.al
new file mode 100644 (file)
index 0000000..690587a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tcflow {
+    unimpl "tcflow(xxx)", caller if @_ != 123;
+    tcflow($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tcflush.al b/lib/auto/POSIX/tcflush.al
new file mode 100644 (file)
index 0000000..733ab16
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tcflush {
+    unimpl "tcflush(xxx)", caller if @_ != 123;
+    tcflush($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tcgetattr.al b/lib/auto/POSIX/tcgetattr.al
new file mode 100644 (file)
index 0000000..c8a5e09
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tcgetattr {
+    unimpl "tcgetattr(xxx)", caller if @_ != 123;
+    tcgetattr($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tcgetpgrp.al b/lib/auto/POSIX/tcgetpgrp.al
new file mode 100644 (file)
index 0000000..8b6f884
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tcgetpgrp {
+    unimpl "tcgetpgrp(xxx)", caller if @_ != 123;
+    tcgetpgrp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tcsendbreak.al b/lib/auto/POSIX/tcsendbreak.al
new file mode 100644 (file)
index 0000000..e90b7fa
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tcsendbreak {
+    unimpl "tcsendbreak(xxx)", caller if @_ != 123;
+    tcsendbreak($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tcsetattr.al b/lib/auto/POSIX/tcsetattr.al
new file mode 100644 (file)
index 0000000..1735cf6
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tcsetattr {
+    unimpl "tcsetattr(xxx)", caller if @_ != 123;
+    tcsetattr($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tcsetpgrp.al b/lib/auto/POSIX/tcsetpgrp.al
new file mode 100644 (file)
index 0000000..9dcff24
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tcsetpgrp {
+    unimpl "tcsetpgrp(xxx)", caller if @_ != 123;
+    tcsetpgrp($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/time.al b/lib/auto/POSIX/time.al
new file mode 100644 (file)
index 0000000..d750d24
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub time {
+    unimpl "time(xxx)", caller if @_ != 123;
+    time($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/times.al b/lib/auto/POSIX/times.al
new file mode 100644 (file)
index 0000000..d8f588a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub times {
+    usage "times()", caller if @_ != 0;
+    times();
+}
+
+1;
diff --git a/lib/auto/POSIX/tmpfile.al b/lib/auto/POSIX/tmpfile.al
new file mode 100644 (file)
index 0000000..7adb01f
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tmpfile {
+    unimpl "tmpfile(xxx)", caller if @_ != 123;
+    tmpfile($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tmpnam.al b/lib/auto/POSIX/tmpnam.al
new file mode 100644 (file)
index 0000000..23e7dfb
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tmpnam {
+    unimpl "tmpnam(xxx)", caller if @_ != 123;
+    tmpnam($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tolower.al b/lib/auto/POSIX/tolower.al
new file mode 100644 (file)
index 0000000..8bcbb84
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tolower {
+    usage "tolower(string)", caller if @_ != 1;
+    lc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/toupper.al b/lib/auto/POSIX/toupper.al
new file mode 100644 (file)
index 0000000..e8b4c0b
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub toupper {
+    usage "toupper(string)", caller if @_ != 1;
+    uc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/ttyname.al b/lib/auto/POSIX/ttyname.al
new file mode 100644 (file)
index 0000000..60f39dc
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub ttyname {
+    unimpl "ttyname(xxx)", caller if @_ != 123;
+    ttyname($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tzname.al b/lib/auto/POSIX/tzname.al
new file mode 100644 (file)
index 0000000..86e7019
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tzname {
+    unimpl "tzname(xxx)", caller if @_ != 123;
+    tzname($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/tzset.al b/lib/auto/POSIX/tzset.al
new file mode 100644 (file)
index 0000000..44b5b0a
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub tzset {
+    unimpl "tzset(xxx)", caller if @_ != 123;
+    tzset($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/umask.al b/lib/auto/POSIX/umask.al
new file mode 100644 (file)
index 0000000..e7c7fc7
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub umask {
+    usage "umask(mask)", caller if @_ != 1;
+    umask($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/ungetc.al b/lib/auto/POSIX/ungetc.al
new file mode 100644 (file)
index 0000000..76c426e
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub ungetc {
+    unimpl "ungetc(xxx)", caller if @_ != 123;
+    ungetc($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/unlink.al b/lib/auto/POSIX/unlink.al
new file mode 100644 (file)
index 0000000..798ce43
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub unlink {
+    usage "unlink(filename)", caller if @_ != 1;
+    unlink($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/utime.al b/lib/auto/POSIX/utime.al
new file mode 100644 (file)
index 0000000..fff416d
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub utime {
+    usage "utime(filename, atime, mtime)", caller if @_ != 3;
+    utime($_[1], $_[2], $_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/vfprintf.al b/lib/auto/POSIX/vfprintf.al
new file mode 100644 (file)
index 0000000..b18f42f
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub vfprintf {
+    unimpl "vfprintf(xxx)", caller if @_ != 123;
+    vfprintf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/vprintf.al b/lib/auto/POSIX/vprintf.al
new file mode 100644 (file)
index 0000000..f295a99
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub vprintf {
+    unimpl "vprintf(xxx)", caller if @_ != 123;
+    vprintf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/vsprintf.al b/lib/auto/POSIX/vsprintf.al
new file mode 100644 (file)
index 0000000..c8e00c7
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub vsprintf {
+    unimpl "vsprintf(xxx)", caller if @_ != 123;
+    vsprintf($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/wait.al b/lib/auto/POSIX/wait.al
new file mode 100644 (file)
index 0000000..489b1e3
--- /dev/null
@@ -0,0 +1,11 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub wait {
+    usage "wait(statusvariable)", caller if @_ != 1;
+    local $result = wait();
+    $_[0] = $?;
+    $result;
+}
+
+1;
diff --git a/lib/auto/POSIX/waitpid.al b/lib/auto/POSIX/waitpid.al
new file mode 100644 (file)
index 0000000..a7706a7
--- /dev/null
@@ -0,0 +1,11 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub waitpid {
+    usage "waitpid(pid, statusvariable, options)", caller if @_ != 3;
+    local $result = waitpid($_[0], $_[2]);
+    $_[1] = $?;
+    $result;
+}
+
+1;
diff --git a/lib/auto/POSIX/wcstombs.al b/lib/auto/POSIX/wcstombs.al
new file mode 100644 (file)
index 0000000..1f8782b
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub wcstombs {
+    unimpl "wcstombs(xxx)", caller if @_ != 123;
+    wcstombs($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/wctomb.al b/lib/auto/POSIX/wctomb.al
new file mode 100644 (file)
index 0000000..e4ccf87
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub wctomb {
+    unimpl "wctomb(xxx)", caller if @_ != 123;
+    wctomb($_[0]);
+}
+
+1;
diff --git a/lib/auto/POSIX/write.al b/lib/auto/POSIX/write.al
new file mode 100644 (file)
index 0000000..2306b69
--- /dev/null
@@ -0,0 +1,9 @@
+# NOTE:  Derived from POSIX.pm.  Changes made here will be lost.
+package POSIX;
+
+sub write {
+    unimpl "write(xxx)", caller if @_ != 123;
+    write($_[0]);
+}
+
+1;
diff --git a/lib/auto/SDBM_File.so b/lib/auto/SDBM_File.so
new file mode 100755 (executable)
index 0000000..8414d44
Binary files /dev/null and b/lib/auto/SDBM_File.so differ
diff --git a/lib/auto/SDBM_File/SDBM_File.so b/lib/auto/SDBM_File/SDBM_File.so
new file mode 100755 (executable)
index 0000000..362042c
Binary files /dev/null and b/lib/auto/SDBM_File/SDBM_File.so differ
diff --git a/lib/auto/SDBM_File/foo b/lib/auto/SDBM_File/foo
new file mode 100755 (executable)
index 0000000..193c50c
Binary files /dev/null and b/lib/auto/SDBM_File/foo differ
diff --git a/lib/chat2.inter b/lib/chat2.inter
new file mode 100644 (file)
index 0000000..6934f1c
--- /dev/null
@@ -0,0 +1,495 @@
+Article 20992 of comp.lang.perl:
+Path: netlabs!news.cerf.net!mvb.saic.com!MathWorks.Com!europa.eng.gtefsd.com!howland.reston.ans.net!cs.utexas.edu!swrinde!ihnp4.ucsd.edu!ames!koriel!male.EBay.Sun.COM!jethro.Corp.Sun.COM!eric
+From: eric.arnold@sun.com (Eric Arnold)
+Newsgroups: comp.lang.perl
+Subject: Re: Need a bidirectional filter for interactive Unix applications
+Date: 15 Apr 94 21:24:03 GMT
+Organization: Sun Microsystems
+Lines: 478
+Sender: news@sun.com
+Message-ID: <ERIC.94Apr15212403@sun.com>
+References: <dgfCo9F2J.Jzw@netcom.com> <1994Apr15.110134.4581@chemabs.uucp>
+NNTP-Posting-Host: animus.corp.sun.com
+X-Newsreader: prn Ver 1.09
+In-reply-to: btf64@cas.org's message of Fri, 15 Apr 1994 11:01:34 GMT
+
+In article <1994Apr15.110134.4581@chemabs.uucp>
+       btf64@cas.org (Bernard T. French) writes:
+
+>In article <dgfCo9F2J.Jzw@netcom.com> dgf@netcom.com (David Feldman) writes:
+>>I need to write a bidirectional filter that would (ideally) sit between a
+..
+>>program's stdin & stdout to point to a pty pair known to perl. The perl app-
+>>lication would talk to the user's crt/keyboard, translate (application-specific)
+>>the input & output streams, and pass these as appropriate to/from the pty pair,
+..
+>
+>     I'm afraid I can't offer you a perl solution, but err..... there is a
+>Tcl solution.  There is a Tcl extension called "expect" that is designed to
+
+There *is* an old, established Perl solution:  "chat2.pl" which does
+everything (well, basically) "expect" does but you get it in the
+expressive Perl environment.  "chat2.pl" is delivered with the Perl
+source.
+
+Randal:  "interact()" still hasn't made it into Perl5alpha8
+"chat2.pl", so I've included a version which does.
+
+-Eric
+
+
+## chat.pl: chat with a server
+## V2.01.alpha.7 91/06/16
+## Randal L. Schwartz
+
+package chat;
+
+$sockaddr = 'S n a4 x8';
+chop($thishost = `hostname`); $thisaddr = (gethostbyname($thishost))[4];
+$thisproc = pack($sockaddr, 2, 0, $thisaddr);
+
+# *S = symbol for current I/O, gets assigned *chatsymbol....
+$next = "chatsymbol000000"; # next one
+$nextpat = "^chatsymbol"; # patterns that match next++, ++, ++, ++
+
+
+## $handle = &chat'open_port("server.address",$port_number);
+## opens a named or numbered TCP server
+
+sub open_port { ## public
+       local($server, $port) = @_;
+
+       local($serveraddr,$serverproc);
+
+       *S = ++$next;
+       if ($server =~ /^(\d+)+\.(\d+)\.(\d+)\.(\d+)$/) {
+               $serveraddr = pack('C4', $1, $2, $3, $4);
+       } else {
+               local(@x) = gethostbyname($server);
+               return undef unless @x;
+               $serveraddr = $x[4];
+       }
+       $serverproc = pack($sockaddr, 2, $port, $serveraddr);
+       unless (socket(S, 2, 1, 6)) {
+               # XXX hardwired $AF_SOCKET, $SOCK_STREAM, 'tcp'
+               # but who the heck would change these anyway? (:-)
+               ($!) = ($!, close(S)); # close S while saving $!
+               return undef;
+       }
+       unless (bind(S, $thisproc)) {
+               ($!) = ($!, close(S)); # close S while saving $!
+               return undef;
+       }
+       unless (connect(S, $serverproc)) {
+               ($!) = ($!, close(S)); # close S while saving $!
+               return undef;
+       }
+       select((select(S), $| = 1)[0]);
+       $next; # return symbol for switcharound
+}
+
+## ($host, $port, $handle) = &chat'open_listen([$port_number]);
+## opens a TCP port on the current machine, ready to be listened to
+## if $port_number is absent or zero, pick a default port number
+## process must be uid 0 to listen to a low port number
+
+sub open_listen { ## public
+
+       *S = ++$next;
+       local($thisport) = shift || 0;
+       local($thisproc_local) = pack($sockaddr, 2, $thisport, $thisaddr);
+       local(*NS) = "__" . time;
+       unless (socket(NS, 2, 1, 6)) {
+               # XXX hardwired $AF_SOCKET, $SOCK_STREAM, 'tcp'
+               # but who the heck would change these anyway? (:-)
+               ($!) = ($!, close(NS));
+               return undef;
+       }
+       unless (bind(NS, $thisproc_local)) {
+               ($!) = ($!, close(NS));
+               return undef;
+       }
+       unless (listen(NS, 1)) {
+               ($!) = ($!, close(NS));
+               return undef;
+       }
+       select((select(NS), $| = 1)[0]);
+       local($family, $port, @myaddr) =
+               unpack("S n C C C C x8", getsockname(NS));
+       $S{"needs_accept"} = *NS; # so expect will open it
+       (@myaddr, $port, $next); # returning this
+}
+
+## $handle = &chat'open_proc("command","arg1","arg2",...);
+## opens a /bin/sh on a pseudo-tty
+
+sub open_proc { ## public
+       local(@cmd) = @_;
+
+       *S = ++$next;
+       local(*TTY) = "__TTY" . time;
+       local($pty,$tty,$pty_handle) = &_getpty(S,TTY);
+
+       #local($pty,$tty,$pty_handle) = &getpty(S,TTY);
+       #$Tty = $tty;
+
+       die "Cannot find a new pty" unless defined $pty;
+       local($pid) = fork;
+       die "Cannot fork: $!" unless defined $pid;
+       unless ($pid) {
+               close STDIN; close STDOUT; close STDERR;
+               #close($pty_handle);
+               setpgrp(0,$$);
+               if (open(DEVTTY, "/dev/tty")) {
+                   ioctl(DEVTTY,0x20007471,0);         # XXX s/b &TIOCNOTTY
+                   close DEVTTY;
+               }
+               open(STDIN,"<&TTY");
+               open(STDOUT,">&TTY");
+               open(STDERR,">&STDOUT");
+               die "Oops" unless fileno(STDERR) == 2;  # sanity
+               close(S);
+
+               exec @cmd;
+               die "Cannot exec @cmd: $!";
+       }
+       close(TTY);
+       $PID{$next} = $pid;
+       $next; # return symbol for switcharound
+
+}
+
+# $S is the read-ahead buffer
+
+## $return = &chat'expect([$handle,] $timeout_time,
+##     $pat1, $body1, $pat2, $body2, ... )
+## $handle is from previous &chat'open_*().
+## $timeout_time is the time (either relative to the current time, or
+## absolute, ala time(2)) at which a timeout event occurs.
+## $pat1, $pat2, and so on are regexs which are matched against the input
+## stream.  If a match is found, the entire matched string is consumed,
+## and the corresponding body eval string is evaled.
+##
+## Each pat is a regular-expression (probably enclosed in single-quotes
+## in the invocation).  ^ and $ will work, respecting the current value of $*.
+## If pat is 'TIMEOUT', the body is executed if the timeout is exceeded.
+## If pat is 'EOF', the body is executed if the process exits before
+## the other patterns are seen.
+##
+## Pats are scanned in the order given, so later pats can contain
+## general defaults that won't be examined unless the earlier pats
+## have failed.
+##
+## The result of eval'ing body is returned as the result of
+## the invocation.  Recursive invocations are not thought
+## through, and may work only accidentally. :-)
+##
+## undef is returned if either a timeout or an eof occurs and no
+## corresponding body has been defined.
+## I/O errors of any sort are treated as eof.
+
+$nextsubname = "expectloop000000"; # used for subroutines
+
+sub expect { ## public
+       if ($_[0] =~ /$nextpat/) {
+               *S = shift;
+       }
+       local($endtime) = shift;
+
+       local($timeout,$eof) = (1,1);
+       local($caller) = caller;
+       local($rmask, $nfound, $timeleft, $thisbuf);
+       local($cases, $pattern, $action, $subname);
+       $endtime += time if $endtime < 600_000_000;
+
+       if (defined $S{"needs_accept"}) { # is it a listen socket?
+               local(*NS) = $S{"needs_accept"};
+               delete $S{"needs_accept"};
+               $S{"needs_close"} = *NS;
+               unless(accept(S,NS)) {
+                       ($!) = ($!, close(S), close(NS));
+                       return undef;
+               }
+               select((select(S), $| = 1)[0]);
+       }
+
+       # now see whether we need to create a new sub:
+
+       unless ($subname = $expect_subname{$caller,@_}) {
+               # nope.  make a new one:
+               $expect_subname{$caller,@_} = $subname = $nextsubname++;
+
+               $cases .= <<"EDQ"; # header is funny to make everything elsif's
+sub $subname {
+       LOOP: {
+               if (0) { ; }
+EDQ
+               while (@_) {
+                       ($pattern,$action) = splice(@_,0,2);
+                       if ($pattern =~ /^eof$/i) {
+                               $cases .= <<"EDQ";
+               elsif (\$eof) {
+                       package $caller;
+                       $action;
+               }
+EDQ
+                               $eof = 0;
+                       } elsif ($pattern =~ /^timeout$/i) {
+                       $cases .= <<"EDQ";
+               elsif (\$timeout) {
+                       package $caller;
+                       $action;
+               }
+EDQ
+                               $timeout = 0;
+                       } else {
+                               $pattern =~ s#/#\\/#g;
+                       $cases .= <<"EDQ";
+               elsif (\$S =~ /$pattern/) {
+                       \$S = \$';
+                       package $caller;
+                       $action;
+               }
+EDQ
+                       }
+               }
+               $cases .= <<"EDQ" if $eof;
+               elsif (\$eof) {
+                       undef;
+               }
+EDQ
+               $cases .= <<"EDQ" if $timeout;
+               elsif (\$timeout) {
+                       undef;
+               }
+EDQ
+               $cases .= <<'ESQ';
+               else {
+                       $rmask = "";
+                       vec($rmask,fileno(S),1) = 1;
+                       ($nfound, $rmask) =
+                               select($rmask, undef, undef, $endtime - time);
+                       if ($nfound) {
+                               $nread = sysread(S, $thisbuf, 1024);
+                               if ($nread > 0) {
+                                       $S .= $thisbuf;
+                               } else {
+                                       $eof++, redo LOOP; # any error is also eof
+                               }
+                       } else {
+                               $timeout++, redo LOOP; # timeout
+                       }
+                       redo LOOP;
+               }
+       }
+}
+ESQ
+               eval $cases; die "$cases:\n$@" if $@;
+       }
+       $eof = $timeout = 0;
+       do $subname();
+}
+
+## &chat'print([$handle,] @data)
+## $handle is from previous &chat'open().
+## like print $handle @data
+
+sub print { ## public
+       if ($_[0] =~ /$nextpat/) {
+               *S = shift;
+       }
+       print S @_;
+}
+
+## &chat'close([$handle,])
+## $handle is from previous &chat'open().
+## like close $handle
+
+sub close { ## public
+       local($pid);
+       if ($_[0] =~ /$nextpat/) {
+               $pid = $PID{$_[0]};
+               *S = shift;
+       } else {
+               $pid = $PID{$next};
+       }
+       close(S);
+       waitpid($pid,0);
+       if (defined $S{"needs_close"}) { # is it a listen socket?
+               local(*NS) = $S{"needs_close"};
+               delete $S{"needs_close"};
+               close(NS);
+       }
+}
+
+## @ready_handles = &chat'select($timeout, @handles)
+## select()'s the handles with a timeout value of $timeout seconds.
+## Returns an array of handles that are ready for I/O.
+## Both user handles and chat handles are supported (but beware of
+## stdio's buffering for user handles).
+
+sub select { ## public
+       local($timeout) = shift;
+       local(@handles) = @_;
+       local(%handlename) = ();
+       local(%ready) = ();
+       local($caller) = caller;
+       local($rmask) = "";
+       for (@handles) {
+               if (/$nextpat/o) { # one of ours... see if ready
+                       local(*SYM) = $_;
+                       if (length($SYM)) {
+                               $timeout = 0; # we have a winner
+                               $ready{$_}++;
+                       }
+                       $handlename{fileno($_)} = $_;
+               } else {
+                       $handlename{fileno(/'/ ? $_ : "$caller\'$_")} = $_;
+               }
+       }
+       for (sort keys %handlename) {
+               vec($rmask, $_, 1) = 1;
+       }
+       select($rmask, undef, undef, $timeout);
+       for (sort keys %handlename) {
+               $ready{$handlename{$_}}++ if vec($rmask,$_,1);
+       }
+       sort keys %ready;
+}
+
+# ($pty,$tty) = $chat'_getpty(PTY,TTY):
+# internal procedure to get the next available pty.
+# opens pty on handle PTY, and matching tty on handle TTY.
+# returns undef if can't find a pty.
+
+sub _getpty { ## private
+       local($_PTY,$_TTY) = @_;
+       $_PTY =~ s/^([^']+)$/(caller)[$[]."'".$1/e;
+       $_TTY =~ s/^([^']+)$/(caller)[$[]."'".$1/e;
+       local($pty,$tty);
+       for $bank (112..127) {
+               next unless -e sprintf("/dev/pty%c0", $bank);
+               for $unit (48..57) {
+                       $pty = sprintf("/dev/pty%c%c", $bank, $unit);
+                       open($_PTY,"+>$pty") || next;
+                       select((select($_PTY), $| = 1)[0]);
+                       ($tty = $pty) =~ s/pty/tty/;
+                       open($_TTY,"+>$tty") || next;
+                       select((select($_TTY), $| = 1)[0]);
+                       system "stty nl>$tty";
+                       return ($pty,$tty,$_PTY);
+               }
+       }
+       undef;
+}
+
+
+sub getpty {
+  local( $pty_handle, $tty_handle ) = @_;
+
+print "--------in getpty----------\n";
+  $pty_handle =~ s/^([^']+)$/(caller)[$[]."'".$1/e;
+  $pty_handle =~ s/^([^']+)$/(caller)[$[]."'".$1/e;
+
+  #$pty_handle = ++$next_handle;
+  chop( @ptys = `ls /dev/pty*` );
+
+  for $pty ( @ptys )
+  {
+    open($pty_handle,"+>$pty") || next;
+    select((select($pty_handle), $| = 1)[0]);
+    ($tty = $pty) =~ s/pty/tty/;
+
+    open($tty_handle,"+>$tty") || next;
+    select((select($tty_handle), $| = 1)[0]);
+    ($tty = $pty) =~ s/pty/tty/;
+
+    return ($pty, $tty, $pty_handle );
+  }
+  return undef;
+}
+
+
+
+# from: Randal L. Schwartz
+
+# Usage:
+#
+# ($chathandle = &chat'open_proc("/bin/sh")) || die "cannot open shell";
+# system("stty cbreak raw -echo >/dev/tty\n");
+# &chat'interact($chathandle);
+# &chat'close($chathandle);
+# system("stty -cbreak -raw echo >/dev/tty\n");
+
+sub interact
+{
+  local( $chathandle ) = @_;
+
+  &chat'print($chathandle, "stty sane\n");
+  select(STDOUT) ; $| = 1; # unbuffer STDOUT
+
+  #print "tty=$Tty,whoami=",`whoami`,"\n";
+  #&change_utmp( "", $Tty, "eric", "", time() );
+
+  {
+    @ready = &chat'select(30, STDIN,$chathandle);
+    print "after select, ready=",join(",",@ready),"\n";
+    #(warn "[waiting]"), redo unless @ready;
+    if (grep($_ eq $chathandle, @ready)) {
+           print "checking $chathandle\n";
+           last unless $text = &chat'expect($chathandle,0,'[\s\S]+','$&');
+           print "$chathandle OK\n";
+           print "got=($text)";
+           #print $text;
+    }
+    if (grep($_ eq STDIN, @ready)) {
+           print "checking STDIN\n";
+           last unless sysread(STDIN,$buf,1024) > 0;
+           print "STDIN OK\n";
+           &chat'print($chathandle,$buf);
+    }
+    redo;
+  }
+  #&change_utmp( $Tty, "$Tty", "", "", 0 );
+  print "leaving interact, \$!=$!\n";
+}
+
+## $handle = &chat'open_duphandle(handle);
+## duplicates an input file handle to conform to chat format
+
+sub open_duphandle { ## public
+    *S = ++$next;
+    open(S,"<&$_[0]");
+    $next; # return symbol for switcharound
+}
+
+#Here is an example which uses this routine.
+#
+#    # The following lines makes stdin unbuffered
+#    
+#    $BSD = -f '/vmunix';
+#    
+#    if ($BSD) {
+#        system "stty cbreak </dev/tty >/dev/tty 2>&1";
+#    }
+#    else {
+#        system "stty", '-icanon';
+#        system "stty", 'eol', '^A';
+#    }
+#
+#    require 'mychat2.pl';
+#    
+#    &chat'open_duphandle(STDIN);
+#    
+#    print 
+#    &chat'expect(3,
+#      '[A-Z]', '" :-)"',
+#      '.', '" :-("',
+#      TIMEOUT,  '"-o-"',
+#      EOF, '"\$\$"'),
+#    "\n";
+
+
+1;
+
+
index 5427494..03dbbcd 100644 (file)
@@ -8,7 +8,7 @@ sub unctrl {
 }
 sub main'dumpvar {
     ($package,@vars) = @_;
-    local(*stab) = eval("*_$package");
+    local(*stab) = *{"::_$package"};
     while (($key,$val) = each(%stab)) {
        {
            next if @vars && !grep($key eq $_,@vars);
index bda9fe0..c38dafd 100644 (file)
--- a/make.out
+++ b/make.out
@@ -1,5 +1,9 @@
 make: Warning: Both `makefile' and `Makefile' exists
-./configpm
-ld.so: Undefined symbol: _dbminit
-*** Error code 127
-make: Fatal error: Command failed for target `lib/Config.pm'
+test -f miniperl || make miniperl
+./miniperl ext/xsubpp ext/posix/POSIX.xs >tmp
+mv tmp POSIX.c
+`sh  cflags POSIX.o`  POSIX.c
+         CCCMD =  cc -c -DDEBUGGING -g  
+test -d lib/auto/POSIX || mkdir lib/auto/POSIX
+ld  -o lib/auto/POSIX/POSIX.so POSIX.o -lm
+cc    -o perl perlmain.o perl.o av.o scope.o op.o doop.o doio.o dump.o hv.o malloc.o mg.o perly.o pp.o regcomp.o regexec.o gv.o sv.o taint.o toke.o util.o deb.o run.o dl_sunos.o  -ldbm -ldl -lm -lposix
index 11e4a1f..6aec6df 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $RCSfile: makedepend.SH,v 28453Revision: 4.1 28453Date: 92/08/07 18:24:20 $
+# $RCSfile: makedepend.SH,v 3314Revision: 4.1 3314Date: 92/08/07 18:24:20 $
 #
 # $Log:        makedepend.SH,v $
 # Revision 4.1  92/08/07  18:24:20  lwall
 
 export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh $0; kill $$)
 
-cat='cat'
+cat='/bin/cat'
 cppflags=' -DDEBUGGING'
-cp='cp'
-cppstdin='/tmp_mnt/vol/src/local/lwall/perl5/cppstdin'
+cp='/bin/cp'
+cppstdin='/tmp_mnt/net/vaccine/export/src/local/lwall/perl5/cppstdin'
 cppminus=''
-echo='echo'
-egrep='egrep'
-expr='expr'
-mv='mv'
-rm='rm'
-sed='sed'
-sort='sort'
+echo='/bin/echo'
+egrep='/bin/egrep'
+expr='/bin/expr'
+mv='/bin/mv'
+rm='/bin/rm'
+sed='/bin/sed'
+sort='/bin/sort'
 test='test'
-tr='tr'
-uniq='uniq'
+tr='/bin/tr'
+uniq='/bin/uniq'
 
 PATH="$PATH:."
 export PATH
@@ -66,6 +66,11 @@ case "$defrule" in
 '') defrule='$(CC) -c $(CFLAGS)' ;;
 esac
 
+: Create files in UU directory to avoid problems with long filenames
+: on systems with 14 character filename limits so file.c.c and file.c
+: might be identical
+$test -d UU || mkdir UU
+
 make clist || ($echo "Searching for .c files..."; \
        $echo *.c | $tr ' ' '\012' | $egrep -v '\*' >.clist)
 for file in `$cat .clist`; do
@@ -87,8 +92,8 @@ for file in `$cat .clist`; do
        -e 's|/\*.*$||' \
        -e 's|\\$||' \
        -e p \
-       -e '}' ) >$file.c
-    $cppstdin $finc -I/usr/local/include -I. $cppflags $cppminus <$file.c |
+       -e '}' ) >UU/$file.c
+    $cppstdin $finc -I/usr/local/include -I. $cppflags $cppminus <UU/$file.c |
     $sed \
        -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
        -e 's/^[         ]*#[    ]*line/#/' \
@@ -146,5 +151,5 @@ $cp $mf $mf.old
 $cp $mf.new $mf
 $rm $mf.new
 $echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
-$rm -f .deptmp `sed 's/\.c/.c.c/' .clist` .shlist .clist .hlist .hsed
+$rm -rf .deptmp UU .shlist .clist .hlist .hsed
 
index d474b72..01963f8 100755 (executable)
@@ -86,6 +86,11 @@ case "$defrule" in
 '') defrule='$(CC) -c $(CFLAGS)' ;;
 esac
 
+: Create files in UU directory to avoid problems with long filenames
+: on systems with 14 character filename limits so file.c.c and file.c
+: might be identical
+$test -d UU || mkdir UU
+
 make clist || ($echo "Searching for .c files..."; \
        $echo *.c | $tr ' ' '\012' | $egrep -v '\*' >.clist)
 for file in `$cat .clist`; do
@@ -107,8 +112,8 @@ for file in `$cat .clist`; do
        -e 's|/\*.*$||' \
        -e 's|\\$||' \
        -e p \
-       -e '}' ) >$file.c
-    $cppstdin $finc -I/usr/local/include -I. $cppflags $cppminus <$file.c |
+       -e '}' ) >UU/$file.c
+    $cppstdin $finc -I/usr/local/include -I. $cppflags $cppminus <UU/$file.c |
     $sed \
        -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
        -e 's/^[         ]*#[    ]*line/#/' \
@@ -166,7 +171,7 @@ $cp $mf $mf.old
 $cp $mf.new $mf
 $rm $mf.new
 $echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
-$rm -f .deptmp `sed 's/\.c/.c.c/' .clist` .shlist .clist .hlist .hsed
+$rm -rf .deptmp UU .shlist .clist .hlist .hsed
 
 !NO!SUBS!
 $eunicefix makedepend
diff --git a/makedir b/makedir
index 343c78d..250bdd5 100755 (executable)
--- a/makedir
+++ b/makedir
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $RCSfile: makedir.SH,v 28453Revision: 4.1 28453Date: 92/08/07 18:24:23 $
+# $RCSfile: makedir.SH,v 3314Revision: 4.1 3314Date: 92/08/07 18:24:23 $
 # 
 # $Log:        makedir.SH,v $
 # Revision 4.1  92/08/07  18:24:23  lwall
@@ -16,7 +16,7 @@ export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed mysel
 
 case $# in
   0)
-    echo "makedir pathname filenameflag"
+    /bin/echo "makedir pathname filenameflag"
     exit 1
     ;;
 esac
@@ -29,7 +29,7 @@ esac
 
 : strip last component if it is to be a filename
 case X$2 in
-  X1) set `echo $1 | sed 's:\(.*\)/[^/]*$:\1:'` ;;
+  X1) set `/bin/echo $1 | /bin/sed 's:\(.*\)/[^/]*$:\1:'` ;;
   *)  set $1 ;;
 esac
 
@@ -43,7 +43,7 @@ while true ; do
     case $1 in
     */*)
        list="$1 $list"
-       set `echo $1 | sed 's:\(.*\)/:\1 :'`
+       set `echo $1 | /bin/sed 's:\(.*\)/:\1 :'`
        ;;
     *)
        break
@@ -54,5 +54,5 @@ done
 set $list
 
 for dir do
-    mkdir $dir >/dev/null 2>&1
+    /bin/mkdir $dir >/dev/null 2>&1
 done
index e5c6310..98bb363 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,4 +1,8 @@
-# : Makefile.SH,v 15738Revision: 4.1 15738Date: 92/08/07 17:18:08 $
+# .SH,v $Revision: 4.1 $Date: 92/08/07 17:18:08 $
+# This file is derived from Makefile.SH.  Any changes made here will
+# be lost the next time you run Configure.
+#  Makefile is used to generate makefile.  The only difference
+#  is that makefile has the dependencies filled in at the end.
 #
 # $Log:        Makefile.SH,v $
 # Revision 4.1  92/08/07  17:18:08  lwall
@@ -36,14 +40,24 @@ mansrc = /usr/local/man/man1
 manext = 1
 LDFLAGS = 
 CLDFLAGS = 
+
 SMALL = 
 LARGE =  
 mallocsrc = malloc.c
 mallocobj = malloc.o
-dlsrc = dl.c
-dlobj = dl.o
-SLN = ln -s
+dlsrc = dl_sunos.c
+dlobj = dl_sunos.o
+dldir = ext/dl
+LNS = /bin/ln -s
 RMS = rm -f
+ranlib = /usr/bin/ranlib
+
+# The following are used to build and install shared libraries for
+# dynamic loading.
+LDDLFLAGS = 
+CCDLFLAGS = 
+CCCDLFLAGS = 
+SHLIBSUFFIX = .so
 
 libs = -ldbm -ldl -lm -lposix 
 
@@ -51,7 +65,7 @@ public = perl
 
 shellflags = 
 
-# To use an alternate make, set  in config.sh.
+## To use an alternate make, set  in config.sh.
 MAKE = make
 
 CCCMD = `sh $(shellflags) cflags $@`
@@ -64,7 +78,7 @@ manpages = perl.man h2ph.man
 
 util =
 
-sh = Makefile.SH makedepend.SH h2ph.SH
+sh = Makefile.SH cflags.SH embed_h.SH makedepend.SH makedir.SH writemain.SH
 
 h1 = EXTERN.h INTERN.h av.h cop.h config.h embed.h form.h handy.h
 h2 = hv.h op.h opcode.h perl.h regcomp.h regexp.h gv.h sv.h util.h
@@ -79,19 +93,19 @@ c1 = av.c scope.c op.c doop.c doio.c dump.c hv.c
 c2 = $(mallocsrc) mg.c perly.c pp.c regcomp.c regexec.c
 c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c
 
-c = $(c1) $(c2) $(c3)
+c = $(c1) $(c2) $(c3) $(dlsrc) miniperlmain.c perlmain.c
 
 s1 = av.c scope.c op.c doop.c doio.c dump.c hv.c
-s2 = $(mallocobj) mg.c perly.c pp.c regcomp.c regexec.c
+s2 = $(mallocsrc) mg.c perly.c pp.c regcomp.c regexec.c
 s3 = gv.c sv.c taint.c toke.c util.c deb.c run.c perly.c
 
-saber = $(s1) $(s2) $(s3)
+saber = $(s1) $(s2) $(s3) $(dlsrc)
 
 obj1 = av.o scope.o op.o doop.o doio.o dump.o hv.o
 obj2 = $(mallocobj) mg.o perly.o pp.o regcomp.o regexec.o
 obj3 = gv.o sv.o taint.o toke.o util.o deb.o run.o
 
-obj = $(obj1) $(obj2) $(obj3) $(dlobj)
+obj = $(obj1) $(obj2) $(obj3)
 
 lintflags = -hbvxac
 
@@ -100,85 +114,105 @@ addedbyconf = Makefile.old bsd eunice filexp loc pdp11 usg v7
 # grrr
 SHELL = /bin/sh
 
-.SUFFIXES: .x
-
 .c.o:
        $(CCCMD) $*.c
 
-.x.c:
-       sh writemain $*.x >$*.c
-
 all: miniperl perl lib/Config.pm
 
 #all: $(public) $(private) $(util) $(scripts)
 #      cd x2p; $(MAKE) all
 #      touch all
 
+# Phony target to force checking subdirectories.
+FORCE:
+
+
+$(dlsrc): $(dldir)/$(dlsrc)
+       cp $(dldir)/$(dlsrc) $(dlsrc)
+
+$(dlobj): $(dlsrc)
+       $(CCCMD) $(dlsrc)
+
+
 # NDBM_File extension
+NDBM_File.o: NDBM_File.c
+       $(CCCMD) $(CCCDLFLAGS) $*.c
+
 NDBM_File.c:   ext/dbm/NDBM_File.xs ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp ext/dbm/NDBM_File.xs >tmp
+       ./miniperl ext/xsubpp ext/dbm/NDBM_File.xs >tmp
        mv tmp NDBM_File.c
 
-NDBM_File.o: NDBM_File.c
+lib/auto/NDBM_File/NDBM_File$(SHLIBSUFFIX): NDBM_File.o 
+       test -d lib/auto/NDBM_File || mkdir lib/auto/NDBM_File
+       ld $(LDDLFLAGS) -o $@ NDBM_File.o 
 
 # ODBM_File extension
-ODBM_File.c:   ext/dbm/ODBM_File.xs ext/xsubpp ext/typemap
-       test -f miniperl || make miniperl
-       ext/xsubpp ext/dbm/ODBM_File.xs >tmp
-       mv tmp ODBM_File.c
-
 ODBM_File.o: ODBM_File.c
+       $(CCCMD) $(CCCDLFLAGS) $*.c
 
-# GDBM_File extension
-GDBM_File.c:   ext/dbm/GDBM_File.xs ext/xsubpp ext/typemap
+ODBM_File.c:   ext/dbm/ODBM_File.xs ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp ext/dbm/GDBM_File.xs >tmp
-       mv tmp GDBM_File.c
+       ./miniperl ext/xsubpp ext/dbm/ODBM_File.xs >tmp
+       mv tmp ODBM_File.c
 
-GDBM_File.o: GDBM_File.c
+lib/auto/ODBM_File/ODBM_File$(SHLIBSUFFIX): ODBM_File.o 
+       test -d lib/auto/ODBM_File || mkdir lib/auto/ODBM_File
+       ld $(LDDLFLAGS) -o $@ ODBM_File.o 
 
 # SDBM_File extension
+SDBM_File.o: SDBM_File.c
+       $(CCCMD) $(CCCDLFLAGS) $*.c
+
 SDBM_File.c:   ext/dbm/SDBM_File.xs ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp ext/dbm/SDBM_File.xs >tmp
+       ./miniperl ext/xsubpp ext/dbm/SDBM_File.xs >tmp
        mv tmp SDBM_File.c
 
-SDBM_File.o: SDBM_File.c
-
-lib/auto/SDBM_File/SDBM_File.so: SDBM_File.o ext/dbm/sdbm/libsdbm.a
-       @- mkdir lib/auto/SDBM_File 2>/dev/null
-       ld -o lib/auto/SDBM_File/SDBM_File.so SDBM_File.o ext/dbm/sdbm/libsdbm.a
-
-ext/dbm/sdbm/libsdbm.a: ext/dbm/sdbm/sdbm.c ext/dbm/sdbm/sdbm.h
-       cd ext/dbm/sdbm; $(MAKE) sdbm
+lib/auto/SDBM_File/SDBM_File$(SHLIBSUFFIX): SDBM_File.o ext/dbm/sdbm/libsdbm.a
+       test -d lib/auto/SDBM_File || mkdir lib/auto/SDBM_File
+       ld $(LDDLFLAGS) -o $@ SDBM_File.o ext/dbm/sdbm/libsdbm.a
 
 # POSIX extension
+POSIX.o: POSIX.c
+       $(CCCMD) $(CCCDLFLAGS) $*.c
+
 POSIX.c:       ext/posix/POSIX.xs ext/xsubpp ext/typemap
        test -f miniperl || make miniperl
-       ext/xsubpp ext/posix/POSIX.xs >tmp
+       ./miniperl ext/xsubpp ext/posix/POSIX.xs >tmp
        mv tmp POSIX.c
 
-POSIX.o: POSIX.c
-lib/auto/POSIX/POSIX.so: POSIX.o ext/dbm/sdbm/libsdbm.a
-       @- mkdir lib/auto/POSIX 2>/dev/null
-       ld -o lib/auto/POSIX/POSIX.so POSIX.o ext/dbm/sdbm/libsdbm.a
-extobjs=  ext/dbm/NDBM_File.xs.o ext/dbm/ODBM_File.xs.o ext/dbm/GDBM_File.xs.o ext/dbm/SDBM_File.xs.o ext/posix/POSIX.xs.o
+lib/auto/POSIX/POSIX$(SHLIBSUFFIX): POSIX.o 
+       test -d lib/auto/POSIX || mkdir lib/auto/POSIX
+       ld $(LDDLFLAGS) -o $@ POSIX.o -lm
+
+# List of extensions (used by writemain) to generate perlmain.c
+ext=  NDBM_File ODBM_File SDBM_File POSIX
+extsrc=  NDBM_File.c ODBM_File.c SDBM_File.c POSIX.c
+# Extension dependencies.
+extdep=  lib/auto/NDBM_File/NDBM_File$(SHLIBSUFFIX) lib/auto/ODBM_File/ODBM_File$(SHLIBSUFFIX) lib/auto/SDBM_File/SDBM_File$(SHLIBSUFFIX) lib/auto/POSIX/POSIX$(SHLIBSUFFIX)
+# How to include extensions in linking command
+extobj= 
+
+ext/dbm/sdbm/libsdbm.a: ext/dbm/sdbm/sdbm.h ext/dbm/sdbm/sdbm.c
+       cd ext/dbm/sdbm; $(MAKE) -f Makefile libsdbm.a
+
 # The $& notation tells Sequent machines that it can do a parallel make,
 # and is harmless otherwise.
 
-miniperlmain.c: miniperlmain.x
-miniperlmain.o: miniperlmain.c
 miniperl: $& miniperlmain.o perl.o $(obj)
        $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain.o perl.o $(obj) $(libs)
 
-perlmain.c: perlmain.x
+perlmain.c: miniperlmain.c
+       sh writemain $(ext) > perlmain.c
+
 perlmain.o: perlmain.c
-perl: $& perlmain.o perl.o $(obj) NDBM_File.o ODBM_File.o POSIX.o
-       $(CC) $(LARGE) $(CLDFLAGS) -o perl perlmain.o perl.o $(obj) NDBM_File.o ODBM_File.o POSIX.o $(libs)
+
+perl: $& perlmain.o perl.o $(obj) $(dlobj) $(extdep)
+       $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain.o perl.o $(obj) $(dlobj) $(extobj) $(libs)
 
 libperl.rlb: libperl.a
-       ranlib libperl.a
+       $(ranlib) libperl.a
        touch libperl.rlb
 
 libperl.a: $& perl.o $(obj)
@@ -189,11 +223,11 @@ libperl.a: $& perl.o $(obj)
 # checks as well as the special code to validate that the script in question
 # has been invoked correctly.
 
-suidperl: $& sperl.o main.o libperl.rlb
-       $(CC) $(LARGE) $(CLDFLAGS) sperl.o main.o libperl.a $(libs) -o suidperl
+suidperl: $& sperl.o perlmain.o libperl.rlb
+       $(CC) $(LARGE) $(CLDFLAGS) sperl.o perlmain.o libperl.a $(libs) -o suidperl
 
-lib/Config.pm: config.sh
-       ./configpm
+lib/Config.pm: config.sh miniperl
+       ./miniperl configpm
 
 saber: $(saber)
        # load $(saber)
@@ -201,21 +235,16 @@ saber: $(saber)
 
 sperl.o: perl.c perly.h patchlevel.h $(h)
        $(RMS) sperl.c
-       $(SLN) perl.c sperl.c
+       $(LNS) perl.c sperl.c
        $(CCCMD) -DIAMSUID sperl.c
        $(RMS) sperl.c
 
-dl.o: ext/dl/dl.c
-       cp ext/dl/dl.c dl.c
-       $(CC) -c dl.c
-
-    
 perly.h: perly.c
        @ echo Dummy dependency for dumb parallel make
        touch perly.h
 
 opcode.h: opcode.pl
-       - opcode.pl
+       - perl opcode.pl
 
 embed.h: embed_h.SH global.sym interp.sym
        sh embed_h.SH
@@ -234,14 +263,21 @@ install: all
        ./perl installperl
 
 clean:
-       rm -f *.o all perl taintperl suidperl miniperl
+       rm -f *.o all perl miniperl
+       rm -f POSIX.c ?DBM_File.c perlmain.c
+       rm -f ext/dbm/sdbm/libsdbm.a
+       cd ext/dbm/sdbm; $(MAKE) -f Makefile clean
        cd x2p; $(MAKE) clean
 
 realclean: clean
        cd x2p; $(MAKE) realclean
+       cd ext/dbm/sdbm; $(MAKE) -f Makefile realclean
        rm -f *.orig */*.orig *~ */*~ core $(addedbyconf) h2ph h2ph.man
-       rm -f perly.h t/perl Makefile config.h makedepend makedir
-       rm -f makefile x2p/Makefile x2p/makefile cflags x2p/cflags
+       rm -f Makefile cflags embed_h makedepend makedir writemain
+       rm -f config.h t/perl makefile makefile.old cflags 
+       rm -rf lib/auto/?DBM_File lib/auto/POSIX
+       rm -f x2p/Makefile x2p/makefile x2p/makefile.old x2p/cflags
+       rm -f lib/Config.pm
        rm -f c2ph pstruct
 
 # The following lint has practically everything turned on.  Unfortunately,
@@ -258,17 +294,17 @@ depend: makedepend
        - test -s perly.h || /bin/rm -f perly.h
        cd x2p; $(MAKE) depend
 
-test: perl
+test: perl lib/Config.pm
        - cd t && chmod +x TEST */*.t
-       - cd t && (rm -f perl; $(SLN) ../perl perl) && ./perl TEST </dev/tty
+       - cd t && (rm -f perl; $(LNS) ../perl perl) && ./perl TEST </dev/tty
 
-clist:
+clist: $(c)
        echo $(c) | tr ' ' '\012' >.clist
 
-hlist:
+hlist:  $(h)
        echo $(h) | tr ' ' '\012' >.hlist
 
-shlist:
+shlist: $(sh)
        echo $(sh) | tr ' ' '\012' >.shlist
 
 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
@@ -1196,8 +1232,8 @@ util.o: /usr/include/sys/ttycom.h
 util.o: /usr/include/sys/ttydev.h
 util.o: /usr/include/sys/types.h
 util.o: /usr/include/time.h
+util.o: /usr/include/unistd.h
 util.o: /usr/include/varargs.h
-util.o: /usr/include/vfork.h
 util.o: /usr/include/vm/faultcode.h
 util.o: EXTERN.h
 util.o: av.h
@@ -1323,7 +1359,165 @@ run.o: scope.h
 run.o: sv.h
 run.o: unixish.h
 run.o: util.h
+dl_sunos.o: /usr/include/ctype.h
+dl_sunos.o: /usr/include/dirent.h
+dl_sunos.o: /usr/include/dlfcn.h
+dl_sunos.o: /usr/include/errno.h
+dl_sunos.o: /usr/include/machine/param.h
+dl_sunos.o: /usr/include/machine/setjmp.h
+dl_sunos.o: /usr/include/netinet/in.h
+dl_sunos.o: /usr/include/setjmp.h
+dl_sunos.o: /usr/include/stdio.h
+dl_sunos.o: /usr/include/sys/dirent.h
+dl_sunos.o: /usr/include/sys/errno.h
+dl_sunos.o: /usr/include/sys/filio.h
+dl_sunos.o: /usr/include/sys/ioccom.h
+dl_sunos.o: /usr/include/sys/ioctl.h
+dl_sunos.o: /usr/include/sys/param.h
+dl_sunos.o: /usr/include/sys/signal.h
+dl_sunos.o: /usr/include/sys/sockio.h
+dl_sunos.o: /usr/include/sys/stat.h
+dl_sunos.o: /usr/include/sys/stdtypes.h
+dl_sunos.o: /usr/include/sys/sysmacros.h
+dl_sunos.o: /usr/include/sys/time.h
+dl_sunos.o: /usr/include/sys/times.h
+dl_sunos.o: /usr/include/sys/ttold.h
+dl_sunos.o: /usr/include/sys/ttychars.h
+dl_sunos.o: /usr/include/sys/ttycom.h
+dl_sunos.o: /usr/include/sys/ttydev.h
+dl_sunos.o: /usr/include/sys/types.h
+dl_sunos.o: /usr/include/time.h
+dl_sunos.o: /usr/include/varargs.h
+dl_sunos.o: /usr/include/vm/faultcode.h
+dl_sunos.o: EXTERN.h
+dl_sunos.o: XSUB.h
+dl_sunos.o: av.h
+dl_sunos.o: config.h
+dl_sunos.o: cop.h
+dl_sunos.o: cv.h
+dl_sunos.o: dl_sunos.c
+dl_sunos.o: embed.h
+dl_sunos.o: form.h
+dl_sunos.o: gv.h
+dl_sunos.o: handy.h
+dl_sunos.o: hv.h
+dl_sunos.o: mg.h
+dl_sunos.o: op.h
+dl_sunos.o: opcode.h
+dl_sunos.o: perl.h
+dl_sunos.o: pp.h
+dl_sunos.o: proto.h
+dl_sunos.o: regexp.h
+dl_sunos.o: scope.h
+dl_sunos.o: sv.h
+dl_sunos.o: unixish.h
+dl_sunos.o: util.h
+miniperlmain.o: /usr/include/ctype.h
+miniperlmain.o: /usr/include/dirent.h
+miniperlmain.o: /usr/include/errno.h
+miniperlmain.o: /usr/include/machine/param.h
+miniperlmain.o: /usr/include/machine/setjmp.h
+miniperlmain.o: /usr/include/netinet/in.h
+miniperlmain.o: /usr/include/setjmp.h
+miniperlmain.o: /usr/include/stdio.h
+miniperlmain.o: /usr/include/sys/dirent.h
+miniperlmain.o: /usr/include/sys/errno.h
+miniperlmain.o: /usr/include/sys/filio.h
+miniperlmain.o: /usr/include/sys/ioccom.h
+miniperlmain.o: /usr/include/sys/ioctl.h
+miniperlmain.o: /usr/include/sys/param.h
+miniperlmain.o: /usr/include/sys/signal.h
+miniperlmain.o: /usr/include/sys/sockio.h
+miniperlmain.o: /usr/include/sys/stat.h
+miniperlmain.o: /usr/include/sys/stdtypes.h
+miniperlmain.o: /usr/include/sys/sysmacros.h
+miniperlmain.o: /usr/include/sys/time.h
+miniperlmain.o: /usr/include/sys/times.h
+miniperlmain.o: /usr/include/sys/ttold.h
+miniperlmain.o: /usr/include/sys/ttychars.h
+miniperlmain.o: /usr/include/sys/ttycom.h
+miniperlmain.o: /usr/include/sys/ttydev.h
+miniperlmain.o: /usr/include/sys/types.h
+miniperlmain.o: /usr/include/time.h
+miniperlmain.o: /usr/include/varargs.h
+miniperlmain.o: /usr/include/vm/faultcode.h
+miniperlmain.o: INTERN.h
+miniperlmain.o: av.h
+miniperlmain.o: config.h
+miniperlmain.o: cop.h
+miniperlmain.o: cv.h
+miniperlmain.o: embed.h
+miniperlmain.o: form.h
+miniperlmain.o: gv.h
+miniperlmain.o: handy.h
+miniperlmain.o: hv.h
+miniperlmain.o: mg.h
+miniperlmain.o: miniperlmain.c
+miniperlmain.o: op.h
+miniperlmain.o: opcode.h
+miniperlmain.o: perl.h
+miniperlmain.o: pp.h
+miniperlmain.o: proto.h
+miniperlmain.o: regexp.h
+miniperlmain.o: scope.h
+miniperlmain.o: sv.h
+miniperlmain.o: unixish.h
+miniperlmain.o: util.h
+perlmain.o: /usr/include/ctype.h
+perlmain.o: /usr/include/dirent.h
+perlmain.o: /usr/include/errno.h
+perlmain.o: /usr/include/machine/param.h
+perlmain.o: /usr/include/machine/setjmp.h
+perlmain.o: /usr/include/netinet/in.h
+perlmain.o: /usr/include/setjmp.h
+perlmain.o: /usr/include/stdio.h
+perlmain.o: /usr/include/sys/dirent.h
+perlmain.o: /usr/include/sys/errno.h
+perlmain.o: /usr/include/sys/filio.h
+perlmain.o: /usr/include/sys/ioccom.h
+perlmain.o: /usr/include/sys/ioctl.h
+perlmain.o: /usr/include/sys/param.h
+perlmain.o: /usr/include/sys/signal.h
+perlmain.o: /usr/include/sys/sockio.h
+perlmain.o: /usr/include/sys/stat.h
+perlmain.o: /usr/include/sys/stdtypes.h
+perlmain.o: /usr/include/sys/sysmacros.h
+perlmain.o: /usr/include/sys/time.h
+perlmain.o: /usr/include/sys/times.h
+perlmain.o: /usr/include/sys/ttold.h
+perlmain.o: /usr/include/sys/ttychars.h
+perlmain.o: /usr/include/sys/ttycom.h
+perlmain.o: /usr/include/sys/ttydev.h
+perlmain.o: /usr/include/sys/types.h
+perlmain.o: /usr/include/time.h
+perlmain.o: /usr/include/varargs.h
+perlmain.o: /usr/include/vm/faultcode.h
+perlmain.o: INTERN.h
+perlmain.o: av.h
+perlmain.o: config.h
+perlmain.o: cop.h
+perlmain.o: cv.h
+perlmain.o: embed.h
+perlmain.o: form.h
+perlmain.o: gv.h
+perlmain.o: handy.h
+perlmain.o: hv.h
+perlmain.o: mg.h
+perlmain.o: op.h
+perlmain.o: opcode.h
+perlmain.o: perl.h
+perlmain.o: perlmain.c
+perlmain.o: pp.h
+perlmain.o: proto.h
+perlmain.o: regexp.h
+perlmain.o: scope.h
+perlmain.o: sv.h
+perlmain.o: unixish.h
+perlmain.o: util.h
 Makefile: Makefile.SH config.sh ; /bin/sh Makefile.SH
+cflags: cflags.SH config.sh ; /bin/sh cflags.SH
+embed_h: embed_h.SH config.sh ; /bin/sh embed_h.SH
 makedepend: makedepend.SH config.sh ; /bin/sh makedepend.SH
-h2ph: h2ph.SH config.sh ; /bin/sh h2ph.SH
+makedir: makedir.SH config.sh ; /bin/sh makedir.SH
+writemain: writemain.SH config.sh ; /bin/sh writemain.SH
 # WARNING: Put nothing here or make depend will gobble it up!
diff --git a/makefile.lib b/makefile.lib
deleted file mode 100644 (file)
index f499425..0000000
+++ /dev/null
@@ -1,1409 +0,0 @@
-# : Makefile.SH,v 303Revision: 4.0.1.4 303Date: 92/06/08 11:40:43 $
-#
-# $Log:        Makefile.SH,v $
-# Revision 4.0.1.4  92/06/08  11:40:43  lwall
-# patch20: cray didn't give enough memory to /bin/sh
-# patch20: various and sundry fixes
-# 
-# Revision 4.0.1.3  91/11/05  15:48:11  lwall
-# patch11: saberized perl
-# patch11: added support for dbz
-# 
-# Revision 4.0.1.2  91/06/07  10:14:43  lwall
-# patch4: cflags now emits entire cc command except for the filename
-# patch4: alternate make programs are now semi-supported
-# patch4: uperl.o no longer tries to link in libraries prematurely
-# patch4: installperl now installs x2p stuff too
-# 
-# Revision 4.0.1.1  91/04/11  17:30:39  lwall
-# patch1: C flags are now settable on a per-file basis
-# 
-# Revision 4.0  91/03/20  00:58:54  lwall
-# 4.0 baseline.
-# 
-# 
-
-CC = cc
-YACC = /bin/yacc
-bin = /usr/local/bin
-scriptdir = /usr/local/bin
-privlib = /usr/local/lib/perl
-mansrc = /usr/man/manl
-manext = l
-LDFLAGS = 
-CLDFLAGS = 
-SMALL = 
-LARGE =  
-mallocsrc = malloc.c
-mallocobj = malloc.o
-SLN = ln -s
-RMS = rm -f
-LIB = .
-
-libs = -ldbm -lm -lposix 
-
-public = perl taintperl 
-
-shellflags = 
-
-# To use an alternate make, set  in config.sh.
-MAKE = make
-
-
-CCCMD = `sh $(shellflags) cflags $@`
-
-private = 
-
-scripts = h2ph
-
-manpages = perl.man h2ph.man
-
-util =
-
-sh = Makefile.SH makedepend.SH h2ph.SH
-
-h1 = EXTERN.h INTERN.h arg.h array.h cmd.h config.h embed.h form.h handy.h
-h2 = hash.h perl.h regcomp.h regexp.h spat.h stab.h str.h util.h
-
-h = $(h1) $(h2)
-
-c1 = array.c cmd.c cons.c consarg.c doarg.c doio.c dolist.c dump.c
-c2 = eval.c form.c hash.c main.c $(mallocsrc) perl.c pp.c regcomp.c regexec.c
-c3 = stab.c str.c toke.c util.c usersub.c
-
-c = $(c1) $(c2) $(c3)
-
-s1 = array.c cmd.c cons.c consarg.c doarg.c doio.c dolist.c dump.c
-s2 = eval.c form.c hash.c main.c perl.c pp.c regcomp.c regexec.c
-s3 = stab.c str.c toke.c util.c usersub.c perly.c
-
-saber = $(s1) $(s2) $(s3)
-
-obj1 = array.o cmd.o cons.o consarg.o doarg.o doio.o dolist.o dump.o
-obj2 = eval.o form.o $(mallocobj) perl.o pp.o regcomp.o regexec.o
-obj3 = stab.o str.o toke.o util.o
-
-obj = $(obj1) $(obj2) $(obj3)
-
-tobj1 = tarray.o tcmd.o tcons.o tconsarg.o tdoarg.o tdoio.o tdolist.o tdump.o
-tobj2 = teval.o tform.o thash.o $(mallocobj) tpp.o tregcomp.o tregexec.o
-tobj3 = tstab.o tstr.o ttoke.o tutil.o
-
-tobj = $(tobj1) $(tobj2) $(tobj3)
-
-lintflags = -hbvxac
-
-addedbyconf = Makefile.old bsd eunice filexp loc pdp11 usg v7
-
-# grrr
-SHELL = /bin/sh
-
-.c.o:
-       $(CCCMD) $*.c
-
-all: libperl.rlb
-
-#all: $(public) $(private) $(util) uperl.o $(scripts)
-#      cd x2p; $(MAKE) all
-#      touch all
-
-# This is the standard version that contains no "taint" checks and is
-# used for all scripts that aren't set-id or running under something set-id.
-# The $& notation is tells Sequent machines that it can do a parallel make,
-# and is harmless otherwise.
-
-#perl: $& main.o $(obj) hash.o perly.o usersub.o
-#      $(CC) $(LARGE) $(CLDFLAGS) main.o $(obj) hash.o perly.o usersub.o \
-#          $(libs) -o perl
-#      echo '\a'
-
-perl: $& main.o libperl.rlb
-       $(CC) $(LARGE) $(CLDFLAGS) main.o $(LIB)/libperl.a $(libs) -o perl
-       echo '\a'
-
-libperl.rlb: $(LIB)/libperl.a
-       ranlib $(LIB)/libperl.a
-       touch libperl.rlb
-
-$(LIB)/libperl.a: $& perly.o perl.o $(obj) hash.o usersub.o
-       ar rcuv $(LIB)/libperl.a $(obj) hash.o perly.o usersub.o
-
-# This version, if specified in Configure, does ONLY those scripts which need
-# set-id emulation.  Suidperl must be setuid root.  It contains the "taint"
-# checks as well as the special code to validate that the script in question
-# has been invoked correctly.
-
-suidperl: $& sperl.o main.o libtperl.rlb
-       $(CC) $(LARGE) $(CLDFLAGS) sperl.o main.o libtperl.a $(libs) -o suidperl
-
-# This version interprets scripts that are already set-id either via a wrapper
-# or through the kernel allowing set-id scripts (bad idea).  Taintperl must
-# NOT be setuid to root or anything else.  The only difference between it
-# and normal perl is the presence of the "taint" checks.
-
-taintperl: $& main.o libtperl.rlb
-       $(CC) $(LARGE) $(CLDFLAGS) main.o libtperl.a $(libs) -o taintperl
-
-libtperl.rlb: libtperl.a
-       ranlib libtperl.a
-       touch libtperl.rlb
-
-libtperl.a: $& tperly.o tperl.o $(tobj) thash.o usersub.o
-       ar rcuv libtperl.a $(tobj) thash.o tperly.o usersub.o tperl.o
-
-# This command assumes that /usr/include/dbz.h and /usr/lib/dbz.o exist.
-
-dbzperl: $& main.o zhash.o libperl.rlb
-       $(CC) $(LARGE) $(CLDFLAGS) main.o zhash.o /usr/lib/dbz.o $(LIB)/libperl.a $(libs) -o dbzperl
-
-zhash.o: hash.c $(h)
-       $(RMS) zhash.c
-       $(SLN) hash.c zhash.c
-       $(CCCMD) -DWANT_DBZ zhash.c
-       $(RMS) zhash.c
-
-uperl.o: $& $(obj) main.o hash.o perly.o
-       -ld $(LARGE) $(LDFLAGS) -r $(obj) main.o hash.o perly.o -o uperl.o
-
-saber: $(saber)
-       # load $(saber)
-       # load /lib/libm.a
-
-# Replicating all this junk is yucky, but I don't see a portable way to fix it.
-
-tperly.o: perly.c perly.h $(h)
-       $(RMS) tperly.c
-       $(SLN) perly.c tperly.c
-       $(CCCMD) -DTAINT tperly.c
-       $(RMS) tperly.c
-
-tperl.o: perl.c perly.h patchlevel.h perl.h $(h)
-       $(RMS) tperl.c
-       $(SLN) perl.c tperl.c
-       $(CCCMD) -DTAINT tperl.c
-       $(RMS) tperl.c
-
-sperl.o: perl.c perly.h patchlevel.h $(h)
-       $(RMS) sperl.c
-       $(SLN) perl.c sperl.c
-       $(CCCMD) -DTAINT -DIAMSUID sperl.c
-       $(RMS) sperl.c
-
-tarray.o: array.c $(h)
-       $(RMS) tarray.c
-       $(SLN) array.c tarray.c
-       $(CCCMD) -DTAINT tarray.c
-       $(RMS) tarray.c
-
-tcmd.o: cmd.c $(h)
-       $(RMS) tcmd.c
-       $(SLN) cmd.c tcmd.c
-       $(CCCMD) -DTAINT tcmd.c
-       $(RMS) tcmd.c
-
-tcons.o: cons.c $(h) perly.h
-       $(RMS) tcons.c
-       $(SLN) cons.c tcons.c
-       $(CCCMD) -DTAINT tcons.c
-       $(RMS) tcons.c
-
-tconsarg.o: consarg.c $(h)
-       $(RMS) tconsarg.c
-       $(SLN) consarg.c tconsarg.c
-       $(CCCMD) -DTAINT tconsarg.c
-       $(RMS) tconsarg.c
-
-tdoarg.o: doarg.c $(h)
-       $(RMS) tdoarg.c
-       $(SLN) doarg.c tdoarg.c
-       $(CCCMD) -DTAINT tdoarg.c
-       $(RMS) tdoarg.c
-
-tdoio.o: doio.c $(h)
-       $(RMS) tdoio.c
-       $(SLN) doio.c tdoio.c
-       $(CCCMD) -DTAINT tdoio.c
-       $(RMS) tdoio.c
-
-tdolist.o: dolist.c $(h)
-       $(RMS) tdolist.c
-       $(SLN) dolist.c tdolist.c
-       $(CCCMD) -DTAINT tdolist.c
-       $(RMS) tdolist.c
-
-tdump.o: dump.c $(h)
-       $(RMS) tdump.c
-       $(SLN) dump.c tdump.c
-       $(CCCMD) -DTAINT tdump.c
-       $(RMS) tdump.c
-
-teval.o: eval.c $(h)
-       $(RMS) teval.c
-       $(SLN) eval.c teval.c
-       $(CCCMD) -DTAINT teval.c
-       $(RMS) teval.c
-
-tform.o: form.c $(h)
-       $(RMS) tform.c
-       $(SLN) form.c tform.c
-       $(CCCMD) -DTAINT tform.c
-       $(RMS) tform.c
-
-thash.o: hash.c $(h)
-       $(RMS) thash.c
-       $(SLN) hash.c thash.c
-       $(CCCMD) -DTAINT thash.c
-       $(RMS) thash.c
-
-tpp.o: pp.c $(h)
-       $(RMS) tpp.c
-       $(SLN) pp.c tpp.c
-       $(CCCMD) -DTAINT tpp.c
-       $(RMS) tpp.c
-
-tregcomp.o: regcomp.c $(h)
-       $(RMS) tregcomp.c
-       $(SLN) regcomp.c tregcomp.c
-       $(CCCMD) -DTAINT tregcomp.c
-       $(RMS) tregcomp.c
-
-tregexec.o: regexec.c $(h)
-       $(RMS) tregexec.c
-       $(SLN) regexec.c tregexec.c
-       $(CCCMD) -DTAINT tregexec.c
-       $(RMS) tregexec.c
-
-tstab.o: stab.c $(h)
-       $(RMS) tstab.c
-       $(SLN) stab.c tstab.c
-       $(CCCMD) -DTAINT tstab.c
-       $(RMS) tstab.c
-
-tstr.o: str.c $(h) perly.h
-       $(RMS) tstr.c
-       $(SLN) str.c tstr.c
-       $(CCCMD) -DTAINT tstr.c
-       $(RMS) tstr.c
-
-ttoke.o: toke.c $(h) perly.h
-       $(RMS) ttoke.c
-       $(SLN) toke.c ttoke.c
-       $(CCCMD) -DTAINT ttoke.c
-       $(RMS) ttoke.c
-
-tutil.o: util.c $(h)
-       $(RMS) tutil.c
-       $(SLN) util.c tutil.c
-       $(CCCMD) -DTAINT tutil.c
-       $(RMS) tutil.c
-
-perly.h: perly.c
-       @ echo Dummy dependency for dumb parallel make
-       touch perly.h
-
-embed.h: embed_h.SH global.var interp.var
-       sh embed_h.SH
-
-perly.c: perly.y perly.fixer
-       @ \
-case "$(YACC)" in \
-    *bison*) echo 'Expect' 25 shift/reduce and 53 reduce/reduce conflicts;; \
-    *) echo 'Expect' 27 shift/reduce and 51 reduce/reduce conflicts;; \
-esac
-       $(YACC) -d perly.y
-       sh $(shellflags) ./perly.fixer y.tab.c perly.c
-       mv y.tab.h perly.h
-       echo 'extern YYSTYPE yylval;' >>perly.h
-
-perly.o: perly.c perly.h $(h)
-       $(CCCMD) perly.c
-
-install: all
-       ./perl installperl
-
-clean:
-       rm -f *.o all perl taintperl suidperl perly.c
-       cd x2p; $(MAKE) clean
-
-realclean: clean
-       cd x2p; $(MAKE) realclean
-       rm -f *.orig */*.orig *~ */*~ core $(addedbyconf) h2ph h2ph.man
-       rm -f perly.c perly.h t/perl Makefile config.h makedepend makedir
-       rm -f makefile x2p/Makefile x2p/makefile cflags x2p/cflags
-       rm -f c2ph pstruct
-
-# The following lint has practically everything turned on.  Unfortunately,
-# you have to wade through a lot of mumbo jumbo that can't be suppressed.
-# If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message
-# for that spot.
-
-lint: perly.c $(c)
-       lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz
-
-depend: makedepend
-       - test -f perly.h || cp /dev/null perly.h
-       ./makedepend
-       - test -s perly.h || /bin/rm -f perly.h
-       cd x2p; $(MAKE) depend
-
-test: perl
-       - cd t && chmod +x TEST */*.t
-       - cd t && (rm -f perl; $(SLN) ../perl perl) && ./perl TEST </dev/tty
-
-clist:
-       echo $(c) | tr ' ' '\012' >.clist
-
-hlist:
-       echo $(h) | tr ' ' '\012' >.hlist
-
-shlist:
-       echo $(sh) | tr ' ' '\012' >.shlist
-
-# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
-# If this runs make out of memory, delete /usr/include lines.
-array.o: 
-array.o: /usr/ucbinclude/ctype.h
-array.o: /usr/ucbinclude/dirent.h
-array.o: /usr/ucbinclude/errno.h
-array.o: /usr/ucbinclude/machine/param.h
-array.o: /usr/ucbinclude/machine/setjmp.h
-array.o: /usr/ucbinclude/ndbm.h
-array.o: /usr/ucbinclude/netinet/in.h
-array.o: /usr/ucbinclude/setjmp.h
-array.o: /usr/ucbinclude/stdio.h
-array.o: /usr/ucbinclude/sys/dirent.h
-array.o: /usr/ucbinclude/sys/errno.h
-array.o: /usr/ucbinclude/sys/filio.h
-array.o: /usr/ucbinclude/sys/ioccom.h
-array.o: /usr/ucbinclude/sys/ioctl.h
-array.o: /usr/ucbinclude/sys/param.h
-array.o: /usr/ucbinclude/sys/signal.h
-array.o: /usr/ucbinclude/sys/sockio.h
-array.o: /usr/ucbinclude/sys/stat.h
-array.o: /usr/ucbinclude/sys/stdtypes.h
-array.o: /usr/ucbinclude/sys/sysmacros.h
-array.o: /usr/ucbinclude/sys/time.h
-array.o: /usr/ucbinclude/sys/times.h
-array.o: /usr/ucbinclude/sys/ttold.h
-array.o: /usr/ucbinclude/sys/ttychars.h
-array.o: /usr/ucbinclude/sys/ttycom.h
-array.o: /usr/ucbinclude/sys/ttydev.h
-array.o: /usr/ucbinclude/sys/types.h
-array.o: /usr/ucbinclude/time.h
-array.o: /usr/ucbinclude/vm/faultcode.h
-array.o: EXTERN.h
-array.o: arg.h
-array.o: array.c
-array.o: array.h
-array.o: cmd.h
-array.o: config.h
-array.o: embed.h
-array.o: form.h
-array.o: handy.h
-array.o: hash.h
-array.o: perl.h
-array.o: regexp.h
-array.o: spat.h
-array.o: stab.h
-array.o: str.h
-array.o: unixish.h
-array.o: util.h
-cmd.o: 
-cmd.o: /usr/ucbinclude/ctype.h
-cmd.o: /usr/ucbinclude/dirent.h
-cmd.o: /usr/ucbinclude/errno.h
-cmd.o: /usr/ucbinclude/machine/param.h
-cmd.o: /usr/ucbinclude/machine/setjmp.h
-cmd.o: /usr/ucbinclude/ndbm.h
-cmd.o: /usr/ucbinclude/netinet/in.h
-cmd.o: /usr/ucbinclude/setjmp.h
-cmd.o: /usr/ucbinclude/stdio.h
-cmd.o: /usr/ucbinclude/sys/dirent.h
-cmd.o: /usr/ucbinclude/sys/errno.h
-cmd.o: /usr/ucbinclude/sys/filio.h
-cmd.o: /usr/ucbinclude/sys/ioccom.h
-cmd.o: /usr/ucbinclude/sys/ioctl.h
-cmd.o: /usr/ucbinclude/sys/param.h
-cmd.o: /usr/ucbinclude/sys/signal.h
-cmd.o: /usr/ucbinclude/sys/sockio.h
-cmd.o: /usr/ucbinclude/sys/stat.h
-cmd.o: /usr/ucbinclude/sys/stdtypes.h
-cmd.o: /usr/ucbinclude/sys/sysmacros.h
-cmd.o: /usr/ucbinclude/sys/time.h
-cmd.o: /usr/ucbinclude/sys/times.h
-cmd.o: /usr/ucbinclude/sys/ttold.h
-cmd.o: /usr/ucbinclude/sys/ttychars.h
-cmd.o: /usr/ucbinclude/sys/ttycom.h
-cmd.o: /usr/ucbinclude/sys/ttydev.h
-cmd.o: /usr/ucbinclude/sys/types.h
-cmd.o: /usr/ucbinclude/time.h
-cmd.o: /usr/ucbinclude/varargs.h
-cmd.o: /usr/ucbinclude/vm/faultcode.h
-cmd.o: EXTERN.h
-cmd.o: arg.h
-cmd.o: array.h
-cmd.o: cmd.c
-cmd.o: cmd.h
-cmd.o: config.h
-cmd.o: embed.h
-cmd.o: form.h
-cmd.o: handy.h
-cmd.o: hash.h
-cmd.o: perl.h
-cmd.o: regexp.h
-cmd.o: spat.h
-cmd.o: stab.h
-cmd.o: str.h
-cmd.o: unixish.h
-cmd.o: util.h
-cons.o: 
-cons.o: /usr/ucbinclude/ctype.h
-cons.o: /usr/ucbinclude/dirent.h
-cons.o: /usr/ucbinclude/errno.h
-cons.o: /usr/ucbinclude/machine/param.h
-cons.o: /usr/ucbinclude/machine/setjmp.h
-cons.o: /usr/ucbinclude/ndbm.h
-cons.o: /usr/ucbinclude/netinet/in.h
-cons.o: /usr/ucbinclude/setjmp.h
-cons.o: /usr/ucbinclude/stdio.h
-cons.o: /usr/ucbinclude/sys/dirent.h
-cons.o: /usr/ucbinclude/sys/errno.h
-cons.o: /usr/ucbinclude/sys/filio.h
-cons.o: /usr/ucbinclude/sys/ioccom.h
-cons.o: /usr/ucbinclude/sys/ioctl.h
-cons.o: /usr/ucbinclude/sys/param.h
-cons.o: /usr/ucbinclude/sys/signal.h
-cons.o: /usr/ucbinclude/sys/sockio.h
-cons.o: /usr/ucbinclude/sys/stat.h
-cons.o: /usr/ucbinclude/sys/stdtypes.h
-cons.o: /usr/ucbinclude/sys/sysmacros.h
-cons.o: /usr/ucbinclude/sys/time.h
-cons.o: /usr/ucbinclude/sys/times.h
-cons.o: /usr/ucbinclude/sys/ttold.h
-cons.o: /usr/ucbinclude/sys/ttychars.h
-cons.o: /usr/ucbinclude/sys/ttycom.h
-cons.o: /usr/ucbinclude/sys/ttydev.h
-cons.o: /usr/ucbinclude/sys/types.h
-cons.o: /usr/ucbinclude/time.h
-cons.o: /usr/ucbinclude/vm/faultcode.h
-cons.o: EXTERN.h
-cons.o: arg.h
-cons.o: array.h
-cons.o: cmd.h
-cons.o: config.h
-cons.o: cons.c
-cons.o: embed.h
-cons.o: form.h
-cons.o: handy.h
-cons.o: hash.h
-cons.o: perl.h
-cons.o: perly.h
-cons.o: regexp.h
-cons.o: spat.h
-cons.o: stab.h
-cons.o: str.h
-cons.o: unixish.h
-cons.o: util.h
-consarg.o: 
-consarg.o: /usr/ucbinclude/ctype.h
-consarg.o: /usr/ucbinclude/dirent.h
-consarg.o: /usr/ucbinclude/errno.h
-consarg.o: /usr/ucbinclude/machine/param.h
-consarg.o: /usr/ucbinclude/machine/setjmp.h
-consarg.o: /usr/ucbinclude/ndbm.h
-consarg.o: /usr/ucbinclude/netinet/in.h
-consarg.o: /usr/ucbinclude/setjmp.h
-consarg.o: /usr/ucbinclude/stdio.h
-consarg.o: /usr/ucbinclude/sys/dirent.h
-consarg.o: /usr/ucbinclude/sys/errno.h
-consarg.o: /usr/ucbinclude/sys/filio.h
-consarg.o: /usr/ucbinclude/sys/ioccom.h
-consarg.o: /usr/ucbinclude/sys/ioctl.h
-consarg.o: /usr/ucbinclude/sys/param.h
-consarg.o: /usr/ucbinclude/sys/signal.h
-consarg.o: /usr/ucbinclude/sys/sockio.h
-consarg.o: /usr/ucbinclude/sys/stat.h
-consarg.o: /usr/ucbinclude/sys/stdtypes.h
-consarg.o: /usr/ucbinclude/sys/sysmacros.h
-consarg.o: /usr/ucbinclude/sys/time.h
-consarg.o: /usr/ucbinclude/sys/times.h
-consarg.o: /usr/ucbinclude/sys/ttold.h
-consarg.o: /usr/ucbinclude/sys/ttychars.h
-consarg.o: /usr/ucbinclude/sys/ttycom.h
-consarg.o: /usr/ucbinclude/sys/ttydev.h
-consarg.o: /usr/ucbinclude/sys/types.h
-consarg.o: /usr/ucbinclude/time.h
-consarg.o: /usr/ucbinclude/vm/faultcode.h
-consarg.o: EXTERN.h
-consarg.o: arg.h
-consarg.o: array.h
-consarg.o: cmd.h
-consarg.o: config.h
-consarg.o: consarg.c
-consarg.o: embed.h
-consarg.o: form.h
-consarg.o: handy.h
-consarg.o: hash.h
-consarg.o: perl.h
-consarg.o: regexp.h
-consarg.o: spat.h
-consarg.o: stab.h
-consarg.o: str.h
-consarg.o: unixish.h
-consarg.o: util.h
-doarg.o: 
-doarg.o: /usr/ucbinclude/ctype.h
-doarg.o: /usr/ucbinclude/dirent.h
-doarg.o: /usr/ucbinclude/errno.h
-doarg.o: /usr/ucbinclude/machine/param.h
-doarg.o: /usr/ucbinclude/machine/setjmp.h
-doarg.o: /usr/ucbinclude/ndbm.h
-doarg.o: /usr/ucbinclude/netinet/in.h
-doarg.o: /usr/ucbinclude/setjmp.h
-doarg.o: /usr/ucbinclude/stdio.h
-doarg.o: /usr/ucbinclude/sys/dirent.h
-doarg.o: /usr/ucbinclude/sys/errno.h
-doarg.o: /usr/ucbinclude/sys/filio.h
-doarg.o: /usr/ucbinclude/sys/ioccom.h
-doarg.o: /usr/ucbinclude/sys/ioctl.h
-doarg.o: /usr/ucbinclude/sys/param.h
-doarg.o: /usr/ucbinclude/sys/signal.h
-doarg.o: /usr/ucbinclude/sys/sockio.h
-doarg.o: /usr/ucbinclude/sys/stat.h
-doarg.o: /usr/ucbinclude/sys/stdtypes.h
-doarg.o: /usr/ucbinclude/sys/sysmacros.h
-doarg.o: /usr/ucbinclude/sys/time.h
-doarg.o: /usr/ucbinclude/sys/times.h
-doarg.o: /usr/ucbinclude/sys/ttold.h
-doarg.o: /usr/ucbinclude/sys/ttychars.h
-doarg.o: /usr/ucbinclude/sys/ttycom.h
-doarg.o: /usr/ucbinclude/sys/ttydev.h
-doarg.o: /usr/ucbinclude/sys/types.h
-doarg.o: /usr/ucbinclude/time.h
-doarg.o: /usr/ucbinclude/vm/faultcode.h
-doarg.o: EXTERN.h
-doarg.o: arg.h
-doarg.o: array.h
-doarg.o: cmd.h
-doarg.o: config.h
-doarg.o: doarg.c
-doarg.o: embed.h
-doarg.o: form.h
-doarg.o: handy.h
-doarg.o: hash.h
-doarg.o: perl.h
-doarg.o: regexp.h
-doarg.o: spat.h
-doarg.o: stab.h
-doarg.o: str.h
-doarg.o: unixish.h
-doarg.o: util.h
-doio.o: 
-doio.o: /usr/ucbinclude/ctype.h
-doio.o: /usr/ucbinclude/debug/debug.h
-doio.o: /usr/ucbinclude/dirent.h
-doio.o: /usr/ucbinclude/errno.h
-doio.o: /usr/ucbinclude/grp.h
-doio.o: /usr/ucbinclude/machine/mmu.h
-doio.o: /usr/ucbinclude/machine/param.h
-doio.o: /usr/ucbinclude/machine/setjmp.h
-doio.o: /usr/ucbinclude/mon/obpdefs.h
-doio.o: /usr/ucbinclude/mon/openprom.h
-doio.o: /usr/ucbinclude/mon/sunromvec.h
-doio.o: /usr/ucbinclude/ndbm.h
-doio.o: /usr/ucbinclude/netdb.h
-doio.o: /usr/ucbinclude/netinet/in.h
-doio.o: /usr/ucbinclude/pwd.h
-doio.o: /usr/ucbinclude/setjmp.h
-doio.o: /usr/ucbinclude/stdio.h
-doio.o: /usr/ucbinclude/sys/dirent.h
-doio.o: /usr/ucbinclude/sys/errno.h
-doio.o: /usr/ucbinclude/sys/fcntlcom.h
-doio.o: /usr/ucbinclude/sys/file.h
-doio.o: /usr/ucbinclude/sys/filio.h
-doio.o: /usr/ucbinclude/sys/ioccom.h
-doio.o: /usr/ucbinclude/sys/ioctl.h
-doio.o: /usr/ucbinclude/sys/ipc.h
-doio.o: /usr/ucbinclude/sys/msg.h
-doio.o: /usr/ucbinclude/sys/param.h
-doio.o: /usr/ucbinclude/sys/sem.h
-doio.o: /usr/ucbinclude/sys/shm.h
-doio.o: /usr/ucbinclude/sys/signal.h
-doio.o: /usr/ucbinclude/sys/socket.h
-doio.o: /usr/ucbinclude/sys/sockio.h
-doio.o: /usr/ucbinclude/sys/stat.h
-doio.o: /usr/ucbinclude/sys/stdtypes.h
-doio.o: /usr/ucbinclude/sys/sysmacros.h
-doio.o: /usr/ucbinclude/sys/time.h
-doio.o: /usr/ucbinclude/sys/times.h
-doio.o: /usr/ucbinclude/sys/ttold.h
-doio.o: /usr/ucbinclude/sys/ttychars.h
-doio.o: /usr/ucbinclude/sys/ttycom.h
-doio.o: /usr/ucbinclude/sys/ttydev.h
-doio.o: /usr/ucbinclude/sys/types.h
-doio.o: /usr/ucbinclude/time.h
-doio.o: /usr/ucbinclude/utime.h
-doio.o: /usr/ucbinclude/vm/faultcode.h
-doio.o: EXTERN.h
-doio.o: arg.h
-doio.o: array.h
-doio.o: cmd.h
-doio.o: config.h
-doio.o: doio.c
-doio.o: embed.h
-doio.o: form.h
-doio.o: handy.h
-doio.o: hash.h
-doio.o: perl.h
-doio.o: regexp.h
-doio.o: spat.h
-doio.o: stab.h
-doio.o: str.h
-doio.o: unixish.h
-doio.o: util.h
-dolist.o: 
-dolist.o: /usr/ucbinclude/ctype.h
-dolist.o: /usr/ucbinclude/dirent.h
-dolist.o: /usr/ucbinclude/errno.h
-dolist.o: /usr/ucbinclude/machine/param.h
-dolist.o: /usr/ucbinclude/machine/setjmp.h
-dolist.o: /usr/ucbinclude/ndbm.h
-dolist.o: /usr/ucbinclude/netinet/in.h
-dolist.o: /usr/ucbinclude/setjmp.h
-dolist.o: /usr/ucbinclude/stdio.h
-dolist.o: /usr/ucbinclude/sys/dirent.h
-dolist.o: /usr/ucbinclude/sys/errno.h
-dolist.o: /usr/ucbinclude/sys/filio.h
-dolist.o: /usr/ucbinclude/sys/ioccom.h
-dolist.o: /usr/ucbinclude/sys/ioctl.h
-dolist.o: /usr/ucbinclude/sys/param.h
-dolist.o: /usr/ucbinclude/sys/signal.h
-dolist.o: /usr/ucbinclude/sys/sockio.h
-dolist.o: /usr/ucbinclude/sys/stat.h
-dolist.o: /usr/ucbinclude/sys/stdtypes.h
-dolist.o: /usr/ucbinclude/sys/sysmacros.h
-dolist.o: /usr/ucbinclude/sys/time.h
-dolist.o: /usr/ucbinclude/sys/times.h
-dolist.o: /usr/ucbinclude/sys/ttold.h
-dolist.o: /usr/ucbinclude/sys/ttychars.h
-dolist.o: /usr/ucbinclude/sys/ttycom.h
-dolist.o: /usr/ucbinclude/sys/ttydev.h
-dolist.o: /usr/ucbinclude/sys/types.h
-dolist.o: /usr/ucbinclude/time.h
-dolist.o: /usr/ucbinclude/vm/faultcode.h
-dolist.o: EXTERN.h
-dolist.o: arg.h
-dolist.o: array.h
-dolist.o: cmd.h
-dolist.o: config.h
-dolist.o: dolist.c
-dolist.o: embed.h
-dolist.o: form.h
-dolist.o: handy.h
-dolist.o: hash.h
-dolist.o: perl.h
-dolist.o: regexp.h
-dolist.o: spat.h
-dolist.o: stab.h
-dolist.o: str.h
-dolist.o: unixish.h
-dolist.o: util.h
-dump.o: 
-dump.o: /usr/ucbinclude/ctype.h
-dump.o: /usr/ucbinclude/dirent.h
-dump.o: /usr/ucbinclude/errno.h
-dump.o: /usr/ucbinclude/machine/param.h
-dump.o: /usr/ucbinclude/machine/setjmp.h
-dump.o: /usr/ucbinclude/ndbm.h
-dump.o: /usr/ucbinclude/netinet/in.h
-dump.o: /usr/ucbinclude/setjmp.h
-dump.o: /usr/ucbinclude/stdio.h
-dump.o: /usr/ucbinclude/sys/dirent.h
-dump.o: /usr/ucbinclude/sys/errno.h
-dump.o: /usr/ucbinclude/sys/filio.h
-dump.o: /usr/ucbinclude/sys/ioccom.h
-dump.o: /usr/ucbinclude/sys/ioctl.h
-dump.o: /usr/ucbinclude/sys/param.h
-dump.o: /usr/ucbinclude/sys/signal.h
-dump.o: /usr/ucbinclude/sys/sockio.h
-dump.o: /usr/ucbinclude/sys/stat.h
-dump.o: /usr/ucbinclude/sys/stdtypes.h
-dump.o: /usr/ucbinclude/sys/sysmacros.h
-dump.o: /usr/ucbinclude/sys/time.h
-dump.o: /usr/ucbinclude/sys/times.h
-dump.o: /usr/ucbinclude/sys/ttold.h
-dump.o: /usr/ucbinclude/sys/ttychars.h
-dump.o: /usr/ucbinclude/sys/ttycom.h
-dump.o: /usr/ucbinclude/sys/ttydev.h
-dump.o: /usr/ucbinclude/sys/types.h
-dump.o: /usr/ucbinclude/time.h
-dump.o: /usr/ucbinclude/vm/faultcode.h
-dump.o: EXTERN.h
-dump.o: arg.h
-dump.o: array.h
-dump.o: cmd.h
-dump.o: config.h
-dump.o: dump.c
-dump.o: embed.h
-dump.o: form.h
-dump.o: handy.h
-dump.o: hash.h
-dump.o: perl.h
-dump.o: regexp.h
-dump.o: spat.h
-dump.o: stab.h
-dump.o: str.h
-dump.o: unixish.h
-dump.o: util.h
-eval.o: 
-eval.o: /usr/ucbinclude/ctype.h
-eval.o: /usr/ucbinclude/dirent.h
-eval.o: /usr/ucbinclude/errno.h
-eval.o: /usr/ucbinclude/machine/param.h
-eval.o: /usr/ucbinclude/machine/setjmp.h
-eval.o: /usr/ucbinclude/ndbm.h
-eval.o: /usr/ucbinclude/netinet/in.h
-eval.o: /usr/ucbinclude/setjmp.h
-eval.o: /usr/ucbinclude/stdio.h
-eval.o: /usr/ucbinclude/sys/dirent.h
-eval.o: /usr/ucbinclude/sys/errno.h
-eval.o: /usr/ucbinclude/sys/fcntlcom.h
-eval.o: /usr/ucbinclude/sys/file.h
-eval.o: /usr/ucbinclude/sys/filio.h
-eval.o: /usr/ucbinclude/sys/ioccom.h
-eval.o: /usr/ucbinclude/sys/ioctl.h
-eval.o: /usr/ucbinclude/sys/param.h
-eval.o: /usr/ucbinclude/sys/signal.h
-eval.o: /usr/ucbinclude/sys/sockio.h
-eval.o: /usr/ucbinclude/sys/stat.h
-eval.o: /usr/ucbinclude/sys/stdtypes.h
-eval.o: /usr/ucbinclude/sys/sysmacros.h
-eval.o: /usr/ucbinclude/sys/time.h
-eval.o: /usr/ucbinclude/sys/times.h
-eval.o: /usr/ucbinclude/sys/ttold.h
-eval.o: /usr/ucbinclude/sys/ttychars.h
-eval.o: /usr/ucbinclude/sys/ttycom.h
-eval.o: /usr/ucbinclude/sys/ttydev.h
-eval.o: /usr/ucbinclude/sys/types.h
-eval.o: /usr/ucbinclude/time.h
-eval.o: /usr/ucbinclude/vfork.h
-eval.o: /usr/ucbinclude/vm/faultcode.h
-eval.o: EXTERN.h
-eval.o: arg.h
-eval.o: array.h
-eval.o: cmd.h
-eval.o: config.h
-eval.o: embed.h
-eval.o: eval.c
-eval.o: form.h
-eval.o: handy.h
-eval.o: hash.h
-eval.o: perl.h
-eval.o: regexp.h
-eval.o: spat.h
-eval.o: stab.h
-eval.o: str.h
-eval.o: unixish.h
-eval.o: util.h
-form.o: 
-form.o: /usr/ucbinclude/ctype.h
-form.o: /usr/ucbinclude/dirent.h
-form.o: /usr/ucbinclude/errno.h
-form.o: /usr/ucbinclude/machine/param.h
-form.o: /usr/ucbinclude/machine/setjmp.h
-form.o: /usr/ucbinclude/ndbm.h
-form.o: /usr/ucbinclude/netinet/in.h
-form.o: /usr/ucbinclude/setjmp.h
-form.o: /usr/ucbinclude/stdio.h
-form.o: /usr/ucbinclude/sys/dirent.h
-form.o: /usr/ucbinclude/sys/errno.h
-form.o: /usr/ucbinclude/sys/filio.h
-form.o: /usr/ucbinclude/sys/ioccom.h
-form.o: /usr/ucbinclude/sys/ioctl.h
-form.o: /usr/ucbinclude/sys/param.h
-form.o: /usr/ucbinclude/sys/signal.h
-form.o: /usr/ucbinclude/sys/sockio.h
-form.o: /usr/ucbinclude/sys/stat.h
-form.o: /usr/ucbinclude/sys/stdtypes.h
-form.o: /usr/ucbinclude/sys/sysmacros.h
-form.o: /usr/ucbinclude/sys/time.h
-form.o: /usr/ucbinclude/sys/times.h
-form.o: /usr/ucbinclude/sys/ttold.h
-form.o: /usr/ucbinclude/sys/ttychars.h
-form.o: /usr/ucbinclude/sys/ttycom.h
-form.o: /usr/ucbinclude/sys/ttydev.h
-form.o: /usr/ucbinclude/sys/types.h
-form.o: /usr/ucbinclude/time.h
-form.o: /usr/ucbinclude/vm/faultcode.h
-form.o: EXTERN.h
-form.o: arg.h
-form.o: array.h
-form.o: cmd.h
-form.o: config.h
-form.o: embed.h
-form.o: form.c
-form.o: form.h
-form.o: handy.h
-form.o: hash.h
-form.o: perl.h
-form.o: regexp.h
-form.o: spat.h
-form.o: stab.h
-form.o: str.h
-form.o: unixish.h
-form.o: util.h
-hash.o: 
-hash.o: /usr/ucbinclude/ctype.h
-hash.o: /usr/ucbinclude/dirent.h
-hash.o: /usr/ucbinclude/errno.h
-hash.o: /usr/ucbinclude/machine/param.h
-hash.o: /usr/ucbinclude/machine/setjmp.h
-hash.o: /usr/ucbinclude/ndbm.h
-hash.o: /usr/ucbinclude/netinet/in.h
-hash.o: /usr/ucbinclude/setjmp.h
-hash.o: /usr/ucbinclude/stdio.h
-hash.o: /usr/ucbinclude/sys/dirent.h
-hash.o: /usr/ucbinclude/sys/errno.h
-hash.o: /usr/ucbinclude/sys/fcntlcom.h
-hash.o: /usr/ucbinclude/sys/file.h
-hash.o: /usr/ucbinclude/sys/filio.h
-hash.o: /usr/ucbinclude/sys/ioccom.h
-hash.o: /usr/ucbinclude/sys/ioctl.h
-hash.o: /usr/ucbinclude/sys/param.h
-hash.o: /usr/ucbinclude/sys/signal.h
-hash.o: /usr/ucbinclude/sys/sockio.h
-hash.o: /usr/ucbinclude/sys/stat.h
-hash.o: /usr/ucbinclude/sys/stdtypes.h
-hash.o: /usr/ucbinclude/sys/sysmacros.h
-hash.o: /usr/ucbinclude/sys/time.h
-hash.o: /usr/ucbinclude/sys/times.h
-hash.o: /usr/ucbinclude/sys/ttold.h
-hash.o: /usr/ucbinclude/sys/ttychars.h
-hash.o: /usr/ucbinclude/sys/ttycom.h
-hash.o: /usr/ucbinclude/sys/ttydev.h
-hash.o: /usr/ucbinclude/sys/types.h
-hash.o: /usr/ucbinclude/time.h
-hash.o: /usr/ucbinclude/vm/faultcode.h
-hash.o: EXTERN.h
-hash.o: arg.h
-hash.o: array.h
-hash.o: cmd.h
-hash.o: config.h
-hash.o: embed.h
-hash.o: form.h
-hash.o: handy.h
-hash.o: hash.c
-hash.o: hash.h
-hash.o: perl.h
-hash.o: regexp.h
-hash.o: spat.h
-hash.o: stab.h
-hash.o: str.h
-hash.o: unixish.h
-hash.o: util.h
-main.o: 
-main.o: /usr/ucbinclude/ctype.h
-main.o: /usr/ucbinclude/dirent.h
-main.o: /usr/ucbinclude/errno.h
-main.o: /usr/ucbinclude/machine/param.h
-main.o: /usr/ucbinclude/machine/setjmp.h
-main.o: /usr/ucbinclude/ndbm.h
-main.o: /usr/ucbinclude/netinet/in.h
-main.o: /usr/ucbinclude/setjmp.h
-main.o: /usr/ucbinclude/stdio.h
-main.o: /usr/ucbinclude/sys/dirent.h
-main.o: /usr/ucbinclude/sys/errno.h
-main.o: /usr/ucbinclude/sys/filio.h
-main.o: /usr/ucbinclude/sys/ioccom.h
-main.o: /usr/ucbinclude/sys/ioctl.h
-main.o: /usr/ucbinclude/sys/param.h
-main.o: /usr/ucbinclude/sys/signal.h
-main.o: /usr/ucbinclude/sys/sockio.h
-main.o: /usr/ucbinclude/sys/stat.h
-main.o: /usr/ucbinclude/sys/stdtypes.h
-main.o: /usr/ucbinclude/sys/sysmacros.h
-main.o: /usr/ucbinclude/sys/time.h
-main.o: /usr/ucbinclude/sys/times.h
-main.o: /usr/ucbinclude/sys/ttold.h
-main.o: /usr/ucbinclude/sys/ttychars.h
-main.o: /usr/ucbinclude/sys/ttycom.h
-main.o: /usr/ucbinclude/sys/ttydev.h
-main.o: /usr/ucbinclude/sys/types.h
-main.o: /usr/ucbinclude/time.h
-main.o: /usr/ucbinclude/vm/faultcode.h
-main.o: INTERN.h
-main.o: arg.h
-main.o: array.h
-main.o: cmd.h
-main.o: config.h
-main.o: embed.h
-main.o: form.h
-main.o: handy.h
-main.o: hash.h
-main.o: main.c
-main.o: perl.h
-main.o: regexp.h
-main.o: spat.h
-main.o: stab.h
-main.o: str.h
-main.o: unixish.h
-main.o: util.h
-malloc.o: 
-malloc.o: /usr/ucbinclude/ctype.h
-malloc.o: /usr/ucbinclude/dirent.h
-malloc.o: /usr/ucbinclude/errno.h
-malloc.o: /usr/ucbinclude/machine/param.h
-malloc.o: /usr/ucbinclude/machine/setjmp.h
-malloc.o: /usr/ucbinclude/ndbm.h
-malloc.o: /usr/ucbinclude/netinet/in.h
-malloc.o: /usr/ucbinclude/setjmp.h
-malloc.o: /usr/ucbinclude/stdio.h
-malloc.o: /usr/ucbinclude/sys/dirent.h
-malloc.o: /usr/ucbinclude/sys/errno.h
-malloc.o: /usr/ucbinclude/sys/filio.h
-malloc.o: /usr/ucbinclude/sys/ioccom.h
-malloc.o: /usr/ucbinclude/sys/ioctl.h
-malloc.o: /usr/ucbinclude/sys/param.h
-malloc.o: /usr/ucbinclude/sys/signal.h
-malloc.o: /usr/ucbinclude/sys/sockio.h
-malloc.o: /usr/ucbinclude/sys/stat.h
-malloc.o: /usr/ucbinclude/sys/stdtypes.h
-malloc.o: /usr/ucbinclude/sys/sysmacros.h
-malloc.o: /usr/ucbinclude/sys/time.h
-malloc.o: /usr/ucbinclude/sys/times.h
-malloc.o: /usr/ucbinclude/sys/ttold.h
-malloc.o: /usr/ucbinclude/sys/ttychars.h
-malloc.o: /usr/ucbinclude/sys/ttycom.h
-malloc.o: /usr/ucbinclude/sys/ttydev.h
-malloc.o: /usr/ucbinclude/sys/types.h
-malloc.o: /usr/ucbinclude/time.h
-malloc.o: /usr/ucbinclude/vm/faultcode.h
-malloc.o: EXTERN.h
-malloc.o: arg.h
-malloc.o: array.h
-malloc.o: cmd.h
-malloc.o: config.h
-malloc.o: embed.h
-malloc.o: form.h
-malloc.o: handy.h
-malloc.o: hash.h
-malloc.o: malloc.c
-malloc.o: perl.h
-malloc.o: regexp.h
-malloc.o: spat.h
-malloc.o: stab.h
-malloc.o: str.h
-malloc.o: unixish.h
-malloc.o: util.h
-perl.o: 
-perl.o: /usr/ucbinclude/ctype.h
-perl.o: /usr/ucbinclude/dirent.h
-perl.o: /usr/ucbinclude/errno.h
-perl.o: /usr/ucbinclude/machine/param.h
-perl.o: /usr/ucbinclude/machine/setjmp.h
-perl.o: /usr/ucbinclude/ndbm.h
-perl.o: /usr/ucbinclude/netinet/in.h
-perl.o: /usr/ucbinclude/setjmp.h
-perl.o: /usr/ucbinclude/stdio.h
-perl.o: /usr/ucbinclude/sys/dirent.h
-perl.o: /usr/ucbinclude/sys/errno.h
-perl.o: /usr/ucbinclude/sys/filio.h
-perl.o: /usr/ucbinclude/sys/ioccom.h
-perl.o: /usr/ucbinclude/sys/ioctl.h
-perl.o: /usr/ucbinclude/sys/param.h
-perl.o: /usr/ucbinclude/sys/signal.h
-perl.o: /usr/ucbinclude/sys/sockio.h
-perl.o: /usr/ucbinclude/sys/stat.h
-perl.o: /usr/ucbinclude/sys/stdtypes.h
-perl.o: /usr/ucbinclude/sys/sysmacros.h
-perl.o: /usr/ucbinclude/sys/time.h
-perl.o: /usr/ucbinclude/sys/times.h
-perl.o: /usr/ucbinclude/sys/ttold.h
-perl.o: /usr/ucbinclude/sys/ttychars.h
-perl.o: /usr/ucbinclude/sys/ttycom.h
-perl.o: /usr/ucbinclude/sys/ttydev.h
-perl.o: /usr/ucbinclude/sys/types.h
-perl.o: /usr/ucbinclude/time.h
-perl.o: /usr/ucbinclude/vm/faultcode.h
-perl.o: EXTERN.h
-perl.o: arg.h
-perl.o: array.h
-perl.o: cmd.h
-perl.o: config.h
-perl.o: embed.h
-perl.o: form.h
-perl.o: handy.h
-perl.o: hash.h
-perl.o: patchlevel.h
-perl.o: perl.c
-perl.o: perl.h
-perl.o: perly.h
-perl.o: regexp.h
-perl.o: spat.h
-perl.o: stab.h
-perl.o: str.h
-perl.o: unixish.h
-perl.o: util.h
-pp.o: EXTERN.h
-pp.o: arg.h
-pp.o: array.h
-pp.o: cmd.h
-pp.o: config.h
-pp.o: embed.h
-pp.o: pp.c
-pp.o: pp.h
-pp.o: form.h
-pp.o: handy.h
-pp.o: hash.h
-pp.o: perl.h
-pp.o: regexp.h
-pp.o: spat.h
-pp.o: stab.h
-pp.o: str.h
-pp.o: unixish.h
-pp.o: util.h
-regcomp.o: 
-regcomp.o: /usr/ucbinclude/ctype.h
-regcomp.o: /usr/ucbinclude/dirent.h
-regcomp.o: /usr/ucbinclude/errno.h
-regcomp.o: /usr/ucbinclude/machine/param.h
-regcomp.o: /usr/ucbinclude/machine/setjmp.h
-regcomp.o: /usr/ucbinclude/ndbm.h
-regcomp.o: /usr/ucbinclude/netinet/in.h
-regcomp.o: /usr/ucbinclude/setjmp.h
-regcomp.o: /usr/ucbinclude/stdio.h
-regcomp.o: /usr/ucbinclude/sys/dirent.h
-regcomp.o: /usr/ucbinclude/sys/errno.h
-regcomp.o: /usr/ucbinclude/sys/filio.h
-regcomp.o: /usr/ucbinclude/sys/ioccom.h
-regcomp.o: /usr/ucbinclude/sys/ioctl.h
-regcomp.o: /usr/ucbinclude/sys/param.h
-regcomp.o: /usr/ucbinclude/sys/signal.h
-regcomp.o: /usr/ucbinclude/sys/sockio.h
-regcomp.o: /usr/ucbinclude/sys/stat.h
-regcomp.o: /usr/ucbinclude/sys/stdtypes.h
-regcomp.o: /usr/ucbinclude/sys/sysmacros.h
-regcomp.o: /usr/ucbinclude/sys/time.h
-regcomp.o: /usr/ucbinclude/sys/times.h
-regcomp.o: /usr/ucbinclude/sys/ttold.h
-regcomp.o: /usr/ucbinclude/sys/ttychars.h
-regcomp.o: /usr/ucbinclude/sys/ttycom.h
-regcomp.o: /usr/ucbinclude/sys/ttydev.h
-regcomp.o: /usr/ucbinclude/sys/types.h
-regcomp.o: /usr/ucbinclude/time.h
-regcomp.o: /usr/ucbinclude/vm/faultcode.h
-regcomp.o: EXTERN.h
-regcomp.o: INTERN.h
-regcomp.o: arg.h
-regcomp.o: array.h
-regcomp.o: cmd.h
-regcomp.o: config.h
-regcomp.o: embed.h
-regcomp.o: form.h
-regcomp.o: handy.h
-regcomp.o: hash.h
-regcomp.o: perl.h
-regcomp.o: regcomp.c
-regcomp.o: regcomp.h
-regcomp.o: regexp.h
-regcomp.o: spat.h
-regcomp.o: stab.h
-regcomp.o: str.h
-regcomp.o: unixish.h
-regcomp.o: util.h
-regexec.o: 
-regexec.o: /usr/ucbinclude/ctype.h
-regexec.o: /usr/ucbinclude/dirent.h
-regexec.o: /usr/ucbinclude/errno.h
-regexec.o: /usr/ucbinclude/machine/param.h
-regexec.o: /usr/ucbinclude/machine/setjmp.h
-regexec.o: /usr/ucbinclude/ndbm.h
-regexec.o: /usr/ucbinclude/netinet/in.h
-regexec.o: /usr/ucbinclude/setjmp.h
-regexec.o: /usr/ucbinclude/stdio.h
-regexec.o: /usr/ucbinclude/sys/dirent.h
-regexec.o: /usr/ucbinclude/sys/errno.h
-regexec.o: /usr/ucbinclude/sys/filio.h
-regexec.o: /usr/ucbinclude/sys/ioccom.h
-regexec.o: /usr/ucbinclude/sys/ioctl.h
-regexec.o: /usr/ucbinclude/sys/param.h
-regexec.o: /usr/ucbinclude/sys/signal.h
-regexec.o: /usr/ucbinclude/sys/sockio.h
-regexec.o: /usr/ucbinclude/sys/stat.h
-regexec.o: /usr/ucbinclude/sys/stdtypes.h
-regexec.o: /usr/ucbinclude/sys/sysmacros.h
-regexec.o: /usr/ucbinclude/sys/time.h
-regexec.o: /usr/ucbinclude/sys/times.h
-regexec.o: /usr/ucbinclude/sys/ttold.h
-regexec.o: /usr/ucbinclude/sys/ttychars.h
-regexec.o: /usr/ucbinclude/sys/ttycom.h
-regexec.o: /usr/ucbinclude/sys/ttydev.h
-regexec.o: /usr/ucbinclude/sys/types.h
-regexec.o: /usr/ucbinclude/time.h
-regexec.o: /usr/ucbinclude/vm/faultcode.h
-regexec.o: EXTERN.h
-regexec.o: arg.h
-regexec.o: array.h
-regexec.o: cmd.h
-regexec.o: config.h
-regexec.o: embed.h
-regexec.o: form.h
-regexec.o: handy.h
-regexec.o: hash.h
-regexec.o: perl.h
-regexec.o: regcomp.h
-regexec.o: regexec.c
-regexec.o: regexp.h
-regexec.o: spat.h
-regexec.o: stab.h
-regexec.o: str.h
-regexec.o: unixish.h
-regexec.o: util.h
-stab.o: 
-stab.o: /usr/ucbinclude/ctype.h
-stab.o: /usr/ucbinclude/dirent.h
-stab.o: /usr/ucbinclude/errno.h
-stab.o: /usr/ucbinclude/machine/param.h
-stab.o: /usr/ucbinclude/machine/setjmp.h
-stab.o: /usr/ucbinclude/ndbm.h
-stab.o: /usr/ucbinclude/netinet/in.h
-stab.o: /usr/ucbinclude/setjmp.h
-stab.o: /usr/ucbinclude/stdio.h
-stab.o: /usr/ucbinclude/sys/dirent.h
-stab.o: /usr/ucbinclude/sys/errno.h
-stab.o: /usr/ucbinclude/sys/filio.h
-stab.o: /usr/ucbinclude/sys/ioccom.h
-stab.o: /usr/ucbinclude/sys/ioctl.h
-stab.o: /usr/ucbinclude/sys/param.h
-stab.o: /usr/ucbinclude/sys/signal.h
-stab.o: /usr/ucbinclude/sys/sockio.h
-stab.o: /usr/ucbinclude/sys/stat.h
-stab.o: /usr/ucbinclude/sys/stdtypes.h
-stab.o: /usr/ucbinclude/sys/sysmacros.h
-stab.o: /usr/ucbinclude/sys/time.h
-stab.o: /usr/ucbinclude/sys/times.h
-stab.o: /usr/ucbinclude/sys/ttold.h
-stab.o: /usr/ucbinclude/sys/ttychars.h
-stab.o: /usr/ucbinclude/sys/ttycom.h
-stab.o: /usr/ucbinclude/sys/ttydev.h
-stab.o: /usr/ucbinclude/sys/types.h
-stab.o: /usr/ucbinclude/time.h
-stab.o: /usr/ucbinclude/vm/faultcode.h
-stab.o: EXTERN.h
-stab.o: arg.h
-stab.o: array.h
-stab.o: cmd.h
-stab.o: config.h
-stab.o: embed.h
-stab.o: form.h
-stab.o: handy.h
-stab.o: hash.h
-stab.o: perl.h
-stab.o: regexp.h
-stab.o: spat.h
-stab.o: stab.c
-stab.o: stab.h
-stab.o: str.h
-stab.o: unixish.h
-stab.o: util.h
-str.o: 
-str.o: /usr/ucbinclude/ctype.h
-str.o: /usr/ucbinclude/dirent.h
-str.o: /usr/ucbinclude/errno.h
-str.o: /usr/ucbinclude/machine/param.h
-str.o: /usr/ucbinclude/machine/setjmp.h
-str.o: /usr/ucbinclude/ndbm.h
-str.o: /usr/ucbinclude/netinet/in.h
-str.o: /usr/ucbinclude/setjmp.h
-str.o: /usr/ucbinclude/stdio.h
-str.o: /usr/ucbinclude/sys/dirent.h
-str.o: /usr/ucbinclude/sys/errno.h
-str.o: /usr/ucbinclude/sys/filio.h
-str.o: /usr/ucbinclude/sys/ioccom.h
-str.o: /usr/ucbinclude/sys/ioctl.h
-str.o: /usr/ucbinclude/sys/param.h
-str.o: /usr/ucbinclude/sys/signal.h
-str.o: /usr/ucbinclude/sys/sockio.h
-str.o: /usr/ucbinclude/sys/stat.h
-str.o: /usr/ucbinclude/sys/stdtypes.h
-str.o: /usr/ucbinclude/sys/sysmacros.h
-str.o: /usr/ucbinclude/sys/time.h
-str.o: /usr/ucbinclude/sys/times.h
-str.o: /usr/ucbinclude/sys/ttold.h
-str.o: /usr/ucbinclude/sys/ttychars.h
-str.o: /usr/ucbinclude/sys/ttycom.h
-str.o: /usr/ucbinclude/sys/ttydev.h
-str.o: /usr/ucbinclude/sys/types.h
-str.o: /usr/ucbinclude/time.h
-str.o: /usr/ucbinclude/vm/faultcode.h
-str.o: EXTERN.h
-str.o: arg.h
-str.o: array.h
-str.o: cmd.h
-str.o: config.h
-str.o: embed.h
-str.o: form.h
-str.o: handy.h
-str.o: hash.h
-str.o: perl.h
-str.o: perly.h
-str.o: regexp.h
-str.o: spat.h
-str.o: stab.h
-str.o: str.c
-str.o: str.h
-str.o: unixish.h
-str.o: util.h
-toke.o: 
-toke.o: /usr/ucbinclude/ctype.h
-toke.o: /usr/ucbinclude/dirent.h
-toke.o: /usr/ucbinclude/errno.h
-toke.o: /usr/ucbinclude/machine/param.h
-toke.o: /usr/ucbinclude/machine/setjmp.h
-toke.o: /usr/ucbinclude/ndbm.h
-toke.o: /usr/ucbinclude/netinet/in.h
-toke.o: /usr/ucbinclude/setjmp.h
-toke.o: /usr/ucbinclude/stdio.h
-toke.o: /usr/ucbinclude/sys/dirent.h
-toke.o: /usr/ucbinclude/sys/errno.h
-toke.o: /usr/ucbinclude/sys/fcntlcom.h
-toke.o: /usr/ucbinclude/sys/file.h
-toke.o: /usr/ucbinclude/sys/filio.h
-toke.o: /usr/ucbinclude/sys/ioccom.h
-toke.o: /usr/ucbinclude/sys/ioctl.h
-toke.o: /usr/ucbinclude/sys/param.h
-toke.o: /usr/ucbinclude/sys/signal.h
-toke.o: /usr/ucbinclude/sys/sockio.h
-toke.o: /usr/ucbinclude/sys/stat.h
-toke.o: /usr/ucbinclude/sys/stdtypes.h
-toke.o: /usr/ucbinclude/sys/sysmacros.h
-toke.o: /usr/ucbinclude/sys/time.h
-toke.o: /usr/ucbinclude/sys/times.h
-toke.o: /usr/ucbinclude/sys/ttold.h
-toke.o: /usr/ucbinclude/sys/ttychars.h
-toke.o: /usr/ucbinclude/sys/ttycom.h
-toke.o: /usr/ucbinclude/sys/ttydev.h
-toke.o: /usr/ucbinclude/sys/types.h
-toke.o: /usr/ucbinclude/time.h
-toke.o: /usr/ucbinclude/vm/faultcode.h
-toke.o: EXTERN.h
-toke.o: arg.h
-toke.o: array.h
-toke.o: cmd.h
-toke.o: config.h
-toke.o: embed.h
-toke.o: form.h
-toke.o: handy.h
-toke.o: hash.h
-toke.o: keywords.h
-toke.o: perl.h
-toke.o: perly.h
-toke.o: regexp.h
-toke.o: spat.h
-toke.o: stab.h
-toke.o: str.h
-toke.o: toke.c
-toke.o: unixish.h
-toke.o: util.h
-util.o: 
-util.o: /usr/ucbinclude/ctype.h
-util.o: /usr/ucbinclude/dirent.h
-util.o: /usr/ucbinclude/errno.h
-util.o: /usr/ucbinclude/machine/param.h
-util.o: /usr/ucbinclude/machine/setjmp.h
-util.o: /usr/ucbinclude/ndbm.h
-util.o: /usr/ucbinclude/netinet/in.h
-util.o: /usr/ucbinclude/setjmp.h
-util.o: /usr/ucbinclude/stdio.h
-util.o: /usr/ucbinclude/sys/dirent.h
-util.o: /usr/ucbinclude/sys/errno.h
-util.o: /usr/ucbinclude/sys/fcntlcom.h
-util.o: /usr/ucbinclude/sys/file.h
-util.o: /usr/ucbinclude/sys/filio.h
-util.o: /usr/ucbinclude/sys/ioccom.h
-util.o: /usr/ucbinclude/sys/ioctl.h
-util.o: /usr/ucbinclude/sys/param.h
-util.o: /usr/ucbinclude/sys/signal.h
-util.o: /usr/ucbinclude/sys/sockio.h
-util.o: /usr/ucbinclude/sys/stat.h
-util.o: /usr/ucbinclude/sys/stdtypes.h
-util.o: /usr/ucbinclude/sys/sysmacros.h
-util.o: /usr/ucbinclude/sys/time.h
-util.o: /usr/ucbinclude/sys/times.h
-util.o: /usr/ucbinclude/sys/ttold.h
-util.o: /usr/ucbinclude/sys/ttychars.h
-util.o: /usr/ucbinclude/sys/ttycom.h
-util.o: /usr/ucbinclude/sys/ttydev.h
-util.o: /usr/ucbinclude/sys/types.h
-util.o: /usr/ucbinclude/time.h
-util.o: /usr/ucbinclude/varargs.h
-util.o: /usr/ucbinclude/vfork.h
-util.o: /usr/ucbinclude/vm/faultcode.h
-util.o: EXTERN.h
-util.o: arg.h
-util.o: array.h
-util.o: cmd.h
-util.o: config.h
-util.o: embed.h
-util.o: form.h
-util.o: handy.h
-util.o: hash.h
-util.o: perl.h
-util.o: regexp.h
-util.o: spat.h
-util.o: stab.h
-util.o: str.h
-util.o: unixish.h
-util.o: util.c
-util.o: util.h
-usersub.o: 
-usersub.o: /usr/ucbinclude/ctype.h
-usersub.o: /usr/ucbinclude/dirent.h
-usersub.o: /usr/ucbinclude/errno.h
-usersub.o: /usr/ucbinclude/machine/param.h
-usersub.o: /usr/ucbinclude/machine/setjmp.h
-usersub.o: /usr/ucbinclude/ndbm.h
-usersub.o: /usr/ucbinclude/netinet/in.h
-usersub.o: /usr/ucbinclude/setjmp.h
-usersub.o: /usr/ucbinclude/stdio.h
-usersub.o: /usr/ucbinclude/sys/dirent.h
-usersub.o: /usr/ucbinclude/sys/errno.h
-usersub.o: /usr/ucbinclude/sys/filio.h
-usersub.o: /usr/ucbinclude/sys/ioccom.h
-usersub.o: /usr/ucbinclude/sys/ioctl.h
-usersub.o: /usr/ucbinclude/sys/param.h
-usersub.o: /usr/ucbinclude/sys/signal.h
-usersub.o: /usr/ucbinclude/sys/sockio.h
-usersub.o: /usr/ucbinclude/sys/stat.h
-usersub.o: /usr/ucbinclude/sys/stdtypes.h
-usersub.o: /usr/ucbinclude/sys/sysmacros.h
-usersub.o: /usr/ucbinclude/sys/time.h
-usersub.o: /usr/ucbinclude/sys/times.h
-usersub.o: /usr/ucbinclude/sys/ttold.h
-usersub.o: /usr/ucbinclude/sys/ttychars.h
-usersub.o: /usr/ucbinclude/sys/ttycom.h
-usersub.o: /usr/ucbinclude/sys/ttydev.h
-usersub.o: /usr/ucbinclude/sys/types.h
-usersub.o: /usr/ucbinclude/time.h
-usersub.o: /usr/ucbinclude/vm/faultcode.h
-usersub.o: EXTERN.h
-usersub.o: arg.h
-usersub.o: array.h
-usersub.o: cmd.h
-usersub.o: config.h
-usersub.o: embed.h
-usersub.o: form.h
-usersub.o: handy.h
-usersub.o: hash.h
-usersub.o: perl.h
-usersub.o: regexp.h
-usersub.o: spat.h
-usersub.o: stab.h
-usersub.o: str.h
-usersub.o: unixish.h
-usersub.o: usersub.c
-usersub.o: util.h
-Makefile: Makefile.SH config.sh ; /bin/sh Makefile.SH
-makedepend: makedepend.SH config.sh ; /bin/sh makedepend.SH
-h2ph: h2ph.SH config.sh ; /bin/sh h2ph.SH
-# WARNING: Put nothing here or make depend will gobble it up!
index c99e358..a2631ae 100644 (file)
--- a/malloc.c
+++ b/malloc.c
@@ -64,7 +64,7 @@ static int morecore();
  */
 union  overhead {
        union   overhead *ov_next;      /* when free */
-#if ALIGNBYTES > 4
+#if MEM_ALIGNBYTES > 4
        double  strut;                  /* alignment problems */
 #endif
        struct {
diff --git a/match_stuff b/match_stuff
deleted file mode 100644 (file)
index b13d2b7..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-    len = sv->sv_cur;
-    e = sv->sv_ptr + len;
-    if (delim == '\'')
-       d = e;
-    else
-       d = sv->sv_ptr;
-    for (; d < e; d++) {
-       if (*d == '\\')
-           d++;
-       else if ((*d == '$' && d[1] && d[1] != '|' && d[1] != ')') ||
-                (*d == '@')) {
-           lex_stuff = newSVsv(sv);
-           d = scan_ident(d,bufend,buf,FALSE);
-           (void)gv_fetchpv(buf,TRUE);         /* make sure it's created */
-           for (; d < e; d++) {
-               if (*d == '\\')
-                   d++;
-               else if (*d == '$' && d[1] && d[1] != '|' && d[1] != ')') {
-                   d = scan_ident(d,bufend,buf,FALSE);
-                   (void)gv_fetchpv(buf,TRUE);
-               }
-               else if (*d == '@') {
-                   d = scan_ident(d,bufend,buf,FALSE);
-                   if (strEQ(buf,"ARGV") || strEQ(buf,"ENV") ||
-                     strEQ(buf,"SIG") || strEQ(buf,"INC"))
-                       (void)gv_fetchpv(buf,TRUE);
-               }
-           }
-           pm->op_pmflags |= PMf_RUNTIME;
-           goto got_pat;               /* skip compiling for now */
-       }
-    }
-    if (pm->op_pmflags & PMf_FOLD)
-       StructCopy(pm, &savepm, PMOP);
-    scan_prefix(pm,sv->sv_ptr,len);
-    if ((pm->op_pmflags & PMf_ALL) && (pm->op_pmflags & PMf_SCANFIRST)) {
-       fbm_compile(pm->op_pmshort, pm->op_pmflags & PMf_FOLD);
-       pm->op_pmregexp = regcomp(sv->sv_ptr,sv->sv_ptr+len,
-           pm->op_pmflags & PMf_FOLD);
-               /* Note that this regexp can still be used if someone says
-                * something like /a/ && s//b/;  so we can't delete it.
-                */
-    }
-    else {
-       if (pm->op_pmflags & PMf_FOLD)
-           StructCopy(&savepm, pm, PMOP);
-       if (pm->op_pmshort)
-           fbm_compile(pm->op_pmshort, pm->op_pmflags & PMf_FOLD);
-       pm->op_pmregexp = regcomp(sv->sv_ptr,sv->sv_ptr+len,
-           pm->op_pmflags & PMf_FOLD);
-       hoistmust(pm);
-    }
-  got_pat:
diff --git a/mg.c b/mg.c
index a78d4da..da11119 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -85,23 +85,26 @@ SV* sv;
     MAGIC* mg;
     char *s;
     STRLEN len;
-    U32 savemagic = SvMAGICAL(sv);
-
-    SvMAGICAL_off(sv);
-    SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
 
     for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
        MGVTBL* vtbl = mg->mg_virtual;
-       if (vtbl && vtbl->svt_len)
-           return (*vtbl->svt_len)(sv, mg);
-    }
-    mg_get(sv);
-    s = SvPV(sv, len);
+       if (vtbl && vtbl->svt_len) {
+           U32 savemagic = SvMAGICAL(sv);
 
-    SvFLAGS(sv) |= savemagic;
-    if (SvGMAGICAL(sv))
-       SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
+           SvMAGICAL_off(sv);
+           SvFLAGS(sv) |= (SvFLAGS(sv)&(SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
+
+           len = (*vtbl->svt_len)(sv, mg);
 
+           SvFLAGS(sv) |= savemagic;
+           if (SvGMAGICAL(sv))
+               SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
+
+           return len;
+       }
+    }
+
+    s = SvPV(sv, len);
     return len;
 }
 
@@ -176,7 +179,7 @@ SV* sv;
            (*vtbl->svt_free)(sv, mg);
        if (mg->mg_ptr && mg->mg_type != 'g')
            Safefree(mg->mg_ptr);
-       if (mg->mg_obj != sv)
+       if (mg->mg_flags & MGf_REFCOUNTED)
            SvREFCNT_dec(mg->mg_obj);
        Safefree(mg);
     }
@@ -456,7 +459,7 @@ SV* sv;
 MAGIC* mg;
 {
     register char *s;
-    I32 i;
+    U32 i;
     s = SvPV(sv,na);
     my_setenv(mg->mg_ptr,s);
                            /* And you'll never guess what the dog had */
@@ -478,6 +481,15 @@ MAGIC* mg;
 }
 
 int
+magic_clearenv(sv,mg)
+SV* sv;
+MAGIC* mg;
+{
+    my_setenv(mg->mg_ptr,Nullch);
+    return 0;
+}
+
+int
 magic_setsig(sv,mg)
 SV* sv;
 MAGIC* mg;
@@ -759,7 +771,7 @@ MAGIC* mg;
     s = SvPV(sv, na);
     if (*s == '*' && s[1])
        s++;
-    gv = gv_fetchpv(s,TRUE);
+    gv = gv_fetchpv(s,TRUE, SVt_PVGV);
     if (sv == (SV*)gv)
        return 0;
     if (GvGP(sv))
@@ -880,7 +892,7 @@ MAGIC* mg;
        perldb = i;
        break;
     case '\024':       /* ^T */
-       basetime = (time_t)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
+       basetime = (Time_t)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
        break;
     case '\027':       /* ^W */
        dowarn = (bool)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
@@ -894,12 +906,12 @@ MAGIC* mg;
     case '^':
        Safefree(IoTOP_NAME(GvIO(defoutgv)));
        IoTOP_NAME(GvIO(defoutgv)) = s = savestr(SvPV(sv,na));
-       IoTOP_GV(GvIO(defoutgv)) = gv_fetchpv(s,TRUE);
+       IoTOP_GV(GvIO(defoutgv)) = gv_fetchpv(s,TRUE, SVt_PVIO);
        break;
     case '~':
        Safefree(IoFMT_NAME(GvIO(defoutgv)));
        IoFMT_NAME(GvIO(defoutgv)) = s = savestr(SvPV(sv,na));
-       IoFMT_GV(GvIO(defoutgv)) = gv_fetchpv(s,TRUE);
+       IoFMT_GV(GvIO(defoutgv)) = gv_fetchpv(s,TRUE, SVt_PVIO);
        break;
     case '=':
        IoPAGE_LEN(GvIO(defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
@@ -970,10 +982,12 @@ MAGIC* mg;
            break;                              /* don't do magic till later */
        }
 #ifdef HAS_SETRUID
-       (void)setruid((UIDTYPE)uid);
+       (void)setruid((Uid_t)uid);
 #else
 #ifdef HAS_SETREUID
-       (void)setreuid((UIDTYPE)uid, (UIDTYPE)-1);
+       (void)setreuid((Uid_t)uid, (Uid_t)-1);
+#ifdef HAS_SETRESUID
+      (void)setresuid((Uid_t)uid, (Uid_t)-1, (Uid_t)-1);
 #else
        if (uid == euid)                /* special case $< = $> */
            (void)setuid(uid);
@@ -981,6 +995,7 @@ MAGIC* mg;
            croak("setruid() not implemented");
 #endif
 #endif
+#endif
        uid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
        tainting |= (euid != uid || egid != gid);
        break;
@@ -991,10 +1006,13 @@ MAGIC* mg;
            break;                              /* don't do magic till later */
        }
 #ifdef HAS_SETEUID
-       (void)seteuid((UIDTYPE)euid);
+       (void)seteuid((Uid_t)euid);
 #else
 #ifdef HAS_SETREUID
-       (void)setreuid((UIDTYPE)-1, (UIDTYPE)euid);
+       (void)setreuid((Uid_t)-1, (Uid_t)euid);
+#else
+#ifdef HAS_SETRESUID
+       (void)setresuid((Uid_t)-1, (Uid_t)euid, (Uid_t)-1);
 #else
        if (euid == uid)                /* special case $> = $< */
            setuid(euid);
@@ -1002,6 +1020,7 @@ MAGIC* mg;
            croak("seteuid() not implemented");
 #endif
 #endif
+#endif
        euid = (I32)geteuid();
        tainting |= (euid != uid || egid != gid);
        break;
@@ -1012,10 +1031,13 @@ MAGIC* mg;
            break;                              /* don't do magic till later */
        }
 #ifdef HAS_SETRGID
-       (void)setrgid((GIDTYPE)gid);
+       (void)setrgid((Gid_t)gid);
 #else
 #ifdef HAS_SETREGID
-       (void)setregid((GIDTYPE)gid, (GIDTYPE)-1);
+       (void)setregid((Gid_t)gid, (Gid_t)-1);
+#else
+#ifdef HAS_SETRESGID
+      (void)setresgid((Gid_t)gid, (Gid_t)-1, (Gid_t) 1);
 #else
        if (gid == egid)                        /* special case $( = $) */
            (void)setgid(gid);
@@ -1023,6 +1045,7 @@ MAGIC* mg;
            croak("setrgid() not implemented");
 #endif
 #endif
+#endif
        gid = (I32)getgid();
        tainting |= (euid != uid || egid != gid);
        break;
@@ -1033,10 +1056,13 @@ MAGIC* mg;
            break;                              /* don't do magic till later */
        }
 #ifdef HAS_SETEGID
-       (void)setegid((GIDTYPE)egid);
+       (void)setegid((Gid_t)egid);
 #else
 #ifdef HAS_SETREGID
-       (void)setregid((GIDTYPE)-1, (GIDTYPE)egid);
+       (void)setregid((Gid_t)-1, (Gid_t)egid);
+#else
+#ifdef HAS_SETRESGID
+       (void)setresgid((Gid_t)-1, (Gid_t)egid, (Gid_t)-1);
 #else
        if (egid == gid)                        /* special case $) = $( */
            (void)setgid(egid);
@@ -1044,6 +1070,7 @@ MAGIC* mg;
            croak("setegid() not implemented");
 #endif
 #endif
+#endif
        egid = (I32)getegid();
        tainting |= (euid != uid || egid != gid);
        break;
@@ -1131,15 +1158,15 @@ I32 sig;
 
     gv = gv_fetchpv(
        SvPVx(*hv_fetch(GvHVn(siggv),sig_name[sig],strlen(sig_name[sig]),
-         TRUE), na), TRUE);
+         TRUE), na), TRUE, SVt_PVCV);
     cv = GvCV(gv);
     if (!cv && *sig_name[sig] == 'C' && instr(sig_name[sig],"LD")) {
        if (sig_name[sig][1] == 'H')
            gv = gv_fetchpv(SvPVx(*hv_fetch(GvHVn(siggv),"CLD",3,TRUE), na),
-             TRUE);
+             TRUE, SVt_PVCV);
        else
            gv = gv_fetchpv(SvPVx(*hv_fetch(GvHVn(siggv),"CHLD",4,TRUE), na),
-             TRUE);
+             TRUE, SVt_PVCV);
        cv = GvCV(gv);  /* gag */
     }
     if (!cv) {
diff --git a/mg.h b/mg.h
index c18c426..b2cd7d6 100644 (file)
--- a/mg.h
+++ b/mg.h
@@ -28,5 +28,6 @@ struct magic {
 };
 
 #define MGf_TAINTEDDIR 1
+#define MGf_REFCOUNTED 2
 #define MgTAINTEDDIR(mg) (mg->mg_flags & MGf_TAINTEDDIR)
 #define MgTAINTEDDIR_on(mg) (mg->mg_flags |= MGf_TAINTEDDIR)
index e0b75ff..0e1b0f9 100644 (file)
@@ -32,8 +32,5 @@ void
 perl_init_ext()
 {
     char *file = __FILE__;
-
-#ifdef USE_DYNAMIC_LOADING
-    boot_DynamicLoader();
-#endif
+    /* Do not delete this line--writemain depends on it */
 }
similarity index 100%
rename from libperl.rlb
rename to miniperlmain.x
diff --git a/net b/net
new file mode 120000 (symlink)
index 0000000..c15a429
--- /dev/null
+++ b/net
@@ -0,0 +1 @@
+/scalpel/lwall/netperl
\ No newline at end of file
diff --git a/oldcmdcruft b/oldcmdcruft
deleted file mode 100644 (file)
index d4e6572..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-#ifdef NOTDEF
-    if (go_to) {
-       if (op->cop_label && strEQ(go_to,op->cop_label))
-           goto_targ = go_to = Nullch;         /* here at last */
-       else {
-           switch (op->cop_type) {
-           case COP_IF:
-               oldspat = curspat;
-               oldsave = savestack->av_fill;
-#ifdef DEBUGGING
-               olddlevel = dlevel;
-#endif
-               retstr = &sv_yes;
-               newsp = -2;
-               if (op->uop.ccop_true) {
-#ifdef DEBUGGING
-                   if (debug) {
-                       debname[dlevel] = 't';
-                       debdelim[dlevel] = '_';
-                       if (++dlevel >= dlmax)
-                           deb_growlevel();
-                   }
-#endif
-                   newsp = cop_exec(op->uop.ccop_true,gimme && (opflags & COPf_TERM),sp);
-                   st = stack->av_array;       /* possibly reallocated */
-                   retstr = st[newsp];
-               }
-               if (!goto_targ)
-                   go_to = Nullch;
-               curspat = oldspat;
-               if (savestack->av_fill > oldsave)
-                   leave_scope(oldsave);
-#ifdef DEBUGGING
-               dlevel = olddlevel;
-#endif
-               op = op->uop.ccop_alt;
-               goto tail_recursion_entry;
-           case COP_ELSE:
-               oldspat = curspat;
-               oldsave = savestack->av_fill;
-#ifdef DEBUGGING
-               olddlevel = dlevel;
-#endif
-               retstr = &sv_undef;
-               newsp = -2;
-               if (op->uop.ccop_true) {
-#ifdef DEBUGGING
-                   if (debug) {
-                       debname[dlevel] = 'e';
-                       debdelim[dlevel] = '_';
-                       if (++dlevel >= dlmax)
-                           deb_growlevel();
-                   }
-#endif
-                   newsp = cop_exec(op->uop.ccop_true,gimme && (opflags & COPf_TERM),sp);
-                   st = stack->av_array;       /* possibly reallocated */
-                   retstr = st[newsp];
-               }
-               if (!goto_targ)
-                   go_to = Nullch;
-               curspat = oldspat;
-               if (savestack->av_fill > oldsave)
-                   leave_scope(oldsave);
-#ifdef DEBUGGING
-               dlevel = olddlevel;
-#endif
-               break;
-           case COP_BLOCK:
-           case COP_WHILE:
-               if (!(opflags & COPf_ONCE)) {
-                   opflags |= COPf_ONCE;
-                   if (++loop_ptr >= loop_max) {
-                       loop_max += 128;
-                       Renew(loop_stack, loop_max, struct loop);
-                   }
-                   loop_stack[loop_ptr].loop_label = op->cop_label;
-                   loop_stack[loop_ptr].loop_sp = sp;
-#ifdef DEBUGGING
-                   if (debug & 4) {
-                       deb("(Pushing label #%d %s)\n",
-                         loop_ptr, op->cop_label ? op->cop_label : "");
-                   }
-#endif
-               }
-#ifdef JMPCLOBBER
-               opparm = op;
-#endif
-               match = setjmp(loop_stack[loop_ptr].loop_env);
-               if (match) {
-                   st = stack->av_array;       /* possibly reallocated */
-#ifdef JMPCLOBBER
-                   op = opparm;
-                   opflags = op->cop_flags|COPf_ONCE;
-#endif
-                   if (savestack->av_fill > oldsave)
-                       leave_scope(oldsave);
-                   switch (match) {
-                   default:
-                       fatal("longjmp returned bad value (%d)",match);
-                   case OP_LAST:       /* not done unless go_to found */
-                       go_to = Nullch;
-                       if (lastretstr) {
-                           retstr = lastretstr;
-                           newsp = -2;
-                       }
-                       else {
-                           newsp = sp + lastsize;
-                           retstr = st[newsp];
-                       }
-#ifdef DEBUGGING
-                       olddlevel = dlevel;
-#endif
-                       curspat = oldspat;
-                       goto next_op;
-                   case OP_NEXT:       /* not done unless go_to found */
-                       go_to = Nullch;
-#ifdef JMPCLOBBER
-                       newsp = -2;
-                       retstr = &sv_undef;
-#endif
-                       goto next_iter;
-                   case OP_REDO:       /* not done unless go_to found */
-                       go_to = Nullch;
-#ifdef JMPCLOBBER
-                       newsp = -2;
-                       retstr = &sv_undef;
-#endif
-                       goto doit;
-                   }
-               }
-               oldspat = curspat;
-               oldsave = savestack->av_fill;
-#ifdef DEBUGGING
-               olddlevel = dlevel;
-#endif
-               if (op->uop.ccop_true) {
-#ifdef DEBUGGING
-                   if (debug) {
-                       debname[dlevel] = 't';
-                       debdelim[dlevel] = '_';
-                       if (++dlevel >= dlmax)
-                           deb_growlevel();
-                   }
-#endif
-                   newsp = cop_exec(op->uop.ccop_true,gimme && (opflags & COPf_TERM),sp);
-                   st = stack->av_array;       /* possibly reallocated */
-                   if (newsp >= 0)
-                       retstr = st[newsp];
-               }
-               if (!goto_targ) {
-                   go_to = Nullch;
-                   goto next_iter;
-               }
-#ifdef DEBUGGING
-               dlevel = olddlevel;
-#endif
-               if (op->uop.ccop_alt) {
-#ifdef DEBUGGING
-                   if (debug) {
-                       debname[dlevel] = 'a';
-                       debdelim[dlevel] = '_';
-                       if (++dlevel >= dlmax)
-                           deb_growlevel();
-                   }
-#endif
-                   newsp = cop_exec(op->uop.ccop_alt,gimme && (opflags & COPf_TERM),sp);
-                   st = stack->av_array;       /* possibly reallocated */
-                   if (newsp >= 0)
-                       retstr = st[newsp];
-               }
-               if (goto_targ)
-                   break;
-               go_to = Nullch;
-               goto finish_while;
-           }
-           op = op->cop_next;
-           if (op && op->cop_head == op)
-                                       /* reached end of while loop */
-               return sp;              /* targ isn't in this block */
-           if (opflags & COPf_ONCE) {
-#ifdef DEBUGGING
-               if (debug & 4) {
-                   tmps = loop_stack[loop_ptr].loop_label;
-                   deb("(Popping label #%d %s)\n",loop_ptr,
-                       tmps ? tmps : "" );
-               }
-#endif
-               loop_ptr--;
-           }
-           goto tail_recursion_entry;
-       }
-    }
-#endif
-
-#ifdef DEBUGGING
-    if (debug) {
-       if (debug & 2) {
-           deb("%s     (%lx)   r%lx    t%lx    a%lx    n%lx    cs%lx\n",
-               cop_name[op->cop_type],op,op->cop_expr,
-               op->uop.ccop_true,op->uop.ccop_alt,op->cop_next,
-               curspat);
-       }
-       debname[dlevel] = cop_name[op->cop_type][0];
-       debdelim[dlevel] = '!';
-       if (++dlevel >= dlmax)
-           deb_growlevel();
-    }
-#endif
-
-    /* Here is some common optimization */
-
-    if (opflags & COPf_COND) {
-       switch (opflags & COPf_OPTIMIZE) {
-
-       case COPo_FALSE:
-           retstr = op->cop_short;
-           newsp = -2;
-           match = FALSE;
-           if (opflags & COPf_NESURE)
-               goto maybe;
-           break;
-       case COPo_TRUE:
-           retstr = op->cop_short;
-           newsp = -2;
-           match = TRUE;
-           if (opflags & COPf_EQSURE)
-               goto flipmaybe;
-           break;
-
-       case COPo_REG:
-           retstr = GV_STR(op->cop_stab);
-           newsp = -2;
-           match = SvTRUE(retstr);     /* => retstr = retstr, c2 should fix */
-           if (opflags & (match ? COPf_EQSURE : COPf_NESURE))
-               goto flipmaybe;
-           break;
-
-       case COPo_ANCHOR:       /* /^pat/ optimization */
-           if (multiline) {
-               if (*op->cop_short->sv_ptr && !(opflags & COPf_EQSURE))
-                   goto scanner;       /* just unanchor it */
-               else
-                   break;              /* must evaluate */
-           }
-           match = 0;
-           goto strop;
-
-       case COPo_STROP:                /* string op optimization */
-           match = 1;
-         strop:
-           retstr = GV_STR(op->cop_stab);
-           newsp = -2;
-#ifndef I286
-           if (*op->cop_short->sv_ptr == *SvPV(retstr) &&
-                   (match ? retstr->sv_cur == op->cop_slen - 1 :
-                            retstr->sv_cur >= op->cop_slen) &&
-                   bcmp(op->cop_short->sv_ptr, SvPV(retstr),
-                     op->cop_slen) == 0 ) {
-               if (opflags & COPf_EQSURE) {
-                   if (sawampersand && (opflags & COPf_OPTIMIZE) != COPo_STROP) {
-                       curspat = Nullpm;
-                       if (leftstab)
-                           sv_setpvn(GvSV(leftstab),"",0);
-                       if (amperstab)
-                           sv_setsv(GvSV(amperstab),op->cop_short);
-                       if (rightstab)
-                           sv_setpvn(GvSV(rightstab),
-                             retstr->sv_ptr + op->cop_slen,
-                             retstr->sv_cur - op->cop_slen);
-                   }
-                   if (op->cop_spat)
-                       lastspat = op->cop_spat;
-                   match = !(opflags & COPf_FIRSTNEG);
-                   retstr = match ? &sv_yes : &sv_no;
-                   goto flipmaybe;
-               }
-           }
-           else if (opflags & COPf_NESURE) {
-               match = opflags & COPf_FIRSTNEG;
-               retstr = match ? &sv_yes : &sv_no;
-               goto flipmaybe;
-           }
-#else
-           {
-               char *zap1, *zap2, zap1c, zap2c;
-               int  zaplen;
-               int lenok;
-
-               zap1 = op->cop_short->sv_ptr;
-               zap2 = SvPV(retstr);
-               zap1c = *zap1;
-               zap2c = *zap2;
-               zaplen = op->cop_slen;
-               if (match)
-                   lenok = (retstr->sv_cur == op->cop_slen - 1);
-               else
-                   lenok = (retstr->sv_cur >= op->cop_slen);
-               if ((zap1c == zap2c) && lenok && (bcmp(zap1, zap2, zaplen) == 0)) {
-                   if (opflags & COPf_EQSURE) {
-                       if (sawampersand &&
-                         (opflags & COPf_OPTIMIZE) != COPo_STROP) {
-                           curspat = Nullpm;
-                           if (leftstab)
-                               sv_setpvn(GvSV(leftstab),"",0);
-                           if (amperstab)
-                               sv_setsv(GvSV(amperstab),op->cop_short);
-                           if (rightstab)
-                               sv_setpvn(GvSV(rightstab),
-                                        retstr->sv_ptr + op->cop_slen,
-                                        retstr->sv_cur - op->cop_slen);
-                       }
-                       if (op->cop_spat)
-                           lastspat = op->cop_spat;
-                       match = !(opflags & COPf_FIRSTNEG);
-                       retstr = match ? &sv_yes : &sv_no;
-                       goto flipmaybe;
-                   }
-               }
-               else if (opflags & COPf_NESURE) {
-                   match = opflags & COPf_FIRSTNEG;
-                   retstr = match ? &sv_yes : &sv_no;
-                   goto flipmaybe;
-               }
-           }
-#endif
-           break;                      /* must evaluate */
-
-       case COPo_SCAN:                 /* non-anchored search */
-         scanner:
-           retstr = GV_STR(op->cop_stab);
-           newsp = -2;
-           if (retstr->sv_pok & SVp_STUDIED)
-               if (screamfirst[op->cop_short->sv_rare] >= 0)
-                   tmps = screaminstr(retstr, op->cop_short);
-               else
-                   tmps = Nullch;
-           else {
-               tmps = SvPV(retstr);            /* make sure it's pok */
-#ifndef lint
-               tmps = fbm_instr((unsigned char*)tmps,
-                   (unsigned char*)tmps + retstr->sv_cur, op->cop_short);
-#endif
-           }
-           if (tmps) {
-               if (opflags & COPf_EQSURE) {
-                   ++op->cop_short->sv_u.sv_useful;
-                   if (sawampersand) {
-                       curspat = Nullpm;
-                       if (leftstab)
-                           sv_setpvn(GvSV(leftstab),retstr->sv_ptr,
-                             tmps - retstr->sv_ptr);
-                       if (amperstab)
-                           sv_setpvn(GvSV(amperstab),
-                             tmps, op->cop_short->sv_cur);
-                       if (rightstab)
-                           sv_setpvn(GvSV(rightstab),
-                             tmps + op->cop_short->sv_cur,
-                             retstr->sv_cur - (tmps - retstr->sv_ptr) -
-                               op->cop_short->sv_cur);
-                   }
-                   lastspat = op->cop_spat;
-                   match = !(opflags & COPf_FIRSTNEG);
-                   retstr = match ? &sv_yes : &sv_no;
-                   goto flipmaybe;
-               }
-               else
-                   hint = tmps;
-           }
-           else {
-               if (opflags & COPf_NESURE) {
-                   ++op->cop_short->sv_u.sv_useful;
-                   match = opflags & COPf_FIRSTNEG;
-                   retstr = match ? &sv_yes : &sv_no;
-                   goto flipmaybe;
-               }
-           }
-           if (--op->cop_short->sv_u.sv_useful < 0) {
-               opflags &= ~COPf_OPTIMIZE;
-               opflags |= COPo_EVAL;   /* never try this optimization again */
-               op->cop_flags = (opflags & ~COPf_ONCE);
-           }
-           break;                      /* must evaluate */
-
-       case COPo_NUMOP:                /* numeric op optimization */
-           retstr = GV_STR(op->cop_stab);
-           newsp = -2;
-           switch (op->cop_slen) {
-           case OP_EQ:
-               if (dowarn) {
-                   if ((!retstr->sv_nok && !looks_like_number(retstr)))
-                       warn("Possible use of == on string value");
-               }
-               match = (SvNV(retstr) == op->cop_short->sv_u.sv_nv);
-               break;
-           case OP_NE:
-               match = (SvNV(retstr) != op->cop_short->sv_u.sv_nv);
-               break;
-           case OP_LT:
-               match = (SvNV(retstr) <  op->cop_short->sv_u.sv_nv);
-               break;
-           case OP_LE:
-               match = (SvNV(retstr) <= op->cop_short->sv_u.sv_nv);
-               break;
-           case OP_GT:
-               match = (SvNV(retstr) >  op->cop_short->sv_u.sv_nv);
-               break;
-           case OP_GE:
-               match = (SvNV(retstr) >= op->cop_short->sv_u.sv_nv);
-               break;
-           }
-           if (match) {
-               if (opflags & COPf_EQSURE) {
-                   retstr = &sv_yes;
-                   goto flipmaybe;
-               }
-           }
-           else if (opflags & COPf_NESURE) {
-               retstr = &sv_no;
-               goto flipmaybe;
-           }
-           break;                      /* must evaluate */
-
-       case COPo_INDGETS:              /* while (<$foo>) */
-           last_in_stab = newGV(SvPV(GV_STR(op->cop_stab)),TRUE);
-           if (!GvIO(last_in_stab))
-               GvIO(last_in_stab) = newIO();
-           goto dogets;
-       case COPo_GETS:                 /* really a while (<file>) */
-           last_in_stab = op->cop_stab;
-         dogets:
-           fp = GvIO(last_in_stab)->ifp;
-           retstr = GvSV(defstab);
-           newsp = -2;
-         keepgoing:
-           if (fp && sv_gets(retstr, fp, 0)) {
-               if (*retstr->sv_ptr == '0' && retstr->sv_cur == 1)
-                   match = FALSE;
-               else
-                   match = TRUE;
-               GvIO(last_in_stab)->lines++;
-           }
-           else if (GvIO(last_in_stab)->flags & IOf_ARGV) {
-               if (!fp)
-                   goto doeval;        /* first time through */
-               fp = nextargv(last_in_stab);
-               if (fp)
-                   goto keepgoing;
-               (void)do_close(last_in_stab,FALSE);
-               GvIO(last_in_stab)->flags |= IOf_START;
-               retstr = &sv_undef;
-               match = FALSE;
-           }
-           else {
-               retstr = &sv_undef;
-               match = FALSE;
-           }
-           goto flipmaybe;
-       case COPo_EVAL:
-           break;
-       case COPo_UNFLIP:
-           while (tmps_max > tmps_base) {      /* clean up after last oldeval */
-               sv_free(tmps_list[tmps_max]);
-               tmps_list[tmps_max--] = Nullsv;
-           }
-           newsp = oldeval(Nullsv,op->cop_expr,gimme && (opflags & COPf_TERM),sp);
-           st = stack->av_array;       /* possibly reallocated */
-           retstr = st[newsp];
-           match = SvTRUE(retstr);
-           if (op->cop_expr->arg_type == OP_FLIP)      /* undid itself? */
-               opflags = copyopt(op,op->cop_expr[3].arg_ptr.arg_op);
-           goto maybe;
-       case COPo_CHOP:
-           retstr = GvSV(op->cop_stab);
-           newsp = -2;
-           match = (retstr->sv_cur != 0);
-           tmps = SvPV(retstr);
-           tmps += retstr->sv_cur - match;
-           sv_setpvn(&strchop,tmps,match);
-           *tmps = '\0';
-           retstr->sv_nok = 0;
-           retstr->sv_cur = tmps - retstr->sv_ptr;
-           SvSETMAGIC(retstr);
-           retstr = &strchop;
-           goto flipmaybe;
-       case COPo_ARRAY:
-           match = op->cop_short->sv_u.sv_useful; /* just to get register */
-
-           if (match < 0) {            /* first time through here? */
-               ar = GvAVn(op->cop_expr[1].arg_ptr.arg_stab);
-               aryoptsave = savestack->av_fill;
-               save_sptr(&GvSV(op->cop_stab));
-               save_long(&op->cop_short->sv_u.sv_useful);
-           }
-           else {
-               ar = GvAV(op->cop_expr[1].arg_ptr.arg_stab);
-               if (op->cop_type != COP_WHILE && savestack->av_fill > firstsave)
-                   leave_scope(firstsave);
-           }
-
-           if (match >= ar->av_fill) { /* we're in LAST, probably */
-               if (match < 0 &&                /* er, probably not... */
-                 savestack->av_fill > aryoptsave)
-                   leave_scope(aryoptsave);
-               retstr = &sv_undef;
-               op->cop_short->sv_u.sv_useful = -1;     /* actually redundant */
-               match = FALSE;
-           }
-           else {
-               match++;
-               if (!(retstr = ar->av_array[match]))
-                   retstr = av_fetch(ar,match,TRUE);
-               GvSV(op->cop_stab) = retstr;
-               op->cop_short->sv_u.sv_useful = match;
-               match = TRUE;
-           }
-           newsp = -2;
-           goto maybe;
-       case COPo_D1:
-           break;
-       case COPo_D0:
-           if (DBsingle->sv_u.sv_nv != 0)
-               break;
-           if (DBsignal->sv_u.sv_nv != 0)
-               break;
-           if (DBtrace->sv_u.sv_nv != 0)
-               break;
-           goto next_op;
-       }
-
-    /* we have tried to make this normal case as abnormal as possible */
-
-    doeval:
-       if (gimme == G_ARRAY) {
-           lastretstr = Nullsv;
-           lastspbase = sp;
-           lastsize = newsp - sp;
-           if (lastsize < 0)
-               lastsize = 0;
-       }
-       else
-           lastretstr = retstr;
-       while (tmps_max > tmps_base) {  /* clean up after last oldeval */
-           sv_free(tmps_list[tmps_max]);
-           tmps_list[tmps_max--] = Nullsv;
-       }
-       newsp = oldeval(Nullsv,op->cop_expr,
-         gimme && (opflags & COPf_TERM) && op->cop_type == COP_EXPR &&
-               !op->uop.acop_expr,
-         sp);
-       st = stack->av_array;   /* possibly reallocated */
-       retstr = st[newsp];
-       if (newsp > sp && retstr)
-           match = SvTRUE(retstr);
-       else
-           match = FALSE;
-       goto maybe;
-
-    /* if flipflop was true, flop it */
-
-    flipmaybe:
-       if (match && opflags & COPf_FLIP) {
-           while (tmps_max > tmps_base) {      /* clean up after last oldeval */
-               sv_free(tmps_list[tmps_max]);
-               tmps_list[tmps_max--] = Nullsv;
-           }
-           if (op->cop_expr->arg_type == OP_FLOP) {    /* currently toggled? */
-               newsp = oldeval(Nullsv,op->cop_expr,G_SCALAR,sp);/*let oldeval undo it*/
-               opflags = copyopt(op,op->cop_expr[3].arg_ptr.arg_op);
-           }
-           else {
-               newsp = oldeval(Nullsv,op->cop_expr,G_SCALAR,sp);/* let oldeval do it */
-               if (op->cop_expr->arg_type == OP_FLOP)  /* still toggled? */
-                   opflags = copyopt(op,op->cop_expr[4].arg_ptr.arg_op);
-           }
-       }
-       else if (opflags & COPf_FLIP) {
-           if (op->cop_expr->arg_type == OP_FLOP) {    /* currently toggled? */
-               match = TRUE;                           /* force on */
-           }
-       }
-
-    /* at this point, match says whether our expression was true */
-
-    maybe:
-       if (opflags & COPf_INVERT)
-           match = !match;
-       if (!match)
-           goto next_op;
-    }
-#ifdef TAINT
-    tainted = 0;       /* modifier doesn't affect regular expression */
-#endif
diff --git a/op.c b/op.c
index 86a870e..6f4a46a 100644 (file)
--- a/op.c
+++ b/op.c
@@ -303,14 +303,16 @@ void
 op_free(op)
 OP *op;
 {
-    register OP *kid;
+    register OP *kid, *nextkid;
 
     if (!op)
        return;
 
     if (op->op_flags & OPf_KIDS) {
-       for (kid = cUNOP->op_first; kid; kid = kid->op_sibling)
+       for (kid = cUNOP->op_first; kid; kid = nextkid) {
+           nextkid = kid->op_sibling; /* Get before next freeing kid */
            op_free(kid);
+       }
     }
 
 
@@ -557,7 +559,8 @@ OP *op;
     case OP_RV2SV:
     case OP_RV2AV:
     case OP_RV2HV:
-       if (!(op->op_flags & OPf_INTRO))
+       if (!(op->op_flags & OPf_INTRO) &&
+               (!op->op_sibling || op->op_sibling->op_type != OP_READLINE))
            useless = "a variable";
        break;
 
@@ -706,7 +709,7 @@ OP *op;
            curcop = &compiling;
        }
        op->op_flags &= ~OPf_PARENS;
-       if (needblockscope)
+       if (hints & HINT_BLOCK_SCOPE)
            op->op_flags |= OPf_PARENS;
     }
     else
@@ -745,7 +748,8 @@ I32 type;
        if ((type == OP_UNDEF) && !(op->op_flags & OPf_STACKED)) {
            op->op_type = OP_RV2CV;             /* entersubr => rv2cv */
            op->op_ppaddr = ppaddr[OP_RV2CV];
-           null(cUNOP->op_first);      /* disable pushmark */
+           assert(cUNOP->op_first->op_type == OP_NULL);
+           null(((LISTOP*)cUNOP->op_first)->op_first); /* disable pushmark */
            break;
        }
        /* FALL THROUGH */
@@ -764,6 +768,7 @@ I32 type;
     case OP_RV2AV:
     case OP_RV2HV:
     case OP_RV2GV:
+       op->op_private = (hints & HINT_STRICT_REFS);
        ref(cUNOP->op_first, op->op_type);
        /* FALL THROUGH */
     case OP_AASSIGN:
@@ -774,8 +779,9 @@ I32 type;
        modcount = 10000;
        break;
     case OP_RV2SV:
+       op->op_private = (hints & HINT_STRICT_REFS);
        if (type == OP_RV2AV || type == OP_RV2HV)
-           op->op_private = type;
+           op->op_private |= (type == OP_RV2AV ? OPpDEREF_AV : OPpDEREF_HV);
        ref(cUNOP->op_first, op->op_type); 
        /* FALL THROUGH */
     case OP_PADSV:
@@ -812,8 +818,9 @@ I32 type;
     case OP_AELEM:
     case OP_HELEM:
        ref(cBINOP->op_first, op->op_type);
+       op->op_private = (hints & HINT_STRICT_REFS);
        if (type == OP_RV2AV || type == OP_RV2HV)
-           op->op_private = type;
+           op->op_private |= (type == OP_RV2AV ? OPpDEREF_AV : OPpDEREF_HV);
        break;
 
     case OP_SCOPE:
@@ -869,7 +876,8 @@ I32 type;
            && !(op->op_flags & (OPf_STACKED|OPf_PARENS))) {
            op->op_type = OP_RV2CV;             /* entersubr => rv2cv */
            op->op_ppaddr = ppaddr[OP_RV2CV];
-           null(cUNOP->op_first);
+           assert(cUNOP->op_first->op_type == OP_NULL);
+           null(((LISTOP*)cUNOP->op_first)->op_first); /* disable pushmark */
        }
        break;
       
@@ -878,8 +886,9 @@ I32 type;
            ref(kid, type);
        break;
     case OP_RV2SV:
+       op->op_private = (hints & HINT_STRICT_REFS);
        if (type == OP_RV2AV || type == OP_RV2HV)
-           op->op_private = type;
+           op->op_private |= (type == OP_RV2AV ? OPpDEREF_AV : OPpDEREF_HV);
        ref(cUNOP->op_first, op->op_type);
        break;
       
@@ -888,6 +897,7 @@ I32 type;
        op->op_flags |= OPf_LVAL; 
        /* FALL THROUGH */
     case OP_RV2GV:
+       op->op_private = (hints & HINT_STRICT_REFS);
        ref(cUNOP->op_first, op->op_type);
        break;
 
@@ -905,8 +915,10 @@ I32 type;
     case OP_AELEM:
     case OP_HELEM:
        ref(cBINOP->op_first, op->op_type);
+       op->op_private = (hints & HINT_STRICT_REFS);
        if (type == OP_RV2AV || type == OP_RV2HV || type == OP_REFGEN) {
-           op->op_private = type;
+           op->op_private |= (type == OP_RV2AV ? OPpDEREF_AV :
+                               type == OP_RV2HV ? OPpDEREF_HV : 0);
            op->op_flags |= OPf_LVAL; 
        }
        break;
@@ -1072,7 +1084,7 @@ OP *o;
     if (o->op_type == OP_LIST) {
        o = convert(OP_JOIN, 0,
                prepend_elem(OP_LIST,
-                   newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE))),
+                   newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
                    o));
     }
     return o;
@@ -1091,6 +1103,9 @@ register OP *o;
     if (opargs[type] & OA_TARGET)
        o->op_targ = pad_alloc(type, SVs_PADTMP);
 
+    if ((opargs[type] & OA_OTHERINT) && (hints & HINT_INTEGER))
+       o->op_ppaddr = ppaddr[++(o->op_type)];
+
     if (!(opargs[type] & OA_FOLDCONST))
        goto nope;
 
@@ -1107,8 +1122,12 @@ register OP *o;
     o->op_next = 0;
     op = curop;
     run();
-    if (o->op_targ && *stack_sp == PAD_SV(o->op_targ))
+    if (o->op_targ && *stack_sp == PAD_SV(o->op_targ)) /* grab pad temp? */
        pad_swipe(o->op_targ);
+    else if (SvTEMP(*stack_sp)) {                      /* grab mortal temp? */
+       SvREFCNT_inc(*stack_sp);
+       SvTEMP_off(*stack_sp);
+    }
     op_free(o);
     if (type == OP_RV2GV)
        return newGVOP(OP_GV, 0, *(stack_sp--));
@@ -1118,18 +1137,21 @@ register OP *o;
   nope:
     if (!(opargs[type] & OA_OTHERINT))
        return o;
-    if (!(o->op_flags & OPf_KIDS))
-       return o;
 
-    for (curop = ((UNOP*)o)->op_first; curop; curop = curop->op_sibling) {
-       if (curop->op_type == OP_CONST) {
-           if (SvIOK(((SVOP*)curop)->op_sv))
+    if (!(hints & HINT_INTEGER)) {
+       if (!(o->op_flags & OPf_KIDS))
+           return o;
+
+       for (curop = ((UNOP*)o)->op_first; curop; curop = curop->op_sibling) {
+           if (curop->op_type == OP_CONST) {
+               if (SvIOK(((SVOP*)curop)->op_sv))
+                   continue;
+               return o;
+           }
+           if (opargs[curop->op_type] & OA_RETINTEGER)
                continue;
            return o;
        }
-       if (opargs[curop->op_type] & OA_RETINTEGER)
-           continue;
-       return o;
     }
 
     o->op_ppaddr = ppaddr[++(o->op_type)];
@@ -1554,6 +1576,8 @@ OP *repl;
        if (pm->op_pmshort && (pm->op_pmflags & PMf_SCANFIRST))
            fbm_compile(pm->op_pmshort, pm->op_pmflags & PMf_FOLD);
        pm->op_pmregexp = regcomp(p, p + plen, pm->op_pmflags & PMf_FOLD);
+       if (strEQ("\\s+", pm->op_pmregexp->precomp)) 
+           pm->op_pmflags |= PMf_WHITE;
        hoistmust(pm);
        op_free(expr);
     }
@@ -1746,6 +1770,62 @@ OP *op;
     expect = XSTATE;
 }
 
+void
+hint(aver, id, arg)
+int aver;
+OP *id;
+OP *arg;
+{
+    SV *sv;
+    U32 bits = 0;
+    SV **sp = 0;
+    SV **mark = 0;
+
+    if (arg) {
+       OP* curop = LINKLIST(arg);
+       arg->op_next = 0;
+       op = curop;
+       run();
+       sp = stack_sp;
+       mark = stack_base + POPMARK;
+       stack_sp = mark;        /* Might as well reset sp now. */
+    }
+    if (id) {
+       STRLEN len;
+       char *name;
+       sv = ((SVOP*)id)->op_sv;
+       name = SvPV(sv, len);
+
+       if (strEQ(name, "integer"))
+           bits = HINT_INTEGER;
+       else if (strEQ(name, "strict")) {
+           if (arg) {
+               while (++mark <= sp) {
+                   if (strEQ(SvPV(*mark,na), "refs"))
+                       bits |= HINT_STRICT_REFS;
+                   else if (strEQ(SvPV(*mark,na), "subs"))
+                       bits |= HINT_STRICT_SUBS;
+                   else if (strEQ(SvPV(*mark,na), "vars"))
+                       bits |= HINT_STRICT_VARS;
+               }
+           }
+           else 
+               bits = HINT_STRICT_REFS|HINT_STRICT_SUBS|HINT_STRICT_VARS;
+       }
+
+       if (aver)
+           hints |= bits;
+       else
+           hints &= ~bits;
+
+       op_free(id);
+    }
+    if (arg)
+       op_free(arg);
+    copline = NOLINE;
+    expect = XSTATE;
+}
+
 HV*
 fetch_stash(sv,create)
 SV *sv;
@@ -1756,7 +1836,7 @@ I32 create;
     GV *tmpgv;
     char *name = SvPV(sv, na);
     sprintf(tmpbuf,"%s::",name);
-    tmpgv = gv_fetchpv(tmpbuf,create);
+    tmpgv = gv_fetchpv(tmpbuf,create, SVt_PVHV);
     if (!tmpgv)
        return 0;
     if (!GvHV(tmpgv))
@@ -1929,7 +2009,7 @@ OP *op;
 
     if (label) {
        cop->cop_label = label;
-       needblockscope = TRUE;
+       hints |= HINT_BLOCK_SCOPE;
     }
     cop->cop_seq = cop_seqmax++;
 
@@ -2187,8 +2267,8 @@ OP *cont;
 
     if (expr) {
        op = newLOGOP(OP_AND, 0, expr, scalar(listop));
-       if (op == expr) {               /* oops, it's a while (0) */
-           op_free(expr);
+       if (op == expr && op->op_type == OP_CONST && !SvTRUE(cSVOP->op_sv)) {
+           op_free(expr);              /* oops, it's a while (0) */
            op_free((OP*)loop);
            return Nullop;              /* (listop already freed by newLOGOP) */
        }
@@ -2237,16 +2317,22 @@ newFOROP(I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont
 #endif /* STANDARD_C */
 {
     LOOP *loop;
+    int padoff = 0;
 
     copline = forline;
     if (sv) {
-       if (sv->op_type == OP_RV2SV) {
+       if (sv->op_type == OP_RV2SV) {  /* symbol table variable */
            OP *op = sv;
            sv = cUNOP->op_first;
            sv->op_next = sv;
            cUNOP->op_first = Nullop;
            op_free(op);
        }
+       else if (sv->op_type == OP_PADSV) { /* private variable */
+           padoff = sv->op_targ;
+           op_free(sv);
+           sv = Nullop;
+       }
        else
            croak("Can't use %s for loop variable", op_name[sv->op_type]);
     }
@@ -2255,8 +2341,11 @@ newFOROP(I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont
     }
     loop = (LOOP*)list(convert(OP_ENTERITER, 0,
        append_elem(OP_LIST, force_list(expr), scalar(sv))));
-    return newSTATEOP(0, label, newWHILEOP(flags, 1,
-       loop, newOP(OP_ITER, 0), block, cont));
+    assert(!loop->op_next);
+    Renew(loop, 1, LOOP);
+    loop->op_targ = padoff;
+    return newSTATEOP(0, label, newWHILEOP(flags, 1, loop,
+       newOP(OP_ITER, 0), block, cont));
 }
 
 OP*
@@ -2274,12 +2363,12 @@ OP* label;
            label = newUNOP(OP_REFGEN, 0, ref(label, OP_REFGEN));
        op = newUNOP(type, OPf_STACKED, label);
     }
-    needblockscope = TRUE;
+    hints |= HINT_BLOCK_SCOPE;
     return op;
 }
 
 void
-cv_clear(cv)
+cv_undef(cv)
 CV *cv;
 {
     if (!CvUSERSUB(cv) && CvROOT(cv)) {
@@ -2302,9 +2391,9 @@ CV *cv;
            while (i > 0) {
                SV** svp = av_fetch(CvPADLIST(cv), i--, FALSE);
                if (svp)
-                   av_free((AV*)*svp);
+                   sv_free(*svp);
            }
-           av_free((AV*)CvPADLIST(cv));
+           sv_free(CvPADLIST(cv));
        }
        SvREFCNT_dec(CvGV(cv));
        LEAVE;
@@ -2319,7 +2408,7 @@ OP *block;
 {
     register CV *cv;
     char *name = SvPVx(cSVOP->op_sv, na);
-    GV *gv = gv_fetchpv(name,2);
+    GV *gv = gv_fetchpv(name,2, SVt_PVCV);
     AV* av;
     char *s;
 
@@ -2387,7 +2476,7 @@ OP *block;
        SAVEI32(perldb);
        if (!beginav)
            beginav = newAV();
-       av_push(beginav, cv);
+       av_push(beginav, (SV *)cv);
        DEBUG_x( dump_sub(gv) );
        rs = nrs;
        rslen = nrslen;
@@ -2434,7 +2523,7 @@ I32 (*subaddr)();
 char *filename;
 {
     register CV *cv;
-    GV *gv = gv_fetchpv(name,2);
+    GV *gv = gv_fetchpv(name,2, SVt_PVCV);
     char *s;
 
     sub_generation++;
@@ -2489,7 +2578,7 @@ OP *block;
        name = SvPVx(cSVOP->op_sv, na);
     else
        name = "STDOUT";
-    gv = gv_fetchpv(name,TRUE);
+    gv = gv_fetchpv(name,TRUE, SVt_PVFM);
     if (cv = GvFORM(gv)) {
        if (dowarn) {
            line_t oldline = curcop->cop_line;
@@ -2706,7 +2795,7 @@ OP *op;
        if (cLISTOP->op_first->op_type == OP_STUB) {
            op_free(op);
            op = newUNOP(type, OPf_SPECIAL,
-               newGVOP(OP_GV, 0, gv_fetchpv("main'ARGV", TRUE)));
+               newGVOP(OP_GV, 0, gv_fetchpv("main'ARGV", TRUE, SVt_PVAV)));
        }
        return ck_fun(op);
     }
@@ -2717,7 +2806,7 @@ OP *
 ck_eval(op)
 OP *op;
 {
-    needblockscope = TRUE;
+    hints |= HINT_BLOCK_SCOPE;
     if (op->op_flags & OPf_KIDS) {
        SVOP *kid = (SVOP*)cUNOP->op_first;
 
@@ -2785,10 +2874,12 @@ ck_rvconst(op)
 register OP *op;
 {
     SVOP *kid = (SVOP*)cUNOP->op_first;
+    int iscv = (op->op_type==OP_RV2CV);
+
     if (kid->op_type == OP_CONST) {
        kid->op_type = OP_GV;
        kid->op_sv = SvREFCNT_inc(gv_fetchpv(SvPVx(kid->op_sv, na),
-               1+(op->op_type==OP_RV2CV)));
+               1+iscv, iscv ? SVt_PVCV : SVt_PVGV));
     }
     return op;
 }
@@ -2814,7 +2905,7 @@ OP *op;
 
        if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
            OP *newop = newGVOP(type, OPf_SPECIAL,
-               gv_fetchpv(SvPVx(kid->op_sv, na), TRUE));
+               gv_fetchpv(SvPVx(kid->op_sv, na), TRUE, SVt_PVIO));
            op_free(op);
            return newop;
        }
@@ -2822,7 +2913,8 @@ OP *op;
     else {
        op_free(op);
        if (type == OP_FTTTY)
-           return newGVOP(type, OPf_SPECIAL, gv_fetchpv("main'STDIN", TRUE));
+           return newGVOP(type, OPf_SPECIAL, gv_fetchpv("main'STDIN", TRUE,
+                               SVt_PVIO));
        else
            return newUNOP(type, 0, newSVREF(newGVOP(OP_GV, 0, defgv)));
     }
@@ -2876,7 +2968,7 @@ OP *op;
                  (kid->op_private & OPpCONST_BARE)) {
                    char *name = SvPVx(((SVOP*)kid)->op_sv, na);
                    OP *newop = newAVREF(newGVOP(OP_GV, 0,
-                       gv_fetchpv(name, TRUE) ));
+                       gv_fetchpv(name, TRUE, SVt_PVAV) ));
                    if (dowarn)
                        warn("Array @%s missing the @ in argument %d of %s()",
                            name, numargs, op_name[op->op_type]);
@@ -2894,7 +2986,7 @@ OP *op;
                  (kid->op_private & OPpCONST_BARE)) {
                    char *name = SvPVx(((SVOP*)kid)->op_sv, na);
                    OP *newop = newHVREF(newGVOP(OP_GV, 0,
-                       gv_fetchpv(name, TRUE) ));
+                       gv_fetchpv(name, TRUE, SVt_PVHV) ));
                    if (dowarn)
                        warn("Hash %%%s missing the %% in argument %d of %s()",
                            name, numargs, op_name[op->op_type]);
@@ -2923,7 +3015,8 @@ OP *op;
                    if (kid->op_type == OP_CONST &&
                      (kid->op_private & OPpCONST_BARE)) {
                        OP *newop = newGVOP(OP_GV, 0,
-                           gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, na), TRUE) );
+                           gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, na), TRUE,
+                                       SVt_PVIO) );
                        op_free(kid);
                        kid = newop;
                    }
@@ -3157,7 +3250,7 @@ OP *op;
        return newUNOP(type, 0,
            scalar(newUNOP(OP_RV2AV, 0,
                scalar(newGVOP(OP_GV, 0,
-                   gv_fetchpv((subline ? "_" : "ARGV"), TRUE) )))));
+                   gv_fetchpv((subline ? "_" : "ARGV"), TRUE, SVt_PVAV) )))));
     }
     return scalar(modkids(ck_fun(op), type));
 }
@@ -3213,8 +3306,10 @@ OP *op;
     kid = kid->op_sibling;
     op_free(cLISTOP->op_first);
     cLISTOP->op_first = kid;
-    if (!kid)
+    if (!kid) {
        cLISTOP->op_first = kid = newSVOP(OP_CONST, 0, newSVpv(" ", 1));
+       cLISTOP->op_last = kid; /* There was only one element previously */
+    }
 
     if (kid->op_type != OP_MATCH) {
        OP *sibl = kid->op_sibling;
@@ -3262,9 +3357,9 @@ OP *op;
 
     if (o->op_type == OP_RV2CV)
        null(o);                /* disable rv2cv */
-    op->op_private = 0;
+    op->op_private = (hints & HINT_STRICT_REFS);
     if (perldb && curstash != debstash)
-       op->op_private |= OPpSUBR_DB;
+       op->op_private |= OPpDEREF_DB;
     return op;
 }
 
@@ -3321,7 +3416,7 @@ register OP* op;
 
        case OP_GV:
            if (op->op_next->op_type == OP_RV2SV) {
-               if (op->op_next->op_private < OP_RV2GV) {
+               if (!(op->op_next->op_private & (OPpDEREF_HV|OPpDEREF_AV))) {
                    null(op->op_next);
                    op->op_flags |= op->op_next->op_flags & OPf_INTRO;
                    op->op_next = op->op_next->op_next;
@@ -3334,7 +3429,7 @@ register OP* op;
                I32 i;
                if (pop->op_type == OP_CONST &&
                    pop->op_next->op_type == OP_AELEM &&
-                   pop->op_next->op_private < OP_RV2GV &&
+                   !(pop->op_next->op_private & (OPpDEREF_HV|OPpDEREF_AV)) &&
                    !(pop->op_next->op_flags & OPf_INTRO) &&
                    (i = SvIV(((SVOP*)pop)->op_sv)) <= 255 &&
                    i >= 0)
diff --git a/op.h b/op.h
index c230dd0..b988f31 100644 (file)
--- a/op.h
+++ b/op.h
@@ -42,7 +42,7 @@ typedef U16 PADOFFSET;
     char       op_flags;               \
     char       op_private;
 
-#define GIMME (op->op_flags & OPf_KNOW ? op->op_flags & OPf_LIST : getgimme(op))
+#define GIMME (op->op_flags & OPf_KNOW ? op->op_flags & OPf_LIST : cxstack[cxstack_ix].blk_gimme)
 
 /* Public flags */
 #define OPf_LIST       1       /* Do operator in list context. */
@@ -75,8 +75,11 @@ typedef U16 PADOFFSET;
 /* Private for OP_REPEAT */
 #define OPpREPEAT_DOLIST       1       /* List replication. */
 
-/* Private for OP_SUBR */
-#define OPpSUBR_DB             1       /* Debug subroutine. */
+/* Private for OP_ENTERSUBR, OP_RV2?V, OP_?ELEM */
+  /* (lower bits carry hints) */
+#define OPpDEREF_DB            32      /* Debug subroutine. */
+#define OPpDEREF_AV            64      /* Want ref to AV. */
+#define OPpDEREF_HV            128     /* Want ref to HV. */
 
 /* Private for OP_CONST */
 #define OPpCONST_BARE          1       /* Was a bare word (filehandle?). */
@@ -146,6 +149,7 @@ struct pmop {
 #define PMf_GLOBAL 256                 /* pattern had a g modifier */
 #define PMf_RUNTIME 512                        /* pattern coming in on the stack */
 #define PMf_EVAL 1024                  /* evaluating replacement as expr */
+#define PMf_WHITE 2048                 /* pattern is \s+ */
 
 struct svop {
     BASEOP
index aea0a8a..dbcd3ff 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -39,286 +39,303 @@ typedef enum {
        OP_UNDEF,       /* 37 */
        OP_STUDY,       /* 38 */
        OP_PREINC,      /* 39 */
-       OP_PREDEC,      /* 40 */
-       OP_POSTINC,     /* 41 */
-       OP_POSTDEC,     /* 42 */
-       OP_POW,         /* 43 */
-       OP_MULTIPLY,    /* 44 */
-       OP_DIVIDE,      /* 45 */
-       OP_MODULO,      /* 46 */
-       OP_REPEAT,      /* 47 */
-       OP_ADD,         /* 48 */
-       OP_INTADD,      /* 49 */
-       OP_SUBTRACT,    /* 50 */
-       OP_CONCAT,      /* 51 */
-       OP_LEFT_SHIFT,  /* 52 */
-       OP_RIGHT_SHIFT, /* 53 */
-       OP_LT,          /* 54 */
-       OP_GT,          /* 55 */
-       OP_LE,          /* 56 */
-       OP_GE,          /* 57 */
-       OP_EQ,          /* 58 */
-       OP_NE,          /* 59 */
-       OP_NCMP,        /* 60 */
-       OP_SLT,         /* 61 */
-       OP_SGT,         /* 62 */
-       OP_SLE,         /* 63 */
-       OP_SGE,         /* 64 */
-       OP_SEQ,         /* 65 */
-       OP_SNE,         /* 66 */
-       OP_SCMP,        /* 67 */
-       OP_BIT_AND,     /* 68 */
-       OP_XOR,         /* 69 */
-       OP_BIT_OR,      /* 70 */
-       OP_NEGATE,      /* 71 */
-       OP_NOT,         /* 72 */
-       OP_COMPLEMENT,  /* 73 */
-       OP_ATAN2,       /* 74 */
-       OP_SIN,         /* 75 */
-       OP_COS,         /* 76 */
-       OP_RAND,        /* 77 */
-       OP_SRAND,       /* 78 */
-       OP_EXP,         /* 79 */
-       OP_LOG,         /* 80 */
-       OP_SQRT,        /* 81 */
-       OP_INT,         /* 82 */
-       OP_HEX,         /* 83 */
-       OP_OCT,         /* 84 */
-       OP_ABS,         /* 85 */
-       OP_LENGTH,      /* 86 */
-       OP_SUBSTR,      /* 87 */
-       OP_VEC,         /* 88 */
-       OP_INDEX,       /* 89 */
-       OP_RINDEX,      /* 90 */
-       OP_SPRINTF,     /* 91 */
-       OP_FORMLINE,    /* 92 */
-       OP_ORD,         /* 93 */
-       OP_CHR,         /* 94 */
-       OP_CRYPT,       /* 95 */
-       OP_UCFIRST,     /* 96 */
-       OP_LCFIRST,     /* 97 */
-       OP_UC,          /* 98 */
-       OP_LC,          /* 99 */
-       OP_RV2AV,       /* 100 */
-       OP_AELEMFAST,   /* 101 */
-       OP_AELEM,       /* 102 */
-       OP_ASLICE,      /* 103 */
-       OP_EACH,        /* 104 */
-       OP_VALUES,      /* 105 */
-       OP_KEYS,        /* 106 */
-       OP_DELETE,      /* 107 */
-       OP_RV2HV,       /* 108 */
-       OP_HELEM,       /* 109 */
-       OP_HSLICE,      /* 110 */
-       OP_UNPACK,      /* 111 */
-       OP_PACK,        /* 112 */
-       OP_SPLIT,       /* 113 */
-       OP_JOIN,        /* 114 */
-       OP_LIST,        /* 115 */
-       OP_LSLICE,      /* 116 */
-       OP_ANONLIST,    /* 117 */
-       OP_ANONHASH,    /* 118 */
-       OP_SPLICE,      /* 119 */
-       OP_PUSH,        /* 120 */
-       OP_POP,         /* 121 */
-       OP_SHIFT,       /* 122 */
-       OP_UNSHIFT,     /* 123 */
-       OP_SORT,        /* 124 */
-       OP_REVERSE,     /* 125 */
-       OP_GREPSTART,   /* 126 */
-       OP_GREPWHILE,   /* 127 */
-       OP_RANGE,       /* 128 */
-       OP_FLIP,        /* 129 */
-       OP_FLOP,        /* 130 */
-       OP_AND,         /* 131 */
-       OP_OR,          /* 132 */
-       OP_COND_EXPR,   /* 133 */
-       OP_ANDASSIGN,   /* 134 */
-       OP_ORASSIGN,    /* 135 */
-       OP_METHOD,      /* 136 */
-       OP_ENTERSUBR,   /* 137 */
-       OP_LEAVESUBR,   /* 138 */
-       OP_CALLER,      /* 139 */
-       OP_WARN,        /* 140 */
-       OP_DIE,         /* 141 */
-       OP_RESET,       /* 142 */
-       OP_LINESEQ,     /* 143 */
-       OP_NEXTSTATE,   /* 144 */
-       OP_DBSTATE,     /* 145 */
-       OP_UNSTACK,     /* 146 */
-       OP_ENTER,       /* 147 */
-       OP_LEAVE,       /* 148 */
-       OP_SCOPE,       /* 149 */
-       OP_ENTERITER,   /* 150 */
-       OP_ITER,        /* 151 */
-       OP_ENTERLOOP,   /* 152 */
-       OP_LEAVELOOP,   /* 153 */
-       OP_RETURN,      /* 154 */
-       OP_LAST,        /* 155 */
-       OP_NEXT,        /* 156 */
-       OP_REDO,        /* 157 */
-       OP_DUMP,        /* 158 */
-       OP_GOTO,        /* 159 */
-       OP_EXIT,        /* 160 */
-       OP_NSWITCH,     /* 161 */
-       OP_CSWITCH,     /* 162 */
-       OP_OPEN,        /* 163 */
-       OP_CLOSE,       /* 164 */
-       OP_PIPE_OP,     /* 165 */
-       OP_FILENO,      /* 166 */
-       OP_UMASK,       /* 167 */
-       OP_BINMODE,     /* 168 */
-       OP_TIE,         /* 169 */
-       OP_UNTIE,       /* 170 */
-       OP_DBMOPEN,     /* 171 */
-       OP_DBMCLOSE,    /* 172 */
-       OP_SSELECT,     /* 173 */
-       OP_SELECT,      /* 174 */
-       OP_GETC,        /* 175 */
-       OP_READ,        /* 176 */
-       OP_ENTERWRITE,  /* 177 */
-       OP_LEAVEWRITE,  /* 178 */
-       OP_PRTF,        /* 179 */
-       OP_PRINT,       /* 180 */
-       OP_SYSREAD,     /* 181 */
-       OP_SYSWRITE,    /* 182 */
-       OP_SEND,        /* 183 */
-       OP_RECV,        /* 184 */
-       OP_EOF,         /* 185 */
-       OP_TELL,        /* 186 */
-       OP_SEEK,        /* 187 */
-       OP_TRUNCATE,    /* 188 */
-       OP_FCNTL,       /* 189 */
-       OP_IOCTL,       /* 190 */
-       OP_FLOCK,       /* 191 */
-       OP_SOCKET,      /* 192 */
-       OP_SOCKPAIR,    /* 193 */
-       OP_BIND,        /* 194 */
-       OP_CONNECT,     /* 195 */
-       OP_LISTEN,      /* 196 */
-       OP_ACCEPT,      /* 197 */
-       OP_SHUTDOWN,    /* 198 */
-       OP_GSOCKOPT,    /* 199 */
-       OP_SSOCKOPT,    /* 200 */
-       OP_GETSOCKNAME, /* 201 */
-       OP_GETPEERNAME, /* 202 */
-       OP_LSTAT,       /* 203 */
-       OP_STAT,        /* 204 */
-       OP_FTRREAD,     /* 205 */
-       OP_FTRWRITE,    /* 206 */
-       OP_FTREXEC,     /* 207 */
-       OP_FTEREAD,     /* 208 */
-       OP_FTEWRITE,    /* 209 */
-       OP_FTEEXEC,     /* 210 */
-       OP_FTIS,        /* 211 */
-       OP_FTEOWNED,    /* 212 */
-       OP_FTROWNED,    /* 213 */
-       OP_FTZERO,      /* 214 */
-       OP_FTSIZE,      /* 215 */
-       OP_FTMTIME,     /* 216 */
-       OP_FTATIME,     /* 217 */
-       OP_FTCTIME,     /* 218 */
-       OP_FTSOCK,      /* 219 */
-       OP_FTCHR,       /* 220 */
-       OP_FTBLK,       /* 221 */
-       OP_FTFILE,      /* 222 */
-       OP_FTDIR,       /* 223 */
-       OP_FTPIPE,      /* 224 */
-       OP_FTLINK,      /* 225 */
-       OP_FTSUID,      /* 226 */
-       OP_FTSGID,      /* 227 */
-       OP_FTSVTX,      /* 228 */
-       OP_FTTTY,       /* 229 */
-       OP_FTTEXT,      /* 230 */
-       OP_FTBINARY,    /* 231 */
-       OP_CHDIR,       /* 232 */
-       OP_CHOWN,       /* 233 */
-       OP_CHROOT,      /* 234 */
-       OP_UNLINK,      /* 235 */
-       OP_CHMOD,       /* 236 */
-       OP_UTIME,       /* 237 */
-       OP_RENAME,      /* 238 */
-       OP_LINK,        /* 239 */
-       OP_SYMLINK,     /* 240 */
-       OP_READLINK,    /* 241 */
-       OP_MKDIR,       /* 242 */
-       OP_RMDIR,       /* 243 */
-       OP_OPEN_DIR,    /* 244 */
-       OP_READDIR,     /* 245 */
-       OP_TELLDIR,     /* 246 */
-       OP_SEEKDIR,     /* 247 */
-       OP_REWINDDIR,   /* 248 */
-       OP_CLOSEDIR,    /* 249 */
-       OP_FORK,        /* 250 */
-       OP_WAIT,        /* 251 */
-       OP_WAITPID,     /* 252 */
-       OP_SYSTEM,      /* 253 */
-       OP_EXEC,        /* 254 */
-       OP_KILL,        /* 255 */
-       OP_GETPPID,     /* 256 */
-       OP_GETPGRP,     /* 257 */
-       OP_SETPGRP,     /* 258 */
-       OP_GETPRIORITY, /* 259 */
-       OP_SETPRIORITY, /* 260 */
-       OP_TIME,        /* 261 */
-       OP_TMS,         /* 262 */
-       OP_LOCALTIME,   /* 263 */
-       OP_GMTIME,      /* 264 */
-       OP_ALARM,       /* 265 */
-       OP_SLEEP,       /* 266 */
-       OP_SHMGET,      /* 267 */
-       OP_SHMCTL,      /* 268 */
-       OP_SHMREAD,     /* 269 */
-       OP_SHMWRITE,    /* 270 */
-       OP_MSGGET,      /* 271 */
-       OP_MSGCTL,      /* 272 */
-       OP_MSGSND,      /* 273 */
-       OP_MSGRCV,      /* 274 */
-       OP_SEMGET,      /* 275 */
-       OP_SEMCTL,      /* 276 */
-       OP_SEMOP,       /* 277 */
-       OP_REQUIRE,     /* 278 */
-       OP_DOFILE,      /* 279 */
-       OP_ENTEREVAL,   /* 280 */
-       OP_LEAVEEVAL,   /* 281 */
-       OP_EVALONCE,    /* 282 */
-       OP_ENTERTRY,    /* 283 */
-       OP_LEAVETRY,    /* 284 */
-       OP_GHBYNAME,    /* 285 */
-       OP_GHBYADDR,    /* 286 */
-       OP_GHOSTENT,    /* 287 */
-       OP_GNBYNAME,    /* 288 */
-       OP_GNBYADDR,    /* 289 */
-       OP_GNETENT,     /* 290 */
-       OP_GPBYNAME,    /* 291 */
-       OP_GPBYNUMBER,  /* 292 */
-       OP_GPROTOENT,   /* 293 */
-       OP_GSBYNAME,    /* 294 */
-       OP_GSBYPORT,    /* 295 */
-       OP_GSERVENT,    /* 296 */
-       OP_SHOSTENT,    /* 297 */
-       OP_SNETENT,     /* 298 */
-       OP_SPROTOENT,   /* 299 */
-       OP_SSERVENT,    /* 300 */
-       OP_EHOSTENT,    /* 301 */
-       OP_ENETENT,     /* 302 */
-       OP_EPROTOENT,   /* 303 */
-       OP_ESERVENT,    /* 304 */
-       OP_GPWNAM,      /* 305 */
-       OP_GPWUID,      /* 306 */
-       OP_GPWENT,      /* 307 */
-       OP_SPWENT,      /* 308 */
-       OP_EPWENT,      /* 309 */
-       OP_GGRNAM,      /* 310 */
-       OP_GGRGID,      /* 311 */
-       OP_GGRENT,      /* 312 */
-       OP_SGRENT,      /* 313 */
-       OP_EGRENT,      /* 314 */
-       OP_GETLOGIN,    /* 315 */
-       OP_SYSCALL,     /* 316 */
+       OP_I_PREINC,    /* 40 */
+       OP_PREDEC,      /* 41 */
+       OP_I_PREDEC,    /* 42 */
+       OP_POSTINC,     /* 43 */
+       OP_I_POSTINC,   /* 44 */
+       OP_POSTDEC,     /* 45 */
+       OP_I_POSTDEC,   /* 46 */
+       OP_POW,         /* 47 */
+       OP_MULTIPLY,    /* 48 */
+       OP_I_MULTIPLY,  /* 49 */
+       OP_DIVIDE,      /* 50 */
+       OP_I_DIVIDE,    /* 51 */
+       OP_MODULO,      /* 52 */
+       OP_I_MODULO,    /* 53 */
+       OP_REPEAT,      /* 54 */
+       OP_ADD,         /* 55 */
+       OP_I_ADD,       /* 56 */
+       OP_SUBTRACT,    /* 57 */
+       OP_I_SUBTRACT,  /* 58 */
+       OP_CONCAT,      /* 59 */
+       OP_LEFT_SHIFT,  /* 60 */
+       OP_RIGHT_SHIFT, /* 61 */
+       OP_LT,          /* 62 */
+       OP_I_LT,        /* 63 */
+       OP_GT,          /* 64 */
+       OP_I_GT,        /* 65 */
+       OP_LE,          /* 66 */
+       OP_I_LE,        /* 67 */
+       OP_GE,          /* 68 */
+       OP_I_GE,        /* 69 */
+       OP_EQ,          /* 70 */
+       OP_I_EQ,        /* 71 */
+       OP_NE,          /* 72 */
+       OP_I_NE,        /* 73 */
+       OP_NCMP,        /* 74 */
+       OP_I_NCMP,      /* 75 */
+       OP_SLT,         /* 76 */
+       OP_SGT,         /* 77 */
+       OP_SLE,         /* 78 */
+       OP_SGE,         /* 79 */
+       OP_SEQ,         /* 80 */
+       OP_SNE,         /* 81 */
+       OP_SCMP,        /* 82 */
+       OP_BIT_AND,     /* 83 */
+       OP_XOR,         /* 84 */
+       OP_BIT_OR,      /* 85 */
+       OP_NEGATE,      /* 86 */
+       OP_I_NEGATE,    /* 87 */
+       OP_NOT,         /* 88 */
+       OP_COMPLEMENT,  /* 89 */
+       OP_ATAN2,       /* 90 */
+       OP_SIN,         /* 91 */
+       OP_COS,         /* 92 */
+       OP_RAND,        /* 93 */
+       OP_SRAND,       /* 94 */
+       OP_EXP,         /* 95 */
+       OP_LOG,         /* 96 */
+       OP_SQRT,        /* 97 */
+       OP_INT,         /* 98 */
+       OP_HEX,         /* 99 */
+       OP_OCT,         /* 100 */
+       OP_ABS,         /* 101 */
+       OP_LENGTH,      /* 102 */
+       OP_SUBSTR,      /* 103 */
+       OP_VEC,         /* 104 */
+       OP_INDEX,       /* 105 */
+       OP_RINDEX,      /* 106 */
+       OP_SPRINTF,     /* 107 */
+       OP_FORMLINE,    /* 108 */
+       OP_ORD,         /* 109 */
+       OP_CHR,         /* 110 */
+       OP_CRYPT,       /* 111 */
+       OP_UCFIRST,     /* 112 */
+       OP_LCFIRST,     /* 113 */
+       OP_UC,          /* 114 */
+       OP_LC,          /* 115 */
+       OP_RV2AV,       /* 116 */
+       OP_AELEMFAST,   /* 117 */
+       OP_AELEM,       /* 118 */
+       OP_ASLICE,      /* 119 */
+       OP_EACH,        /* 120 */
+       OP_VALUES,      /* 121 */
+       OP_KEYS,        /* 122 */
+       OP_DELETE,      /* 123 */
+       OP_RV2HV,       /* 124 */
+       OP_HELEM,       /* 125 */
+       OP_HSLICE,      /* 126 */
+       OP_UNPACK,      /* 127 */
+       OP_PACK,        /* 128 */
+       OP_SPLIT,       /* 129 */
+       OP_JOIN,        /* 130 */
+       OP_LIST,        /* 131 */
+       OP_LSLICE,      /* 132 */
+       OP_ANONLIST,    /* 133 */
+       OP_ANONHASH,    /* 134 */
+       OP_SPLICE,      /* 135 */
+       OP_PUSH,        /* 136 */
+       OP_POP,         /* 137 */
+       OP_SHIFT,       /* 138 */
+       OP_UNSHIFT,     /* 139 */
+       OP_SORT,        /* 140 */
+       OP_REVERSE,     /* 141 */
+       OP_GREPSTART,   /* 142 */
+       OP_GREPWHILE,   /* 143 */
+       OP_RANGE,       /* 144 */
+       OP_FLIP,        /* 145 */
+       OP_FLOP,        /* 146 */
+       OP_AND,         /* 147 */
+       OP_OR,          /* 148 */
+       OP_COND_EXPR,   /* 149 */
+       OP_ANDASSIGN,   /* 150 */
+       OP_ORASSIGN,    /* 151 */
+       OP_METHOD,      /* 152 */
+       OP_ENTERSUBR,   /* 153 */
+       OP_LEAVESUBR,   /* 154 */
+       OP_CALLER,      /* 155 */
+       OP_WARN,        /* 156 */
+       OP_DIE,         /* 157 */
+       OP_RESET,       /* 158 */
+       OP_LINESEQ,     /* 159 */
+       OP_NEXTSTATE,   /* 160 */
+       OP_DBSTATE,     /* 161 */
+       OP_UNSTACK,     /* 162 */
+       OP_ENTER,       /* 163 */
+       OP_LEAVE,       /* 164 */
+       OP_SCOPE,       /* 165 */
+       OP_ENTERITER,   /* 166 */
+       OP_ITER,        /* 167 */
+       OP_ENTERLOOP,   /* 168 */
+       OP_LEAVELOOP,   /* 169 */
+       OP_RETURN,      /* 170 */
+       OP_LAST,        /* 171 */
+       OP_NEXT,        /* 172 */
+       OP_REDO,        /* 173 */
+       OP_DUMP,        /* 174 */
+       OP_GOTO,        /* 175 */
+       OP_EXIT,        /* 176 */
+       OP_NSWITCH,     /* 177 */
+       OP_CSWITCH,     /* 178 */
+       OP_OPEN,        /* 179 */
+       OP_CLOSE,       /* 180 */
+       OP_PIPE_OP,     /* 181 */
+       OP_FILENO,      /* 182 */
+       OP_UMASK,       /* 183 */
+       OP_BINMODE,     /* 184 */
+       OP_TIE,         /* 185 */
+       OP_UNTIE,       /* 186 */
+       OP_DBMOPEN,     /* 187 */
+       OP_DBMCLOSE,    /* 188 */
+       OP_SSELECT,     /* 189 */
+       OP_SELECT,      /* 190 */
+       OP_GETC,        /* 191 */
+       OP_READ,        /* 192 */
+       OP_ENTERWRITE,  /* 193 */
+       OP_LEAVEWRITE,  /* 194 */
+       OP_PRTF,        /* 195 */
+       OP_PRINT,       /* 196 */
+       OP_SYSREAD,     /* 197 */
+       OP_SYSWRITE,    /* 198 */
+       OP_SEND,        /* 199 */
+       OP_RECV,        /* 200 */
+       OP_EOF,         /* 201 */
+       OP_TELL,        /* 202 */
+       OP_SEEK,        /* 203 */
+       OP_TRUNCATE,    /* 204 */
+       OP_FCNTL,       /* 205 */
+       OP_IOCTL,       /* 206 */
+       OP_FLOCK,       /* 207 */
+       OP_SOCKET,      /* 208 */
+       OP_SOCKPAIR,    /* 209 */
+       OP_BIND,        /* 210 */
+       OP_CONNECT,     /* 211 */
+       OP_LISTEN,      /* 212 */
+       OP_ACCEPT,      /* 213 */
+       OP_SHUTDOWN,    /* 214 */
+       OP_GSOCKOPT,    /* 215 */
+       OP_SSOCKOPT,    /* 216 */
+       OP_GETSOCKNAME, /* 217 */
+       OP_GETPEERNAME, /* 218 */
+       OP_LSTAT,       /* 219 */
+       OP_STAT,        /* 220 */
+       OP_FTRREAD,     /* 221 */
+       OP_FTRWRITE,    /* 222 */
+       OP_FTREXEC,     /* 223 */
+       OP_FTEREAD,     /* 224 */
+       OP_FTEWRITE,    /* 225 */
+       OP_FTEEXEC,     /* 226 */
+       OP_FTIS,        /* 227 */
+       OP_FTEOWNED,    /* 228 */
+       OP_FTROWNED,    /* 229 */
+       OP_FTZERO,      /* 230 */
+       OP_FTSIZE,      /* 231 */
+       OP_FTMTIME,     /* 232 */
+       OP_FTATIME,     /* 233 */
+       OP_FTCTIME,     /* 234 */
+       OP_FTSOCK,      /* 235 */
+       OP_FTCHR,       /* 236 */
+       OP_FTBLK,       /* 237 */
+       OP_FTFILE,      /* 238 */
+       OP_FTDIR,       /* 239 */
+       OP_FTPIPE,      /* 240 */
+       OP_FTLINK,      /* 241 */
+       OP_FTSUID,      /* 242 */
+       OP_FTSGID,      /* 243 */
+       OP_FTSVTX,      /* 244 */
+       OP_FTTTY,       /* 245 */
+       OP_FTTEXT,      /* 246 */
+       OP_FTBINARY,    /* 247 */
+       OP_CHDIR,       /* 248 */
+       OP_CHOWN,       /* 249 */
+       OP_CHROOT,      /* 250 */
+       OP_UNLINK,      /* 251 */
+       OP_CHMOD,       /* 252 */
+       OP_UTIME,       /* 253 */
+       OP_RENAME,      /* 254 */
+       OP_LINK,        /* 255 */
+       OP_SYMLINK,     /* 256 */
+       OP_READLINK,    /* 257 */
+       OP_MKDIR,       /* 258 */
+       OP_RMDIR,       /* 259 */
+       OP_OPEN_DIR,    /* 260 */
+       OP_READDIR,     /* 261 */
+       OP_TELLDIR,     /* 262 */
+       OP_SEEKDIR,     /* 263 */
+       OP_REWINDDIR,   /* 264 */
+       OP_CLOSEDIR,    /* 265 */
+       OP_FORK,        /* 266 */
+       OP_WAIT,        /* 267 */
+       OP_WAITPID,     /* 268 */
+       OP_SYSTEM,      /* 269 */
+       OP_EXEC,        /* 270 */
+       OP_KILL,        /* 271 */
+       OP_GETPPID,     /* 272 */
+       OP_GETPGRP,     /* 273 */
+       OP_SETPGRP,     /* 274 */
+       OP_GETPRIORITY, /* 275 */
+       OP_SETPRIORITY, /* 276 */
+       OP_TIME,        /* 277 */
+       OP_TMS,         /* 278 */
+       OP_LOCALTIME,   /* 279 */
+       OP_GMTIME,      /* 280 */
+       OP_ALARM,       /* 281 */
+       OP_SLEEP,       /* 282 */
+       OP_SHMGET,      /* 283 */
+       OP_SHMCTL,      /* 284 */
+       OP_SHMREAD,     /* 285 */
+       OP_SHMWRITE,    /* 286 */
+       OP_MSGGET,      /* 287 */
+       OP_MSGCTL,      /* 288 */
+       OP_MSGSND,      /* 289 */
+       OP_MSGRCV,      /* 290 */
+       OP_SEMGET,      /* 291 */
+       OP_SEMCTL,      /* 292 */
+       OP_SEMOP,       /* 293 */
+       OP_REQUIRE,     /* 294 */
+       OP_DOFILE,      /* 295 */
+       OP_ENTEREVAL,   /* 296 */
+       OP_LEAVEEVAL,   /* 297 */
+       OP_EVALONCE,    /* 298 */
+       OP_ENTERTRY,    /* 299 */
+       OP_LEAVETRY,    /* 300 */
+       OP_GHBYNAME,    /* 301 */
+       OP_GHBYADDR,    /* 302 */
+       OP_GHOSTENT,    /* 303 */
+       OP_GNBYNAME,    /* 304 */
+       OP_GNBYADDR,    /* 305 */
+       OP_GNETENT,     /* 306 */
+       OP_GPBYNAME,    /* 307 */
+       OP_GPBYNUMBER,  /* 308 */
+       OP_GPROTOENT,   /* 309 */
+       OP_GSBYNAME,    /* 310 */
+       OP_GSBYPORT,    /* 311 */
+       OP_GSERVENT,    /* 312 */
+       OP_SHOSTENT,    /* 313 */
+       OP_SNETENT,     /* 314 */
+       OP_SPROTOENT,   /* 315 */
+       OP_SSERVENT,    /* 316 */
+       OP_EHOSTENT,    /* 317 */
+       OP_ENETENT,     /* 318 */
+       OP_EPROTOENT,   /* 319 */
+       OP_ESERVENT,    /* 320 */
+       OP_GPWNAM,      /* 321 */
+       OP_GPWUID,      /* 322 */
+       OP_GPWENT,      /* 323 */
+       OP_SPWENT,      /* 324 */
+       OP_EPWENT,      /* 325 */
+       OP_GGRNAM,      /* 326 */
+       OP_GGRGID,      /* 327 */
+       OP_GGRENT,      /* 328 */
+       OP_SGRENT,      /* 329 */
+       OP_EGRENT,      /* 330 */
+       OP_GETLOGIN,    /* 331 */
+       OP_SYSCALL,     /* 332 */
+       OP_max          
 } opcode;
 
-#define MAXO 317
+#define MAXO 333
 
 #ifndef DOINIT
 extern char *op_name[];
@@ -364,27 +381,42 @@ char *op_name[] = {
        "undef operator",
        "study",
        "preincrement",
+       "integer preincrement",
        "predecrement",
+       "integer predecrement",
        "postincrement",
+       "integer postincrement",
        "postdecrement",
+       "integer postdecrement",
        "exponentiation",
        "multiplication",
+       "integer multiplication",
        "division",
+       "integer division",
        "modulus",
+       "integer modulus",
        "repeat",
        "addition",
        "integer addition",
        "subtraction",
+       "integer subtraction",
        "concatenation",
        "left bitshift",
        "right bitshift",
        "numeric lt",
+       "integer lt",
        "numeric gt",
+       "integer gt",
        "numeric le",
+       "integer le",
        "numeric ge",
+       "integer ge",
        "numeric eq",
+       "integer eq",
        "numeric ne",
+       "integer ne",
        "spaceship",
+       "integer spaceship",
        "string lt",
        "string gt",
        "string le",
@@ -396,6 +428,7 @@ char *op_name[] = {
        "xor",
        "bit or",
        "negate",
+       "integer negate",
        "not",
        "1's complement",
        "atan2",
@@ -712,27 +745,42 @@ OP *      pp_defined      P((void));
 OP *   pp_undef        P((void));
 OP *   pp_study        P((void));
 OP *   pp_preinc       P((void));
+OP *   pp_i_preinc     P((void));
 OP *   pp_predec       P((void));
+OP *   pp_i_predec     P((void));
 OP *   pp_postinc      P((void));
+OP *   pp_i_postinc    P((void));
 OP *   pp_postdec      P((void));
+OP *   pp_i_postdec    P((void));
 OP *   pp_pow          P((void));
 OP *   pp_multiply     P((void));
+OP *   pp_i_multiply   P((void));
 OP *   pp_divide       P((void));
+OP *   pp_i_divide     P((void));
 OP *   pp_modulo       P((void));
+OP *   pp_i_modulo     P((void));
 OP *   pp_repeat       P((void));
 OP *   pp_add          P((void));
-OP *   pp_intadd       P((void));
+OP *   pp_i_add        P((void));
 OP *   pp_subtract     P((void));
+OP *   pp_i_subtract   P((void));
 OP *   pp_concat       P((void));
 OP *   pp_left_shift   P((void));
 OP *   pp_right_shift  P((void));
 OP *   pp_lt           P((void));
+OP *   pp_i_lt         P((void));
 OP *   pp_gt           P((void));
+OP *   pp_i_gt         P((void));
 OP *   pp_le           P((void));
+OP *   pp_i_le         P((void));
 OP *   pp_ge           P((void));
+OP *   pp_i_ge         P((void));
 OP *   pp_eq           P((void));
+OP *   pp_i_eq         P((void));
 OP *   pp_ne           P((void));
+OP *   pp_i_ne         P((void));
 OP *   pp_ncmp         P((void));
+OP *   pp_i_ncmp       P((void));
 OP *   pp_slt          P((void));
 OP *   pp_sgt          P((void));
 OP *   pp_sle          P((void));
@@ -744,6 +792,7 @@ OP *        pp_bit_and      P((void));
 OP *   pp_xor          P((void));
 OP *   pp_bit_or       P((void));
 OP *   pp_negate       P((void));
+OP *   pp_i_negate     P((void));
 OP *   pp_not          P((void));
 OP *   pp_complement   P((void));
 OP *   pp_atan2        P((void));
@@ -1034,27 +1083,42 @@ OP * (*ppaddr[])() = {
        pp_undef,
        pp_study,
        pp_preinc,
+       pp_i_preinc,
        pp_predec,
+       pp_i_predec,
        pp_postinc,
+       pp_i_postinc,
        pp_postdec,
+       pp_i_postdec,
        pp_pow,
        pp_multiply,
+       pp_i_multiply,
        pp_divide,
+       pp_i_divide,
        pp_modulo,
+       pp_i_modulo,
        pp_repeat,
        pp_add,
-       pp_intadd,
+       pp_i_add,
        pp_subtract,
+       pp_i_subtract,
        pp_concat,
        pp_left_shift,
        pp_right_shift,
        pp_lt,
+       pp_i_lt,
        pp_gt,
+       pp_i_gt,
        pp_le,
+       pp_i_le,
        pp_ge,
+       pp_i_ge,
        pp_eq,
+       pp_i_eq,
        pp_ne,
+       pp_i_ne,
        pp_ncmp,
+       pp_i_ncmp,
        pp_slt,
        pp_sgt,
        pp_sle,
@@ -1066,6 +1130,7 @@ OP * (*ppaddr[])() = {
        pp_xor,
        pp_bit_or,
        pp_negate,
+       pp_i_negate,
        pp_not,
        pp_complement,
        pp_atan2,
@@ -1358,27 +1423,42 @@ OP * (*check[])() = {
        ck_lfun,        /* undef */
        ck_fun,         /* study */
        ck_lfun,        /* preinc */
+       ck_lfun,        /* i_preinc */
        ck_lfun,        /* predec */
+       ck_lfun,        /* i_predec */
        ck_lfun,        /* postinc */
+       ck_lfun,        /* i_postinc */
        ck_lfun,        /* postdec */
+       ck_lfun,        /* i_postdec */
        ck_null,        /* pow */
        ck_null,        /* multiply */
+       ck_null,        /* i_multiply */
        ck_null,        /* divide */
+       ck_null,        /* i_divide */
        ck_null,        /* modulo */
+       ck_null,        /* i_modulo */
        ck_repeat,      /* repeat */
        ck_null,        /* add */
-       ck_null,        /* intadd */
+       ck_null,        /* i_add */
        ck_null,        /* subtract */
+       ck_null,        /* i_subtract */
        ck_concat,      /* concat */
        ck_null,        /* left_shift */
        ck_null,        /* right_shift */
        ck_null,        /* lt */
+       ck_null,        /* i_lt */
        ck_null,        /* gt */
+       ck_null,        /* i_gt */
        ck_null,        /* le */
+       ck_null,        /* i_le */
        ck_null,        /* ge */
+       ck_null,        /* i_ge */
        ck_null,        /* eq */
+       ck_null,        /* i_eq */
        ck_null,        /* ne */
+       ck_null,        /* i_ne */
        ck_null,        /* ncmp */
+       ck_null,        /* i_ncmp */
        ck_null,        /* slt */
        ck_null,        /* sgt */
        ck_null,        /* sle */
@@ -1390,6 +1470,7 @@ OP * (*check[])() = {
        ck_null,        /* xor */
        ck_null,        /* bit_or */
        ck_null,        /* negate */
+       ck_null,        /* i_negate */
        ck_null,        /* not */
        ck_null,        /* complement */
        ck_fun,         /* atan2 */
@@ -1681,28 +1762,43 @@ U32 opargs[] = {
        0x00000914,     /* defined */
        0x00000904,     /* undef */
        0x0000090c,     /* study */
-       0x00000104,     /* preinc */
-       0x00000104,     /* predec */
-       0x0000010c,     /* postinc */
-       0x0000010c,     /* postdec */
-       0x0000110e,     /* pow */
-       0x0000110e,     /* multiply */
-       0x0000110e,     /* divide */
-       0x0000111e,     /* modulo */
+       0x00000124,     /* preinc */
+       0x00000114,     /* i_preinc */
+       0x00000124,     /* predec */
+       0x00000114,     /* i_predec */
+       0x0000012c,     /* postinc */
+       0x0000011c,     /* i_postinc */
+       0x0000012c,     /* postdec */
+       0x0000011c,     /* i_postdec */
+       0x0000112e,     /* pow */
+       0x0000112e,     /* multiply */
+       0x0000111e,     /* i_multiply */
+       0x0000112e,     /* divide */
+       0x0000111e,     /* i_divide */
+       0x0000113e,     /* modulo */
+       0x0000111e,     /* i_modulo */
        0x00001209,     /* repeat */
        0x0000112e,     /* add */
-       0x0000111e,     /* intadd */
-       0x0000110e,     /* subtract */
+       0x0000111e,     /* i_add */
+       0x0000112e,     /* subtract */
+       0x0000111e,     /* i_subtract */
        0x0000110e,     /* concat */
        0x0000111e,     /* left_shift */
        0x0000111e,     /* right_shift */
-       0x00001116,     /* lt */
-       0x00001116,     /* gt */
-       0x00001116,     /* le */
-       0x00001116,     /* ge */
-       0x00001116,     /* eq */
-       0x00001116,     /* ne */
-       0x0000111e,     /* ncmp */
+       0x00001136,     /* lt */
+       0x00001116,     /* i_lt */
+       0x00001136,     /* gt */
+       0x00001116,     /* i_gt */
+       0x00001136,     /* le */
+       0x00001116,     /* i_le */
+       0x00001136,     /* ge */
+       0x00001116,     /* i_ge */
+       0x00001136,     /* eq */
+       0x00001116,     /* i_eq */
+       0x00001136,     /* ne */
+       0x00001116,     /* i_ne */
+       0x0000113e,     /* ncmp */
+       0x0000111e,     /* i_ncmp */
        0x00001116,     /* slt */
        0x00001116,     /* sgt */
        0x00001116,     /* sle */
@@ -1713,7 +1809,8 @@ U32 opargs[] = {
        0x0000110e,     /* bit_and */
        0x0000110e,     /* xor */
        0x0000110e,     /* bit_or */
-       0x0000010e,     /* negate */
+       0x0000012e,     /* negate */
+       0x0000011e,     /* i_negate */
        0x00000116,     /* not */
        0x0000010e,     /* complement */
        0x0000110e,     /* atan2 */
index c3452ff..953cb52 100755 (executable)
--- a/opcode.pl
+++ b/opcode.pl
@@ -25,6 +25,7 @@ print "typedef enum {\n";
 for (@ops) {
     print "\t", &tab(3,"OP_\U$_,"), "/* ", $i++, " */\n";
 }
+print "\t", &tab(3,"OP_max"), "\n";
 print "} opcode;\n";
 print "\n#define MAXO ", scalar @ops, "\n\n"; 
 
@@ -213,35 +214,50 @@ defined           defined operator        ck_rfun         is      S?
 undef          undef operator          ck_lfun         s       S?
 study          study                   ck_fun          st      S?
 
-preinc         preincrement            ck_lfun         s       S
-predec         predecrement            ck_lfun         s       S
-postinc                postincrement           ck_lfun         st      S
-postdec                postdecrement           ck_lfun         st      S
+preinc         preincrement            ck_lfun         Is      S
+i_preinc       integer preincrement    ck_lfun         is      S
+predec         predecrement            ck_lfun         Is      S
+i_predec       integer predecrement    ck_lfun         is      S
+postinc                postincrement           ck_lfun         Ist     S
+i_postinc      integer postincrement   ck_lfun         ist     S
+postdec                postdecrement           ck_lfun         Ist     S
+i_postdec      integer postdecrement   ck_lfun         ist     S
 
 # Ordinary operators.
 
-pow            exponentiation          ck_null         fst     S S
+pow            exponentiation          ck_null         Ifst    S S
 
-multiply       multiplication          ck_null         fst     S S
-divide         division                ck_null         fst     S S
-modulo         modulus                 ck_null         ifst    S S
+multiply       multiplication          ck_null         Ifst    S S
+i_multiply     integer multiplication  ck_null         ifst    S S
+divide         division                ck_null         Ifst    S S
+i_divide       integer division        ck_null         ifst    S S
+modulo         modulus                 ck_null         Iifst   S S
+i_modulo       integer modulus         ck_null         ifst    S S
 repeat         repeat                  ck_repeat       mt      L S
 
 add            addition                ck_null         Ifst    S S
-intadd         integer addition        ck_null         ifst    S S
-subtract       subtraction             ck_null         fst     S S
+i_add          integer addition        ck_null         ifst    S S
+subtract       subtraction             ck_null         Ifst    S S
+i_subtract     integer subtraction     ck_null         ifst    S S
 concat         concatenation           ck_concat       fst     S S
 
 left_shift     left bitshift           ck_null         ifst    S S
 right_shift    right bitshift          ck_null         ifst    S S
 
-lt             numeric lt              ck_null         ifs     S S
-gt             numeric gt              ck_null         ifs     S S
-le             numeric le              ck_null         ifs     S S
-ge             numeric ge              ck_null         ifs     S S
-eq             numeric eq              ck_null         ifs     S S
-ne             numeric ne              ck_null         ifs     S S
-ncmp           spaceship               ck_null         ifst    S S
+lt             numeric lt              ck_null         Iifs    S S
+i_lt           integer lt              ck_null         ifs     S S
+gt             numeric gt              ck_null         Iifs    S S
+i_gt           integer gt              ck_null         ifs     S S
+le             numeric le              ck_null         Iifs    S S
+i_le           integer le              ck_null         ifs     S S
+ge             numeric ge              ck_null         Iifs    S S
+i_ge           integer ge              ck_null         ifs     S S
+eq             numeric eq              ck_null         Iifs    S S
+i_eq           integer eq              ck_null         ifs     S S
+ne             numeric ne              ck_null         Iifs    S S
+i_ne           integer ne              ck_null         ifs     S S
+ncmp           spaceship               ck_null         Iifst   S S
+i_ncmp         integer spaceship       ck_null         ifst    S S
 
 slt            string lt               ck_null         ifs     S S
 sgt            string gt               ck_null         ifs     S S
@@ -255,7 +271,8 @@ bit_and             bit and                 ck_null         fst     S S
 xor            xor                     ck_null         fst     S S
 bit_or         bit or                  ck_null         fst     S S
 
-negate         negate                  ck_null         fst     S
+negate         negate                  ck_null         Ifst    S
+i_negate       integer negate          ck_null         ifst    S
 not            not                     ck_null         ifs     S
 complement     1's complement          ck_null         fst     S
 
diff --git a/oy b/oy
deleted file mode 100644 (file)
index 89564c5..0000000
--- a/oy
+++ /dev/null
@@ -1,16 +0,0 @@
-       |       LVALFUN sexpr   %prec '('
-                       { $$ = redOP($1, 1, lv($2)); }
-       |       LVALFUN
-                       { $$ = redOP($1, 1,
-                           lv(gv_to_op(A_STAB,defstab))); }
-       |       SSELECT
-                       { $$ = redOP(OP_SELECT, 0);}
-       |       SSELECT  WORD
-                       { $$ = redOP(OP_SELECT, 1,
-                           gv_to_op(A_WORD,newGV($2,TRUE)));
-                           Safefree($2); $2 = Nullch; }
-       |       SSELECT '(' handle ')'
-                       { $$ = redOP(OP_SELECT, 1, $3); }
-       |       SSELECT '(' sexpr csexpr csexpr csexpr ')'
-                       { op4 = $6;
-                         $$ = redOP(OP_SSELECT, 4, $3, $4, $5); }
diff --git a/package b/package
deleted file mode 100644 (file)
index 6c2785d..0000000
--- a/package
+++ /dev/null
@@ -1,21 +0,0 @@
-
-void
-package(OP *name)
-{ char tmpbuf[256];
-  GV *tmpgv;
-
-  save_hptr(&curstash);
-  save_item(curstname);
-  sv_setpv(curstname,$2);
-  sprintf(tmpbuf,"'_%s",$2);
-  tmpgv = gv_fetchpv(tmpbuf,TRUE);
-  if (!GvHV(tmpgv))
-      GvHV(tmpgv) = newHV(0);
-  curstash = GvHV(tmpgv);
-  if (!curstash->hv_name)
-      curstash->hv_name = savestr($2);
-  curstash->hv_coeffsize = 0;
-  op_free($2);
-  copline = NOLINE;
-  expectterm = 2;
-}
diff --git a/parse_format b/parse_format
deleted file mode 100644 (file)
index 80b5c3d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-void
-XXX(fcmd)
-register FF *fcmd;
-{
-    register int i;
-    register OP *arg;
-    register int items;
-    SV *sv;
-    OP *parse_list();
-    line_t oldline = curcmd->cop_line;
-
-    sv = fcmd->ff_unparsed;
-    curcmd->cop_line = fcmd->ff_line;
-    fcmd->ff_unparsed = Nullsv;
-
-    /* Grrf.  We have to fake curcmd to be in run_format's package temporarily... */
-    (void)save_hptr(&curcmd->cop_stash);
-    (void)save_hptr(&curstash);
-    curstash = sv->sv_u.sv_hv;
-    curcmd->cop_stash = sv->sv_u.sv_hv;
-    arg = parse_list(sv);
-
-    items = arg->arg_len - 1;  /* ignore $$ on end */
-    for (i = 1; i <= items; i++) {
-       if (!fcmd || fcmd->ff_type == FFt_NULL)
-           fatal("Too many field values");
-       dehoistXXX(arg,i);
-       fcmd->ff_expr = redOP(OP_ITEM,1,
-         arg[i].arg_ptr.arg_arg,Nullop,Nullop);
-       if (fcmd->ff_flags & FFf_CHOP) {
-           if ((fcmd->ff_expr[1].arg_type & A_MASK) == A_STAB) {
-               fcmd->ff_expr[1].arg_type = DD_LVAL;
-               ldehoistXXX(fcmd->ff_expr,1);
-           }
-           else if ((fcmd->ff_expr[1].arg_type & A_MASK) == A_EXPR)
-               fcmd->ff_expr[1].arg_type = A_LEXPR;
-           else
-               fatal("^ field requires scalar lvalue");
-       }
-       fcmd = fcmd->ff_next;
-    }
-    if (fcmd && fcmd->ff_type)
-       fatal("Not enough field values");
-    curcmd->cop_line = oldline;
-    Safefree(arg);
-    sv_free(sv);
-}
-
diff --git a/pat/env.pat b/pat/env.pat
new file mode 100644 (file)
index 0000000..3ba5e69
--- /dev/null
@@ -0,0 +1,22 @@
+*** /scalpel/lwall/perl5alpha4/perl.c  Fri Jan 14 05:04:50 1994
+--- perl.c     Fri Jan 14 23:22:47 1994
+***************
+*** 1303,1309 ****
+       SvMULTI_on(envgv);
+       hv = GvHVn(envgv);
+       hv_clear(hv);
+-      hv_magic(hv, envgv, 'E');
+       if (env != environ)
+           environ[0] = Nullch;
+       for (; *env; env++) {
+--- 1303,1308 ----
+***************
+*** 1314,1319 ****
+--- 1313,1319 ----
+           (void)hv_store(hv, *env, s - *env, sv, 0);
+           *s = '=';
+       }
++      hv_magic(hv, envgv, 'E');
+      }
+      tainted = 0;
+      if (tmpgv = gv_fetchpv("$",TRUE))
diff --git a/pat/inherit.pat b/pat/inherit.pat
new file mode 100644 (file)
index 0000000..71c41d4
--- /dev/null
@@ -0,0 +1,39 @@
+*** /scalpel/lwall/perl5alpha4/gv.c    Fri Jan 14 04:28:25 1994
+--- gv.c       Fri Jan 14 14:05:38 1994
+***************
+*** 133,151 ****
+       SV** svp = AvARRAY(av);
+       I32 items = AvFILL(av) + 1;
+       while (items--) {
+-          char tmpbuf[512];
+           SV* sv = *svp++;
+!          *tmpbuf = '_';
+!          SvUPGRADE(sv, SVt_PV);
+!          strcpy(tmpbuf+1, SvPV(sv, na));
+!          gv = gv_fetchpv(tmpbuf,FALSE);
+!          if (!gv || !(stash = GvHV(gv))) {
+               if (dowarn)
+                   warn("Can't locate package %s for @%s'ISA",
+                       SvPVX(sv), HvNAME(stash));
+               continue;
+           }
+!          gv = gv_fetchmeth(stash, name, len);
+           if (gv) {
+               GvCV(topgv) = GvCV(gv);                 /* cache the CV */
+               GvCVGEN(topgv) = sub_generation;        /* valid for now */
+--- 133,147 ----
+       SV** svp = AvARRAY(av);
+       I32 items = AvFILL(av) + 1;
+       while (items--) {
+           SV* sv = *svp++;
+!          HV* basestash = fetch_stash(sv, FALSE);
+!          if (!basestash) {
+               if (dowarn)
+                   warn("Can't locate package %s for @%s'ISA",
+                       SvPVX(sv), HvNAME(stash));
+               continue;
+           }
+!          gv = gv_fetchmeth(basestash, name, len);
+           if (gv) {
+               GvCV(topgv) = GvCV(gv);                 /* cache the CV */
+               GvCVGEN(topgv) = sub_generation;        /* valid for now */
diff --git a/perl.c b/perl.c
index 0293282..e638e17 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -208,11 +208,12 @@ register PerlInterpreter *sv_interp;
        sv_clean_refs();
 
     /* Delete self-reference from main symbol table */
-    GvHV(gv_fetchpv("::_main",TRUE)) = 0;
+    GvHV(gv_fetchpv("::_main",TRUE, SVt_PVHV)) = 0;
     --SvREFCNT(defstash);
 
     /* Try to destruct main symbol table.  May fail on reference loops. */
     SvREFCNT_dec(defstash);
+    defstash = 0;
 
     FREE_TMPS();
 #ifdef DEBUGGING
@@ -467,7 +468,7 @@ setuid perl scripts securely.\n");
     rslen = nrslen;
     rschar = nrschar;
     rspara = (nrslen == 2);
-    sv_setpvn(GvSV(gv_fetchpv("/", TRUE)), rs, rslen);
+    sv_setpvn(GvSV(gv_fetchpv("/", TRUE, SVt_PV)), rs, rslen);
 
     if (do_undump)
        my_unexec();
@@ -571,7 +572,7 @@ I32 gimme;          /* TRUE if called in list context */
 I32 hasargs;           /* whether to create a @_ array for routine */
 I32 numargs;           /* how many args are pushed on the stack */
 {
-    return perl_callsv((SV*)gv_fetchpv(subname, TRUE),
+    return perl_callsv((SV*)gv_fetchpv(subname, TRUE, SVt_PVCV),
                        sp, gimme, hasargs, numargs);
 }
 
@@ -618,7 +619,7 @@ I32 namlen;
 {
     register GV *gv;
 
-    if (gv = gv_fetchpv(sym,TRUE))
+    if (gv = gv_fetchpv(sym,TRUE, SVt_PV))
        sv_magic(GvSV(gv), (SV*)gv, 0, name, namlen);
 }
 
@@ -773,7 +774,7 @@ char *s;
        s++;
        return s;
     case 'v':
-       fputs("\nThis is perl, version 5.0, Alpha 8 (unsupported)\n\n",stdout);
+       fputs("\nThis is perl, version 5.0, Alpha 9 (unsupported)\n\n",stdout);
        fputs(rcsid,stdout);
        fputs("\nCopyright (c) 1989, 1990, 1991, 1992, 1993, 1994 Larry Wall\n",stdout);
 #ifdef MSDOS
@@ -841,12 +842,12 @@ init_main_stash()
     GV *gv;
     curstash = defstash = newHV();
     curstname = newSVpv("main",4);
-    GvHV(gv = gv_fetchpv("_main",TRUE)) = (HV*)SvREFCNT_inc(defstash);
+    GvHV(gv = gv_fetchpv("_main",TRUE, SVt_PVHV)) = (HV*)SvREFCNT_inc(defstash);
     SvREADONLY_on(gv);
-    HvNAME(defstash) = "main";
-    incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE)));
+    HvNAME(defstash) = savestr("main");
+    incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV)));
     SvMULTI_on(incgv);
-    defgv = gv_fetchpv("_",TRUE);
+    defgv = gv_fetchpv("_",TRUE, SVt_PV);
     curstash = defstash;
     compiling.cop_stash = defstash;
 }
@@ -966,11 +967,15 @@ sed %s -e \"/^[^#]/b\" \
            (void)seteuid(uid);         /* musn't stay setuid root */
 #else
 #ifdef HAS_SETREUID
-           (void)setreuid(-1, uid);
+           (void)setreuid((Uid_t)-1, uid);
+#else
+#ifdef HAS_SETRESUID
+           (void)setresuid((Uid_t)-1, uid, (Uid_t)-1);
 #else
            setuid(uid);
 #endif
 #endif
+#endif
            if (geteuid() != uid)
                croak("Can't do seteuid!\n");
        }
@@ -1051,7 +1056,13 @@ char *validarg;
        {
            struct stat tmpstatbuf;
 
-           if (setreuid(euid,uid) < 0 || getuid() != euid || geteuid() != uid)
+           if (
+#ifdef HAS_SETREUID
+               setreuid(euid,uid) < 0
+#elif HAS_SETRESUID
+               setresuid(euid,uid,(Uid_t)-1) < 0
+#endif
+               || getuid() != euid || geteuid() != uid)
                croak("Can't swap uid and euid");       /* really paranoid */
            if (stat(SvPVX(GvSV(curcop->cop_filegv)),&tmpstatbuf) < 0)
                croak("Permission denied");     /* testing full pathname here */
@@ -1070,7 +1081,13 @@ char *validarg;
                }
                croak("Permission denied\n");
            }
-           if (setreuid(uid,euid) < 0 || getuid() != uid || geteuid() != euid)
+           if (
+#ifdef HAS_SETREUID
+              setreuid(uid,euid) < 0
+#elif defined(HAS_SETRESUID)
+              setresuid(uid,euid,(Uid_t)-1) < 0
+#endif
+              || getuid() != uid || geteuid() != euid)
                croak("Can't reswap uid and euid");
            if (!cando(S_IXUSR,FALSE,&statbuf))         /* can real uid exec? */
                croak("Permission denied\n");
@@ -1125,11 +1142,15 @@ FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
            (void)setegid(statbuf.st_gid);
 #else
 #ifdef HAS_SETREGID
-           (void)setregid((GIDTYPE)-1,statbuf.st_gid);
+           (void)setregid((Gid_t)-1,statbuf.st_gid);
+#else
+#ifdef HAS_SETRESGID
+           (void)setresgid((Gid_t)-1,statbuf.st_gid,(Gid_t)-1);
 #else
            setgid(statbuf.st_gid);
 #endif
 #endif
+#endif
            if (getegid() != statbuf.st_gid)
                croak("Can't do setegid!\n");
        }
@@ -1139,22 +1160,30 @@ FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
                (void)seteuid(statbuf.st_uid);  /* all that for this */
 #else
 #ifdef HAS_SETREUID
-               (void)setreuid((UIDTYPE)-1,statbuf.st_uid);
+                (void)setreuid((Uid_t)-1,statbuf.st_uid);
+#else
+#ifdef HAS_SETRESUID
+                (void)setresuid((Uid_t)-1,statbuf.st_uid,(Uid_t)-1);
 #else
                setuid(statbuf.st_uid);
 #endif
 #endif
+#endif
            if (geteuid() != statbuf.st_uid)
                croak("Can't do seteuid!\n");
        }
        else if (uid) {                 /* oops, mustn't run as root */
 #ifdef HAS_SETEUID
-           (void)seteuid((UIDTYPE)uid);
+          (void)seteuid((Uid_t)uid);
 #else
 #ifdef HAS_SETREUID
-           (void)setreuid((UIDTYPE)-1,(UIDTYPE)uid);
+          (void)setreuid((Uid_t)-1,(Uid_t)uid);
 #else
-           setuid((UIDTYPE)uid);
+#ifdef HAS_SETRESUID
+          (void)setresuid((Uid_t)-1,(Uid_t)uid,(Uid_t)-1);
+#else
+          setuid((Uid_t)uid);
+#endif
 #endif
 #endif
            if (geteuid() != uid)
@@ -1222,22 +1251,22 @@ init_debugger()
     GV* tmpgv;
 
     debstash = newHV();
-    GvHV(gv_fetchpv("::_DB",TRUE)) = debstash;
+    GvHV(gv_fetchpv("::_DB",TRUE, SVt_PVHV)) = debstash;
     curstash = debstash;
-    dbargs = GvAV(gv_AVadd((tmpgv = gv_fetchpv("args",TRUE))));
+    dbargs = GvAV(gv_AVadd((tmpgv = gv_fetchpv("args",TRUE, SVt_PVAV))));
     SvMULTI_on(tmpgv);
     AvREAL_off(dbargs);
-    DBgv = gv_fetchpv("DB",TRUE);
+    DBgv = gv_fetchpv("DB",TRUE, SVt_PVGV);
     SvMULTI_on(DBgv);
-    DBline = gv_fetchpv("dbline",TRUE);
+    DBline = gv_fetchpv("dbline",TRUE, SVt_PVAV);
     SvMULTI_on(DBline);
-    DBsub = gv_HVadd(tmpgv = gv_fetchpv("sub",TRUE));
+    DBsub = gv_HVadd(tmpgv = gv_fetchpv("sub",TRUE, SVt_PVHV));
     SvMULTI_on(tmpgv);
-    DBsingle = GvSV((tmpgv = gv_fetchpv("single",TRUE)));
+    DBsingle = GvSV((tmpgv = gv_fetchpv("single",TRUE, SVt_PV)));
     SvMULTI_on(tmpgv);
-    DBtrace = GvSV((tmpgv = gv_fetchpv("trace",TRUE)));
+    DBtrace = GvSV((tmpgv = gv_fetchpv("trace",TRUE, SVt_PV)));
     SvMULTI_on(tmpgv);
-    DBsignal = GvSV((tmpgv = gv_fetchpv("signal",TRUE)));
+    DBsignal = GvSV((tmpgv = gv_fetchpv("signal",TRUE, SVt_PV)));
     SvMULTI_on(tmpgv);
     curstash = defstash;
 }
@@ -1299,33 +1328,33 @@ init_predump_symbols()
 {
     GV *tmpgv;
 
-    sv_setpvn(GvSV(gv_fetchpv("\"", TRUE)), " ", 1);
+    sv_setpvn(GvSV(gv_fetchpv("\"", TRUE, SVt_PV)), " ", 1);
 
-    stdingv = gv_fetchpv("STDIN",TRUE);
+    stdingv = gv_fetchpv("STDIN",TRUE, SVt_PVIO);
     SvMULTI_on(stdingv);
     if (!GvIO(stdingv))
        GvIO(stdingv) = newIO();
     IoIFP(GvIO(stdingv)) = stdin;
-    tmpgv = gv_fetchpv("stdin",TRUE);
+    tmpgv = gv_fetchpv("stdin",TRUE, SVt_PVIO);
     GvIO(tmpgv) = (IO*)SvREFCNT_inc(GvIO(stdingv));
     SvMULTI_on(tmpgv);
 
-    tmpgv = gv_fetchpv("STDOUT",TRUE);
+    tmpgv = gv_fetchpv("STDOUT",TRUE, SVt_PVIO);
     SvMULTI_on(tmpgv);
     if (!GvIO(tmpgv))
        GvIO(tmpgv) = newIO();
     IoOFP(GvIO(tmpgv)) = IoIFP(GvIO(tmpgv)) = stdout;
     defoutgv = tmpgv;
-    tmpgv = gv_fetchpv("stdout",TRUE);
+    tmpgv = gv_fetchpv("stdout",TRUE, SVt_PVIO);
     GvIO(tmpgv) = (IO*)SvREFCNT_inc(GvIO(defoutgv));
     SvMULTI_on(tmpgv);
 
-    curoutgv = gv_fetchpv("STDERR",TRUE);
+    curoutgv = gv_fetchpv("STDERR",TRUE, SVt_PVIO);
     SvMULTI_on(curoutgv);
     if (!GvIO(curoutgv))
        GvIO(curoutgv) = newIO();
     IoOFP(GvIO(curoutgv)) = IoIFP(GvIO(curoutgv)) = stderr;
-    tmpgv = gv_fetchpv("stderr",TRUE);
+    tmpgv = gv_fetchpv("stderr",TRUE, SVt_PVIO);
     GvIO(tmpgv) = (IO*)SvREFCNT_inc(GvIO(curoutgv));
     SvMULTI_on(tmpgv);
     curoutgv = defoutgv;               /* switch back to STDOUT */
@@ -1354,30 +1383,31 @@ register char **env;
            }
            if (s = strchr(argv[0], '=')) {
                *s++ = '\0';
-               sv_setpv(GvSV(gv_fetchpv(argv[0]+1,TRUE)),s);
+               sv_setpv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),s);
            }
            else
-               sv_setiv(GvSV(gv_fetchpv(argv[0]+1,TRUE)),1);
+               sv_setiv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),1);
        }
     }
     toptarget = NEWSV(0,0);
     sv_upgrade(toptarget, SVt_PVFM);
     sv_setpvn(toptarget, "", 0);
-    bodytarget = NEWSV(0,0);
+    tmpgv = gv_fetchpv("\001",TRUE, SVt_PV);
+    bodytarget = GvSV(tmpgv);
     sv_upgrade(bodytarget, SVt_PVFM);
     sv_setpvn(bodytarget, "", 0);
     formtarget = bodytarget;
 
     tainted = 1;
-    if (tmpgv = gv_fetchpv("0",TRUE)) {
+    if (tmpgv = gv_fetchpv("0",TRUE, SVt_PV)) {
        sv_setpv(GvSV(tmpgv),origfilename);
        magicname("0", "0", 1);
     }
-    if (tmpgv = gv_fetchpv("\024",TRUE))
+    if (tmpgv = gv_fetchpv("\024",TRUE, SVt_PV))
        time(&basetime);
-    if (tmpgv = gv_fetchpv("\030",TRUE))
+    if (tmpgv = gv_fetchpv("\030",TRUE, SVt_PV))
        sv_setpv(GvSV(tmpgv),origargv[0]);
-    if (argvgv = gv_fetchpv("ARGV",TRUE)) {
+    if (argvgv = gv_fetchpv("ARGV",TRUE, SVt_PVAV)) {
        SvMULTI_on(argvgv);
        (void)gv_AVadd(argvgv);
        av_clear(GvAVn(argvgv));
@@ -1385,7 +1415,7 @@ register char **env;
            (void)av_push(GvAVn(argvgv),newSVpv(argv[0],0));
        }
     }
-    if (envgv = gv_fetchpv("ENV",TRUE)) {
+    if (envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV)) {
        HV *hv;
        SvMULTI_on(envgv);
        hv = GvHVn(envgv);
@@ -1399,13 +1429,14 @@ register char **env;
                continue;
            *s++ = '\0';
            sv = newSVpv(s--,0);
+           sv_magic(sv, sv, 'e', *env, s - *env);
            (void)hv_store(hv, *env, s - *env, sv, 0);
            *s = '=';
        }
        hv_magic(hv, envgv, 'E');
     }
     tainted = 0;
-    if (tmpgv = gv_fetchpv("$",TRUE))
+    if (tmpgv = gv_fetchpv("$",TRUE, SVt_PV))
        sv_setiv(GvSV(tmpgv),(I32)getpid());
 
 }
@@ -1413,11 +1444,17 @@ register char **env;
 static void
 init_perllib()
 {
-    if (!tainting)
-       incpush(getenv("PERLLIB"));
+    char *s;
+    if (!tainting) {
+       s = getenv("PERL5LIB");
+       if (s)
+           incpush(s);
+       else
+           incpush(getenv("PERLLIB"));
+    }
 
 #ifndef PRIVLIB
-#define PRIVLIB "/usr/local/lib/perl"
+#define PRIVLIB "/usr/local/lib/perl5:/usr/local/lib/perl"
 #endif
     incpush(PRIVLIB);
     (void)av_push(GvAVn(incgv),newSVpv(".",1));
@@ -1437,15 +1474,43 @@ AV* list;
        CV *cv = (CV*)av_shift(list);
 
        SAVEFREESV(cv);
-       if (setjmp(top_env)) {
-           if (list == beginav) {
-               warn("BEGIN failed--execution aborted");
-               Copy(oldtop, top_env, 1, jmp_buf);
-               my_exit(1);
-           }
-       }
-       else {
+       switch (setjmp(top_env)) {
+       case 0:
            perl_callsv((SV*)cv, sp, G_SCALAR, 0, 0);
+           break;
+       case 1:
+           statusvalue = 255;  /* XXX I don't think we use 1 anymore. */
+           /* FALL THROUGH */
+       case 2:
+           /* my_exit() was called */
+           curstash = defstash;
+           if (endav)
+               calllist(endav);
+           FREE_TMPS();
+           if (statusvalue) {
+               if (list == beginav)
+                   warn("BEGIN failed--execution aborted");
+               else
+                   warn("END failed--execution aborted");
+           }
+           Copy(oldtop, top_env, 1, jmp_buf);
+           my_exit(statusvalue);
+           /* NOTREACHED */
+           return;
+       case 3:
+           if (!restartop) {
+               fprintf(stderr, "panic: restartop\n");
+               FREE_TMPS();
+               break;
+           }
+           if (stack != mainstack) {
+               dSP;
+               SWITCHSTACK(stack, mainstack);
+           }
+           op = restartop;
+           restartop = 0;
+           run();
+           break;
        }
     }
 
diff --git a/perl.h b/perl.h
index 75e66ad..d2b46f6 100644 (file)
--- a/perl.h
+++ b/perl.h
  * 4.0 baseline.
  * 
  */
+#ifndef H_PERL
+#define H_PERL 1
 
 #include "embed.h"
 
-#define VOIDWANT 1
+#define VOIDUSED 1
 #ifdef __cplusplus
 #include "config_c++.h"
 #else
@@ -121,14 +123,12 @@ char Error[1];
 #   ifndef HAS_GETPGRP
 #      define HAS_GETPGRP
 #   endif
-#   define getpgrp getpgrp2
 #endif
 
 #ifdef HAS_SETPGRP2
 #   ifndef HAS_SETPGRP
 #      define HAS_SETPGRP
 #   endif
-#   define setpgrp setpgrp2
 #endif
 
 #include <stdio.h>
@@ -146,7 +146,9 @@ char Error[1];
 /* Use all the "standard" definitions? */
 #ifdef STANDARD_C
 #   include <stdlib.h>
-#   include <string.h>
+#   ifdef I_STRING
+#     include <string.h>
+#   endif
 #   define MEM_SIZE size_t
 #else
     typedef unsigned int MEM_SIZE;
@@ -157,9 +159,9 @@ char Error[1];
 #endif
 
 #ifdef HAS_MEMCPY
-#  ifndef STANDARD_C
+#  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
 #    ifndef memcpy
-       extern char * memcpy P((char*, char*, int));
+        extern char * memcpy P((char*, char*, int));
 #    endif
 #  endif
 #else
@@ -173,7 +175,7 @@ char Error[1];
 #endif /* HAS_MEMCPY */
 
 #ifdef HAS_MEMSET
-#  ifndef STANDARD_C
+#  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
 #    ifndef memset
        extern char *memset P((char*, int, int));
 #    endif
@@ -190,7 +192,7 @@ char Error[1];
 #endif /* HAS_MEMSET */
 
 #ifdef HAS_MEMCMP
-#  ifndef STANDARD_C
+#  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
 #    ifndef memcmp
        extern int memcmp P((char*, char*, int));
 #    endif
@@ -208,7 +210,7 @@ char Error[1];
 #   endif
 #endif /* HAS_BCMP */
 
-#ifndef HAS_MEMMOVE
+#if !defined(HAS_MEMMOVE) && !defined(memmove)
 #   if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
 #      define memmove(d,s,l) bcopy(s,d,l)
 #   else
@@ -254,17 +256,19 @@ char Error[1];
 #endif
 
 #ifdef I_SYS_TIME
-#   ifdef SYSTIMEKERNEL
+#   ifdef I_SYS_TIME_KERNEL
 #      define KERNEL
 #   endif
 #   include <sys/time.h>
-#   ifdef SYSTIMEKERNEL
+#   ifdef I_SYS_TIME_KERNEL
 #      undef KERNEL
 #   endif
 #endif
 
 #ifndef MSDOS
-#include <sys/times.h>
+#  ifdef HAS_TIMES
+#    include <sys/times.h>
+#  endif
 #endif
 
 #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
@@ -273,7 +277,7 @@ char Error[1];
 
 #include <errno.h>
 #ifdef HAS_SOCKET
-#   ifndef ENOTSOCK
+#   ifdef I_NET_ERRNO
 #     include <net/errno.h>
 #   endif
 #endif
@@ -551,6 +555,7 @@ typedef union any ANY;
 union any {
     void*      any_ptr;
     I32                any_i32;
+    long       any_long;
 };
 
 #include "regexp.h"
@@ -668,10 +673,10 @@ struct Outrec {
 #endif /* MSDOS */
 
 #ifndef __cplusplus
-UIDTYPE getuid P(());
-UIDTYPE geteuid P(());
-GIDTYPE getgid P(());
-GIDTYPE getegid P(());
+Uid_t getuid P(());
+Uid_t geteuid P(());
+Gid_t getgid P(());
+Gid_t getegid P(());
 #endif
 
 #ifdef DEBUGGING
@@ -735,7 +740,7 @@ double atof P((const char*));
 
 #ifndef STANDARD_C
 /* All of these are in stdlib.h or time.h for ANSI C */
-long time();
+Time_t time();
 struct tm *gmtime(), *localtime();
 char *strchr(), *strrchr();
 char *strcpy(), *strcat();
@@ -764,7 +769,7 @@ char *strcpy(), *strcat();
 
 char *crypt P((const char*, const char*));
 char *getenv P((const char*));
-long lseek P((int,off_t,int));
+Off_t lseek P((int,Off_t,int));
 char *getlogin P((void));
 
 #ifdef EUNICE
@@ -775,16 +780,16 @@ int unlnk P((char*));
 #endif
 
 #ifndef HAS_SETREUID
-#ifdef HAS_SETRESUID
-#define setreuid(r,e) setresuid(r,e,-1)
-#define HAS_SETREUID
-#endif
+#  ifdef HAS_SETRESUID
+#    define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
+#    define HAS_SETREUID
+#  endif
 #endif
 #ifndef HAS_SETREGID
-#ifdef HAS_SETRESGID
-#define setregid(r,e) setresgid(r,e,-1)
-#define HAS_SETREGID
-#endif
+#  ifdef HAS_SETRESGID
+#    define setregid(r,e) setresgid(r,e,(Gid_t)-1)
+#    define HAS_SETREGID
+#  endif
 #endif
 
 #define SCAN_DEF 0
@@ -817,7 +822,7 @@ EXT U32             sub_generation; /* inc to force methods to be looked up again */
 EXT char **    origenviron;
 EXT U32                origalen;
 
-EXT I32 *      xiv_root;       /* free xiv list--shared by interpreters */
+EXT I32 **     xiv_root;       /* free xiv list--shared by interpreters */
 EXT double *   xnv_root;       /* free xnv list--shared by interpreters */
 EXT XRV *      xrv_root;       /* free xrv list--shared by interpreters */
 EXT XPV *      xpv_root;       /* free xpv list--shared by interpreters */
@@ -880,6 +885,8 @@ EXT char    warn_reserved[]
   INIT("Unquoted string \"%s\" may clash with future reserved word");
 EXT char       warn_nl[]
   INIT("Unsuccessful %s on filename containing newline");
+EXT char       no_hardref[]
+  INIT("Can't use a string as %s ref while \"strict refs\" averred");
 EXT char       no_usym[]
   INIT("Can't use an undefined value as %s reference");
 EXT char       no_aelem[]
@@ -1018,7 +1025,7 @@ typedef enum {
     XTERM,
     XREF,
     XSTATE,
-    XBLOCK,
+    XBLOCK
 } expectation;
 
 EXT FILE * VOL rsfp INIT(Nullfp);
@@ -1052,13 +1059,22 @@ EXT I32         thisexpr;       /* name id for nothing_in_common() */
 EXT char *     last_uni;       /* position of last named-unary operator */
 EXT char *     last_lop;       /* position of last list operator */
 EXT OPCODE     last_lop_op;    /* last list operator */
-EXT bool       in_format;      /* we're compiling a run_format */
 EXT bool       in_my;          /* we're compiling a "my" declaration */
-EXT I32                needblockscope INIT(TRUE);      /* block overhead needed? */
 #ifdef FCRYPT
 EXT I32                cryptseen;      /* has fast crypt() been initialized? */
 #endif
 
+EXT U32                hints;          /* various compilation flags */
+
+                               /* Note: the lowest 8 bits are reserved for
+                                  stuffing into op->op_private */
+#define HINT_INTEGER           0x00000001
+#define HINT_STRICT_REFS       0x00000002
+
+#define HINT_BLOCK_SCOPE       0x00000100
+#define HINT_STRICT_SUBS       0x00000200
+#define HINT_STRICT_VARS       0x00000400
+
 /**************************************************************************/
 /* This regexp stuff is global since it always happens within 1 expr eval */
 /**************************************************************************/
@@ -1136,7 +1152,7 @@ IEXT VOL U32      Idebug;
 IEXT U32       Iperldb;
 
 /* magical thingies */
-IEXT time_t    Ibasetime;              /* $^T */
+IEXT Time_t    Ibasetime;              /* $^T */
 IEXT I32       Iarybase;               /* $[ */
 IEXT SV *      Iformfeed;              /* $^L */
 IEXT char *    Ichopset IINIT(" \n-"); /* $: */
@@ -1317,7 +1333,8 @@ MGVTBL vtbl_sv =  {magic_get,
                                                0,      0};
 MGVTBL vtbl_env =      {0,     0,      0,      0,      0};
 MGVTBL vtbl_envelem =  {0,     magic_setenv,
-                                       0,      0,      0};
+                                       0,      magic_clearenv,
+                                                       0};
 MGVTBL vtbl_sig =      {0,     0,               0, 0, 0};
 MGVTBL vtbl_sigelem =  {0,     magic_setsig,
                                        0,      0,      0};
@@ -1372,3 +1389,5 @@ EXT MGVTBL vtbl_vec;
 EXT MGVTBL vtbl_bm;
 EXT MGVTBL vtbl_uvar;
 #endif
+
+#endif /* Include guard */
index 0cef761..3bcede8 100644 (file)
--- a/perl.man
+++ b/perl.man
@@ -5011,7 +5011,6 @@ out.
 You'll just have to suffer along with these silly symbols.
 Most of them have reasonable mnemonics, or analogues in one of the shells.
 .Ip $_ 8
-''' UNDER
 The default input and pattern-searching space.
 The following pairs are equivalent:
 .nf
@@ -5035,7 +5034,6 @@ The following pairs are equivalent:
 .fi 
 (Mnemonic: underline is understood in certain operations.)
 .Ip $. 8
-''' INPUT_LINE
 The current input line number of the last filehandle that was read.
 Readonly.
 Remember that only an explicit close on the filehandle resets the line number.
@@ -5043,7 +5041,6 @@ Since <> never does an explicit close, line numbers increase across ARGV files
 (but see examples under eof).
 (Mnemonic: many programs use . to mean the current line number.)
 .Ip $/ 8
-''' RS or INPUT_RECORD_SEPARATOR
 The input record separator, newline by default.
 Works like
 .IR awk 's
@@ -5059,7 +5056,6 @@ Setting it to "\en\en" will blindly assume that the next input character
 belongs to the next paragraph, even if it's a newline.
 (Mnemonic: / is used to delimit line boundaries when quoting poetry.)
 .Ip $, 8
-''' OFS or OUTPUT_FIELD_SEPARATOR
 The output field separator for the print operator.
 Ordinarily the print operator simply prints out the comma separated fields
 you specify.
@@ -5070,13 +5066,11 @@ set this variable as you would set
 OFS variable to specify what is printed between fields.
 (Mnemonic: what is printed when there is a , in your print statement.)
 .Ip $"" 8
-''' LIST_SEPARATOR
 This is like $, except that it applies to array values interpolated into
 a double-quoted string (or similar interpreted string).
 Default is a space.
 (Mnemonic: obvious, I think.)
 .Ip $\e 8
-''' ORS or OUTPUT_RECORD_SEPARATOR
 The output record separator for the print operator.
 Ordinarily the print operator simply prints out the comma separated fields
 you specify, with no trailing newline or record separator assumed.
@@ -5089,7 +5083,6 @@ ORS variable to specify what is printed at the end of the print.
 Also, it's just like /, but it's what you get \*(L"back\*(R" from
 .IR perl .)
 .Ip $# 8
-''' OFMT or OUTPUT_FORMAT
 The output format for printed numbers.
 This variable is a half-hearted attempt to emulate
 .IR awk 's
@@ -5106,33 +5099,27 @@ explicitly to get
 value.
 (Mnemonic: # is the number sign.)
 .Ip $% 8
-''' PAGE
 The current page number of the currently selected output channel.
 (Mnemonic: % is page number in nroff.)
 .Ip $= 8
-''' PRINTABLE_LINES
 The current page length (printable lines) of the currently selected output
 channel.
 Default is 60.
 (Mnemonic: = has horizontal lines.)
 .Ip $\- 8
-''' LINES_REMAINING
 The number of lines left on the page of the currently selected output channel.
 (Mnemonic: lines_on_page \- lines_printed.)
 .Ip $~ 8
-''' FORMAT_NAME
 The name of the current report format for the currently selected output
 channel.
 Default is name of the filehandle.
 (Mnemonic: brother to $^.)
 .Ip $^ 8
-''' TOP_FORMAT_NAME
 The name of the current top-of-page format for the currently selected output
 channel.
 Default is name of the filehandle with \*(L"_TOP\*(R" appended.
 (Mnemonic: points to top of page.)
 .Ip $| 8
-''' AUTOFLUSH
 If set to nonzero, forces a flush after every write or print on the currently
 selected output channel.
 Default is 0.
@@ -5147,13 +5134,11 @@ script under rsh and want to see the
 output as it's happening.
 (Mnemonic: when you want your pipes to be piping hot.)
 .Ip $$ 8
-''' PID
 The process number of the
 .I perl
 running this script.
 (Mnemonic: same as shells.)
 .Ip $? 8
-''' STATUS
 The status returned by the last pipe close, backtick (\`\`) command or
 .I system
 operator.
@@ -5163,19 +5148,16 @@ $? & 255 gives which signal, if any, the process died from, and whether
 there was a core dump.
 (Mnemonic: similar to sh and ksh.)
 .Ip $& 8 4
-''' MATCH
 The string matched by the last successful pattern match
 (not counting any matches hidden
 within a BLOCK or eval enclosed by the current BLOCK).
 (Mnemonic: like & in some editors.)
 .Ip $\` 8 4
-''' LEFT
 The string preceding whatever was matched by the last successful pattern match
 (not counting any matches hidden within a BLOCK or eval enclosed by the current
 BLOCK).
 (Mnemonic: \` often precedes a quoted string.)
 .Ip $\' 8 4
-''' RIGHT
 The string following whatever was matched by the last successful pattern match
 (not counting any matches hidden within a BLOCK or eval enclosed by the current
 BLOCK).
@@ -5190,7 +5172,6 @@ Example:
 
 .fi
 .Ip $+ 8 4
-''' LAST_PAREN_MATCH
 The last bracket matched by the last search pattern.
 This is useful if you don't know which of a set of alternative patterns
 matched.
@@ -5202,7 +5183,6 @@ For example:
 .fi
 (Mnemonic: be positive and forward looking.)
 .Ip $* 8 2
-''' MULTILINE_MATCHING
 Set to 1 to do multiline matching within a string, 0 to tell
 .I perl
 that it can assume that strings contain a single line, for the purpose
@@ -5214,7 +5194,6 @@ Default is 0.
 Note that this variable only influences the interpretation of ^ and $.
 A literal newline can be searched for even when $* == 0.
 .Ip $0 8
-''' PROGRAM_NAME
 Contains the name of the file containing the
 .I perl
 script being executed.
@@ -5226,7 +5205,6 @@ pattern matched, not counting patterns matched in nested blocks that have
 been exited already.
 (Mnemonic: like \edigit.)
 .Ip $[ 8 2
-''' ARRAY_BASE
 The index of the first element in an array, and of the first character in
 a substring.
 Default is 0, but you could set it to 1 to make
@@ -5237,7 +5215,6 @@ behave more like
 when subscripting and when evaluating the index() and substr() functions.
 (Mnemonic: [ begins subscripts.)
 .Ip $] 8 2
-''' PERL_VERSION
 The string printed out when you say \*(L"perl -v\*(R".
 It can be used to determine at the beginning of a script whether the perl
 interpreter executing the script is in the right range of versions.
@@ -5259,7 +5236,6 @@ or, used numerically,
 .fi
 (Mnemonic: Is this version of perl in the right bracket?)
 .Ip $; 8 2
-''' SUBSEP or SUBSCRIPT_SEPARATOR
 The subscript separator for multi-dimensional array emulation.
 If you refer to an associative array element as
 .nf
@@ -5286,7 +5262,6 @@ value for $;.
 Yeah, I know, it's pretty lame, but $, is already taken for something more
 important.)
 .Ip $! 8 2
-''' ERRNO
 If used in a numeric context, yields the current value of errno, with all the
 usual caveats.
 (This means that you shouldn't depend on the value of $! to be anything
@@ -5298,17 +5273,14 @@ if, for instance, you want $! to return the string for error n, or you want
 to set the exit value for the die operator.
 (Mnemonic: What just went bang?)
 .Ip $@ 8 2
-''' EVAL_ERROR
 The perl syntax error message from the last eval command.
 If null, the last eval parsed and executed correctly (although the operations
 you invoked may have failed in the normal fashion).
 (Mnemonic: Where was the syntax error \*(L"at\*(R"?)
 .Ip $< 8 2
-''' UID or REAL_USER_ID
 The real uid of this process.
 (Mnemonic: it's the uid you came FROM, if you're running setuid.)
 .Ip $> 8 2
-''' EUID or EFFECTIVE_USER_ID
 The effective uid of this process.
 Example:
 .nf
@@ -5321,7 +5293,6 @@ Example:
 (Mnemonic: it's the uid you went TO, if you're running setuid.)
 Note: $< and $> can only be swapped on machines supporting setreuid().
 .Ip $( 8 2
-''' GID or REAL_GROUP_ID
 The real gid of this process.
 If you are on a machine that supports membership in multiple groups
 simultaneously, gives a space separated list of groups you are in.
@@ -5330,7 +5301,6 @@ by getgroups(), one of which may be the same as the first number.
 (Mnemonic: parentheses are used to GROUP things.
 The real gid is the group you LEFT, if you're running setgid.)
 .Ip $) 8 2
-''' EGID or EFFECTIVE_GROUP_ID
 The effective gid of this process.
 If you are on a machine that supports membership in multiple groups
 simultaneously, gives a space separated list of groups you are in.
@@ -5343,40 +5313,35 @@ Note: $<, $>, $( and $) can only be set on machines that support the
 corresponding set[re][ug]id() routine.
 $( and $) can only be swapped on machines supporting setregid().
 .Ip $: 8 2
-''' LINE_BREAK_CHARACTERS
 The current set of characters after which a string may be broken to
 fill continuation fields (starting with ^) in a format.
 Default is "\ \en-", to break on whitespace or hyphens.
 (Mnemonic: a \*(L"colon\*(R" in poetry is a part of a line.)
+.Ip $^A 8 2
+The current value of the write accumulator for format lines.
 .Ip $^D 8 2
-''' DEBUGGING
 The current value of the debugging flags.
 (Mnemonic: value of
 .B \-D
 switch.)
 .Ip $^F 8 2
-''' SYSTEM_FD_MAX
 The maximum system file descriptor, ordinarily 2.  System file descriptors
 are passed to subprocesses, while higher file descriptors are not.
 During an open, system file descriptors are preserved even if the open
 fails.  Ordinary file descriptors are closed before the open is attempted.
 .Ip $^I 8 2
-''' INPLACE_EDIT
 The current value of the inplace-edit extension.
 Use undef to disable inplace editing.
 (Mnemonic: value of
 .B \-i
 switch.)
 .Ip $^L 8 2
-''' FORMFEED
 What formats output to perform a formfeed.  Default is \ef.
 .Ip $^P 8 2
-''' PERLDB
 The internal flag that the debugger clears so that it doesn't
 debug itself.  You could conceivable disable debugging yourself
 by clearing it.
 .Ip $^T 8 2
-''' BASETIME
 The time at which the script began running, in seconds since the epoch.
 The values returned by the
 .B \-M ,
@@ -5385,13 +5350,11 @@ and
 .B \-C
 filetests are based on this value.
 .Ip $^W 8 2
-''' WARNING
 The current value of the warning switch.
 (Mnemonic: related to the
 .B \-w
 switch.)
 .Ip $^X 8 2
-''' EXECUTABLE_NAME
 The name that Perl itself was executed as, from argv[0].
 .Ip $ARGV 8 3
 contains the name of the current file when reading from <>.
diff --git a/perl5-notes b/perl5-notes
new file mode 100644 (file)
index 0000000..c8bb4ba
--- /dev/null
@@ -0,0 +1,345 @@
+#!/usr/local/bin/perl5
+# perl5 -x notes 2> expected > actual ; diff expected actual
+open(EVAL, "| perl5 -x") || die "Can't pipe to perl5\n";
+while (<DATA>) {
+    m/prints ``(.*)''$/ && print STDERR $1,"\n";
+    print EVAL $_;
+}
+__END__
+#!/usr/local/bin/perl5
+#
+# Perl5a6 notes: Patchlevel 3
+#
+# This document is in the public domain.
+#
+# Written by Tony Sanders <sanders@bsdi.com>
+#
+# Quick examples of the new Perl5 features as of alpha6.  Look in the
+# file Changes, the man page, and in the test suite (esp t/op/ref.t)
+# for more information.  There are also a number of files in the alpha6
+# release (e.g., tie*) that show how to use various features.  Also, there
+# are a number of package modules in lib/*.pm that are of interest.
+#
+# Thanks to the following for their input:
+#     Johan.Vromans@NL.net
+#     Daniel Faken <absinthe@viva.chem.washington.edu>
+#     Tom Christiansen <tchrist@wraeththu.cs.colorado.edu>
+#     Dean Roehrich <roehrich@ferrari.cray.com>
+#     Larry Wall <lwall@netlabs.com>
+#     Lionel Cons <Lionel.Cons@cern.ch>
+#
+
+# BEGIN { }
+       # executed at load time
+       print "doody\n";
+       BEGIN { print "howdy\n"; }              # prints ``howdy''
+                                               # then prints ``doody''
+# END { }
+       # executed at exit time in reverse order of definition
+       END { print "blue sky\n"; }             # will print ``blue sky''
+       END { print "goodbye\n"; }              # will print ``goodbye''
+
+# (expr?lval:lval) = value;
+       # The (?:) operator can be used as an lvalue.
+       $a = 1; $b = 2;
+       (defined $b ? $a : $b) = 10;
+       print "$a:$b\n";                        # prints ``10:2''
+
+# new functions: abs, chr, uc, ucfirst, lc, lcfirst
+       print abs(-10), "\n";                   # prints ``10''
+       print chr(64), "\n";                    # prints ``@''
+       print uc("the"), "\n";                  # prints ``THE''
+       print ucfirst("the"), "\n";             # prints ``The''
+       print lc("THE"), "\n";                  # prints ``the''
+       print lcfirst("THE"), "\n";             # prints ``tHE''
+
+# references
+       # references
+       $thing1 = "testing";
+       $ref = \$thing1;                        # \ creates a reference
+       print $$ref,"\n" if ${$ref} eq $$ref;   # deref, prints ``testing''
+
+       # symbolic references
+       sub bat { "baz"; }
+       sub baz { print "foobar\n" };
+       &{&bat};                                # prints ``foobar''
+
+# symbol table assignment: *foo = \&func;
+       # replaces an item in the symbol table (function, scalar, array, hash)
+       # *foo = \$bar          replaces the scalar
+       # *foo = \%bar          replaces the hash table
+       # *foo = \@bar          replaces the array
+       # *foo = \&bar          replaces the function
+       # *foo = *bar           all of the above (including FILEHANDLE!)
+       # XXX: can't do just filehandles (yet)
+       #
+       # This can be used to import and rename a symbol from another package:
+       #     *myfunc = \&otherpack::otherfunc;
+
+# AUTOLOAD { ...; }
+       # called if method not found, passed function name in $AUTOLOAD
+       # @_ are the arguments to the function.
+# goto &func;
+       # goto's a function, used by AUTOLOAD to jump to the function
+# qw/arg list/;   qw(arg list);
+       # quoted words, yields a list; works like split(' ', 'arg list')
+       # not a function, more like q//;
+       {
+           package AutoLoader;
+           AUTOLOAD {
+               eval "sub $AUTOLOAD" . '{ print "@_\n"}';
+               goto &$AUTOLOAD }
+           package JAPH;
+           @ISA = (AutoLoader);
+           sub foo2 { &bar }
+           foo2 qw(Just another Perl hacker,);
+           # prints ``Just another Perl hacker,''
+       }
+# Larry notes:
+# You might point out that there's a canned Autoloader base class in the
+# library.  Another subtlety is that $AUTOLOAD is always in the same
+# package as the AUTOLOAD routine, so if you call another package's
+# AUTOLOAD explicitly you have to set $AUTOLOAD in that package first.
+
+# my
+       # lexical scoping
+       sub samp1 { print $z,"\n" }
+       sub samp2 { my($z) = "world"; &samp1 }
+       $z = "hello";
+       &samp2;                         # prints ``hello''
+
+# package;
+       # empty package; for catching non-local variable references
+       sub samp3 {
+           my $x = shift;              # local() would work also
+           package;                    # empty package
+           $main::count += $x;         # this is ok.
+           # $y = 1;                   # would be a compile time error
+       }
+
+# =>
+       # works like comma (,); use for key/value pairs
+        # sometimes used to disambiguate the final expression in a block
+       # might someday supply warnings if you get out of sync
+       %foo = ( abc => foo );
+       print $foo{abc},"\n";           # prints ``foo''
+
+# ::
+       # works like tick (') (use of ' is deprecated in perl5)
+        print $main::foo{abc},"\n";    # prints ``foo''
+
+# bless ref;
+       # Bless takes a reference and returns an "object"
+       $oref = bless \$scalar;
+
+# ->
+       # dereferences an "object"
+       $x = { def => bar };            # $x is ref to anonymous hash
+       print $x->{def},"\n";           # prints ``bar''
+
+       # method derefs must be bless'ed
+       {
+           # initial cap is encouraged to avoid naming conflicts
+           package Sample;
+           sub samp4 { my($this) = shift; print $this->{def},"\n"; }
+           sub samp5 { print "samp5: ", $_[1], "\n"; }
+           $main::y = bless $main::x;  # $x is ref, $y is "object"
+       }
+       $y->samp4();                    # prints ``bar''
+
+       # indirect object calls (same as $y->samp5(arglist))
+       samp5 $y arglist;               # prints ``samp5: arglist''
+
+       # static method calls (often used for constructors, see below)
+       samp5 Sample arglist;           # prints ``samp5: arglist''
+
+# function calls without &
+       sub samp6 { print "look ma\n"; }
+       samp6;                          # prints ``look ma''
+
+       # "forward" decl
+       sub samp7;
+       samp7;                          # prints ``look pa''
+       sub samp7 { print "look pa\n"; }
+
+       # no decl requires ()'s or initial &
+       &samp8;                         # prints ``look da''
+       samp8();                        # prints ``look da''
+       sub samp8 { print "look da\n"; }
+
+# ref
+       # returns "object" type
+       {
+           package OBJ1;
+           $x = bless \$y;             # returns "object" $x in "class" OBJ1
+           print ref $x,"\n";          # prints ``OBJ1''
+       }
+
+       # and non-references return undef.
+       $z = 1;
+       print "non-ref\n" unless ref $z;        # prints ``non-ref''
+
+       # ref's to "builtins" return type
+       print ref \$ascalar,"\n";               # prints ``SCALAR''
+       print ref \@array,"\n";                 # prints ``ARRAY''
+       print ref \%hash,"\n";                  # prints ``HASH''
+       sub func { print shift,"\n"; }
+       print ref \&func,"\n";                  # prints ``CODE''
+       print ref \\$scalar,"\n";               # prints ``REF''
+
+# tie
+       # bind a variable to a package with magic functions:
+        #     new, DESTROY, fetch, store, delete, firstkey, nextkey
+       # The exact function list varies with the variable type,
+       # see the man page and tie* for more details.
+       # Usage: tie variable, PackageName, ARGLIST
+       {
+           package TIEPACK;
+           sub new { print "NEW: @_\n"; local($x) = $_[1]; bless \$x }
+           sub fetch { print "fetch ", ref $_[0], "\n"; ${$_[0]} }
+           sub store { print "store $_[1]\n"; ${$_[0]} = $_[1] }
+           DESTROY { print "DESTROY ", ref $_[0], "\n" }
+       }
+       tie $h, TIEPACK, "black_tie";   # prints ``NEW: TIEPACK black_tie''
+       print $h, "\n";                 # prints ``fetch TIEPACK''
+                                       # prints ``black_tie''
+       $h = 'bar';                     # prints ``store bar''
+       untie $h;                       # prints ``DESTROY SCALAR''
+
+# References
+       $sref = \$scalar;               # $$sref is scalar
+       $aref = \@array;                # @$aref is array
+       $href = \%hash;                 # %$href is hash table
+       $fref = \&func;                 # &$fref is function
+       $refref = \$fref;               # ref to ref to function
+       &$$refref("call the function"); # prints ``call the function''
+
+# Anonymous data-structures
+       %hash = ( abc => foo );         # hash in perl4 (works in perl5 also)
+       print $hash{abc},"\n";          # prints ``foo''
+       $ref = { abc => bar };          # reference to anon hash
+       print $ref->{abc},"\n";         # prints ``bar''
+
+       @ary = ( 0, 1, 2 );             # array in perl4 (works in perl5 also)
+       print $ary[1],"\n";             # prints ``1''
+       $ref = [ 3, 4, 5 ];             # reference to anon array
+       print $ref->[1],"\n";           # prints ``4''
+
+# Nested data-structures
+       @foo = ( 0, { name => foobar }, 2, 3 );         # $#foo == 3
+       $aref = [ 0, { name => foobar }, 2, 3 ];        # ref to anon array
+       $href = {                                       # ref to hash of arrays
+           John => [ Mary, Pat, Blanch ],
+           Paul => [ Sally, Jill, Jane ],
+           Mark => [ Ann, Bob, Dawn ],
+       };
+       print $href->{Paul}->[0], "\n"; # prints ``Sally''
+       print $href->{Paul}[0],"\n";    # shorthand version, prints ``Sally''
+       print @{$href->{Mark}},"\n";    # prints ``AnnBobDawn''
+
+# @ISA
+       # Multiple Inheritance (get rich quick)
+       {
+           package OBJ2; sub abc { print "abc\n"; }
+           package OBJ3; sub def { print "def\n"; }
+           package OBJ4; @ISA = ("OBJ2", "OBJ3");
+           $x = bless { foo => bar };
+           $x->abc;                                    # prints ``abc''
+           $x->def;                                    # prints ``def''
+       }
+
+# Packages, Classes, Objects, Methods, Constructors, Destructors, etc.
+       # XXX: need more explinations and samples
+       {
+           package OBJ5;
+           sub new { print "NEW: @_\n"; my($x) = "empty"; bless \$x }
+           sub output { my($this) = shift; print "value = $$this\n"; }
+           DESTROY { print "OBJ5 DESTROY\n" }
+       }
+       # Constructors are often written as static method calls:
+       $x = new OBJ5;          # prints ``NEW: OBJ5''
+       $x->output;             # prints ``value = empty''
+       # The destructor is responsible for calling any base class destructors.
+       undef $x;               # prints ``OBJ5 DESTROY''
+
+# require Package;
+       # same as:  BEGIN { require 'Package.pm'; }
+# require <float>;
+       # checks against the perl version number
+       require 5.000;          # requires perl 5.0 or better
+
+# Package Modules
+# ===============
+# Yes, these are all very sketchy.  See the .pm file for details.
+
+# DynamicLoader (builtin)
+       # Public: &bootstrap
+       # Load a shared library package on systems that support it
+       # This incomplete example was extracted from lib/POSIX.pm
+       #
+       # package POSIX;
+       # requires Exporter; require AutoLoader;
+       # @ISA = (Exporter, AutoLoader, DynamicLoader);
+       # @EXPORT = qw(closedir, opendir, [..., lots of functions]);
+       # bootstrap POSIX;
+
+# Larry notes:
+# The gist of it is that DynamicLoader::bootstrap is only called if main.c
+# didn't already define MYPACKAGE::bootstrap.  So the .pm file doesn't know
+# (or care) whether the module is statically or dynamically loaded.
+
+# AutoLoader.pm
+       # Public: &AUTOLOAD
+       # Causes functions from .../lib/perl/auto/PACKAGE/*.al to autoload
+       # when used but not defined.
+
+# Config.pm
+       # Exports: %Config
+       # The data from the Configure script for perl programs (yeah)
+
+# English.pm
+       # Exports: (lots of verbose variables)
+       # The "english" versions of things like $_ $| $=
+
+# Exporter.pm
+       # Public: &import
+       # import PACKAGE [@symbols]
+       # requires PACKAGE to define @EXPORT
+       {
+           package FOOBAR;  
+           require Exporter;
+           @ISA = (Exporter);
+           @EXPORT = (foo, bar);
+           sub foo { print "FOO\n" };
+           sub bar { print "BAR\n" };
+           1;
+           package BAT;
+           # require FOOBAR;   # not in this example
+           import FOOBAR;
+           @ISA = ();
+           &foo;                       # prints ``FOO''
+       }
+
+# FileHandle.pm
+       # Exports: (lots of filehandle functions)
+       # English versions of various filehandle operations
+
+# Hostname.pm
+       # Exports: &hostname
+       # Routine to get hostname
+       # {
+       #    require Hostname; import Hostname;
+       #    print &hostname,"\n";      # prints your hostname
+       # }
+
+# POSIX.pm
+       # Exports: (posix functions and defines)
+       # POSIX.1 bindings
+
+# SDBM_File.pm
+       # SDBM interfaces (use with `tie')
+       # Other DBM interfaces work the same way
+
+# when the script exits the END section gets executed and prints ``goodbye''
+# ENDs are executed in reverse order of definition. prints ``blue sky''
+__END__
index 75a3d6f..d3ff323 100644 (file)
@@ -32,11 +32,7 @@ void
 perl_init_ext()
 {
     char *file = __FILE__;
+    /* Do not delete this line--writemain depends on it */
+       boot_DynamicLoader();
 
-#ifdef USE_DYNAMIC_LOADING
-    boot_DynamicLoader();
-#endif
-    newXSUB("POSIX::bootstrap", 0, boot_POSIX, file);
-    newXSUB("NDBM_File::bootstrap", 0, boot_NDBM_File, file);
-    newXSUB("ODBM_File::bootstrap", 0, boot_ODBM_File, file);
 }
diff --git a/perly.c b/perly.c
index 91854f9..6c4b9fe 100644 (file)
--- a/perly.c
+++ b/perly.c
@@ -27,1371 +27,1353 @@ typedef union {
 #define FORMAT 263
 #define SUB 264
 #define PACKAGE 265
-#define WHILE 266
-#define UNTIL 267
-#define IF 268
-#define UNLESS 269
-#define ELSE 270
-#define ELSIF 271
-#define CONTINUE 272
-#define FOR 273
-#define LOOPEX 274
-#define DOTDOT 275
-#define FUNC0 276
-#define FUNC1 277
-#define FUNC 278
-#define RELOP 279
-#define EQOP 280
-#define MULOP 281
-#define ADDOP 282
-#define DOLSHARP 283
-#define DO 284
-#define LOCAL 285
-#define DELETE 286
-#define HASHBRACK 287
-#define NOAMP 288
-#define OROP 289
-#define ANDOP 290
-#define LSTOP 291
-#define OROR 292
-#define ANDAND 293
-#define BITOROP 294
-#define BITANDOP 295
-#define UNIOP 296
-#define SHIFTOP 297
-#define MATCHOP 298
-#define UMINUS 299
-#define REFGEN 300
-#define POWOP 301
-#define PREINC 302
-#define PREDEC 303
-#define POSTINC 304
-#define POSTDEC 305
-#define ARROW 306
+#define HINT 266
+#define WHILE 267
+#define UNTIL 268
+#define IF 269
+#define UNLESS 270
+#define ELSE 271
+#define ELSIF 272
+#define CONTINUE 273
+#define FOR 274
+#define LOOPEX 275
+#define DOTDOT 276
+#define FUNC0 277
+#define FUNC1 278
+#define FUNC 279
+#define RELOP 280
+#define EQOP 281
+#define MULOP 282
+#define ADDOP 283
+#define DOLSHARP 284
+#define DO 285
+#define LOCAL 286
+#define DELETE 287
+#define HASHBRACK 288
+#define NOAMP 289
+#define OROP 290
+#define ANDOP 291
+#define LSTOP 292
+#define OROR 293
+#define ANDAND 294
+#define BITOROP 295
+#define BITANDOP 296
+#define UNIOP 297
+#define SHIFTOP 298
+#define MATCHOP 299
+#define UMINUS 300
+#define REFGEN 301
+#define POWOP 302
+#define PREINC 303
+#define PREDEC 304
+#define POSTINC 305
+#define POSTDEC 306
+#define ARROW 307
 #define YYERRCODE 256
 short yylhs[] = {                                        -1,
    30,    0,    7,    3,    8,    8,    8,    9,    9,    9,
     9,   23,   23,   23,   23,   23,   23,   13,   13,   13,
    11,   11,   11,   11,   29,   29,   10,   10,   10,   10,
    10,   10,   10,   10,   12,   12,   26,   26,   28,   28,
-    1,    1,    1,    2,    2,   31,   31,   32,   32,   14,
-   14,   27,   27,   27,   27,   27,   27,   27,   27,   15,
+    1,    1,    1,    1,    2,    2,   31,   31,   32,   32,
+   33,   33,   14,   14,   27,   27,   27,   27,   27,   27,
+   27,   27,   15,   15,   15,   15,   15,   15,   15,   15,
    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   16,   16,   16,   16,   16,   16,
+   15,   15,   15,   15,   15,   15,   15,   16,   16,   16,
    16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
    16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
    16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
    16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
    16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-   16,   16,   24,   24,   22,   17,   18,   19,   20,   21,
-   25,   25,   25,   25,    4,    4,    5,    5,    6,    6,
+   16,   16,   16,   16,   16,   24,   24,   22,   17,   18,
+   19,   20,   21,   25,   25,   25,   25,    4,    4,    5,
+    5,    6,    6,
 };
 short yylen[] = {                                         2,
     0,    2,    4,    0,    0,    2,    2,    2,    1,    2,
     3,    1,    1,    3,    3,    3,    3,    0,    2,    6,
     6,    6,    4,    4,    0,    2,    7,    7,    5,    5,
     8,    7,   10,    3,    0,    1,    0,    1,    0,    1,
-    1,    1,    1,    3,    2,    3,    3,    3,    2,    3,
-    1,    3,    5,    4,    6,    6,    3,    2,    4,    3,
-    4,    4,    4,    4,    4,    4,    4,    4,    3,    3,
-    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-    3,    5,    3,    1,    2,    2,    2,    2,    2,    2,
-    2,    2,    2,    2,    3,    2,    3,    2,    3,    3,
-    1,    1,    4,    5,    4,    1,    1,    1,    5,    6,
-    5,    6,    5,    4,    5,    6,    8,    1,    1,    3,
-    4,    3,    4,    2,    2,    4,    5,    4,    5,    1,
-    2,    1,    2,    2,    1,    3,    3,    4,    4,    6,
-    1,    1,    0,    1,    2,    2,    2,    2,    2,    2,
-    1,    1,    1,    1,    2,    1,    2,    1,    3,    2,
+    1,    1,    1,    1,    3,    2,    3,    3,    3,    2,
+    3,    4,    3,    1,    3,    5,    4,    6,    6,    3,
+    2,    4,    3,    4,    4,    4,    4,    4,    4,    4,
+    4,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+    3,    3,    3,    3,    5,    3,    1,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    3,    2,    3,
+    2,    3,    3,    1,    1,    4,    5,    4,    1,    1,
+    1,    5,    6,    5,    6,    5,    4,    5,    6,    8,
+    1,    1,    3,    4,    3,    4,    2,    2,    4,    5,
+    4,    5,    1,    2,    1,    2,    2,    1,    3,    3,
+    4,    4,    6,    1,    1,    0,    1,    2,    2,    2,
+    2,    2,    2,    1,    1,    1,    1,    2,    1,    2,
+    1,    3,    2,
 };
 short yydefred[] = {                                      1,
-    0,    5,    0,   40,    0,    0,    0,    6,   41,    7,
-    9,    0,   42,   43,    4,    0,   45,    0,    0,   49,
-   12,    0,    0,  118,    0,  154,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    8,
-    0,    0,    0,    0,    0,  106,  108,  102,    0,    0,
-    0,  142,    5,   44,   47,   46,   48,  151,  153,  152,
+    0,    5,    0,   40,    0,    0,    0,    0,    6,   41,
+    7,    9,    0,   42,   43,   44,    4,    0,   46,    0,
+    0,   50,    0,   12,    0,    0,  121,    0,  157,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  149,    0,  125,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   58,    0,
-  133,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   98,    0,  145,  146,  147,  148,  150,    0,   34,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   10,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    8,    0,    0,    0,    0,    0,  109,  111,
+  105,    0,    0,    0,  145,    5,   45,   48,   47,   49,
+   51,  156,    0,  154,  155,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   90,   91,    0,    0,    0,    0,    0,    0,
-    0,   11,    0,    0,   57,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   36,    0,  136,
-  137,    0,    0,    0,    0,    0,    0,    0,  100,    0,
-    0,   99,  122,    0,   52,    0,  156,    0,    0,    0,
-  158,   97,   26,    0,    0,    0,    0,    0,    0,    0,
+    0,  152,    0,  128,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   61,    0,  136,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  101,    0,  148,  149,
+  150,  151,  153,    0,   34,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   93,   94,    0,
+    0,    0,    0,    0,    0,    0,   11,    0,    0,   52,
+   60,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   36,    0,  139,  140,    0,    0,    0,
+    0,    0,    0,    0,  103,    0,    0,  102,  125,    0,
+   55,    0,  159,    0,    0,    0,  161,  100,   26,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  120,    0,    0,    0,    3,  139,    0,    0,   29,
-    0,   30,    0,    0,    0,   23,    0,   24,    0,    0,
-    0,  138,   59,    0,  126,    0,  128,    0,    0,    0,
-    0,  160,  123,    0,  155,    0,  157,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  105,    0,  103,    0,  114,  121,    0,   54,    0,    0,
-    0,    0,   19,    0,    0,    0,    0,    0,   53,  127,
-  129,    0,    0,  159,  113,    0,    0,  111,    0,    0,
-  104,  109,  115,    0,  140,   27,   28,   21,    0,   22,
-    0,   32,    0,    0,  116,  112,  110,   56,   55,    0,
-    0,   31,    0,    0,    0,  117,   20,   33,
+    0,    0,    0,    0,    0,    0,    0,  123,    0,    0,
+    0,    3,  142,    0,    0,   29,    0,   30,    0,    0,
+    0,   23,    0,   24,    0,    0,    0,  141,   62,    0,
+  129,    0,  131,    0,    0,    0,    0,  163,  126,    0,
+  158,    0,  160,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  108,    0,  106,    0,
+  117,  124,    0,   57,    0,    0,    0,    0,   19,    0,
+    0,    0,    0,    0,   56,  130,  132,    0,    0,  162,
+  116,    0,    0,  114,    0,    0,  107,  112,  118,    0,
+  143,   27,   28,   21,    0,   22,    0,   32,    0,    0,
+  119,  115,  113,   59,   58,    0,    0,   31,    0,    0,
+    0,  120,   20,   33,
 };
 short yydgoto[] = {                                       1,
-    8,    9,   73,  199,  202,  192,   79,    3,   10,   11,
-   60,  176,  256,  108,   62,   63,   64,   65,   66,   67,
-   68,   69,  178,  109,   71,  168,   72,   12,  130,    2,
-   13,   14,
+    9,   10,   76,  205,  208,  198,   82,    3,   11,   12,
+   63,  182,  262,  113,   65,   66,   67,   68,   69,   70,
+   71,   72,  184,  114,   74,  174,   75,   13,  135,    2,
+   14,   15,   16,
 };
 short yysindex[] = {                                      0,
-    0,    0,   74,    0, -113, -240,  -53,    0,    0,    0,
-    0,  938,    0,    0,    0,  -47,    0,  -51,   28,    0,
-    0,    0,  -33,    0,   75,    0,  -22,  -21,  -20,  -14,
-  148, 2770,   87,   94,  110,  -33, 2820, 2770,  171, 1094,
- -214, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 1146,    0,
- 2770, 2770, 1209,  -33,  -33,  -33,  -33,  -33, -194,    0,
-   47,  814,  -70,  -52,  -50,    0,    0,    0,  120,   89,
- -138,    0,    0,    0,    0,    0,    0,    0,    0,    0,
- 2770, 2770, 2770,  -47, 2770,  -47, 2770,  -47, 2770,  -47,
- 1324,  157,  814,  161, 1439, 2770,    0,  170,    0, -103,
-  -26, -103,  178,   93,   95,   67, 2770,  168,    0,  767,
-    0, -103,  -70,  -70,  -70,  -87,  -87,  130,   11,  -70,
-  -70,    0,  -16,    0,    0,    0,    0,    0,  -47,    0,
- 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 1495, 1595,
- 2770, 2770, 2770, 2770, 1642, 1766, 1910, 1957, 2034, 2770,
- 2081, 2770,    0,    0,  -89, 2770, 2770, 2770, 2770, 2770,
- 2225,    0, -247,  -92,    0,  201,  168,  189, -194,  145,
- -194,  174,   38,  188,   38,  182,  -29,    0, 2770,    0,
-    0,  206,  202,  767, 2349, 2396,  128, 2770,    0, 2493,
-  132,    0,    0,  767,    0, 2770,    0, 2540,  162, 2664,
-    0,    0,    0,  168,  168,  168,  168, 1295,   52, -103,
-  687, 2770,  -40, 2770, -176,  985, 1295, 1295,  350, 2770,
-  176, 2770,  236, 2770,  420, 2770,  493, 2770,  116,  -42,
- 2770,  -42,  102, 2770,  225, 2770,   -4,  103,    3,  107,
-   13,    0,   11,  232, 2770,    0,    0, 2770,  -47,    0,
-  -47,    0,  -47,  -47,  235,    0,  -47,    0, 2770,  -47,
-   11,    0,    0,  238,    0,   11,    0,   11, 2770,  108,
-  160,    0,    0,   14,    0, 2770,    0, 1295, 1295, 2770,
- 1295, 1295, 1295, 1295, 1295, 1295,  167,  131, 2770,   17,
-    0,  172,    0,  175,    0,    0, 2770,    0,  719, -194,
- -194,   38,    0, 2770,   38,  228, -194,  -47,    0,    0,
-    0,  133,  179,    0,    0,   19,  379,    0,  186,  277,
-    0,    0,    0,  278,    0,    0,    0,    0,  230,    0,
- 1324,    0, -194,  198,    0,    0,    0,    0,    0,  -47,
-  289,    0,  300,   38,  -47,    0,    0,    0,
+    0,    0,   74,    0, -120, -227,  -57, -209,    0,    0,
+    0,    0,  893,    0,    0,    0,    0,  -67,    0,  -52,
+   52,    0,  993,    0,    0,   -4,    0,   25,    0,  -31,
+  -23,  -19,  -11,   77, 2687,   76,  106,  113,   -4, 2786,
+ 2687,   87, 1043, -132, 2687, 2687, 2687, 2687, 2687, 2687,
+ 2687, 1100,    0, 2687, 2687, 1222,   -4,   -4,   -4,   -4,
+   -4, -116,    0,  -21, 1549,  -87,  -69,  -40,    0,    0,
+    0,  145,  115, -121,    0,    0,    0,    0,    0,    0,
+    0,    0,   -1,    0,    0, 2687, 2687, 2687,  -67, 2687,
+  -67, 2687,  -67, 2687,  -67, 1329,  150, 1549,  151, 1394,
+ 2687,    0,  164,    0,  324,  -29,  324,  170,   88,  102,
+   11, 2687,  190,    0,  442,    0,  324,  -87,  -87,  -87,
+  -86,  -86,  149,   -2,  -87,  -87,    0,  -30,    0,    0,
+    0,    0,    0,  -67,    0, 2687, 2687, 2687, 2687, 2687,
+ 2687, 2687, 2687, 1451, 1501, 2687, 2687, 2687, 2687, 1598,
+ 1680, 1774, 1870, 1964, 2687, 2043, 2687,    0,    0,  -85,
+ 2687, 2687, 2687, 2687, 2687, 2143,    0, -248,  -49,    0,
+    0, 1273,  190,  195, -116,  143, -116,  181,  -12,  182,
+  -12,  192,   36,    0, 2687,    0,    0,  191,  222,  442,
+ 2242, 2315,  141, 2687,    0, 2415,  142,    0,    0,  442,
+    0, 2687,    0, 2514,  177, 2587,    0,    0,    0,  190,
+  190,  190,  190,   18,  660,  324, -131, 2687, -181, 2687,
+ -230,  829,   18,   18, 1915, 2687,  710, 2687,  455, 2687,
+   46, 2687,  276, 2687, -127,  -28, 2687,  -28,   71, 2687,
+  237, 2687,  -26,  122,  -20,  134,    2,    0,   -2,  247,
+ 2687,    0,    0, 2687,  -67,    0,  -67,    0,  -67,  -67,
+  249,    0,  -67,    0, 2687,  -67,   -2,    0,    0,  252,
+    0,   -2,    0,   -2, 2687,  135,  171,    0,    0,    6,
+    0, 2687,    0,   18,   18, 2687,   18,   18,   18,   18,
+   18,   18,  183,  136, 2687,   15,    0,  185,    0,  193,
+    0,    0, 2687,    0,  290, -116, -116,  -12,    0, 2687,
+  -12,  236, -116,  -67,    0,    0,    0,  153,  194,    0,
+    0,   17,  392,    0,  200,  261,    0,    0,    0,  274,
+    0,    0,    0,    0,  197,    0, 1329,    0, -116,  205,
+    0,    0,    0,    0,    0,  -67,  291,    0,  292,  -12,
+  -67,    0,    0,    0,
 };
 short yyrindex[] = {                                      0,
-    0,    0,  468,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  505,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  559,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    1, 2846,    0,    0,    0,    0,    0,    0,    0,
-    0, 3442, 3496,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  100,    0,
-   15,  219,  605,  650, 3539,    0,    0,    0, 2912,    0,
+    0,    0,    0,    0,  557,    0,    0,    0,    0,    0,
+    0,    0,    0,    0, 3333, 2837,    0,    0,    0,    0,
+    0,    0,    0,    0, 3423, 3589,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
- 3442,    0,  310,    0,    0,    0,    0,    0,    0,    0,
-  266,    0, 1970,    0,    0,  311,    0, 2978,    0, 3986,
- 3711, 4119,    0,    0,    0,    0, 3442, 3026,    0, 5027,
-    0, 4165, 5067, 5103, 5139, 5175, 5211, 3104,    0, 5282,
- 5466,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  105,    0,   23,   16, 4876,  618, 3639,    0,    0,
+    0, 2892,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0, 3423,    0,  294,    0,    0,
+    0,    0,    0,    0,    0,  284,    0,  969,    0,    0,
+  306,    0, 2936,    0, 1830, 3682, 2474,    0,    0,    0,
+    0, 3423, 2991,    0, 4707,    0, 4051, 4923, 4973, 5009,
+ 5045, 5092, 3152,    0, 5139, 5187,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0, 1038,    0,    0,   34,    0,  163,    0,
-  163,    0,  284,    0,  284,    0,  295,    0,    0,    0,
-    0,    0,    0,  311,    0,    0,    0,    0,    0,    0,
-    0,    0,    0, 5027,    0,    0,    0,    0, 3281,    0,
-    0,    0,    0,   57,   58,   80,   82, 3930, 1699, 4226,
- 4267,    0, 3794,    0, 3835, 4850, 4325, 4567,    0,    0,
- 4505,    0, 4446,    0, 4405,    0, 4312,    0, 3879, 3359,
-    0, 3400,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0, 3442,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  296,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  943,    0,
+    0,    0,   61,    0,  165,    0,  165,    0,  233,    0,
+  233,    0,  293,    0,    0,    0,    0,    0,    0,  306,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, 4707,
+    0,    0,    0,    0, 3207,    0,    0,    0,    0,   65,
+   73,   81,   85, 2218, 4507, 4093, 4134,    0, 3723,    0,
+ 3769,  -25, 3057, 4364,    0,    0, 4466,    0, 4456,    0,
+ 4415,    0, 4176,    0, 4010, 3250,    0, 3291,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0, 4593, 4634,    0,
- 4685, 4690, 4696, 4747, 4757, 4788,    0,    0,  311,    0,
-    0,    0,    0,    0,    0,    0,  311,    0,    0,  163,
-  163,  284,    0,    0,  284,    0,  163,    0,    0,    0,
-    0,    0,    0,    0,    0,    0, 2456,    0,    0,    0,
+ 3423,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  295,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  329,    0,  163,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  284,    0,    0,    0,    0,
+    0,    0,    0, 4519, 4565,    0, 4570, 4621, 4758, 4787,
+ 4806, 4857,    0,    0,  306,    0,    0,    0,    0,    0,
+    0,    0,  306,    0,    0,  165,  165,  233,    0,    0,
+  233,    0,  165,    0,    0,    0,    0,    0,    0,    0,
+    0,    0, 4514,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  308,    0,  165,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  233,
+    0,    0,    0,    0,
 };
 short yygindex[] = {                                      0,
-    0,    0,    0, -148,    0,    0,   -5,  298,    0,    0,
-    0,   41, -170,   -3, 5451,  561, 1087,    0,    0,    0,
-    0,    0,  367,  -80,   12,  121,    0,    0, -120,    0,
-    0,    0,
+    0,    0,    0, -171,    0,    0,   -5,  279,    0,    0,
+    0,   13, -180,   -3, 5357,  586,  585,    0,    0,    0,
+    0,    0,  344,  362,  359,   95,    0,    0, -130,    0,
+    0,    0,    0,
 };
-#define YYTABLESIZE 5767
-short yytable[] = {                                      17,
-  165,  236,   55,  156,  258,   20,   59,   75,   61,   15,
-   74,  197,   76,  186,  198,  183,   18,   83,   85,   87,
-  156,   84,   86,   88,   90,   89,  193,  200,  260,  195,
-  244,   99,  246,  234,   81,  152,  106,  111,  158,  135,
-  160,  130,  107,  245,  130,  119,  135,   97,  250,  123,
-  252,  197,  152,  110,  198,   13,  135,  135,  130,  130,
-  135,  130,  135,  130,  158,  124,  125,  126,  127,  128,
-  157,   15,  159,   13,   38,   15,  201,  129,  169,  167,
-  171,  170,  173,  172,  175,  174,   77,  177,  291,   15,
-  135,  182,   38,  130,  296,  293,  157,   16,   17,   25,
-   15,   15,   15,  264,  139,  295,  315,  184,   15,  321,
-  190,  336,  308,  273,   82,   16,   17,  310,  194,  311,
-   14,  150,   15,  203,  151,  191,   94,  204,  205,  206,
-  207,  328,   25,   95,  330,   25,   25,   25,   14,   25,
-   15,   25,   25,   16,   25,  135,  135,  162,  233,   96,
-  135,  135,  237,  238,  239,  240,  241,  243,   25,  161,
-  287,  292,   25,   25,  298,  294,  313,  163,  235,    4,
-    5,    6,    7,  347,  135,  261,  135,  139,  140,  326,
-  327,  266,  268,   55,  270,  251,  332,   91,  135,  319,
-   25,  334,  274,  149,  150,   25,  179,  151,   25,   25,
-   25,  180,   25,   19,   25,   25,   55,   25,  320,  185,
-  103,  135,  342,   55,  253,  188,  324,  135,  155,  189,
-  196,   25,   25,   78,   25,   25,   25,   26,  257,  249,
-  288,  135,  290,  153,  154,  155,  131,  132,  133,  134,
-  259,  247,  263,  300,  248,  301,  262,  302,  303,  135,
-  269,  305,  276,   25,  307,  167,  272,  150,  151,   51,
-  151,  143,   51,  144,  289,  312,  130,  130,  130,  130,
-  340,  297,  316,  135,  304,  130,   51,   51,  309,  130,
-  130,  130,  130,   18,  314,   25,  331,   25,   25,  130,
-  130,  318,  130,  130,  130,  130,  322,  130,  130,  323,
-  329,  130,  333,  335,  130,  130,  130,  254,  255,   51,
-  337,   51,  131,  132,  133,  134,   18,  338,  339,   18,
-   18,   18,  343,   18,   35,   18,   18,   61,   18,  345,
-  137,  138,  139,  140,  344,    4,    5,    6,    7,  348,
-  346,   51,   18,  145,  146,  147,  148,   18,  149,  150,
-   37,  143,  151,   13,   37,   25,   25,   25,   25,   25,
-   25,   25,   25,   25,   25,   25,   25,   25,   25,   35,
-  164,  341,   25,   25,   18,   25,   25,   25,   70,  306,
-    0,    0,   25,   25,   25,   25,   25,   25,    0,    0,
-   25,    0,    0,    0,    0,   25,  139,  140,    0,   25,
-    0,   25,   25,    0,    0,  153,   18,  280,   18,   18,
-  143,    0,  144,  150,    0,    0,  151,    0,   25,   25,
+#define YYTABLESIZE 5643
+short yytable[] = {                                      19,
+  264,   22,   17,  161,  161,  242,   78,   62,   88,   64,
+  192,  266,   77,  206,   79,   84,   90,  140,   84,   83,
+   92,  163,  140,  140,   89,   91,   93,   95,   94,   20,
+  250,   58,   84,   84,  104,  157,  157,  240,  203,  111,
+  116,  204,  140,  251,  256,  140,  258,   23,  124,  140,
+  165,  144,  128,  162,  196,   17,   54,  170,  140,   54,
+  140,  163,  207,   13,   87,   84,  297,   84,  155,  197,
+   17,  156,  299,   54,   54,  252,  203,  302,  148,  204,
+  149,   13,  164,  175,  173,  177,  176,  179,  178,  181,
+  180,   17,  183,  162,  301,  314,  188,   84,  321,   17,
+  316,   38,  317,   17,   25,   16,   54,  327,   54,  342,
+   80,   17,   58,   17,  140,   99,   96,  155,   17,   38,
+  156,   14,   58,   16,  112,   15,  108,  334,  209,  293,
+  336,   17,  210,  211,  212,  213,   18,   25,   54,   14,
+   25,   25,   25,   15,   25,  100,   25,   25,  142,   25,
+  144,  145,  101,  239,  144,  145,  134,  243,  244,  245,
+  246,  247,  249,   25,   25,  140,  154,  155,   25,  353,
+  156,  155,  241,  167,  156,  332,  333,  140,  140,  140,
+  298,  267,  338,  257,  166,  168,  140,  272,  274,  185,
+  276,  186,  300,  319,  325,   25,  140,   25,  280,   21,
+   25,   25,   25,  191,   25,   58,   25,   25,  348,   25,
+  194,  340,    4,    5,    6,    7,    8,  158,  159,  160,
+  160,  259,  263,   25,  140,  140,  195,   25,   25,   25,
+   25,  268,   18,  140,  140,  255,  294,  346,  296,  202,
+  140,   84,   84,   84,   84,  136,  137,  138,  139,  306,
+  265,  307,   84,  308,  309,   25,   29,  311,  260,  261,
+  313,  173,  269,  275,   84,   18,  278,  282,   18,   18,
+   18,  318,   18,  156,   18,   18,  295,   18,  322,   84,
+   84,   84,   54,   54,   54,   54,  303,   25,  310,   25,
+   25,   18,  315,  141,  337,  320,   18,  142,  143,  144,
+  145,  344,  136,  137,  138,  139,  335,  324,  339,  328,
+  150,  151,  152,  153,  345,  154,  155,  329,  341,  156,
+   54,   54,   54,   18,  343,  142,  143,  144,  145,  349,
+  331,  351,  352,   64,   37,    4,    5,    6,    7,    8,
+  350,  153,   35,  154,  155,  354,  146,  156,   35,  347,
+  148,   13,  149,   37,  169,   18,   73,   18,   18,  312,
    25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
-   25,   25,    0,    0,    0,   25,   25,    0,   25,   25,
-   25,  144,    0,    0,    0,   25,   25,   25,   25,   25,
-   25,    0,    0,   25,  137,  138,  139,  140,   25,    0,
-    0,    0,   25,    0,   25,   25,    0,    2,  146,  147,
-  148,    0,  149,  150,    0,  136,  151,    0,    0,  137,
-  138,  139,  140,    0,   51,   51,   51,   51,    0,  141,
-  142,    0,  145,  146,  147,  148,    0,  149,  150,    0,
-   39,  151,    0,   39,   39,   39,    0,   39,    0,   39,
-   39,    0,   39,    0,  137,  138,  139,  140,    0,    0,
-    0,    0,   51,   51,   51,    0,   39,    0,    0,  147,
-  148,   39,  149,  150,    0,    0,  151,    0,    0,   18,
+   25,   25,   25,   25,   25,    0,    0,    0,   25,   25,
+    0,   25,   25,   25,   86,    0,    0,    0,   25,   25,
+   25,   25,   25,   25,    0,    0,   25,  102,    0,    0,
+    0,   25,    0,  115,    0,   25,    0,   25,   25,    0,
+    0,  156,    0,    0,    0,  129,  130,  131,  132,  133,
+   25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+   25,   25,   25,   25,   25,    0,    0,    0,   25,   25,
+    0,   25,   25,   25,    0,    0,    0,  171,   25,   25,
+   25,   25,   25,   25,  149,    0,   25,    0,    0,  190,
+    0,   25,  189,    0,    0,   25,    0,   25,   25,    0,
+  200,    0,    0,  199,   47,    0,  201,   58,   60,   57,
+    0,   52,    0,   61,   55,    0,   54,    0,   18,   18,
    18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
-   18,   18,   18,    0,    0,    0,   18,   18,   39,   18,
+   18,   18,   18,    0,    2,   59,   18,   18,    0,   18,
    18,   18,    0,    0,    0,    0,   18,   18,   18,   18,
    18,   18,    0,    0,   18,    0,    0,    0,    0,   18,
-    0,    0,    0,   18,    0,   18,   18,    0,    0,    0,
-   39,  151,    0,   39,  151,  151,  151,    0,  151,  141,
-  151,  151,  141,  151,  113,  114,  115,  116,  117,    0,
-    0,  120,  121,    0,    0,    0,  141,  141,    0,  141,
-    0,  141,  151,    0,  136,    0,    0,    0,  137,  138,
-  139,  140,    0,    0,    0,    0,    0,    0,  141,  142,
-    0,  145,  146,  147,  148,   84,  149,  150,   84,  141,
-  151,  141,    0,  136,    0,    0,    0,  137,  138,  139,
-  140,    0,   84,   84,    0,   84,    0,   84,    0,    0,
-  145,  146,  147,  148,    0,  149,  150,    0,    0,  151,
-    0,  141,  152,    0,  151,  152,  152,  152,    0,  152,
-  101,  152,  152,  101,  152,    0,    0,   84,  137,  138,
-  139,  140,    0,    0,    0,    0,    0,  101,  101,    0,
-  101,    0,  101,  152,  148,    0,  149,  150,    0,    0,
-  151,    0,    0,   39,   39,   39,   39,   39,   39,    0,
-    0,    0,    0,   39,   39,   39,   39,    0,    0,    0,
-   39,   39,  101,   39,   39,   39,    0,    0,    0,    0,
-   39,   39,   39,   39,   39,   39,    0,    0,   39,  325,
-    0,    0,    0,   39,    0,    0,    0,   39,    0,   39,
-   39,  137,  138,  139,  140,  152,    0,    0,    0,  143,
-    0,  144,    0,    0,    0,    0,    0,    0,    0,  149,
-  150,    0,    0,  151,    0,    0,    0,    0,    0,   44,
-    0,    0,   55,   57,   54,    0,   49,    0,   58,   52,
-    0,   51,    0,    0,    0,  151,  151,  151,  151,  151,
-    0,    0,    0,    0,  141,  141,  141,  141,    0,    0,
-   56,    0,  151,  141,  151,  151,  151,  141,  141,  141,
-  141,  151,  151,  151,  151,  151,  151,  141,  141,  151,
-  141,  141,  141,  141,  151,  141,  141,   53,  151,  141,
-  151,  151,  141,  141,  141,    0,    0,    0,    0,    0,
-   84,   84,   84,   84,  143,    0,  144,    0,    0,   84,
-    0,    0,    0,   84,   84,   84,   84,    0,    0,   15,
-    0,    0,   45,   84,   84,    0,   84,   84,   84,   84,
-    0,   84,   84,    0,    0,   84,  152,  152,  152,  152,
-  152,    0,    0,    0,    0,  101,  101,  101,  101,    0,
-    0,    0,    0,  152,  101,  152,  152,  152,  101,  101,
-  101,  101,  152,  152,  152,  152,  152,  152,  101,  101,
-  152,  101,  101,  101,  101,  152,  101,  101,    0,  152,
-  101,  152,  152,  101,  101,  101,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  137,    0,  139,  140,    0,
-   44,    0,    0,   55,   57,   54,    0,   49,    0,   58,
-   52,    0,   51,  149,  150,    0,    0,  151,    0,    0,
-    0,    0,    0,  136,    0,    0,   50,  137,  138,  139,
-  140,   56,    0,    0,    0,    0,    0,  141,  142,    0,
-  145,  146,  147,  148,    0,  149,  150,    0,    0,  151,
-    0,    0,    0,   22,   23,   24,   25,   26,   53,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   32,    0,   33,   34,   35,  143,    0,  144,    0,   36,
-   37,   38,   39,   40,   41,    0,    0,   42,    0,    0,
-   15,    0,   43,   45,    0,    0,   46,    0,   47,   48,
-   39,    0,  163,   39,   39,   39,    0,   39,    0,   39,
-   39,    0,   39,    0,    0,    0,    0,    0,  136,    0,
-    0,    0,  137,  138,  139,  140,   39,    0,    0,    0,
-    0,   39,  141,  142,    0,  145,  146,  147,  148,   80,
-  149,  150,    0,    0,  151,    0,    0,   92,    0,    0,
-    0,    0,   80,  101,    0,  104,   44,    0,   39,   55,
-   57,   54,    0,   49,    0,   58,   52,    0,   51,    0,
-   80,   80,   80,   80,   80,    0,    0,    0,    0,    0,
-    0,    0,  105,    0,    0,    0,    0,   56,    0,    0,
-   39,    0,    0,   39,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   44,    0,
-    0,   55,   57,   54,   53,   49,  118,   58,   52,  187,
-   51,    0,    0,   21,   22,   23,   24,   25,   26,    0,
-    0,    0,    0,   27,   28,   29,   30,    0,    0,   56,
-   31,   32,    0,   33,   34,   35,   15,    0,    0,   45,
-   36,   37,   38,   39,   40,   41,    0,    0,   42,    0,
-    0,    0,    0,   43,    0,    0,   53,   46,    0,   47,
-   48,   44,    0,    0,   55,   57,   54,    0,   49,    0,
-   58,   52,    0,   51,    0,    0,    0,    0,    0,  136,
-    0,    0,    0,  137,  138,  139,  140,    0,   15,    0,
-    0,   45,   56,    0,  142,    0,  145,  146,  147,  148,
-    0,  149,  150,    0,    0,  151,    0,    0,    0,    0,
-    0,    0,    0,   39,   39,   39,   39,   39,   39,   53,
-    0,  122,    0,   39,   39,   39,   39,    0,    0,    0,
-   39,   39,    0,   39,   39,   39,    0,    0,    0,    0,
-   39,   39,   39,   39,   39,   39,    0,    0,   39,    0,
-    0,   15,    0,   39,   45,    0,    0,   39,    0,   39,
-   39,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   22,   23,   24,   25,   26,  143,   44,  144,    0,   55,
-   57,   54,    0,   49,    0,   58,   52,   32,   51,   33,
-   34,   35,    0,    0,    0,    0,   36,   37,   38,   39,
-   40,   41,    0,    0,   42,    0,    0,   56,    0,   43,
-    0,    0,    0,   46,    0,   47,   48,    0,    0,    0,
-    0,    0,   22,   23,   24,   25,   26,    0,    0,    0,
-    0,    0,    0,    0,   53,    0,    0,    0,    0,   32,
-    0,   33,   34,   35,    0,    0,    0,    0,   36,   37,
-   38,   39,   40,   41,    0,    0,   42,    0,    0,    0,
-    0,   43,    0,    0,    0,   46,   15,   47,   48,   45,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   22,   23,   24,   25,   26,
-    0,   44,    0,    0,   55,   57,   54,    0,   49,  181,
-   58,   52,   32,   51,   33,   34,   35,    0,    0,    0,
-    0,   36,   37,   38,   39,   40,   41,    0,    0,   42,
-    0,    0,   56,    0,   43,    0,    0,    0,   46,    0,
-   47,   48,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   44,    0,   53,
-   55,   57,   54,    0,   49,    0,   58,   52,    0,   51,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  212,    0,    0,   56,    0,
-    0,   15,    0,    0,   45,    0,    0,    0,    0,  136,
-    0,    0,    0,  137,  138,  139,  140,    0,    0,   21,
-   22,   23,   24,   25,   26,   53,  145,  146,  147,  148,
-    0,  149,  150,    0,    0,  151,    0,   32,    0,   33,
-   34,   35,    0,    0,    0,    0,   36,   37,   38,   39,
-   40,   41,    0,    0,   42,    0,    0,   15,    0,   43,
-   45,    0,    0,   46,    0,   47,   48,   44,    0,    0,
-   55,   57,   54,    0,   49,    0,   58,   52,    0,   51,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,  214,    0,    0,   56,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   44,    0,    0,   55,   57,   54,
-    0,   49,    0,   58,   52,   53,   51,    0,    0,    0,
-    0,    0,    0,    0,    0,   22,   23,   24,   25,   26,
-    0,    0,  220,    0,    0,   56,    0,    0,    0,    0,
-    0,    0,   32,    0,   33,   34,   35,   15,    0,    0,
-   45,   36,   37,   38,   39,   40,   41,    0,    0,   42,
-    0,    0,   53,    0,   43,    0,    0,    0,   46,   77,
-   47,   48,   77,    0,    0,    0,    0,    0,    0,    0,
-    0,   22,   23,   24,   25,   26,   77,   77,    0,   77,
-    0,   77,    0,    0,   15,    0,    0,   45,   32,    0,
-   33,   34,   35,    0,    0,    0,    0,   36,   37,   38,
-   39,   40,   41,    0,    0,   42,    0,    0,    0,   77,
-   43,   77,    0,    0,   46,    0,   47,   48,   44,    0,
-    0,   55,   57,   54,    0,   49,    0,   58,   52,    0,
-   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   77,    0,    0,    0,    0,  222,    0,    0,   56,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   22,   23,   24,   25,   26,   53,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   32,    0,
-   33,   34,   35,    0,    0,    0,    0,   36,   37,   38,
-   39,   40,   41,    0,    0,   42,    0,    0,   15,    0,
-   43,   45,    0,    0,   46,    0,   47,   48,   22,   23,
-   24,   25,   26,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   32,    0,   33,   34,   35,
-    0,    0,    0,    0,   36,   37,   38,   39,   40,   41,
-    0,    0,   42,    0,    0,    0,    0,   43,    0,    0,
-    0,   46,   44,   47,   48,   55,   57,   54,    0,   49,
-    0,   58,   52,    0,   51,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   77,   77,   77,   77,    0,    0,
-  224,    0,    0,   56,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   77,   77,   44,
-    0,    0,   55,   57,   54,    0,   49,    0,   58,   52,
-   53,   51,   77,   77,   77,    0,    0,    0,    0,    0,
-  131,    0,    0,  131,    0,    0,    0,  226,    0,    0,
-   56,    0,   22,   23,   24,   25,   26,  131,  131,    0,
-    0,    0,   15,    0,    0,   45,    0,    0,    0,   32,
-    0,   33,   34,   35,    0,    0,    0,   53,   36,   37,
-   38,   39,   40,   41,    0,    0,   42,    0,    0,    0,
-  131,   43,  131,    0,    0,   46,   44,   47,   48,   55,
-   57,   54,    0,   49,    0,   58,   52,    0,   51,   15,
-    0,    0,   45,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  131,    0,  228,    0,    0,   56,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   44,    0,    0,   55,   57,   54,    0,
-   49,    0,   58,   52,   53,   51,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  231,    0,    0,   56,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   15,    0,    0,   45,
-    0,    0,    0,    0,    0,    0,   22,   23,   24,   25,
-   26,   53,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   32,    0,   33,   34,   35,    0,    0,
-    0,    0,   36,   37,   38,   39,   40,   41,    0,    0,
-   42,    0,    0,   15,    0,   43,   45,    0,    0,   46,
-    0,   47,   48,   22,   23,   24,   25,   26,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   32,    0,   33,   34,   35,  131,  131,  131,  131,   36,
-   37,   38,   39,   40,   41,    0,    0,   42,    0,    0,
-    0,    0,   43,    0,    0,    0,   46,   44,   47,   48,
-   55,   57,   54,    0,   49,  242,   58,   52,    0,   51,
-    0,    0,    0,  131,  131,  131,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   56,    0,
-   22,   23,   24,   25,   26,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   32,    0,   33,
-   34,   35,    0,    0,    0,   53,   36,   37,   38,   39,
-   40,   41,    0,    0,   42,    0,    0,    0,    0,   43,
-    0,    0,    0,   46,    0,   47,   48,   22,   23,   24,
-   25,   26,    0,    0,    0,    0,    0,   15,    0,    0,
-   45,    0,    0,    0,   32,    0,   33,   34,   35,    0,
-    0,    0,    0,   36,   37,   38,   39,   40,   41,    0,
-    0,   42,    0,    0,    0,    0,   43,    0,    0,    0,
-   46,   44,   47,   48,   55,   57,   54,    0,   49,  265,
-   58,   52,    0,   51,    0,    0,    0,    0,    0,    0,
+    0,    0,   56,   18,    0,   18,   18,   39,    0,    0,
+   39,   39,   39,    0,   39,    0,   39,   39,    0,   39,
+    0,  270,    0,    0,    0,  142,  143,  144,  145,    0,
+    0,  279,    0,   39,   17,  141,    0,   48,   39,  142,
+  143,  144,  145,  154,  155,    0,    0,  156,    0,  146,
+  147,    0,  150,  151,  152,  153,    0,  154,  155,  154,
+    0,  156,  154,  154,  154,   39,  154,  144,  154,  154,
+  144,  154,    0,    0,    0,  144,  145,    0,    0,    0,
+   85,    0,  304,    0,  144,  144,    0,  144,   97,  144,
+  154,  154,  155,   85,  106,  156,  109,   39,    0,    0,
+   39,    0,  118,  119,  120,  121,  122,    0,    0,  125,
+  126,   85,   85,   85,   85,   85,    0,  144,    0,  144,
+  155,    0,    0,  155,  155,  155,  326,  155,  104,  155,
+  155,  104,  155,    0,  330,    0,    0,  141,    0,    0,
+    0,  142,  143,  144,  145,  104,  104,    0,  104,  144,
+  104,  155,  154,    0,  150,  151,  152,  153,    0,  154,
+  155,    0,  193,  156,    0,    0,    0,    0,   25,   26,
+   27,   28,   29,    0,    0,    0,    0,    0,    0,    0,
+  104,    0,    0,    0,    0,    0,   35,    0,   36,   37,
+   38,    0,    0,    0,    0,   39,   40,   41,   42,   43,
+   44,    0,    0,   45,  142,  143,  144,  145,   46,    0,
+    0,    0,   49,  155,   50,   51,    0,    0,  168,  152,
+  153,    0,  154,  155,    0,    0,  156,    0,    0,    0,
+   39,   39,   39,   39,   39,   39,    0,    0,    0,    0,
+    0,   39,   39,   39,   39,    0,    0,    0,   39,   39,
+    0,   39,   39,   39,    0,    0,    0,    0,   39,   39,
+   39,   39,   39,   39,    0,    0,   39,    0,    0,    0,
+    0,   39,    0,    0,    0,   39,    0,   39,   39,    0,
+    0,    0,    0,  154,  154,  154,  154,  154,    0,    0,
+    0,    0,    0,  144,  144,  144,  144,    0,    0,    0,
+    0,  154,  144,  154,  154,  154,  144,  144,  144,  144,
+  154,  154,  154,  154,  154,  154,  144,  144,  154,  144,
+  144,  144,  144,  154,  144,  144,    0,  154,  144,  154,
+  154,  144,  144,  144,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  155,  155,  155,  155,  155,    0,
+    0,    0,    0,    0,  104,  104,  104,  104,    0,  148,
+    0,  149,  155,  104,  155,  155,  155,  104,  104,  104,
+  104,  155,  155,  155,  155,  155,  155,  104,  104,  155,
+  104,  104,  104,  104,  155,  104,  104,    0,  155,  104,
+  155,  155,  104,  104,  104,   47,    0,    0,   58,   60,
+   57,    0,   52,    0,   61,   55,    0,   54,    0,  142,
+  143,  144,  145,    0,    0,    0,    0,    0,    0,    0,
+    0,   53,  150,  151,  152,  153,   59,  154,  155,    0,
+    0,  156,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   39,    0,    0,   39,   39,
+   39,    0,   39,   56,   39,   39,    0,   39,    0,  142,
+  143,  144,  145,    0,    0,    0,    0,    0,    0,    0,
+    0,   39,    0,  151,  152,  153,   39,  154,  155,  134,
+    0,  156,  134,    0,    0,   17,    0,    0,   48,    0,
+    0,    0,    0,    0,    0,   47,  134,  134,   58,   60,
+   57,    0,   52,   39,   61,   55,    0,   54,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   56,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   44,    0,
-    0,   55,   57,   54,    0,   49,  267,   58,   52,   53,
-   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   81,    0,    0,    0,    0,   59,    0,    0,  134,
+    0,  134,    0,    0,    0,   39,    0,    0,   39,    0,
+    0,    0,    0,    0,    0,   47,    0,    0,   58,   60,
+   57,    0,   52,   56,   61,   55,    0,   54,    0,    0,
+    0,  134,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  110,    0,    0,  141,    0,   59,    0,  142,  143,
+  144,  145,    0,    0,    0,   17,    0,    0,   48,  147,
+    0,  150,  151,  152,  153,    0,  154,  155,    0,    0,
+  156,    0,   47,   56,    0,   58,   60,   57,    0,   52,
+  123,   61,   55,    0,   54,    0,    0,    0,   24,   25,
+   26,   27,   28,   29,    0,    0,    0,    0,    0,   30,
+   31,   32,   33,   59,    0,   17,   34,   35,   48,   36,
+   37,   38,    0,    0,    0,    0,   39,   40,   41,   42,
+   43,   44,    0,    0,   45,    0,    0,    0,    0,   46,
+   56,    0,    0,   49,    0,   50,   51,    0,   39,   39,
+   39,   39,   39,   39,    0,    0,    0,    0,    0,   39,
+   39,   39,   39,    0,    0,    0,   39,   39,    0,   39,
+   39,   39,   17,    0,    0,   48,   39,   39,   39,   39,
+   39,   39,    0,    0,   39,  134,  134,  134,  134,   39,
+    0,    0,    0,   39,    0,   39,   39,    0,    0,   25,
+   26,   27,   28,   29,   47,    0,    0,   58,   60,   57,
+    0,   52,    0,   61,   55,    0,   54,   35,    0,   36,
+   37,   38,    0,  134,  134,  134,   39,   40,   41,   42,
+   43,   44,    0,    0,   45,   59,    0,    0,    0,   46,
+    0,    0,    0,   49,    0,   50,   51,    0,    0,   25,
+   26,   27,   28,   29,    0,    0,    0,    0,    0,    0,
+    0,    0,   56,  253,  127,    0,  254,   35,    0,   36,
+   37,   38,    0,    0,    0,    0,   39,   40,   41,   42,
+   43,   44,    0,  148,   45,  149,    0,    0,    0,   46,
+    0,    0,    0,   49,   17,   50,   51,   48,    0,    0,
+    0,    0,    0,    0,    0,    0,   25,   26,   27,   28,
+   29,   47,    0,    0,   58,   60,   57,    0,   52,    0,
+   61,   55,    0,   54,   35,    0,   36,   37,   38,    0,
+    0,    0,    0,   39,   40,   41,   42,   43,   44,    0,
+    0,   45,   59,    0,    0,    0,   46,    0,    0,    0,
+   49,    0,   50,   51,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,   56,
+    0,    0,    0,    0,    0,    0,   47,    0,    0,   58,
+   60,   57,    0,   52,  187,   61,   55,    0,   54,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   15,    0,    0,   45,    0,    0,    0,    0,    0,
-    0,   22,   23,   24,   25,   26,   53,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   82,    0,   32,   82,
-   33,   34,   35,    0,    0,    0,    0,   36,   37,   38,
-   39,   40,   41,   82,   82,   42,   82,    0,   15,    0,
-   43,   45,    0,    0,   46,   44,   47,   48,   55,   57,
-   54,    0,   49,    0,   58,   52,    0,   51,    0,    0,
-    0,    0,    0,    0,    0,    0,   82,    0,   82,    0,
-    0,  271,    0,    0,    0,    0,   56,    0,    0,    0,
+    0,   17,    0,    0,   48,    0,    0,   59,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   44,    0,    0,   55,   57,   54,   82,   49,
-  275,   58,   52,   53,   51,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   25,   26,
+   27,   28,   29,   47,   56,    0,   58,   60,   57,    0,
+   52,    0,   61,   55,    0,   54,   35,    0,   36,   37,
+   38,    0,    0,    0,    0,   39,   40,   41,   42,   43,
+   44,  218,    0,   45,   59,    0,   17,    0,   46,   48,
+    0,    0,   49,    0,   50,   51,    0,    0,    0,    0,
+    0,    0,    0,   47,    0,    0,   58,   60,   57,    0,
+   52,   56,   61,   55,    0,   54,    0,    0,  141,    0,
+    0,    0,  142,  143,  144,  145,    0,    0,    0,    0,
+    0,  220,  146,  147,   59,  150,  151,  152,  153,    0,
+  154,  155,    0,   17,  156,    0,   48,    0,    0,    0,
+    0,    0,    0,    0,   24,   25,   26,   27,   28,   29,
+    0,   56,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   35,    0,   36,   37,   38,    0,  148,
+    0,  149,   39,   40,   41,   42,   43,   44,    0,    0,
+   45,    0,    0,   17,    0,   46,   48,    0,    0,   49,
+   47,   50,   51,   58,   60,   57,    0,   52,    0,   61,
+   55,    0,   54,    0,    0,    0,    0,    0,    0,    0,
+   25,   26,   27,   28,   29,    0,    0,    0,  226,    0,
+    0,   59,    0,    0,    0,    0,    0,    0,   35,    0,
+   36,   37,   38,    0,    0,    0,    0,   39,   40,   41,
+   42,   43,   44,    0,    0,   45,    0,    0,   56,    0,
+   46,    0,    0,    0,   49,    0,   50,   51,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   25,   26,   27,
+   28,   29,   47,    0,    0,   58,   60,   57,    0,   52,
+   17,   61,   55,   48,   54,   35,    0,   36,   37,   38,
+    0,    0,    0,    0,   39,   40,   41,   42,   43,   44,
+  228,    0,   45,   59,    0,    0,    0,   46,    0,    0,
+    0,   49,    0,   50,   51,    0,    0,   25,   26,   27,
+   28,   29,    0,    0,    0,    0,    0,    0,    0,    0,
+   56,    0,    0,    0,    0,   35,    0,   36,   37,   38,
+    0,    0,    0,    0,   39,   40,   41,   42,   43,   44,
+    0,    0,   45,    0,    0,    0,    0,   46,    0,    0,
+    0,   49,   17,   50,   51,   48,   47,    0,    0,   58,
+   60,   57,    0,   52,    0,   61,   55,    0,   54,    0,
+    0,    0,    0,    0,  141,    0,    0,    0,  142,  143,
+  144,  145,    0,    0,  230,    0,    0,   59,  146,  147,
+    0,  150,  151,  152,  153,    0,  154,  155,    0,    0,
+  156,    0,    0,    0,   25,   26,   27,   28,   29,    0,
+    0,    0,    0,    0,   56,    0,    0,    0,    0,    0,
+  127,    0,   35,  127,   36,   37,   38,    0,    0,    0,
+    0,   39,   40,   41,   42,   43,   44,  127,  127,   45,
+  127,    0,  127,    0,   46,    0,   17,    0,   49,   48,
+   50,   51,   47,    0,    0,   58,   60,   57,    0,   52,
+    0,   61,   55,    0,   54,    0,    0,    0,    0,    0,
+  127,    0,  127,    0,    0,    0,    0,    0,    0,    0,
+  232,    0,    0,   59,    0,    0,   25,   26,   27,   28,
+   29,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  127,    0,   35,    0,   36,   37,   38,    0,
+   56,    0,    0,   39,   40,   41,   42,   43,   44,    0,
+    0,   45,  286,    0,    0,  148,   46,  149,    0,    0,
+   49,    0,   50,   51,    0,    0,    0,    0,    0,    0,
+    0,    0,   17,    0,    0,   48,   47,    0,    0,   58,
+   60,   57,    0,   52,    0,   61,   55,    0,   54,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   56,    0,   22,   23,   24,   25,   26,
-    0,    0,    0,    0,    0,   15,    0,    0,   45,    0,
-    0,    0,   32,    0,   33,   34,   35,    0,    0,    0,
-   53,   36,   37,   38,   39,   40,   41,    0,    0,   42,
-    0,    0,    0,    0,   43,    0,    0,    0,   46,    0,
-   47,   48,   22,   23,   24,   25,   26,    0,    0,    0,
-    0,    0,   15,    0,    0,   45,    0,    0,    0,   32,
-    0,   33,   34,   35,    0,    0,    0,    0,   36,   37,
-   38,   39,   40,   41,    0,    0,   42,    0,    0,    0,
-    0,   43,    0,    0,    0,   46,   44,   47,   48,   55,
-   57,   54,    0,   49,    0,   58,   52,    0,   51,    0,
+    0,    0,    0,    0,  234,    0,    0,   59,    0,    0,
+   25,   26,   27,   28,   29,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   35,    0,
+   36,   37,   38,    0,   56,    0,    0,   39,   40,   41,
+   42,   43,   44,    0,    0,   45,    0,    0,    0,    0,
+   46,    0,    0,    0,   49,   47,   50,   51,   58,   60,
+   57,    0,   52,    0,   61,   55,   17,   54,    0,   48,
+    0,    0,    0,    0,    0,    0,  127,  127,  127,  127,
+    0,    0,    0,  237,    0,  127,   59,    0,    0,  127,
+  127,    0,    0,    0,    0,    0,    0,    0,    0,  127,
+  127,    0,  127,  127,  127,  127,   25,   26,   27,   28,
+   29,    0,    0,   56,  127,  127,  127,    0,    0,    0,
+    0,    0,    0,    0,   35,    0,   36,   37,   38,    0,
+    0,    0,    0,   39,   40,   41,   42,   43,   44,    0,
+    0,   45,    0,    0,    0,   17,   46,    0,   48,    0,
+   49,    0,   50,   51,    0,   47,    0,    0,   58,   60,
+   57,    0,   52,  248,   61,   55,    0,   54,    0,    0,
+  141,    0,    0,    0,  142,  143,  144,  145,    0,    0,
+    0,    0,    0,    0,  146,  147,   59,  150,  151,  152,
+  153,    0,  154,  155,    0,    0,  156,    0,    0,    0,
+   25,   26,   27,   28,   29,    0,    0,    0,    0,    0,
+    0,    0,    0,   56,    0,    0,    0,    0,   35,    0,
+   36,   37,   38,    0,    0,    0,    0,   39,   40,   41,
+   42,   43,   44,    0,    0,   45,    0,    0,   53,    0,
+   46,   53,    0,    0,   49,   17,   50,   51,   48,    0,
+    0,    0,    0,    0,   47,   53,   53,   58,   60,   57,
+    0,   52,  271,   61,   55,    0,   54,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   25,
+   26,   27,   28,   29,    0,   59,    0,    0,   53,    0,
+   53,    0,    0,    0,    0,    0,    0,   35,    0,   36,
+   37,   38,    0,    0,    0,    0,   39,   40,   41,   42,
+   43,   44,   56,    0,   45,    0,    0,    0,    0,   46,
+   53,    0,    0,   49,    0,   50,   51,   47,    0,    0,
+   58,   60,   57,    0,   52,  273,   61,   55,    0,   54,
+    0,    0,    0,    0,   17,    0,    0,   48,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   59,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   82,   82,   82,   82,    0,    0,   56,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   25,
+   26,   27,   28,   29,    0,   56,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   35,    0,   36,
+   37,   38,    0,    0,    0,    0,   39,   40,   41,   42,
+   43,   44,    0,    0,   45,    0,    0,   17,    0,   46,
+   48,    0,    0,   49,    0,   50,   51,   47,    0,    0,
+   58,   60,   57,    0,   52,    0,   61,   55,    0,   54,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   82,   82,    0,    0,    0,   22,
-   23,   24,   25,   26,   53,    0,  277,    0,    0,   82,
-   82,   82,    0,    0,    0,    0,   32,    0,   33,   34,
-   35,    0,    0,    0,    0,   36,   37,   38,   39,   40,
-   41,    0,    0,   42,    0,    0,   15,    0,   43,   45,
-    0,    0,   46,    0,   47,   48,   22,   23,   24,   25,
-   26,    0,   44,    0,    0,   55,   57,   54,    0,   49,
-    0,   58,   52,   32,   51,   33,   34,   35,    0,    0,
-    0,    0,   36,   37,   38,   39,   40,   41,    0,    0,
-   42,    0,    0,   56,    0,   43,    0,    0,    0,   46,
-    0,   47,   48,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   44,    0,    0,   55,   57,   54,    0,   49,
-   53,   58,   52,    0,   51,    0,    0,    0,    0,    0,
+    0,    0,    0,  277,    0,    0,    0,    0,   59,    0,
+    0,    0,    0,    0,   53,   53,   53,   53,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   25,   26,
+   27,   28,   29,    0,    0,   56,    0,   53,   53,    0,
+    0,    0,    0,    0,   97,    0,   35,   97,   36,   37,
+   38,    0,   53,   53,   53,   39,   40,   41,   42,   43,
+   44,   97,   97,   45,   97,    0,   97,   17,   46,    0,
+   48,    0,   49,    0,   50,   51,   47,    0,    0,   58,
+   60,   57,    0,   52,  281,   61,   55,    0,   54,    0,
+    0,    0,    0,    0,   97,    0,   97,    0,    0,    0,
+    0,   25,   26,   27,   28,   29,    0,   59,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   35,
+    0,   36,   37,   38,    0,    0,   97,    0,   39,   40,
+   41,   42,   43,   44,   56,    0,   45,    0,    0,    0,
+    0,   46,    0,    0,    0,   49,    0,   50,   51,   47,
+    0,    0,   58,   60,   57,    0,   52,    0,   61,   55,
+    0,   54,    0,    0,    0,    0,   17,    0,    0,   48,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   56,    0,    0,  135,    0,    0,  135,
-    0,    0,   15,    0,    0,   45,    0,    0,    0,    0,
-    0,    0,    0,  135,  135,    0,  135,    0,  135,    0,
-   53,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   22,   23,   24,   25,   26,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  135,   32,  135,   33,
-   34,   35,   15,    0,    0,   45,   36,   37,   38,   39,
-   40,   41,  119,    0,   42,  119,    0,    0,    0,   43,
-    0,    0,    0,   46,    0,   47,   48,    0,  135,  119,
-  119,    0,  119,    0,  119,    0,    0,    0,    0,    0,
+   59,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   25,   26,   27,   28,   29,    0,   56,    0,  283,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   35,
+    0,   36,   37,   38,    0,    0,    0,    0,   39,   40,
+   41,   42,   43,   44,    0,    0,   45,    0,    0,   17,
+    0,   46,   48,    0,    0,   49,    0,   50,   51,   47,
+    0,    0,   58,   60,   57,    0,   52,    0,   61,   55,
+    0,   54,    0,    0,    0,    0,    0,    0,    0,    0,
+   97,   97,   97,   97,    0,    0,    0,    0,    0,   97,
+   59,    0,    0,   97,   97,    0,    0,    0,    0,    0,
+    0,    0,    0,   97,   97,    0,   97,   97,   97,   97,
+   25,   26,   27,   28,   29,    0,    0,   56,   97,   97,
+   97,    0,    0,    0,    0,    0,    0,    0,   35,    0,
+   36,   37,   38,    0,    0,    0,    0,   39,   40,   41,
+   42,   43,   44,    0,    0,   45,    0,    0,    0,   17,
+   46,    0,   48,    0,   49,    0,   50,   51,   47,    0,
+    0,   58,   60,   57,    0,   52,    0,   61,   55,    0,
+   54,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   25,   26,   27,   28,   29,    0,   59,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  119,    0,  119,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  141,    0,
-    0,  141,    0,    0,    0,    0,   22,   23,   24,   25,
-   26,    0,    0,    0,  119,  141,  141,    0,  141,    0,
-  141,    0,    0,   32,    0,   33,   34,   35,    0,    0,
-    0,    0,   36,   37,   38,   39,   40,   41,    0,    0,
-   42,    0,    0,    0,    0,   43,  144,    0,  141,   46,
-  141,   47,   48,    0,    0,    0,   98,   23,   24,   25,
-   26,    0,    0,  144,  144,    0,  144,    0,  144,    0,
-    0,    0,    0,   32,    0,   33,   34,   35,    0,    0,
-  141,    0,   36,   37,   38,   39,   40,   41,    0,    0,
-   42,  135,  135,  135,  135,   43,  144,    0,  144,   46,
-  135,   47,   48,    0,  135,  135,  135,  135,    0,    0,
-    0,    0,    0,    0,  135,  135,    0,  135,  135,  135,
-  135,    0,  135,  135,   96,    0,  135,   96,  144,  135,
-  135,  135,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   96,   96,    0,   96,    0,   96,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  119,  119,  119,
-  119,    0,    0,    0,    0,    0,  119,    0,    0,    0,
-  119,  119,  119,  119,    0,    0,   96,    0,    0,    0,
-  119,  119,    0,  119,  119,  119,  119,    0,  119,  119,
-    0,    0,  119,    0,    0,  119,  119,  119,    0,    0,
-    0,    0,    0,    0,    0,    0,   96,    0,    0,    0,
+    0,   35,    0,   36,   37,   38,    0,    0,    0,    0,
+   39,   40,   41,   42,   43,   44,   56,  138,   45,    0,
+  138,    0,    0,   46,    0,    0,    0,   49,    0,   50,
+   51,    0,    0,    0,  138,  138,    0,  138,    0,  138,
+    0,    0,    0,    0,    0,    0,    0,    0,   17,    0,
+    0,   48,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  138,    0,  138,
+    0,    0,  122,    0,    0,  122,    0,    0,    0,    0,
+    0,    0,    0,   25,   26,   27,   28,   29,    0,  122,
+  122,    0,  122,    0,  122,    0,    0,    0,    0,  138,
+    0,   35,    0,   36,   37,   38,    0,    0,    0,    0,
+   39,   40,   41,   42,   43,   44,  144,    0,   45,  144,
+    0,    0,  122,   46,  122,    0,    0,   49,    0,   50,
+   51,    0,    0,  144,  144,    0,  144,    0,  144,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  141,  141,  141,  141,    0,    0,    0,
-    0,    0,  141,    0,    0,    0,  141,  141,  141,  141,
-    0,    0,    0,    0,    0,    0,  141,  141,    0,  141,
-  141,  141,  141,    0,  141,  141,    0,    0,  141,    0,
-    0,  141,  141,  141,    0,    0,    0,    0,    0,    0,
-    0,  144,  144,  144,  144,    0,    0,    0,    0,    0,
-  144,    0,    0,    0,  144,  144,  144,  144,    0,    0,
-    0,    0,    0,    0,  144,  144,    0,  144,  144,  144,
-  144,   95,  144,  144,   95,    0,  144,    0,    0,  144,
-  144,  144,    0,    0,    0,    0,    0,    0,   95,   95,
-    0,   95,    0,   95,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  122,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  144,    0,  144,    0,
+    0,  147,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  103,   26,   27,   28,   29,    0,  147,  147,
+    0,  147,    0,  147,    0,    0,    0,    0,  144,    0,
+   35,    0,   36,   37,   38,    0,    0,    0,    0,   39,
+   40,   41,   42,   43,   44,    0,    0,   45,    0,    0,
+    0,  147,   46,  147,    0,    0,   49,    0,   50,   51,
+    0,    0,    0,    0,    0,    0,    0,   83,    0,    0,
+   83,    0,    0,  138,  138,  138,  138,    0,    0,    0,
+    0,    0,  138,  147,   83,   83,  138,  138,  138,  138,
+    0,    0,    0,    0,    0,    0,  138,  138,    0,  138,
+  138,  138,  138,    0,  138,  138,    0,    0,  138,    0,
+    0,  138,  138,  138,    0,    0,    0,   83,    0,   83,
+    0,    0,    0,    0,    0,    0,    0,    0,  122,  122,
+  122,  122,    0,    0,    0,    0,    0,  122,    0,    0,
+    0,  122,  122,  122,  122,    0,    0,    0,    0,   83,
+    0,  122,  122,    0,  122,  122,  122,  122,    0,  122,
+  122,    0,   99,  122,    0,   99,  122,  122,  122,    0,
+    0,    0,  144,  144,  144,  144,    0,    0,    0,   99,
+   99,  144,   99,    0,   99,  144,  144,  144,  144,    0,
+    0,    0,    0,    0,    0,  144,  144,    0,  144,  144,
+  144,  144,    0,  144,  144,    0,    0,  144,    0,    0,
+  144,  144,  144,    0,   99,    0,    0,   98,    0,    0,
+   98,    0,    0,    0,    0,    0,    0,  147,  147,  147,
+  147,    0,    0,    0,   98,   98,  147,   98,    0,   98,
+  147,  147,  147,  147,   99,    0,    0,    0,    0,    0,
+  147,  147,    0,  147,  147,  147,  147,    0,  147,  147,
+   86,    0,  147,   86,    0,  147,  147,  147,    0,   98,
+    0,    0,    0,    0,    0,    0,    0,   86,   86,    0,
+   86,    0,   86,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   83,   83,   83,   83,    0,    0,   98,
+    0,   72,    0,    0,   72,    0,    0,    0,    0,    0,
+   86,    0,   86,    0,    0,    0,   83,   83,   72,   72,
+    0,   72,    0,   72,    0,    0,    0,    0,    0,    0,
+    0,   83,   83,   83,    0,    0,    0,    0,    0,    0,
+    0,    0,   86,  133,    0,    0,  133,    0,    0,    0,
+    0,   72,    0,   72,    0,    0,    0,    0,    0,    0,
+  133,  133,    0,  133,    0,  133,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   96,
-   96,   96,   96,   95,    0,    0,    0,    0,   96,    0,
-    0,    0,   96,   96,   96,   96,    0,    0,    0,    0,
-    0,    0,   96,   96,    0,   96,   96,   96,   96,   83,
-   96,   96,   83,   95,   96,    0,    0,   96,   96,   96,
-    0,    0,    0,    0,    0,    0,   83,   83,    0,   83,
-    0,   83,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   72,    0,    0,    0,    0,   99,   99,
+   99,   99,    0,    0,    0,  133,    0,   99,    0,    0,
+    0,   99,   99,   99,   99,    0,    0,    0,    0,    0,
+    0,   99,   99,    0,   99,   99,   99,   99,    0,   99,
+   99,    0,    0,   99,    0,    0,   99,   99,   99,    0,
+    0,    0,    0,  146,    0,    0,  146,    0,    0,    0,
+    0,    0,    0,   98,   98,   98,   98,    0,    0,    0,
+  146,  146,   98,  146,    0,  146,   98,   98,   98,   98,
+    0,    0,    0,    0,    0,    0,   98,   98,    0,   98,
+   98,   98,   98,    0,   98,   98,    0,    0,   98,    0,
+    0,   98,   98,   98,    0,  146,   86,   86,   86,   86,
+    0,    0,    0,    0,    0,   86,    0,    0,    0,   86,
+   86,   86,   86,    0,    0,    0,    0,    0,    0,   86,
+   86,    0,   86,   86,   86,   86,    0,   86,   86,    0,
+    0,    0,    0,    0,   86,   86,   86,   72,   72,   72,
+   72,    0,    0,    0,    0,    0,   72,    0,    0,    0,
+   72,   72,   72,   72,    0,    0,    0,    0,    0,    0,
+   72,   72,    0,   72,   72,   72,   72,    0,   72,   72,
+    0,    0,    0,    0,    0,   72,   72,   72,    0,  133,
+  133,  133,  133,    0,    0,    0,    0,    0,  133,    0,
+    0,    0,  133,  133,  133,  133,    0,    0,    0,    0,
+    0,    0,  133,  133,    0,  133,  133,  133,  133,  135,
+  133,  133,  135,    0,  133,    0,    0,  133,  133,  133,
+    0,    0,    0,    0,    0,    0,  135,  135,    0,  135,
+    0,  135,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   69,    0,    0,   69,    0,    0,    0,    0,    0,   83,
-    0,   83,    0,    0,    0,    0,    0,   69,   69,    0,
-   69,    0,   69,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  110,
+    0,  135,  110,    0,    0,    0,    0,    0,    0,  146,
+  146,  146,  146,    0,    0,    0,  110,  110,  146,  110,
+    0,  110,  146,  146,  146,  146,    0,    0,    0,    0,
+    0,    0,  146,  146,    0,  146,  146,  146,  146,    0,
+  146,  146,  104,    0,  146,  104,    0,  146,  146,  146,
+    0,  110,    0,    0,    0,    0,    0,    0,    0,  104,
+  104,    0,  104,    0,  104,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   83,  143,    0,    0,  143,    0,    0,    0,    0,
-   69,    0,   69,    0,    0,    0,    0,    0,    0,  143,
-  143,    0,  143,    0,  143,    0,    0,    0,    0,    0,
+    0,    0,    0,   73,    0,    0,   73,    0,    0,    0,
+    0,    0,    0,    0,  104,    0,    0,    0,    0,    0,
+   73,   73,    0,   73,    0,   73,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   69,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,  143,    0,  132,    0,    0,  132,
-    0,    0,    0,    0,    0,    0,   95,   95,   95,   95,
-    0,    0,    0,  132,  132,   95,  132,    0,  132,   95,
-   95,   95,   95,    0,    0,    0,    0,    0,    0,   95,
-   95,    0,   95,   95,   95,   95,    0,   95,   95,  107,
-    0,   95,  107,    0,   95,   95,   95,    0,  132,    0,
-    0,    0,    0,    0,    0,    0,  107,  107,    0,  107,
-    0,  107,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   74,
+    0,    0,   74,   73,    0,   73,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   74,   74,    0,   74,
+    0,   74,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,   73,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  135,  135,  135,  135,   74,
+    0,   74,    0,    0,  135,    0,    0,    0,  135,  135,
+  135,  135,    0,    0,    0,    0,    0,    0,  135,  135,
+    0,  135,  135,  135,  135,    0,  135,  135,    0,    0,
+  135,   74,    0,  135,  135,  135,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  110,  110,  110,  110,    0,
+    0,    0,    0,    0,  110,    0,    0,    0,  110,  110,
+  110,  110,    0,    0,    0,    0,    0,    0,  110,  110,
+    0,  110,  110,  110,  110,    0,  110,  110,    0,    0,
+  110,    0,    0,  110,  110,  110,    0,    0,  104,  104,
+  104,  104,    0,    0,    0,    0,    0,  104,    0,    0,
+    0,  104,  104,  104,  104,    0,    0,    0,    0,    0,
+    0,  104,  104,    0,  104,  104,  104,  104,    0,  104,
+  104,    0,    0,  104,    0,    0,  104,  104,  104,   73,
+   73,   73,   73,    0,    0,    0,    0,    0,   73,    0,
+    0,    0,   73,   73,   73,   73,    0,    0,    0,    0,
+    0,    0,   73,   73,    0,   73,   73,   73,   73,    0,
+   73,    0,    0,    0,    0,    0,    0,   73,   73,   73,
+    0,    0,    0,    0,    0,   74,   74,   74,   74,    0,
+    0,    0,    0,    0,   74,    0,    0,    0,   74,   74,
+   75,   74,    0,   75,    0,    0,    0,    0,   74,   74,
+    0,   74,   74,   74,   74,    0,   74,   75,   75,    0,
+   75,    0,   75,   74,   74,   74,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   83,   83,   83,   83,    0,    0,
-    0,  107,    0,   83,    0,    0,    0,   83,   83,   83,
-   83,    0,    0,    0,    0,    0,    0,   83,   83,    0,
-   83,   83,   83,   83,    0,   83,   83,    0,    0,    0,
-    0,    0,   83,   83,   83,   69,   69,   69,   69,    0,
-    0,    0,    0,    0,   69,    0,    0,    0,   69,   69,
-   69,   69,    0,    0,    0,    0,    0,    0,   69,   69,
-    0,   69,   69,   69,   69,    0,   69,   69,    0,    0,
-    0,    0,    0,   69,   69,   69,    0,  143,  143,  143,
-  143,    0,    0,    0,    0,    0,  143,    0,    0,    0,
-  143,  143,  143,  143,    0,    0,    0,    0,    0,    0,
-  143,  143,    0,  143,  143,  143,  143,    0,  143,  143,
-    0,    0,  143,    0,    0,  143,  143,  143,    0,    0,
-    0,  101,    0,    0,  101,    0,    0,    0,    0,    0,
-    0,  132,  132,  132,  132,    0,    0,    0,  101,  101,
-  132,  101,    0,  101,  132,  132,  132,  132,    0,    0,
-    0,    0,    0,    0,  132,  132,    0,  132,  132,  132,
-  132,    0,  132,  132,    0,    0,  132,    0,    0,  132,
-  132,  132,    0,  101,  107,  107,  107,  107,    0,    0,
-    0,    0,    0,  107,    0,    0,    0,  107,  107,  107,
-  107,    0,    0,    0,    0,    0,    0,  107,  107,    0,
-  107,  107,  107,  107,   70,  107,  107,   70,    0,  107,
-    0,    0,  107,  107,  107,    0,    0,    0,    0,    0,
-    0,   70,   70,    0,   70,    0,   70,    0,    0,    0,
+    0,  137,    0,    0,  137,    0,    0,    0,    0,    0,
+   75,    0,   75,    0,    0,    0,    0,    0,  137,  137,
+    0,  137,    0,  137,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   71,    0,    0,   71,    0,
-    0,    0,    0,    0,   70,    0,   70,    0,    0,    0,
-    0,    0,   71,   71,    0,   71,    0,   71,    0,    0,
+    0,    0,   75,   76,    0,    0,   76,    0,    0,    0,
+    0,  137,    0,  137,    0,    0,    0,    0,    0,    0,
+   76,   76,    0,   76,    0,   76,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   70,    0,    0,   72,
-    0,    0,   72,    0,    0,   71,    0,   71,    0,    0,
-    0,    0,    0,    0,    0,    0,   72,   72,    0,   72,
-    0,   72,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   71,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   72,
-   50,   72,    0,   50,    0,    0,  101,  101,  101,  101,
-    0,    0,    0,    0,    0,  101,    0,   50,   50,  101,
-  101,  101,  101,    0,    0,    0,    0,    0,    0,  101,
-  101,   72,  101,  101,  101,  101,    0,  101,  101,    0,
-    0,  101,    0,    0,  101,  101,  101,    0,    0,    0,
-   50,    0,   50,    0,    0,    0,  124,    0,    0,  124,
+    0,    0,    0,  137,   77,    0,    0,   77,    0,    0,
+    0,    0,    0,   76,    0,   76,    0,    0,    0,    0,
+    0,   77,   77,    0,   77,    0,   77,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  124,  124,    0,  124,    0,  124,    0,
-    0,    0,   50,    0,    0,    0,    0,    0,    0,   70,
-   70,   70,   70,    0,    0,    0,    0,    0,   70,    0,
-    0,    0,   70,   70,   70,   70,  124,    0,  124,    0,
-    0,    0,   70,   70,    0,   70,   70,   70,   70,    0,
-   70,    0,    0,    0,    0,    0,    0,   70,   70,   70,
-   71,   71,   71,   71,    0,    0,    0,    0,  124,   71,
-    0,    0,    0,   71,   71,    0,   71,    0,    0,    0,
-    0,    0,    0,   71,   71,    0,   71,   71,   71,   71,
-    0,   71,    0,    0,    0,    0,    0,    0,   71,   71,
-   71,    0,    0,    0,   72,   72,   72,   72,    0,    0,
-    0,    0,    0,   72,    0,    0,    0,   72,   72,   94,
-    0,    0,   94,    0,    0,    0,    0,   72,   72,    0,
-   72,   72,   72,   72,    0,   72,   94,   94,    0,   94,
-    0,   94,   72,   72,   72,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   50,   50,   50,   50,    0,
-    0,    0,    0,    0,    0,  134,    0,    0,  134,   94,
-    0,   94,    0,    0,    0,    0,    0,    0,   50,   50,
-    0,    0,  134,  134,    0,  134,    0,  134,    0,    0,
-    0,    0,    0,   50,   50,   50,    0,    0,    0,    0,
-    0,   94,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  124,  124,  124,  124,  134,    0,  134,    0,    0,
-  124,    0,    0,    0,  124,  124,   73,    0,    0,   73,
-    0,    0,    0,    0,  124,  124,    0,  124,  124,  124,
-  124,    0,    0,   73,   73,    0,   73,  134,   73,  124,
-  124,  124,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   74,    0,    0,
-   74,    0,    0,    0,    0,    0,   73,    0,   73,    0,
-    0,    0,    0,    0,   74,   74,    0,   74,    0,   74,
+    0,    0,    0,    0,    0,   76,   78,    0,    0,   78,
+    0,    0,    0,    0,   77,    0,   77,    0,    0,    0,
+    0,    0,    0,   78,   78,    0,   78,    0,   78,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   73,    0,
-    0,    0,   75,    0,    0,   75,    0,   74,    0,   74,
-    0,    0,    0,    0,    0,   80,    0,    0,   80,   75,
-   75,    0,   75,    0,   75,    0,    0,    0,    0,    0,
-    0,    0,   80,   80,   94,   94,   94,   94,    0,   74,
-    0,    0,    0,   94,    0,    0,    0,   94,   94,    0,
-    0,    0,   75,    0,   75,    0,    0,   94,   94,    0,
-   94,   94,   94,   94,    0,   80,    0,   80,    0,    0,
-    0,    0,   94,   94,   94,    0,    0,    0,    0,    0,
-  134,  134,  134,  134,   75,    0,    0,    0,    0,  134,
-    0,    0,    0,  134,  134,   76,    0,   80,   76,    0,
-    0,    0,    0,  134,  134,    0,  134,  134,  134,  134,
-    0,    0,   76,   76,    0,   76,    0,   76,  134,  134,
-  134,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   78,    0,    0,   78,
-    0,   73,   73,   73,   73,   76,    0,   76,    0,    0,
-   73,    0,    0,   78,   78,   73,   78,    0,   78,    0,
-    0,    0,    0,    0,   73,   73,    0,   73,   73,   73,
-   73,    0,    0,    0,    0,    0,    0,   76,    0,   73,
-   73,   73,   74,   74,   74,   74,   78,    0,   78,    0,
-    0,   74,    0,    0,    0,   79,    0,    0,   79,    0,
-    0,    0,    0,    0,    0,   74,   74,    0,   74,   74,
-   74,   74,   79,   79,    0,   79,    0,   79,   78,    0,
-   74,   74,   74,    0,    0,    0,    0,   75,   75,   75,
-   75,    0,    0,    0,    0,    0,   75,    0,    0,    0,
-   80,   80,   80,   80,    0,   79,    0,   79,    0,    0,
-   75,   75,    0,   75,   75,   75,   75,   60,    0,    0,
-   60,    0,    0,   80,   80,   75,   75,   75,    0,    0,
-    0,    0,    0,    0,   60,   60,    0,   79,   80,   80,
-   80,    0,    0,   62,    0,    0,   62,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   77,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   78,    0,   78,    0,
+    0,    0,    0,    0,    0,    0,   75,   75,   75,   75,
+    0,    0,    0,    0,    0,   75,    0,    0,    0,   75,
+   75,    0,    0,    0,    0,    0,    0,    0,   78,   75,
+   75,    0,   75,   75,   75,   75,    0,   75,    0,    0,
+    0,    0,    0,    0,   75,   75,   75,  137,  137,  137,
+  137,    0,    0,    0,    0,    0,  137,    0,    0,    0,
+  137,  137,    0,    0,    0,    0,    0,    0,    0,    0,
+  137,  137,    0,  137,  137,  137,  137,    0,    0,    0,
+    0,    0,    0,    0,    0,  137,  137,  137,    0,   76,
+   76,   76,   76,    0,    0,    0,    0,    0,   76,    0,
+    0,    0,    0,   76,    0,    0,    0,    0,    0,    0,
+    0,    0,   76,   76,    0,   76,   76,   76,   76,    0,
+    0,    0,    0,    0,    0,    0,    0,   76,   76,   76,
+   77,   77,   77,   77,   63,    0,    0,   63,    0,   77,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   62,   62,    0,    0,    0,    0,    0,   60,    0,   60,
+    0,   63,   63,   77,   77,    0,   77,   77,   77,   77,
+    0,    0,    0,    0,    0,    0,    0,    0,   77,   77,
+   77,    0,   78,   78,   78,   78,    0,    0,    0,    0,
+    0,   78,    0,    0,   63,   79,   63,    0,   79,    0,
+    0,    0,    0,    0,    0,   78,   78,    0,   78,   78,
+   78,   78,   79,   79,    0,   79,    0,   79,    0,    0,
+   78,   78,   78,    0,    0,    0,   63,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   81,    0,    0,   81,
+    0,    0,    0,    0,    0,   79,   82,   79,    0,   82,
+    0,    0,    0,   81,   81,    0,   81,    0,   81,    0,
+    0,    0,    0,   82,   82,    0,   82,    0,   82,    0,
+    0,    0,    0,    0,    0,    0,    0,   79,    0,    0,
+    0,    0,    0,    0,    0,    0,   81,   80,   81,    0,
+   80,    0,    0,    0,   85,    0,   82,   85,   82,   65,
+    0,    0,   65,    0,   80,   80,    0,   80,    0,   80,
+    0,   85,   85,    0,   85,    0,   65,   65,   81,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   82,    0,
+    0,    0,    0,    0,    0,    0,    0,   80,    0,   80,
+    0,    0,    0,    0,   85,   66,   85,    0,   66,   65,
+   71,   65,    0,   71,    0,    0,    0,    0,    0,    0,
+    0,    0,   66,   66,    0,    0,    0,   71,   71,   80,
+   63,   63,   63,   63,    0,    0,   85,    0,    0,    0,
+    0,   65,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   63,   63,   66,    0,   66,    0,    0,
+   71,   70,   71,    0,   70,    0,    0,    0,   63,   63,
+   63,    0,    0,    0,    0,    0,    0,    0,   70,   70,
+    0,   79,   79,   79,   79,    0,    0,   66,    0,    0,
+   79,    0,   71,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   79,   79,    0,   79,   79,   79,
+    0,   70,    0,   70,    0,    0,    0,    0,    0,   79,
+   79,   79,   81,   81,   81,   81,    0,    0,    0,    0,
+    0,   81,   82,   82,   82,   82,    0,    0,    0,    0,
+    0,   82,    0,   70,    0,   81,   81,  146,   81,   81,
+  146,    0,    0,    0,    0,   82,   82,    0,   82,    0,
+   81,   81,   81,    0,  146,  146,    0,  146,    0,  146,
+   82,   82,   82,   80,   80,   80,   80,    0,    0,    0,
+   85,   85,   85,   85,    0,   65,   65,   65,   65,    0,
+    0,    0,    0,    0,    0,    0,   80,   80,   69,  146,
+    0,   69,    0,   85,   85,    0,    0,    0,   65,   65,
+    0,   80,   80,   80,    0,   69,   69,    0,   85,   85,
+   85,    0,    0,   65,   65,   65,    0,   68,    0,    0,
+   68,   66,   66,   66,   66,    0,   71,   71,   71,   71,
+    0,    0,    0,    0,   68,   68,   67,    0,   69,   67,
+   69,    0,    0,    0,   66,   66,    0,    0,    0,   71,
+   71,    0,    0,   67,   67,    0,    0,    0,    0,   66,
+   66,   66,    0,    0,   71,   71,   71,   68,    0,   68,
+   69,    0,    0,    0,    0,    0,    0,   70,   70,   70,
+   70,    0,    0,    0,    0,    0,   67,   64,   67,    0,
+   64,    0,    0,    0,    0,    0,    0,    0,    0,   68,
+   70,   70,    0,    0,   64,   64,   87,    0,    0,   87,
+    0,    0,    0,    0,    0,   70,   70,   70,   67,    0,
+    0,    0,    0,   87,   87,    0,   87,    0,   87,    0,
+    0,    0,    0,    0,    0,    0,    0,   64,    0,   64,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   76,   76,   76,   76,   63,    0,    0,   63,    0,   76,
-    0,    0,    0,   62,    0,   62,    0,    0,    0,   60,
-    0,   63,   63,   76,   76,    0,   76,   76,   76,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   76,   76,
-   76,   78,   78,   78,   78,   62,    0,    0,    0,    0,
-   78,    0,    0,    0,   63,   68,   63,    0,   68,    0,
-   67,    0,    0,   67,   78,   78,   66,   78,   78,   66,
-    0,    0,   68,   68,    0,    0,    0,   67,   67,   78,
-   78,   78,    0,   66,   66,    0,   63,    0,    0,    0,
+    0,    0,    0,   90,    0,    0,   90,    0,   87,    0,
+    0,    0,    0,  146,  146,  146,  146,    0,    0,   64,
+   90,   90,  146,   90,    0,   90,  146,  146,  146,  146,
+    0,    0,    0,    0,    0,    0,  146,  146,    0,  146,
+  146,  146,  146,    0,  146,  146,    0,    0,  146,    0,
+    0,  146,  146,   91,    0,   90,   91,    0,    0,    0,
+    0,    0,    0,    0,   69,   69,   69,   69,    0,    0,
+   91,   91,    0,   91,    0,   91,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   69,   69,   92,
+    0,    0,   92,   68,   68,   68,   68,    0,    0,    0,
+    0,    0,   69,   69,   69,   91,   92,   92,    0,   92,
+    0,   92,   67,   67,   67,   67,   68,   68,    0,    0,
+    0,    0,    0,    0,    0,   95,    0,    0,   95,    0,
+    0,   68,   68,   68,    0,   67,   67,    0,    0,    0,
+    0,   92,   95,   95,    0,   95,    0,   95,    0,    0,
+   67,   67,   67,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   64,   64,   64,   64,    0,    0,    0,
+    0,    0,   96,    0,    0,   96,    0,   95,    0,    0,
+    0,    0,   87,   87,   87,   87,   64,   64,    0,   96,
+   96,   87,   96,    0,   96,   87,   87,   87,   87,    0,
+    0,   64,   64,   64,    0,   87,   87,    0,   87,   87,
+   87,   87,    0,   87,   87,    0,    0,   87,    0,   88,
+    0,    0,   88,    0,   96,    0,    0,    0,    0,   90,
+   90,   90,   90,    0,    0,    0,   88,   88,   90,   88,
+    0,   88,   90,   90,   90,   90,    0,    0,    0,    0,
+    0,    0,   90,   90,    0,   90,   90,   90,   90,    0,
+   90,   90,    0,    0,   90,    0,    0,   89,    0,    0,
+   89,   88,    0,    0,    0,    0,    0,    0,    0,   91,
+   91,   91,   91,    0,   89,   89,    0,   89,   91,   89,
+    0,    0,   91,   91,   91,   91,    0,    0,    0,    0,
+    0,    0,   91,   91,    0,   91,   91,   91,   91,    0,
+   91,   91,    0,    0,   91,   92,   92,   92,   92,   89,
+    0,    0,    0,    0,   92,    0,    0,    0,   92,   92,
+   92,   92,    0,    0,    0,    0,    0,    0,   92,   92,
+    0,   92,   92,   92,   92,    0,   92,   92,    0,    0,
+   92,   95,   95,   95,   95,    0,    0,    0,    0,    0,
+   95,    0,    0,    0,   95,   95,   95,   95,    0,    0,
+    0,    0,    0,    0,   95,   95,    0,   95,   95,   95,
+   95,    0,   95,   95,    0,    0,   95,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   96,   96,
+   96,   96,    0,    0,    0,    0,    0,   96,    0,    0,
+    0,   96,   96,   96,   96,    0,    0,    0,    0,    0,
+    0,   96,   96,    0,   96,   96,   96,   96,    0,   96,
+   96,   98,    0,   96,    0,    0,  105,  107,    0,    0,
+    0,    0,  117,    0,    0,   88,   88,   88,   88,    0,
+    0,    0,    0,    0,   88,    0,    0,    0,   88,   88,
+   88,   88,    0,    0,    0,    0,    0,    0,   88,   88,
+    0,   88,   88,   88,   88,    0,   88,   88,    0,    0,
+   88,    0,    0,  172,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   89,   89,   89,   89,    0,    0,    0,
+    0,    0,   89,    0,    0,    0,   89,   89,   89,   89,
+    0,    0,    0,    0,    0,    0,   89,   89,    0,   89,
+   89,   89,   89,    0,   89,   89,    0,    0,   89,    0,
+    0,    0,    0,    0,    0,    0,  214,  215,  216,  217,
+  219,  221,  222,  223,  224,  225,  227,  229,  231,  233,
+  235,  236,  238,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   79,   79,   79,   79,    0,   68,    0,   68,    0,   79,
-   67,    0,   67,    0,    0,    0,   66,   65,   66,    0,
-   65,    0,    0,   79,   79,    0,   79,   64,    0,    0,
-   64,    0,    0,    0,   65,   65,    0,   68,   79,   79,
-   79,    0,   67,    0,   64,   64,    0,    0,   66,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   61,    0,
-    0,   61,   60,   60,   60,   60,    0,   65,    0,   65,
-    0,    0,    0,    0,    0,   61,   61,   64,    0,   64,
-    0,    0,    0,    0,    0,   60,   60,    0,   62,   62,
-   62,   62,    0,    0,    0,    0,    0,    0,    0,   65,
-   60,   60,   60,    0,    0,    0,    0,    0,   61,   64,
-   61,   62,   62,    0,    0,    0,    0,    0,    0,    0,
-   81,    0,    0,   81,    0,    0,   62,   62,   62,   63,
-   63,   63,   63,    0,    0,    0,    0,   81,   81,    0,
-   61,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   63,   63,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   63,   63,   63,
-   81,    0,   81,    0,    0,    0,    0,    0,    0,    0,
-   68,   68,   68,   68,    0,   67,   67,   67,   67,    0,
-    0,   66,   66,   66,   66,    0,    0,    0,    0,    0,
-    0,    0,   81,   68,   68,    0,    0,    0,   67,   67,
-    0,    0,    0,    0,   66,   66,    0,    0,   68,   68,
-   68,    0,    0,   67,   67,   67,    0,    0,    0,   66,
-   66,   66,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   65,   65,   65,   65,    0,    0,    0,    0,
-    0,    0,   64,   64,   64,   64,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   65,   65,    0,    0,    0,
-    0,    0,    0,    0,    0,   64,   64,    0,    0,    0,
-   65,   65,   65,   61,   61,   61,   61,    0,    0,    0,
-   64,   64,   64,    0,    0,    0,    0,  143,    0,    0,
-  143,    0,    0,    0,    0,    0,   61,   61,    0,    0,
-    0,    0,    0,    0,  143,  143,    0,  143,    0,  143,
-    0,   61,   61,   61,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   87,    0,    0,
-   87,    0,    0,    0,    0,   81,   81,   81,   81,  143,
-    0,    0,    0,    0,   87,   87,    0,   87,    0,   87,
-    0,    0,    0,    0,    0,    0,    0,    0,   81,    0,
-    0,    0,    0,   88,    0,    0,   88,    0,    0,    0,
-    0,    0,    0,   81,   81,   81,    0,    0,    0,   87,
-   88,   88,    0,   88,    0,   88,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   89,
-    0,    0,   89,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   88,   89,   89,    0,   89,
-    0,   89,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   92,    0,    0,   92,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   89,   92,   92,    0,   92,    0,   92,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   93,    0,    0,   93,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   92,   93,   93,
-    0,   93,    0,   93,    0,    0,    0,    0,    0,    0,
+    0,    0,  214,    0,    0,    0,    0,    0,    0,    0,
+  214,    0,  214,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  284,    0,  285,    0,    0,    0,
+    0,    0,  287,    0,  288,    0,  289,    0,  290,    0,
+  291,    0,    0,  292,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  143,  143,  143,  143,    0,    0,    0,    0,
-    0,  143,    0,   93,    0,  143,  143,  143,  143,    0,
-    0,    0,    0,    0,    0,  143,  143,    0,  143,  143,
-  143,  143,   85,  143,  143,   85,    0,  143,    0,    0,
-  143,  143,   87,   87,   87,   87,    0,    0,    0,   85,
-   85,   87,   85,    0,   85,   87,   87,   87,   87,    0,
-    0,    0,    0,    0,    0,   87,   87,    0,   87,   87,
-   87,   87,    0,   87,   87,    0,    0,   87,   88,   88,
-   88,   88,    0,    0,   85,    0,    0,   88,    0,    0,
-    0,   88,   88,   88,   88,    0,    0,    0,    0,    0,
-    0,   88,   88,    0,   88,   88,   88,   88,    0,   88,
-   88,    0,    0,   88,   89,   89,   89,   89,    0,    0,
-    0,    0,    0,   89,    0,    0,    0,   89,   89,   89,
-   89,    0,    0,    0,    0,    0,    0,   89,   89,    0,
-   89,   89,   89,   89,    0,   89,   89,    0,    0,   89,
-   92,   92,   92,   92,    0,    0,    0,    0,    0,   92,
-    0,    0,    0,   92,   92,   92,   92,    0,    0,    0,
-    0,    0,    0,   92,   92,    0,   92,   92,   92,   92,
-    0,   92,   92,    0,    0,   92,   93,   93,   93,   93,
-    0,    0,   93,    0,    0,   93,    0,  100,  102,   93,
-   93,   93,   93,  112,    0,    0,    0,    0,    0,   93,
-   93,    0,   93,   93,   93,   93,   86,   93,   93,   86,
-    0,   93,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   86,   86,    0,   86,    0,   86,    0,
-    0,    0,  166,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   85,   85,   85,
-   85,    0,    0,    0,    0,    0,   85,    0,   86,    0,
-   85,   85,   85,   85,    0,    0,    0,    0,    0,    0,
-   85,   85,    0,   85,   85,   85,   85,    0,   85,   85,
-    0,    0,   85,    0,    0,  208,  209,  210,  211,  213,
-  215,  216,  217,  218,  219,  221,  223,  225,  227,  229,
-  230,  232,    0,    0,    0,    0,    0,    0,    0,    0,
+  305,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  208,    0,    0,    0,    0,    0,    0,    0,  208,    0,
-  208,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  278,    0,  279,    0,    0,    0,    0,    0,
-  281,    0,  282,    0,  283,    0,  284,    0,  285,    0,
-    0,  286,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  299,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  317,   86,   86,   86,   86,    0,    0,    0,    0,    0,
-   86,    0,    0,    0,   86,   86,   86,   86,    0,    0,
-    0,    0,    0,    0,   86,   86,    0,   86,   86,   86,
-   86,    0,   86,   86,    0,    0,   86,
+    0,    0,  323,
 };
 short yycheck[] = {                                       5,
-   81,   91,   36,   91,  175,   59,   12,   59,   12,  123,
-   16,   41,   18,   40,   44,   96,  257,   40,   40,   40,
-   91,   27,   28,   29,   30,   40,  107,   44,  177,  110,
-  278,   37,  125,  123,   23,  123,   40,   43,   91,   44,
-   91,   41,  257,  291,   44,   49,   44,   36,  169,   53,
-  171,   41,  123,   42,   44,   41,   44,   44,   58,   59,
-   44,   61,   44,   63,   91,   54,   55,   56,   57,   58,
-  123,  123,  123,   59,   41,  123,   93,  272,   84,   83,
-   86,   85,   88,   87,   90,   89,   59,   91,   93,  123,
-   44,   95,   59,   93,  243,   93,  123,   41,   41,    0,
-  123,  123,  123,  184,  281,   93,   93,   96,  123,   93,
-   44,   93,  261,  194,   40,   59,   59,  266,  107,  268,
-   41,  298,   41,  129,  301,   59,   40,  131,  132,  133,
-  134,  302,   33,   40,  305,   36,   37,   38,   59,   40,
-   59,   42,   43,  257,   45,   44,   44,   59,  152,   40,
-   44,   44,  156,  157,  158,  159,  160,  161,   59,   40,
-   59,   59,    0,   64,  245,   59,   59,  306,  258,  262,
-  263,  264,  265,  344,   44,  179,   44,  281,  282,  300,
-  301,  185,  186,   36,  188,   41,  307,   40,   44,   59,
-   91,   59,  196,  297,  298,   33,   40,  301,   36,   37,
-   38,   41,   40,  257,   42,   43,   36,   45,  289,   40,
-   40,   44,  333,   36,   41,  123,  297,   44,  306,  125,
-   91,   59,  123,  257,  125,  126,   64,  261,   41,   41,
-  234,   44,  236,  304,  305,  306,  266,  267,  268,  269,
-   59,   41,   41,  249,   44,  251,   41,  253,  254,   44,
-  123,  257,   91,   91,  260,  259,  125,  298,  301,   41,
-  301,   61,   44,   63,   40,  269,  266,  267,  268,  269,
-   41,   40,  276,   44,   40,  275,   58,   59,   41,  279,
-  280,  281,  282,    0,  125,  123,   59,  125,  126,  289,
-  290,  125,  292,  293,  294,  295,  125,  297,  298,  125,
-  304,  301,  308,  125,  304,  305,  306,  270,  271,   91,
-  125,   93,  266,  267,  268,  269,   33,   41,   41,   36,
-   37,   38,  125,   40,   59,   42,   43,  331,   45,   41,
-  279,  280,  281,  282,  340,  262,  263,  264,  265,  345,
-   41,  123,   59,  292,  293,  294,  295,   64,  297,  298,
-   41,   41,  301,   59,   59,  256,  257,  258,  259,  260,
-  261,  262,  263,  264,  265,  266,  267,  268,  269,   41,
-   73,  331,  273,  274,   91,  276,  277,  278,   12,  259,
-   -1,   -1,  283,  284,  285,  286,  287,  288,   -1,   -1,
-  291,   -1,   -1,   -1,   -1,  296,  281,  282,   -1,  300,
-   -1,  302,  303,   -1,   -1,  306,  123,   58,  125,  126,
-   61,   -1,   63,  298,   -1,   -1,  301,   -1,  256,  257,
+  181,   59,  123,   91,   91,   91,   59,   13,   40,   13,
+   40,  183,   18,   44,   20,   41,   40,   44,   44,   23,
+   40,   91,   44,   44,   30,   31,   32,   33,   40,  257,
+  279,   36,   58,   59,   40,  123,  123,  123,   41,   43,
+   46,   44,   44,  292,  175,   44,  177,  257,   52,   44,
+   91,  282,   56,  123,   44,  123,   41,   59,   44,   44,
+   44,   91,   93,   41,   40,   91,   93,   93,  299,   59,
+  123,  302,   93,   58,   59,  125,   41,  249,   61,   44,
+   63,   59,  123,   89,   88,   91,   90,   93,   92,   95,
+   94,  123,   96,  123,   93,  267,  100,  123,   93,  123,
+  272,   41,  274,  123,    0,   41,   91,   93,   93,   93,
+   59,  123,   36,   41,   44,   40,   40,  299,  123,   59,
+  302,   41,   36,   59,  257,   41,   40,  308,  134,   59,
+  311,   59,  136,  137,  138,  139,  257,   33,  123,   59,
+   36,   37,   38,   59,   40,   40,   42,   43,  280,   45,
+  282,  283,   40,  157,  282,  283,  273,  161,  162,  163,
+  164,  165,  166,   59,    0,   44,  298,  299,   64,  350,
+  302,  299,  258,   59,  302,  306,  307,   44,   44,   44,
+   59,  185,  313,   41,   40,  307,   44,  191,  192,   40,
+  194,   41,   59,   59,   59,   91,   44,   33,  202,  257,
+   36,   37,   38,   40,   40,   36,   42,   43,  339,   45,
+  123,   59,  262,  263,  264,  265,  266,  305,  306,  307,
+  307,   41,   41,   59,   44,   44,  125,  123,   64,  125,
+  126,   41,    0,   44,   44,   41,  240,   41,  242,   91,
+   44,  267,  268,  269,  270,  267,  268,  269,  270,  255,
+   59,  257,  257,  259,  260,   91,  261,  263,  271,  272,
+  266,  265,   41,  123,  290,   33,  125,   91,   36,   37,
+   38,  275,   40,  302,   42,   43,   40,   45,  282,  305,
+  306,  307,  267,  268,  269,  270,   40,  123,   40,  125,
+  126,   59,   41,  276,   59,  125,   64,  280,  281,  282,
+  283,   41,  267,  268,  269,  270,  310,  125,  314,  125,
+  293,  294,  295,  296,   41,  298,  299,  125,  125,  302,
+  305,  306,  307,   91,  125,  280,  281,  282,  283,  125,
+   41,   41,   41,  337,   41,  262,  263,  264,  265,  266,
+  346,  296,   59,  298,  299,  351,   41,  302,   41,  337,
+   61,   59,   63,   59,   76,  123,   13,  125,  126,  265,
+  256,  257,  258,  259,  260,  261,  262,  263,  264,  265,
+  266,  267,  268,  269,  270,   -1,   -1,   -1,  274,  275,
+   -1,  277,  278,  279,   26,   -1,   -1,   -1,  284,  285,
+  286,  287,  288,  289,   -1,   -1,  292,   39,   -1,   -1,
+   -1,  297,   -1,   45,   -1,  301,   -1,  303,  304,   -1,
+   -1,  307,   -1,   -1,   -1,   57,   58,   59,   60,   61,
+  256,  257,  258,  259,  260,  261,  262,  263,  264,  265,
+  266,  267,  268,  269,  270,   -1,   -1,   -1,  274,  275,
+   -1,  277,  278,  279,   -1,   -1,   -1,   86,  284,  285,
+  286,  287,  288,  289,   63,   -1,  292,   -1,   -1,  101,
+   -1,  297,  101,   -1,   -1,  301,   -1,  303,  304,   -1,
+  112,   -1,   -1,  112,   33,   -1,  115,   36,   37,   38,
+   -1,   40,   -1,   42,   43,   -1,   45,   -1,  256,  257,
   258,  259,  260,  261,  262,  263,  264,  265,  266,  267,
-  268,  269,   -1,   -1,   -1,  273,  274,   -1,  276,  277,
-  278,   63,   -1,   -1,   -1,  283,  284,  285,  286,  287,
-  288,   -1,   -1,  291,  279,  280,  281,  282,  296,   -1,
-   -1,   -1,  300,   -1,  302,  303,   -1,    0,  293,  294,
-  295,   -1,  297,  298,   -1,  275,  301,   -1,   -1,  279,
-  280,  281,  282,   -1,  266,  267,  268,  269,   -1,  289,
-  290,   -1,  292,  293,  294,  295,   -1,  297,  298,   -1,
-   33,  301,   -1,   36,   37,   38,   -1,   40,   -1,   42,
-   43,   -1,   45,   -1,  279,  280,  281,  282,   -1,   -1,
-   -1,   -1,  304,  305,  306,   -1,   59,   -1,   -1,  294,
-  295,   64,  297,  298,   -1,   -1,  301,   -1,   -1,  256,
-  257,  258,  259,  260,  261,  262,  263,  264,  265,  266,
-  267,  268,  269,   -1,   -1,   -1,  273,  274,   91,  276,
-  277,  278,   -1,   -1,   -1,   -1,  283,  284,  285,  286,
-  287,  288,   -1,   -1,  291,   -1,   -1,   -1,   -1,  296,
-   -1,   -1,   -1,  300,   -1,  302,  303,   -1,   -1,   -1,
-  123,   33,   -1,  126,   36,   37,   38,   -1,   40,   41,
-   42,   43,   44,   45,   44,   45,   46,   47,   48,   -1,
-   -1,   51,   52,   -1,   -1,   -1,   58,   59,   -1,   61,
-   -1,   63,   64,   -1,  275,   -1,   -1,   -1,  279,  280,
-  281,  282,   -1,   -1,   -1,   -1,   -1,   -1,  289,  290,
-   -1,  292,  293,  294,  295,   41,  297,  298,   44,   91,
-  301,   93,   -1,  275,   -1,   -1,   -1,  279,  280,  281,
-  282,   -1,   58,   59,   -1,   61,   -1,   63,   -1,   -1,
-  292,  293,  294,  295,   -1,  297,  298,   -1,   -1,  301,
-   -1,  123,   33,   -1,  126,   36,   37,   38,   -1,   40,
-   41,   42,   43,   44,   45,   -1,   -1,   93,  279,  280,
-  281,  282,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,
-   61,   -1,   63,   64,  295,   -1,  297,  298,   -1,   -1,
-  301,   -1,   -1,  256,  257,  258,  259,  260,  261,   -1,
-   -1,   -1,   -1,  266,  267,  268,  269,   -1,   -1,   -1,
-  273,  274,   93,  276,  277,  278,   -1,   -1,   -1,   -1,
-  283,  284,  285,  286,  287,  288,   -1,   -1,  291,   41,
-   -1,   -1,   -1,  296,   -1,   -1,   -1,  300,   -1,  302,
-  303,  279,  280,  281,  282,  126,   -1,   -1,   -1,   61,
-   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,
-  298,   -1,   -1,  301,   -1,   -1,   -1,   -1,   -1,   33,
-   -1,   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,
-   -1,   45,   -1,   -1,   -1,  257,  258,  259,  260,  261,
-   -1,   -1,   -1,   -1,  266,  267,  268,  269,   -1,   -1,
-   64,   -1,  274,  275,  276,  277,  278,  279,  280,  281,
-  282,  283,  284,  285,  286,  287,  288,  289,  290,  291,
-  292,  293,  294,  295,  296,  297,  298,   91,  300,  301,
-  302,  303,  304,  305,  306,   -1,   -1,   -1,   -1,   -1,
-  266,  267,  268,  269,   61,   -1,   63,   -1,   -1,  275,
-   -1,   -1,   -1,  279,  280,  281,  282,   -1,   -1,  123,
-   -1,   -1,  126,  289,  290,   -1,  292,  293,  294,  295,
-   -1,  297,  298,   -1,   -1,  301,  257,  258,  259,  260,
-  261,   -1,   -1,   -1,   -1,  266,  267,  268,  269,   -1,
-   -1,   -1,   -1,  274,  275,  276,  277,  278,  279,  280,
-  281,  282,  283,  284,  285,  286,  287,  288,  289,  290,
-  291,  292,  293,  294,  295,  296,  297,  298,   -1,  300,
-  301,  302,  303,  304,  305,  306,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  279,   -1,  281,  282,   -1,
-   33,   -1,   -1,   36,   37,   38,   -1,   40,   -1,   42,
-   43,   -1,   45,  297,  298,   -1,   -1,  301,   -1,   -1,
-   -1,   -1,   -1,  275,   -1,   -1,   59,  279,  280,  281,
-  282,   64,   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,
-  292,  293,  294,  295,   -1,  297,  298,   -1,   -1,  301,
-   -1,   -1,   -1,  257,  258,  259,  260,  261,   91,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  274,   -1,  276,  277,  278,   61,   -1,   63,   -1,  283,
-  284,  285,  286,  287,  288,   -1,   -1,  291,   -1,   -1,
-  123,   -1,  296,  126,   -1,   -1,  300,   -1,  302,  303,
-   33,   -1,  306,   36,   37,   38,   -1,   40,   -1,   42,
-   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,  275,   -1,
-   -1,   -1,  279,  280,  281,  282,   59,   -1,   -1,   -1,
-   -1,   64,  289,  290,   -1,  292,  293,  294,  295,   23,
-  297,  298,   -1,   -1,  301,   -1,   -1,   31,   -1,   -1,
-   -1,   -1,   36,   37,   -1,   39,   33,   -1,   91,   36,
-   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,
-   54,   55,   56,   57,   58,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   59,   -1,   -1,   -1,   -1,   64,   -1,   -1,
-  123,   -1,   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,   -1,
-   -1,   36,   37,   38,   91,   40,   41,   42,   43,  103,
-   45,   -1,   -1,  256,  257,  258,  259,  260,  261,   -1,
-   -1,   -1,   -1,  266,  267,  268,  269,   -1,   -1,   64,
-  273,  274,   -1,  276,  277,  278,  123,   -1,   -1,  126,
-  283,  284,  285,  286,  287,  288,   -1,   -1,  291,   -1,
-   -1,   -1,   -1,  296,   -1,   -1,   91,  300,   -1,  302,
-  303,   33,   -1,   -1,   36,   37,   38,   -1,   40,   -1,
-   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,  275,
-   -1,   -1,   -1,  279,  280,  281,  282,   -1,  123,   -1,
-   -1,  126,   64,   -1,  290,   -1,  292,  293,  294,  295,
-   -1,  297,  298,   -1,   -1,  301,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  256,  257,  258,  259,  260,  261,   91,
-   -1,   93,   -1,  266,  267,  268,  269,   -1,   -1,   -1,
-  273,  274,   -1,  276,  277,  278,   -1,   -1,   -1,   -1,
-  283,  284,  285,  286,  287,  288,   -1,   -1,  291,   -1,
-   -1,  123,   -1,  296,  126,   -1,   -1,  300,   -1,  302,
-  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  257,  258,  259,  260,  261,   61,   33,   63,   -1,   36,
-   37,   38,   -1,   40,   -1,   42,   43,  274,   45,  276,
-  277,  278,   -1,   -1,   -1,   -1,  283,  284,  285,  286,
-  287,  288,   -1,   -1,  291,   -1,   -1,   64,   -1,  296,
-   -1,   -1,   -1,  300,   -1,  302,  303,   -1,   -1,   -1,
-   -1,   -1,  257,  258,  259,  260,  261,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,  274,
-   -1,  276,  277,  278,   -1,   -1,   -1,   -1,  283,  284,
-  285,  286,  287,  288,   -1,   -1,  291,   -1,   -1,   -1,
-   -1,  296,   -1,   -1,   -1,  300,  123,  302,  303,  126,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  257,  258,  259,  260,  261,
-   -1,   33,   -1,   -1,   36,   37,   38,   -1,   40,   41,
-   42,   43,  274,   45,  276,  277,  278,   -1,   -1,   -1,
-   -1,  283,  284,  285,  286,  287,  288,   -1,   -1,  291,
-   -1,   -1,   64,   -1,  296,   -1,   -1,   -1,  300,   -1,
-  302,  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,   -1,   91,
-   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   61,   -1,   -1,   64,   -1,
-   -1,  123,   -1,   -1,  126,   -1,   -1,   -1,   -1,  275,
-   -1,   -1,   -1,  279,  280,  281,  282,   -1,   -1,  256,
-  257,  258,  259,  260,  261,   91,  292,  293,  294,  295,
-   -1,  297,  298,   -1,   -1,  301,   -1,  274,   -1,  276,
-  277,  278,   -1,   -1,   -1,   -1,  283,  284,  285,  286,
-  287,  288,   -1,   -1,  291,   -1,   -1,  123,   -1,  296,
-  126,   -1,   -1,  300,   -1,  302,  303,   33,   -1,   -1,
+  268,  269,  270,   -1,    0,   64,  274,  275,   -1,  277,
+  278,  279,   -1,   -1,   -1,   -1,  284,  285,  286,  287,
+  288,  289,   -1,   -1,  292,   -1,   -1,   -1,   -1,  297,
+   -1,   -1,   91,  301,   -1,  303,  304,   33,   -1,   -1,
    36,   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,
+   -1,  190,   -1,   -1,   -1,  280,  281,  282,  283,   -1,
+   -1,  200,   -1,   59,  123,  276,   -1,  126,   64,  280,
+  281,  282,  283,  298,  299,   -1,   -1,  302,   -1,  290,
+  291,   -1,  293,  294,  295,  296,   -1,  298,  299,   33,
+   -1,  302,   36,   37,   38,   91,   40,   41,   42,   43,
+   44,   45,   -1,   -1,   -1,  282,  283,   -1,   -1,   -1,
+   26,   -1,  251,   -1,   58,   59,   -1,   61,   34,   63,
+   64,  298,  299,   39,   40,  302,   42,  123,   -1,   -1,
+  126,   -1,   47,   48,   49,   50,   51,   -1,   -1,   54,
+   55,   57,   58,   59,   60,   61,   -1,   91,   -1,   93,
+   33,   -1,   -1,   36,   37,   38,  295,   40,   41,   42,
+   43,   44,   45,   -1,  303,   -1,   -1,  276,   -1,   -1,
+   -1,  280,  281,  282,  283,   58,   59,   -1,   61,  123,
+   63,   64,  126,   -1,  293,  294,  295,  296,   -1,  298,
+  299,   -1,  108,  302,   -1,   -1,   -1,   -1,  257,  258,
+  259,  260,  261,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   93,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,  278,
+  279,   -1,   -1,   -1,   -1,  284,  285,  286,  287,  288,
+  289,   -1,   -1,  292,  280,  281,  282,  283,  297,   -1,
+   -1,   -1,  301,  126,  303,  304,   -1,   -1,  307,  295,
+  296,   -1,  298,  299,   -1,   -1,  302,   -1,   -1,   -1,
+  256,  257,  258,  259,  260,  261,   -1,   -1,   -1,   -1,
+   -1,  267,  268,  269,  270,   -1,   -1,   -1,  274,  275,
+   -1,  277,  278,  279,   -1,   -1,   -1,   -1,  284,  285,
+  286,  287,  288,  289,   -1,   -1,  292,   -1,   -1,   -1,
+   -1,  297,   -1,   -1,   -1,  301,   -1,  303,  304,   -1,
+   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,   -1,
+   -1,   -1,   -1,  267,  268,  269,  270,   -1,   -1,   -1,
+   -1,  275,  276,  277,  278,  279,  280,  281,  282,  283,
+  284,  285,  286,  287,  288,  289,  290,  291,  292,  293,
+  294,  295,  296,  297,  298,  299,   -1,  301,  302,  303,
+  304,  305,  306,  307,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,
+   -1,   -1,   -1,   -1,  267,  268,  269,  270,   -1,   61,
+   -1,   63,  275,  276,  277,  278,  279,  280,  281,  282,
+  283,  284,  285,  286,  287,  288,  289,  290,  291,  292,
+  293,  294,  295,  296,  297,  298,  299,   -1,  301,  302,
+  303,  304,  305,  306,  307,   33,   -1,   -1,   36,   37,
+   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,  280,
+  281,  282,  283,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   59,  293,  294,  295,  296,   64,  298,  299,   -1,
+   -1,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   33,   -1,   -1,   36,   37,
+   38,   -1,   40,   91,   42,   43,   -1,   45,   -1,  280,
+  281,  282,  283,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   59,   -1,  294,  295,  296,   64,  298,  299,   41,
+   -1,  302,   44,   -1,   -1,  123,   -1,   -1,  126,   -1,
+   -1,   -1,   -1,   -1,   -1,   33,   58,   59,   36,   37,
+   38,   -1,   40,   91,   42,   43,   -1,   45,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   61,   -1,   -1,   64,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   33,   -1,   -1,   36,   37,   38,
-   -1,   40,   -1,   42,   43,   91,   45,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  257,  258,  259,  260,  261,
-   -1,   -1,   61,   -1,   -1,   64,   -1,   -1,   -1,   -1,
-   -1,   -1,  274,   -1,  276,  277,  278,  123,   -1,   -1,
-  126,  283,  284,  285,  286,  287,  288,   -1,   -1,  291,
-   -1,   -1,   91,   -1,  296,   -1,   -1,   -1,  300,   41,
-  302,  303,   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  257,  258,  259,  260,  261,   58,   59,   -1,   61,
-   -1,   63,   -1,   -1,  123,   -1,   -1,  126,  274,   -1,
-  276,  277,  278,   -1,   -1,   -1,   -1,  283,  284,  285,
-  286,  287,  288,   -1,   -1,  291,   -1,   -1,   -1,   91,
-  296,   93,   -1,   -1,  300,   -1,  302,  303,   33,   -1,
-   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,
-   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  123,   -1,   -1,   -1,   -1,   61,   -1,   -1,   64,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   59,   -1,   -1,   -1,   -1,   64,   -1,   -1,   91,
+   -1,   93,   -1,   -1,   -1,  123,   -1,   -1,  126,   -1,
+   -1,   -1,   -1,   -1,   -1,   33,   -1,   -1,   36,   37,
+   38,   -1,   40,   91,   42,   43,   -1,   45,   -1,   -1,
+   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   59,   -1,   -1,  276,   -1,   64,   -1,  280,  281,
+  282,  283,   -1,   -1,   -1,  123,   -1,   -1,  126,  291,
+   -1,  293,  294,  295,  296,   -1,  298,  299,   -1,   -1,
+  302,   -1,   33,   91,   -1,   36,   37,   38,   -1,   40,
+   41,   42,   43,   -1,   45,   -1,   -1,   -1,  256,  257,
+  258,  259,  260,  261,   -1,   -1,   -1,   -1,   -1,  267,
+  268,  269,  270,   64,   -1,  123,  274,  275,  126,  277,
+  278,  279,   -1,   -1,   -1,   -1,  284,  285,  286,  287,
+  288,  289,   -1,   -1,  292,   -1,   -1,   -1,   -1,  297,
+   91,   -1,   -1,  301,   -1,  303,  304,   -1,  256,  257,
+  258,  259,  260,  261,   -1,   -1,   -1,   -1,   -1,  267,
+  268,  269,  270,   -1,   -1,   -1,  274,  275,   -1,  277,
+  278,  279,  123,   -1,   -1,  126,  284,  285,  286,  287,
+  288,  289,   -1,   -1,  292,  267,  268,  269,  270,  297,
+   -1,   -1,   -1,  301,   -1,  303,  304,   -1,   -1,  257,
+  258,  259,  260,  261,   33,   -1,   -1,   36,   37,   38,
+   -1,   40,   -1,   42,   43,   -1,   45,  275,   -1,  277,
+  278,  279,   -1,  305,  306,  307,  284,  285,  286,  287,
+  288,  289,   -1,   -1,  292,   64,   -1,   -1,   -1,  297,
+   -1,   -1,   -1,  301,   -1,  303,  304,   -1,   -1,  257,
+  258,  259,  260,  261,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   91,   41,   93,   -1,   44,  275,   -1,  277,
+  278,  279,   -1,   -1,   -1,   -1,  284,  285,  286,  287,
+  288,  289,   -1,   61,  292,   63,   -1,   -1,   -1,  297,
+   -1,   -1,   -1,  301,  123,  303,  304,  126,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,  259,  260,
+  261,   33,   -1,   -1,   36,   37,   38,   -1,   40,   -1,
+   42,   43,   -1,   45,  275,   -1,  277,  278,  279,   -1,
+   -1,   -1,   -1,  284,  285,  286,  287,  288,  289,   -1,
+   -1,  292,   64,   -1,   -1,   -1,  297,   -1,   -1,   -1,
+  301,   -1,  303,  304,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,
+   -1,   -1,   -1,   -1,   -1,   -1,   33,   -1,   -1,   36,
+   37,   38,   -1,   40,   41,   42,   43,   -1,   45,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  257,  258,  259,  260,  261,   91,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  274,   -1,
-  276,  277,  278,   -1,   -1,   -1,   -1,  283,  284,  285,
-  286,  287,  288,   -1,   -1,  291,   -1,   -1,  123,   -1,
-  296,  126,   -1,   -1,  300,   -1,  302,  303,  257,  258,
-  259,  260,  261,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  274,   -1,  276,  277,  278,
-   -1,   -1,   -1,   -1,  283,  284,  285,  286,  287,  288,
-   -1,   -1,  291,   -1,   -1,   -1,   -1,  296,   -1,   -1,
-   -1,  300,   33,  302,  303,   36,   37,   38,   -1,   40,
-   -1,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  266,  267,  268,  269,   -1,   -1,
-   61,   -1,   -1,   64,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  289,  290,   33,
-   -1,   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,
-   91,   45,  304,  305,  306,   -1,   -1,   -1,   -1,   -1,
-   41,   -1,   -1,   44,   -1,   -1,   -1,   61,   -1,   -1,
-   64,   -1,  257,  258,  259,  260,  261,   58,   59,   -1,
-   -1,   -1,  123,   -1,   -1,  126,   -1,   -1,   -1,  274,
-   -1,  276,  277,  278,   -1,   -1,   -1,   91,  283,  284,
-  285,  286,  287,  288,   -1,   -1,  291,   -1,   -1,   -1,
-   91,  296,   93,   -1,   -1,  300,   33,  302,  303,   36,
-   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,  123,
-   -1,   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  123,   -1,   61,   -1,   -1,   64,   -1,   -1,
+   -1,  123,   -1,   -1,  126,   -1,   -1,   64,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,
+  259,  260,  261,   33,   91,   -1,   36,   37,   38,   -1,
+   40,   -1,   42,   43,   -1,   45,  275,   -1,  277,  278,
+  279,   -1,   -1,   -1,   -1,  284,  285,  286,  287,  288,
+  289,   61,   -1,  292,   64,   -1,  123,   -1,  297,  126,
+   -1,   -1,  301,   -1,  303,  304,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   33,   -1,   -1,   36,   37,   38,   -1,
-   40,   -1,   42,   43,   91,   45,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   61,   -1,   -1,   64,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,  126,
-   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,  259,  260,
-  261,   91,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  274,   -1,  276,  277,  278,   -1,   -1,
-   -1,   -1,  283,  284,  285,  286,  287,  288,   -1,   -1,
-  291,   -1,   -1,  123,   -1,  296,  126,   -1,   -1,  300,
-   -1,  302,  303,  257,  258,  259,  260,  261,   -1,   -1,
+   40,   91,   42,   43,   -1,   45,   -1,   -1,  276,   -1,
+   -1,   -1,  280,  281,  282,  283,   -1,   -1,   -1,   -1,
+   -1,   61,  290,  291,   64,  293,  294,  295,  296,   -1,
+  298,  299,   -1,  123,  302,   -1,  126,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  256,  257,  258,  259,  260,  261,
+   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  275,   -1,  277,  278,  279,   -1,   61,
+   -1,   63,  284,  285,  286,  287,  288,  289,   -1,   -1,
+  292,   -1,   -1,  123,   -1,  297,  126,   -1,   -1,  301,
+   33,  303,  304,   36,   37,   38,   -1,   40,   -1,   42,
+   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  257,  258,  259,  260,  261,   -1,   -1,   -1,   61,   -1,
+   -1,   64,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,  278,  279,   -1,   -1,   -1,   -1,  284,  285,  286,
+  287,  288,  289,   -1,   -1,  292,   -1,   -1,   91,   -1,
+  297,   -1,   -1,   -1,  301,   -1,  303,  304,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,  259,
+  260,  261,   33,   -1,   -1,   36,   37,   38,   -1,   40,
+  123,   42,   43,  126,   45,  275,   -1,  277,  278,  279,
+   -1,   -1,   -1,   -1,  284,  285,  286,  287,  288,  289,
+   61,   -1,  292,   64,   -1,   -1,   -1,  297,   -1,   -1,
+   -1,  301,   -1,  303,  304,   -1,   -1,  257,  258,  259,
+  260,  261,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   91,   -1,   -1,   -1,   -1,  275,   -1,  277,  278,  279,
+   -1,   -1,   -1,   -1,  284,  285,  286,  287,  288,  289,
+   -1,   -1,  292,   -1,   -1,   -1,   -1,  297,   -1,   -1,
+   -1,  301,  123,  303,  304,  126,   33,   -1,   -1,   36,
+   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,  280,  281,
+  282,  283,   -1,   -1,   61,   -1,   -1,   64,  290,  291,
+   -1,  293,  294,  295,  296,   -1,  298,  299,   -1,   -1,
+  302,   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,
+   -1,   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,   -1,
+   41,   -1,  275,   44,  277,  278,  279,   -1,   -1,   -1,
+   -1,  284,  285,  286,  287,  288,  289,   58,   59,  292,
+   61,   -1,   63,   -1,  297,   -1,  123,   -1,  301,  126,
+  303,  304,   33,   -1,   -1,   36,   37,   38,   -1,   40,
+   -1,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,
+   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   61,   -1,   -1,   64,   -1,   -1,  257,  258,  259,  260,
+  261,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  123,   -1,  275,   -1,  277,  278,  279,   -1,
+   91,   -1,   -1,  284,  285,  286,  287,  288,  289,   -1,
+   -1,  292,   58,   -1,   -1,   61,  297,   63,   -1,   -1,
+  301,   -1,  303,  304,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  123,   -1,   -1,  126,   33,   -1,   -1,   36,
+   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  274,   -1,  276,  277,  278,  266,  267,  268,  269,  283,
-  284,  285,  286,  287,  288,   -1,   -1,  291,   -1,   -1,
-   -1,   -1,  296,   -1,   -1,   -1,  300,   33,  302,  303,
+   -1,   -1,   -1,   -1,   61,   -1,   -1,   64,   -1,   -1,
+  257,  258,  259,  260,  261,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,  278,  279,   -1,   91,   -1,   -1,  284,  285,  286,
+  287,  288,  289,   -1,   -1,  292,   -1,   -1,   -1,   -1,
+  297,   -1,   -1,   -1,  301,   33,  303,  304,   36,   37,
+   38,   -1,   40,   -1,   42,   43,  123,   45,   -1,  126,
+   -1,   -1,   -1,   -1,   -1,   -1,  267,  268,  269,  270,
+   -1,   -1,   -1,   61,   -1,  276,   64,   -1,   -1,  280,
+  281,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,
+  291,   -1,  293,  294,  295,  296,  257,  258,  259,  260,
+  261,   -1,   -1,   91,  305,  306,  307,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  275,   -1,  277,  278,  279,   -1,
+   -1,   -1,   -1,  284,  285,  286,  287,  288,  289,   -1,
+   -1,  292,   -1,   -1,   -1,  123,  297,   -1,  126,   -1,
+  301,   -1,  303,  304,   -1,   33,   -1,   -1,   36,   37,
+   38,   -1,   40,   41,   42,   43,   -1,   45,   -1,   -1,
+  276,   -1,   -1,   -1,  280,  281,  282,  283,   -1,   -1,
+   -1,   -1,   -1,   -1,  290,  291,   64,  293,  294,  295,
+  296,   -1,  298,  299,   -1,   -1,  302,   -1,   -1,   -1,
+  257,  258,  259,  260,  261,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,  275,   -1,
+  277,  278,  279,   -1,   -1,   -1,   -1,  284,  285,  286,
+  287,  288,  289,   -1,   -1,  292,   -1,   -1,   41,   -1,
+  297,   44,   -1,   -1,  301,  123,  303,  304,  126,   -1,
+   -1,   -1,   -1,   -1,   33,   58,   59,   36,   37,   38,
+   -1,   40,   41,   42,   43,   -1,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,
+  258,  259,  260,  261,   -1,   64,   -1,   -1,   91,   -1,
+   93,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,
+  278,  279,   -1,   -1,   -1,   -1,  284,  285,  286,  287,
+  288,  289,   91,   -1,  292,   -1,   -1,   -1,   -1,  297,
+  123,   -1,   -1,  301,   -1,  303,  304,   33,   -1,   -1,
    36,   37,   38,   -1,   40,   41,   42,   43,   -1,   45,
-   -1,   -1,   -1,  304,  305,  306,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  123,   -1,   -1,  126,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   64,   -1,
-  257,  258,  259,  260,  261,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  274,   -1,  276,
-  277,  278,   -1,   -1,   -1,   91,  283,  284,  285,  286,
-  287,  288,   -1,   -1,  291,   -1,   -1,   -1,   -1,  296,
-   -1,   -1,   -1,  300,   -1,  302,  303,  257,  258,  259,
-  260,  261,   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,
-  126,   -1,   -1,   -1,  274,   -1,  276,  277,  278,   -1,
-   -1,   -1,   -1,  283,  284,  285,  286,  287,  288,   -1,
-   -1,  291,   -1,   -1,   -1,   -1,  296,   -1,   -1,   -1,
-  300,   33,  302,  303,   36,   37,   38,   -1,   40,   41,
-   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   64,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,   -1,
-   -1,   36,   37,   38,   -1,   40,   41,   42,   43,   91,
-   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   64,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  123,   -1,   -1,  126,   -1,   -1,   -1,   -1,   -1,
-   -1,  257,  258,  259,  260,  261,   91,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,  274,   44,
-  276,  277,  278,   -1,   -1,   -1,   -1,  283,  284,  285,
-  286,  287,  288,   58,   59,  291,   61,   -1,  123,   -1,
-  296,  126,   -1,   -1,  300,   33,  302,  303,   36,   37,
-   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
-   -1,   59,   -1,   -1,   -1,   -1,   64,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   33,   -1,   -1,   36,   37,   38,  123,   40,
-   41,   42,   43,   91,   45,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   64,   -1,  257,  258,  259,  260,  261,
-   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,  126,   -1,
-   -1,   -1,  274,   -1,  276,  277,  278,   -1,   -1,   -1,
-   91,  283,  284,  285,  286,  287,  288,   -1,   -1,  291,
-   -1,   -1,   -1,   -1,  296,   -1,   -1,   -1,  300,   -1,
-  302,  303,  257,  258,  259,  260,  261,   -1,   -1,   -1,
-   -1,   -1,  123,   -1,   -1,  126,   -1,   -1,   -1,  274,
-   -1,  276,  277,  278,   -1,   -1,   -1,   -1,  283,  284,
-  285,  286,  287,  288,   -1,   -1,  291,   -1,   -1,   -1,
-   -1,  296,   -1,   -1,   -1,  300,   33,  302,  303,   36,
-   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  266,  267,  268,  269,   -1,   -1,   64,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,
+  258,  259,  260,  261,   -1,   91,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,
+  278,  279,   -1,   -1,   -1,   -1,  284,  285,  286,  287,
+  288,  289,   -1,   -1,  292,   -1,   -1,  123,   -1,  297,
+  126,   -1,   -1,  301,   -1,  303,  304,   33,   -1,   -1,
+   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  289,  290,   -1,   -1,   -1,  257,
-  258,  259,  260,  261,   91,   -1,   93,   -1,   -1,  304,
-  305,  306,   -1,   -1,   -1,   -1,  274,   -1,  276,  277,
-  278,   -1,   -1,   -1,   -1,  283,  284,  285,  286,  287,
-  288,   -1,   -1,  291,   -1,   -1,  123,   -1,  296,  126,
-   -1,   -1,  300,   -1,  302,  303,  257,  258,  259,  260,
-  261,   -1,   33,   -1,   -1,   36,   37,   38,   -1,   40,
-   -1,   42,   43,  274,   45,  276,  277,  278,   -1,   -1,
-   -1,   -1,  283,  284,  285,  286,  287,  288,   -1,   -1,
-  291,   -1,   -1,   64,   -1,  296,   -1,   -1,   -1,  300,
-   -1,  302,  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   33,   -1,   -1,   36,   37,   38,   -1,   40,
-   91,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   59,   -1,   -1,   -1,   -1,   64,   -1,
+   -1,   -1,   -1,   -1,  267,  268,  269,  270,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,
+  259,  260,  261,   -1,   -1,   91,   -1,  290,  291,   -1,
+   -1,   -1,   -1,   -1,   41,   -1,  275,   44,  277,  278,
+  279,   -1,  305,  306,  307,  284,  285,  286,  287,  288,
+  289,   58,   59,  292,   61,   -1,   63,  123,  297,   -1,
+  126,   -1,  301,   -1,  303,  304,   33,   -1,   -1,   36,
+   37,   38,   -1,   40,   41,   42,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,   -1,   -1,
+   -1,  257,  258,  259,  260,  261,   -1,   64,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,
+   -1,  277,  278,  279,   -1,   -1,  123,   -1,  284,  285,
+  286,  287,  288,  289,   91,   -1,  292,   -1,   -1,   -1,
+   -1,  297,   -1,   -1,   -1,  301,   -1,  303,  304,   33,
+   -1,   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,  123,   -1,   -1,  126,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   64,   -1,   -1,   41,   -1,   -1,   44,
-   -1,   -1,  123,   -1,   -1,  126,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,
-   91,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  257,  258,  259,  260,  261,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   91,  274,   93,  276,
-  277,  278,  123,   -1,   -1,  126,  283,  284,  285,  286,
-  287,  288,   41,   -1,  291,   44,   -1,   -1,   -1,  296,
-   -1,   -1,   -1,  300,   -1,  302,  303,   -1,  123,   58,
-   59,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,
+   64,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  257,  258,  259,  260,  261,   -1,   91,   -1,   93,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,
+   -1,  277,  278,  279,   -1,   -1,   -1,   -1,  284,  285,
+  286,  287,  288,  289,   -1,   -1,  292,   -1,   -1,  123,
+   -1,  297,  126,   -1,   -1,  301,   -1,  303,  304,   33,
+   -1,   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  267,  268,  269,  270,   -1,   -1,   -1,   -1,   -1,  276,
+   64,   -1,   -1,  280,  281,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  290,  291,   -1,  293,  294,  295,  296,
+  257,  258,  259,  260,  261,   -1,   -1,   91,  305,  306,
+  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,  278,  279,   -1,   -1,   -1,   -1,  284,  285,  286,
+  287,  288,  289,   -1,   -1,  292,   -1,   -1,   -1,  123,
+  297,   -1,  126,   -1,  301,   -1,  303,  304,   33,   -1,
+   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,   64,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,
-   -1,   44,   -1,   -1,   -1,   -1,  257,  258,  259,  260,
-  261,   -1,   -1,   -1,  123,   58,   59,   -1,   61,   -1,
-   63,   -1,   -1,  274,   -1,  276,  277,  278,   -1,   -1,
-   -1,   -1,  283,  284,  285,  286,  287,  288,   -1,   -1,
-  291,   -1,   -1,   -1,   -1,  296,   41,   -1,   91,  300,
-   93,  302,  303,   -1,   -1,   -1,  257,  258,  259,  260,
-  261,   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,
-   -1,   -1,   -1,  274,   -1,  276,  277,  278,   -1,   -1,
-  123,   -1,  283,  284,  285,  286,  287,  288,   -1,   -1,
-  291,  266,  267,  268,  269,  296,   91,   -1,   93,  300,
-  275,  302,  303,   -1,  279,  280,  281,  282,   -1,   -1,
-   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,
-  295,   -1,  297,  298,   41,   -1,  301,   44,  123,  304,
-  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   58,   59,   -1,   61,   -1,   63,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  266,  267,  268,
-  269,   -1,   -1,   -1,   -1,   -1,  275,   -1,   -1,   -1,
-  279,  280,  281,  282,   -1,   -1,   93,   -1,   -1,   -1,
-  289,  290,   -1,  292,  293,  294,  295,   -1,  297,  298,
-   -1,   -1,  301,   -1,   -1,  304,  305,  306,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,   -1,
+   -1,  275,   -1,  277,  278,  279,   -1,   -1,   -1,   -1,
+  284,  285,  286,  287,  288,  289,   91,   41,  292,   -1,
+   44,   -1,   -1,  297,   -1,   -1,   -1,  301,   -1,  303,
+  304,   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,
+   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,   58,
+   59,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,  123,
+   -1,  275,   -1,  277,  278,  279,   -1,   -1,   -1,   -1,
+  284,  285,  286,  287,  288,  289,   41,   -1,  292,   44,
+   -1,   -1,   91,  297,   93,   -1,   -1,  301,   -1,  303,
+  304,   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  266,  267,  268,  269,   -1,   -1,   -1,
-   -1,   -1,  275,   -1,   -1,   -1,  279,  280,  281,  282,
-   -1,   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,  292,
-  293,  294,  295,   -1,  297,  298,   -1,   -1,  301,   -1,
-   -1,  304,  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  266,  267,  268,  269,   -1,   -1,   -1,   -1,   -1,
-  275,   -1,   -1,   -1,  279,  280,  281,  282,   -1,   -1,
-   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,
-  295,   41,  297,  298,   44,   -1,  301,   -1,   -1,  304,
-  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,
+   -1,   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
+   -1,   41,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  257,  258,  259,  260,  261,   -1,   58,   59,
+   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,  123,   -1,
+  275,   -1,  277,  278,  279,   -1,   -1,   -1,   -1,  284,
+  285,  286,  287,  288,  289,   -1,   -1,  292,   -1,   -1,
+   -1,   91,  297,   93,   -1,   -1,  301,   -1,  303,  304,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,
+   44,   -1,   -1,  267,  268,  269,  270,   -1,   -1,   -1,
+   -1,   -1,  276,  123,   58,   59,  280,  281,  282,  283,
+   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,
+  294,  295,  296,   -1,  298,  299,   -1,   -1,  302,   -1,
+   -1,  305,  306,  307,   -1,   -1,   -1,   91,   -1,   93,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  267,  268,
+  269,  270,   -1,   -1,   -1,   -1,   -1,  276,   -1,   -1,
+   -1,  280,  281,  282,  283,   -1,   -1,   -1,   -1,  123,
+   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,  298,
+  299,   -1,   41,  302,   -1,   44,  305,  306,  307,   -1,
+   -1,   -1,  267,  268,  269,  270,   -1,   -1,   -1,   58,
+   59,  276,   61,   -1,   63,  280,  281,  282,  283,   -1,
+   -1,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,  294,
+  295,  296,   -1,  298,  299,   -1,   -1,  302,   -1,   -1,
+  305,  306,  307,   -1,   93,   -1,   -1,   41,   -1,   -1,
+   44,   -1,   -1,   -1,   -1,   -1,   -1,  267,  268,  269,
+  270,   -1,   -1,   -1,   58,   59,  276,   61,   -1,   63,
+  280,  281,  282,  283,  123,   -1,   -1,   -1,   -1,   -1,
+  290,  291,   -1,  293,  294,  295,  296,   -1,  298,  299,
+   41,   -1,  302,   44,   -1,  305,  306,  307,   -1,   93,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,
+   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  267,  268,  269,  270,   -1,   -1,  123,
+   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,
+   91,   -1,   93,   -1,   -1,   -1,  290,  291,   58,   59,
    -1,   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  305,  306,  307,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  123,   41,   -1,   -1,   44,   -1,   -1,   -1,
+   -1,   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  266,
-  267,  268,  269,   93,   -1,   -1,   -1,   -1,  275,   -1,
-   -1,   -1,  279,  280,  281,  282,   -1,   -1,   -1,   -1,
-   -1,   -1,  289,  290,   -1,  292,  293,  294,  295,   41,
-  297,  298,   44,  123,  301,   -1,   -1,  304,  305,  306,
+   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,  267,  268,
+  269,  270,   -1,   -1,   -1,   93,   -1,  276,   -1,   -1,
+   -1,  280,  281,  282,  283,   -1,   -1,   -1,   -1,   -1,
+   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,  298,
+  299,   -1,   -1,  302,   -1,   -1,  305,  306,  307,   -1,
+   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,
+   -1,   -1,   -1,  267,  268,  269,  270,   -1,   -1,   -1,
+   58,   59,  276,   61,   -1,   63,  280,  281,  282,  283,
+   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,
+  294,  295,  296,   -1,  298,  299,   -1,   -1,  302,   -1,
+   -1,  305,  306,  307,   -1,   93,  267,  268,  269,  270,
+   -1,   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,  280,
+  281,  282,  283,   -1,   -1,   -1,   -1,   -1,   -1,  290,
+  291,   -1,  293,  294,  295,  296,   -1,  298,  299,   -1,
+   -1,   -1,   -1,   -1,  305,  306,  307,  267,  268,  269,
+  270,   -1,   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,
+  280,  281,  282,  283,   -1,   -1,   -1,   -1,   -1,   -1,
+  290,  291,   -1,  293,  294,  295,  296,   -1,  298,  299,
+   -1,   -1,   -1,   -1,   -1,  305,  306,  307,   -1,  267,
+  268,  269,  270,   -1,   -1,   -1,   -1,   -1,  276,   -1,
+   -1,   -1,  280,  281,  282,  283,   -1,   -1,   -1,   -1,
+   -1,   -1,  290,  291,   -1,  293,  294,  295,  296,   41,
+  298,  299,   44,   -1,  302,   -1,   -1,  305,  306,  307,
    -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   61,
    -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,   91,
-   -1,   93,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,
-   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  123,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
-   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,
+   -1,   93,   44,   -1,   -1,   -1,   -1,   -1,   -1,  267,
+  268,  269,  270,   -1,   -1,   -1,   58,   59,  276,   61,
+   -1,   63,  280,  281,  282,  283,   -1,   -1,   -1,   -1,
+   -1,   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,
+  298,  299,   41,   -1,  302,   44,   -1,  305,  306,  307,
+   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
    59,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   93,   -1,   41,   -1,   -1,   44,
-   -1,   -1,   -1,   -1,   -1,   -1,  266,  267,  268,  269,
-   -1,   -1,   -1,   58,   59,  275,   61,   -1,   63,  279,
-  280,  281,  282,   -1,   -1,   -1,   -1,   -1,   -1,  289,
-  290,   -1,  292,  293,  294,  295,   -1,  297,  298,   41,
-   -1,  301,   44,   -1,  304,  305,  306,   -1,   93,   -1,
+   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,
+   -1,   -1,   44,   91,   -1,   93,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   61,
    -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  267,  268,  269,  270,   91,
+   -1,   93,   -1,   -1,  276,   -1,   -1,   -1,  280,  281,
+  282,  283,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,
+   -1,  293,  294,  295,  296,   -1,  298,  299,   -1,   -1,
+  302,  123,   -1,  305,  306,  307,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  267,  268,  269,  270,   -1,
+   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,  280,  281,
+  282,  283,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,
+   -1,  293,  294,  295,  296,   -1,  298,  299,   -1,   -1,
+  302,   -1,   -1,  305,  306,  307,   -1,   -1,  267,  268,
+  269,  270,   -1,   -1,   -1,   -1,   -1,  276,   -1,   -1,
+   -1,  280,  281,  282,  283,   -1,   -1,   -1,   -1,   -1,
+   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,  298,
+  299,   -1,   -1,  302,   -1,   -1,  305,  306,  307,  267,
+  268,  269,  270,   -1,   -1,   -1,   -1,   -1,  276,   -1,
+   -1,   -1,  280,  281,  282,  283,   -1,   -1,   -1,   -1,
+   -1,   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,
+  298,   -1,   -1,   -1,   -1,   -1,   -1,  305,  306,  307,
+   -1,   -1,   -1,   -1,   -1,  267,  268,  269,  270,   -1,
+   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,  280,  281,
+   41,  283,   -1,   44,   -1,   -1,   -1,   -1,  290,  291,
+   -1,  293,  294,  295,  296,   -1,  298,   58,   59,   -1,
+   61,   -1,   63,  305,  306,  307,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  266,  267,  268,  269,   -1,   -1,
-   -1,   93,   -1,  275,   -1,   -1,   -1,  279,  280,  281,
-  282,   -1,   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,
-  292,  293,  294,  295,   -1,  297,  298,   -1,   -1,   -1,
-   -1,   -1,  304,  305,  306,  266,  267,  268,  269,   -1,
-   -1,   -1,   -1,   -1,  275,   -1,   -1,   -1,  279,  280,
-  281,  282,   -1,   -1,   -1,   -1,   -1,   -1,  289,  290,
-   -1,  292,  293,  294,  295,   -1,  297,  298,   -1,   -1,
-   -1,   -1,   -1,  304,  305,  306,   -1,  266,  267,  268,
-  269,   -1,   -1,   -1,   -1,   -1,  275,   -1,   -1,   -1,
-  279,  280,  281,  282,   -1,   -1,   -1,   -1,   -1,   -1,
-  289,  290,   -1,  292,  293,  294,  295,   -1,  297,  298,
-   -1,   -1,  301,   -1,   -1,  304,  305,  306,   -1,   -1,
    -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,
-   -1,  266,  267,  268,  269,   -1,   -1,   -1,   58,   59,
-  275,   61,   -1,   63,  279,  280,  281,  282,   -1,   -1,
-   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,
-  295,   -1,  297,  298,   -1,   -1,  301,   -1,   -1,  304,
-  305,  306,   -1,   93,  266,  267,  268,  269,   -1,   -1,
-   -1,   -1,   -1,  275,   -1,   -1,   -1,  279,  280,  281,
-  282,   -1,   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,
-  292,  293,  294,  295,   41,  297,  298,   44,   -1,  301,
-   -1,   -1,  304,  305,  306,   -1,   -1,   -1,   -1,   -1,
+   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,   58,   59,
+   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  123,   41,   -1,   -1,   44,   -1,   -1,   -1,
+   -1,   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,
+   58,   59,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  123,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   -1,   -1,   91,   -1,   93,   -1,   -1,   -1,   -1,
    -1,   58,   59,   -1,   61,   -1,   63,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,
+   -1,   -1,   -1,   -1,   -1,  123,   41,   -1,   -1,   44,
    -1,   -1,   -1,   -1,   91,   -1,   93,   -1,   -1,   -1,
-   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,   -1,
+   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,   41,
-   -1,   -1,   44,   -1,   -1,   91,   -1,   93,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   61,
-   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,
-   41,   93,   -1,   44,   -1,   -1,  266,  267,  268,  269,
-   -1,   -1,   -1,   -1,   -1,  275,   -1,   58,   59,  279,
-  280,  281,  282,   -1,   -1,   -1,   -1,   -1,   -1,  289,
-  290,  123,  292,  293,  294,  295,   -1,  297,  298,   -1,
-   -1,  301,   -1,   -1,  304,  305,  306,   -1,   -1,   -1,
-   91,   -1,   93,   -1,   -1,   -1,   41,   -1,   -1,   44,
+   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  267,  268,  269,  270,
+   -1,   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,  280,
+  281,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,  290,
+  291,   -1,  293,  294,  295,  296,   -1,  298,   -1,   -1,
+   -1,   -1,   -1,   -1,  305,  306,  307,  267,  268,  269,
+  270,   -1,   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,
+  280,  281,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  290,  291,   -1,  293,  294,  295,  296,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  305,  306,  307,   -1,  267,
+  268,  269,  270,   -1,   -1,   -1,   -1,   -1,  276,   -1,
+   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  305,  306,  307,
+  267,  268,  269,  270,   41,   -1,   -1,   44,   -1,  276,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   58,   59,  290,  291,   -1,  293,  294,  295,  296,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  305,  306,
+  307,   -1,  267,  268,  269,  270,   -1,   -1,   -1,   -1,
+   -1,  276,   -1,   -1,   91,   41,   93,   -1,   44,   -1,
+   -1,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,  294,
+  295,  296,   58,   59,   -1,   61,   -1,   63,   -1,   -1,
+  305,  306,  307,   -1,   -1,   -1,  123,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,
+   -1,   -1,   -1,   -1,   -1,   91,   41,   93,   -1,   44,
    -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,
-   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,  266,
-  267,  268,  269,   -1,   -1,   -1,   -1,   -1,  275,   -1,
-   -1,   -1,  279,  280,  281,  282,   91,   -1,   93,   -1,
-   -1,   -1,  289,  290,   -1,  292,  293,  294,  295,   -1,
-  297,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,
-  266,  267,  268,  269,   -1,   -1,   -1,   -1,  123,  275,
-   -1,   -1,   -1,  279,  280,   -1,  282,   -1,   -1,   -1,
-   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,  295,
-   -1,  297,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,
-  306,   -1,   -1,   -1,  266,  267,  268,  269,   -1,   -1,
-   -1,   -1,   -1,  275,   -1,   -1,   -1,  279,  280,   41,
-   -1,   -1,   44,   -1,   -1,   -1,   -1,  289,  290,   -1,
-  292,  293,  294,  295,   -1,  297,   58,   59,   -1,   61,
-   -1,   63,  304,  305,  306,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  266,  267,  268,  269,   -1,
-   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,   91,
-   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,  289,  290,
-   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,   -1,
-   -1,   -1,   -1,  304,  305,  306,   -1,   -1,   -1,   -1,
-   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  266,  267,  268,  269,   91,   -1,   93,   -1,   -1,
-  275,   -1,   -1,   -1,  279,  280,   41,   -1,   -1,   44,
-   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,
-  295,   -1,   -1,   58,   59,   -1,   61,  123,   63,  304,
-  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,
-   44,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
-   -1,   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   91,   41,   93,   -1,
+   44,   -1,   -1,   -1,   41,   -1,   91,   44,   93,   41,
+   -1,   -1,   44,   -1,   58,   59,   -1,   61,   -1,   63,
+   -1,   58,   59,   -1,   61,   -1,   58,   59,  123,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,
-   -1,   -1,   41,   -1,   -1,   44,   -1,   91,   -1,   93,
-   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,   58,
-   59,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   58,   59,  266,  267,  268,  269,   -1,  123,
-   -1,   -1,   -1,  275,   -1,   -1,   -1,  279,  280,   -1,
-   -1,   -1,   91,   -1,   93,   -1,   -1,  289,  290,   -1,
-  292,  293,  294,  295,   -1,   91,   -1,   93,   -1,   -1,
-   -1,   -1,  304,  305,  306,   -1,   -1,   -1,   -1,   -1,
-  266,  267,  268,  269,  123,   -1,   -1,   -1,   -1,  275,
-   -1,   -1,   -1,  279,  280,   41,   -1,  123,   44,   -1,
-   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,  295,
-   -1,   -1,   58,   59,   -1,   61,   -1,   63,  304,  305,
-  306,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,
-   -1,  266,  267,  268,  269,   91,   -1,   93,   -1,   -1,
-  275,   -1,   -1,   58,   59,  280,   61,   -1,   63,   -1,
-   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,
-  295,   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,  304,
-  305,  306,  266,  267,  268,  269,   91,   -1,   93,   -1,
-   -1,  275,   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,
-   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,
-  294,  295,   58,   59,   -1,   61,   -1,   63,  123,   -1,
-  304,  305,  306,   -1,   -1,   -1,   -1,  266,  267,  268,
-  269,   -1,   -1,   -1,   -1,   -1,  275,   -1,   -1,   -1,
-  266,  267,  268,  269,   -1,   91,   -1,   93,   -1,   -1,
-  289,  290,   -1,  292,  293,  294,  295,   41,   -1,   -1,
-   44,   -1,   -1,  289,  290,  304,  305,  306,   -1,   -1,
-   -1,   -1,   -1,   -1,   58,   59,   -1,  123,  304,  305,
-  306,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   58,   59,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  266,  267,  268,  269,   41,   -1,   -1,   44,   -1,  275,
-   -1,   -1,   -1,   91,   -1,   93,   -1,   -1,   -1,  123,
-   -1,   58,   59,  289,  290,   -1,  292,  293,  294,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,
-  306,  266,  267,  268,  269,  123,   -1,   -1,   -1,   -1,
-  275,   -1,   -1,   -1,   91,   41,   93,   -1,   44,   -1,
-   41,   -1,   -1,   44,  289,  290,   41,  292,  293,   44,
-   -1,   -1,   58,   59,   -1,   -1,   -1,   58,   59,  304,
-  305,  306,   -1,   58,   59,   -1,  123,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,
+   -1,   -1,   -1,   -1,   91,   41,   93,   -1,   44,   91,
+   41,   93,   -1,   44,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   58,   59,   -1,   -1,   -1,   58,   59,  123,
+  267,  268,  269,  270,   -1,   -1,  123,   -1,   -1,   -1,
+   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  290,  291,   91,   -1,   93,   -1,   -1,
+   91,   41,   93,   -1,   44,   -1,   -1,   -1,  305,  306,
+  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,
+   -1,  267,  268,  269,  270,   -1,   -1,  123,   -1,   -1,
+  276,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  290,  291,   -1,  293,  294,  295,
+   -1,   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,  305,
+  306,  307,  267,  268,  269,  270,   -1,   -1,   -1,   -1,
+   -1,  276,  267,  268,  269,  270,   -1,   -1,   -1,   -1,
+   -1,  276,   -1,  123,   -1,  290,  291,   41,  293,  294,
+   44,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,   -1,
+  305,  306,  307,   -1,   58,   59,   -1,   61,   -1,   63,
+  305,  306,  307,  267,  268,  269,  270,   -1,   -1,   -1,
+  267,  268,  269,  270,   -1,  267,  268,  269,  270,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,   41,   93,
+   -1,   44,   -1,  290,  291,   -1,   -1,   -1,  290,  291,
+   -1,  305,  306,  307,   -1,   58,   59,   -1,  305,  306,
+  307,   -1,   -1,  305,  306,  307,   -1,   41,   -1,   -1,
+   44,  267,  268,  269,  270,   -1,  267,  268,  269,  270,
+   -1,   -1,   -1,   -1,   58,   59,   41,   -1,   91,   44,
+   93,   -1,   -1,   -1,  290,  291,   -1,   -1,   -1,  290,
+  291,   -1,   -1,   58,   59,   -1,   -1,   -1,   -1,  305,
+  306,  307,   -1,   -1,  305,  306,  307,   91,   -1,   93,
+  123,   -1,   -1,   -1,   -1,   -1,   -1,  267,  268,  269,
+  270,   -1,   -1,   -1,   -1,   -1,   91,   41,   93,   -1,
+   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,
+  290,  291,   -1,   -1,   58,   59,   41,   -1,   -1,   44,
+   -1,   -1,   -1,   -1,   -1,  305,  306,  307,  123,   -1,
+   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  266,  267,  268,  269,   -1,   91,   -1,   93,   -1,  275,
-   91,   -1,   93,   -1,   -1,   -1,   91,   41,   93,   -1,
-   44,   -1,   -1,  289,  290,   -1,  292,   41,   -1,   -1,
-   44,   -1,   -1,   -1,   58,   59,   -1,  123,  304,  305,
-  306,   -1,  123,   -1,   58,   59,   -1,   -1,  123,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,
-   -1,   44,  266,  267,  268,  269,   -1,   91,   -1,   93,
-   -1,   -1,   -1,   -1,   -1,   58,   59,   91,   -1,   93,
-   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,  266,  267,
-  268,  269,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,
-  304,  305,  306,   -1,   -1,   -1,   -1,   -1,   91,  123,
-   93,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   41,   -1,   -1,   44,   -1,   -1,  304,  305,  306,  266,
-  267,  268,  269,   -1,   -1,   -1,   -1,   58,   59,   -1,
-  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,
-   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  266,  267,  268,  269,   -1,  266,  267,  268,  269,   -1,
-   -1,  266,  267,  268,  269,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  123,  289,  290,   -1,   -1,   -1,  289,  290,
-   -1,   -1,   -1,   -1,  289,  290,   -1,   -1,  304,  305,
-  306,   -1,   -1,  304,  305,  306,   -1,   -1,   -1,  304,
-  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  266,  267,  268,  269,   -1,   -1,   -1,   -1,
-   -1,   -1,  266,  267,  268,  269,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,   -1,   -1,
-  304,  305,  306,  266,  267,  268,  269,   -1,   -1,   -1,
-  304,  305,  306,   -1,   -1,   -1,   -1,   41,   -1,   -1,
-   44,   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,   -1,
-   -1,   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,
-   -1,  304,  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,
-   44,   -1,   -1,   -1,   -1,  266,  267,  268,  269,   93,
-   -1,   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  289,   -1,
-   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,
-   -1,   -1,   -1,  304,  305,  306,   -1,   -1,   -1,   93,
+   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   93,   -1,
+   -1,   -1,   -1,  267,  268,  269,  270,   -1,   -1,  123,
+   58,   59,  276,   61,   -1,   63,  280,  281,  282,  283,
+   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,
+  294,  295,  296,   -1,  298,  299,   -1,   -1,  302,   -1,
+   -1,  305,  306,   41,   -1,   93,   44,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  267,  268,  269,  270,   -1,   -1,
    58,   59,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,
-   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   93,   58,   59,   -1,   61,
-   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,   41,
+   -1,   -1,   44,  267,  268,  269,  270,   -1,   -1,   -1,
+   -1,   -1,  305,  306,  307,   93,   58,   59,   -1,   61,
+   -1,   63,  267,  268,  269,  270,  290,  291,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  305,  306,  307,   -1,  290,  291,   -1,   -1,   -1,
    -1,   93,   58,   59,   -1,   61,   -1,   63,   -1,   -1,
+  305,  306,  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  267,  268,  269,  270,   -1,   -1,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   93,   -1,   -1,
+   -1,   -1,  267,  268,  269,  270,  290,  291,   -1,   58,
+   59,  276,   61,   -1,   63,  280,  281,  282,  283,   -1,
+   -1,  305,  306,  307,   -1,  290,  291,   -1,  293,  294,
+  295,  296,   -1,  298,  299,   -1,   -1,  302,   -1,   41,
+   -1,   -1,   44,   -1,   93,   -1,   -1,   -1,   -1,  267,
+  268,  269,  270,   -1,   -1,   -1,   58,   59,  276,   61,
+   -1,   63,  280,  281,  282,  283,   -1,   -1,   -1,   -1,
+   -1,   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,
+  298,  299,   -1,   -1,  302,   -1,   -1,   41,   -1,   -1,
+   44,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  267,
+  268,  269,  270,   -1,   58,   59,   -1,   61,  276,   63,
+   -1,   -1,  280,  281,  282,  283,   -1,   -1,   -1,   -1,
+   -1,   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,
+  298,  299,   -1,   -1,  302,  267,  268,  269,  270,   93,
+   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,  280,  281,
+  282,  283,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,
+   -1,  293,  294,  295,  296,   -1,  298,  299,   -1,   -1,
+  302,  267,  268,  269,  270,   -1,   -1,   -1,   -1,   -1,
+  276,   -1,   -1,   -1,  280,  281,  282,  283,   -1,   -1,
+   -1,   -1,   -1,   -1,  290,  291,   -1,  293,  294,  295,
+  296,   -1,  298,  299,   -1,   -1,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  267,  268,
+  269,  270,   -1,   -1,   -1,   -1,   -1,  276,   -1,   -1,
+   -1,  280,  281,  282,  283,   -1,   -1,   -1,   -1,   -1,
+   -1,  290,  291,   -1,  293,  294,  295,  296,   -1,  298,
+  299,   35,   -1,  302,   -1,   -1,   40,   41,   -1,   -1,
+   -1,   -1,   46,   -1,   -1,  267,  268,  269,  270,   -1,
+   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,  280,  281,
+  282,  283,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,
+   -1,  293,  294,  295,  296,   -1,  298,  299,   -1,   -1,
+  302,   -1,   -1,   87,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  267,  268,  269,  270,   -1,   -1,   -1,
+   -1,   -1,  276,   -1,   -1,   -1,  280,  281,  282,  283,
+   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,   -1,  293,
+  294,  295,  296,   -1,  298,  299,   -1,   -1,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  140,  141,  142,  143,
+  144,  145,  146,  147,  148,  149,  150,  151,  152,  153,
+  154,  155,  156,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   58,   59,
-   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  266,  267,  268,  269,   -1,   -1,   -1,   -1,
-   -1,  275,   -1,   93,   -1,  279,  280,  281,  282,   -1,
-   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,
-  294,  295,   41,  297,  298,   44,   -1,  301,   -1,   -1,
-  304,  305,  266,  267,  268,  269,   -1,   -1,   -1,   58,
-   59,  275,   61,   -1,   63,  279,  280,  281,  282,   -1,
-   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,
-  294,  295,   -1,  297,  298,   -1,   -1,  301,  266,  267,
-  268,  269,   -1,   -1,   93,   -1,   -1,  275,   -1,   -1,
-   -1,  279,  280,  281,  282,   -1,   -1,   -1,   -1,   -1,
-   -1,  289,  290,   -1,  292,  293,  294,  295,   -1,  297,
-  298,   -1,   -1,  301,  266,  267,  268,  269,   -1,   -1,
-   -1,   -1,   -1,  275,   -1,   -1,   -1,  279,  280,  281,
-  282,   -1,   -1,   -1,   -1,   -1,   -1,  289,  290,   -1,
-  292,  293,  294,  295,   -1,  297,  298,   -1,   -1,  301,
-  266,  267,  268,  269,   -1,   -1,   -1,   -1,   -1,  275,
-   -1,   -1,   -1,  279,  280,  281,  282,   -1,   -1,   -1,
-   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,  295,
-   -1,  297,  298,   -1,   -1,  301,  266,  267,  268,  269,
-   -1,   -1,   32,   -1,   -1,  275,   -1,   37,   38,  279,
-  280,  281,  282,   43,   -1,   -1,   -1,   -1,   -1,  289,
-  290,   -1,  292,  293,  294,  295,   41,  297,  298,   44,
-   -1,  301,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   63,   -1,
-   -1,   -1,   82,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  266,  267,  268,
-  269,   -1,   -1,   -1,   -1,   -1,  275,   -1,   93,   -1,
-  279,  280,  281,  282,   -1,   -1,   -1,   -1,   -1,   -1,
-  289,  290,   -1,  292,  293,  294,  295,   -1,  297,  298,
-   -1,   -1,  301,   -1,   -1,  135,  136,  137,  138,  139,
-  140,  141,  142,  143,  144,  145,  146,  147,  148,  149,
-  150,  151,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  196,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  204,   -1,  206,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  218,   -1,  220,   -1,   -1,   -1,
+   -1,   -1,  226,   -1,  228,   -1,  230,   -1,  232,   -1,
+  234,   -1,   -1,  237,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  190,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  198,   -1,
-  200,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  212,   -1,  214,   -1,   -1,   -1,   -1,   -1,
-  220,   -1,  222,   -1,  224,   -1,  226,   -1,  228,   -1,
-   -1,  231,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  248,   -1,
+  254,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-  280,  266,  267,  268,  269,   -1,   -1,   -1,   -1,   -1,
-  275,   -1,   -1,   -1,  279,  280,  281,  282,   -1,   -1,
-   -1,   -1,   -1,   -1,  289,  290,   -1,  292,  293,  294,
-  295,   -1,  297,  298,   -1,   -1,  301,
+   -1,   -1,  286,
 };
 #define YYFINAL 1
 #ifndef YYDEBUG
 #define YYDEBUG 0
 #endif
-#define YYMAXTOKEN 306
+#define YYMAXTOKEN 307
 #if YYDEBUG
 char *yyname[] = {
 "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -1402,8 +1384,8 @@ char *yyname[] = {
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"WORD","METHOD","THING",
-"PMFUNC","PRIVATEREF","LABEL","FORMAT","SUB","PACKAGE","WHILE","UNTIL","IF",
-"UNLESS","ELSE","ELSIF","CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1",
+"PMFUNC","PRIVATEREF","LABEL","FORMAT","SUB","PACKAGE","HINT","WHILE","UNTIL",
+"IF","UNLESS","ELSE","ELSIF","CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1",
 "FUNC","RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO","LOCAL","DELETE",
 "HASHBRACK","NOAMP","OROP","ANDOP","LSTOP","OROR","ANDAND","BITOROP","BITANDOP",
 "UNIOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP","PREINC","PREDEC",
@@ -1454,12 +1436,15 @@ char *yyrule[] = {
 "decl : format",
 "decl : subrout",
 "decl : package",
+"decl : hint",
 "format : FORMAT WORD block",
 "format : FORMAT block",
 "subrout : SUB WORD block",
 "subrout : SUB WORD ';'",
 "package : PACKAGE WORD ';'",
 "package : PACKAGE ';'",
+"hint : HINT WORD ';'",
+"hint : HINT WORD expr ';'",
 "expr : expr ',' sexpr",
 "expr : sexpr",
 "listop : LSTOP indirob listexpr",
@@ -1593,9 +1578,9 @@ int yyerrflag;
 int yychar;
 YYSTYPE yyval;
 YYSTYPE yylval;
-#line 611 "perly.y"
+#line 621 "perly.y"
  /* PROGRAM */
-#line 1604 "y.tab.c"
+#line 1589 "y.tab.c"
 #define YYABORT goto yyabort
 #define YYACCEPT goto yyaccept
 #define YYERROR goto yyerrlab
@@ -1808,13 +1793,13 @@ case 2:
 break;
 case 3:
 #line 122 "perly.y"
-{   int nbs = needblockscope;
+{   int needblockscope = hints & HINT_BLOCK_SCOPE;
                            yyval.opval = scalarseq(yyvsp[-1].opval);
                            if (copline > (line_t)yyvsp[-3].ival)
                                copline = yyvsp[-3].ival;
                            LEAVE_SCOPE(yyvsp[-2].ival);
-                           if (nbs)
-                               needblockscope = TRUE;  /* propagate outward */
+                           if (needblockscope)
+                               hints |= HINT_BLOCK_SCOPE; /* propagate out */
                            pad_leavemy(comppad_name_fill); }
 break;
 case 4:
@@ -1825,8 +1810,8 @@ case 4:
                            SAVEINT(max_intro_pending);
                            min_intro_pending = 0;
                            SAVEINT(comppad_name_fill);
-                           SAVEINT(needblockscope);
-                           needblockscope = FALSE; }
+                           SAVEINT(hints);
+                           hints &= ~HINT_BLOCK_SCOPE; }
 break;
 case 5:
 #line 144 "perly.y"
@@ -1840,7 +1825,7 @@ case 7:
 #line 148 "perly.y"
 {   yyval.opval = append_list(OP_LINESEQ,
                                (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval); pad_reset();
-                           if (yyvsp[-1].opval && yyvsp[0].opval) needblockscope = TRUE; }
+                           if (yyvsp[-1].opval && yyvsp[0].opval) hints |= HINT_BLOCK_SCOPE; }
 break;
 case 8:
 #line 154 "perly.y"
@@ -1897,77 +1882,78 @@ break;
 case 20:
 #line 189 "perly.y"
 { copline = yyvsp[-5].ival;
-                           yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval); }
+                           yyval.opval = newSTATEOP(0, 0,
+                               newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
 case 21:
-#line 194 "perly.y"
+#line 195 "perly.y"
 { copline = yyvsp[-5].ival;
                            yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval); }
 break;
 case 22:
-#line 197 "perly.y"
+#line 198 "perly.y"
 { copline = yyvsp[-5].ival;
                            yyval.opval = newCONDOP(0,
                                invert(scalar(yyvsp[-3].opval)), scope(yyvsp[-1].opval), yyvsp[0].opval); }
 break;
 case 23:
-#line 201 "perly.y"
+#line 202 "perly.y"
 { copline = yyvsp[-3].ival;
                            yyval.opval = newCONDOP(0, scope(yyvsp[-2].opval), scope(yyvsp[-1].opval), yyvsp[0].opval); }
 break;
 case 24:
-#line 204 "perly.y"
+#line 205 "perly.y"
 { copline = yyvsp[-3].ival;
                            yyval.opval = newCONDOP(0, invert(scalar(scope(yyvsp[-2].opval))),
                                                scope(yyvsp[-1].opval), yyvsp[0].opval); }
 break;
 case 25:
-#line 210 "perly.y"
+#line 211 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 26:
-#line 212 "perly.y"
+#line 213 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 27:
-#line 216 "perly.y"
+#line 217 "perly.y"
 { copline = yyvsp[-5].ival;
                            yyval.opval = newSTATEOP(0, yyvsp[-6].pval,
                                    newWHILEOP(0, 1, (LOOP*)Nullop,
                                        yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval) ); }
 break;
 case 28:
-#line 221 "perly.y"
+#line 222 "perly.y"
 { copline = yyvsp[-5].ival;
                            yyval.opval = newSTATEOP(0, yyvsp[-6].pval,
                                    newWHILEOP(0, 1, (LOOP*)Nullop,
                                        invert(scalar(yyvsp[-3].opval)), yyvsp[-1].opval, yyvsp[0].opval) ); }
 break;
 case 29:
-#line 226 "perly.y"
+#line 227 "perly.y"
 { copline = yyvsp[-3].ival;
                            yyval.opval = newSTATEOP(0, yyvsp[-4].pval,
                                    newWHILEOP(0, 1, (LOOP*)Nullop,
                                        scope(yyvsp[-2].opval), yyvsp[-1].opval, yyvsp[0].opval) ); }
 break;
 case 30:
-#line 231 "perly.y"
+#line 232 "perly.y"
 { copline = yyvsp[-3].ival;
                            yyval.opval = newSTATEOP(0, yyvsp[-4].pval,
                                    newWHILEOP(0, 1, (LOOP*)Nullop,
                                        invert(scalar(scope(yyvsp[-2].opval))), yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 31:
-#line 236 "perly.y"
+#line 237 "perly.y"
 { yyval.opval = newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, mod(yyvsp[-5].opval, OP_ENTERLOOP),
                                yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 32:
-#line 239 "perly.y"
+#line 240 "perly.y"
 { yyval.opval = newFOROP(0, yyvsp[-6].pval, yyvsp[-5].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 33:
-#line 242 "perly.y"
+#line 243 "perly.y"
 {  copline = yyvsp[-8].ival;
                            yyval.opval = append_elem(OP_LINESEQ,
                                    newSTATEOP(0, yyvsp[-9].pval, scalar(yyvsp[-6].opval)),
@@ -1976,348 +1962,360 @@ case 33:
                                            scalar(yyvsp[-4].opval), yyvsp[0].opval, scalar(yyvsp[-2].opval)) )); }
 break;
 case 34:
-#line 249 "perly.y"
+#line 250 "perly.y"
 { yyval.opval = newSTATEOP(0,
                                yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop,
                                        Nullop, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 35:
-#line 255 "perly.y"
+#line 256 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 37:
-#line 260 "perly.y"
+#line 261 "perly.y"
 { (void)scan_num("1"); yyval.opval = yylval.opval; }
 break;
 case 39:
-#line 265 "perly.y"
+#line 266 "perly.y"
 { yyval.pval = Nullch; }
 break;
 case 41:
-#line 270 "perly.y"
+#line 271 "perly.y"
 { yyval.ival = 0; }
 break;
 case 42:
-#line 272 "perly.y"
+#line 273 "perly.y"
 { yyval.ival = 0; }
 break;
 case 43:
-#line 274 "perly.y"
+#line 275 "perly.y"
 { yyval.ival = 0; }
 break;
 case 44:
-#line 278 "perly.y"
-{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
+#line 277 "perly.y"
+{ yyval.ival = 0; }
 break;
 case 45:
-#line 280 "perly.y"
-{ newFORM(yyvsp[-1].ival, Nullop, yyvsp[0].opval); }
+#line 281 "perly.y"
+{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 46:
-#line 284 "perly.y"
-{ newSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
+#line 283 "perly.y"
+{ newFORM(yyvsp[-1].ival, Nullop, yyvsp[0].opval); }
 break;
 case 47:
-#line 286 "perly.y"
-{ newSUB(yyvsp[-2].ival, yyvsp[-1].opval, Nullop); expect = XSTATE; }
+#line 287 "perly.y"
+{ newSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 48:
-#line 290 "perly.y"
-{ package(yyvsp[-1].opval); }
+#line 289 "perly.y"
+{ newSUB(yyvsp[-2].ival, yyvsp[-1].opval, Nullop); expect = XSTATE; }
 break;
 case 49:
-#line 292 "perly.y"
-{ package(Nullop); }
+#line 293 "perly.y"
+{ package(yyvsp[-1].opval); }
 break;
 case 50:
-#line 296 "perly.y"
-{ yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 295 "perly.y"
+{ package(Nullop); }
+break;
+case 51:
+#line 299 "perly.y"
+{ hint(yyvsp[-2].ival, yyvsp[-1].opval, Nullop); }
 break;
 case 52:
 #line 301 "perly.y"
+{ hint(yyvsp[-3].ival, yyvsp[-2].opval, list(force_list(yyvsp[-1].opval))); }
+break;
+case 53:
+#line 305 "perly.y"
+{ yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
+break;
+case 55:
+#line 310 "perly.y"
 { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-1].opval), yyvsp[0].opval) ); }
 break;
-case 53:
-#line 304 "perly.y"
+case 56:
+#line 313 "perly.y"
 { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-2].opval), yyvsp[-1].opval) ); }
 break;
-case 54:
-#line 307 "perly.y"
+case 57:
+#line 316 "perly.y"
 { yyval.opval = convert(yyvsp[-1].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-3].opval), yyvsp[0].opval) ); }
 break;
-case 55:
-#line 310 "perly.y"
+case 58:
+#line 319 "perly.y"
 { yyval.opval = convert(yyvsp[-3].ival, OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(yyvsp[-5].opval), yyvsp[-1].opval) ); }
 break;
-case 56:
-#line 313 "perly.y"
+case 59:
+#line 322 "perly.y"
 { yyval.opval = convert(OP_ENTERSUBR, OPf_STACKED|OPf_SPECIAL,
                                prepend_elem(OP_LIST,
                                    newMETHOD(yyvsp[-5].opval,yyvsp[-3].opval), list(yyvsp[-1].opval))); }
 break;
-case 57:
-#line 317 "perly.y"
+case 60:
+#line 326 "perly.y"
 { yyval.opval = convert(OP_ENTERSUBR, OPf_STACKED|OPf_SPECIAL,
                                prepend_elem(OP_LIST,
                                    newMETHOD(yyvsp[-1].opval,yyvsp[-2].opval), list(yyvsp[0].opval))); }
 break;
-case 58:
-#line 321 "perly.y"
+case 61:
+#line 330 "perly.y"
 { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 59:
-#line 323 "perly.y"
+case 62:
+#line 332 "perly.y"
 { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 60:
-#line 327 "perly.y"
+case 63:
+#line 336 "perly.y"
 { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 61:
-#line 329 "perly.y"
+case 64:
+#line 338 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-2].ival, OPf_STACKED,
                                mod(scalar(yyvsp[-3].opval), yyvsp[-2].ival), scalar(yyvsp[0].opval)); }
 break;
-case 62:
-#line 332 "perly.y"
+case 65:
+#line 341 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-2].ival, OPf_STACKED,
                                mod(scalar(yyvsp[-3].opval), yyvsp[-2].ival), scalar(yyvsp[0].opval)); }
 break;
-case 63:
-#line 335 "perly.y"
+case 66:
+#line 344 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-2].ival, OPf_STACKED,
                                mod(scalar(yyvsp[-3].opval), yyvsp[-2].ival), scalar(yyvsp[0].opval));}
 break;
-case 64:
-#line 338 "perly.y"
+case 67:
+#line 347 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-2].ival, OPf_STACKED,
                                mod(scalar(yyvsp[-3].opval), yyvsp[-2].ival), scalar(yyvsp[0].opval)); }
 break;
-case 65:
-#line 341 "perly.y"
+case 68:
+#line 350 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-2].ival, OPf_STACKED,
                                mod(scalar(yyvsp[-3].opval), yyvsp[-2].ival), scalar(yyvsp[0].opval)); }
 break;
-case 66:
-#line 344 "perly.y"
+case 69:
+#line 353 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-2].ival, OPf_STACKED,
                                mod(scalar(yyvsp[-3].opval), yyvsp[-2].ival), scalar(yyvsp[0].opval)); }
 break;
-case 67:
-#line 347 "perly.y"
+case 70:
+#line 356 "perly.y"
 { yyval.opval = newLOGOP(OP_ANDASSIGN, 0,
                                mod(scalar(yyvsp[-3].opval), OP_ANDASSIGN),
                                newUNOP(OP_SASSIGN, 0, scalar(yyvsp[0].opval))); }
 break;
-case 68:
-#line 351 "perly.y"
+case 71:
+#line 360 "perly.y"
 { yyval.opval = newLOGOP(OP_ORASSIGN, 0,
                                mod(scalar(yyvsp[-3].opval), OP_ORASSIGN),
                                newUNOP(OP_SASSIGN, 0, scalar(yyvsp[0].opval))); }
 break;
-case 69:
-#line 357 "perly.y"
+case 72:
+#line 366 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 70:
-#line 359 "perly.y"
+case 73:
+#line 368 "perly.y"
 {   if (yyvsp[-1].ival != OP_REPEAT)
                                scalar(yyvsp[-2].opval);
                            yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); }
 break;
-case 71:
-#line 363 "perly.y"
+case 74:
+#line 372 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 72:
-#line 365 "perly.y"
+case 75:
+#line 374 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 73:
-#line 367 "perly.y"
+case 76:
+#line 376 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 74:
-#line 369 "perly.y"
+case 77:
+#line 378 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 75:
-#line 371 "perly.y"
+case 78:
+#line 380 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 76:
-#line 373 "perly.y"
+case 79:
+#line 382 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 77:
-#line 375 "perly.y"
+case 80:
+#line 384 "perly.y"
 { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
 break;
-case 78:
-#line 377 "perly.y"
+case 81:
+#line 386 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 79:
-#line 379 "perly.y"
+case 82:
+#line 388 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 80:
-#line 381 "perly.y"
+case 83:
+#line 390 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 81:
-#line 383 "perly.y"
+case 84:
+#line 392 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 82:
-#line 385 "perly.y"
+case 85:
+#line 394 "perly.y"
 { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 83:
-#line 387 "perly.y"
+case 86:
+#line 396 "perly.y"
 { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 84:
-#line 389 "perly.y"
+case 87:
+#line 398 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 85:
-#line 393 "perly.y"
+case 88:
+#line 402 "perly.y"
 { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 86:
-#line 395 "perly.y"
+case 89:
+#line 404 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 87:
-#line 397 "perly.y"
+case 90:
+#line 406 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
-case 88:
-#line 399 "perly.y"
+case 91:
+#line 408 "perly.y"
 { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
 break;
-case 89:
-#line 401 "perly.y"
+case 92:
+#line 410 "perly.y"
 { yyval.opval = newUNOP(OP_REFGEN, 0, ref(yyvsp[0].opval,OP_REFGEN)); }
 break;
-case 90:
-#line 403 "perly.y"
+case 93:
+#line 412 "perly.y"
 { yyval.opval = newUNOP(OP_POSTINC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
 break;
-case 91:
-#line 406 "perly.y"
+case 94:
+#line 415 "perly.y"
 { yyval.opval = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
 break;
-case 92:
-#line 409 "perly.y"
+case 95:
+#line 418 "perly.y"
 { yyval.opval = newUNOP(OP_PREINC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREINC)); }
 break;
-case 93:
-#line 412 "perly.y"
+case 96:
+#line 421 "perly.y"
 { yyval.opval = newUNOP(OP_PREDEC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
 break;
-case 94:
-#line 415 "perly.y"
+case 97:
+#line 424 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
-case 95:
-#line 417 "perly.y"
+case 98:
+#line 426 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
-case 96:
-#line 419 "perly.y"
+case 99:
+#line 428 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
-case 97:
-#line 421 "perly.y"
+case 100:
+#line 430 "perly.y"
 { yyval.opval = newANONLIST(yyvsp[-1].opval); }
 break;
-case 98:
-#line 423 "perly.y"
+case 101:
+#line 432 "perly.y"
 { yyval.opval = newANONLIST(Nullop); }
 break;
-case 99:
-#line 425 "perly.y"
+case 102:
+#line 434 "perly.y"
 { yyval.opval = newANONHASH(yyvsp[-1].opval); }
 break;
-case 100:
-#line 427 "perly.y"
+case 103:
+#line 436 "perly.y"
 { yyval.opval = newANONHASH(Nullop); }
 break;
-case 101:
-#line 429 "perly.y"
+case 104:
+#line 438 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 102:
-#line 431 "perly.y"
+case 105:
+#line 440 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 103:
-#line 433 "perly.y"
+case 106:
+#line 442 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
 break;
-case 104:
-#line 435 "perly.y"
+case 107:
+#line 444 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 105:
-#line 439 "perly.y"
+case 108:
+#line 448 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 106:
-#line 443 "perly.y"
+case 109:
+#line 452 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 107:
-#line 445 "perly.y"
+case 110:
+#line 454 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 108:
-#line 447 "perly.y"
+case 111:
+#line 456 "perly.y"
 { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
 break;
-case 109:
-#line 449 "perly.y"
+case 112:
+#line 458 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 110:
-#line 452 "perly.y"
+case 113:
+#line 461 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 111:
-#line 457 "perly.y"
+case 114:
+#line 466 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 112:
-#line 462 "perly.y"
+case 115:
+#line 471 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
 break;
-case 113:
-#line 464 "perly.y"
+case 116:
+#line 473 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
 break;
-case 114:
-#line 466 "perly.y"
+case 117:
+#line 475 "perly.y"
 { yyval.opval = prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                list(
@@ -2325,8 +2323,8 @@ case 114:
                                        list(yyvsp[-1].opval),
                                        ref(yyvsp[-3].opval, OP_ASLICE)))); }
 break;
-case 115:
-#line 473 "perly.y"
+case 118:
+#line 482 "perly.y"
 { yyval.opval = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                list(
@@ -2335,197 +2333,198 @@ case 115:
                                        ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))));
                            expect = XOPERATOR; }
 break;
-case 116:
-#line 481 "perly.y"
+case 119:
+#line 490 "perly.y"
 { yyval.opval = newBINOP(OP_DELETE, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 117:
-#line 484 "perly.y"
+case 120:
+#line 493 "perly.y"
 { yyval.opval = newBINOP(OP_DELETE, 0, oopsHV(yyvsp[-5].opval), jmaybe(yyvsp[-3].opval));
                            expect = XOPERATOR; }
 break;
-case 118:
-#line 487 "perly.y"
+case 121:
+#line 496 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 119:
-#line 489 "perly.y"
+case 122:
+#line 498 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUBR, 0,
                                scalar(yyvsp[0].opval)); }
 break;
-case 120:
-#line 492 "perly.y"
+case 123:
+#line 501 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUBR, OPf_STACKED, scalar(yyvsp[-2].opval)); }
 break;
-case 121:
-#line 494 "perly.y"
+case 124:
+#line 503 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUBR, OPf_STACKED,
                            list(prepend_elem(OP_LIST, scalar(yyvsp[-3].opval), yyvsp[-1].opval))); }
 break;
-case 122:
-#line 497 "perly.y"
+case 125:
+#line 506 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUBR, OPf_STACKED,
                            list(prepend_elem(OP_LIST,
                                newCVREF(scalar(yyvsp[-1].opval)), yyvsp[0].opval))); }
 break;
-case 123:
-#line 501 "perly.y"
+case 126:
+#line 510 "perly.y"
 { yyval.opval = convert(OP_ENTERSUBR, OPf_STACKED|OPf_SPECIAL,
                                prepend_elem(OP_LIST,
                                    newMETHOD(yyvsp[-1].opval,yyvsp[-2].opval), list(yyvsp[0].opval))); }
 break;
-case 124:
-#line 505 "perly.y"
+case 127:
+#line 514 "perly.y"
 { yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 125:
-#line 507 "perly.y"
+case 128:
+#line 516 "perly.y"
 { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
 break;
-case 126:
-#line 509 "perly.y"
+case 129:
+#line 518 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUBR, OPf_SPECIAL|OPf_STACKED,
                            list(prepend_elem(OP_LIST,
                                scalar(newCVREF(scalar(yyvsp[-2].opval))), Nullop))); }
 break;
-case 127:
-#line 513 "perly.y"
+case 130:
+#line 522 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUBR, OPf_SPECIAL|OPf_STACKED,
                            list(prepend_elem(OP_LIST,
                                scalar(newCVREF(scalar(yyvsp[-3].opval))),
                                yyvsp[-1].opval))); }
 break;
-case 128:
-#line 518 "perly.y"
+case 131:
+#line 527 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUBR, OPf_SPECIAL|OPf_STACKED,
                            list(prepend_elem(OP_LIST,
                                scalar(newCVREF(scalar(yyvsp[-2].opval))), Nullop)));}
 break;
-case 129:
-#line 522 "perly.y"
+case 132:
+#line 531 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUBR, OPf_SPECIAL|OPf_STACKED,
                            list(prepend_elem(OP_LIST,
                                scalar(newCVREF(scalar(yyvsp[-3].opval))),
                                yyvsp[-1].opval))); }
 break;
-case 130:
-#line 527 "perly.y"
-{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); needblockscope = TRUE; }
-break;
-case 131:
-#line 529 "perly.y"
-{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
-break;
-case 132:
-#line 531 "perly.y"
-{ yyval.opval = newOP(yyvsp[0].ival, 0); }
-break;
 case 133:
-#line 533 "perly.y"
-{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
+#line 536 "perly.y"
+{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
+                           hints |= HINT_BLOCK_SCOPE; }
 break;
 case 134:
-#line 535 "perly.y"
-{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
+#line 539 "perly.y"
+{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
 case 135:
-#line 537 "perly.y"
+#line 541 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
 case 136:
-#line 539 "perly.y"
-{ yyval.opval = newOP(yyvsp[-2].ival, 0); }
+#line 543 "perly.y"
+{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
 case 137:
-#line 541 "perly.y"
-{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
+#line 545 "perly.y"
+{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
 case 138:
-#line 543 "perly.y"
-{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
+#line 547 "perly.y"
+{ yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
 case 139:
-#line 545 "perly.y"
-{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
+#line 549 "perly.y"
+{ yyval.opval = newOP(yyvsp[-2].ival, 0); }
 break;
 case 140:
-#line 547 "perly.y"
-{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
+#line 551 "perly.y"
+{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
 break;
-case 143:
+case 141:
 #line 553 "perly.y"
-{ yyval.opval = Nullop; }
+{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 144:
+case 142:
 #line 555 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
 break;
-case 145:
-#line 559 "perly.y"
-{ yyval.opval = newCVREF(yyvsp[0].opval); }
+case 143:
+#line 557 "perly.y"
+{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
 break;
 case 146:
 #line 563 "perly.y"
-{ yyval.opval = newSVREF(yyvsp[0].opval); }
+{ yyval.opval = Nullop; }
 break;
 case 147:
-#line 567 "perly.y"
-{ yyval.opval = newAVREF(yyvsp[0].opval); }
+#line 565 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
 break;
 case 148:
-#line 571 "perly.y"
-{ yyval.opval = newHVREF(yyvsp[0].opval); }
+#line 569 "perly.y"
+{ yyval.opval = newCVREF(yyvsp[0].opval); }
 break;
 case 149:
-#line 575 "perly.y"
-{ yyval.opval = newAVREF(yyvsp[0].opval); }
+#line 573 "perly.y"
+{ yyval.opval = newSVREF(yyvsp[0].opval); }
 break;
 case 150:
-#line 579 "perly.y"
-{ yyval.opval = newGVREF(yyvsp[0].opval); }
+#line 577 "perly.y"
+{ yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
 case 151:
-#line 583 "perly.y"
-{ yyval.opval = scalar(yyvsp[0].opval); }
+#line 581 "perly.y"
+{ yyval.opval = newHVREF(yyvsp[0].opval); }
 break;
 case 152:
 #line 585 "perly.y"
-{ yyval.opval = scalar(yyvsp[0].opval);  }
+{ yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
 case 153:
-#line 587 "perly.y"
-{ yyval.opval = scalar(scope(yyvsp[0].opval)); }
+#line 589 "perly.y"
+{ yyval.opval = newGVREF(yyvsp[0].opval); }
 break;
 case 154:
-#line 590 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+#line 593 "perly.y"
+{ yyval.opval = scalar(yyvsp[0].opval); }
 break;
 case 155:
-#line 594 "perly.y"
-{ yyval.ival = 1; }
+#line 595 "perly.y"
+{ yyval.opval = scalar(yyvsp[0].opval);  }
 break;
 case 156:
-#line 596 "perly.y"
-{ yyval.ival = 0; }
+#line 597 "perly.y"
+{ yyval.opval = scalar(scope(yyvsp[0].opval)); }
 break;
 case 157:
 #line 600 "perly.y"
-{ yyval.ival = 1; }
+{ yyval.opval = yyvsp[0].opval; }
 break;
 case 158:
-#line 602 "perly.y"
-{ yyval.ival = 0; }
+#line 604 "perly.y"
+{ yyval.ival = 1; }
 break;
 case 159:
 #line 606 "perly.y"
-{ yyval.ival = 1; }
+{ yyval.ival = 0; }
 break;
 case 160:
-#line 608 "perly.y"
+#line 610 "perly.y"
+{ yyval.ival = 1; }
+break;
+case 161:
+#line 612 "perly.y"
+{ yyval.ival = 0; }
+break;
+case 162:
+#line 616 "perly.y"
+{ yyval.ival = 1; }
+break;
+case 163:
+#line 618 "perly.y"
 { yyval.ival = 0; }
 break;
-#line 2484 "y.tab.c"
+#line 2483 "y.tab.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
diff --git a/perly.h b/perly.h
index 3dbb284..012ecfa 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -7,47 +7,48 @@
 #define FORMAT 263
 #define SUB 264
 #define PACKAGE 265
-#define WHILE 266
-#define UNTIL 267
-#define IF 268
-#define UNLESS 269
-#define ELSE 270
-#define ELSIF 271
-#define CONTINUE 272
-#define FOR 273
-#define LOOPEX 274
-#define DOTDOT 275
-#define FUNC0 276
-#define FUNC1 277
-#define FUNC 278
-#define RELOP 279
-#define EQOP 280
-#define MULOP 281
-#define ADDOP 282
-#define DOLSHARP 283
-#define DO 284
-#define LOCAL 285
-#define DELETE 286
-#define HASHBRACK 287
-#define NOAMP 288
-#define OROP 289
-#define ANDOP 290
-#define LSTOP 291
-#define OROR 292
-#define ANDAND 293
-#define BITOROP 294
-#define BITANDOP 295
-#define UNIOP 296
-#define SHIFTOP 297
-#define MATCHOP 298
-#define UMINUS 299
-#define REFGEN 300
-#define POWOP 301
-#define PREINC 302
-#define PREDEC 303
-#define POSTINC 304
-#define POSTDEC 305
-#define ARROW 306
+#define HINT 266
+#define WHILE 267
+#define UNTIL 268
+#define IF 269
+#define UNLESS 270
+#define ELSE 271
+#define ELSIF 272
+#define CONTINUE 273
+#define FOR 274
+#define LOOPEX 275
+#define DOTDOT 276
+#define FUNC0 277
+#define FUNC1 278
+#define FUNC 279
+#define RELOP 280
+#define EQOP 281
+#define MULOP 282
+#define ADDOP 283
+#define DOLSHARP 284
+#define DO 285
+#define LOCAL 286
+#define DELETE 287
+#define HASHBRACK 288
+#define NOAMP 289
+#define OROP 290
+#define ANDOP 291
+#define LSTOP 292
+#define OROR 293
+#define ANDAND 294
+#define BITOROP 295
+#define BITANDOP 296
+#define UNIOP 297
+#define SHIFTOP 298
+#define MATCHOP 299
+#define UMINUS 300
+#define REFGEN 301
+#define POWOP 302
+#define PREINC 303
+#define PREDEC 304
+#define POSTINC 305
+#define POSTDEC 306
+#define ARROW 307
 typedef union {
     I32        ival;
     char *pval;
diff --git a/perly.h.yacc b/perly.h.yacc
deleted file mode 100644 (file)
index 579cc44..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-
-typedef union  {
-    I32        ival;
-    char *pval;
-    OP *opval;
-    GV *gvval;
-} YYSTYPE;
-extern YYSTYPE yylval;
-# define WORD 257
-# define METHOD 258
-# define THING 259
-# define PMFUNC 260
-# define PRIVATEREF 261
-# define LABEL 262
-# define FORMAT 263
-# define SUB 264
-# define PACKAGE 265
-# define WHILE 266
-# define UNTIL 267
-# define IF 268
-# define UNLESS 269
-# define ELSE 270
-# define ELSIF 271
-# define CONTINUE 272
-# define FOR 273
-# define LOOPEX 274
-# define DOTDOT 275
-# define FUNC0 276
-# define FUNC1 277
-# define FUNC 278
-# define RELOP 279
-# define EQOP 280
-# define MULOP 281
-# define ADDOP 282
-# define DOLSHARP 283
-# define DO 284
-# define LOCAL 285
-# define DELETE 286
-# define HASHBRACK 287
-# define LSTOP 288
-# define OROR 289
-# define ANDAND 290
-# define BITOROP 291
-# define BITANDOP 292
-# define UNIOP 293
-# define SHIFTOP 294
-# define MATCHOP 295
-# define ARROW 296
-# define UMINUS 297
-# define REFGEN 298
-# define POWOP 299
-# define PREINC 300
-# define PREDEC 301
-# define POSTINC 302
-# define POSTDEC 303
-extern YYSTYPE yylval;
diff --git a/perly.y b/perly.y
index ac73fc0..691d668 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -58,7 +58,7 @@
 
 %token <opval> WORD METHOD THING PMFUNC PRIVATEREF
 %token <pval> LABEL
-%token <ival> FORMAT SUB PACKAGE
+%token <ival> FORMAT SUB PACKAGE HINT
 %token <ival> WHILE UNTIL IF UNLESS ELSE ELSIF CONTINUE FOR
 %token <ival> LOOPEX DOTDOT
 %token <ival> FUNC0 FUNC1 FUNC
@@ -119,13 +119,13 @@ prog      :       /* NULL */
        ;
 
 block  :       '{' remember lineseq '}'
-                       {   int nbs = needblockscope;
+                       {   int needblockscope = hints & HINT_BLOCK_SCOPE;
                            $$ = scalarseq($3);
                            if (copline > (line_t)$1)
                                copline = $1;
                            LEAVE_SCOPE($2);
-                           if (nbs)
-                               needblockscope = TRUE;  /* propagate outward */
+                           if (needblockscope)
+                               hints |= HINT_BLOCK_SCOPE; /* propagate out */
                            pad_leavemy(comppad_name_fill); }
        ;
 
@@ -136,8 +136,8 @@ remember:   /* NULL */      /* in case they push a package name */
                            SAVEINT(max_intro_pending);
                            min_intro_pending = 0;
                            SAVEINT(comppad_name_fill);
-                           SAVEINT(needblockscope);
-                           needblockscope = FALSE; }
+                           SAVEINT(hints);
+                           hints &= ~HINT_BLOCK_SCOPE; }
        ;
 
 lineseq        :       /* NULL */
@@ -147,7 +147,7 @@ lineseq     :       /* NULL */
        |       lineseq line
                        {   $$ = append_list(OP_LINESEQ,
                                (LISTOP*)$1, (LISTOP*)$2); pad_reset();
-                           if ($1 && $2) needblockscope = TRUE; }
+                           if ($1 && $2) hints |= HINT_BLOCK_SCOPE; }
        ;
 
 line   :       label cond
@@ -187,7 +187,8 @@ else        :       /* NULL */
                        { $$ = scope($2); }
        |       ELSIF '(' expr ')' block else
                        { copline = $1;
-                           $$ = newCONDOP(0, $3, scope($5), $6); }
+                           $$ = newSTATEOP(0, 0,
+                               newCONDOP(0, $3, scope($5), $6)); }
        ;
 
 cond   :       IF '(' expr ')' block else
@@ -272,6 +273,8 @@ decl        :       format
                        { $$ = 0; }
        |       package
                        { $$ = 0; }
+       |       hint
+                       { $$ = 0; }
        ;
 
 format :       FORMAT WORD block
@@ -292,6 +295,12 @@ package :  PACKAGE WORD ';'
                        { package(Nullop); }
        ;
 
+hint   :       HINT WORD ';'
+                       { hint($1, $2, Nullop); }
+       |       HINT WORD expr ';'
+                       { hint($1, $2, list(force_list($3))); }
+       ;
+
 expr   :       expr ',' sexpr
                        { $$ = append_elem(OP_LIST, $1, $3); }
        |       sexpr
@@ -524,7 +533,8 @@ term        :       '-' term %prec UMINUS
                                scalar(newCVREF(scalar($2))),
                                $4))); }
        |       LOOPEX
-                       { $$ = newOP($1, OPf_SPECIAL); needblockscope = TRUE; }
+                       { $$ = newOP($1, OPf_SPECIAL);
+                           hints |= HINT_BLOCK_SCOPE; }
        |       LOOPEX sexpr
                        { $$ = newLOOPEX($1,$2); }
        |       UNIOP
diff --git a/perly.y.save b/perly.y.save
deleted file mode 100644 (file)
index 8babbb9..0000000
+++ /dev/null
@@ -1,591 +0,0 @@
-/* $RCSfile: perly.y,v $$Revision: 4.1 $$Date: 92/08/07 18:26:16 $
- *
- *    Copyright (c) 1991, Larry Wall
- *
- *    You may distribute under the terms of either the GNU General Public
- *    License or the Artistic License, as specified in the README file.
- *
- * $Log:       perly.y,v $
- * Revision 4.1  92/08/07  18:26:16  lwall
- * 
- * Revision 4.0.1.5  92/06/11  21:12:50  lwall
- * patch34: expectterm incorrectly set to indicate start of program or block
- * 
- * Revision 4.0.1.4  92/06/08  17:33:25  lwall
- * patch20: one of the backdoors to expectterm was on the wrong reduction
- * 
- * Revision 4.0.1.3  92/06/08  15:18:16  lwall
- * patch20: an expression may now start with a bareword
- * patch20: relaxed requirement for semicolon at the end of a block
- * patch20: added ... as variant on ..
- * patch20: fixed double debug break in foreach with implicit array assignment
- * patch20: if {block} {block} didn't work any more
- * patch20: deleted some minor memory leaks
- * 
- * Revision 4.0.1.2  91/11/05  18:17:38  lwall
- * patch11: extra comma at end of list is now allowed in more places (Hi, Felix!)
- * patch11: once-thru blocks didn't display right in the debugger
- * patch11: debugger got confused over nested subroutine definitions
- * 
- * Revision 4.0.1.1  91/06/07  11:42:34  lwall
- * patch4: new copyright notice
- * 
- * Revision 4.0  91/03/20  01:38:40  lwall
- * 4.0 baseline.
- * 
- */
-
-%{
-#include "EXTERN.h"
-#include "perl.h"
-
-/*SUPPRESS 530*/
-/*SUPPRESS 593*/
-/*SUPPRESS 595*/
-
-%}
-
-%start prog
-
-%union {
-    int        ival;
-    char *cval;
-    OP *opval;
-    COP *copval;
-    struct compcmd compval;
-    GV *stabval;
-    FF *formval;
-}
-
-%token <ival> '{' ')'
-
-%token <opval> WORD
-%token <cval> LABEL
-%token <ival> APPEND OPEN SSELECT LOOPEX DOTDOT DOLSHARP
-%token <ival> USING FORMAT DO SHIFT PUSH POP LVALFUN
-%token <ival> WHILE UNTIL IF UNLESS ELSE ELSIF CONTINUE SPLIT FLIST
-%token <ival> FOR FILOP FILOP2 FILOP3 FILOP4 FILOP22 FILOP25
-%token <ival> FUNC0 FUNC1 FUNC2 FUNC2x FUNC3 FUNC4 FUNC5 HSHFUN HSHFUN3
-%token <ival> FLIST2 SUB LOCAL DELETE FUNC
-%token <ival> RELOP EQOP MULOP ADDOP PACKAGE
-%token <formval> FORMLIST
-%token <opval> THING STRING
-
-%type <ival> prog decl format remember crp
-%type <copval> block lineseq line loop cond sideff nexpr else
-%type <opval> expr sexpr term scalar ary hsh arylen star amper
-%type <opval> listexpr indirob
-%type <opval> texpr listop
-%type <cval> label
-%type <compval> compblock
-
-%nonassoc <ival> LSTOP
-%left ','
-%right '='
-%right '?' ':'
-%nonassoc DOTDOT
-%left OROR
-%left ANDAND
-%left <ival> BITOROP
-%left <ival> BITANDOP
-%nonassoc EQOP
-%nonassoc RELOP
-%nonassoc <ival> UNIOP
-%left <ival> SHIFTOP
-%left ADDOP
-%left MULOP
-%left <ival> MATCHOP
-%right '!' '~' UMINUS
-%right <ival> POWOP
-%nonassoc INC DEC
-%left '('
-
-%% /* RULES */
-
-prog   :       /* NULL */
-               {
-#if defined(YYDEBUG) && defined(DEBUGGING)
-                   yydebug = (debug & 1);
-#endif
-                   expectterm = 2;
-               }
-       /*CONTINUED*/   lineseq
-                       { if (in_eval)
-                               eval_root = block_head($2);
-                           else
-                               main_root = block_head($2); }
-       ;
-
-compblock:     block CONTINUE block
-                       { $$.comp_true = $1; $$.comp_alt = $3; }
-       |       block else
-                       { $$.comp_true = $1; $$.comp_alt = $2; }
-       ;
-
-else   :       /* NULL */
-                       { $$ = Nullcop; }
-       |       ELSE block
-                       { $$ = $2; }
-       |       ELSIF '(' expr ')' compblock
-                       { cmdline = $1;
-                           $$ = newCCOP(OP_ELSIF,1,$3,$5); }
-       ;
-
-block  :       '{' remember lineseq '}'
-                       { $$ = block_head($3);
-                         if (cmdline > (line_t)$1)
-                             cmdline = $1;
-                         if (savestack->av_fill > $2)
-                           leave_scope($2);
-                         expectterm = 2; }
-       ;
-
-remember:      /* NULL */      /* in case they push a package name */
-                       { $$ = savestack->av_fill; }
-       ;
-
-lineseq        :       /* NULL */
-                       { $$ = Nullcop; }
-       |       lineseq line
-                       { $$ = append_elem(OP_LINESEQ,$1,$2); }
-       ;
-
-line   :       decl
-                       { $$ = Nullcop; }
-       |       label cond
-                       { $$ = add_label($1,$2); }
-       |       loop    /* loops add their own labels */
-       |       label ';'
-                       { if ($1 != Nullch) {
-                             $$ = add_label($1, newACOP(Nullgv, Nullop) );
-                           }
-                           else {
-                             $$ = Nullcop;
-                             cmdline = NOLINE;
-                           }
-                           expectterm = 2; }
-       |       label sideff ';'
-                       { $$ = add_label($1,$2);
-                         expectterm = 2; }
-       ;
-
-sideff :       error
-                       { $$ = Nullcop; }
-       |       expr
-                       { $$ = newACOP(Nullgv, $1); }
-       |       expr IF expr
-                       { $$ = addcond(
-                              newACOP(Nullgv, Nullop, $1), $3); }
-       |       expr UNLESS expr
-                       { $$ = addcond(invert(
-                              newACOP(Nullgv, Nullop, $1)), $3); }
-       |       expr WHILE expr
-                       { $$ = addloop(
-                              newACOP(Nullgv, Nullop, $1), $3); }
-       |       expr UNTIL expr
-                       { $$ = addloop(invert(
-                              newACOP(Nullgv, Nullop, $1)), $3); }
-       ;
-
-cond   :       IF '(' expr ')' compblock
-                       { cmdline = $1;
-                           $$ = newICOP(OP_IF,$3,$5); }
-       |       UNLESS '(' expr ')' compblock
-                       { cmdline = $1;
-                           $$ = invert(newICOP(OP_IF,$3,$5)); }
-       |       IF block compblock
-                       { cmdline = $1;
-                           $$ = newICOP(OP_IF,$2,$3); }
-       |       UNLESS block compblock
-                       { cmdline = $1;
-                           $$ = invert(newICOP(OP_IF,$2,$3)); }
-       ;
-
-loop   :       label WHILE '(' texpr ')' compblock
-                       { cmdline = $2;
-                           $$ = wopt(add_label($1,
-                           newCCOP(OP_WHILE,1,$4,$6) )); }
-       |       label UNTIL '(' expr ')' compblock
-                       { cmdline = $2;
-                           $$ = wopt(add_label($1,
-                           invert(newCCOP(OP_WHILE,1,$4,$6)) )); }
-       |       label WHILE block compblock
-                       { cmdline = $2;
-                           $$ = wopt(add_label($1,
-                           newCCOP(OP_WHILE, 1, $3,$4) )); }
-       |       label UNTIL block compblock
-                       { cmdline = $2;
-                           $$ = wopt(add_label($1,
-                           invert(newCCOP(OP_WHILE,1,$3,$4)) )); }
-       |       label FOR scalar '(' expr crp compblock
-                       { cmdline = $2;
-                           /*
-                            * The following gobbledygook catches EXPRs that
-                            * aren't explicit array refs and translates
-                            *          foreach VAR (EXPR) {
-                            * into
-                            *          @ary = EXPR;
-                            *          foreach VAR (@ary) {
-                            * where @ary is a hidden array made by newGVgen().
-                            * (Note that @ary may become a local array if
-                            * it is determined that it might be called
-                            * recursively.  See cmd_tosave().)
-                            */
-                           if ($5->op_type != OP_ARRAY) {
-                               scrstab = gv_AVadd(newGVgen());
-                               $$ = append_elem(OP_LINESEQ,
-                                   newACOP(Nullgv,
-                                     newBINOP(OP_ASSIGN,
-                                       listref(newUNOP(OP_ARRAY,
-                                         gv_to_op(A_STAB,scrstab))),
-                                       forcelist($5))),
-                                   wopt(over($3,add_label($1,
-                                     newCCOP(OP_WHILE, 0,
-                                       newUNOP(OP_ARRAY,
-                                         gv_to_op(A_STAB,scrstab)),
-                                       $7)))));
-                               $$->cop_line = $2;
-                               $$->cop_head->cop_line = $2;
-                           }
-                           else {
-                               $$ = wopt(over($3,add_label($1,
-                               newCCOP(OP_WHILE,1,$5,$7) )));
-                           }
-                       }
-       |       label FOR '(' expr crp compblock
-                       { cmdline = $2;
-                           if ($4->op_type != OP_ARRAY) {
-                               scrstab = gv_AVadd(newGVgen());
-                               $$ = append_elem(OP_LINESEQ,
-                                   newACOP(Nullgv,
-                                     newBINOP(OP_ASSIGN,
-                                       listref(newUNOP(OP_ARRAY,
-                                         gv_to_op(A_STAB,scrstab))),
-                                       forcelist($4))),
-                                   wopt(over(defstab,add_label($1,
-                                     newCCOP(OP_WHILE, 0,
-                                       newUNOP(OP_ARRAY,
-                                         gv_to_op(A_STAB,scrstab)),
-                                       $6)))));
-                               $$->cop_line = $2;
-                               $$->cop_head->cop_line = $2;
-                           }
-                           else {      /* lisp, anyone? */
-                               $$ = wopt(over(defstab,add_label($1,
-                               newCCOP(OP_WHILE,1,$4,$6) )));
-                           }
-                       }
-       |       label FOR '(' nexpr ';' texpr ';' nexpr ')' block
-                       /* basically fake up an initialize-while lineseq */
-                       {   yyval.compval.comp_true = $10;
-                           yyval.compval.comp_alt = $8;
-                           cmdline = $2;
-                           $$ = append_elem(OP_LINESEQ,$4,wopt(add_label($1,
-                               newCCOP(OP_WHILE,1,$6,yyval.compval) ))); }
-       |       label compblock /* a block is a loop that happens once */
-                       { $$ = add_label($1,newCCOP(OP_BLOCK,1,Nullop,$2)); }
-       ;
-
-nexpr  :       /* NULL */
-                       { $$ = Nullcop; }
-       |       sideff
-       ;
-
-texpr  :       /* NULL means true */
-                       { (void)scan_num("1"); $$ = yylval.op; }
-       |       expr
-       ;
-
-label  :       /* empty */
-                       { $$ = Nullch; }
-       |       LABEL
-       ;
-
-decl   :       format
-                       { $$ = 0; }
-       |       subrout
-                       { $$ = 0; }
-       |       package
-                       { $$ = 0; }
-       ;
-
-format :       FORMAT WORD '=' FORMLIST
-                       { if (strEQ($2,"stdout"))
-                           newFORM(newGV("STDOUT",TRUE),$4);
-                         else if (strEQ($2,"stderr"))
-                           newFORM(newGV("STDERR",TRUE),$4);
-                         else
-                           newFORM(newGV($2,TRUE),$4);
-                         Safefree($2); $2 = Nullch; }
-       |       FORMAT '=' FORMLIST
-                       { newFORM(newGV("STDOUT",TRUE),$3); }
-       ;
-
-subrout        :       SUB WORD block
-                       { newSUB($2,$3);
-                         cmdline = NOLINE;
-                         if (savestack->av_fill > $1)
-                           leave_scope($1); }
-       ;
-
-package :      PACKAGE WORD ';'
-                       { char tmpbuf[256];
-                         GV *tmpstab;
-
-                         save_hptr(&curstash);
-                         save_item(curstname);
-                         sv_setpv(curstname,$2);
-                         sprintf(tmpbuf,"'_%s",$2);
-                         tmpstab = newGV(tmpbuf,TRUE);
-                         if (!GvHV(tmpstab))
-                             GvHV(tmpstab) = newHV(0);
-                         curstash = GvHV(tmpstab);
-                         if (!curstash->hv_name)
-                             curstash->hv_name = savestr($2);
-                         curstash->hv_coeffsize = 0;
-                         Safefree($2); $2 = Nullch;
-                         cmdline = NOLINE;
-                         expectterm = 2;
-                       }
-       ;
-
-expr   :       expr ',' sexpr
-                       { $$ = append_elem(OP_LIST, $1, $3); }
-       |       sexpr
-       ;
-
-sexpr  :       sexpr '=' sexpr
-                       { $$ = newBINOP(OP_ASSIGN, ref($1), $3); }
-       |       sexpr POWOP '=' sexpr
-                       { $$ = newBINOP($2, ref($1), $4); }
-       |       sexpr MULOP '=' sexpr
-                       { $$ = newBINOP($2, ref($1), $4); }
-       |       sexpr ADDOP '=' sexpr
-                       { $$ = newBINOP($2, ref($1), $4);}
-       |       sexpr SHIFTOP '=' sexpr
-                       { $$ = newBINOP($2, ref($1), $4); }
-       |       sexpr BITANDOP '=' sexpr
-                       { $$ = newBINOP($2, ref($1), $4); }
-       |       sexpr BITOROP '=' sexpr
-                       { $$ = newBINOP($2, ref($1), $4); }
-
-
-       |       sexpr POWOP sexpr
-                       { $$ = newBINOP($2, $1, $3); }
-       |       sexpr MULOP sexpr
-                       { if ($2 == OP_REPEAT)
-                             $1 = forcelist($1);
-                           $$ = newBINOP($2, $1, $3);
-                           if ($2 == OP_REPEAT) {
-                               if ($$[1].op_type != A_EXPR ||
-                                 $$[1].op_ptr.op_op->op_type != OP_LIST)
-                                   $$[1].op_flags &= ~AF_ARYOK;
-                           } }
-       |       sexpr ADDOP sexpr
-                       { $$ = newBINOP($2, $1, $3); }
-       |       sexpr SHIFTOP sexpr
-                       { $$ = newBINOP($2, $1, $3); }
-       |       sexpr RELOP sexpr
-                       { $$ = newBINOP($2, $1, $3); }
-       |       sexpr EQOP sexpr
-                       { $$ = newBINOP($2, $1, $3); }
-       |       sexpr BITANDOP sexpr
-                       { $$ = newBINOP($2, $1, $3); }
-       |       sexpr BITOROP sexpr
-                       { $$ = newBINOP($2, $1, $3); }
-       |       sexpr DOTDOT sexpr
-                       { $$ = newBINOP($2, $1, $3); }
-       |       sexpr ANDAND sexpr
-                       { $$ = newBINOP(OP_AND, $1, $3); }
-       |       sexpr OROR sexpr
-                       { $$ = newBINOP(OP_OR, $1, $3); }
-       |       sexpr '?' sexpr ':' sexpr
-                       { $$ = newCONDOP(OP_COND_EXPR, $1, $3, $5); }
-       |       sexpr MATCHOP sexpr
-                       { $$ = bind_match($2, $1, $3); }
-       |       term
-                       { $$ = $1; }
-       ;
-
-term   :       '-' term %prec UMINUS
-                       { $$ = newUNOP(OP_NEGATE, $2); }
-       |       '+' term %prec UMINUS
-                       { $$ = $2; }
-       |       '!' term
-                       { $$ = newUNOP(OP_NOT, $2); }
-       |       '~' term
-                       { $$ = newUNOP(OP_COMPLEMENT, $2);}
-       |       term INC
-                       { $$ = newUNOP(OP_POSTINC,ref($1)); }
-       |       term DEC
-                       { $$ = newUNOP(OP_POSTDEC,ref($1)); }
-       |       INC term
-                       { $$ = newUNOP(OP_PREINC,ref($2)); }
-       |       DEC term
-                       { $$ = newUNOP(OP_PREDEC,ref($2)); }
-       |       LOCAL '(' expr crp
-                       { $$ = localize(forcelist($3)); }
-       |       '(' expr crp
-                       { $$ = $2; }
-       |       '(' ')'
-                       { $$ = Nullop; }        /* XXX may be insufficient */
-       |       scalar  %prec '('
-                       { $$ = gv_to_op(A_STAB,$1); }
-       |       star    %prec '('
-                       { $$ = gv_to_op(A_STAR,$1); }
-       |       scalar '[' expr ']'     %prec '('
-                       { $$ = newBINOP(OP_AELEM,
-                               gv_to_op(A_STAB,gv_AVadd($1)), $3); }
-       |       hsh     %prec '('
-                       { $$ = newUNOP(OP_HASH, gv_to_op(A_STAB,$1)); }
-       |       ary     %prec '('
-                       { $$ = newUNOP(OP_ARRAY, gv_to_op(A_STAB,$1)); }
-       |       arylen  %prec '('
-                       { $$ = newUNOP(OP_ARYLEN, gv_to_op(A_STAB,$1)); }
-       |       scalar '{' expr ';' '}' %prec '('
-                       { $$ = newBINOP(OP_HELEM,
-                               gv_to_op(A_STAB,gv_HVadd($1)),
-                               jmaybe($3));
-                           expectterm = FALSE; }
-       |       '(' expr crp '[' expr ']'       %prec '('
-                       { $$ = newSLICEOP(OP_LSLICE, Nullop,
-                               forcelist($5),
-                               forcelist($2)); }
-       |       '(' ')' '[' expr ']'    %prec '('
-                       { $$ = newSLICEOP(OP_LSLICE, Nullop,
-                               forcelist($4), Nullop); }
-       |       ary '[' expr ']'        %prec '('
-                       { $$ = newBINOP(OP_ASLICE,
-                               gv_to_op(A_STAB,gv_AVadd($1)),
-                               forcelist($3)); }
-       |       ary '{' expr ';' '}'    %prec '('
-                       { $$ = newBINOP(OP_HSLICE,
-                               gv_to_op(A_STAB,gv_HVadd($1)),
-                               forcelist($3));
-                           expectterm = FALSE; }
-       |       DELETE scalar '{' expr ';' '}'  %prec '('
-                       { $$ = newBINOP(OP_DELETE,
-                               gv_to_op(A_STAB,gv_HVadd($2)),
-                               jmaybe($4));
-                           expectterm = FALSE; }
-       |       DELETE '(' scalar '{' expr ';' '}' ')'  %prec '('
-                       { $$ = newBINOP(OP_DELETE,
-                               gv_to_op(A_STAB,gv_HVadd($3)),
-                               jmaybe($5));
-                           expectterm = FALSE; }
-       |       THING   %prec '('
-                       { $$ = $1; }
-
-       |       amper
-                       { $$ = newUNIOP(OP_SUBR,
-                               gv_to_op(A_STAB,$1)); }
-       |       amper '(' ')'
-                       { $$ = newBINOP(OP_SUBR,
-                               gv_to_op(A_STAB,$1),
-                               flatten(Nullop)); }
-       |       amper '(' expr crp
-                       { $$ = newBINOP(OP_SUBR,
-                               gv_to_op(A_STAB,$1),
-                               $3); }
-
-       |       DO sexpr        %prec UNIOP
-                       { $$ = newUNOP(OP_DOFILE,$2);
-                         allgvs = TRUE;}
-       |       DO block        %prec '('
-                       { $$ = $2; }
-       |       DO WORD '(' ')'
-                       { $$ = newBINOP(OP_SUBR,
-                               gv_to_op(A_WORD,newGV($2,MULTI)),
-                               Nullop);
-                           Safefree($2); $2 = Nullch;
-                           $$->op_flags |= AF_DEPR; }
-       |       DO WORD '(' expr crp
-                       { $$ = newBINOP(OP_SUBR,
-                               gv_to_op(A_WORD,newGV($2,MULTI)),
-                               $4); Safefree($2); $2 = Nullch;
-                           $$->op_flags |= AF_DEPR; }
-       |       DO scalar '(' ')'
-                       { $$ = newBINOP(OP_SUBR,
-                               gv_to_op(A_STAB,$2),
-                               flatten(Nullop));
-                           $$->op_flags |= AF_DEPR; }
-       |       DO scalar '(' expr crp
-                       { $$ = newBINOP(OP_SUBR,
-                               gv_to_op(A_STAB,$2),
-                               $4);
-                           $$->op_flags |= AF_DEPR; }
-       |       LOOPEX
-                       { $$ = newOP($1); }
-       |       LOOPEX WORD
-                       { $$ = newUNIOP($1,pv_to_op($2)); }
-       |       UNIOP
-                       { $$ = newOP($1); }
-       |       UNIOP block
-                       { $$ = newUNOP($1,$2); }
-       |       UNIOP sexpr
-                       { $$ = newUNOP($1,$2); }
-       |       FUNC0
-                       { $$ = newOP($1); }
-       |       FUNC0 '(' ')'
-                       { $$ = newOP($1); }
-       |       FUNC1 '(' ')'
-                       { $$ = newOP($1); }
-       |       FUNC1 '(' expr ')'
-                       { $$ = newUNIOP($1,$3); }
-       |       WORD
-       |       listop
-       ;
-
-listop :       LSTOP listexpr
-                       { $$ = newUNOP($1, $2); }
-       |       FUNC '(' listexpr ')'
-                       { $$ = newUNOP($1, $3); }
-       ;
-
-listexpr:      /* NULL */
-                       { $$ = newNULLLIST(); }
-       |       expr
-                       { $$ = $1; }
-       |       indirob expr
-                       { $$ = prepend_elem(OP_LIST, $1, $2); }
-       ;
-
-amper  :       '&' indirob
-                       { $$ = $2; }
-       ;
-
-scalar :       '$' indirob
-                       { $$ = $2; }
-       ;
-
-ary    :       '@' indirob
-                       { $$ = $2; }
-       ;
-
-hsh    :       '%' indirob
-                       { $$ = $2; }
-       ;
-
-arylen :       DOLSHARP indirob
-                       { $$ = $2; }
-       ;
-
-star   :       '*' indirob
-                       { $$ = $2; }
-       ;
-
-indirob        :       WORD
-                       { $$ = newINDIROB($1); }
-       |       scalar
-                       { $$ = newINDIROB($1); }
-       |       block
-                       { $$ = newINDIROB($1); }
-       ;
-
-crp    :       ',' ')'
-                       { $$ = 1; }
-       |       ')'
-                       { $$ = 0; }
-       ;
-
-%% /* PROGRAM */
diff --git a/pp.c b/pp.c
index 0713690..b8b2bbd 100644 (file)
--- a/pp.c
+++ b/pp.c
 #include "perl.h"
 
 #ifdef HAS_SOCKET
-#include <sys/socket.h>
-#include <netdb.h>
-#ifndef ENOTSOCK
-#include <net/errno.h>
-#endif
+# include <sys/socket.h>
+# include <netdb.h>
+# ifndef ENOTSOCK
+#  ifdef I_NET_ERRNO
+#   include <net/errno.h>
+#  endif
+# endif
 #endif
 
 #ifdef HAS_SELECT
 extern int h_errno;
 #endif
 
-#ifdef I_PWD
-#include <pwd.h>
+#ifdef HAS_PASSWD
+# ifdef I_PWD
+#  include <pwd.h>
+# else
+    struct passwd *getpwnam P((char *));
+    struct passwd *getpwuid P((Uid_t));
+# endif
+  struct passwd *getpwent();
 #endif
-#ifdef I_GRP
-#include <grp.h>
+
+#ifdef HAS_GROUP
+# ifdef I_GRP
+#  include <grp.h>
+# else
+    struct group *getgrnam P((char *));
+    struct group *getgrgid P((Gid_t));
+# endif
+    struct group *getgrent();
 #endif
+
 #ifdef I_UTIME
 #include <utime.h>
 #endif
@@ -58,6 +74,30 @@ extern int h_errno;
 #include <sys/file.h>
 #endif
 
+#ifdef HAS_GETPGRP2
+#   define getpgrp getpgrp2
+#endif
+
+#ifdef HAS_SETPGRP2
+#   define setpgrp setpgrp2
+#endif
+
+#ifdef HAS_GETPGRP2
+#   define getpgrp getpgrp2
+#endif
+
+#ifdef HAS_SETPGRP2
+#   define setpgrp setpgrp2
+#endif
+
+#ifdef HAS_GETPGRP2
+#   define getpgrp getpgrp2
+#endif
+
+#ifdef HAS_SETPGRP2
+#   define setpgrp setpgrp2
+#endif
+
 static I32 dopoptosub P((I32 startingblock));
 
 /* Nothing. */
@@ -179,13 +219,26 @@ PP(pp_padsv)
 PP(pp_padav)
 {
     dSP; dTARGET;
-    XPUSHs(TARG);
     if (op->op_flags & OPf_INTRO)
        SAVECLEARSV(curpad[op->op_targ]);
-    if (op->op_flags & OPf_LVAL)
+    EXTEND(SP, 1);
+    if (op->op_flags & OPf_LVAL) {
+       PUSHs(TARG);
        RETURN;
-    PUTBACK;
-    return pp_rv2av();
+    }
+    if (GIMME == G_ARRAY) {
+       I32 maxarg = AvFILL((AV*)TARG) + 1;
+       EXTEND(SP, maxarg);
+       Copy(AvARRAY((AV*)TARG), SP+1, maxarg, SV*);
+       SP += maxarg;
+    }
+    else {
+       SV* sv = sv_newmortal();
+       I32 maxarg = AvFILL((AV*)TARG) + 1;
+       sv_setiv(sv, maxarg);
+       PUSHs(sv);
+    }
+    RETURN;
 }
 
 PP(pp_padhv)
@@ -196,8 +249,20 @@ PP(pp_padhv)
        SAVECLEARSV(curpad[op->op_targ]);
     if (op->op_flags & OPf_LVAL)
        RETURN;
-    PUTBACK;
-    return pp_rv2hv();
+    if (GIMME == G_ARRAY) { /* array wanted */
+       return do_kv(ARGS);
+    }
+    else {
+       SV* sv = sv_newmortal();
+       if (HvFILL((HV*)TARG)) {
+           sprintf(buf, "%d/%d", HvFILL((HV*)TARG), HvMAX((HV*)TARG)+1);
+           sv_setpv(sv, buf);
+       }
+       else
+           sv_setiv(sv, 0);
+       SETs(sv);
+       RETURN;
+    }
 }
 
 PP(pp_padany)
@@ -220,13 +285,15 @@ PP(pp_rv2gv)
     if (SvROK(sv)) {
        sv = SvRV(sv);
        if (SvTYPE(sv) != SVt_PVGV)
-           DIE("Not a glob reference");
+           DIE("Not a symbol reference");
     }
     else {
        if (SvTYPE(sv) != SVt_PVGV) {
            if (!SvOK(sv))
-               DIE(no_usym, "a glob");
-           sv = (SV*)gv_fetchpv(SvPV(sv, na), TRUE);
+               DIE(no_usym, "a symbol");
+           if (op->op_private & HINT_STRICT_REFS)
+               DIE(no_hardref, "a symbol");
+           sv = (SV*)gv_fetchpv(SvPV(sv, na), TRUE, SVt_PVGV);
        }
     }
     if (op->op_flags & OPf_INTRO) {
@@ -279,28 +346,36 @@ PP(pp_rv2sv)
        if (SvTYPE(gv) != SVt_PVGV) {
            if (!SvOK(sv))
                DIE(no_usym, "a scalar");
-           gv = (SV*)gv_fetchpv(SvPV(sv, na), TRUE);
+           if (op->op_private & HINT_STRICT_REFS)
+               DIE(no_hardref, "a scalar");
+           gv = (SV*)gv_fetchpv(SvPV(sv, na), TRUE, SVt_PV);
        }
        sv = GvSV(gv);
-       if (op->op_private == OP_RV2HV &&
-         (!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVHV)) {
-           SvREFCNT_dec(sv);
-           sv = NEWSV(0,0);
-           sv_upgrade(sv, SVt_RV);
-           SvRV(sv) = SvREFCNT_inc(newHV());
-           SvROK_on(sv);
-           ++sv_rvcount;
-           GvSV(gv) = sv;
-       }
-       else if (op->op_private == OP_RV2AV &&
-         (!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVAV)) {
-           SvREFCNT_dec(sv);
-           sv = NEWSV(0,0);
-           sv_upgrade(sv, SVt_RV);
-           SvRV(sv) = SvREFCNT_inc(newAV());
-           SvROK_on(sv);
-           ++sv_rvcount;
-           GvSV(gv) = sv;
+       if (op->op_private & (OPpDEREF_AV|OPpDEREF_HV)) {
+           if (op->op_private & OPpDEREF_HV &&
+             (!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVHV)) {
+               if (op->op_private & HINT_STRICT_REFS && !SvROK(sv) && SvOK(sv))
+                   DIE(no_hardref, "a hash");
+               SvREFCNT_dec(sv);
+               sv = NEWSV(0,0);
+               sv_upgrade(sv, SVt_RV);
+               SvRV(sv) = SvREFCNT_inc(newHV());
+               SvROK_on(sv);
+               ++sv_rvcount;
+               GvSV(gv) = sv;
+           }
+           else if (op->op_private & OPpDEREF_AV &&
+             (!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVAV)) {
+               if (op->op_private & HINT_STRICT_REFS && !SvROK(sv) && SvOK(sv))
+                   DIE(no_hardref, "an array");
+               SvREFCNT_dec(sv);
+               sv = NEWSV(0,0);
+               sv_upgrade(sv, SVt_RV);
+               SvRV(sv) = SvREFCNT_inc(newAV());
+               SvROK_on(sv);
+               ++sv_rvcount;
+               GvSV(gv) = sv;
+           }
        }
     }
     if (op->op_flags & OPf_INTRO)
@@ -641,7 +716,7 @@ PP(pp_readline)
 
 PP(pp_indread)
 {
-    last_in_gv = gv_fetchpv(SvPVx(GvSV((GV*)(*stack_sp--)), na), TRUE);
+    last_in_gv = gv_fetchpv(SvPVx(GvSV((GV*)(*stack_sp--)), na), TRUE,SVt_PVIO);
     return do_readline();
 }
 
@@ -660,21 +735,24 @@ PP(pp_regcomp) {
     dSP;
     register PMOP *pm = (PMOP*)cLOGOP->op_other;
     register char *t;
-    I32 global;
     SV *tmpstr;
-    register REGEXP *rx = pm->op_pmregexp;
     STRLEN len;
 
-    global = pm->op_pmflags & PMf_GLOBAL;
     tmpstr = POPs;
     t = SvPV(tmpstr, len);
-    if (!global && rx)
-       regfree(rx);
-    pm->op_pmregexp = Null(REGEXP*);   /* crucial if regcomp aborts */
-    pm->op_pmregexp = regcomp(t, t + len,
-       pm->op_pmflags & PMf_FOLD);
+
+    if (pm->op_pmregexp) {
+       regfree(pm->op_pmregexp);
+       pm->op_pmregexp = Null(REGEXP*);        /* crucial if regcomp aborts */
+    }
+
+    pm->op_pmregexp = regcomp(t, t + len, pm->op_pmflags & PMf_FOLD);
+
     if (!pm->op_pmregexp->prelen && curpm)
        pm = curpm;
+    else if (strEQ("\\s+", pm->op_pmregexp->precomp))
+       pm->op_pmflags |= PMf_WHITE;
+
     if (pm->op_pmflags & PMf_KEEP) {
        if (!(pm->op_pmflags & PMf_FOLD))
            scan_prefix(pm, pm->op_pmregexp->precomp,
@@ -682,7 +760,7 @@ PP(pp_regcomp) {
        pm->op_pmflags &= ~PMf_RUNTIME; /* no point compiling again */
        hoistmust(pm);
        cLOGOP->op_first->op_next = op->op_next;
-       /* XXX delete push code */
+       /* XXX delete push code? */
     }
     RETURN;
 }
@@ -1274,10 +1352,10 @@ PP(pp_aassign)
                        DIE(no_modify);
                    if (relem <= lastrelem)
                        relem++;
+                   break;
                }
                if (SvROK(sv))
                    sv_unref(sv);
-               break;
            }
            if (relem <= lastrelem) {
                sv_setsv(sv, *relem);
@@ -1291,6 +1369,9 @@ PP(pp_aassign)
     }
     if (delaymagic & ~DM_DELAY) {
        if (delaymagic & DM_UID) {
+#ifdef HAS_SETRESUID
+           (void)setresuid(uid,euid,(Uid_t)-1);
+#else /* not HAS_SETRESUID */
 #ifdef HAS_SETREUID
            (void)setreuid(uid,euid);
 #else /* not HAS_SETREUID */
@@ -1300,6 +1381,7 @@ PP(pp_aassign)
                delaymagic =~ DM_RUID;
            }
 #endif /* HAS_SETRUID */
+#endif /* HAS_SETRESUID */
 #ifdef HAS_SETEUID
            if ((delaymagic & DM_UID) == DM_EUID) {
                (void)seteuid(uid);
@@ -1316,15 +1398,22 @@ PP(pp_aassign)
            euid = (int)geteuid();
        }
        if (delaymagic & DM_GID) {
+#ifdef HAS_SETRESGID
+           (void)setresgid(gid,egid,(Gid_t)-1);
+#else /* not HAS_SETREGID */
 #ifdef HAS_SETREGID
            (void)setregid(gid,egid);
 #else /* not HAS_SETREGID */
+#endif /* not HAS_SETRESGID */
 #ifdef HAS_SETRGID
            if ((delaymagic & DM_GID) == DM_RGID) {
                (void)setrgid(gid);
                delaymagic =~ DM_RGID;
            }
 #endif /* HAS_SETRGID */
+#ifdef HAS_SETRESGID
+           (void)setresgid(gid,egid,(Gid_t)-1);
+#else /* not HAS_SETREGID */
 #ifdef HAS_SETEGID
            if ((delaymagic & DM_GID) == DM_EGID) {
                (void)setegid(gid);
@@ -1336,6 +1425,7 @@ PP(pp_aassign)
                    DIE("No setregid available");
                (void)setgid(gid);
            }
+#endif /* not HAS_SETRESGID */
 #endif /* not HAS_SETREGID */
            gid = (int)getgid();
            egid = (int)getegid();
@@ -1444,7 +1534,7 @@ PP(pp_undef)
        break;
     case SVt_PVCV:
        sub_generation++;
-       cv_clear((CV*)sv);
+       cv_undef((CV*)sv);
        break;
     default:
        if (sv != GvSV(defgv)) {
@@ -1691,13 +1781,6 @@ PP(pp_add)
     RETURN;
 }
 
-PP(pp_intadd)
-{
-    dSP; dATARGET; dPOPTOPiirl;
-    SETi( left + right );
-    RETURN;
-}
-
 PP(pp_subtract)
 {
     dSP; dATARGET; dPOPTOPnnrl;
@@ -1708,27 +1791,29 @@ PP(pp_subtract)
 PP(pp_concat)
 {
     dSP; dATARGET; dPOPTOPssrl;
-    SvSetSV(TARG, lstr);
-    sv_catsv(TARG, rstr);
+    STRLEN len;
+    char *s;
+    if (TARG != lstr) {
+       s = SvPV(lstr,len);
+       sv_setpvn(TARG,s,len);
+    }
+    s = SvPV(rstr,len);
+    sv_catpvn(TARG,s,len);
     SETTARG;
     RETURN;
 }
 
 PP(pp_left_shift)
 {
-    dSP; dATARGET;
-    I32 anum = POPi;
-    double value = TOPn;
-    SETi( U_L(value) << anum );
+    dSP; dATARGET; dPOPTOPiirl;
+    SETi( left << right );
     RETURN;
 }
 
 PP(pp_right_shift)
 {
-    dSP; dATARGET;
-    I32 anum = POPi;
-    double value = TOPn;
-    SETi( U_L(value) >> anum );
+    dSP; dATARGET; dPOPTOPiirl;
+    SETi( left >> right );
     RETURN;
 }
 
@@ -1839,13 +1924,12 @@ PP(pp_scmp)
     RETURN;
 }
 
-PP(pp_bit_and)
-{
+PP(pp_bit_and) {
     dSP; dATARGET; dPOPTOPssrl;
     if (SvNIOK(lstr) || SvNIOK(rstr)) {
-       I32 value = SvIV(lstr);
-       value = value & SvIV(rstr);
-       SETi(value);
+       unsigned long value = U_L(SvNV(lstr));
+       value = value & U_L(SvNV(rstr));
+       SETn((double)value);
     }
     else {
        do_vop(op->op_type, TARG, lstr, rstr);
@@ -1858,9 +1942,9 @@ PP(pp_xor)
 {
     dSP; dATARGET; dPOPTOPssrl;
     if (SvNIOK(lstr) || SvNIOK(rstr)) {
-       I32 value = SvIV(lstr);
-       value = value ^ SvIV(rstr);
-       SETi(value);
+       unsigned long value = U_L(SvNV(lstr));
+       value = value ^ U_L(SvNV(rstr));
+       SETn((double)value);
     }
     else {
        do_vop(op->op_type, TARG, lstr, rstr);
@@ -1873,9 +1957,9 @@ PP(pp_bit_or)
 {
     dSP; dATARGET; dPOPTOPssrl;
     if (SvNIOK(lstr) || SvNIOK(rstr)) {
-       I32 value = SvIV(lstr);
-       value = value | SvIV(rstr);
-       SETi(value);
+       unsigned long value = U_L(SvNV(lstr));
+       value = value | U_L(SvNV(rstr));
+       SETn((double)value);
     }
     else {
        do_vop(op->op_type, TARG, lstr, rstr);
@@ -1929,6 +2013,148 @@ PP(pp_complement)
     RETURN;
 }
 
+/* integer versions of some of the above */
+
+PP(pp_i_preinc)
+{
+    dSP; dTOPiv;
+    sv_setiv(TOPs, value + 1);
+    SvSETMAGIC(TOPs);
+    return NORMAL;
+}
+
+PP(pp_i_predec)
+{
+    dSP; dTOPiv;
+    sv_setiv(TOPs, value - 1);
+    SvSETMAGIC(TOPs);
+    return NORMAL;
+}
+
+PP(pp_i_postinc)
+{
+    dSP; dTARGET;
+    sv_setsv(TARG, TOPs);
+    sv_setiv(TOPs, SvIV(TOPs) + 1);
+    SvSETMAGIC(TOPs);
+    if (!SvOK(TARG))
+       sv_setiv(TARG, 0);
+    SETs(TARG);
+    return NORMAL;
+}
+
+PP(pp_i_postdec)
+{
+    dSP; dTARGET;
+    sv_setsv(TARG, TOPs);
+    sv_setiv(TOPs, SvIV(TOPs) - 1);
+    SvSETMAGIC(TOPs);
+    SETs(TARG);
+    return NORMAL;
+}
+
+PP(pp_i_multiply)
+{
+    dSP; dATARGET; dPOPTOPiirl;
+    SETi( left * right );
+    RETURN;
+}
+
+PP(pp_i_divide)
+{
+    dSP; dATARGET; dPOPiv;
+    if (value == 0)
+       DIE("Illegal division by zero");
+    value = POPi / value;
+    PUSHi( value );
+    RETURN;
+}
+
+PP(pp_i_modulo)
+{
+    dSP; dATARGET; dPOPTOPiirl;
+    SETi( left % right );
+    RETURN;
+}
+
+PP(pp_i_add)
+{
+    dSP; dATARGET; dPOPTOPiirl;
+    SETi( left + right );
+    RETURN;
+}
+
+PP(pp_i_subtract)
+{
+    dSP; dATARGET; dPOPTOPiirl;
+    SETi( left - right );
+    RETURN;
+}
+
+PP(pp_i_lt)
+{
+    dSP; dPOPTOPiirl;
+    SETs((left < right) ? &sv_yes : &sv_no);
+    RETURN;
+}
+
+PP(pp_i_gt)
+{
+    dSP; dPOPTOPiirl;
+    SETs((left > right) ? &sv_yes : &sv_no);
+    RETURN;
+}
+
+PP(pp_i_le)
+{
+    dSP; dPOPTOPiirl;
+    SETs((left <= right) ? &sv_yes : &sv_no);
+    RETURN;
+}
+
+PP(pp_i_ge)
+{
+    dSP; dPOPTOPiirl;
+    SETs((left >= right) ? &sv_yes : &sv_no);
+    RETURN;
+}
+
+PP(pp_i_eq)
+{
+    dSP; dPOPTOPiirl;
+    SETs((left == right) ? &sv_yes : &sv_no);
+    RETURN;
+}
+
+PP(pp_i_ne)
+{
+    dSP; dPOPTOPiirl;
+    SETs((left != right) ? &sv_yes : &sv_no);
+    RETURN;
+}
+
+PP(pp_i_ncmp)
+{
+    dSP; dTARGET; dPOPTOPiirl;
+    I32 value;
+
+    if (left > right)
+       value = 1;
+    else if (left < right)
+       value = -1;
+    else
+       value = 0;
+    SETi(value);
+    RETURN;
+}
+
+PP(pp_i_negate)
+{
+    dSP; dTARGET;
+    SETi(-TOPi);
+    RETURN;
+}
+
 /* High falutin' math. */
 
 PP(pp_atan2)
@@ -1995,7 +2221,7 @@ PP(pp_srand)
 {
     dSP;
     I32 anum;
-    time_t when;
+    Time_t when;
 
     if (MAXARG < 1) {
        (void)time(&when);
@@ -2171,7 +2397,7 @@ PP(pp_substr)
                if (SvREADONLY(sv) && curcop != &compiling)
                    DIE(no_modify);
                if (SvROK(sv))
-                   sv_unref(sv);
+                   DIE("Can't modify substr of a reference");
            }
            LvTYPE(TARG) = 's';
            LvTARG(TARG) = sv;
@@ -2227,7 +2453,7 @@ PP(pp_vec)
                if (SvREADONLY(src) && curcop != &compiling)
                    DIE(no_modify);
                if (SvROK(src))
-                   sv_unref(src);
+                   DIE("Can't modify vec of a reference");
            }
            LvTYPE(TARG) = 'v';
            LvTARG(TARG) = src;
@@ -2502,6 +2728,7 @@ PP(pp_formline)
     register char *send;
     register I32 arg;
     register SV *sv;
+    char *item;
     I32 itemsize;
     I32 fieldsize;
     I32 lines = 0;
@@ -2592,7 +2819,7 @@ PP(pp_formline)
            break;
 
        case FF_CHECKNL:
-           s = SvPV(sv, len);
+           item = s = SvPV(sv, len);
            itemsize = len;
            if (itemsize > fieldsize)
                itemsize = fieldsize;
@@ -2604,17 +2831,17 @@ PP(pp_formline)
                    break;
                s++;
            }
-           itemsize = s - SvPVX(sv);
+           itemsize = s - item;
            break;
 
        case FF_CHECKCHOP:
-           s = SvPV(sv, len);
+           item = s = SvPV(sv, len);
            itemsize = len;
            if (itemsize <= fieldsize) {
                send = chophere = s + itemsize;
                while (s < send) {
                    if (*s == '\r') {
-                       itemsize = s - SvPVX(sv);
+                       itemsize = s - item;
                        break;
                    }
                    if (*s++ & ~31)
@@ -2639,7 +2866,7 @@ PP(pp_formline)
                    }
                    s++;
                }
-               itemsize = chophere - SvPVX(sv);
+               itemsize = chophere - item;
            }
            break;
 
@@ -2664,7 +2891,7 @@ PP(pp_formline)
 
        case FF_ITEM:
            arg = itemsize;
-           s = SvPVX(sv);
+           s = item;
            while (arg--) {
                if ((*t++ = *s++) < ' ')
                    t[-1] = ' ';
@@ -2681,7 +2908,7 @@ PP(pp_formline)
            break;
 
        case FF_LINEGLOB:
-           s = SvPV(sv, len);
+           item = s = SvPV(sv, len);
            itemsize = len;
            if (itemsize) {
                gotsome = TRUE;
@@ -2695,7 +2922,7 @@ PP(pp_formline)
                    }
                }
                SvCUR_set(formtarget, t - SvPVX(formtarget));
-               sv_catpvn(formtarget, SvPVX(sv), itemsize);
+               sv_catpvn(formtarget, item, itemsize);
                SvGROW(formtarget, SvCUR(formtarget) + SvCUR(form) + 1);
                t = SvPVX(formtarget) + SvCUR(formtarget);
            }
@@ -2753,7 +2980,7 @@ PP(pp_formline)
            break;
 
        case FF_MORE:
-           if (SvCUROK(sv)) {
+           if (itemsize) {
                arg = fieldsize - itemsize;
                if (arg) {
                    fieldsize -= arg;
@@ -2958,7 +3185,9 @@ PP(pp_rv2av)
            if (SvTYPE(sv) != SVt_PVGV) {
                if (!SvOK(sv))
                    DIE(no_usym, "an array");
-               sv = (SV*)gv_fetchpv(SvPV(sv, na), TRUE);
+               if (op->op_private & HINT_STRICT_REFS)
+                   DIE(no_hardref, "an array");
+               sv = (SV*)gv_fetchpv(SvPV(sv, na), TRUE, SVt_PVAV);
            }
            av = GvAVn(sv);
            if (op->op_flags & OPf_LVAL) {
@@ -3007,7 +3236,7 @@ PP(pp_aelem)
        if (op->op_flags & OPf_INTRO)
            save_svref(svp);
        else if (!SvOK(*svp)) {
-           if (op->op_private == OP_RV2HV) {
+           if (op->op_private & OPpDEREF_HV) {
                SvREFCNT_dec(*svp);
                *svp = NEWSV(0,0);
                sv_upgrade(*svp, SVt_RV);
@@ -3015,7 +3244,7 @@ PP(pp_aelem)
                SvROK_on(*svp);
                ++sv_rvcount;
            }
-           else if (op->op_private == OP_RV2AV) {
+           else if (op->op_private & OPpDEREF_AV) {
                SvREFCNT_dec(*svp);
                *svp = NEWSV(0,0);
                sv_upgrade(*svp, SVt_RV);
@@ -3124,7 +3353,7 @@ PP(pp_rv2hv)
 
     HV *hv;
 
-    if (SvTYPE(sv) == SVt_RV) {
+    if (SvROK(sv)) {
        hv = (HV*)SvRV(sv);
        if (SvTYPE(hv) != SVt_PVHV)
            DIE("Not an associative array reference");
@@ -3147,7 +3376,9 @@ PP(pp_rv2hv)
            if (SvTYPE(sv) != SVt_PVGV) {
                if (!SvOK(sv))
                    DIE(no_usym, "a hash");
-               sv = (SV*)gv_fetchpv(SvPV(sv, na), TRUE);
+               if (op->op_private & HINT_STRICT_REFS)
+                   DIE(no_hardref, "a hash");
+               sv = (SV*)gv_fetchpv(SvPV(sv, na), TRUE, SVt_PVHV);
            }
            hv = GvHVn(sv);
            if (op->op_flags & OPf_LVAL) {
@@ -3192,7 +3423,7 @@ PP(pp_helem)
        if (op->op_flags & OPf_INTRO)
            save_svref(svp);
        else if (!SvOK(*svp)) {
-           if (op->op_private == OP_RV2HV) {
+           if (op->op_private & OPpDEREF_HV) {
                SvREFCNT_dec(*svp);
                *svp = NEWSV(0,0);
                sv_upgrade(*svp, SVt_RV);
@@ -3200,7 +3431,7 @@ PP(pp_helem)
                SvROK_on(*svp);
                ++sv_rvcount;
            }
-           else if (op->op_private == OP_RV2AV) {
+           else if (op->op_private & OPpDEREF_AV) {
                SvREFCNT_dec(*svp);
                *svp = NEWSV(0,0);
                sv_upgrade(*svp, SVt_RV);
@@ -4316,7 +4547,7 @@ PP(pp_split)
        oldstack = stack;
        SWITCHSTACK(stack, ary);
     }
-    base = SP - stack_base + 1;
+    base = SP - stack_base;
     orig = s;
     if (pm->op_pmflags & PMf_SKIPWHITE) {
        while (isSPACE(*s))
@@ -4324,7 +4555,7 @@ PP(pp_split)
     }
     if (!limit)
        limit = maxiters + 2;
-    if (strEQ("\\s+", rx->precomp)) {
+    if (pm->op_pmflags & PMf_WHITE) {
        while (--limit) {
            /*SUPPRESS 530*/
            for (m = s; m < strend && !isSPACE(*m); m++) ;
@@ -4457,7 +4688,6 @@ PP(pp_split)
        if (gimme == G_ARRAY)
            RETURN;
     }
-    SP = stack_base + base;
     GETTARGET;
     PUSHi(iters);
     RETURN;
@@ -4550,7 +4780,9 @@ PP(pp_anonlist)
 PP(pp_anonhash)
 {
     dSP; dMARK; dORIGMARK;
+    STRLEN len;
     HV* hv = newHV();
+
     SvREFCNT(hv) = 0;
     while (MARK < SP) {
        SV* key = *++MARK;
@@ -4558,8 +4790,8 @@ PP(pp_anonhash)
        SV *val = NEWSV(46, 0);
        if (MARK < SP)
            sv_setsv(val, *++MARK);
-       tmps = SvPVX(key);
-       (void)hv_store(hv,tmps,SvCUROK(key),val,0);
+       tmps = SvPV(key,len);
+       (void)hv_store(hv,tmps,len,val,0);
     }
     SP = ORIGMARK;
     SvOK_on(hv);
@@ -4911,6 +5143,7 @@ PP(pp_sort)
     }
 
     if (op->op_flags & OPf_STACKED) {
+       ENTER;
        if (op->op_flags & OPf_SPECIAL) {
            OP *kid = cLISTOP->op_first->op_sibling;    /* pass pushmark */
            kid = kUNOP->op_first;                      /* pass rv2gv */
@@ -4939,6 +5172,9 @@ PP(pp_sort)
            sortcop = CvSTART(cv);
            SAVESPTR(CvROOT(cv)->op_ppaddr);
            CvROOT(cv)->op_ppaddr = ppaddr[OP_NULL];
+           
+           SAVESPTR(curpad);
+           curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
        }
     }
     else {
@@ -4962,7 +5198,6 @@ PP(pp_sort)
        if (sortcop) {
            AV *oldstack;
 
-           ENTER;
            SAVETMPS;
            SAVESPTR(op);
 
@@ -4975,8 +5210,8 @@ PP(pp_sort)
            }
            SWITCHSTACK(stack, sortstack);
            if (sortstash != stash) {
-               firstgv = gv_fetchpv("a", TRUE);
-               secondgv = gv_fetchpv("b", TRUE);
+               firstgv = gv_fetchpv("a", TRUE, SVt_PV);
+               secondgv = gv_fetchpv("b", TRUE, SVt_PV);
                sortstash = stash;
            }
 
@@ -5307,7 +5542,7 @@ char *message;
        I32 gimme;
        SV **newsp;
 
-       sv_setpv(GvSV(gv_fetchpv("@",TRUE)),message);
+       sv_setpv(GvSV(gv_fetchpv("@",TRUE, SVt_PV)),message);
        cxix = dopoptoeval(cxstack_ix);
        if (cxix >= 0) {
            I32 optype;
@@ -5328,7 +5563,7 @@ char *message;
 
            LEAVE;
            if (optype == OP_REQUIRE)
-               DIE("%s", SvPVx(GvSV(gv_fetchpv("@",TRUE)), na));
+               DIE("%s", SvPVx(GvSV(gv_fetchpv("@",TRUE, SVt_PV)), na));
            return pop_return();
        }
     }
@@ -5406,7 +5641,7 @@ PP(pp_method)
        IO* io;
 
        if (!SvOK(sv) ||
-           !(iogv = gv_fetchpv(SvPVX(sv), FALSE)) ||
+           !(iogv = gv_fetchpv(SvPVX(sv), FALSE, SVt_PVIO)) ||
            !(ob=(SV*)GvIO(iogv)))
        {
            char *name = SvPVX(((SVOP*)cLOGOP->op_other)->op_sv);
@@ -5464,7 +5699,9 @@ PP(pp_entersubr)
        if (!SvROK(sv)) {
            if (!SvOK(sv))
                DIE(no_usym, "a subroutine");
-           gv = gv_fetchpv(SvPV(sv, na), FALSE);
+           if (op->op_private & HINT_STRICT_REFS)
+               DIE(no_hardref, "a subroutine");
+           gv = gv_fetchpv(SvPV(sv, na), FALSE, SVt_PVCV);
            if (!gv)
                cv = 0;
            else
@@ -5513,7 +5750,7 @@ PP(pp_entersubr)
        DIE("Undefined subroutine called");
     }
 
-    if ((op->op_private & OPpSUBR_DB) && !CvUSERSUB(cv)) {
+    if ((op->op_private & OPpDEREF_DB) && !CvUSERSUB(cv)) {
        sv = GvSV(DBsub);
        save_item(sv);
        gv = CvGV(cv);
@@ -5702,7 +5939,8 @@ PP(pp_caller)
 
        if (!dbargs) {
            GV* tmpgv;
-           dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE)));
+           dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
+                               SVt_PVAV)));
            SvMULTI_on(tmpgv);
            AvREAL_off(dbargs);
        }
@@ -5772,7 +6010,7 @@ PP(pp_warn)
        tmps = SvPV(TOPs, na);
     }
     if (!tmps || !*tmps) {
-       SV *error = GvSV(gv_fetchpv("@", TRUE));
+       SV *error = GvSV(gv_fetchpv("@", TRUE, SVt_PV));
        SvUPGRADE(error, SVt_PV);
        if (SvPOK(error) && SvCUR(error))
            sv_catpv(error, "\t...caught");
@@ -5798,7 +6036,7 @@ PP(pp_die)
        tmps = SvPV(TOPs, na);
     }
     if (!tmps || !*tmps) {
-       SV *error = GvSV(gv_fetchpv("@", TRUE));
+       SV *error = GvSV(gv_fetchpv("@", TRUE, SVt_PV));
        SvUPGRADE(error, SVt_PV);
        if (SvPOK(error) && SvCUR(error))
            sv_catpv(error, "\t...propagated");
@@ -5897,7 +6135,20 @@ PP(pp_enter)
 {
     dSP;
     register CONTEXT *cx;
-    I32 gimme = GIMME;
+    I32 gimme;
+
+    /*
+     * We don't just use the GIMME macro here because it assumes there's
+     * already a context, which ain't necessarily so at initial startup.
+     */
+
+    if (op->op_flags & OPf_KNOW)
+       gimme = op->op_flags & OPf_LIST;
+    else if (cxstack_ix >= 0)
+       gimme = cxstack[cxstack_ix].blk_gimme;
+    else
+       gimme = G_SCALAR;
+
     ENTER;
 
     SAVETMPS;
@@ -5916,7 +6167,14 @@ PP(pp_leave)
 
     POPBLOCK(cx);
 
-    if (GIMME == G_SCALAR) {
+    if (op->op_flags & OPf_KNOW)
+       gimme = op->op_flags & OPf_LIST;
+    else if (cxstack_ix >= 0)
+       gimme = cxstack[cxstack_ix].blk_gimme;
+    else
+       gimme = G_SCALAR;
+
+    if (gimme == G_SCALAR) {
        MARK = newsp + 1;
        if (MARK <= SP)
            if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
@@ -5950,8 +6208,13 @@ PP(pp_enteriter)
 {
     dSP; dMARK;
     register CONTEXT *cx;
-    SV **svp = &GvSV((GV*)POPs);
     I32 gimme = GIMME;
+    SV **svp;
+
+    if (op->op_targ)
+       svp = &curpad[op->op_targ];             /* "my" variable */
+    else
+       svp = &GvSV((GV*)POPs);                 /* symbol table variable */
 
     ENTER;
     SAVETMPS;
@@ -6072,11 +6335,11 @@ PP(pp_return)
        else
            *++newsp = &sv_undef;
        if (optype == OP_REQUIRE && !SvTRUE(*newsp))
-           DIE("%s", SvPVx(GvSV(gv_fetchpv("@",TRUE)), na));
+           DIE("%s", SvPVx(GvSV(gv_fetchpv("@",TRUE, SVt_PV)), na));
     }
     else {
        if (optype == OP_REQUIRE && MARK == SP)
-           DIE("%s", SvPVx(GvSV(gv_fetchpv("@",TRUE)), na));
+           DIE("%s", SvPVx(GvSV(gv_fetchpv("@",TRUE, SVt_PV)), na));
        while (MARK < SP)
            *++newsp = sv_mortalcopy(*++MARK);
     }
@@ -6708,6 +6971,8 @@ PP(pp_tie)
         run();
     SPAGAIN;
 
+    if (!sv_isobject(TOPs))
+       DIE("new didn't return an object");
     sv = TOPs;
     if (SvTYPE(varsv) == SVt_PVHV || SvTYPE(varsv) == SVt_PVAV)
        sv_magic(varsv, sv, 'P', 0, 0);
@@ -7032,13 +7297,13 @@ PP(pp_leavewrite)
                if (!IoFMT_NAME(io))
                    IoFMT_NAME(io) = savestr(GvNAME(gv));
                sprintf(tmpbuf, "%s_TOP", IoFMT_NAME(io));
-               topgv = gv_fetchpv(tmpbuf,FALSE);
+               topgv = gv_fetchpv(tmpbuf,FALSE, SVt_PVFM);
                if (topgv && GvFORM(topgv))
                    IoTOP_NAME(io) = savestr(tmpbuf);
                else
                    IoTOP_NAME(io) = savestr("top");
            }
-           topgv = gv_fetchpv(IoTOP_NAME(io),FALSE);
+           topgv = gv_fetchpv(IoTOP_NAME(io),FALSE, SVt_PVFM);
            if (!topgv || !GvFORM(topgv)) {
                IoLINES_LEFT(io) = 100000000;
                goto forget_top;
@@ -7103,16 +7368,16 @@ PP(pp_prtf)
        gv = defoutgv;
     if (!(io = GvIO(gv))) {
        if (dowarn)
-           warn("Filehandle never opened");
+           warn("Filehandle %s never opened", GvNAME(gv));
        errno = EBADF;
        goto just_say_no;
     }
     else if (!(fp = IoOFP(io))) {
        if (dowarn)  {
            if (IoIFP(io))
-               warn("Filehandle opened only for input");
+               warn("Filehandle %s opened only for input", GvNAME(gv));
            else
-               warn("printf on closed filehandle");
+               warn("printf on closed filehandle %s", GvNAME(gv));
        }
        errno = EBADF;
        goto just_say_no;
@@ -7151,16 +7416,16 @@ PP(pp_print)
        gv = defoutgv;
     if (!(io = GvIO(gv))) {
        if (dowarn)
-           warn("Filehandle never opened");
+           warn("Filehandle %s never opened", GvNAME(gv));
        errno = EBADF;
        goto just_say_no;
     }
     else if (!(fp = IoOFP(io))) {
        if (dowarn)  {
            if (IoIFP(io))
-               warn("Filehandle opened only for input");
+               warn("Filehandle %s opened only for input", GvNAME(gv));
            else
-               warn("print on closed filehandle");
+               warn("print on closed filehandle %s", GvNAME(gv));
        }
        errno = EBADF;
        goto just_say_no;
@@ -7248,12 +7513,14 @@ PP(pp_sysread)
        bufsize = sizeof buf;
        SvGROW(bufstr, length+1), (buffer = SvPV(bufstr, blen));  /* sneaky */
        length = recvfrom(fileno(IoIFP(io)), buffer, length, offset,
-           buf, &bufsize);
+           (struct sockaddr *)buf, &bufsize);
        if (length < 0)
            RETPUSHUNDEF;
        SvCUR_set(bufstr, length);
        *SvEND(bufstr) = '\0';
        SvPOK_only(bufstr);
+       if (tainting)
+           sv_magic(bufstr, 0, 't', 0, 0);
        SP = ORIGMARK;
        sv_setpvn(TARG, buf, bufsize);
        PUSHs(TARG);
@@ -7272,7 +7539,7 @@ PP(pp_sysread)
     if (IoTYPE(io) == 's') {
        bufsize = sizeof buf;
        length = recvfrom(fileno(IoIFP(io)), buffer+offset, length, 0,
-           buf, &bufsize);
+           (struct sockaddr *)buf, &bufsize);
     }
     else
 #endif
@@ -7282,6 +7549,8 @@ PP(pp_sysread)
     SvCUR_set(bufstr, length+offset);
     *SvEND(bufstr) = '\0';
     SvPOK_only(bufstr);
+    if (tainting)
+       sv_magic(bufstr, 0, 't', 0, 0);
     SP = ORIGMARK;
     PUSHi(length);
     RETURN;
@@ -7339,7 +7608,8 @@ PP(pp_send)
        if (SP > MARK)
            warn("Too many args on send");
        buffer = SvPVx(*++MARK, mlen);
-       length = sendto(fileno(IoIFP(io)), buffer, blen, length, buffer, mlen);
+       length = sendto(fileno(IoIFP(io)), buffer, blen, length,
+                               (struct sockaddr *)buffer, mlen);
     }
     else
        length = send(fileno(IoIFP(io)), buffer, blen, length);
@@ -7404,7 +7674,7 @@ PP(pp_seek)
 PP(pp_truncate)
 {
     dSP;
-    off_t len = (off_t)POPn;
+    Off_t len = (Off_t)POPn;
     int result = 1;
     GV *tmpgv;
 
@@ -7412,7 +7682,7 @@ PP(pp_truncate)
 #if defined(HAS_TRUNCATE) || defined(HAS_CHSIZE)
 #ifdef HAS_TRUNCATE
     if (op->op_flags & OPf_SPECIAL) {
-       tmpgv = gv_fetchpv(POPp,FALSE);
+       tmpgv = gv_fetchpv(POPp,FALSE, SVt_PVIO);
        if (!tmpgv || !GvIO(tmpgv) || !IoIFP(GvIO(tmpgv)) ||
          ftruncate(fileno(IoIFP(GvIO(tmpgv))), len) < 0)
            result = 0;
@@ -7421,7 +7691,7 @@ PP(pp_truncate)
        result = 0;
 #else
     if (op->op_flags & OPf_SPECIAL) {
-       tmpgv = gv_fetchpv(POPp,FALSE);
+       tmpgv = gv_fetchpv(POPp,FALSE, SVt_PVIO);
        if (!tmpgv || !GvIO(tmpgv) || !IoIFP(GvIO(tmpgv)) ||
          chsize(fileno(IoIFP(GvIO(tmpgv))), len) < 0)
            result = 0;
@@ -7663,7 +7933,7 @@ PP(pp_bind)
 
     addr = SvPV(addrstr, len);
     TAINT_PROPER("bind");
-    if (bind(fileno(IoIFP(io)), addr, len) >= 0)
+    if (bind(fileno(IoIFP(io)), (struct sockaddr *)addr, len) >= 0)
        RETPUSHYES;
     else
        RETPUSHUNDEF;
@@ -7693,7 +7963,7 @@ PP(pp_connect)
 
     addr = SvPV(addrstr, len);
     TAINT_PROPER("connect");
-    if (connect(fileno(IoIFP(io)), addr, len) >= 0)
+    if (connect(fileno(IoIFP(io)), (struct sockaddr *)addr, len) >= 0)
        RETPUSHYES;
     else
        RETPUSHUNDEF;
@@ -7904,11 +8174,11 @@ PP(pp_getpeername)
     fd = fileno(IoIFP(io));
     switch (optype) {
     case OP_GETSOCKNAME:
-       if (getsockname(fd, SvPVX(sv), (int*)&SvCUR(sv)) < 0)
+       if (getsockname(fd, (struct sockaddr *)SvPVX(sv), (int*)&SvCUR(sv)) < 0)
            goto nuts2;
        break;
     case OP_GETPEERNAME:
-       if (getpeername(fd, SvPVX(sv), (int*)&SvCUR(sv)) < 0)
+       if (getpeername(fd, (struct sockaddr *)SvPVX(sv), (int*)&SvCUR(sv)) < 0)
            goto nuts2;
        break;
     }
@@ -7991,7 +8261,7 @@ PP(pp_stat)
        PUSHs(sv_2mortal(newSViv((I32)statcache.st_atime)));
        PUSHs(sv_2mortal(newSViv((I32)statcache.st_mtime)));
        PUSHs(sv_2mortal(newSViv((I32)statcache.st_ctime)));
-#ifdef STATBLOCKS
+#ifdef USE_STAT_BLOCKS
        PUSHs(sv_2mortal(newSViv((I32)statcache.st_blksize)));
        PUSHs(sv_2mortal(newSViv((I32)statcache.st_blocks)));
 #else
@@ -8274,7 +8544,7 @@ PP(pp_fttty)
        tmps = "";
     }
     else
-       gv = gv_fetchpv(tmps = POPp, FALSE);
+       gv = gv_fetchpv(tmps = POPp, FALSE, SVt_PVIO);
     if (gv && GvIO(gv) && IoIFP(GvIO(gv)))
        fd = fileno(IoIFP(GvIO(gv)));
     else if (isDIGIT(*tmps))
@@ -8313,7 +8583,7 @@ PP(pp_fttext)
            io = GvIO(statgv);
        }
        if (io && IoIFP(io)) {
-#if defined(STDSTDIO) || defined(atarist) /* this will work with atariST */
+#if defined(USE_STD_STDIO) || defined(atarist) /* this will work with atariST */
            fstat(fileno(IoIFP(io)), &statcache);
            if (S_ISDIR(statcache.st_mode))     /* handle NFS glitch */
                if (op->op_type == OP_FTTEXT)
@@ -8688,8 +8958,8 @@ PP(pp_readdir)
 {
     dSP;
 #if defined(DIRENT) && defined(HAS_READDIR)
-#ifndef apollo
-    struct DIRENT *readdir();
+#ifndef I_DIRENT
+    struct DIRENT *readdir P((DIR *)); /* XXX is this *ever* needed? */
 #endif
     register struct DIRENT *dp;
     GV *gv = (GV*)POPs;
@@ -8700,7 +8970,7 @@ PP(pp_readdir)
 
     if (GIMME == G_ARRAY) {
        /*SUPPRESS 560*/
-       while (dp = readdir(IoDIRP(io))) {
+       while (dp = (struct DIRENT *)readdir(IoDIRP(io))) {
 #ifdef DIRNAMLEN
            XPUSHs(sv_2mortal(newSVpv(dp->d_name, dp->d_namlen)));
 #else
@@ -8709,7 +8979,7 @@ PP(pp_readdir)
        }
     }
     else {
-       if (!(dp = readdir(IoDIRP(io))))
+       if (!(dp = (struct DIRENT *)readdir(IoDIRP(io))))
            goto nope;
 #ifdef DIRNAMLEN
        XPUSHs(sv_2mortal(newSVpv(dp->d_name, dp->d_namlen)));
@@ -8838,7 +9108,7 @@ PP(pp_fork)
        RETSETUNDEF;
     if (!childpid) {
        /*SUPPRESS 560*/
-       if (tmpgv = gv_fetchpv("$", TRUE))
+       if (tmpgv = gv_fetchpv("$", TRUE, SVt_PV))
            sv_setiv(GvSV(tmpgv), (I32)getpid());
        hv_clear(pidstatus);    /* no kids, so don't wait for 'em */
     }
@@ -9085,7 +9355,7 @@ PP(pp_setpriority)
 PP(pp_time)
 {
     dSP; dTARGET;
-    XPUSHi( time(Null(long*)) );
+    XPUSHi( time(Null(Time_t*)) );
     RETURN;
 }
 
@@ -9097,7 +9367,7 @@ PP(pp_tms)
 {
     dSP;
 
-#ifdef MSDOS
+#if defined(MSDOS) || !defined(HAS_TIMES)
     DIE("times not implemented");
 #else
     EXTEND(SP, 4);
@@ -9122,7 +9392,7 @@ PP(pp_localtime)
 PP(pp_gmtime)
 {
     dSP;
-    time_t when;
+    Time_t when;
     struct tm *tmbuf;
     static char *dayname[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
     static char *monname[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
@@ -9131,7 +9401,7 @@ PP(pp_gmtime)
     if (MAXARG < 1)
        (void)time(&when);
     else
-       when = (time_t)SvIVx(POPs);
+       when = (Time_t)SvIVx(POPs);
 
     if (op->op_type == OP_LOCALTIME)
        tmbuf = localtime(&when);
@@ -9194,8 +9464,8 @@ PP(pp_sleep)
     dSP; dTARGET;
     char *tmps;
     I32 duration;
-    time_t lasttime;
-    time_t when;
+    Time_t lasttime;
+    Time_t when;
 
     (void)time(&lasttime);
     if (MAXARG < 1)
@@ -9417,7 +9687,7 @@ doeval()
        lex_end();
        LEAVE;
        if (optype == OP_REQUIRE)
-           DIE("%s", SvPVx(GvSV(gv_fetchpv("@",TRUE)), na));
+           DIE("%s", SvPVx(GvSV(gv_fetchpv("@",TRUE, SVt_PV)), na));
        rs = nrs;
        rslen = nrslen;
        rschar = nrschar;
@@ -9437,7 +9707,7 @@ doeval()
 
     /* compiled okay, so do it */
 
-    sv_setpv(GvSV(gv_fetchpv("@",TRUE)),"");
+    sv_setpv(GvSV(gv_fetchpv("@",TRUE, SVt_PV)),"");
     RETURNOP(eval_start);
 }
 
@@ -9515,6 +9785,10 @@ PP(pp_require)
        RETPUSHUNDEF;
     }
 
+    /* Assume success here to prevent recursive requirement. */
+    (void)hv_store(GvHVn(incgv), name, strlen(name),
+       newSVsv(GvSV(compiling.cop_filegv)), 0 );
+
     ENTER;
     SAVETMPS;
     lex_start(sv_2mortal(newSVpv("",0)));
@@ -9609,17 +9883,18 @@ PP(pp_leaveeval)
     if (optype != OP_ENTEREVAL) {
        char *name = cx->blk_eval.old_name;
 
-       if (gimme == G_SCALAR ? SvTRUE(*sp) : sp > newsp) {
-           (void)hv_store(GvHVn(incgv), name,
-             strlen(name), newSVsv(GvSV(curcop->cop_filegv)), 0 );
+       if (!(gimme == G_SCALAR ? SvTRUE(*sp) : sp > newsp)) {
+           /* Unassume the success we assumed earlier. */
+           (void)hv_delete(GvHVn(incgv), name, strlen(name));
+
+           if (optype == OP_REQUIRE)
+               retop = die("%s did not return a true value", name);
        }
-       else if (optype == OP_REQUIRE)
-           retop = die("%s did not return a true value", name);
     }
 
     lex_end();
     LEAVE;
-    sv_setpv(GvSV(gv_fetchpv("@",TRUE)),"");
+    sv_setpv(GvSV(gv_fetchpv("@",TRUE, SVt_PV)),"");
 
     RETURNOP(retop);
 }
@@ -9657,7 +9932,7 @@ PP(pp_entertry)
     eval_root = op;            /* Only needed so that goto works right. */
 
     in_eval = 1;
-    sv_setpv(GvSV(gv_fetchpv("@",TRUE)),"");
+    sv_setpv(GvSV(gv_fetchpv("@",TRUE, SVt_PV)),"");
     RETURN;
 }
 
@@ -9696,7 +9971,7 @@ PP(pp_leavetry)
     }
 
     LEAVE;
-    sv_setpv(GvSV(gv_fetchpv("@",TRUE)),"");
+    sv_setpv(GvSV(gv_fetchpv("@",TRUE, SVt_PV)),"");
     RETURN;
 }
 
@@ -10148,9 +10423,6 @@ PP(pp_gpwent)
     I32 which = op->op_type;
     register AV *ary = stack;
     register SV *sv;
-    struct passwd *getpwnam();
-    struct passwd *getpwuid();
-    struct passwd *getpwent();
     struct passwd *pwent;
 
     if (which == OP_GPWNAM)
@@ -10158,7 +10430,7 @@ PP(pp_gpwent)
     else if (which == OP_GPWUID)
        pwent = getpwuid(POPi);
     else
-       pwent = getpwent();
+       pwent = (struct passwd *)getpwent();
 
     EXTEND(SP, 10);
     if (GIMME != G_ARRAY) {
@@ -10265,9 +10537,6 @@ PP(pp_ggrent)
     I32 which = op->op_type;
     register char **elem;
     register SV *sv;
-    struct group *getgrnam();
-    struct group *getgrgid();
-    struct group *getgrent();
     struct group *grent;
 
     if (which == OP_GGRNAM)
@@ -10275,7 +10544,7 @@ PP(pp_ggrent)
     else if (which == OP_GGRGID)
        grent = getgrgid(POPi);
     else
-       grent = getgrent();
+       grent = (struct group *)getgrent();
 
     EXTEND(SP, 4);
     if (GIMME != G_ARRAY) {
@@ -10440,3 +10709,4 @@ PP(pp_syscall)
     DIE(no_func, "syscall");
 #endif
 }
+
diff --git a/pp.h b/pp.h
index 84ca50f..502ced0 100644 (file)
--- a/pp.h
+++ b/pp.h
                                sp = stack_base + AvFILL(t);            \
                                stack = t;
 
-/* XXX need to diffentiate on marked operators? */
-#define FETCH_GV(s)  PUTBACK, s = fetch_gv(op,1), SPAGAIN
-#define FETCH_GV1(s) PUTBACK, s = fetch_gv(op,1), SPAGAIN
-#define FETCH_GV2(s) PUTBACK, s = fetch_gv(op,2), SPAGAIN
-#define FETCH_IO(s)  PUTBACK, s = fetch_io(op,1), SPAGAIN
-#define FETCH_IO1(s) PUTBACK, s = fetch_io(op,1), SPAGAIN
-#define FETCH_IO2(s) PUTBACK, s = fetch_io(op,2), SPAGAIN
-
 #define ENTER push_scope()
 #define LEAVE pop_scope()
 
 #define SAVEINT(i) save_int((int*)(&i));
-#define SAVEI32(i) save_int((I32*)(&i));
-#define SAVELONG(l) save_int((long*)(&l));
+#define SAVEI32(i) save_I32((I32*)(&i));
+#define SAVELONG(l) save_long((long*)(&l));
 #define SAVESPTR(s) save_sptr((SV**)(&s))
+#define SAVEPPTR(s) save_pptr((char**)(&s))
 #define SAVETMPS save_int(&tmps_floor), tmps_floor = tmps_ix
 #define SAVEFREESV(s) save_freesv((SV*)(s))
 #define SAVEFREEOP(o) save_freeop((OP*)(o))
diff --git a/predump b/predump
deleted file mode 100644 (file)
index 272c373..0000000
--- a/predump
+++ /dev/null
@@ -1,41 +0,0 @@
-    SV *sv;
-    GV* tmpgv;
-
-    /* initialize everything that won't change if we undump */
-
-    if (siggv = gv_fetchpv("SIG",allgvs)) {
-       HV *hv;
-       SvMULTI_on(siggv);
-       hv = GvHVn(siggv);
-       hv_magic(hv, siggv, 'S');
-
-       /* initialize signal stack */
-        signalstack = newAV();
-        av_store(signalstack, 32, Nullsv);
-        av_clear(signalstack);
-        AvREAL_off(signalstack);
-    }
-
-    magicalize("!#?^~=-%.+&*()<>,\\/[|`':\004\t\020\024\027\006");
-
-    ampergv = gv_fetchpv("&",allgvs);
-    leftgv = gv_fetchpv("`",allgvs);
-    rightgv = gv_fetchpv("'",allgvs);
-    sawampersand = (ampergv || leftgv || rightgv);
-    if (tmpgv = gv_fetchpv(":",allgvs))
-       sv_setpv(GvSV(tmpgv),chopset);
-
-    /* these aren't necessarily magical */
-    if (tmpgv = gv_fetchpv("\014",allgvs)) {
-       sv_setpv(GvSV(tmpgv),"\f");
-       formfeed = GvSV(tmpgv);
-    }
-    if (tmpgv = gv_fetchpv(";",allgvs))
-       sv_setpv(GvSV(tmpgv),"\034");
-    if (tmpgv = gv_fetchpv("]",allgvs)) {
-       sv = GvSV(tmpgv);
-       sv_upgrade(sv, SVt_PVNV);
-       sv_setpv(sv,rcsid);
-       SvNV(sv) = atof(patchlevel);
-       SvNOK_on(sv);
-    }
diff --git a/proto.h b/proto.h
index 00c31c8..0d2270b 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -10,7 +10,6 @@ void  av_clear P((AV* ar));
 AV*    av_fake P((I32 size, SV** svp));
 SV**   av_fetch P((AV* ar, I32 key, I32 lval));
 void   av_fill P((AV* ar, I32 fill));
-void   av_free P((AV* ar));
 I32    av_len P((AV* ar));
 AV*    av_make P((I32 size, SV** svp));
 SV*    av_pop P((AV* ar));
@@ -23,7 +22,7 @@ void  av_unshift P((AV* ar, I32 num));
 OP*    bind_match P((I32 type, OP* left, OP* pat));
 OP*    block_head P((OP* o, OP** startp));
 int    boot_DB_File P((int ix, int sp, int items));
-int    boot_DynamicLoader P((void));
+/* int boot_DynamicLoader P((void)); */
 int    boot_NDBM_File P((int ix, int sp, int items));
 int    boot_GDBM_File P((int ix, int sp, int items));
 int    boot_SDBM_File P((int ix, int sp, int items));
@@ -33,8 +32,8 @@ int   boot_POSIX P((int ix, int sp, int items));
 void   calllist P((AV* list));
 I32    cando P((I32 bit, I32 effective, struct stat* statbufp));
 U32    cast_ulong P((double f));
-void   checkcomma P((char* s, char* name, char* what));
-I32    chsize P((int fd, off_t length));
+static void    checkcomma P((char* s, char* name, char* what));
+I32    chsize P((int fd, Off_t length));
 OP*    convert P((I32 optype, I32 flags, OP* op));
 OP*    cop_to_arg P((OP* cmd));
 I32    copyopt P((OP* cmd, OP* which));
@@ -43,7 +42,7 @@ char* cpytill P((char* to, char* from, char* fromend, I32 delim, I32* retlen));
 void   croak P((char* pat,...));
 void   cryptfilter P((FILE* fil));
 void   cryptswitch P((void));
-void   cv_clear P((CV* cv));
+void   cv_undef P((CV* cv));
 void   deb P((char* pat,...));
 void   deb_growlevel P((void));
 OP*    die P((char* pat,...));
@@ -81,6 +80,7 @@ void  dump_cop P((OP* cmd, OP* alt));
 void   dump_eval P((void));
 int    dump_fds P((char* s));
 void   dump_flags P((char* b, U32 flags));
+void   dump_form P((GV* gv));
 void   dump_gv P((GV* gv));
 void   dump_op P((OP* arg));
 void   dump_pm P((PMOP* pm));
@@ -88,12 +88,10 @@ void        dump_packsubs P((HV* stash));
 void   dump_sub P((GV* gv));
 void   fbm_compile P((SV* sv, I32 iflag));
 char*  fbm_instr P((unsigned char* big, unsigned char* bigend, SV* littlesv));
-IO*    fetch_io P((OP* op, I32 num));
-GV*    fetch_gv P((OP* op, I32 num));
 HV*    fetch_stash P((SV* sv, I32 create));
 OP*    flatten P((OP* arg));
-void   force_ident P((char* s));
-char*  force_word P((char* start, int token, int check_keyword, int allow_tick));
+static void    force_ident P((char* s));
+static char*   force_word P((char* start, int token, int check_keyword, int allow_tick));
 OP*    forcelist P((OP* arg));
 void   free_tmps P((void));
 OP*    gen_constant_list P((OP* op));
@@ -106,7 +104,7 @@ void        gv_check P((HV* stash));
 void   gv_efullname P((SV* sv, GV* gv));
 GV*    gv_fetchfile P((char* name));
 GV*    gv_fetchmethod P((HV* stash, char* name));
-GV*    gv_fetchpv P((char* name, I32 add));
+GV*    gv_fetchpv P((char* name, I32 add, I32 svtype));
 void   gv_fullname P((SV* sv, GV* gv));
 STRLEN gv_len P((SV* sv));
 SV*    gv_str P((SV* sv));
@@ -117,7 +115,6 @@ void        hoistmust P((PMOP* pm));
 void   hv_clear P((HV* tb));
 SV*    hv_delete P((HV* tb, char* key, U32 klen));
 SV**   hv_fetch P((HV* tb, char* key, U32 klen, I32 lval));
-void   hv_free P((HV* tb));
 I32    hv_iterinit P((HV* tb));
 char*  hv_iterkey P((HE* entry, I32* retlen));
 HE*    hv_iternext P((HV* tb));
@@ -141,6 +138,7 @@ OP* localize P((OP* arg, I32 lexical));
 I32    looks_like_number P((SV* sv));
 OP*    loopscope P((OP* o));
 I32    lop P((I32 f, char* s));
+int    magic_clearenv  P((SV* sv, MAGIC* mg));
 int    magic_clearpack P((SV* sv, MAGIC* mg));
 int    magic_get       P((SV* sv, MAGIC* mg));
 int    magic_getarylen P((SV* sv, MAGIC* mg));
@@ -180,7 +178,9 @@ void        mg_magical P((SV* sv));
 int    mg_set P((SV* sv));
 OP*    mod P((OP* op, I32 type));
 char*  moreswitches P((char* s));
+#ifdef MSTATS
 void   mstats P((char* s));
+#endif
 char*  my_bcopy P((char* from, char* to, I32 len));
 char*  my_bzero P((char* loc, I32 len));
 void   my_exit P((I32 status));
@@ -290,8 +290,12 @@ void       run_format P((struct Outrec* orec, FF* fcmd));
 #ifndef safemalloc
 void   safefree P((char* where));
 char*  safemalloc P((MEM_SIZE size));
+#ifndef MSDOS
+char*  saferealloc P((char* where, MEM_SIZE size));
+#else
 char*  saferealloc P((char* where, unsigned long size));
 #endif
+#endif
 void   safexfree P((char* where));
 char*  safexmalloc P((I32 x, MEM_SIZE size));
 char*  safexrealloc P((char* where, MEM_SIZE size));
@@ -320,24 +324,24 @@ OP*       scalar P((OP* o));
 OP*    scalarkids P((OP* op));
 OP*    scalarseq P((OP* o));
 OP*    scalarvoid P((OP* op));
-char*  scan_formline P((char* s));
+static char*   scan_formline P((char* s));
 unsigned long  scan_hex P((char* start, I32 len, I32* retlen));
-char*  scan_heredoc P((char* s));
-char*  scan_inputsymbol P((char* s));
-char*  scan_ident P((char* s, char* send, char* dest, I32 ck_uni));
+static char*   scan_heredoc P((char* s));
+static char*   scan_inputsymbol P((char* s));
+static char*   scan_ident P((char* s, char* send, char* dest, I32 ck_uni));
 char*  scan_num P((char* s));
 unsigned long  scan_oct P((char* start, I32 len, I32* retlen));
-char*  scan_pat P((char* s));
+static char*   scan_pat P((char* s));
 void   scan_prefix P((PMOP* pm, char* string, I32 len));
-char*  scan_str P((char* start));
-char*  scan_subst P((char* start));
-char*  scan_trans P((char* start));
-char*  scan_word P((char* s, char* dest, int allow_package, STRLEN *slp));
+static char*   scan_str P((char* start));
+static char*   scan_subst P((char* start));
+static char*   scan_trans P((char* start));
+static char*   scan_word P((char* s, char* dest, int allow_package, STRLEN *slp));
 OP*    scope P((OP* o));
 char*  screaminstr P((SV* bigsv, SV* littlesv));
 I32    setenv_getix P((char* nam));
 VOIDRET sighandler P((I32 sig));
-char*  skipspace P((char* s));
+static char*   skipspace P((char* s));
 int    start_subparse P((void));
 bool   sv_2bool P((SV* sv));
 CV*    sv_2cv P((SV* sv, HV** st, GV** gvp, I32 lref));
@@ -345,7 +349,6 @@ I32 sv_2iv P((SV* sv));
 SV*    sv_2mortal P((SV* sv));
 double sv_2nv P((SV* sv));
 char*  sv_2pv P((SV* sv, STRLEN* lp));
-char*  sv_append_till P((SV* sv, char* from, char* fromend, I32 delim, char* keeplist));
 int    sv_backoff P((SV* sv));
 void   sv_catpv P((SV* sv, char* ptr));
 void   sv_catpvn P((SV* sv, char* ptr, STRLEN len));
@@ -370,6 +373,8 @@ void        sv_inc P((SV* sv));
 void   sv_insert P((SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen));
 SV*    sv_interp P((SV* sv, SV* src, I32 sp));
 void   sv_intrpcompile P((SV* src));
+int    sv_isa P((SV* sv, char* name));
+int    sv_isobject P((SV* sv));
 STRLEN sv_len P((SV* sv));
 void   sv_magic P((SV* sv, SV* obj, char how, char* name, I32 namlen));
 SV*    sv_mortalcopy P((SV* oldsv));
diff --git a/re_tests b/re_tests
deleted file mode 100644 (file)
index deda458..0000000
--- a/re_tests
+++ /dev/null
@@ -1 +0,0 @@
-'multiple words'i      MULTIPLE WORDS, YEAH    y       $&      MULTIPLE WORDS
diff --git a/run.c b/run.c
index eb32302..371717a 100644 (file)
--- a/run.c
+++ b/run.c
@@ -31,13 +31,6 @@ run() {
 #endif
 
 I32
-getgimme(op)
-OP *op;
-{
-    return cxstack[cxstack_ix].blk_gimme;
-}
-
-I32
 debop(op)
 OP *op;
 {
diff --git a/save_ary.bad b/save_ary.bad
deleted file mode 100644 (file)
index 807e339..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-AV *
-save_ary(av)
-AV *av;
-{
-    register SV *sv;
-
-    sv = NEWSV(10,0);
-    sv->sv_state = SVs_SARY;
-    sv_setpv(sv, (char*)av, sizeof(AV));
-
-    av->av_sv.sv_rare = AVf_REAL;
-    av->av_magic = NEWSV(7,0);
-    av->av_alloc = av->av_array = 0;
-    /* sv_magic(av->av_magic, gv, '#', Nullch, 0); */
-    av->av_max = av->av_fill = -1;
-
-    sv->sv_u.sv_av = av;
-    (void)av_push(savestack,sv); /* save array ptr */
-    return av;
-}
-
-HV *
-save_hash(hv)
-HV *hv;
-{
-    register SV *sv;
-
-    sv = NEWSV(11,0);
-    sv->sv_state = SVs_SHASH;
-    sv_setpv(sv, (char*)hv, sizeof(HV));
-
-    hv->hv_array = 0;
-    hv->hv_max = 7;
-    hv->hv_dosplit = hv->hv_max * FILLPCT / 100;
-    hv->hv_fill = 0;
-#ifdef SOME_DBM
-    hv->hv_dbm = 0;
-#endif
-    (void)hv_iterinit(hv);      /* so each() will start off right */
-
-    sv->sv_u.sv_hv = hv;
-    (void)av_push(savestack,sv); /* save hash ptr */
-    return hv;
-}
diff --git a/scope.c b/scope.c
index 2575e56..c52e099 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -96,6 +96,8 @@ GV *gv;
     sv = GvSV(gv) = NEWSV(0,0);
     if (SvTYPE(osv) >= SVt_PVMG && SvMAGIC(osv)) {
        sv_upgrade(sv, SvTYPE(osv));
+       mg_get(osv);
+       SvFLAGS(osv) |= (SvFLAGS(osv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
        SvMAGIC(sv) = SvMAGIC(osv);
        localizing = TRUE;
        SvSETMAGIC(sv);
@@ -200,6 +202,16 @@ int *intp;
 }
 
 void
+save_long(longp)
+long *longp;
+{
+    SSCHECK(3);
+    SSPUSHLONG(*longp);
+    SSPUSHPTR(longp);
+    SSPUSHINT(SAVEt_LONG);
+}
+
+void
 save_I32(intp)
 I32 *intp;
 {
@@ -209,6 +221,19 @@ I32 *intp;
     SSPUSHINT(SAVEt_I32);
 }
 
+/* Cannot use save_sptr() to store a char* since the SV** cast will
+ * force word-alignment and we'll miss the pointer.
+ */
+void
+save_pptr(pptr)
+char **pptr;
+{
+    SSCHECK(3);
+    SSPUSHPTR(*pptr);
+    SSPUSHPTR(pptr);
+    SSPUSHINT(SAVEt_PPTR);
+}
+
 void
 save_sptr(sptr)
 SV **sptr;
@@ -233,7 +258,7 @@ save_hptr(hptr)
 HV **hptr;
 {
     SSCHECK(3);
-    SSPUSHINT(*hptr);
+    SSPUSHPTR(*hptr);
     SSPUSHPTR(hptr);
     SSPUSHINT(SAVEt_HPTR);
 }
@@ -243,7 +268,7 @@ save_aptr(aptr)
 AV **aptr;
 {
     SSCHECK(3);
-    SSPUSHINT(*aptr);
+    SSPUSHPTR(*aptr);
     SSPUSHPTR(aptr);
     SSPUSHINT(SAVEt_APTR);
 }
@@ -340,8 +365,10 @@ I32 base;
            value = (SV*)SSPOPPTR;
            gv = (GV*)SSPOPPTR;
            sv = GvSV(gv);
-           if (SvTYPE(sv) >= SVt_PVMG)
+           if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
+               SvMAGIC(value) = SvMAGIC(sv);
                SvMAGIC(sv) = 0;
+           }
             SvREFCNT_dec(sv);
             GvSV(gv) = sv = value;
            SvSETMAGIC(sv);
@@ -371,6 +398,10 @@ I32 base;
            ptr = SSPOPPTR;
            *(int*)ptr = (int)SSPOPINT;
            break;
+       case SAVEt_LONG:                        /* long reference */
+           ptr = SSPOPPTR;
+           *(long*)ptr = (long)SSPOPLONG;
+           break;
        case SAVEt_I32:                         /* I32 reference */
            ptr = SSPOPPTR;
            *(I32*)ptr = (I32)SSPOPINT;
@@ -379,6 +410,10 @@ I32 base;
            ptr = SSPOPPTR;
            *(SV**)ptr = (SV*)SSPOPPTR;
            break;
+       case SAVEt_PPTR:                        /* char* reference */
+           ptr = SSPOPPTR;
+           *(char**)ptr = (char*)SSPOPPTR;
+           break;
        case SAVEt_HPTR:                        /* HV* reference */
            ptr = SSPOPPTR;
            *(HV**)ptr = (HV*)SSPOPPTR;
@@ -432,7 +467,7 @@ I32 base;
                    break;
                case SVt_PVCV:
                    sub_generation++;
-                   cv_clear((CV*)sv);
+                   cv_undef((CV*)sv);
                    break;
                default:
                    if (SvPOK(sv) && SvLEN(sv))
diff --git a/scope.h b/scope.h
index e2e2004..7699d54 100644 (file)
--- a/scope.h
+++ b/scope.h
@@ -3,23 +3,27 @@
 #define SAVEt_AV       2
 #define SAVEt_HV       3
 #define SAVEt_INT      4
-#define SAVEt_I32      5
-#define SAVEt_SPTR     6
-#define SAVEt_HPTR     7
+#define SAVEt_LONG     5
+#define SAVEt_I32      6
+#define SAVEt_SPTR     7
 #define SAVEt_APTR     8
-#define SAVEt_NSTAB    9
-#define SAVEt_SVREF    10
-#define SAVEt_GP       11
-#define SAVEt_FREESV   12
-#define SAVEt_FREEOP   13
-#define SAVEt_FREEPV   14
-#define SAVEt_CLEARSV  15
-#define SAVEt_DELETE   16
+#define SAVEt_HPTR     9
+#define SAVEt_PPTR     10
+#define SAVEt_NSTAB    11
+#define SAVEt_SVREF    12
+#define SAVEt_GP       13
+#define SAVEt_FREESV   14
+#define SAVEt_FREEOP   15
+#define SAVEt_FREEPV   16
+#define SAVEt_CLEARSV  17
+#define SAVEt_DELETE   18
 
 #define SSCHECK(need) if (savestack_ix + need > savestack_max) savestack_grow()
 #define SSPUSHINT(i) (savestack[savestack_ix++].any_i32 = (I32)(i))
+#define SSPUSHLONG(i) (savestack[savestack_ix++].any_long = (long)(i))
 #define SSPUSHPTR(p) (savestack[savestack_ix++].any_ptr = (void*)(p))
 #define SSPOPINT (savestack[--savestack_ix].any_i32)
+#define SSPOPLONG (savestack[--savestack_ix].any_long)
 #define SSPOPPTR (savestack[--savestack_ix].any_ptr)
 
 #define FREE_TMPS() if (tmps_ix > tmps_floor) free_tmps()
diff --git a/sortfunc b/sortfunc
deleted file mode 100755 (executable)
index fe9971f..0000000
--- a/sortfunc
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/perl
-
-print sort byfuncname <>;
-
-sub byfuncname {
-    ($A) = $a =~ /\b(\w+) P\(/;
-    ($B) = $b =~ /\b(\w+) P\(/;
-    $A cmp $B;
-}
diff --git a/sv.c b/sv.c
index 152a767..fce9feb 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -82,6 +82,7 @@ more_sv()
     register SV* svend;
     sv_root = (SV*)safemalloc(1012);
     sv = sv_root;
+    Zero(sv, 1012, char);
     svend = &sv[1008 / sizeof(SV) - 1];
     while (sv < svend) {
        SvANY(sv) = (SV*)(sv + 1);
@@ -127,6 +128,8 @@ sv_clean_refs()
                SvFLAGS(SvRV(sv)) |= SVf_BREAK;
                SvFLAGS(sv) |= SVf_BREAK;
                SvREFCNT_dec(sv);
+               assert(sv_root == sv);
+               sv_root = (SV*)SvANY(sv);       /* MUST NOT REUSE */
            }
            ++sv;
        }
@@ -157,10 +160,13 @@ static XPVIV* more_xiv();
 static XPVIV*
 new_xiv()
 {
-    I32* xiv;
+    I32** xiv;
     if (xiv_root) {
        xiv = xiv_root;
-       xiv_root = *(I32**)xiv;
+       /*
+        * See comment in more_xiv() -- RAM.
+        */
+       xiv_root = (I32**)*xiv;
        return (XPVIV*)((char*)xiv - sizeof(XPV));
     }
     return more_xiv();
@@ -170,26 +176,25 @@ static void
 del_xiv(p)
 XPVIV* p;
 {
-    I32* xiv = (I32*)((char*)(p) + sizeof(XPV));
-    *(I32**)xiv = xiv_root;
+    I32** xiv = (I32**)((char*)(p) + sizeof(XPV));
+    *xiv = (I32 *)xiv_root;
     xiv_root = xiv;
 }
 
 static XPVIV*
 more_xiv()
 {
-    register int i;
-    register I32* xiv;
-    register I32* xivend;
-    xiv = (I32*)safemalloc(1008);
-    xivend = &xiv[1008 / sizeof(I32) - 1];
-    xiv += (sizeof(XPV) - 1) / sizeof(I32) + 1;   /* fudge by size of XPV */
+    register I32** xiv;
+    register I32** xivend;
+    xiv = (I32**)safemalloc(1008);
+    xivend = &xiv[1008 / sizeof(I32 *) - 1];
+    xiv += (sizeof(XPV) - 1) / sizeof(I32 *) + 1;   /* fudge by size of XPV */
     xiv_root = xiv;
     while (xiv < xivend) {
-       *(I32**)xiv = (I32*)(xiv + 1); /* XXX busted on Alpha? */
+       *xiv = (I32 *)(xiv + 1);
        xiv++;
     }
-    *(I32**)xiv = 0;
+    *xiv = 0;
     return new_xiv();
 }
 
@@ -338,7 +343,7 @@ more_xpv()
 #define new_XIV() (void*)safemalloc(sizeof(XPVIV))
 #define del_XIV(p) free((char*)p)
 #else
-#define new_XIV() new_xiv()
+#define new_XIV() (void*)new_xiv()
 #define del_XIV(p) del_xiv(p)
 #endif
 
@@ -346,7 +351,7 @@ more_xpv()
 #define new_XNV() (void*)safemalloc(sizeof(XPVNV))
 #define del_XNV(p) free((char*)p)
 #else
-#define new_XNV() new_xnv()
+#define new_XNV() (void*)new_xnv()
 #define del_XNV(p) del_xnv(p)
 #endif
 
@@ -354,7 +359,7 @@ more_xpv()
 #define new_XRV() (void*)safemalloc(sizeof(XRV))
 #define del_XRV(p) free((char*)p)
 #else
-#define new_XRV() new_xrv()
+#define new_XRV() (void*)new_xrv()
 #define del_XRV(p) del_xrv(p)
 #endif
 
@@ -362,7 +367,7 @@ more_xpv()
 #define new_XPV() (void*)safemalloc(sizeof(XPV))
 #define del_XPV(p) free((char*)p)
 #else
-#define new_XPV() new_xpv()
+#define new_XPV() (void*)new_xpv()
 #define del_XPV(p) del_xpv(p)
 #endif
 
@@ -673,9 +678,9 @@ U32 mt;
        IoIFP(sv)       = 0;
        IoOFP(sv)       = 0;
        IoDIRP(sv)      = 0;
-       IoLINES(sv)     = 60;
+       IoLINES(sv)     = 0;
        IoPAGE(sv)      = 0;
-       IoPAGE_LEN(sv)  = 0;
+       IoPAGE_LEN(sv)  = 60;
        IoLINES_LEFT(sv)= 0;
        IoTOP_NAME(sv)  = 0;
        IoTOP_GV(sv)    = 0;
@@ -846,7 +851,7 @@ unsigned long newlen;
     else
        s = SvPVX(sv);
     if (newlen > SvLEN(sv)) {          /* need more room? */
-        if (SvLEN(sv))
+        if (SvLEN(sv) && s)
            Renew(s,newlen,char);
         else
            New(703,s,newlen,char);
@@ -1615,7 +1620,7 @@ sv_magic(register SV *sv, SV *obj, char how, char *name, I32 namlen)
     MAGIC* mg;
     
     if (SvTHINKFIRST(sv)) {
-       if (SvREADONLY(sv) && curcop != &compiling)
+       if (SvREADONLY(sv) && curcop != &compiling && !strchr("gB", how))
            croak(no_modify);
     }
     if (SvMAGICAL(sv)) {
@@ -1632,8 +1637,10 @@ sv_magic(register SV *sv, SV *obj, char how, char *name, I32 namlen)
     SvMAGIC(sv) = mg;
     if (obj == sv)
        mg->mg_obj = obj;
-    else
+    else {
        mg->mg_obj = SvREFCNT_inc(obj);
+       mg->mg_flags |= MGf_REFCOUNTED;
+    }
     mg->mg_type = how;
     mg->mg_len = namlen;
     if (name && namlen >= 0)
@@ -1880,7 +1887,7 @@ register SV *sv;
        SAVESPTR(op);
        curcop = &compiling;
        curstash = SvSTASH(sv);
-       destructor = gv_fetchpv("DESTROY", FALSE);
+       destructor = gv_fetchpv("DESTROY", FALSE, SVt_PVCV);
 
        if (destructor && GvCV(destructor)) {
            SV ref;
@@ -1905,6 +1912,7 @@ register SV *sv;
                run();
            stack_sp--;
            SvREFCNT(sv) = 0;
+           FREE_TMPS();
        }
        SvREFCNT_dec(SvSTASH(sv));
        LEAVE;
@@ -1921,16 +1929,17 @@ register SV *sv;
        goto freemagic;
     case SVt_PVGV:
        gp_free(sv);
+       Safefree(GvNAME(sv));
        goto freemagic;
     case SVt_PVCV:
-       cv_clear((CV*)sv);
+       cv_undef((CV*)sv);
        goto freemagic;
     case SVt_PVHV:
-       hv_clear((HV*)sv);
+       hv_undef((HV*)sv);
        SvPVX(sv)= 0;
        goto freemagic;
     case SVt_PVAV:
-       av_clear((AV*)sv);
+       av_undef((AV*)sv);
        SvPVX(sv)= 0;
        goto freemagic;
     case SVt_PVLV:
@@ -2126,13 +2135,13 @@ register SV *str2;
 
     if (cur1 < cur2) {
        /*SUPPRESS 560*/
-       if (retval = memcmp(pv1, pv2, cur1))
+       if (retval = memcmp((void*)pv1, (void*)pv2, cur1))
            return retval < 0 ? -1 : 1;
        else
            return -1;
     }
     /*SUPPRESS 560*/
-    else if (retval = memcmp(pv1, pv2, cur2))
+    else if (retval = memcmp((void*)pv1, (void*)pv2, cur2))
        return retval < 0 ? -1 : 1;
     else if (cur1 == cur2)
        return 0;
@@ -2171,7 +2180,7 @@ I32 append;
            }
        } while (i != EOF);
     }
-#ifdef STDSTDIO                /* Here is some breathtakingly efficient cheating */
+#ifdef USE_STD_STDIO           /* Here is some breathtakingly efficient cheating */
     cnt = fp->_cnt;                    /* get count into register */
     SvPOK_only(sv);                    /* validate pointer */
     if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
@@ -2238,7 +2247,7 @@ thats_really_all_folks:
     *bp = '\0';
     SvCUR_set(sv, bp - SvPVX(sv));     /* set length */
 
-#else /* !STDSTDIO */  /* The big, slow, and stupid way */
+#else /* !USE_STD_STDIO */     /* The big, slow, and stupid way */
 
     {
        char buf[8192];
@@ -2271,7 +2280,7 @@ screamer:
        }
     }
 
-#endif /* STDSTDIO */
+#endif /* USE_STD_STDIO */
 
     if (rspara) {
         while (i != EOF) {
@@ -2646,7 +2655,7 @@ I32 lref;
        if (isGV(sv))
            gv = (GV*)sv;
        else
-           gv = gv_fetchpv(SvPV(sv, na), lref);
+           gv = gv_fetchpv(SvPV(sv, na), lref, SVt_PVCV);
        *gvp = gv;
        if (!gv)
            return Nullcv;
@@ -2695,6 +2704,17 @@ register SV *sv;
 }
 #endif /* SvTRUE */
 
+#ifndef SvIV
+I32 SvIV(Sv)
+register SV *Sv;
+{
+    if (SvIOK(Sv))
+       return SvIVX(Sv);
+    return sv_2iv(Sv);
+}
+#endif /* SvIV */
+
+
 #ifndef SvNV
 double SvNV(Sv)
 register SV *Sv;
@@ -2713,13 +2733,27 @@ sv_pvn(sv, lp)
 SV *sv;
 STRLEN *lp;
 {
-    if (SvPOK(sv))
+    if (SvPOK(sv)) {
+       *lp = SvCUR(sv);
        return SvPVX(sv)
+    }
     return sv_2pv(sv, lp);
 }
 #endif
 
 int
+sv_isobject(sv)
+SV *sv;
+{
+    if (!SvROK(sv))
+       return 0;
+    sv = (SV*)SvRV(sv);
+    if (!SvOBJECT(sv))
+       return 0;
+    return 1;
+}
+
+int
 sv_isa(sv, name)
 SV *sv;
 char *name;
@@ -2770,6 +2804,13 @@ SV* sv;
     SvREFCNT_dec(SvRV(sv));
     SvRV(sv) = 0;
     SvROK_off(sv);
+    if (!(SvFLAGS(sv) & (SVp_IOK|SVp_NOK))) {
+       SvFLAGS(sv) &= ~SVf_OK;
+       if (SvTYPE(sv) == SVt_RV) {
+           del_XRV(SvANY(sv));
+           SvFLAGS(sv) &= ~SVTYPEMASK; /* Make into type NULL. */
+       }
+    }
     --sv_rvcount;
 }
 
diff --git a/sv.h b/sv.h
index 77671c5..69545d8 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -43,7 +43,7 @@ typedef enum {
        SVt_PVCV,
        SVt_PVGV,
        SVt_PVFM,
-       SVt_PVIO,
+       SVt_PVIO
 } svtype;
 
 /* Using C's structural equivalence to help emulate C++ inheritance here... */
@@ -413,8 +413,6 @@ struct xpvio {
        do { assert(SvTYPE(sv) >= SVt_PV); \
                (((XPV*)  SvANY(sv))->xpv_cur = val - SvPVX(sv)); } while (0)
 
-#define SvCUROK(sv) (SvPOK(sv) ? SvCUR(sv) : 0)
-
 #define BmRARE(sv)     ((XPVBM*)  SvANY(sv))->xbm_rare
 #define BmUSEFUL(sv)   ((XPVBM*)  SvANY(sv))->xbm_useful
 #define BmPREVIOUS(sv) ((XPVBM*)  SvANY(sv))->xbm_previous
@@ -447,7 +445,7 @@ struct xpvio {
 
 #ifdef CRIPPLED_CC
 
-double SvIV();
+I32 SvIV();
 double SvNV();
 #define SvPV(sv, lp) sv_pvn(sv, &lp)
 char *sv_pvn();
diff --git a/sv_append_till b/sv_append_till
deleted file mode 100644 (file)
index c2299ea..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-char *
-sv_append_till(sv,from,fromend,delim,keeplist)
-register SV *sv;
-register char *from;
-register char *fromend;
-register I32 delim;
-char *keeplist;
-{
-    register char *to;
-    register STRLEN len;
-
-    if (SvREADONLY(sv))
-       fatal(no_modify);
-    if (!from)
-       return Nullch;
-    len = fromend - from;
-    if (!SvUPGRADE(sv, SVt_PV))
-       return 0;
-    SvGROW(sv, SvCUR(sv) + len + 1);
-    SvPOK_only(sv);            /* validate pointer */
-    to = SvPV(sv)+SvCUR(sv);
-    for (; from < fromend; from++,to++) {
-       if (*from == '\\' && from+1 < fromend && delim != '\\') {
-           if (!keeplist)
-               *to++ = *from++;
-           else if (from[1] && index(keeplist,from[1]))
-               *to++ = *from++;
-           else
-               from++;
-       }
-       else if (*from == delim)
-           break;
-       *to = *from;
-    }
-    *to = '\0';
-    SvCUR_set(sv, to - SvPV(sv));
-    return from;
-}
-
diff --git a/syntax b/syntax
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/t/foo b/t/foo
index 57d87eb..034c5c6 100755 (executable)
--- a/t/foo
+++ b/t/foo
@@ -1,2 +1,282 @@
 #!./perl
 
+BEGIN { @INC = '../lib' }
+require "bigint.pl";
+
+$test = 0;
+$| = 1;
+print "1..246\n";
+while (<DATA>) {
+       chop;
+       if (/^&/) {
+               $f = $_;
+       } else {
+               ++$test;
+               @args = split(/:/,$_,99);
+               $ans = pop(@args);
+               $try = "$f('" . join("','", @args) . "');";
+               if (($ans1 = eval($try)) eq $ans) {
+                       print "ok $test\n";
+               } else {
+                       print "not ok $test\n";
+                       print "# '$try' expected: '$ans' got: '$ans1'\n";
+               }
+       }
+} 
+__END__
+&bnorm
+abc:NaN
+   1 a:NaN
+1bcd2:NaN
+11111b:NaN
++1z:NaN
+-1z:NaN
+0:+0
++0:+0
++00:+0
++0 0 0:+0
+000000  0000000   00000:+0
+-0:+0
+-0000:+0
++1:+1
++01:+1
++001:+1
++00000100000:+100000
+123456789:+123456789
+-1:-1
+-01:-1
+-001:-1
+-123456789:-123456789
+-00000100000:-100000
+&bneg
+abd:NaN
++0:+0
++1:-1
+-1:+1
++123456789:-123456789
+-123456789:+123456789
+&babs
+abc:NaN
++0:+0
++1:+1
+-1:+1
++123456789:+123456789
+-123456789:+123456789
+&bcmp
+abc:abc:
+abc:+0:
++0:abc:
++0:+0:0
+-1:+0:-1
++0:-1:1
++1:+0:1
++0:+1:-1
+-1:+1:-1
++1:-1:1
+-1:-1:0
++1:+1:0
++123:+123:0
++123:+12:1
++12:+123:-1
+-123:-123:0
+-123:-12:-1
+-12:-123:1
++123:+124:-1
++124:+123:1
+-123:-124:1
+-124:-123:-1
+&badd
+abc:abc:NaN
+abc:+0:NaN
++0:abc:NaN
++0:+0:+0
++1:+0:+1
++0:+1:+1
++1:+1:+2
+-1:+0:-1
++0:-1:-1
+-1:-1:-2
+-1:+1:+0
++1:-1:+0
++9:+1:+10
++99:+1:+100
++999:+1:+1000
++9999:+1:+10000
++99999:+1:+100000
++999999:+1:+1000000
++9999999:+1:+10000000
++99999999:+1:+100000000
++999999999:+1:+1000000000
++9999999999:+1:+10000000000
++99999999999:+1:+100000000000
++10:-1:+9
++100:-1:+99
++1000:-1:+999
++10000:-1:+9999
++100000:-1:+99999
++1000000:-1:+999999
++10000000:-1:+9999999
++100000000:-1:+99999999
++1000000000:-1:+999999999
++10000000000:-1:+9999999999
++123456789:+987654321:+1111111110
+-123456789:+987654321:+864197532
+-123456789:-987654321:-1111111110
++123456789:-987654321:-864197532
+&bsub
+abc:abc:NaN
+abc:+0:NaN
++0:abc:NaN
++0:+0:+0
++1:+0:+1
++0:+1:-1
++1:+1:+0
+-1:+0:-1
++0:-1:+1
+-1:-1:+0
+-1:+1:-2
++1:-1:+2
++9:+1:+8
++99:+1:+98
++999:+1:+998
++9999:+1:+9998
++99999:+1:+99998
++999999:+1:+999998
++9999999:+1:+9999998
++99999999:+1:+99999998
++999999999:+1:+999999998
++9999999999:+1:+9999999998
++99999999999:+1:+99999999998
++10:-1:+11
++100:-1:+101
++1000:-1:+1001
++10000:-1:+10001
++100000:-1:+100001
++1000000:-1:+1000001
++10000000:-1:+10000001
++100000000:-1:+100000001
++1000000000:-1:+1000000001
++10000000000:-1:+10000000001
++123456789:+987654321:-864197532
+-123456789:+987654321:-1111111110
+-123456789:-987654321:+864197532
++123456789:-987654321:+1111111110
+&bmul
+abc:abc:NaN
+abc:+0:NaN
++0:abc:NaN
++0:+0:+0
++0:+1:+0
++1:+0:+0
++0:-1:+0
+-1:+0:+0
++123456789123456789:+0:+0
++0:+123456789123456789:+0
+-1:-1:+1
+-1:+1:-1
++1:-1:-1
++1:+1:+1
++2:+3:+6
+-2:+3:-6
++2:-3:-6
+-2:-3:+6
++111:+111:+12321
++10101:+10101:+102030201
++1001001:+1001001:+1002003002001
++100010001:+100010001:+10002000300020001
++10000100001:+10000100001:+100002000030000200001
++11111111111:+9:+99999999999
++22222222222:+9:+199999999998
++33333333333:+9:+299999999997
++44444444444:+9:+399999999996
++55555555555:+9:+499999999995
++66666666666:+9:+599999999994
++77777777777:+9:+699999999993
++88888888888:+9:+799999999992
++99999999999:+9:+899999999991
+&bdiv
+abc:abc:NaN
+abc:+1:abc:NaN
++1:abc:NaN
++0:+0:NaN
++0:+1:+0
++1:+0:NaN
++0:-1:+0
+-1:+0:NaN
++1:+1:+1
+-1:-1:+1
++1:-1:-1
+-1:+1:-1
++1:+2:+0
++2:+1:+2
++1000000000:+9:+111111111
++2000000000:+9:+222222222
++3000000000:+9:+333333333
++4000000000:+9:+444444444
++5000000000:+9:+555555555
++6000000000:+9:+666666666
++7000000000:+9:+777777777
++8000000000:+9:+888888888
++9000000000:+9:+1000000000
++35500000:+113:+314159
++71000000:+226:+314159
++106500000:+339:+314159
++1000000000:+3:+333333333
++10:+5:+2
++100:+4:+25
++1000:+8:+125
++10000:+16:+625
++999999999999:+9:+111111111111
++999999999999:+99:+10101010101
++999999999999:+999:+1001001001
++999999999999:+9999:+100010001
++999999999999999:+99999:+10000100001
+&bmod
+abc:abc:NaN
+abc:+1:abc:NaN
++1:abc:NaN
++0:+0:NaN
++0:+1:+0
++1:+0:NaN
++0:-1:+0
+-1:+0:NaN
++1:+1:+0
+-1:-1:+0
++1:-1:+0
+-1:+1:+0
++1:+2:+1
++2:+1:+0
++1000000000:+9:+1
++2000000000:+9:+2
++3000000000:+9:+3
++4000000000:+9:+4
++5000000000:+9:+5
++6000000000:+9:+6
++7000000000:+9:+7
++8000000000:+9:+8
++9000000000:+9:+0
++35500000:+113:+33
++71000000:+226:+66
++106500000:+339:+99
++1000000000:+3:+1
++10:+5:+0
++100:+4:+0
++1000:+8:+0
++10000:+16:+0
++999999999999:+9:+0
++999999999999:+99:+0
++999999999999:+999:+0
++999999999999:+9999:+0
++999999999999999:+99999:+0
+&bgcd
+abc:abc:NaN
+abc:+0:NaN
++0:abc:NaN
++0:+0:+0
++0:+1:+1
++1:+0:+1
++1:+1:+1
++2:+3:+1
++3:+2:+1
++100:+625:+25
++4096:+81:+1
diff --git a/t/lib/ndbm.t b/t/lib/ndbm.t
new file mode 100755 (executable)
index 0000000..c69e2f8
--- /dev/null
@@ -0,0 +1,117 @@
+#!./perl
+
+# $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $
+
+BEGIN {
+    @INC = '../lib';
+    require Config; import Config;
+    if ($Config{'extensions'} !~ /\bNDBM_File\b/) {
+       print "1..0\n";
+       exit 0;
+    }
+}
+
+require NDBM_File;
+
+print "1..12\n";
+
+unlink <Op.dbmx*>;
+
+umask(0);
+print (tie(%h,NDBM_File,'Op.dbmx', 0x202, 0640) ? "ok 1\n" : "not ok 1\n");
+
+$Dfile = "Op.dbmx.pag";
+if (! -e $Dfile) {
+       ($Dfile) = <Op.dbmx*>;
+}
+($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
+   $blksize,$blocks) = stat($Dfile);
+print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n");
+while (($key,$value) = each(%h)) {
+    $i++;
+}
+print (!$i ? "ok 3\n" : "not ok 3\n");
+
+$h{'goner1'} = 'snork';
+
+$h{'abc'} = 'ABC';
+$h{'def'} = 'DEF';
+$h{'jkl','mno'} = "JKL\034MNO";
+$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
+$h{'a'} = 'A';
+$h{'b'} = 'B';
+$h{'c'} = 'C';
+$h{'d'} = 'D';
+$h{'e'} = 'E';
+$h{'f'} = 'F';
+$h{'g'} = 'G';
+$h{'h'} = 'H';
+$h{'i'} = 'I';
+
+$h{'goner2'} = 'snork';
+delete $h{'goner2'};
+
+untie(%h);
+print (tie(%h,NDBM_File,'Op.dbmx', 0x2, 0640) ? "ok 4\n" : "not ok 4\n");
+
+$h{'j'} = 'J';
+$h{'k'} = 'K';
+$h{'l'} = 'L';
+$h{'m'} = 'M';
+$h{'n'} = 'N';
+$h{'o'} = 'O';
+$h{'p'} = 'P';
+$h{'q'} = 'Q';
+$h{'r'} = 'R';
+$h{'s'} = 'S';
+$h{'t'} = 'T';
+$h{'u'} = 'U';
+$h{'v'} = 'V';
+$h{'w'} = 'W';
+$h{'x'} = 'X';
+$h{'y'} = 'Y';
+$h{'z'} = 'Z';
+
+$h{'goner3'} = 'snork';
+
+delete $h{'goner1'};
+delete $h{'goner3'};
+
+@keys = keys(%h);
+@values = values(%h);
+
+if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";}
+
+while (($key,$value) = each(h)) {
+    if ($key eq $keys[$i] && $value eq $values[$i] && $key gt $value) {
+       $key =~ y/a-z/A-Z/;
+       $i++ if $key eq $value;
+    }
+}
+
+if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";}
+
+@keys = ('blurfl', keys(h), 'dyick');
+if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";}
+
+$h{'foo'} = '';
+$h{''} = 'bar';
+
+# check cache overflow and numeric keys and contents
+$ok = 1;
+for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; }
+for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; }
+print ($ok ? "ok 8\n" : "not ok 8\n");
+
+($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
+   $blksize,$blocks) = stat($Dfile);
+print ($size > 0 ? "ok 9\n" : "not ok 9\n");
+
+@h{0..200} = 200..400;
+@foo = @h{0..200};
+print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n";
+
+print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n");
+print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n");
+
+unlink 'Op.dbmx.dir', $Dfile;
index 79d95f3..1304be2 100755 (executable)
@@ -2,7 +2,14 @@
 
 # $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $
 
-BEGIN { @INC = '../lib' }
+BEGIN {
+    @INC = '../lib';
+    require Config; import Config;
+    if ($Config{'extensions'} !~ /\bSDBM_File\b/) {
+       print STDERR "1..0\n";
+       exit 0;
+    }
+}
 require SDBM_File;
 
 print "1..12\n";
diff --git a/t/perl5a1.tar b/t/perl5a1.tar
new file mode 100644 (file)
index 0000000..0c0b43c
Binary files /dev/null and b/t/perl5a1.tar differ
diff --git a/tofix b/tofix
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/toke.c b/toke.c
index 6c582a5..9bfc0ea 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -77,6 +77,7 @@ static U32            lex_state = LEX_NORMAL; /* next token is determined */
 static U32             lex_defer;      /* state after determined token */
 static expectation     lex_expect;     /* expect after determined token */
 static I32             lex_brackets;   /* bracket count */
+static I32             lex_formbrack;  /* bracket count at outer format level */
 static I32             lex_fakebrack;  /* outer bracket is mere delimiter */
 static I32             lex_casemods;   /* casemod count */
 static I32             lex_dojoin;     /* doing an array interpolation */
@@ -106,8 +107,6 @@ static I32  nexttoke = 0;
 
 #include "keywords.h"
 
-void checkcomma();
-
 #ifdef CLINE
 #undef CLINE
 #endif
@@ -222,12 +221,12 @@ SV *line;
     SAVEINT(lex_inpat);
     SAVEINT(lex_inwhat);
     SAVEINT(curcop->cop_line);
-    SAVESPTR(bufptr);
-    SAVESPTR(bufend);
-    SAVESPTR(oldbufptr);
-    SAVESPTR(oldoldbufptr);
+    SAVEPPTR(bufptr);
+    SAVEPPTR(bufend);
+    SAVEPPTR(oldbufptr);
+    SAVEPPTR(oldoldbufptr);
     SAVESPTR(linestr);
-    SAVESPTR(lex_brackstack);
+    SAVEPPTR(lex_brackstack);
     SAVESPTR(rsfp);
 
     lex_state = LEX_NORMAL;
@@ -236,7 +235,7 @@ SV *line;
     lex_brackets = 0;
     lex_fakebrack = 0;
     if (lex_brackstack)
-       SAVESPTR(lex_brackstack);
+       SAVEPPTR(lex_brackstack);
     New(899, lex_brackstack, 120, char);
     SAVEFREEPV(lex_brackstack);
     lex_casemods = 0;
@@ -319,7 +318,7 @@ static char *
 skipspace(s)
 register char *s;
 {
-    if (in_format && lex_brackets <= 1) {
+    if (lex_formbrack && lex_brackets <= lex_formbrack) {
        while (s < bufend && (*s == ' ' || *s == '\t'))
            s++;
        return s;
@@ -542,11 +541,11 @@ sublex_start()
     SAVEINT(lex_inpat);
     SAVEINT(lex_inwhat);
     SAVEINT(curcop->cop_line);
-    SAVESPTR(bufptr);
-    SAVESPTR(oldbufptr);
-    SAVESPTR(oldoldbufptr);
+    SAVEPPTR(bufptr);
+    SAVEPPTR(oldbufptr);
+    SAVEPPTR(oldoldbufptr);
     SAVESPTR(linestr);
-    SAVESPTR(lex_brackstack);
+    SAVEPPTR(lex_brackstack);
 
     linestr = lex_stuff;
     lex_stuff = Nullsv;
@@ -664,7 +663,7 @@ char *start;
                s++;
            }
        }
-       else if (*s == '@')
+       else if (*s == '@' && s[1] && (isALNUM(s[1]) || strchr(":'{", s[1])))
            break;
        else if (*s == '$') {
            if (!lex_inpat)     /* not a regexp, so $ must be var */
@@ -828,7 +827,7 @@ register char *s;
                weight -= seen[un_char] * 10;
                if (isALNUM(s[1])) {
                    scan_ident(s,send,tmpbuf,FALSE);
-                   if (strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE))
+                   if (strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
                        weight -= 100;
                    else
                        weight -= 10;
@@ -1199,9 +1198,9 @@ yylex()
                }
            }
        }
-       if (in_format && lex_brackets <= 1) {
+       if (lex_formbrack && lex_brackets <= lex_formbrack) {
            s = scan_formline(s);
-           if (!in_format)
+           if (!lex_formbrack)
                goto rightbracket;
            OPERATOR(';');
        }
@@ -1218,9 +1217,9 @@ yylex()
            if (s < d)
                s++;
            incline(s);
-           if (in_format && lex_brackets <= 1) {
+           if (lex_formbrack && lex_brackets <= lex_formbrack) {
                s = scan_formline(s);
-               if (!in_format)
+               if (!lex_formbrack)
                    goto rightbracket;
                OPERATOR(';');
            }
@@ -1259,9 +1258,9 @@ yylex()
            case 't': FTST(OP_FTTTY);
            case 'T': FTST(OP_FTTEXT);
            case 'B': FTST(OP_FTBINARY);
-           case 'M': gv_fetchpv("\024",TRUE); FTST(OP_FTMTIME);
-           case 'A': gv_fetchpv("\024",TRUE); FTST(OP_FTATIME);
-           case 'C': gv_fetchpv("\024",TRUE); FTST(OP_FTCTIME);
+           case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
+           case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
+           case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
            default:
                s -= 2;
                break;
@@ -1394,8 +1393,6 @@ yylex()
        TOKEN(']');
     case '{':
       leftbracket:
-       if (in_format == 2)
-           in_format = 0;
        s++;
        if (lex_brackets > 100) {
            char* newlb = (char*)realloc(lex_brackstack, lex_brackets + 1);
@@ -1443,6 +1440,8 @@ yylex()
            yyerror("Unmatched right bracket");
        else
            expect = (expectation)lex_brackstack[--lex_brackets];
+       if (lex_brackets < lex_formbrack)
+           lex_formbrack = 0;
        if (lex_state == LEX_INTERPNORMAL) {
            if (lex_brackets == 0) {
                if (lex_fakebrack) {
@@ -1499,8 +1498,7 @@ yylex()
        if (dowarn && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
            warn("Reversed %c= operator",tmp);
        s--;
-       if (in_format == 2 && (tmp == '\n' || s[1] == '\n')) {
-           in_format = 1;
+       if (lex_brackets < lex_formbrack && (tmp == '\n' || s[1] == '\n')) {
            s--;
            expect = XBLOCK;
            goto leftbracket;
@@ -1552,7 +1550,7 @@ yylex()
        if (s[1] == '#'  && (isALPHA(s[2]) || s[2] == '_' || s[2] == '{')) {
            s = scan_ident(s+1, bufend, tokenbuf, FALSE);
            if (expect == XOPERATOR) {
-               if (in_format)
+               if (lex_formbrack && lex_brackets == lex_formbrack)
                    OPERATOR(','); /* grandfather non-comma-format format */
                else
                    no_op("Array length",s);
@@ -1563,7 +1561,7 @@ yylex()
        }
        s = scan_ident(s, bufend, tokenbuf+1, FALSE);
        if (expect == XOPERATOR) {
-           if (in_format)
+           if (lex_formbrack && lex_brackets == lex_formbrack)
                OPERATOR(',');  /* grandfather non-comma-format format */
            else
                no_op("Scalar",s);
@@ -1654,11 +1652,12 @@ yylex()
                    TERM('@');
                }
            }
-           if (dowarn && *s == '[') {
-               char *t;
-               for (t = s+1; *t && (isALNUM(*t) || strchr(" \t$#+-", *t)); t++)
-                   ;
-               if (*t++ == ']') {
+           if (dowarn && (*s == '[' || *s == '{')) {
+               char *t = s + 1;
+               while (*t && (isALNUM(*t) || strchr(" \t$#+-'\"", *t)))
+                   t++;
+               if (*t == '}' || *t == ']') {
+                   t++;
                    bufptr = skipspace(bufptr);
                    warn("Scalar value %.*s better written as $%.*s",
                        t-bufptr, bufptr, t-bufptr-1, bufptr+1);
@@ -1686,8 +1685,8 @@ yylex()
        OPERATOR(tmp);
 
     case '.':
-       if (in_format == 2) {
-           in_format = 0;
+       if (lex_formbrack && lex_brackets == lex_formbrack && s == oldbufptr) {
+           lex_formbrack = 0;
            expect = XSTATE;
            goto rightbracket;
        }
@@ -1718,26 +1717,26 @@ yylex()
     case '\'':
        s = scan_str(s);
        if (expect == XOPERATOR) {
-           if (in_format)
+           if (lex_formbrack && lex_brackets == lex_formbrack)
                OPERATOR(',');  /* grandfather non-comma-format format */
            else
                no_op("String",s);
        }
        if (!s)
-           missingterm(0);
+           missingterm((char*)0);
        yylval.ival = OP_CONST;
        TERM(sublex_start());
 
     case '"':
        s = scan_str(s);
        if (expect == XOPERATOR) {
-           if (in_format)
+           if (lex_formbrack && lex_brackets == lex_formbrack)
                OPERATOR(',');  /* grandfather non-comma-format format */
            else
                no_op("String",s);
        }
        if (!s)
-           missingterm(0);
+           missingterm((char*)0);
        yylval.ival = OP_SCALAR;
        TERM(sublex_start());
 
@@ -1746,7 +1745,7 @@ yylex()
        if (expect == XOPERATOR)
            no_op("Backticks",s);
        if (!s)
-           missingterm(0);
+           missingterm((char*)0);
        yylval.ival = OP_BACKTICK;
        set_csh();
        TERM(sublex_start());
@@ -1830,7 +1829,7 @@ yylex()
 
                /* Look for a subroutine with this name in current package. */
 
-               gv = gv_fetchpv(tokenbuf,FALSE);
+               gv = gv_fetchpv(tokenbuf,FALSE, SVt_PVCV);
 
                /* See if it's the indirect object for a list operator. */
 
@@ -1884,7 +1883,7 @@ yylex()
                    s = scan_word(s, tmpbuf, TRUE, &len);
                    if (!keyword(tmpbuf, len)) {
                        SV* tmpsv = newSVpv(tmpbuf,0);
-                       indirgv = gv_fetchpv(tmpbuf,FALSE);
+                       indirgv = gv_fetchpv(tmpbuf,FALSE, SVt_PVCV);
                        if (!indirgv || !GvCV(indirgv)) {
                            if (!gv || !GvCV(gv) || fetch_stash(tmpsv, FALSE)) {
                                nextval[nexttoke].opval =
@@ -1916,6 +1915,11 @@ yylex()
                    force_next(WORD);
                    TOKEN(NOAMP);
                }
+               else if (hints & HINT_STRICT_SUBS) {
+                   warn("Bareword \"%s\" not allowed while \"strict subs\" averred",
+                       tokenbuf);
+                   ++error_count;
+               }
 
                /* Call it a bare word */
 
@@ -1940,7 +1944,8 @@ yylex()
            int fd;
 
            /*SUPPRESS 560*/
-           if (!in_eval && (gv = gv_fetchpv("DATA",FALSE))) {
+           if (!in_eval) {
+               gv = gv_fetchpv("DATA",TRUE, SVt_PVIO);
                SvMULTI_on(gv);
                if (!GvIO(gv))
                    GvIO(gv) = newIO();
@@ -1986,6 +1991,11 @@ yylex()
        case KEY_atan2:
            LOP(OP_ATAN2);
 
+       case KEY_aver:
+           s = force_word(s,WORD,FALSE,FALSE);
+           yylval.ival = 1;
+           OPERATOR(HINT);
+
        case KEY_bind:
            LOP(OP_BIND);
 
@@ -2002,7 +2012,7 @@ yylex()
            PREBLOCK(CONTINUE);
 
        case KEY_chdir:
-           (void)gv_fetchpv("ENV",TRUE);       /* may use HOME */
+           (void)gv_fetchpv("ENV",TRUE, SVt_PVHV);     /* may use HOME */
            UNI(OP_CHDIR);
 
        case KEY_close:
@@ -2045,6 +2055,11 @@ yylex()
        case KEY_chroot:
            UNI(OP_CHROOT);
 
+       case KEY_deny:
+           s = force_word(s,WORD,FALSE,FALSE);
+           yylval.ival = 0;
+           OPERATOR(HINT);
+
        case KEY_do:
            s = skipspace(s);
            if (*s == '{')
@@ -2063,6 +2078,7 @@ yylex()
            OPERATOR(DELETE);
 
        case KEY_dbmopen:
+           gv_fetchpv("Any_DBM_FILE::ISA", 2, SVt_PVAV);
            LOP(OP_DBMOPEN);
 
        case KEY_dbmclose:
@@ -2387,14 +2403,14 @@ yylex()
        case KEY_q:
            s = scan_str(s);
            if (!s)
-               missingterm(0);
+               missingterm((char*)0);
            yylval.ival = OP_CONST;
            TERM(sublex_start());
 
        case KEY_qw:
            s = scan_str(s);
            if (!s)
-               missingterm(0);
+               missingterm((char*)0);
            force_next(')');
            nextval[nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, q(lex_stuff));
            lex_stuff = Nullsv;
@@ -2408,7 +2424,7 @@ yylex()
        case KEY_qq:
            s = scan_str(s);
            if (!s)
-               missingterm(0);
+               missingterm((char*)0);
            yylval.ival = OP_SCALAR;
            if (SvIVX(lex_stuff) == '\'')
                SvIVX(lex_stuff) = 0;   /* qq'$foo' should intepolate */
@@ -2417,7 +2433,7 @@ yylex()
        case KEY_qx:
            s = scan_str(s);
            if (!s)
-               missingterm(0);
+               missingterm((char*)0);
            yylval.ival = OP_BACKTICK;
            set_csh();
            TERM(sublex_start());
@@ -2604,10 +2620,7 @@ yylex()
          really_sub:
            yylval.ival = start_subparse();
            s = skipspace(s);
-           if (tmp == KEY_format)
-               expect = XTERM;
-           else
-               expect = XBLOCK;
+           expect = XBLOCK;
            if (isIDFIRST(*s) || *s == '\'' || *s == ':') {
                char tmpbuf[128];
                d = scan_word(s, tmpbuf, TRUE, &len);
@@ -2626,8 +2639,9 @@ yylex()
            if (tmp != KEY_format)
                PREBLOCK(SUB);
 
-           in_format = 2;
-           lex_brackets = 0;
+           s = skipspace(s);
+           if (*s == '=')
+               lex_formbrack = lex_brackets + 1;
            OPERATOR(FORMAT);
 
        case KEY_system:
@@ -2730,6 +2744,7 @@ yylex()
            FUN0(OP_WANTARRAY);
 
        case KEY_write:
+           gv_fetchpv("\f",TRUE, SVt_PV);      /* Make sure $^L is defined */
            UNI(OP_ENTERWRITE);
 
        case KEY_x:
@@ -2767,6 +2782,9 @@ I32 len;
            if (strEQ(d,"and"))                 return KEY_and;
            if (strEQ(d,"abs"))                 return KEY_abs;
            break;
+       case 4:
+           if (strEQ(d,"aver"))                return KEY_aver;
+           break;
        case 5:
            if (strEQ(d,"alarm"))               return KEY_alarm;
            if (strEQ(d,"atan2"))               return KEY_atan2;
@@ -2826,6 +2844,7 @@ I32 len;
            if (strEQ(d,"die"))                 return KEY_die;
            break;
        case 4:
+           if (strEQ(d,"deny"))                return KEY_deny;
            if (strEQ(d,"dump"))                return KEY_dump;
            break;
        case 6:
@@ -3918,7 +3937,7 @@ char *start;
        if (!len)
            (void)strcpy(d,"ARGV");
        if (*d == '$') {
-           GV *gv = gv_fetchpv(d+1,TRUE);
+           GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
            lex_op = (OP*)newUNOP(OP_READLINE, 0,
                                    newUNOP(OP_RV2GV, 0,
                                        newUNOP(OP_RV2SV, 0,
@@ -3928,7 +3947,7 @@ char *start;
        else {
            IO *io;
 
-           GV *gv = gv_fetchpv(d,TRUE);
+           GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
            io = GvIOn(gv);
            if (strEQ(d,"ARGV")) {
                GvAVn(gv);
@@ -4149,7 +4168,7 @@ register char *s;
     bool needargs = FALSE;
 
     while (!needargs) {
-       if (*s == '.') {
+       if (*s == '.' || *s == '}') {
            /*SUPPRESS 530*/
            for (t = s+1; *t == ' ' || *t == '\t'; t++) ;
            if (*t == '\n')
@@ -4190,8 +4209,6 @@ register char *s;
            nextval[nexttoke].ival = 0;
            force_next(',');
        }
-       else
-           in_format = 2;
        nextval[nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
        force_next(THING);
        nextval[nexttoke].ival = OP_FORMLINE;
@@ -4199,7 +4216,7 @@ register char *s;
     }
     else {
        SvREFCNT_dec(stuff);
-       in_format = 0;
+       lex_formbrack = 0;
        bufptr = s;
     }
     return s;
@@ -4292,7 +4309,7 @@ char *s;
          "  (Might be a runaway multi-line %c%c string starting on line %d)\n",
          multi_open,multi_close,multi_start);
     if (in_eval)
-       sv_catpv(GvSV(gv_fetchpv("@",TRUE)),buf);
+       sv_catpv(GvSV(gv_fetchpv("@",TRUE, SVt_PV)),buf);
     else
        fputs(buf,stderr);
     if (++error_count >= 10)
diff --git a/toke.c.pat1 b/toke.c.pat1
new file mode 100644 (file)
index 0000000..60ec8bb
--- /dev/null
@@ -0,0 +1,21 @@
+*** /scalpel/lwall/perl5alpha6/toke.c  Tue Feb 15 16:27:34 1994
+--- toke.c     Thu Feb 17 11:13:27 1994
+***************
+*** 1398,1405 ****
+       if (expect == XTERM)
+           OPERATOR(HASHBRACK);
+       else if (expect == XBLOCK || expect == XOPERATOR) {
+!          lex_brackstack[lex_brackets-1] = XBLOCK;
+!          expect = XBLOCK;
+       }
+       else {
+           char *t;
+--- 1398,1405 ----
+       if (expect == XTERM)
+           OPERATOR(HASHBRACK);
+       else if (expect == XBLOCK || expect == XOPERATOR) {
+!          lex_brackstack[lex_brackets-1] = XSTATE;
+!          expect = XSTATE;
+       }
+       else {
+           char *t;
similarity index 100%
rename from libtperl.rlb
rename to trace.out
diff --git a/trans_stuff b/trans_stuff
deleted file mode 100644 (file)
index ea10582..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-    if (complement) {
-       Zero(tbl, 256, short);
-       for (i = 0; i < tlen; i++)
-           tbl[t[i] & 0377] = -1;
-       for (i = 0, j = 0; i < 256; i++) {
-           if (!tbl[i]) {
-               if (j >= rlen) {
-                   if (delete)
-                       tbl[i] = -2;
-                   else if (rlen)
-                       tbl[i] = r[j-1] & 0377;
-                   else
-                       tbl[i] = i;
-               }
-               else
-                   tbl[i] = r[j++] & 0377;
-           }
-       }
-    }
-    else {
-       if (!rlen && !delete) {
-           r = t; rlen = tlen;
-       }
-       for (i = 0; i < 256; i++)
-           tbl[i] = -1;
-       for (i = 0, j = 0; i < tlen; i++,j++) {
-           if (j >= rlen) {
-               if (delete) {
-                   if (tbl[t[i] & 0377] == -1)
-                       tbl[t[i] & 0377] = -2;
-                   continue;
-               }
-               --j;
-           }
-           if (tbl[t[i] & 0377] == -1)
-               tbl[t[i] & 0377] = r[j] & 0377;
-       }
-    }
-    sv_free(tstr);
-    sv_free(rstr);
index a3ae42c..11cf321 100644 (file)
--- a/usersub.c
+++ b/usersub.c
@@ -124,7 +124,7 @@ void
 cryptswitch()
 {
     int ch;
-#ifdef STDSTDIO
+#ifdef USE_STD_STDIO
     /* cheat on stdio if possible */
     if (rsfp->_cnt > 0 && (*rsfp->_ptr & 0xff) != CRYPT_MAGIC_1)
        return;
diff --git a/util.c b/util.c
index 8f6845a..1ebb847 100644 (file)
--- a/util.c
+++ b/util.c
@@ -51,7 +51,7 @@
 #include <signal.h>
 #endif
 
-#ifdef STANDARD_C
+#ifdef I_UNISTD
 #  include <unistd.h>
 #endif
 
@@ -86,10 +86,6 @@ MEM_SIZE size;
 #endif /* MSDOS */
 {
     char  *ptr;
-#ifndef STANDARD_C
-    char *malloc();
-#endif /* ! STANDARD_C */
-
 #ifdef MSDOS
        if (size > 0xffff) {
                fprintf(stderr, "Allocation too large: %lx\n", size) FLUSH;
@@ -810,7 +806,7 @@ mess(pat, args)
     SV *tmpstr;
     I32 usermess;
 #ifndef HAS_VPRINTF
-#ifdef CHARVSPRINTF
+#ifdef USE_CHAR_VSPRINTF
     char *vsprintf();
 #else
     I32 vsprintf();
@@ -992,7 +988,7 @@ char *f;
 }
 #endif
 
-#if !defined(HAS_BCOPY) || !defined(SAFE_BCOPY)
+#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
 char *
 my_bcopy(from,to,len)
 register char *from;
@@ -1049,7 +1045,7 @@ register I32 len;
 #ifdef I_VARARGS
 #ifndef HAS_VPRINTF
 
-#ifdef CHARVSPRINTF
+#ifdef USE_CHAR_VSPRINTF
 char *
 #else
 int
@@ -1067,7 +1063,7 @@ char *dest, *pat, *args;
     fakebuf._flag = _IOWRT|_IOSTRG;
     _doprnt(pat, args, &fakebuf);      /* what a kludge */
     (void)putc('\0', &fakebuf);
-#ifdef CHARVSPRINTF
+#ifdef USE_CHAR_VSPRINTF
     return(dest);
 #else
     return 0;          /* perl doesn't use return value */
@@ -1287,7 +1283,7 @@ char      *mode;
            _exit(1);
        }
        /*SUPPRESS 560*/
-       if (tmpgv = gv_fetchpv("$",TRUE))
+       if (tmpgv = gv_fetchpv("$",TRUE, SVt_PV))
            sv_setiv(GvSV(tmpgv),(I32)getpid());
        forkprocess = 0;
        hv_clear(pidstatus);    /* we have no children */
index 3dfa7cf..6670309 100755 (executable)
--- a/writemain
+++ b/writemain
@@ -1,44 +1,24 @@
 #!/bin/sh
-
-cat <<'EOF'
-#include "INTERN.h"
-#include "perl.h"
-
-main(argc, argv, env)
-int argc;
-char **argv;
-char **env;
-{
-    int exitstatus;
-    PerlInterpreter *my_perl;
-
-    my_perl = perl_alloc();
-    if (!my_perl)
-       exit(1);
-    perl_construct( my_perl );
-
-    exitstatus = perl_parse( my_perl, argc, argv, env );
-    if (exitstatus)
-       exit( exitstatus );
-
-    exitstatus = perl_run( my_perl );
-
-    perl_destruct( my_perl );
-    perl_free( my_perl );
-
-    exit( exitstatus );
-}
-
-/* Register any extra external extensions */
-
-void
-perl_init_ext()
-{
-    char *file = __FILE__;
-
+: This script takes the plain miniperlmain.c and writes out perlmain.c
+: which includes all the extensions.
+: The command line arguments name extensions to be used.
+:  E.g.:  sh writemain SDBM_File POSIX > perlmain.c
+:
+args="$*"
+if test X"$args" = "X" ; then
+    cat miniperlmain.c
+else
+    sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
+    cat << 'EOP'
+
+#ifdef USE_DYNAMIC_LOADING
     boot_DynamicLoader();
-EOF
+#endif
 
-sed -e 's/\(.*\)/    newXSUB("\1::bootstrap", 0, boot_\1, file);/' <$1
+EOP
+    for ext in $args; do
+       echo "    newXSUB(\"${ext}::bootstrap\", 0, boot_${ext}, file);"
+    done
+    echo '}'
+fi
 
-echo '}'
diff --git a/writemain.SH b/writemain.SH
new file mode 100644 (file)
index 0000000..ea8aeab
--- /dev/null
@@ -0,0 +1,55 @@
+case $CONFIG in
+'')
+       if test -f config.sh; then TOP=.;
+       elif test -f ../config.sh; then TOP=..;
+       elif test -f ../../config.sh; then TOP=../..;
+       elif test -f ../../../config.sh; then TOP=../../..;
+       elif test -f ../../../../config.sh; then TOP=../../../..;
+       else
+               echo "Can't find config.sh."; exit 1
+       fi
+       . $TOP/config.sh
+       ;;
+esac
+: This forces SH files to create target in same directory as SH file.
+: This is so that make depend always knows where to find SH derivatives.
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting writemain (with variable substitutions)"
+: This section of the file will have variable substitutions done on it.
+: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
+: Protect any dollar signs and backticks that you do not want interpreted
+: by putting a backslash in front.  You may delete these comments.
+$spitshell >writemain <<!GROK!THIS!
+$startsh
+!GROK!THIS!
+
+: In the following dollars and backticks do not need the extra backslash.
+$spitshell >>writemain <<'!NO!SUBS!'
+: This script takes the plain miniperlmain.c and writes out perlmain.c
+: which includes all the extensions.
+: The command line arguments name extensions to be used.
+:  E.g.:  sh writemain SDBM_File POSIX > perlmain.c
+:
+args="$*"
+if test X"$args" = "X" ; then
+    cat miniperlmain.c
+else
+    sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
+    cat << 'EOP'
+
+#ifdef USE_DYNAMIC_LOADING
+    boot_DynamicLoader();
+#endif
+
+EOP
+    for ext in $args; do
+       echo "    newXSUB(\"${ext}::bootstrap\", 0, boot_${ext}, file);"
+    done
+    echo '}'
+fi
+
+!NO!SUBS!
+chmod 755 writemain
+$eunicefix writemain
index 2d2ff74..6e87e87 100644 (file)
@@ -1,4 +1,4 @@
-# $RCSfile: Makefile.SH,v 28453Revision: 4.1 28453Date: 92/08/07 18:29:07 $
+# $RCSfile: Makefile.SH,v 3314Revision: 4.1 3314Date: 92/08/07 18:29:07 $
 #
 # $Log:        Makefile.SH,v $
 # Revision 4.1  92/08/07  18:29:07  lwall
@@ -32,7 +32,7 @@ mallocsrc = malloc.c
 mallocobj = malloc.o
 shellflags = 
 
-libs = -ldl -lm -lposix
+libs = -ldbm -ldl -lm -lposix
 
 CCCMD = `sh $(shellflags) cflags $@`
 
index 18b8e0b..fc29d5d 100644 (file)
@@ -1,4 +1,4 @@
-# $RCSfile: Makefile.SH,v 28453Revision: 4.1 28453Date: 92/08/07 18:29:07 $
+# $RCSfile: Makefile.SH,v 3314Revision: 4.1 3314Date: 92/08/07 18:29:07 $
 #
 # $Log:        Makefile.SH,v $
 # Revision 4.1  92/08/07  18:29:07  lwall
@@ -32,7 +32,7 @@ mallocsrc = malloc.c
 mallocobj = malloc.o
 shellflags = 
 
-libs = -ldl -lm -lposix
+libs = -ldbm -ldl -lm -lposix
 
 CCCMD = `sh $(shellflags) cflags $@`
 
index d5c4717..396d31c 100644 (file)
@@ -64,7 +64,7 @@ static int morecore();
  */
 union  overhead {
        union   overhead *ov_next;      /* when free */
-#if ALIGNBYTES > 4
+#if MEM_ALIGNBYTES > 4
        double  strut;                  /* alignment problems */
 #endif
        struct {
index ceea2e5..bda5491 100644 (file)
--- a/x2p/str.c
+++ b/x2p/str.c
@@ -287,7 +287,7 @@ str_gets(str,fp)
 register STR *str;
 register FILE *fp;
 {
-#ifdef STDSTDIO                /* Here is some breathtakingly efficient cheating */
+#ifdef USE_STD_STDIO           /* Here is some breathtakingly efficient cheating */
 
     register char *bp;         /* we're going to steal some values */
     register int cnt;          /*  from the stdio struct and put EVERYTHING */
@@ -339,7 +339,7 @@ thats_all_folks:
     *bp = '\0';
     str->str_cur = bp - str->str_ptr;  /* set length */
 
-#else /* !STDSTDIO */  /* The big, slow, and stupid way */
+#else /* !USE_STD_STDIO */     /* The big, slow, and stupid way */
 
     static char buf[4192];
 
@@ -348,7 +348,7 @@ thats_all_folks:
     else
        str_set(str, No);
 
-#endif /* STDSTDIO */
+#endif /* USE_STD_STDIO */
 
     return str->str_cur ? str->str_ptr : Nullch;
 }
diff --git a/xf b/xf
index be92503..14cefda 100755 (executable)
--- a/xf
+++ b/xf
@@ -2,7 +2,6 @@
 
 while (<>) {
     study;
-    s/\bFCMD\b/FF/g && study;
     s/\bSTR\b/SV/g && study;
     s/\bARRAY\b/AV/g && study;
     s/\bARG\b/OP/g && study;
@@ -13,9 +12,8 @@ while (<>) {
     s/\bSTIO\b/IO/g && study;
     s/\bSTAB\b/GV/g && study;
     s/\bSTBP\b/GP/g && study;
-    s/\bSUBR\b/SUB/g && study;
+    s/\bSUBR\b/CV/g && study;
 
-    s/\bNullfcmd\b/Nullfield/g && study;
     s/\bNullstr\b/Nullsv/g && study;
     s/\bNullarg\b/Nullop/g && study;
     s/\bNullcmd\b/Nullcop/g && study;
@@ -45,7 +43,7 @@ while (<>) {
     s/\bstab_xhash\b/GvHV/g && study;
     s/\bstab_array\b/GvAVn/g && study;
     s/\bstab_xarray\b/GvAV/g && study;
-    s/\bstab_sub\b/GvSUB/g && study;
+    s/\bstab_sub\b/GvCV/g && study;
     s/\bstab_form\b/GvFORM/g && study;
     s/\bstab_magic\b/GvMAGIC/g && study;
     s/\bstab_val\b/GvSV/g && study;
@@ -69,12 +67,8 @@ while (<>) {
 
     s/\bSTABSET\b/SvSETMAGIC/g && study;
     s/\bstabset\b/sv_setmagic/g && study;
-    s/\bSTR_SSET\b/SvSetSV/g && study;
-    s/\bSTR_SSET\b/SvSetPV/g && study;
-    s/\bSTR_SSET\b/SvSetNV/g && study;
+    s/\bSTR_SSET\b/sv_setsv/g && study;
     s/\bSTR_GROW\b/SvGROW/g && study;
-    s/SINGLE\b/CONST/g && study;
-    s/DOUBLE\b/INTERP/g && study;
 
     s/\bstr_true\b/SvTRUE/g && study;
     s/\bstr_peek\b/SvPEEK/g && study;
@@ -101,76 +95,42 @@ while (<>) {
     s/\bastore\b/av_store/g && study;
     s/\baunshift\b/av_unshift/g && study;
     s/\bcastulong\b/cast_ulong/g && study;
-    s/\bcmd_exec\b/cop_exec/g && study;
-    s/\bcmd_free\b/cop_free/g && study;
-    s/\bcmd_to_arg\b/cop_to_arg/g && study;
+    s/\bcmd_free\b/op_free/g && study;
     s/\bcurcmd\b/curcop/g && study;
-    s/\bcval_to_arg\b/pv_to_op/g && study;
-    s/\bdehoist\b/dehoistXXX/g && study;
-    s/\bldehoist\b/ldehoistXXX/g && study;
-    s/\bdodb\b/CopDBadd/g && study;
     s/\bdump_arg\b/dump_op/g && study;
-    s/\bdump_cmd\b/dump_cop/g && study;
+    s/\bdump_cmd\b/dump_op/g && study;
     s/\bdump_spat\b/dump_pm/g && study;
     s/\bdump_stab\b/dump_gv/g && study;
     s/\bdumpfds\b/dump_fds/g && study;
-    s/\benvix\b/setenv_getix/g && study;
-    s/\beval\b/oldeval/g && study;
-    s/\bevalstatic\b/op_fold_const/g && study;
     s/\bfbmcompile\b/fbm_compile/g && study;
     s/\bfbminstr\b/fbm_instr/g && study;
-    s/\bfixl\b/fixlXXX/g && study;
-    s/\bform_parseargs\b/XXX/g && study;
-    s/\bformat\b/run_format/g && study;
-    s/\bfree_arg\b/op_behead/g && study;
     s/\bfstab\b/newGVfile/g && study;
     s/\bgenstab\b/newGVgen/g && study;
     s/\bgrow_dlevel\b/deb_growlevel/g && study;
-    s/\bgrowstr\b/cv_grow/g && study;
     s/\bhadd\b/gv_HVn/g && study;
     s/\bhclear\b/hv_clear/g && study;
-    s/\bhdbmclose\b/hv_dbmclose/g && study;
-    s/\bhdbmopen\b/hv_dbmopen/g && study;
-    s/\bhdbmstore\b/hv_dbmstore/g && study;
     s/\bhdelete\b/hv_delete/g && study;
     s/\bhentdelayfree\b/he_delayfree/g && study;
     s/\bhentfree\b/he_free/g && study;
     s/\bhfetch\b/hv_fetch/g && study;
     s/\bhfree\b/hv_free/g && study;
-    s/\bhide_ary\b/hide_aryXXX/g && study;
     s/\bhiterinit\b/hv_iterinit/g && study;
     s/\bhiterkey\b/hv_iterkey/g && study;
     s/\bhiternext\b/hv_iternext/g && study;
     s/\bhiterval\b/hv_iterval/g && study;
     s/\bhnew\b/newHV/g && study;
     s/\bhstore\b/hv_store/g && study;
-    s/\binterp\b/sv_interp/g && study;
-    s/\bintrpcompile\b/sv_intrpcompile/g && study;
     s/\blistish\b/forcelist/g && study;
-    s/\bload_format\b/parse_format/g && study;
-    s/\bmake_acmd\b/newACOP/g && study;
-    s/\bmake_ccmd\b/newCCOP/g && study;
-    s/\bmake_form\b/newFORM/g && study;
-    s/\bmake_icmd\b/newICOP/g && study;
-    s/\bmake_list\b/flatten/g && study;
-    s/\bmake_match\b/newPM/g && study;
-    s/\bmake_op\b/newOP/g && study;
-    s/\bmake_split\b/newSPLIT/g && study;
-    s/\bmake_sub\b/newSUB/g && study;
-    s/\bmake_usub\b/newUSUB/g && study;
     s/\bmaybelistish\b/maybeforcelist/g && study;
-    s/\bmod_match\b/bind_match/g && study;
     s/\bmylstat\b/my_lstat/g && study;
     s/\bmypclose\b/my_pclose/g && study;
     s/\bmypfiopen\b/my_pfiopen/g && study;
     s/\bmypopen\b/my_popen/g && study;
     s/\bmystat\b/my_stat/g && study;
     s/\bop_new\b/newOP/g && study;
-    s/\bopt_arg\b/op_optimize/g && study;
-    s/\bparselist\b/parse_list/g && study;
     s/\bperl_alloc\b/perl_alloc/g && study;
-    s/\bperl_callback\b/perl_callback/g && study;
-    s/\bperl_callv\b/perl_callv/g && study;
+    s/\bperl_callback\b/perl_callpv/g && study;
+    s/\bperl_callv\b/perl_callargv/g && study;
     s/\bperl_construct\b/perl_construct/g && study;
     s/\bperl_destruct\b/perl_destruct/g && study;
     s/\bperl_free\b/perl_free/g && study;
@@ -203,8 +163,6 @@ while (<>) {
     s/\bscanstr\b/scan_str/g && study;
     s/\bscansubst\b/scan_subst/g && study;
     s/\bscantrans\b/scan_trans/g && study;
-    s/\bspat_free\b/pm_free/g && study;
-    s/\bstab2arg\b/gv_to_op/g && study;
     s/\bstab_check\b/gv_check/g && study;
     s/\bstab_clear\b/gv_clear/g && study;
     s/\bstab_efullname\b/gv_efullname/g && study;
@@ -216,7 +174,6 @@ while (<>) {
     s/\bstr_2mortal\b/sv_2mortal/g && study;
     s/\bstr_2num\b/sv_2num/g && study;
     s/\bstr_2ptr\b/sv_2ptr/g && study;
-    s/\bstr_append_till\b/sv_append_till/g && study;
     s/\bstr_cat\b/sv_catpv/g && study;
     s/\bstr_chop\b/sv_chop/g && study;
     s/\bstr_cmp\b/sv_cmp/g && study;