perl 4.0 patch 24: patch #20, continued
Larry Wall [Mon, 8 Jun 1992 04:49:46 +0000 (04:49 +0000)]
See patch #20.

atarist/echo.c [new file with mode: 0644]
os2/config.h
patchlevel.h

diff --git a/atarist/echo.c b/atarist/echo.c
new file mode 100644 (file)
index 0000000..0853d62
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * echo args, globbing is necessary.
+ * usage:
+ *     echo [-n] [args ...]
+ * \n \r \b \c \v \\ \f \t \NNN escapes supported
+ * -n and \c mean dont echo the final newline.
+ *
+ * ++jrb  bammi@cadence.com
+ */
+
+#include <stdio.h>
+
+#if __STDC__
+# include <compiler.h>
+#else
+# define __PROTO(X) ()
+#endif
+
+char   **glob __PROTO((char *patt, int decend_dir));
+int    contains_wild __PROTO((char *patt));
+void   free_all __PROTO((void));
+
+
+int final_newline = 1; /* turned off by -n or \c */
+
+int main(argc, argv)
+int argc;
+char **argv;
+{
+    --argc; ++argv;
+    if((*argv)[0] == '-')
+    {
+       if ((*argv)[1] == 'n')
+           final_newline = 0;
+       else
+       {
+           fputs("usage: echo [-n] [arguement ... ]\n", stderr);
+           return 1;
+       }
+       --argc; ++argv;
+    }
+
+    while(argc--)
+    {
+       char *word = *argv;
+       char **list;
+
+       if(contains_wild(word) && (list = glob(word, 0)))
+       {
+           while(*list)
+           {
+               fputs(*list, stdout);
+               if(*++list) putchar(' ');
+           }
+           free_all();
+       }
+       else
+       {
+           char c;
+           for(c = *word; c; c = (*word)? *++word : 0)
+           {
+               if(c != '\\')
+                   putchar(c);
+               else
+               {
+                   switch(*++word)
+                   {
+                       case 'b':  putchar('\b'); break;
+                       case 'f':  putchar('\f'); break;
+                       case 'n':  putchar('\n'); break;
+                       case 'r':  putchar('\r'); break;
+                       case 't':  putchar('\t'); break;
+                       case 'v':  putchar('\v'); break;
+                       case '\\': putchar('\\'); break;
+                       case 'c':  final_newline = 0; break;
+                       default:   putchar(*word); /* ?? */
+                       case '0':
+                       {
+                           int n = 0;
+                           for(c = *++word; (c >= '0') && (c <= '7'); c = *++word)
+                               n = (n << 3) + (c - '0');
+                           putchar(n);
+                       }
+                   }
+               }
+           }
+       }
+       if(*++argv) putchar(' ');
+    }
+    if(final_newline) putchar('\n');
+    return 0;
+}
+
+                                 
+       
+       
+       
+       
index 6a707ac..b37cf5e 100644 (file)
+/* manually edited version for OS/2 with MS C 6.00
+   check the HAS_?DBM symbols and if you have such a library ...
+   June 1991, Kai Uwe Rommel */
+
+#ifndef config_h
+#define config_h
 /* config.h
- * This file was hand tailored for compiling under MS-DOS and MSC 5.1.
- * Diomidis Spinellis, March 1990.
+ * 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.
  *
- * Then it got mangled again for compiling under OS/2 and MSC 6.0.
- * Raymond Chen, June 1990.
+ * 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.
  */
-#define OS2            /**/
+
+#define OS2
 
 /* OS/2 supports some additional things MS-DOS doesn't.
  */
-#ifdef OS2
-#define PIPE
-#define GETPPID
-#define HAS_GETPRIORITY
-#define HAS_SETPRIORITY
-#define KILL
-#endif /* OS2 */
+#define S_ISUID 0
+#define S_ISGID 0
 
-/* SUFFIX:
- *      This symbol, if defined, indicates that the function add_suffix has
- *      been supplied in a system-dependent .c file.  This function is
- *      recommended for operating systems whose filenaming conventions
- *      do not permit arbitrary strings as filenames.
- */
-#define SUFFIX /**/
+#define HAS_ALARM
+#define HAS_GETPPID
+#define HAS_PIPE
+#define HAS_KILL
+#define HAS_WAIT
+#define HAS_UMASK
+#define HAS_GDBM
 
