summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xConfigure86
-rw-r--r--MANIFEST42
-rw-r--r--Makefile.SH39
-rw-r--r--README24
-rw-r--r--h2pl/README71
-rw-r--r--os2/Makefile124
-rw-r--r--patchlevel.h2
-rw-r--r--usub/Makefile16
8 files changed, 371 insertions, 33 deletions
diff --git a/Configure b/Configure
index 1fe5fe3b12..41ad39c243 100755
--- a/Configure
+++ b/Configure
@@ -8,16 +8,7 @@
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
-# $Header: Configure,v 3.0.1.7 90/03/28 09:14:53 lwall Locked $
-
-: make sure these files are renamed
-test -f config_h.SH || mv -f config.h.SH config_h.SH
-test -f perl_man.1 || mv -f perl.man.1 perl_man.1
-test -f perl_man.2 || mv -f perl.man.2 perl_man.2
-test -f perl_man.3 || mv -f perl.man.3 perl_man.3
-test -f perl_man.4 || mv -f perl.man.4 perl_man.4
-test -f t/op.s || mv -f t/op.subst t/op.s
-
+# $Header: Configure,v 3.0.1.8 90/08/09 01:47:24 lwall Locked $
#
# Yes, you may rip this off to use in other distribution packages.
# (Note: this Configure script was generated automatically. Rather than
@@ -113,6 +104,7 @@ d_bcopy=''
d_bzero=''
d_castneg=''
d_charsprf=''
+d_chsize=''
d_crypt=''
cryptlib=''
d_csh=''
@@ -140,6 +132,7 @@ d_odbm=''
d_readdir=''
d_rename=''
d_rmdir=''
+d_select=''
d_setegid=''
d_seteuid=''
d_setpgrp=''
@@ -161,6 +154,7 @@ d_strctcpy=''
d_strerror=''
d_symlink=''
d_syscall=''
+d_truncate=''
d_varargs=''
d_vfork=''
d_voidsig=''
@@ -212,6 +206,7 @@ n=''
c=''
package=''
randbits=''
+scriptdir=''
sig_name=''
spitshell=''
shsharp=''
@@ -1406,19 +1401,21 @@ elif test -f /lib/libc.a; then
else
ans=`loc libc.a blurfl/dyick $libpth`
if test ! -f "$ans"; then
- ans=`loc libc blurfl/dyick $libpth`
+ ans=`loc Slibc.a blurfl/dyick $xlibpth`
fi
if test ! -f "$ans"; then
- ans=`loc clib blurfl/dyick $libpth`
+ ans=`loc Mlibc.a blurfl/dyick $xlibpth`
fi
if test ! -f "$ans"; then
- ans=`loc Slibc.a blurfl/dyick $xlibpth`
+ ans=`loc Llibc.a blurfl/dyick $xlibpth`
fi
if test ! -f "$ans"; then
- ans=`loc Mlibc.a blurfl/dyick $xlibpth`
+ ans=`loc libc blurfl/dyick $libpth`
fi
if test ! -f "$ans"; then
- ans=`loc Llibc.a blurfl/dyick $xlibpth`
+ ans=`loc clib blurfl/dyick $libpth`
+ else
+ libnames="$libnames "`loc clib blurfl/dyick $libpth`
fi
if test -f "$ans"; then
echo "Your C library is in $ans, of all places."
@@ -1584,6 +1581,10 @@ else
d_charvspr="$undef"
fi
+: see if chsize exists
+set chsize d_chsize
+eval $inlibc
+
: see if crypt exists
echo " "
if $contains '^crypt$' libc.list >/dev/null 2>&1; then
@@ -1908,6 +1909,10 @@ eval $inlibc
set rmdir d_rmdir
eval $inlibc
+: see if select exists
+set select d_select
+eval $inlibc
+
: see if setegid exists
set setegid d_setegid
eval $inlibc
@@ -2078,6 +2083,10 @@ case "$flags" in
esac
$rm -f try.c try
+: see if truncate exists
+set truncate d_truncate
+eval $inlibc
+
: see if this is a varargs system
echo " "
if $test -r /usr/include/varargs.h ; then
@@ -2511,6 +2520,49 @@ y*) mallocsrc='malloc.c'; mallocobj='malloc.o';;
*) mallocsrc=''; mallocobj='';;
esac
+: determine where public executables go
+case "$scriptdir" in
+'')
+ dflt="$bin"
+ : guess some guesses
+ test -d /usr/share/scripts && dflt=/usr/share/scripts
+ test -d /usr/share/bin && dflt=/usr/share/bin
+ ;;
+*) dflt="$scriptdir"
+ ;;
+esac
+cont=true
+$cat <<EOM
+
+Some installations have a separate directory just for executable scripts so
+that they can mount it across multiple architectures but keep the scripts in
+one spot. You might, for example, have a subdirectory of /usr/share for this.
+Or you might just lump your scripts in with all your other executables.
+
+EOM
+while $test "$cont" ; do
+ rp="Where do you keep publicly executable scripts? (~name ok) [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ scriptdir="$ans"
+ scriptdir=`./filexp "$scriptdir"`
+ if test -d $scriptdir; then
+ cont=''
+ else
+ case "$fastread" in
+ yes) dflt=y;;
+ *) dflt=n;;
+ esac
+ rp="Directory $scriptdir doesn't exist. Use that name anyway? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ dflt=''
+ case "$ans" in
+ y*) cont='';;
+ esac
+ fi
+done
+
: determine compiler compiler
case "$yacc" in
'') dflt=yacc;;
@@ -2607,6 +2659,7 @@ d_bcopy='$d_bcopy'
d_bzero='$d_bzero'
d_castneg='$d_castneg'
d_charsprf='$d_charsprf'
+d_chsize='$d_chsize'
d_crypt='$d_crypt'
cryptlib='$cryptlib'
d_csh='$d_csh'
@@ -2634,6 +2687,7 @@ d_odbm='$d_odbm'
d_readdir='$d_readdir'
d_rename='$d_rename'
d_rmdir='$d_rmdir'
+d_select='$d_select'
d_setegid='$d_setegid'
d_seteuid='$d_seteuid'
d_setpgrp='$d_setpgrp'
@@ -2655,6 +2709,7 @@ d_strctcpy='$d_strctcpy'
d_strerror='$d_strerror'
d_symlink='$d_symlink'
d_syscall='$d_syscall'
+d_truncate='$d_truncate'
d_varargs='$d_varargs'
d_vfork='$d_vfork'
d_voidsig='$d_voidsig'
@@ -2706,6 +2761,7 @@ n='$n'
c='$c'
package='$package'
randbits='$randbits'
+scriptdir='$scriptdir'
sig_name='$sig_name'
spitshell='$spitshell'
shsharp='$shsharp'
diff --git a/MANIFEST b/MANIFEST
index b9c7c8904e..74327dff07 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -40,8 +40,8 @@ eg/muck A program to find missing make dependencies
eg/muck.man Manual page for muck
eg/myrup A program to find lightly loaded machines
eg/nih Script to insert #! workaround
-eg/rename A program to rename files
eg/relink A program to change symbolic links
+eg/rename A program to rename files
eg/rmfrom A program to feed doomed filenames to
eg/scan/scan_df Scan for filesystem anomalies
eg/scan/scan_last Scan for login anomalies
@@ -63,26 +63,42 @@ evalargs.xc The arg evaluator of eval.c
form.c Format processing
form.h Public declarations for the above
gettest A little script to test the get* routines
+h2ph.SH A thing to turn C .h file into perl .ph files
+h2pl/README How to turn .ph files into .pl files
+h2pl/cbreak.pl cbreak routines using .ph
+h2pl/cbreak2.pl cbreak routines using .pl
+h2pl/eg/sizeof.ph Sample sizeof array initialization
+h2pl/eg/sys/errno.pl Sample translated errno.pl
+h2pl/eg/sys/ioctl.pl Sample translated ioctl.pl
+h2pl/eg/sysexits.pl Sample translated sysexits.pl
+h2pl/getioctlsizes Program to extract types from ioctl.h
+h2pl/mksizes Program to make %sizeof array.
+h2pl/mkvars Program to make .pl from .ph files
+h2pl/tcbreak cbreak test routine using .ph
+h2pl/tcbreak2 cbreak test routine using .pl
handy.h Handy definitions
hash.c Associative arrays
hash.h Public declarations for the above
ioctl.pl Sample ioctl.pl
lib/abbrev.pl An abbreviation table builder
-lib/look.pl A "look" equivalent
lib/complete.pl A command completion subroutine
lib/ctime.pl A ctime workalike
lib/dumpvar.pl A variable dumper
+lib/flush.pl Routines to do single flush
lib/getopt.pl Perl library supporting option parsing
lib/getopts.pl Perl library supporting option parsing
lib/importenv.pl Perl routine to get environment into variables
+lib/look.pl A "look" equivalent
+lib/nsyslog.pl Newer syslog.pl
lib/perldb.pl Perl debugging routines
+lib/pwd.pl Routines to keep track of PWD environment variable
lib/stat.pl Perl library supporting stat function
lib/syslog.pl Perl library supporting syslogging
lib/termcap.pl Perl library supporting termcap usage
lib/validate.pl Perl library supporting wholesale file mode validation
makedepend.SH Precursor to makedepend
makedir.SH Precursor to makedir
-makelib.SH A thing to turn C .h file into perl .h files
+makelib.SH Deprecated (renamed to h2ph)
malloc.c A version of malloc you might not want
msdos/Changes.dds Expanation of MS-DOS patches by Diomidis Spinellis
msdos/Makefile MS-DOS makefile
@@ -97,19 +113,26 @@ msdos/eg/lf.bat Convert files from MS-DOS to Unix line termination
msdos/glob.c A command equivalent to csh glob
msdos/msdos.c MS-DOS ioctl, sleep, gete?[gu]if, spawn, aspawn
msdos/popen.c My_popen and my_pclose for MS-DOS
+os2/Makefile Makefile for OS/2
+os2/README.OS2 Notes for OS/2
+os2/config.h Configuration file for OS/2
+os2/eg/os2.pl Sample script for OS/2
+os2/eg/syscalls.pl Example of syscall on OS/2
+os2/popen.c Code for opening pipes
+os2/suffix.c Code for creating backup filenames
patchlevel.h The current patch level of perl
perl.h Global declarations
+perl.y Yacc grammar for perl
perl_man.1 The manual page(s), first fourth
perl_man.2 The manual page(s), second fourth
perl_man.3 The manual page(s), third fourth
perl_man.4 The manual page(s), fourth fourth
-perl.y Yacc grammar for perl
perlsh A poor man's perl shell
perly.c main()
regcomp.c Regular expression compiler
regcomp.h Private declarations for above
-regexp.h Public declarations for the above
regexec.c Regular expression evaluator
+regexp.h Public declarations for the above
server A server to test sockets
spat.h Search pattern declarations
stab.c Symbol table stuff
@@ -175,13 +198,13 @@ t/op.range See if .. works
t/op.read See if read() works
t/op.regexp See if regular expressions work
t/op.repeat See if x operator works
+t/op.s See if substitutions work
t/op.sleep See if sleep works
t/op.sort See if sort works
t/op.split See if split works
t/op.sprintf See if sprintf works
t/op.stat See if stat works
t/op.study See if study works
-t/op.s See if substitutions work
t/op.substr See if substr works
t/op.time See if time functions work
t/op.undef See if undef works
@@ -190,6 +213,13 @@ t/op.vec See if vectors work
t/op.write See if write works
t/re_tests Input file for op.regexp
toke.c The tokener
+usersub.c User supplied (possibly proprietary) subroutines
+usub/Makefile Makefile for curseperl
+usub/curses.mus Glue routines for BSD curses
+usub/man2mus A manual page to .mus translator
+usub/mus A .mus to .c translator
+usub/pager A sample pager in curseperl
+usub/usersub.c An initialization file to call curses glue routines
util.c Utility routines
util.h Public declarations for the above
x2p/EXTERN.h Same as above
diff --git a/Makefile.SH b/Makefile.SH
index 122b6dcf4c..33ba8ab73e 100644
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -25,9 +25,13 @@ esac
echo "Extracting Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
-# $Header: Makefile.SH,v 3.0.1.6 90/03/27 15:27:15 lwall Locked $
+# $Header: Makefile.SH,v 3.0.1.7 90/08/09 02:19:56 lwall Locked $
#
# $Log: Makefile.SH,v $
+# Revision 3.0.1.7 90/08/09 02:19:56 lwall
+# patch19: Configure now asks where you want to put scripts
+# patch19: Added support for linked-in C subroutines
+#
# Revision 3.0.1.6 90/03/27 15:27:15 lwall
# patch16: MSDOS support
#
@@ -56,6 +60,7 @@ cat >Makefile <<!GROK!THIS!
CC = $cc
YACC = $yacc
bin = $bin
+scriptdir = $scriptdir
privlib = $privlib
mansrc = $mansrc
manext = $manext
@@ -76,13 +81,15 @@ public = perl taintperl $suidperl
cat >>Makefile <<'!NO!SUBS!'
private =
+scripts = h2ph
+
MAKE = make
-manpages = perl.man
+manpages = perl.man h2ph.man
util =
-sh = Makefile.SH makedepend.SH
+sh = Makefile.SH makedepend.SH h2ph.SH
h1 = EXTERN.h INTERN.h arg.h array.h cmd.h config.h form.h handy.h
h2 = hash.h perl.h regcomp.h regexp.h spat.h stab.h str.h util.h
@@ -117,31 +124,39 @@ SHELL = /bin/sh
.c.o:
$(CC) -c $(CFLAGS) $(LARGE) $*.c
-all: $(public) $(private) $(util) perl.man
+all: $(public) $(private) $(util) perl.man 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.
-perl: perl.o $(obj)
- $(CC) $(LARGE) $(LDFLAGS) $(obj) perl.o $(libs) -o perl
+perl: perl.o $(obj) usersub.o
+ $(CC) $(LARGE) $(LDFLAGS) $(obj) perl.o usersub.o $(libs) -o perl
+
+uperl.o: perl.o $(obj)
+ ld $(LARGE) $(LDFLAGS) -r $(obj) perl.o $(libs) -o uperl.o
+
+saber: perl.c
+ # load $(c) perl.c
# 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: tperl.o sperly.o $(tobj)
- $(CC) $(LARGE) $(LDFLAGS) sperly.o $(tobj) tperl.o $(libs) -o suidperl
+suidperl: tperl.o sperly.o $(tobj) usersub.o
+ $(CC) $(LARGE) $(LDFLAGS) sperly.o $(tobj) tperl.o usersub.o $(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: tperl.o tperly.o $(tobj)
- $(CC) $(LARGE) $(LDFLAGS) tperly.o $(tobj) tperl.o $(libs) -o taintperl
+taintperl: tperl.o tperly.o $(tobj) usersub.o
+ $(CC) $(LARGE) $(LDFLAGS) tperly.o $(tobj) tperl.o usersub.o $(libs) \
+ -o taintperl
# Replicating all this junk is yucky, but I don't see a portable way to fix it.
@@ -270,7 +285,7 @@ perly.h: perl.c
touch perly.h
perl.c: perl.y
- @ echo Expect 25 shift/reduce errors...
+ @ echo Expect 29 shift/reduce and 59 reduce/reduce conflicts...
$(YACC) -d perl.y
mv y.tab.c perl.c
mv y.tab.h perly.h
@@ -308,6 +323,8 @@ esac
cat >>Makefile <<'!NO!SUBS!'
- test $(bin) = /usr/bin || rm -f /usr/bin/perl
- test $(bin) = /usr/bin || $(SLN) $(bin)/perl /usr/bin || cp $(bin)/perl /usr/bin
+ - chmod +x $(scripts)
+ - cp $(scripts) $(scriptdir)
- sh ./makedir $(privlib)
- \
if test `pwd` != $(privlib); then \
diff --git a/README b/README
index 5029dcf7d3..98d557300c 100644
--- a/README
+++ b/README
@@ -17,6 +17,26 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ My interpretation of the GNU General Public License is that no Perl
+ script falls under the terms of the License unless you explicitly put
+ said script under the terms of the License yourself. Furthermore, any
+ object code linked with uperl.o does not automatically fall under the
+ terms of the License, provided such object code only adds definitions
+ of subroutines and variables, and does not otherwise impair the
+ resulting interpreter from executing any standard Perl script. I
+ consider linking in C subroutines in this manner to be the moral
+ equivalent of defining subroutines in the Perl language itself. You
+ may sell such an object file as proprietary provided that you provide
+ or offer to provide the Perl source, as specified by the GNU General
+ Public License. (This is merely an alternate way of specifying input
+ to the program.) You may also sell a binary produced by the dumping of
+ a running Perl script that belongs to you, provided that you provide or
+ offer to provide the Perl source as specified by the License. (The
+ fact that a Perl interpreter and your code are in the same binary file
+ is, in this case, a form of mere aggregation.) This is my interpretation
+ of the License. If you still have concerns or difficulties understanding
+ my intent, feel free to contact me.
+
--------------------------------------------------------------------------
Perl is a language that combines some of the features of C, sed, awk and shell.
@@ -80,10 +100,14 @@ Installation
SGI machines may need -Ddouble="long float".
Ultrix (2.3) may need to hand assemble teval.s with a -J switch.
Ultrix on MIPS machines may need -DLANGUAGE_C.
+ MIPS machines may need to turn off -O on perly.c and tperly.c.
SCO Xenix may need -m25000 for yacc.
Xenix 386 needs -Sm10000 for yacc.
Genix needs to use libc rather than libc_s, or #undef VARARGS.
NCR Tower 32 (OS 2.01.01) may need -W2,-Sl,2000 and #undef MKDIR.
+ A/UX may need -ZP -DPOSIX, and -g if big cc is used.
+ FPS machines may need -J and -DBADSWITCH.
+ If you get syntax errors on '(', try -DCRIPPLED_CC or -DBADSWITCH or both.
Machines with half-implemented dbm routines will need to #undef ODBM & NDBM.
C's that don't try to restore registers on longjmp() may need -DJMPCLOBBER.
(Try this if you get random glitches.)
diff --git a/h2pl/README b/h2pl/README
new file mode 100644
index 0000000000..5fe8ae7aa3
--- /dev/null
+++ b/h2pl/README
@@ -0,0 +1,71 @@
+[This file of Tom Christiansen's has been edited to change makelib to h2ph
+and .h to .ph where appropriate--law.]
+
+This directory contains files to help you convert the *.ph files generated my
+h2ph out of the perl source directory into *.pl files with all the
+indirection of the subroutine calls removed. The .ph version will be more
+safely portable, because if something isn't defined on the new system, like
+&TIOCGETP, then you'll get a fatal run-time error on the system lacking that
+function. Using the .pl version means that the subsequent scripts will give
+you a 0 $TIOCGETP and God only knows what may then happen. Still, I like the
+.pl stuff because they're faster to load.
+
+FIrst, you need to run h2ph on things like sys/ioctl.h to get stuff
+into the perl library directory, often /usr/local/lib/perl. For example,
+ # h2ph sys/ioctl.h
+takes /usr/include/sys/ioctl.h as input and writes (without i/o redirection)
+the file /usr/local/lib/perl/sys/ioctl.ph, which looks like this
+
+ eval 'sub TIOCM_RTS {0004;}';
+ eval 'sub TIOCM_ST {0010;}';
+ eval 'sub TIOCM_SR {0020;}';
+ eval 'sub TIOCM_CTS {0040;}';
+ eval 'sub TIOCM_CAR {0100;}';
+
+and much worse, rather than what Larry's ioctl.pl from the perl source dir has,
+which is:
+
+ $TIOCM_RTS = 0004;
+ $TIOCM_ST = 0010;
+ $TIOCM_SR = 0020;
+ $TIOCM_CTS = 0040;
+ $TIOCM_CAR = 0100;
+
+[Workaround for fixed bug in makedir/h2ph deleted--law.]
+
+The more complicated ioctl subs look like this:
+
+ eval 'sub TIOCGSIZE {&TIOCGWINSZ;}';
+ eval 'sub TIOCGWINSZ {&_IOR("t", 104, \'struct winsize\');}';
+ eval 'sub TIOCSETD {&_IOW("t", 1, \'int\');}';
+ eval 'sub TIOCGETP {&_IOR("t", 8,\'struct sgttyb\');}';
+
+The _IO[RW] routines use a %sizeof array, which (presumably)
+is keyed on the type name with the value being the size in bytes.
+
+To build %sizeof, try running this in this directory:
+
+ % ./getioctlsizes
+
+Which will tell you which things the %sizeof array needs
+to hold. You can try to build a sizeof.ph file with:
+
+ % ./getioctlsizes | ./mksizes > sizeof.ph
+
+Note that mksizes hardcodes the #include files for all the types, so it will
+probably require customization. Once you have sizeof.ph, install it in the
+perl library directory. Run my tcbreak script to see whether you can do
+ioctls in perl now. You'll get some kind of fatal run-time error if you
+can't. That script should be included in this directory.
+
+If this works well, now you can try to convert the *.ph files into
+*.pl files. Try this:
+
+ foreach file ( sysexits.ph sys/{errno.ph,ioctl.ph} )
+ ./mkvars $file > t/$file:r.pl
+ end
+
+The last one will be the hardest. If it works, should be able to
+run tcbreak2 and have it work the same as tcbreak.
+
+Good luck.
diff --git a/os2/Makefile b/os2/Makefile
new file mode 100644
index 0000000000..68cbcf287c
--- /dev/null
+++ b/os2/Makefile
@@ -0,0 +1,124 @@
+#
+# Makefile for compiling Perl under OS/2
+#
+# Needs a Unix compatible make.
+# This makefile works for an initial compilation. It does not
+# include all dependencies and thus is unsuitable for serious
+# development work. Hey, I'm just inheriting what Diomidis gave me.
+#
+# Originally by Diomidis Spinellis, March 1990
+# Adjusted for OS/2 port by Raymond Chen, June 1990
+#
+
+# Source files
+SRC = array.c cmd.c cons.c consarg.c doarg.c doio.c dolist.c dump.c \
+eval.c form.c hash.c perl.y perly.c regcomp.c regexec.c \
+stab.c str.c toke.c util.c os2.c popen.c director.c
+
+# Object files
+OBJ = perl.obj array.obj cmd.obj cons.obj consarg.obj doarg.obj doio.obj \
+dolist.obj dump.obj eval.obj form.obj hash.obj perly.obj regcomp.obj \
+regexec.obj stab.obj str.obj toke.obj util.obj os2.obj popen.obj \
+director.obj suffix.obj
+
+# Files in the OS/2 distribution
+DOSFILES=config.h director.c makefile os2.c popen.c suffix.c readme.os2
+
+# Yacc flags
+YFLAGS=-d
+
+# Manual pages
+MAN=perlman.1 perlman.2 perlman.3 perlman.4
+
+CC=cl
+# CBASE = flags everybody gets
+# CPLAIN = flags for modules that give the compiler indigestion
+# CFLAGS = flags for milder modules
+# PERL = which version of perl to build
+#
+# For preliminary building: No optimization, DEBUGGING set, symbols included.
+#CBASE=-AL -Zi -G2 -Gs -DDEBUGGING
+#CPLAIN=$(CBASE) -Od
+#CFLAGS=$(CBASE) -Od
+#PERL=perlsym.exe
+
+# For the final build: Optimization on, no DEBUGGING, symbols stripped.
+CBASE=-AL -Zi -G2 -Gs
+CPLAIN=$(CBASE) -Oilt
+CFLAGS=$(CBASE) -Ox
+PERL=perl.exe
+
+# Destination directory for executables
+DESTDIR=\usr\bin
+
+# Deliverables
+#
+all: $(PERL) glob.exe
+
+perl.exe: $(OBJ) perl.arp
+ link @perl.arp,perl,nul,/stack:32767 /NOE;
+ exehdr /nologo /newfiles /pmtype:windowcompat perl.exe >nul
+
+perlsym.exe: $(OBJ) perl.arp
+ link @perl.arp,perlsym,nul,/stack:32767 /NOE /CODE;
+ exehdr /nologo /newfiles /pmtype:windowcompat perlsym.exe >nul
+
+perl.arp:
+ echo array+cmd+cons+consarg+doarg+doio+dolist+dump+ >perl.arp
+ echo eval+form+hash+perl+perly+regcomp+regexec+stab+suffix+ >>perl.arp
+ echo str+toke+util+os2+popen+director+\c600\lib\setargv >>perl.arp
+
+glob.exe: glob.c
+ $(CC) glob.c \c600\lib\setargv.obj -link /NOE
+ exehdr /nologo /newfiles /pmtype:windowcompat glob.exe >nul
+
+array.obj: array.c
+ $(CC) $(CPLAIN) -c array.c
+cmd.obj: cmd.c
+cons.obj: cons.c perly.h
+consarg.obj: consarg.c
+# $(CC) $(CPLAIN) -c consarg.c
+doarg.obj: doarg.c
+doio.obj: doio.c
+dolist.obj: dolist.c
+dump.obj: dump.c
+eval.obj: eval.c evalargs.xc
+ $(CC) /B3 \c600\binp\c3l $(CFLAGS) -c eval.c
+form.obj: form.c
+hash.obj: hash.c
+perl.obj: perl.y
+perly.obj: perly.c
+regcomp.obj: regcomp.c
+regexec.obj: regexec.c
+stab.obj: stab.c
+ $(CC) $(CPLAIN) -c stab.c
+str.obj: str.c
+suffix.obj: suffix.c
+toke.obj: toke.c
+ $(CC) /B3 \c600\binp\c3l $(CFLAGS) -c toke.c
+util.obj: util.c
+# $(CC) $(CPLAIN) -c util.c
+perly.h: ytab.h
+ cp ytab.h perly.h
+director.obj: director.c
+popen.obj: popen.c
+os2.obj: os2.c
+
+perl.1: $(MAN)
+ nroff -man $(MAN) >perl.1
+
+install: all
+ exepack perl.exe $(DESTDIR)\perl.exe
+ exepack glob.exe $(DESTDIR)\glob.exe
+
+clean:
+ rm -f *.obj *.exe perl.1 perly.h perl.arp
+
+tags:
+ ctags *.c *.h *.xc
+
+dosperl:
+ mv $(DOSFILES) ../perl30.new
+
+doskit:
+ mv $(DOSFILES) ../os2
diff --git a/patchlevel.h b/patchlevel.h
index 1af605efed..111b8fe68d 100644
--- a/patchlevel.h
+++ b/patchlevel.h
@@ -1 +1 @@
-#define PATCHLEVEL 18
+#define PATCHLEVEL 19
diff --git a/usub/Makefile b/usub/Makefile
new file mode 100644
index 0000000000..cf3a48b3ea
--- /dev/null
+++ b/usub/Makefile
@@ -0,0 +1,16 @@
+SRC = /usr/local/src/perl
+GLOBINCS =
+LOCINCS =
+LIBS = -lcurses -ltermlib
+
+curseperl: $(SRC)/uperl.o usersub.o curses.o
+ cc $(SRC)/uperl.o usersub.o curses.o $(LIBS) -lm -o curseperl
+
+usersub.o: usersub.c
+ cc -c -I$(SRC) $(GLOBINCS) -DDEBUGGING -g usersub.c
+
+curses.o: curses.c
+ cc -c -I$(SRC) $(GLOBINCS) -DDEBUGGING -g curses.c
+
+curses.c: curses.mus
+ mus curses.mus >curses.c