summaryrefslogtreecommitdiff
path: root/msdos
diff options
context:
space:
mode:
Diffstat (limited to 'msdos')
-rw-r--r--msdos/Changes.dds57
-rw-r--r--msdos/Makefile101
-rw-r--r--msdos/README.msdos195
-rw-r--r--msdos/Wishlist.dds17
-rw-r--r--msdos/chdir.c96
-rw-r--r--msdos/config.h938
-rw-r--r--msdos/dir.h63
-rw-r--r--msdos/directory.c185
-rw-r--r--msdos/eg/crlf.bat32
-rw-r--r--msdos/eg/drives.bat41
-rw-r--r--msdos/eg/lf.bat33
-rw-r--r--msdos/glob.c17
-rw-r--r--msdos/msdos.c260
-rw-r--r--msdos/popen.c186
-rw-r--r--msdos/usage.c51
15 files changed, 0 insertions, 2272 deletions
diff --git a/msdos/Changes.dds b/msdos/Changes.dds
deleted file mode 100644
index 1eed759cf9..0000000000
--- a/msdos/Changes.dds
+++ /dev/null
@@ -1,57 +0,0 @@
-These are the changes done by the `patches' file:
-
-[These patches have been applied, more or less, so I don't supply the
-patches file--law]
-
-Compilation of some portions is done conditional on the definition
-of the following symbols:
-
-BINARY Enables the usage of setmode under MSDOS (added binmode command)
-BUGGY_MSC Adds #pragma_function(memset) to avoid internal compiler error
-CHOWN Enables chown
-CHROOT Enables chroot
-FORK Enables fork and changes the compilation of system
-GETLOGIN Enables getlogin
-GETPPID Enables getppid
-GROUP Enables all the group access functions
-KILL Enables kill
-LINK Enables link
-PASSWD Enables all the password access functions
-PIPE Enables the pipe function
-WAIT Enables the wait function
-UMASK Enables the umask function
-
-S_IFBLK * Enables the block special device check
-S_ISGID * Enables the setgid check
-S_ISUID * Enables the setuid check
-S_ISVTX * Enables the vtx check
-unix * Compiles globbing for Unix
-MSDOS * Compiles globbing for MS-DOS
- Closes stdaux and stdprn on startup
- Adds a copyright message for -v
- Disables the compilation of my_popen, my_pclose as the
- are in a separate file.
-
-Symbols marked with * are defined in the compilation environment. The
-rest should be added to config.h (config.h.SH). All functions when not
-supported give a fatal error.
-
-Added documentation for the binmode function in the manual.
-
-Fixed the following bugs:
-
-In eval.c function eval if ioctl or fcntl returned something
-other than 0 or -1 the result was a random number as the
-double `value' variable wasn't set to `anum'.
-
-In doio.c function do_exec there were two errors associated with
-firing up the shell when the execv fails. First argv was not freed,
-secondly an attempt was made to start up the shell with the cmd
-string that was now cut to pieces for the execv. Also the maxible
-possible length of argv was calculated by (s - cmd). Problem was
-that s was not pointing to the end of the string, but to the first
-non alpha.
-
-[These are incorporated in patches 15 and 16--law]
-
-Diomidis Spinellis, March 1990
diff --git a/msdos/Makefile b/msdos/Makefile
deleted file mode 100644
index eeb15e8068..0000000000
--- a/msdos/Makefile
+++ /dev/null
@@ -1,101 +0,0 @@
-#
-# Makefile for compiling Perl under MS-DOS
-#
-# 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. But who would do serious development under
-# MS-DOS?
-#
-# By Diomidis Spinellis, March 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 msdos.c popen.c directory.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 msdos.obj popen.obj \
-directory.obj
-
-# Files in the MS-DOS distribution
-DOSFILES=config.h dir.h director.c glob.c makefile msdos.c popen.c readme.msd \
-changes.dds wishlist.dds patches manifest
-
-# Yacc flags
-YFLAGS=-d
-
-# Manual pages
-MAN=perlman.1 perlman.2 perlman.3 perlman.4
-
-CC=cc
-# Cflags for the files that break under the optimiser
-CPLAIN=-AL -DCRIPPLED_CC
-# Cflags for all the rest
-CFLAGS=$(CPLAIN) -Ox
-# Destination directory for executables
-DESTDIR=\usr\bin
-
-# Deliverables
-all: perl.exe perl.1 glob.exe
-
-perl.exe: $(OBJ)
- echo array+cmd+cons+consarg+doarg+doio+dolist+dump+ >perl.arp
- echo eval+form+hash+perl+perly+regcomp+regexec+ >>perl.arp
- echo stab+str+toke+util+msdos+popen+directory+\lib\setargv >>perl.arp
- echo perl.exe >>perl.arp
- echo nul >>perl.arp
- echo /stack:32767 /NOE >>perl.arp
- link @perl.arp
-
-glob.exe: glob.c
- $(CC) glob.c \lib\setargv.obj -link /NOE
-
-array.obj: 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
-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
-str.obj: str.c
-toke.obj: toke.c
-util.obj: util.c
- $(CC) $(CPLAIN) -c util.c
-perly.h: perl.obj
- mv ytab.h perly.h
-directory.obj: directory.c
-popen.obj: popen.c
-msdos.obj: msdos.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) ../msdos
diff --git a/msdos/README.msdos b/msdos/README.msdos
deleted file mode 100644
index 3a5c38fcae..0000000000
--- a/msdos/README.msdos
+++ /dev/null
@@ -1,195 +0,0 @@
- Notes on the MS-DOS Perl port
-
- Diomidis Spinellis
- (dds@cc.ic.ac.uk)
-
-[0. First copy the files in the msdos directory into the parent
-directory--law]
-
-1. Compiling.
-
- Perl has been compiled under MS-DOS using the Microsoft
-C compiler version 5.1. Before compiling install dir.h as
-<sys/dir.h>. You will need a Unix-like make program (e.g.
-pdmake) and something like yacc (e.g. bison). You could get
-away by running yacc and dry running make on a Unix host,
-but I haven't tried it. Compilation takes 12 minutes on a
-20MHz 386 machine (together with formating the manual), so
-you will probably need something to do in the meantime. The
-executable is 272k and the top level directory needs 1M for
-sources and about the same ammount for the object code and
-the executables.
-
- The makefile will compile glob for you which you will
-need to place somewhere in your path so that perl globbing
-will work correctly. I have not tried all the tests or the
-examples, nor the awk and sed to Perl translators. You are
-on your own with them. In the eg directory I have included
-an example program that uses ioctl to display the charac-
-teristics of the storage devices of the system.
-
-2. Using MS-DOS Perl
-
- The MS-DOS version of perl has most of the functional-
-ity of the Unix version. Functions that can not be provided
-under MS-DOS like sockets, password and host database
-access, fork and wait have been ommited and will terminate
-with a fatal error. Care has been taken to implement the
-rest. In particular directory access, redirection (includ-
-ing pipes, but excluding the pipe function), system, ioctl
-and sleep have been provided.
-
-[Files currently can be edited in-place provided you are cre-
-ating a backup. However, if the backup coincidentally has
-the same name as the original, or if the resulting backup
-filename is invalid, then the file will probably be trashed.
-For example, don't do
-
- perl -i~ script makefile
- perl -i.bak script file.dat
-
-because (1) MS-DOS treats "makefile~" and "makefile" as the
-same filename, and (2) "file.dat.bak" is an invalid filename.
-The files "makefile" and "file.dat" will probably be lost
-forever. Moral of the story: Don't use in-place editing
-under MS-DOS. --rjc]
-
-2.1. Interface to the MS-DOS ioctl system call.
-
- The function code of the ioctl function (the second
-argument) is encoded as follows:
-
-- The lowest nibble of the function code goes to AL.
-- The two middle nibbles go to CL.
-- The high nibble goes to CH.
-
- The return code is -1 in the case of an error and if
-successful:
-
-- for functions AL = 00, 09, 0a the value of the register DX
-- for functions AL = 02 - 08, 0e the value of the register AX
-- for functions AL = 01, 0b - 0f the number 0.
-
- See the perl manual for instruction on how to distin-
-guish between the return value and the success of ioctl.
-
- Some ioctl functions need a number as the first argu-
-ment. Provided that no other files have been opened the
-number can be obtained if ioctl is called with
-@fdnum[number] as the first argument after executing the
-following code:
-
- @fdnum = ("STDIN", "STDOUT", "STDERR");
- $maxdrives = 15;
- for ($i = 3; $i < $maxdrives; $i++) {
- open("FD$i", "nul");
- @fdnum[$i - 1] = "FD$i";
- }
-
-2.2. Binary file access
-
- Files are opened in text mode by default. This means
-that CR LF pairs are translated to LF. If binary access is
-needed the `binary' function should be used. There is
-currently no way to reverse the effect of the binary func-
-tion. If that is needed close and reopen the file.
-
-2.3. Interpreter startup.
-
- The effect of the Unix #!/bin/perl interpreter startup
-can be obtained under MS-DOS by giving the script a .bat
-extension and using the following lines on its begining:
-
- @REM=("
- @perl %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
- @end ") if 0 ;
-
-(Note that you will probably want an absolute path name in
-front of %0.bat).
-
- March 1990
-
- Diomidis Spinellis <dds@cc.ic.ac.uk>
- Myrsinis 1
- GR-145 62 Kifissia
- Greece
-
---------------------------------------------------------------------------
-
- Revisions to the MS-DOS support in Perl 4.0
- Tom Dinger, 18 March 1991
-
-The DOS compatibility added to Perl sometime in release 3.x was not
-maintained, and Perl as distributed could not be built without changes.
-
-Both myself and Len Reed more or less "rediscovered" how to get Perl built
-and running reliably for MS-DOS, using the Microsoft C compiler. He and I
-have communicated, and will be putting together additional patches for the
-DOS version of Perl.
-
-1. Compiling Perl
-
- For now, I have not supplied a makefile, as there is no standard for
- make utilities under DOS. All the files can be compiled with Microsoft
- C 5.1, using the switches "-AL -Ox" for Large memory model, maximum
- optimization (this turned out a few code generation bugs in MSC 5.1).
- The code will also compile with MSC 6.00A, with the optimization
- "-Oacegils /Gs" for all files (regcomp.c has special case code to change
- the aliasing optimizations).
-
- Generally, you follow the instructions given above to compile and build
- Perl 4.0 for DOS. I used the output of SunOS yacc run on perly.y,
- without modification, but I expect both Bison and Berkeley-YACC will work
- also. From inspection of the generated code, however, I believe AT&T
- derived YACC produces the smallest tables, i.e. uses the least memory.
- This is important for a 300K executable file.
-
-2. Editing in-place.
-
- You will need the file suffix.c from the os2 subdirectory -- it will
- create a backup file with much less danger for DOS.
-
-3. A "Smarter" chdir() function.
-
- I have added to the DOS version of Perl 4.0 a replacement chdir()
- function. Unlike the "normal" behavior, it is aware of drive letters
- at the start of paths for DOS. So for example:
-
- perl_chdir( "B:" ) changes to the default directory, on drive B:
- perl_chdir( "C:\FOO" ) changes to the specified directory, on drive C:
- perl_chdir( "\BAR" ) changes to the specified directory on the
- current drive.
-
-4. *.BAT Scripts as Perl scripts
-
- The strategy described above for turning a Perl script into a *.BAT
- script do not work. I have been using the following lines at the
- beginning of a Perl *.BAT script:
-
- @REM=(qq!
- @perl -S %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
- @goto end !) if 0 ;
-
- and the following at the end of the *.BAT script:
-
- @REM=(qq!
- :end !) if 0 ;
-
- If you like, with the proper editor you can replace the four '!'
- characters with some untypeable character, such as Ctrl-A. This will
- allow you to pass any characters, including ".." strings as arguments.
-
-4. Things to Come
-
- * Better temporary file handling.
- * A real Makefile -- Len Reed has one for Dmake 3.6
- * Swapping code -- swaps most of Perl out of memory (to EMS, XMS or
- disk) before running a sub-program or pipe.
- * MKS command line support, both into Perl, and to other programs
- spawned by Perl.
- * Smarter pipe functions, not using COMMAND.COM.
-
-
- Tom Dinger
- tdinger@East.Sun.COM
- Martch 18, 1991
diff --git a/msdos/Wishlist.dds b/msdos/Wishlist.dds
deleted file mode 100644
index d06de117ab..0000000000
--- a/msdos/Wishlist.dds
+++ /dev/null
@@ -1,17 +0,0 @@
-Perl in general:
-Add ftw or find?
-Add a parsing mechanism (user specifies parse tree, perl parses).
-Arbitrary precision arithmetic.
-File calculus (e.g. file1 = file2 + file3, file1 =^ s/foo/bar/g etc.)
-
-MS-DOS version of Perl:
-Add interface to treat dBase files as associative arrays.
-Add int86x function.
-Handle the C preprocessor.
-Provide real pipes by switching the processes. (difficult)
-Provide a list of ioctl codes.
-Check the ioctl errno handling.
-I can't find an easy way in Perl to pass a number as the first argument
- to ioctl. This is needed for some functions of ioctl. Either hack
- ioctl, or change perl to ioctl interface. Another solution would be
- a perl pseudo array containing the filehandles indexed by fd.
diff --git a/msdos/chdir.c b/msdos/chdir.c
deleted file mode 100644
index b650eb0a90..0000000000
--- a/msdos/chdir.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * (C) Copyright 1990, 1991 Tom Dinger
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * A "DOS-aware" chdir() function, that will change current drive as well.
- *
- * chdir( "B:" ) -- changes to the default directory, on drive B:
- * chdir( "C:\FOO" ) changes to the specified directory, on drive C:
- * chdir( "\BAR" ) changes to the specified directory on the current
- * drive.
- */
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <direct.h>
-#include <dos.h>
-#include <errno.h>
-
-#include "config.h"
-#ifdef chdir
-#undef chdir
-#endif
-
-/* We should have the line:
- *
- * #define chdir perl_chdir
- *
- * in some header for perl (I put it in config.h) so that all
- * references to chdir() become references to this function.
- */
-
-/*------------------------------------------------------------------*/
-
-#if defined(BUGGY_MSC5) /* only needed for MSC 5.1 */
-
-int _chdrive( int drivenum )
-{
-unsigned int ndrives;
-unsigned int tmpdrive;
-
-
-_dos_setdrive( drivenum, &ndrives );
-
-/* check for illegal drive letter */
-_dos_getdrive( &tmpdrive );
-
-return (tmpdrive != drivenum) ? -1 : 0 ;
-}
-
-#endif
-
-/*-----------------------------------------------------------------*/
-
-int perl_chdir( char * path )
-{
-int drive_letter;
-unsigned int drivenum;
-
-
-if ( path && *path && (path[1] == ':') )
- {
- /* The path starts with a drive letter */
- /* Change current drive */
- drive_letter = *path;
- if ( isalpha(drive_letter) )
- {
- /* Drive letter legal */
- if ( islower(drive_letter) )
- drive_letter = toupper(drive_letter);
- drivenum = drive_letter - 'A' + 1;
-
- /* Change drive */
- if ( _chdrive( drivenum ) == -1 )
- {
- /* Drive change failed -- must be illegal drive letter */
- errno = ENODEV;
- return -1;
- }
-
- /* Now see if that's all we do */
- if ( ! path[2] )
- return 0; /* no path after drive -- all done */
- }
- /* else drive letter illegal -- fall into "normal" chdir */
- }
-
-/* Here with some path as well */
-return chdir( path );
-
-/* end perl_chdir() */
-}
diff --git a/msdos/config.h b/msdos/config.h
deleted file mode 100644
index 7131d6338e..0000000000
--- a/msdos/config.h
+++ /dev/null
@@ -1,938 +0,0 @@
-#ifndef config_h
-#define config_h
-/* config.h
- *
- * This file is hand tailored for MS-DOS and MSC 5.1 and 6.00A.
- * Tom Dinger, March 1991.
- */
-
-
-/*
- * BUGGY_MSC5:
- * This symbol is defined if you are the unfortunate owner of the buggy
- * Microsoft C compiler version 5.1. It is used as a conditional to
- * guard code sections that are known to break this compiler.
- * BUGGY_MSC6:
- * This symbol is defined if you are the unfortunate owner of the buggy
- * Microsoft C compiler version 6.0A. It is used as a conditional to
- * guard code sections that are known to break this compiler.
- */
-#define BUGGY_MSC5 /**/
-/*#undef BUGGY_MSC6 /**/
-
-
-/* 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 /**/
-
-/* ALIGNBYTES
- * This symbol contains the number of bytes required to align a double.
- * Usual values are 2, 4, and 8.
- */
-#define ALIGNBYTES 4 /**/
-
-/* 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.
- */
-#define BIN "/usr/local/bin" /**/
-
-/* BYTEORDER
- * This symbol contains an encoding of the order of bytes in a long.
- * Usual values (in octal) are 01234, 04321, 02143, 03412...
- */
-#define BYTEORDER 0x1234 /**/
-
-/* 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".
- */
-/* 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 "".
- */
-/* TODO: doesn't work for MSC -- it's more complicated than this */
-#define CPPSTDIN "cl "
-#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.
- */
-/*#undef 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.
- */
-/*#undef HAS_BCOPY /**/
-/*#undef SAFE_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.
- */
-/*#undef 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.
- */
-/* CASTFLAGS
- * This symbol contains flags that say what difficulties the compiler
- * has casting odd floating values to unsigned long:
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- */
-#define CASTNEGFLOAT /**/
-#define CASTFLAGS 0 /**/
-
-/* 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
- * symbol.
- */
-/*#undef CHARSPRINTF /**/
-
-/* 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.
- */
-#define HAS_CHSIZE /**/
-
-/* HAS_CRYPT
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
-/*#undef HAS_CRYPT /**/
-
-/* CSH
- * This symbol, if defined, indicates that the C-shell exists.
- * If defined, contains the full pathname of csh.
- */
-/*#undef CSH "/usr/bin/csh" /**/
-
-/* 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
- * setuid #! scripts because the kernel can't do it securely.
- * It is up to the package designer to make sure that this emulation
- * is done securely. Among other things, it should do an fstat on
- * the script it just opened to make sure it really is a setuid/setgid
- * script, it should make sure the arguments passed correspond exactly
- * to the argument on the #! line, and it should not trust any
- * subprocesses to which it must pass the filename rather than the
- * file descriptor of the script to be executed.
- */
-/*#undef DOSUID /**/
-
-/* HAS_DUP2
- * This symbol, if defined, indicates that the dup2 routine is available
- * to dup file descriptors. Otherwise you should use dup().
- */
-#define HAS_DUP2 /**/
-
-/* HAS_FCHMOD
- * This symbol, if defined, indicates that the fchmod routine is available
- * to change mode of opened files. If unavailable, use chmod().
- */
-/*#undef HAS_FCHMOD /**/
-
-/* HAS_FCHOWN
- * This symbol, if defined, indicates that the fchown routine is available
- * to change ownership of opened files. If unavailable, use chown().
- */
-/*#undef HAS_FCHOWN /**/
-
-/* HAS_FCNTL
- * This symbol, if defined, indicates to the C program that
- * the fcntl() function exists.
- */
-/*#undef HAS_FCNTL /**/
-
-/* FLEXFILENAMES
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
-/*#undef FLEXFILENAMES /**/
-
-/* HAS_FLOCK
- * This symbol, if defined, indicates that the flock() routine is
- * available to do file locking.
- */
-/*#undef HAS_FLOCK /**/
-
-/* 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.
- */
-/*#undef HAS_GETGROUPS /**/
-
-/* HAS_GETHOSTENT
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to lookup host names in some data base or other.
- */
-/*#undef HAS_GETHOSTENT /**/
-
-/* HAS_GETPGRP
- * This symbol, if defined, indicates that the getpgrp() routine is
- * available to get the current process group.
- */
-/*#undef HAS_GETPGRP /**/
-
-/* 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 /**/
-
-/* HAS_GETPRIORITY
- * This symbol, if defined, indicates that the getpriority() routine is
- * available to get a process's priority.
- */
-/*#undef 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.
- */
-/*#undef HAS_HTONS /**/
-/*#undef HAS_HTONL /**/
-/*#undef HAS_NTOHS /**/
-/*#undef HAS_NTOHL /**/
-
-/* 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.
- */
-#define index strchr /* cultural */
-#define 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
- * 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.
- */
-/*#undef HAS_KILLPG /**/
-
-/* HAS_LSTAT
- * This symbol, if defined, indicates that the lstat() routine is
- * available to stat symbolic links.
- */
-/*#undef HAS_LSTAT /**/
-
-/* HAS_MEMCMP
- * This symbol, if defined, indicates that the memcmp routine is available
- * to compare blocks of memory. If undefined, roll your own.
- */
-#define HAS_MEMCMP /**/
-
-/* 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.
- */
-/* SAFE_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.
- */
-#define HAS_MEMCPY /**/
-/*#undef SAFE_MEMCPY /**/
-
-/* 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.
- */
-/*#undef HAS_MEMMOVE /**/
-
-/* 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.
- */
-#define HAS_MEMSET /**/
-
-/* 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 /**/
-
-/* HAS_MSG
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported.
- */
-/*#undef HAS_MSG /**/
-
-/* HAS_MSGCTL
- * This symbol, if defined, indicates that the msgctl() routine is
- * available to control message passing.
- */
-/*#undef HAS_MSGCTL /**/
-
-/* HAS_MSGGET
- * This symbol, if defined, indicates that the msgget() routine is
- * available to get messages.
- */
-/*#undef HAS_MSGGET /**/
-
-/* HAS_MSGRCV
- * This symbol, if defined, indicates that the msgrcv() routine is
- * available to receive messages.
- */
-/*#undef HAS_MSGRCV /**/
-
-/* HAS_MSGSND
- * This symbol, if defined, indicates that the msgsnd() routine is
- * available to send messages.
- */
-/*#undef HAS_MSGSND /**/
-
-/* HAS_NDBM
- * This symbol, if defined, indicates that ndbm.h exists and should
- * be included.
- */
-/*#undef HAS_NDBM /**/
-
-/* HAS_ODBM
- * This symbol, if defined, indicates that dbm.h exists and should
- * be included.
- */
-/*#undef HAS_ODBM /**/
-
-/* HAS_OPEN3
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-#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
- * 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 /**/
-
-/* HAS_REWINDDIR
- * This symbol, if defined, indicates that the rewindir routine is
- * available to rewind directories.
- */
-#define HAS_REWINDDIR /**/
-
-/* 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.
- */
-#define HAS_SEEKDIR /**/
-
-/* HAS_SELECT
- * This symbol, if defined, indicates that the select() subroutine
- * exists.
- */
-/*#undef HAS_SELECT /**/
-
-/* HAS_SEM
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
-/*#undef HAS_SEM /**/
-
-/* HAS_SEMCTL
- * This symbol, if defined, indicates that the semctl() routine is
- * available to control semaphores.
- */
-/*#undef HAS_SEMCTL /**/
-
-/* HAS_SEMGET
- * This symbol, if defined, indicates that the semget() routine is
- * available to get semaphores ids.
- */
-/*#undef HAS_SEMGET /**/
-
-/* HAS_SEMOP
- * This symbol, if defined, indicates that the semop() routine is
- * available to perform semaphore operations.
- */
-/*#undef HAS_SEMOP /**/
-
-/* HAS_SETEGID
- * This symbol, if defined, indicates that the setegid routine is available
- * to change the effective gid of the current program.
- */
-/*#undef HAS_SETEGID /**/
-
-/* HAS_SETEUID
- * This symbol, if defined, indicates that the seteuid routine is available
- * to change the effective uid of the current program.
- */
-/*#undef HAS_SETEUID /**/
-
-/* HAS_SETPGRP
- * This symbol, if defined, indicates that the setpgrp() routine is
- * available to set the current process group.
- */
-/*#undef HAS_SETPGRP /**/
-
-/* 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 /**/
-
-/* HAS_SETPRIORITY
- * This symbol, if defined, indicates that the setpriority() routine is
- * available to set a process's priority.
- */
-/*#undef HAS_SETPRIORITY /**/
-
-/* HAS_SETREGID
- * This symbol, if defined, indicates that the setregid routine is
- * available to change the real and effective gid of the current program.
- */
-/* 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.
- */
-/*#undef HAS_SETREGID /**/
-/*#undef HAS_SETRESGID /**/
-
-/* HAS_SETREUID
- * This symbol, if defined, indicates that the setreuid routine is
- * available to change the real and effective uid of the current program.
- */
-/* 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.
- */
-/*#undef HAS_SETREUID /**/
-/*#undef HAS_SETRESUID /**/
-
-/* HAS_SETRGID
- * This symbol, if defined, indicates that the setrgid routine is available
- * to change the real gid of the current program.
- */
-/*#undef HAS_SETRGID /**/
-
-/* HAS_SETRUID
- * This symbol, if defined, indicates that the setruid routine is available
- * to change the real uid of the current program.
- */
-/*#undef HAS_SETRUID /**/
-
-/* HAS_SHM
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
-/*#undef HAS_SHM /**/
-
-/* 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*.
- */
-/*#undef HAS_SHMAT /**/
-
-/*#undef VOIDSHMAT /**/
-
-/* HAS_SHMCTL
- * This symbol, if defined, indicates that the shmctl() routine is
- * available to control a shared memory segment.
- */
-/*#undef HAS_SHMCTL /**/
-
-/* HAS_SHMDT
- * This symbol, if defined, indicates that the shmdt() routine is
- * available to detach a shared memory segment.
- */
-/*#undef HAS_SHMDT /**/
-
-/* HAS_SHMGET
- * This symbol, if defined, indicates that the shmget() routine is
- * available to get a shared memory segment id.
- */
-/*#undef HAS_SHMGET /**/
-
-/* 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
- * supported.
- */
-/* 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.
- */
-/*#undef HAS_SOCKET /**/
-
-/*#undef HAS_SOCKETPAIR /**/
-
-/*#undef OLDSOCKET /**/
-
-/* STATBLOCKS
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
-/*#undef STATBLOCKS /**/
-
-/* STDSTDIO
- * This symbol is defined if this system has a FILE structure declaring
- * _ptr and _cnt in stdio.h.
- *
- * NOTE: [Tom Dinger, 23 February 1991] You also need the _filbuf()
- * function, usually referred to by the getc() macro in stdio.h.
- */
-#define STDSTDIO /**/
-
-/* STRUCTCOPY
- * 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.
- */
-#define HAS_STRERROR /**/
-
-/* HAS_SYMLINK
- * This symbol, if defined, indicates that the symlink routine is available
- * to create symbolic links.
- */
-/*#undef 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.
- */
-/*#undef HAS_SYSCALL /**/
-
-/* HAS_TELLDIR
- * This symbol, if defined, indicates that the telldir routine is
- * available to tell your location in directories.
- */
-#define HAS_TELLDIR /**/
-
-/* HAS_TRUNCATE
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
-/*#undef HAS_TRUNCATE /**/
-
-/* HAS_VFORK
- * This symbol, if defined, indicates that vfork() exists.
- */
-/*#undef 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
- * 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 /**/
-
-/* HASVOLATILE
- * This symbol, if defined, indicates that this C compiler knows about
- * the volatile declaration.
- */
-/*#undef HASVOLATILE /**/
-
-/* 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
- * 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 /**/
-/*#undef CHARVSPRINTF /**/
-
-/* HAS_WAIT4
- * This symbol, if defined, indicates that wait4() exists.
- */
-/*#undef HAS_WAIT4 /**/
-
-/* HAS_WAITPID
- * This symbol, if defined, indicates that waitpid() exists.
- */
-/*#undef 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.
- */
-#define GIDTYPE int /**/
-
-/* GROUPSTYPE
- * This symbol has a value like gid_t, int, ushort, or whatever type is
- * used in the return value of getgroups().
- */
-#define GROUPSTYPE int /**/
-
-/* I_FCNTL
- * This manifest constant tells the C program to include <fcntl.h>.
- */
-#define I_FCNTL /**/
-
-/* I_GDBM
- * This symbol, if defined, indicates that gdbm.h exists and should
- * be included.
- */
-/*#undef I_GDBM /**/
-
-/* I_GRP
- * This symbol, if defined, indicates to the C program that it should
- * include grp.h.
- */
-/*#undef 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.
- */
-/*#undef I_NETINET_IN /**/
-/*#undef 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.
- */
-/*#undef I_PWD /**/
-/*#undef PWQUOTA /**/
-/*#undef PWAGE /**/
-/*#undef PWCHANGE /**/
-/*#undef PWCLASS /**/
-/*#undef PWEXPIRE /**/
-/*#undef PWCOMMENT /**/
-
-/* I_SYS_FILE
- * This manifest constant tells the C program to include <sys/file.h>.
- */
-/*#undef I_SYS_FILE /**/
-
-/* I_SYSIOCTL
- * This symbol, if defined, indicates that sys/ioctl.h exists and should
- * be included.
- */
-/*#undef I_SYSIOCTL /**/
-
-/* I_TIME
- * This symbol is defined if the program should include <time.h>.
- */
-/* I_SYS_TIME
- * This symbol is defined if the program should include <sys/time.h>.
- */
-/* SYSTIMEKERNEL
- * This symbol is defined if the program should include <sys/time.h>
- * with KERNEL defined.
- */
-/* I_SYS_SELECT
- * This symbol is defined if the program should include <sys/select.h>.
- */
-#define I_TIME /**/
-/*#undef I_SYS_TIME /**/
-/*#undef SYSTIMEKERNEL /**/
-/*#undef I_SYS_SELECT /**/
-
-/* I_UTIME
- * This symbol, if defined, indicates to the C program that it should
- * include utime.h.
- */
-/*#undef I_UTIME /**/
-
-/* I_VARARGS
- * This symbol, if defined, indicates to the C program that it should
- * include varargs.h.
- */
-#define I_VARARGS /**/
-
-/* I_VFORK
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
-/*#undef I_VFORK /**/
-
-/* INTSIZE
- * This symbol contains the size of an int, so that the C preprocessor
- * can make decisions based on it.
- */
-#define INTSIZE 2 /**/
-
-/* I_DIRENT
- * This symbol, if defined, indicates that the program should use the
- * P1003-style directory routines, and include <dirent.h>.
- */
-/* I_SYS_DIR
- * This symbol, if defined, indicates that the program should use the
- * directory functions by including <sys/dir.h>.
- */
-/* 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.
- */
-/* 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.
- */
-/* I_MY_DIR
- * This symbol, if defined, indicates that the program should compile
- * the ndir.c code provided with the package.
- */
-/* 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.
- */
-/*#undef I_DIRENT /**/
-#define I_SYS_DIR /**/
-/*#undef I_NDIR /**/
-/*#undef I_SYS_NDIR /**/
-/*#undef I_MY_DIR /**/
-/*#undef DIRNAMLEN /**/
-
-/* MYMALLOC
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-/* MALLOCPTRTYPE
- * This symbol defines the kind of ptr returned by malloc and realloc.
- */
-#define MYMALLOC /**/
-
-#define MALLOCPTRTYPE void /**/
-
-
-/* RANDBITS
- * This symbol contains the number of bits of random number the rand()
- * function produces. Usual values are 15, 16, and 31.
- */
-#define RANDBITS 31 /**/
-
-/* 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.
- */
-#define SCRIPTDIR "C:/bin/perl" /**/
-
-/* SIG_NAME
- * This symbol contains an list of signal names in order.
- *
- * Note: This list is specific for Microsoft C 5.1 and 6.0, which only
- * support SIGINT, SIGFPE, SIGILL, SIGSEGV, and SIGABRT on
- * DOS 3.x, but in addition defines SIGTERM, SIGBREAK, SIGUSR1,
- * SIGUSR2, and SIGUSR3.
- */
-#define SIG_NAME \
- "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE","KILL",\
- "BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","TSTP","CONT",\
- "USR3","BREAK","ABRT" /**/
-
-/* STDCHAR
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR char /**/
-
-/* UIDTYPE
- * This symbol has a value like uid_t, int, ushort, or whatever type is
- * used to declare user ids in the kernel.
- */
-#define UIDTYPE int /**/
-
-/* VOIDHAVE
- * This symbol indicates how much support of the void type is given by this
- * compiler. What various bits mean:
- *
- * 1 = supports declaration of void
- * 2 = supports arrays of pointers to functions returning void
- * 4 = supports comparisons between pointers to void functions and
- * addresses of void functions
- *
- * 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 1
-#endif
-#define VOIDHAVE 1
-#if (VOIDHAVE & VOIDWANT) != VOIDWANT
-#define void int /* is void to be avoided? */
-#define VOID
-#define VOIDP (char *)
-#define M_VOID /* Xenix strikes again */
-#else
-#define VOID void
-#define VOIDP (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.
- */
-#define PRIVLIB "/usr/local/lib/perl" /**/
-
-/*
- * BINARY:
- * This symbol is defined if you run under an operating system that
- * distinguishes between binary and text files. If so the function
- * setmode will be used to set the file into binary mode.
- */
-#define BINARY
-
-#define S_ISUID 0
-#define S_ISGID 0
-
-/* For MSC5.1, toke.c "runs out of heap space" unless CRIPPLED_CC is
- * defined.
- */
-#if defined(BUGGY_MSC5) || defined(BUGGY_MSC6)
-#define CRIPPLED_CC /**/
-#endif
-
-/* MSC (5.1 and 6.0) doesn't know about S_IFBLK or S_IFIFO -- these are
- * normally found in sys/stat.h
- */
-#define S_IFBLK (S_IFDIR | S_IFCHR)
-#define S_IFIFO 0010000
-
-/* Define SUFFIX to get special DOS suffix-replacement code */
-#define SUFFIX /**/
-
-/* Add this for the DOS-specific chdir() function */
-#define chdir perl_chdir
-
-#endif
diff --git a/msdos/dir.h b/msdos/dir.h
deleted file mode 100644
index d16bc372e0..0000000000
--- a/msdos/dir.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $RCSfile: dir.h,v $$Revision: 4.1 $$Date: 92/08/07 18:24:41 $
- *
- * (C) Copyright 1987, 1990 Diomidis Spinellis.
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: dir.h,v $
- * Revision 4.1 92/08/07 18:24:41 lwall
- *
- * Revision 4.0.1.1 91/06/07 11:22:10 lwall
- * patch4: new copyright notice
- *
- * Revision 4.0 91/03/20 01:34:20 lwall
- * 4.0 baseline.
- *
- * Revision 3.0.1.1 90/03/27 16:07:08 lwall
- * patch16: MSDOS support
- *
- * Revision 1.1 90/03/18 20:32:29 dds
- * Initial revision
- *
- *
- */
-
-/*
- * defines the type returned by the directory(3) functions
- */
-
-#ifndef __DIR_INCLUDED
-#define __DIR_INCLUDED
-
-/*Directory entry size */
-#ifdef DIRSIZ
-#undef DIRSIZ
-#endif
-#define DIRSIZ(rp) (sizeof(struct direct))
-
-/*
- * Structure of a directory entry
- */
-struct direct {
- ino_t d_ino; /* inode number (not used by MS-DOS) */
- int d_namlen; /* Name length */
- char d_name[13]; /* file name */
-};
-
-struct _dir_struc { /* Structure used by dir operations */
- char *start; /* Starting position */
- char *curr; /* Current position */
- struct direct dirstr; /* Directory structure to return */
-};
-
-typedef struct _dir_struc DIR; /* Type returned by dir operations */
-
-DIR *cdecl opendir(char *filename);
-struct direct *readdir(DIR *dirp);
-long telldir(DIR *dirp);
-void seekdir(DIR *dirp,long loc);
-void rewinddir(DIR *dirp);
-void closedir(DIR *dirp);
-
-#endif /* __DIR_INCLUDED */
diff --git a/msdos/directory.c b/msdos/directory.c
deleted file mode 100644
index dd1fb64519..0000000000
--- a/msdos/directory.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* $RCSfile: directory.c,v $$Revision: 4.1 $$Date: 92/08/07 18:24:42 $
- *
- * (C) Copyright 1987, 1988, 1990 Diomidis Spinellis.
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: directory.c,v $
- * Revision 4.1 92/08/07 18:24:42 lwall
- *
- * Revision 4.0.1.1 91/06/07 11:22:24 lwall
- * patch4: new copyright notice
- *
- * Revision 4.0 91/03/20 01:34:24 lwall
- * 4.0 baseline.
- *
- * Revision 3.0.1.1 90/03/27 16:07:37 lwall
- * patch16: MSDOS support
- *
- * Revision 1.3 90/03/16 22:39:40 dds
- * Fixed malloc problem.
- *
- * Revision 1.2 88/07/23 00:08:39 dds
- * Added inode non-zero filling.
- *
- * Revision 1.1 88/07/23 00:03:50 dds
- * Initial revision
- *
- */
-
-/*
- * UNIX compatible directory access functions
- */
-
-#include <sys/types.h>
-#include <sys/dir.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dos.h>
-#include <ctype.h>
-
-/*
- * File names are converted to lowercase if the
- * CONVERT_TO_LOWER_CASE variable is defined.
- */
-#define CONVERT_TO_LOWER_CASE
-
-#define PATHLEN 65
-
-#ifndef lint
-static char rcsid[] = "$RCSfile: directory.c,v $$Revision: 4.1 $$Date: 92/08/07 18:24:42 $";
-#endif
-
-DIR *
-opendir(char *filename)
-{
- DIR *p;
- char *oldresult, *result;
- union REGS srv;
- struct SREGS segregs;
- register reslen = 0;
- char scannamespc[PATHLEN];
- char *scanname = scannamespc; /* To take address we need a pointer */
-
- /*
- * Structure used by the MS-DOS directory system calls.
- */
- struct dir_buff {
- char reserved[21]; /* Reserved for MS-DOS */
- unsigned char attribute; /* Attribute */
- unsigned int time; /* Time */
- unsigned int date; /* Date */
- long size; /* Size of file */
- char fn[13]; /* Filename */
- } buffspc, *buff = &buffspc;
-
-
- if (!(p = (DIR *) malloc(sizeof(DIR))))
- return NULL;
-
- /* Initialize result to use realloc on it */
- if (!(result = malloc(1))) {
- free(p);
- return NULL;
- }
-
- /* Create the search pattern */
- strcpy(scanname, filename);
- if (strchr("/\\", *(scanname + strlen(scanname) - 1)) == NULL)
- strcat(scanname, "/*.*");
- else
- strcat(scanname, "*.*");
-
- segread(&segregs);
-#if ( defined(M_I86LM) || defined(M_I86CM) || defined(M_I86HM) )
- segregs.ds = FP_SEG(buff);
- srv.x.dx = FP_OFF(buff);
-#else
- srv.x.dx = (unsigned int) buff;
-#endif
- srv.h.ah = 0x1a; /* Set DTA to DS:DX */
- intdosx(&srv, &srv, &segregs);
-
-#if ( defined(M_I86LM) || defined(M_I86CM) || defined(M_I86HM) )
- segregs.ds = FP_SEG(scanname);
- srv.x.dx = FP_OFF(scanname);
-#else
- srv.x.dx = (unsigned int) scanname;
-#endif
- srv.x.cx = 0xff; /* Search mode */
-
- for (srv.h.ah = 0x4e; !intdosx(&srv, &srv, &segregs); srv.h.ah = 0x4f) {
- if ((result = (char *) realloc(result, reslen + strlen(buff->fn) + 1)) ==
- NULL) {
- free(p);
- free(oldresult);
- return NULL;
- }
- oldresult = result;
-#ifdef CONVERT_TO_LOWER_CASE
- strcpy(result + reslen, strlwr(buff->fn));
-#else
- strcpy(result + reslen, buff->fn);
-#endif
- reslen += strlen(buff->fn) + 1;
- }
-
- if (!(result = realloc(result, reslen + 1))) {
- free(p);
- free(oldresult);
- return NULL;
- } else {
- p->start = result;
- p->curr = result;
- *(result + reslen) = '\0';
- return p;
- }
-}
-
-
-struct direct *
-readdir(DIR *dirp)
-{
- char *p;
- register len;
- static dummy;
-
- p = dirp->curr;
- len = strlen(p);
- if (*p) {
- dirp->curr += len + 1;
- strcpy(dirp->dirstr.d_name, p);
- dirp->dirstr.d_namlen = len;
- /* To fool programs */
- dirp->dirstr.d_ino = ++dummy;
- return &(dirp->dirstr);
- } else
- return NULL;
-}
-
-long
-telldir(DIR *dirp)
-{
- return (long) dirp->curr; /* ouch! pointer to long cast */
-}
-
-void
-seekdir(DIR *dirp, long loc)
-{
- dirp->curr = (char *) loc; /* ouch! long to pointer cast */
-}
-
-void
-rewinddir(DIR *dirp)
-{
- dirp->curr = dirp->start;
-}
-
-void
-closedir(DIR *dirp)
-{
- free(dirp->start);
- free(dirp);
-}
diff --git a/msdos/eg/crlf.bat b/msdos/eg/crlf.bat
deleted file mode 100644
index 24d73661b9..0000000000
--- a/msdos/eg/crlf.bat
+++ /dev/null
@@ -1,32 +0,0 @@
-@REM=("
-@perl %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
-@end ") if 0 ;
-
-# Convert all the files in the current directory from unix to MS-DOS
-# line ending conventions.
-#
-# By Diomidis Spinellis
-#
-open(FILES, 'find . -print |');
-while ($file = <FILES>) {
- $file =^ s/[\n\r]//;
- if (-f $file) {
- if (-B $file) {
- print STDERR "Skipping binary file $file\n";
- next;
- }
- ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime,
- $blksize, $blocks) = stat($file);
- open(IFILE, "$file");
- open(OFILE, ">xl$$");
- while (<IFILE>) {
- print OFILE;
- }
- close(OFILE) || die "close xl$$: $!\n";
- close(IFILE) || die "close $file: $!\n";
- unlink($file) || die "unlink $file: $!\n";
- rename("xl$$", $file) || die "rename(xl$$, $file): $!\n";
- chmod($mode, $file) || die "chmod($mode, $file: $!\n";
- utime($atime, $mtime, $file) || die "utime($atime, $mtime, $file): $!\n";
- }
-}
diff --git a/msdos/eg/drives.bat b/msdos/eg/drives.bat
deleted file mode 100644
index c68306ed8d..0000000000
--- a/msdos/eg/drives.bat
+++ /dev/null
@@ -1,41 +0,0 @@
-@REM=("
-@perl %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
-@end ") if 0 ;
-
-#
-# Test the ioctl function for MS-DOS. Provide a list of drives and their
-# characteristics.
-#
-# By Diomidis Spinellis.
-#
-
-@fdnum = ("STDIN", "STDOUT", "STDERR");
-$maxdrives = 15;
-for ($i = 3; $i < $maxdrives; $i++) {
- open("FD$i", "nul");
- @fdnum[$i - 1] = "FD$i";
-}
-@mediatype = (
- "320/360 k floppy drive",
- "1.2M floppy",
- "720K floppy",
- "8'' single density floppy",
- "8'' double density floppy",
- "fixed disk",
- "tape drive",
- "1.44M floppy",
- "other"
-);
-print "The system has the following drives:\n";
-for ($i = 1; $i < $maxdrives; $i++) {
- if ($ret = ioctl(@fdnum[$i], 8, 0)) {
- $type = ($ret == 0) ? "removable" : "fixed";
- $ret = ioctl(@fdnum[$i], 9, 0);
- $location = ($ret & 0x800) ? "local" : "remote";
- ioctl(@fdnum[$i], 0x860d, $param);
- @par = unpack("CCSSSC31S", $param);
- $lock = (@par[2] & 2) ? "supporting door lock" : "not supporting door lock";
- printf "%c:$type $location @mediatype[@par[1]] @par[3] cylinders @par[6]
- sectors/track $lock\n", ord('A') + $i - 1;
- }
-}
diff --git a/msdos/eg/lf.bat b/msdos/eg/lf.bat
deleted file mode 100644
index 9c13eef840..0000000000
--- a/msdos/eg/lf.bat
+++ /dev/null
@@ -1,33 +0,0 @@
-@REM=("
-@perl %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
-@end ") if 0 ;
-
-# Convert all the files in the current directory from MS-DOS to unix
-# line ending conventions.
-#
-# By Diomidis Spinellis
-#
-open(FILES, 'find . -print |');
-while ($file = <FILES>) {
- $file =^ s/[\n\r]//;
- if (-f $file) {
- if (-B $file) {
- print STDERR "Skipping binary file $file\n";
- next;
- }
- ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime,
- $blksize, $blocks) = stat($file);
- open(IFILE, "$file");
- open(OFILE, ">xl$$");
- binmode OFILE || die "binmode xl$$: $!\n";
- while (<IFILE>) {
- print OFILE;
- }
- close(OFILE) || die "close xl$$: $!\n";
- close(IFILE) || die "close $file: $!\n";
- unlink($file) || die "unlink $file: $!\n";
- rename("xl$$", $file) || die "rename(xl$$, $file): $!\n";
- chmod($mode, $file) || die "chmod($mode, $file: $!\n";
- utime($atime, $mtime, $file) || die "utime($atime, $mtime, $file): $!\n";
- }
-}
diff --git a/msdos/glob.c b/msdos/glob.c
deleted file mode 100644
index 19fb2ab7ba..0000000000
--- a/msdos/glob.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Globbing for MS-DOS. Relies on the expansion done by the library
- * startup code. (dds)
- */
-
-#include <stdio.h>
-#include <string.h>
-
-main(int argc, char *argv[])
-{
- register i;
-
- for (i = 1; i < argc; i++) {
- fputs(strlwr(argv[i]), stdout);
- putchar(0);
- }
-}
diff --git a/msdos/msdos.c b/msdos/msdos.c
deleted file mode 100644
index 206cf5a3a1..0000000000
--- a/msdos/msdos.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/* $RCSfile: msdos.c,v $$Revision: 4.1 $$Date: 92/08/07 18:24:49 $
- *
- * (C) Copyright 1989, 1990 Diomidis Spinellis.
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: msdos.c,v $
- * Revision 4.1 92/08/07 18:24:49 lwall
- *
- * Revision 4.0.1.1 91/06/07 11:22:37 lwall
- * patch4: new copyright notice
- *
- * Revision 4.0 91/03/20 01:34:46 lwall
- * 4.0 baseline.
- *
- * Revision 3.0.1.1 90/03/27 16:10:41 lwall
- * patch16: MSDOS support
- *
- * Revision 1.1 90/03/18 20:32:01 dds
- * Initial revision
- *
- */
-
-/*
- * Various Unix compatibility functions for MS-DOS.
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-
-#include <dos.h>
-#include <process.h>
-
-/*
- * Interface to the MS-DOS ioctl system call.
- * The function is encoded as follows:
- * The lowest nibble of the function code goes to AL
- * The two middle nibbles go to CL
- * The high nibble goes to CH
- *
- * The return code is -1 in the case of an error and if successful
- * for functions AL = 00, 09, 0a the value of the register DX
- * for functions AL = 02 - 08, 0e the value of the register AX
- * for functions AL = 01, 0b - 0f the number 0
- *
- * Notice that this restricts the ioctl subcodes stored in AL to 00-0f
- * In the Ralf Borwn interrupt list 90.1 there are no subcodes above AL=0f
- * so we are ok.
- * Furthermore CH is also restriced in the same area. Where CH is used as a
- * code it always is between 00-0f. In the case where it forms a count
- * together with CL we arbitrarily set the highest count limit to 4095. It
- * sounds reasonable for an ioctl.
- * The other alternative would have been to use the pointer argument to
- * point the the values of CX. The problem with this approach is that
- * of accessing wild regions when DX is used as a number and not as a
- * pointer.
- */
-int
-ioctl(int handle, unsigned int function, char *data)
-{
- union REGS srv;
- struct SREGS segregs;
-
- srv.h.ah = 0x44;
- srv.h.al = (unsigned char)(function & 0x0F);
- srv.x.bx = handle;
- srv.x.cx = function >> 4;
- segread(&segregs);
-#if ( defined(M_I86LM) || defined(M_I86CM) || defined(M_I86HM) )
- segregs.ds = FP_SEG(data);
- srv.x.dx = FP_OFF(data);
-#else
- srv.x.dx = (unsigned int) data;
-#endif
- intdosx(&srv, &srv, &segregs);
- if (srv.x.cflag & 1) {
- switch(srv.x.ax ){
- case 1:
- errno = EINVAL;
- break;
- case 2:
- case 3:
- errno = ENOENT;
- break;
- case 4:
- errno = EMFILE;
- break;
- case 5:
- errno = EPERM;
- break;
- case 6:
- errno = EBADF;
- break;
- case 8:
- errno = ENOMEM;
- break;
- case 0xc:
- case 0xd:
- case 0xf:
- errno = EINVAL;
- break;
- case 0x11:
- errno = EXDEV;
- break;
- case 0x12:
- errno = ENFILE;
- break;
- default:
- errno = EZERO;
- break;
- }
- return -1;
- } else {
- switch (function & 0xf) {
- case 0: case 9: case 0xa:
- return srv.x.dx;
- case 2: case 3: case 4: case 5:
- case 6: case 7: case 8: case 0xe:
- return srv.x.ax;
- case 1: case 0xb: case 0xc: case 0xd:
- case 0xf:
- default:
- return 0;
- }
- }
-}
-
-
-/*
- * Sleep function.
- */
-void
-sleep(unsigned len)
-{
- time_t end;
-
- end = time((time_t *)0) + len;
- while (time((time_t *)0) < end)
- ;
-}
-
-/*
- * Just pretend that everyone is a superuser
- */
-#define ROOT_UID 0
-#define ROOT_GID 0
-int
-getuid(void)
-{
- return ROOT_UID;
-}
-
-int
-geteuid(void)
-{
- return ROOT_UID;
-}
-
-int
-getgid(void)
-{
- return ROOT_GID;
-}
-
-int
-getegid(void)
-{
- return ROOT_GID;
-}
-
-int
-setuid(int uid)
-{ return (uid==ROOT_UID?0:-1); }
-
-int
-setgid(int gid)
-{ return (gid==ROOT_GID?0:-1); }
-
-/*
- * The following code is based on the do_exec and do_aexec functions
- * in file doio.c
- */
-int
-do_aspawn(really,arglast)
-STR *really;
-int *arglast;
-{
- register STR **st = stack->ary_array;
- register int sp = arglast[1];
- register int items = arglast[2] - sp;
- register char **a;
- char **argv;
- char *tmps;
- int status;
-
- if (items) {
- New(1101,argv, items+1, char*);
- a = argv;
- for (st += ++sp; items > 0; items--,st++) {
- if (*st)
- *a++ = str_get(*st);
- else
- *a++ = "";
- }
- *a = Nullch;
- if (really && *(tmps = str_get(really)))
- status = spawnvp(P_WAIT,tmps,argv);
- else
- status = spawnvp(P_WAIT,argv[0],argv);
- Safefree(argv);
- }
- return status;
-}
-
-
-int
-do_spawn(cmd)
-char *cmd;
-{
- register char **a;
- register char *s;
- char **argv;
- char flags[10];
- int status;
- char *shell, *cmd2;
-
- /* save an extra exec if possible */
- if ((shell = getenv("COMSPEC")) == 0)
- shell = "\\command.com";
-
- /* see if there are shell metacharacters in it */
- if (strchr(cmd, '>') || strchr(cmd, '<') || strchr(cmd, '|'))
- doshell:
- return spawnl(P_WAIT,shell,shell,"/c",cmd,(char*)0);
-
- New(1102,argv, strlen(cmd) / 2 + 2, char*);
-
- New(1103,cmd2, strlen(cmd) + 1, char);
- strcpy(cmd2, cmd);
- a = argv;
- for (s = cmd2; *s;) {
- while (*s && isspace(*s)) s++;
- if (*s)
- *(a++) = s;
- while (*s && !isspace(*s)) s++;
- if (*s)
- *s++ = '\0';
- }
- *a = Nullch;
- if (argv[0])
- if ((status = spawnvp(P_WAIT,argv[0],argv)) == -1) {
- Safefree(argv);
- Safefree(cmd2);
- goto doshell;
- }
- Safefree(cmd2);
- Safefree(argv);
- return status;
-}
diff --git a/msdos/popen.c b/msdos/popen.c
deleted file mode 100644
index 0031f5e58a..0000000000
--- a/msdos/popen.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/* $RCSfile: popen.c,v $$Revision: 4.1 $$Date: 92/08/07 18:24:50 $
- *
- * (C) Copyright 1988, 1990 Diomidis Spinellis.
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: popen.c,v $
- * Revision 4.1 92/08/07 18:24:50 lwall
- *
- * Revision 4.0.1.1 91/06/07 11:22:52 lwall
- * patch4: new copyright notice
- *
- * Revision 4.0 91/03/20 01:34:50 lwall
- * 4.0 baseline.
- *
- * Revision 3.0.1.2 90/08/09 04:04:42 lwall
- * patch19: various MSDOS and OS/2 patches folded in
- *
- * Revision 3.0.1.1 90/03/27 16:11:57 lwall
- * patch16: MSDOS support
- *
- * Revision 1.1 90/03/18 20:32:20 dds
- * Initial revision
- *
- */
-
-/*
- * Popen and pclose for MS-DOS
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <process.h>
-
-/*
- * Possible actions on an popened file
- */
-enum action {
- delete, /* Used for "r". Delete the tmp file */
- execute /* Used for "w". Execute the command. */
-};
-
-/*
- * Linked list of things to do at the end of the program execution.
- */
-static struct todo {
- FILE *f; /* File we are working on (to fclose) */
- const char *name; /* Name of the file (to unlink) */
- const char *command; /* Command to execute */
- enum action what; /* What to do (execute or delete) */
- struct todo *next; /* Next structure */
-} *todolist;
-
-
-/* Clean up function */
-static int close_pipes(void);
-
-/*
- * Add a file f running the command command on file name to the list
- * of actions to be done at the end. The action is specified in what.
- * Return -1 on failure, 0 if ok.
- */
-static int
-add(FILE *f, const char *command, const char *name, enum action what)
-{
- struct todo *p;
-
- if ((p = (struct todo *) malloc(sizeof(struct todo))) == NULL)
- return -1;
- p->f = f;
- p->command = command;
- p->name = name;
- p->what = what;
- p->next = todolist;
- todolist = p;
- return 0;
-}
-
-FILE *
-mypopen(const char *command, const char *t)
-{
- char buff[256];
- char *name;
- FILE *f;
- static init = 0;
-
- if (!init)
- if (onexit(close_pipes) == NULL)
- return NULL;
- else
- init++;
-
- if ((name = tempnam((char*)NULL, "pp")) == NULL)
- return NULL;
-
- switch (*t) {
- case 'r':
- sprintf(buff, "%s >%s", command, name);
- if (system(buff) || (f = fopen(name, "r")) == NULL) {
- free(name);
- return NULL;
- }
- if (add(f, command, name, delete)) {
- (void)fclose(f);
- (void)unlink(name);
- free(name);
- return NULL;
- }
- return f;
- case 'w':
- if ((f = fopen(name, "w")) == NULL) {
- free(name);
- return NULL;
- }
- if (add(f, command, name, execute)) {
- (void)fclose(f);
- (void)unlink(name);
- free(name);
- return NULL;
- }
- return f;
- default:
- free(name);
- return NULL;
- }
-}
-
-int
-mypclose(FILE *f)
-{
- struct todo *p, **prev;
- char buff[256];
- const char *name;
- int status;
-
- for (p = todolist, prev = &todolist; p; prev = &(p->next), p = p->next)
- if (p->f == f) {
- *prev = p->next;
- name = p->name;
- switch (p->what) {
- case delete:
- free(p);
- if (fclose(f) == EOF) {
- (void)unlink(name);
- status = EOF;
- } else if (unlink(name) < 0)
- status = EOF;
- else
- status = 0;
- free((void*)name);
- return status;
- case execute:
- (void)sprintf(buff, "%s <%s", p->command, p->name);
- free(p);
- if (fclose(f) == EOF) {
- (void)unlink(name);
- status = EOF;
- } else if (system(buff)) {
- (void)unlink(name);
- status = EOF;
- } else if (unlink(name) < 0)
- status = EOF;
- else
- status = 0;
- free((void*)name);
- return status;
- default:
- return EOF;
- }
- }
- return EOF;
-}
-
-/*
- * Clean up at the end. Called by the onexit handler.
- */
-static int
-close_pipes(void)
-{
- struct todo *p;
-
- for (p = todolist; p; p = p->next)
- (void)mypclose(p->f);
- return 0;
-}
diff --git a/msdos/usage.c b/msdos/usage.c
deleted file mode 100644
index 28991679e9..0000000000
--- a/msdos/usage.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* usage.c
- *
- * Show usage message.
- */
-
-#include <stdio.h>
-#include <string.h>
-
-
-usage(char *myname)
-{
-char * p;
-char * name_p;
-
-name_p = myname;
-if ( p = strrchr(myname,'/') )
- name_p = p+1; /* point after final '/' */
-#ifdef MSDOS
-if ( p = strrchr(name_p,'\\') )
- name_p = p+1; /* point after final '\\' */
-if ( p = strrchr(name_p,':') )
- name_p = p+1; /* point after final ':' */
- printf("\nUsage: %s [-acdnpsSvw] [-Dnumber] [-i[extension]] [-Idirectory]"
-#else
- printf("\nUsage: %s [-acdnpPsSuUvw] [-Dnumber] [-i[extension]] [-Idirectory]"
-#endif
- "\n [-e \"command\"] [-x[directory]] [filename] [arguments]\n", name_p);
-
- printf("\n -a autosplit mode with -n or -p"
- "\n -c syntaxcheck only"
- "\n -d run scripts under debugger"
- "\n -n assume 'while (<>) { ...script... }' loop arround your script"
- "\n -p assume loop like -n but print line also like sed"
-#ifndef MSDOS
- "\n -P run script through C preprocessor befor compilation"
-#endif
- "\n -s enable some switch parsing for switches after script name"
- "\n -S look for the script using PATH environment variable");
-#ifndef MSDOS
- printf("\n -u dump core after compiling the script"
- "\n -U allow unsafe operations");
-#endif
- printf("\n -v print version number and patchlevel of perl"
- "\n -w turn warnings on for compilation of your script\n"
- "\n -Dnumber set debugging flags"
- "\n -i[extension] edit <> files in place (make backup if extension supplied)"
- "\n -Idirectory specify include directory in conjunction with -P"
- "\n -e command one line of script, multiple -e options are allowed"
- "\n [filename] can be ommitted, when -e is used"
- "\n -x[directory] strip off text before #!perl line and perhaps cd to directory\n");
-}