-/* EUNICE:
+/* 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:
+/* 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             /**/
 
-/* BIN:
+/* ALIGNBYTES
+ *     This symbol contains the number of bytes required to align a double.
+ *     Usual values are 2, 4, and 8.
+ */
+#define ALIGNBYTES 2           /**/
+
+/* BIN
  *     This symbol holds the name of the directory in which the user wants
- *     to put publicly executable images for the package in question.  It
+ *     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"             /**/
+#define BIN "c:/bin"             /**/
 
-/* BYTEORDER:
+/* BYTEORDER
  *     This symbol contains an encoding of the order of bytes in a long.
  *     Usual values (in octal) are 01234, 04321, 02143, 03412...
  */
-/* CHECK */
 #define BYTEORDER 0x1234               /**/
 
-/* 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 -{" or "/lib/cpp".
+ *     output.  Typical value of "cc -E" or "/lib/cpp".
  */
-/* 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 "".
  */
-/* TODO */
-#define CPPSTDIN "cc -{"
+#define CPPSTDIN "cpp -P"
 #define CPPMINUS ""
 
-/* HAS_BCMP:
+/* 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.
  */
-/*#define      HAS_BCMP                /**/
+/* #define     HAS_BCMP                /**/
 
-/* HAS_BCOPY:
+/* HAS_BCOPY
  *     This symbol, if defined, indicates that the bcopy routine is available
  *     to copy blocks of memory.  Otherwise you should probably use memcpy().
  */
-/*#define      HAS_BCOPY               /**/
+/* #define     HAS_BCOPY               /**/
 
-/* CHARSPRINTF:
+/* 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.
+ */
+/* #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.
+ */
+/* 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 1     /**/
+
+/* 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.
  */
-/*#define      CHARSPRINTF     /**/
+/* #define     CHARSPRINTF     /**/
 
-/* HAS_CRYPT:
+/* 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              /**/
+
+/* HAS_CRYPT
  *     This symbol, if defined, indicates that the crypt routine is available
  *     to encrypt passwords and the like.
  */
-/* TODO */
-/*#define      HAS_CRYPT               /**/
+#define        HAS_CRYPT               /**/
 
-/* DOSUID:
+/* CSH
+ *     This symbol, if defined, indicates that the C-shell exists.
+ *     If defined, contains the full pathname of csh.
+ */
+/* #define CSH "/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
  *     subprocesses to which it must pass the filename rather than the
  *     file descriptor of the script to be executed.
  */
-/*#define DOSUID               /**/
+/*#undef DOSUID                /**/
 
-/* HAS_DUP2:
+/* 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:
+/* 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              /**/
 
-/* I_FCNTL:
- *     This symbol, if defined, indicates to the C program that it should
- *     include fcntl.h.
+/* HAS_FCNTL
+ *     This symbol, if defined, indicates to the C program that
+ *     the fcntl() function exists.
+ */
+/* #define     HAS_FCNTL               /**/
+
+/* FLEXFILENAMES
+ *     This symbol, if defined, indicates that the system supports filenames
+ *     longer than 14 characters.
  */
-/*#define      I_FCNTL         /**/
+#define        FLEXFILENAMES           /**/
 
-/* HAS_FLOCK:
+/* 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:
+/* 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          /**/
+/*#undef       HAS_GETHOSTENT          /**/
 
-/* HAS_GETPGRP:
+/* 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_GETPRIORITY:
+/* 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.
  */
-/*#define      HAS_GETPRIORITY         /**/
+#define        HAS_GETPRIORITY         /**/
 
-/* HAS_HTONS:
+/* HAS_HTONS
  *     This symbol, if defined, indicates that the htons routine (and friends)
  *     are available to do network order byte swapping.
  */
-/* HAS_HTONL:
+/* HAS_HTONL
  *     This symbol, if defined, indicates that the htonl routine (and friends)
  *     are available to do network order byte swapping.
  */
-/* HAS_NTOHS:
+/* HAS_NTOHS
  *     This symbol, if defined, indicates that the ntohs routine (and friends)
  *     are available to do network order byte swapping.
  */
-/* HAS_NTOHL:
+/* 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_HTONS       /**/
+/* #define     HAS_HTONL       /**/
+/* #define     HAS_NTOHS       /**/
+/* #define     HAS_NTOHL       /**/
 
-/* index:
+/* index
  *     This preprocessor symbol is defined, along with rindex, if the system
  *     uses the strchr and strrchr routines instead.
  */
-/* rindex:
+/* 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? */
 
-/* I_SYSIOCTL:
- *     This symbol, if defined, indicates that sys/ioctl.h exists and should
- *     be included.
+/* HAS_ISASCII
+ *     This symbol, if defined, indicates that the isascii routine is available
+ *     to test characters for asciiness.
  */
-/*#define      I_SYSIOCTL              /**/
+/*#undef       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_MEMCMP:
+/* HAS_LSTAT
+ *     This symbol, if defined, indicates that the lstat() routine is
+ *     available to stat symbolic links.
+ */
+/* #define     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:
+/* 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:
+/* 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_NDBM:
+/* HAS_MSG
+ *     This symbol, if defined, indicates that the entire msg*(2) library is
+ *     supported.
+ */
+/* #define     HAS_MSG         /**/
+
+/* HAS_MSGCTL
+ *     This symbol, if defined, indicates that the msgctl() routine is
+ *     available to control message passing.
+ */
+/* #define     HAS_MSGCTL              /**/
+
+/* HAS_MSGGET
+ *     This symbol, if defined, indicates that the msgget() routine is
+ *     available to get messages.
+ */
+/* #define     HAS_MSGGET              /**/
+
+/* HAS_MSGRCV
+ *     This symbol, if defined, indicates that the msgrcv() routine is
+ *     available to receive messages.
+ */
+/* #define     HAS_MSGRCV              /**/
+
+/* 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                /**/
+/* #define     HAS_NDBM                /**/
 
-/* HAS_ODBM:
+/* HAS_ODBM
  *     This symbol, if defined, indicates that dbm.h exists and should
  *     be included.
  */
-/*#define      HAS_ODBM                /**/
+/* #define     HAS_ODBM                /**/
 
-/* HAS_READDIR:
+/* 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 create directories.
+ *     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              /**/
 
-/* HAS_RMDIR:
+/* 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_SETEGID:
+/* 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.
+ */
+/* #define     HAS_SELECT      /**/
+
+/* HAS_SEM
+ *     This symbol, if defined, indicates that the entire sem*(2) library is
+ *     supported.
+ */
+/* #define     HAS_SEM         /**/
+
+/* HAS_SEMCTL
+ *     This symbol, if defined, indicates that the semctl() routine is
+ *     available to control semaphores.
+ */
+/* #define     HAS_SEMCTL              /**/
+
+/* HAS_SEMGET
+ *     This symbol, if defined, indicates that the semget() routine is
+ *     available to get semaphores ids.
+ */
+/* #define     HAS_SEMGET              /**/
+
+/* HAS_SEMOP
+ *     This symbol, if defined, indicates that the semop() routine is
+ *     available to perform semaphore operations.
+ */
+/* #define     HAS_SEMOP               /**/
+
+/* 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_SETPGRP:
+/* 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_SETPRIORITY:
+/* 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.
  */
-/*#define      HAS_SETPRIORITY         /**/
+#define        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_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.
  */
-/*#define      HAS_SETREGID            /**/
+/* #define     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_SETREUID
+ *     This symbol, if defined, indicates that the setreuid routine is
+ *     available to change the real and effective uid of the current program.
  */
-/*#define      HAS_SETREUID            /**/
+/* 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.
+ */
+/* #define     HAS_SETREUID            /**/
+/*#undef       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.
+ */
+/* #define     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*.
+ */
+/* #define     HAS_SHMAT               /**/
+
+/*#undef       VOIDSHMAT               /**/
+
+/* HAS_SHMCTL
+ *     This symbol, if defined, indicates that the shmctl() routine is
+ *     available to control a shared memory segment.
+ */
+/* #define     HAS_SHMCTL              /**/
+
+/* HAS_SHMDT
+ *     This symbol, if defined, indicates that the shmdt() routine is
+ *     available to detach a shared memory segment.
+ */
+/* #define     HAS_SHMDT               /**/
+
+/* HAS_SHMGET
+ *     This symbol, if defined, indicates that the shmget() routine is
+ *     available to get a shared memory segment id.
+ */
+/* #define     HAS_SHMGET              /**/
 
-/* HAS_SOCKET:
- *      This symbol, if defined, indicates that the BSD socket interface is
- *      supported.
+/* 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.
+/* 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.
+/* 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          /**/
+/* #define     HAS_SOCKET              /**/
 
-/*#undef HAS_SOCKETPAIR      /**/
+/* #define     HAS_SOCKETPAIR  /**/
 
-/*#undef        OLDSOCKET       /**/
+/*#undef       OLDSOCKET       /**/
 
-/* STATBLOCKS:
+/* STATBLOCKS
  *     This symbol is defined if this system has a stat structure declaring
  *     st_blksize and st_blocks.
  */
-/*#define      STATBLOCKS      /**/
+/* #define     STATBLOCKS      /**/
 
-/* STDSTDIO:
+/* STDSTDIO
  *     This symbol is defined if this system has a FILE structure declaring
  *     _ptr and _cnt in stdio.h.
  */
 #define        STDSTDIO        /**/
 
-/* STRUCTCOPY:
+/* 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_SYMLINK:
+/* HAS_STRERROR
+ *     This symbol, if defined, indicates that the strerror() routine is
+ *     available to translate error numbers to strings.
+ */
+/*#undef       HAS_STRERROR            /**/
+
+/* 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:
+/* 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             /**/
 
-/* s_tm:
- *     This symbol is defined if this system declares "struct tm" in
- *     in <sys/time.h> rather than <time.h>.  We can't just say
- *     -I/usr/include/sys because some systems have both time files, and
- *     the -I trick gets the wrong one.
- */
-/* I_SYS_TIME:
- *     This symbol is defined if this system has the file <sys/time.h>.
- */
-/*
- * I_TIME:
- *     This symbol is defined if time this  system has the file <time.h>.
+/* HAS_TELLDIR
+ *     This symbol, if defined, indicates that the telldir routine is
+ *     available to tell your location in directories.
  */
-/*#undef       s_tm    /**/
-/*#define      I_SYS_TIME      /**/
-#define I_TIME
+#define        HAS_TELLDIR             /**/
 
-/* VARARGS:
- *     This symbol, if defined, indicates to the C program that it should
- *     include varargs.h.
+/* HAS_TRUNCATE
+ *     This symbol, if defined, indicates that the truncate routine is
+ *     available to truncate files.
  */
-#define        VARARGS         /**/
+/* #define     HAS_TRUNCATE            /**/
 
-/* vfork:
- *     This symbol, if defined, remaps the vfork routine to fork if the
- *     vfork() routine isn't supported here.
+/* HAS_VFORK
+ *     This symbol, if defined, indicates that vfork() exists.
  */
-/*#undef       vfork fork      /**/
+/* #define     HAS_VFORK       /**/
 
-/* VOIDSIG:
+/* 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       void    /**/
+
+/* HASVOLATILE
+ *     This symbol, if defined, indicates that this C compiler knows about
+ *     the volatile declaration.
+ */
+#define        HASVOLATILE     /**/
 
-/* 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:
+/* 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    /**/
+#define        HAS_VPRINTF     /**/
+/* #define     CHARVSPRINTF    /**/
 
-/* GIDTYPE:
+/* HAS_WAIT4
+ *     This symbol, if defined, indicates that wait4() exists.
+ */
+/* #define     HAS_WAIT4       /**/
+
+/* HAS_WAITPID
+ *     This symbol, if defined, indicates that waitpid() exists.
+ */
+#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.
  */
-/* TODO */
 #define GIDTYPE int            /**/
 
-/* I_DIRENT:
- *     This symbol, if defined, indicates to the C program that it should
- *     include dirent.h.
+/* GROUPSTYPE
+ *     This symbol has a value like gid_t, int, ushort, or whatever type is
+ *     used in the return value of getgroups().
  */
-/* 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         /**/
+
+/* I_FCNTL
+ *     This manifest constant tells the C program to include <fcntl.h>.
  */
-/*#undef       I_DIRENT                /**/
-#define        DIRNAMLEN               /**/
+/*#undef       I_FCNTL /**/
 
-/* I_FCNTL:
- *     This symbol, if defined, indicates to the C program that it should
- *     include fcntl.h.
+/* I_GDBM
+ *     This symbol, if defined, indicates that gdbm.h exists and should
+ *     be included.
  */
-/*#define      I_FCNTL         /**/
+#define        I_GDBM          /**/
 
-/* I_GRP:
+/* I_GRP
  *     This symbol, if defined, indicates to the C program that it should
  *     include grp.h.
  */
-/*#define      I_GRP           /**/
+/* #define     I_GRP           /**/
 
-/* I_PWD:
+/* 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.
+ */
+/* #define     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:
+/* PWQUOTA
  *     This symbol, if defined, indicates to the C program that struct passwd
  *     contains pw_quota.
  */
-/* PWAGE:
+/* PWAGE
  *     This symbol, if defined, indicates to the C program that struct passwd
  *     contains pw_age.
  */
-/*#define      I_PWD           /**/
-/*#define      PWQUOTA         /**/
-/*#undef       PWAGE           /**/
+/* 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           /**/
+/*#undef       PWQUOTA         /**/
+/* #define     PWAGE           /**/
+/*#undef       PWCHANGE        /**/
+/*#undef       PWCLASS         /**/
+/*#undef       PWEXPIRE        /**/
+/* #define     PWCOMMENT       /**/
 
-/* I_SYS_DIR:
- *     This symbol, if defined, indicates to the C program that it should
- *     include sys/dir.h.
+/* I_SYS_FILE
+ *     This manifest constant tells the C program to include <sys/file.h>.
  */
-#define        I_SYS_DIR               /**/
+/* #define     I_SYS_FILE      /**/
 
-/* I_SYSIOCTL:
+/* I_SYSIOCTL
  *     This symbol, if defined, indicates that sys/ioctl.h exists and should
  *     be included.
  */
-/*#define      I_SYSIOCTL              /**/
+/* #define     I_SYSIOCTL              /**/
 
-/* I_VARARGS:
+/* 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          /**/
+/* #define     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.
+ */
+/* #define     I_UTIME         /**/
+
+/* I_VARARGS
  *     This symbol, if defined, indicates to the C program that it should
  *     include varargs.h.
  */
 #define        I_VARARGS               /**/
 
-/* INTSIZE:
+/* 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 2              /**/
 
-/* RANDBITS:
+/* 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.
+ */
+/* #define     I_DIRENT        /**/
+#define        I_SYS_DIR       /**/
+/*#undef       I_NDIR          /**/
+/*#undef       I_SYS_NDIR      /**/
+/*#undef       I_MY_DIR        /**/
+#define        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            /**/
+#define RANDBITS 15            /**/
+
+/* 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:
+/* SIG_NAME
  *     This symbol contains an list of signal names in order.
  */
-#ifdef OS2
-#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\
-         /*      0      1     2     3      4      5     6     7    8 */\
+#define SIG_NAME \
+   "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\
+  /* 0      1     2     3      4      5     6     7    8 */\
    "KILL","BUS","SEGV","SYS","PIPE","UALRM","TERM","ALRM","USR2","CLD",\
   /* 9     10     11    12    13     14     15     16     17    18 */\
    "PWR","USR3","BREAK","ABRT"
   /*19     20     21    22   */
-#else
-#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CHLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","USR1","USR2"              /**/
-#endif /* OS2 */
 
-/* STDCHAR:
+/* 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:
+/* 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            /**/
 
-/* VOIDFLAGS:
+/* VOIDHAVE
  *     This symbol indicates how much support of the void type is given by this
  *     compiler.  What various bits mean:
  *
  *         4 = supports comparisons between pointers to void functions and
  *                 addresses of void functions
  *
- *     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 7
+ *     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
 #endif
-#define VOIDFLAGS 7
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
+#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 */
+#else
+#define VOID void
+#define VOIDP (void *)
 #endif
 
-/* PRIVLIB:
+/* 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.
+ *     should be prepared to do ~ expansion.
  */
 #define PRIVLIB "c:/bin/perl"          /**/
 
 /*
- * BUGGY_MSC:
- *     This symbol is defined if you are the unfortunate owner of a buggy
- *     Microsoft C compiler and want to use intrinsic functions.  Versions
- *     up to 5.1 are known conform to this definition.
- */
-/*#define BUGGY_MSC                    /**/
-
-/*
  * BINARY:
  *     This symbol is defined if you run under an operating system that
  *     distinguishes between binary and text files.  If so the function
  */
 #define BINARY
 
-#define S_ISUID 0
-#define S_ISGID 0
-#define CASTNEGFLOAT
+#endif
index 2627e90..f198d8a 100644 (file)
@@ -1 +1 @@
-#define PATCHLEVEL 23
+#define PATCHLEVEL 24