home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume30 / perl / patch24 < prev    next >
Text File  |  1992-06-11  |  50KB  |  1,664 lines

  1. Newsgroups: comp.sources.misc
  2. From: lwall@netlabs.com (Larry Wall)
  3. Subject:  v30i035:  perl - The perl programming language, Patch24
  4. Message-ID: <1992Jun11.180341.380@sparky.imd.sterling.com>
  5. X-Md4-Signature: 4eb6394e0c3195dc6769b693fc24b9da
  6. Date: Thu, 11 Jun 1992 18:03:41 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: lwall@netlabs.com (Larry Wall)
  10. Posting-number: Volume 30, Issue 35
  11. Archive-name: perl/patch24
  12. Environment: UNIX, MS-DOS, OS2
  13. Patch-To: perl: Volume 18, Issue 19-54
  14.  
  15. System: perl version 4.0
  16. Patch #: 24
  17. Priority: highish
  18. Subject: patch #20, continued
  19.  
  20. Description:
  21.     See patch #20.
  22.  
  23. Fix:    From rn, say "| patch -p -N -d DIR", where DIR is your perl source
  24.     directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
  25.     If you don't have the patch program, apply the following by hand,
  26.     or get patch (version 2.0, latest patchlevel).
  27.  
  28.     After patching:
  29.         *** DO NOTHING--INSTALL ALL PATCHES UP THROUGH #33 FIRST ***
  30.  
  31.     If patch indicates that patchlevel is the wrong version, you may need
  32.     to apply one or more previous patches, or the patch may already
  33.     have been applied.  See the patchlevel.h file to find out what has or
  34.     has not been applied.  In any event, don't continue with the patch.
  35.  
  36.     If you are missing previous patches they can be obtained from me:
  37.  
  38.     Larry Wall
  39.     lwall@netlabs.com
  40.  
  41.     If you send a mail message of the following form it will greatly speed
  42.     processing:
  43.  
  44.     Subject: Command
  45.     @SH mailpatch PATH perl 4.0 LIST
  46.            ^ note the c
  47.  
  48.     where PATH is a return path FROM ME TO YOU either in Internet notation,
  49.     or in bang notation from some well-known host, and LIST is the number
  50.     of one or more patches you need, separated by spaces, commas, and/or
  51.     hyphens.  Saying 35- says everything from 35 to the end.
  52.  
  53.  
  54. Index: patchlevel.h
  55. Prereq: 23
  56. 1c1
  57. < #define PATCHLEVEL 23
  58. ---
  59. > #define PATCHLEVEL 24
  60.  
  61. Index: os2/config.h
  62. *** os2/config.h.old    Mon Jun  8 17:49:45 1992
  63. --- os2/config.h    Mon Jun  8 17:49:46 1992
  64. ***************
  65. *** 1,31 ****
  66.   /* config.h
  67. !  * This file was hand tailored for compiling under MS-DOS and MSC 5.1.
  68. !  * Diomidis Spinellis, March 1990.
  69.    *
  70. !  * Then it got mangled again for compiling under OS/2 and MSC 6.0.
  71. !  * Raymond Chen, June 1990.
  72.    */
  73. - #define OS2        /**/
  74.   
  75.   /* OS/2 supports some additional things MS-DOS doesn't.
  76.    */
  77. ! #ifdef OS2
  78. ! #define PIPE
  79. ! #define GETPPID
  80. ! #define HAS_GETPRIORITY
  81. ! #define HAS_SETPRIORITY
  82. ! #define KILL
  83. ! #endif /* OS2 */
  84.   
  85. ! /* SUFFIX:
  86. !  *      This symbol, if defined, indicates that the function add_suffix has
  87. !  *      been supplied in a system-dependent .c file.  This function is
  88. !  *      recommended for operating systems whose filenaming conventions
  89. !  *      do not permit arbitrary strings as filenames.
  90. !  */
  91. ! #define SUFFIX    /**/
  92.   
  93. ! /* EUNICE:
  94.    *    This symbol, if defined, indicates that the program is being compiled
  95.    *    under the EUNICE package under VMS.  The program will need to handle
  96.    *    things like files that don't go away the first time you unlink them,
  97. --- 1,35 ----
  98. + /* manually edited version for OS/2 with MS C 6.00
  99. +    check the HAS_?DBM symbols and if you have such a library ...
  100. +    June 1991, Kai Uwe Rommel */
  101. + #ifndef config_h
  102. + #define config_h
  103.   /* config.h
  104. !  * This file was produced by running the config.h.SH script, which
  105. !  * gets its values from config.sh, which is generally produced by
  106. !  * running Configure.
  107.    *
  108. !  * Feel free to modify any of this as the need arises.  Note, however,
  109. !  * that running config.h.SH again will wipe out any changes you've made.
  110. !  * For a more permanent change edit config.sh and rerun config.h.SH.
  111.    */
  112.   
  113. + #define OS2
  114.   /* OS/2 supports some additional things MS-DOS doesn't.
  115.    */
  116. ! #define S_ISUID 0
  117. ! #define S_ISGID 0
  118.   
  119. ! #define HAS_ALARM
  120. ! #define HAS_GETPPID
  121. ! #define HAS_PIPE
  122. ! #define HAS_KILL
  123. ! #define HAS_WAIT
  124. ! #define HAS_UMASK
  125. ! #define HAS_GDBM
  126.   
  127. ! /* EUNICE
  128.    *    This symbol, if defined, indicates that the program is being compiled
  129.    *    under the EUNICE package under VMS.  The program will need to handle
  130.    *    things like files that don't go away the first time you unlink them,
  131. ***************
  132. *** 32,38 ****
  133.    *    due to version numbering.  It will also need to compensate for lack
  134.    *    of a respectable link() command.
  135.    */
  136. ! /* VMS:
  137.    *    This symbol, if defined, indicates that the program is running under
  138.    *    VMS.  It is currently only set in conjunction with the EUNICE symbol.
  139.    */
  140. --- 36,42 ----
  141.    *    due to version numbering.  It will also need to compensate for lack
  142.    *    of a respectable link() command.
  143.    */
  144. ! /* VMS
  145.    *    This symbol, if defined, indicates that the program is running under
  146.    *    VMS.  It is currently only set in conjunction with the EUNICE symbol.
  147.    */
  148. ***************
  149. *** 39,102 ****
  150.   /*#undef    EUNICE        /**/
  151.   /*#undef    VMS        /**/
  152.   
  153. ! /* BIN:
  154.    *    This symbol holds the name of the directory in which the user wants
  155. !  *    to put publicly executable images for the package in question.  It
  156.    *    is most often a local directory such as /usr/local/bin.
  157.    */
  158. ! #define BIN "/usr/local/bin"             /**/
  159.   
  160. ! /* BYTEORDER:
  161.    *    This symbol contains an encoding of the order of bytes in a long.
  162.    *    Usual values (in octal) are 01234, 04321, 02143, 03412...
  163.    */
  164. - /* CHECK */
  165.   #define BYTEORDER 0x1234        /**/
  166.   
  167. ! /* CPPSTDIN:
  168.    *    This symbol contains the first part of the string which will invoke
  169.    *    the C preprocessor on the standard input and produce to standard
  170. !  *    output.     Typical value of "cc -{" or "/lib/cpp".
  171.    */
  172. ! /* CPPMINUS:
  173.    *    This symbol contains the second part of the string which will invoke
  174.    *    the C preprocessor on the standard input and produce to standard
  175.    *    output.  This symbol will have the value "-" if CPPSTDIN needs a minus
  176.    *    to specify standard input, otherwise the value is "".
  177.    */
  178. ! /* TODO */
  179. ! #define CPPSTDIN "cc -{"
  180.   #define CPPMINUS ""
  181.   
  182. ! /* HAS_BCMP:
  183.    *    This symbol, if defined, indicates that the bcmp routine is available
  184.    *    to compare blocks of memory.  If undefined, use memcmp.  If that's
  185.    *    not available, roll your own.
  186.    */
  187. ! /*#define    HAS_BCMP        /**/
  188.   
  189. ! /* HAS_BCOPY:
  190.    *    This symbol, if defined, indicates that the bcopy routine is available
  191.    *    to copy blocks of memory.  Otherwise you should probably use memcpy().
  192.    */
  193. ! /*#define    HAS_BCOPY        /**/
  194.   
  195. ! /* CHARSPRINTF:
  196.    *    This symbol is defined if this system declares "char *sprintf()" in
  197.    *    stdio.h.  The trend seems to be to declare it as "int sprintf()".  It
  198.    *    is up to the package author to declare sprintf correctly based on the
  199.    *    symbol.
  200.    */
  201. ! /*#define    CHARSPRINTF     /**/
  202.   
  203. ! /* HAS_CRYPT:
  204.    *    This symbol, if defined, indicates that the crypt routine is available
  205.    *    to encrypt passwords and the like.
  206.    */
  207. ! /* TODO */
  208. ! /*#define    HAS_CRYPT        /**/
  209.   
  210. ! /* DOSUID:
  211.    *    This symbol, if defined, indicates that the C program should
  212.    *    check the script that it is executing for setuid/setgid bits, and
  213.    *    attempt to emulate setuid/setgid on systems that have disabled
  214. --- 43,142 ----
  215.   /*#undef    EUNICE        /**/
  216.   /*#undef    VMS        /**/
  217.   
  218. ! /* ALIGNBYTES
  219. !  *    This symbol contains the number of bytes required to align a double.
  220. !  *    Usual values are 2, 4, and 8.
  221. !  */
  222. ! #define ALIGNBYTES 2        /**/
  223. ! /* BIN
  224.    *    This symbol holds the name of the directory in which the user wants
  225. !  *    to keep publicly executable images for the package in question.  It
  226.    *    is most often a local directory such as /usr/local/bin.
  227.    */
  228. ! #define BIN "c:/bin"             /**/
  229.   
  230. ! /* BYTEORDER
  231.    *    This symbol contains an encoding of the order of bytes in a long.
  232.    *    Usual values (in octal) are 01234, 04321, 02143, 03412...
  233.    */
  234.   #define BYTEORDER 0x1234        /**/
  235.   
  236. ! /* CPPSTDIN
  237.    *    This symbol contains the first part of the string which will invoke
  238.    *    the C preprocessor on the standard input and produce to standard
  239. !  *    output.     Typical value of "cc -E" or "/lib/cpp".
  240.    */
  241. ! /* CPPMINUS
  242.    *    This symbol contains the second part of the string which will invoke
  243.    *    the C preprocessor on the standard input and produce to standard
  244.    *    output.  This symbol will have the value "-" if CPPSTDIN needs a minus
  245.    *    to specify standard input, otherwise the value is "".
  246.    */
  247. ! #define CPPSTDIN "cpp -P"
  248.   #define CPPMINUS ""
  249.   
  250. ! /* HAS_BCMP
  251.    *    This symbol, if defined, indicates that the bcmp routine is available
  252.    *    to compare blocks of memory.  If undefined, use memcmp.  If that's
  253.    *    not available, roll your own.
  254.    */
  255. ! /* #define    HAS_BCMP        /**/
  256.   
  257. ! /* HAS_BCOPY
  258.    *    This symbol, if defined, indicates that the bcopy routine is available
  259.    *    to copy blocks of memory.  Otherwise you should probably use memcpy().
  260.    */
  261. ! /* #define    HAS_BCOPY        /**/
  262.   
  263. ! /* HAS_BZERO
  264. !  *    This symbol, if defined, indicates that the bzero routine is available
  265. !  *    to zero blocks of memory.  Otherwise you should probably use memset()
  266. !  *    or roll your own.
  267. !  */
  268. ! /* #define    HAS_BZERO        /**/
  269. ! /* CASTNEGFLOAT
  270. !  *    This symbol, if defined, indicates that this C compiler knows how to
  271. !  *    cast negative or large floating point numbers to unsigned longs, ints
  272. !  *    and shorts.
  273. !  */
  274. ! /* CASTFLAGS
  275. !  *    This symbol contains flags that say what difficulties the compiler
  276. !  *    has casting odd floating values to unsigned long:
  277. !  *        1 = couldn't cast < 0
  278. !  *        2 = couldn't cast >= 0x80000000
  279. !  */
  280. ! #define    CASTNEGFLOAT    /**/
  281. ! #define    CASTFLAGS 1    /**/
  282. ! /* CHARSPRINTF
  283.    *    This symbol is defined if this system declares "char *sprintf()" in
  284.    *    stdio.h.  The trend seems to be to declare it as "int sprintf()".  It
  285.    *    is up to the package author to declare sprintf correctly based on the
  286.    *    symbol.
  287.    */
  288. ! /* #define    CHARSPRINTF     /**/
  289.   
  290. ! /* HAS_CHSIZE
  291. !  *    This symbol, if defined, indicates that the chsize routine is available
  292. !  *    to truncate files.  You might need a -lx to get this routine.
  293. !  */
  294. ! #undef    HAS_CHSIZE        /**/
  295. ! /* HAS_CRYPT
  296.    *    This symbol, if defined, indicates that the crypt routine is available
  297.    *    to encrypt passwords and the like.
  298.    */
  299. ! #define    HAS_CRYPT        /**/
  300.   
  301. ! /* CSH
  302. !  *    This symbol, if defined, indicates that the C-shell exists.
  303. !  *    If defined, contains the full pathname of csh.
  304. !  */
  305. ! /* #define CSH "/bin/csh"        /**/
  306. ! /* DOSUID
  307.    *    This symbol, if defined, indicates that the C program should
  308.    *    check the script that it is executing for setuid/setgid bits, and
  309.    *    attempt to emulate setuid/setgid on systems that have disabled
  310. ***************
  311. *** 109,197 ****
  312.    *    subprocesses to which it must pass the filename rather than the
  313.    *    file descriptor of the script to be executed.
  314.    */
  315. ! /*#define DOSUID        /**/
  316.   
  317. ! /* HAS_DUP2:
  318.    *    This symbol, if defined, indicates that the dup2 routine is available
  319.    *    to dup file descriptors.  Otherwise you should use dup().
  320.    */
  321.   #define    HAS_DUP2        /**/
  322.   
  323. ! /* HAS_FCHMOD:
  324.    *    This symbol, if defined, indicates that the fchmod routine is available
  325.    *    to change mode of opened files.  If unavailable, use chmod().
  326.    */
  327. ! /*#define    HAS_FCHMOD        /**/
  328.   
  329. ! /* HAS_FCHOWN:
  330.    *    This symbol, if defined, indicates that the fchown routine is available
  331.    *    to change ownership of opened files.  If unavailable, use chown().
  332.    */
  333. ! /*#define    HAS_FCHOWN        /**/
  334.   
  335. ! /* I_FCNTL:
  336. !  *    This symbol, if defined, indicates to the C program that it should
  337. !  *    include fcntl.h.
  338.    */
  339. ! /*#define    I_FCNTL        /**/
  340.   
  341. ! /* HAS_FLOCK:
  342.    *    This symbol, if defined, indicates that the flock() routine is
  343.    *    available to do file locking.
  344.    */
  345. ! /*#define    HAS_FLOCK        /**/
  346.   
  347. ! /* HAS_GETGROUPS:
  348.    *    This symbol, if defined, indicates that the getgroups() routine is
  349.    *    available to get the list of process groups.  If unavailable, multiple
  350.    *    groups are probably not supported.
  351.    */
  352. ! /*#define    HAS_GETGROUPS        /**/
  353.   
  354. ! /* HAS_GETHOSTENT:
  355.    *    This symbol, if defined, indicates that the gethostent() routine is
  356.    *    available to lookup host names in some data base or other.
  357.    */
  358. ! /*#define    HAS_GETHOSTENT        /**/
  359.   
  360. ! /* HAS_GETPGRP:
  361.    *    This symbol, if defined, indicates that the getpgrp() routine is
  362.    *    available to get the current process group.
  363.    */
  364. ! /*#define    HAS_GETPGRP        /**/
  365.   
  366. ! /* HAS_GETPRIORITY:
  367.    *    This symbol, if defined, indicates that the getpriority() routine is
  368.    *    available to get a process's priority.
  369.    */
  370. ! /*#define    HAS_GETPRIORITY        /**/
  371.   
  372. ! /* HAS_HTONS:
  373.    *    This symbol, if defined, indicates that the htons routine (and friends)
  374.    *    are available to do network order byte swapping.
  375.    */
  376. ! /* HAS_HTONL:
  377.    *    This symbol, if defined, indicates that the htonl routine (and friends)
  378.    *    are available to do network order byte swapping.
  379.    */
  380. ! /* HAS_NTOHS:
  381.    *    This symbol, if defined, indicates that the ntohs routine (and friends)
  382.    *    are available to do network order byte swapping.
  383.    */
  384. ! /* HAS_NTOHL:
  385.    *    This symbol, if defined, indicates that the ntohl routine (and friends)
  386.    *    are available to do network order byte swapping.
  387.    */
  388. ! /*#define    HAS_HTONS        /**/
  389. ! /*#define    HAS_HTONL        /**/
  390. ! /*#define    HAS_NTOHS        /**/
  391. ! /*#define    HAS_NTOHL        /**/
  392.   
  393. ! /* index:
  394.    *    This preprocessor symbol is defined, along with rindex, if the system
  395.    *    uses the strchr and strrchr routines instead.
  396.    */
  397. ! /* rindex:
  398.    *    This preprocessor symbol is defined, along with index, if the system
  399.    *    uses the strchr and strrchr routines instead.
  400.    */
  401. --- 149,249 ----
  402.    *    subprocesses to which it must pass the filename rather than the
  403.    *    file descriptor of the script to be executed.
  404.    */
  405. ! /*#undef DOSUID        /**/
  406.   
  407. ! /* HAS_DUP2
  408.    *    This symbol, if defined, indicates that the dup2 routine is available
  409.    *    to dup file descriptors.  Otherwise you should use dup().
  410.    */
  411.   #define    HAS_DUP2        /**/
  412.   
  413. ! /* HAS_FCHMOD
  414.    *    This symbol, if defined, indicates that the fchmod routine is available
  415.    *    to change mode of opened files.  If unavailable, use chmod().
  416.    */
  417. ! /* #define    HAS_FCHMOD        /**/
  418.   
  419. ! /* HAS_FCHOWN
  420.    *    This symbol, if defined, indicates that the fchown routine is available
  421.    *    to change ownership of opened files.  If unavailable, use chown().
  422.    */
  423. ! /* #define    HAS_FCHOWN        /**/
  424.   
  425. ! /* HAS_FCNTL
  426. !  *    This symbol, if defined, indicates to the C program that
  427. !  *    the fcntl() function exists.
  428.    */
  429. ! /* #define    HAS_FCNTL        /**/
  430.   
  431. ! /* FLEXFILENAMES
  432. !  *    This symbol, if defined, indicates that the system supports filenames
  433. !  *    longer than 14 characters.
  434. !  */
  435. ! #define    FLEXFILENAMES        /**/
  436. ! /* HAS_FLOCK
  437.    *    This symbol, if defined, indicates that the flock() routine is
  438.    *    available to do file locking.
  439.    */
  440. ! /* #define    HAS_FLOCK        /**/
  441.   
  442. ! /* HAS_GETGROUPS
  443.    *    This symbol, if defined, indicates that the getgroups() routine is
  444.    *    available to get the list of process groups.  If unavailable, multiple
  445.    *    groups are probably not supported.
  446.    */
  447. ! /* #define    HAS_GETGROUPS        /**/
  448.   
  449. ! /* HAS_GETHOSTENT
  450.    *    This symbol, if defined, indicates that the gethostent() routine is
  451.    *    available to lookup host names in some data base or other.
  452.    */
  453. ! /*#undef    HAS_GETHOSTENT        /**/
  454.   
  455. ! /* HAS_GETPGRP
  456.    *    This symbol, if defined, indicates that the getpgrp() routine is
  457.    *    available to get the current process group.
  458.    */
  459. ! /* #define    HAS_GETPGRP        /**/
  460.   
  461. ! /* HAS_GETPGRP2
  462. !  *    This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
  463. !  *    routine is available to get the current process group.
  464. !  */
  465. ! /*#undef    HAS_GETPGRP2        /**/
  466. ! /* HAS_GETPRIORITY
  467.    *    This symbol, if defined, indicates that the getpriority() routine is
  468.    *    available to get a process's priority.
  469.    */
  470. ! #define    HAS_GETPRIORITY        /**/
  471.   
  472. ! /* HAS_HTONS
  473.    *    This symbol, if defined, indicates that the htons routine (and friends)
  474.    *    are available to do network order byte swapping.
  475.    */
  476. ! /* HAS_HTONL
  477.    *    This symbol, if defined, indicates that the htonl routine (and friends)
  478.    *    are available to do network order byte swapping.
  479.    */
  480. ! /* HAS_NTOHS
  481.    *    This symbol, if defined, indicates that the ntohs routine (and friends)
  482.    *    are available to do network order byte swapping.
  483.    */
  484. ! /* HAS_NTOHL
  485.    *    This symbol, if defined, indicates that the ntohl routine (and friends)
  486.    *    are available to do network order byte swapping.
  487.    */
  488. ! /* #define    HAS_HTONS    /**/
  489. ! /* #define    HAS_HTONL    /**/
  490. ! /* #define    HAS_NTOHS    /**/
  491. ! /* #define    HAS_NTOHL    /**/
  492.   
  493. ! /* index
  494.    *    This preprocessor symbol is defined, along with rindex, if the system
  495.    *    uses the strchr and strrchr routines instead.
  496.    */
  497. ! /* rindex
  498.    *    This preprocessor symbol is defined, along with index, if the system
  499.    *    uses the strchr and strrchr routines instead.
  500.    */
  501. ***************
  502. *** 198,230 ****
  503.   #define    index strchr    /* cultural */
  504.   #define    rindex strrchr    /*  differences? */
  505.   
  506. ! /* I_SYSIOCTL:
  507. !  *    This symbol, if defined, indicates that sys/ioctl.h exists and should
  508. !  *    be included.
  509.    */
  510. ! /*#define    I_SYSIOCTL        /**/
  511.   
  512. ! /* HAS_KILLPG:
  513.    *    This symbol, if defined, indicates that the killpg routine is available
  514.    *    to kill process groups.  If unavailable, you probably should use kill
  515.    *    with a negative process number.
  516.    */
  517. ! /*#define    HAS_KILLPG        /**/
  518.   
  519. ! /* HAS_MEMCMP:
  520.    *    This symbol, if defined, indicates that the memcmp routine is available
  521.    *    to compare blocks of memory.  If undefined, roll your own.
  522.    */
  523.   #define    HAS_MEMCMP        /**/
  524.   
  525. ! /* HAS_MEMCPY:
  526.    *    This symbol, if defined, indicates that the memcpy routine is available
  527.    *    to copy blocks of memory.  Otherwise you should probably use bcopy().
  528.    *    If neither is defined, roll your own.
  529.    */
  530.   #define    HAS_MEMCPY        /**/
  531.   
  532. ! /* HAS_MKDIR:
  533.    *    This symbol, if defined, indicates that the mkdir routine is available
  534.    *    to create directories.  Otherwise you should fork off a new process to
  535.    *    exec /bin/mkdir.
  536. --- 250,308 ----
  537.   #define    index strchr    /* cultural */
  538.   #define    rindex strrchr    /*  differences? */
  539.   
  540. ! /* HAS_ISASCII
  541. !  *    This symbol, if defined, indicates that the isascii routine is available
  542. !  *    to test characters for asciiness.
  543.    */
  544. ! /*#undef    HAS_ISASCII        /**/
  545.   
  546. ! /* HAS_KILLPG
  547.    *    This symbol, if defined, indicates that the killpg routine is available
  548.    *    to kill process groups.  If unavailable, you probably should use kill
  549.    *    with a negative process number.
  550.    */
  551. ! /* #define    HAS_KILLPG        /**/
  552.   
  553. ! /* HAS_LSTAT
  554. !  *    This symbol, if defined, indicates that the lstat() routine is
  555. !  *    available to stat symbolic links.
  556. !  */
  557. ! /* #define    HAS_LSTAT        /**/
  558. ! /* HAS_MEMCMP
  559.    *    This symbol, if defined, indicates that the memcmp routine is available
  560.    *    to compare blocks of memory.  If undefined, roll your own.
  561.    */
  562.   #define    HAS_MEMCMP        /**/
  563.   
  564. ! /* HAS_MEMCPY
  565.    *    This symbol, if defined, indicates that the memcpy routine is available
  566.    *    to copy blocks of memory.  Otherwise you should probably use bcopy().
  567.    *    If neither is defined, roll your own.
  568.    */
  569. + /* SAFE_MEMCPY
  570. +  *    This symbol, if defined, indicates that the memcpy routine is available
  571. +  *    to copy potentially overlapping copy blocks of memory.  Otherwise you
  572. +  *    should probably use memmove() or bcopy().  If neither is defined,
  573. +  *    roll your own.
  574. +  */
  575.   #define    HAS_MEMCPY        /**/
  576. + /*#undef    SAFE_MEMCPY        /**/
  577.   
  578. ! /* HAS_MEMMOVE
  579. !  *    This symbol, if defined, indicates that the memmove routine is available
  580. !  *    to move potentially overlapping blocks of memory.  Otherwise you
  581. !  *    should use bcopy() or roll your own.
  582. !  */
  583. ! /*#undef    HAS_MEMMOVE        /**/
  584. ! /* HAS_MEMSET
  585. !  *    This symbol, if defined, indicates that the memset routine is available
  586. !  *    to set a block of memory to a character.  If undefined, roll your own.
  587. !  */
  588. ! #define    HAS_MEMSET        /**/
  589. ! /* HAS_MKDIR
  590.    *    This symbol, if defined, indicates that the mkdir routine is available
  591.    *    to create directories.  Otherwise you should fork off a new process to
  592.    *    exec /bin/mkdir.
  593. ***************
  594. *** 231,255 ****
  595.    */
  596.   #define    HAS_MKDIR        /**/
  597.   
  598. ! /* HAS_NDBM:
  599.    *    This symbol, if defined, indicates that ndbm.h exists and should
  600.    *    be included.
  601.    */
  602. ! #define    HAS_NDBM        /**/
  603.   
  604. ! /* HAS_ODBM:
  605.    *    This symbol, if defined, indicates that dbm.h exists and should
  606.    *    be included.
  607.    */
  608. ! /*#define    HAS_ODBM        /**/
  609.   
  610. ! /* HAS_READDIR:
  611.    *    This symbol, if defined, indicates that the readdir routine is available
  612. !  *    from the C library to create directories.
  613.    */
  614.   #define    HAS_READDIR        /**/
  615.   
  616. ! /* HAS_RENAME:
  617.    *    This symbol, if defined, indicates that the rename routine is available
  618.    *    to rename files.  Otherwise you should do the unlink(), link(), unlink()
  619.    *    trick.
  620. --- 309,369 ----
  621.    */
  622.   #define    HAS_MKDIR        /**/
  623.   
  624. ! /* HAS_MSG
  625. !  *    This symbol, if defined, indicates that the entire msg*(2) library is
  626. !  *    supported.
  627. !  */
  628. ! /* #define    HAS_MSG        /**/
  629. ! /* HAS_MSGCTL
  630. !  *    This symbol, if defined, indicates that the msgctl() routine is
  631. !  *    available to control message passing.
  632. !  */
  633. ! /* #define    HAS_MSGCTL        /**/
  634. ! /* HAS_MSGGET
  635. !  *    This symbol, if defined, indicates that the msgget() routine is
  636. !  *    available to get messages.
  637. !  */
  638. ! /* #define    HAS_MSGGET        /**/
  639. ! /* HAS_MSGRCV
  640. !  *    This symbol, if defined, indicates that the msgrcv() routine is
  641. !  *    available to receive messages.
  642. !  */
  643. ! /* #define    HAS_MSGRCV        /**/
  644. ! /* HAS_MSGSND
  645. !  *    This symbol, if defined, indicates that the msgsnd() routine is
  646. !  *    available to send messages.
  647. !  */
  648. ! /* #define    HAS_MSGSND        /**/
  649. ! /* HAS_NDBM
  650.    *    This symbol, if defined, indicates that ndbm.h exists and should
  651.    *    be included.
  652.    */
  653. ! /* #define    HAS_NDBM        /**/
  654.   
  655. ! /* HAS_ODBM
  656.    *    This symbol, if defined, indicates that dbm.h exists and should
  657.    *    be included.
  658.    */
  659. ! /* #define    HAS_ODBM        /**/
  660.   
  661. ! /* HAS_OPEN3
  662. !  *    This manifest constant lets the C program know that the three
  663. !  *    argument form of open(2) is available.
  664. !  */
  665. ! #define    HAS_OPEN3        /**/
  666. ! /* HAS_READDIR
  667.    *    This symbol, if defined, indicates that the readdir routine is available
  668. !  *    from the C library to read directories.
  669.    */
  670.   #define    HAS_READDIR        /**/
  671.   
  672. ! /* HAS_RENAME
  673.    *    This symbol, if defined, indicates that the rename routine is available
  674.    *    to rename files.  Otherwise you should do the unlink(), link(), unlink()
  675.    *    trick.
  676. ***************
  677. *** 256,262 ****
  678.    */
  679.   #define    HAS_RENAME        /**/
  680.   
  681. ! /* HAS_RMDIR:
  682.    *    This symbol, if defined, indicates that the rmdir routine is available
  683.    *    to remove directories.  Otherwise you should fork off a new process to
  684.    *    exec /bin/rmdir.
  685. --- 370,382 ----
  686.    */
  687.   #define    HAS_RENAME        /**/
  688.   
  689. ! /* HAS_REWINDDIR
  690. !  *    This symbol, if defined, indicates that the rewindir routine is
  691. !  *    available to rewind directories.
  692. !  */
  693. ! #define    HAS_REWINDDIR        /**/
  694. ! /* HAS_RMDIR
  695.    *    This symbol, if defined, indicates that the rmdir routine is available
  696.    *    to remove directories.  Otherwise you should fork off a new process to
  697.    *    exec /bin/rmdir.
  698. ***************
  699. *** 263,347 ****
  700.    */
  701.   #define    HAS_RMDIR        /**/
  702.   
  703. ! /* HAS_SETEGID:
  704.    *    This symbol, if defined, indicates that the setegid routine is available
  705.    *    to change the effective gid of the current program.
  706.    */
  707. ! /*#define    HAS_SETEGID        /**/
  708.   
  709. ! /* HAS_SETEUID:
  710.    *    This symbol, if defined, indicates that the seteuid routine is available
  711.    *    to change the effective uid of the current program.
  712.    */
  713. ! /*#define    HAS_SETEUID        /**/
  714.   
  715. ! /* HAS_SETPGRP:
  716.    *    This symbol, if defined, indicates that the setpgrp() routine is
  717.    *    available to set the current process group.
  718.    */
  719. ! /*#define    HAS_SETPGRP        /**/
  720.   
  721. ! /* HAS_SETPRIORITY:
  722.    *    This symbol, if defined, indicates that the setpriority() routine is
  723.    *    available to set a process's priority.
  724.    */
  725. ! /*#define    HAS_SETPRIORITY        /**/
  726.   
  727. ! /* HAS_SETREGID:
  728. !  *    This symbol, if defined, indicates that the setregid routine is available
  729. !  *    to change the real and effective gid of the current program.
  730.    */
  731. ! /*#define    HAS_SETREGID        /**/
  732.   
  733. ! /* HAS_SETREUID:
  734. !  *    This symbol, if defined, indicates that the setreuid routine is available
  735. !  *    to change the real and effective uid of the current program.
  736.    */
  737. ! /*#define    HAS_SETREUID        /**/
  738.   
  739. ! /* HAS_SETRGID:
  740.    *    This symbol, if defined, indicates that the setrgid routine is available
  741.    *    to change the real gid of the current program.
  742.    */
  743. ! /*#define    HAS_SETRGID        /**/
  744.   
  745. ! /* HAS_SETRUID:
  746.    *    This symbol, if defined, indicates that the setruid routine is available
  747.    *    to change the real uid of the current program.
  748.    */
  749. ! /*#define    HAS_SETRUID        /**/
  750.   
  751. ! /* HAS_SOCKET:
  752. !  *      This symbol, if defined, indicates that the BSD socket interface is
  753. !  *      supported.
  754.    */
  755. ! /* HAS_SOCKETPAIR:
  756. !  *      This symbol, if defined, indicates that the BSD socketpair call is
  757. !  *      supported.
  758.    */
  759. ! /* OLDSOCKET:
  760. !  *      This symbol, if defined, indicates that the 4.1c BSD socket interface
  761. !  *      is supported instead of the 4.2/4.3 BSD socket interface.
  762.    */
  763. ! /*#undef HAS_SOCKET          /**/
  764.   
  765. ! /*#undef HAS_SOCKETPAIR      /**/
  766.   
  767. ! /*#undef        OLDSOCKET       /**/
  768.   
  769. ! /* STATBLOCKS:
  770.    *    This symbol is defined if this system has a stat structure declaring
  771.    *    st_blksize and st_blocks.
  772.    */
  773. ! /*#define    STATBLOCKS     /**/
  774.   
  775. ! /* STDSTDIO:
  776.    *    This symbol is defined if this system has a FILE structure declaring
  777.    *    _ptr and _cnt in stdio.h.
  778.    */
  779.   #define    STDSTDIO     /**/
  780.   
  781. ! /* STRUCTCOPY:
  782.    *    This symbol, if defined, indicates that this C compiler knows how
  783.    *    to copy structures.  If undefined, you'll need to use a block copy
  784.    *    routine of some sort instead.
  785. --- 383,557 ----
  786.    */
  787.   #define    HAS_RMDIR        /**/
  788.   
  789. ! /* HAS_SEEKDIR
  790. !  *    This symbol, if defined, indicates that the seekdir routine is
  791. !  *    available to seek into directories.
  792. !  */
  793. ! #define    HAS_SEEKDIR        /**/
  794. ! /* HAS_SELECT
  795. !  *    This symbol, if defined, indicates that the select() subroutine
  796. !  *    exists.
  797. !  */
  798. ! /* #define    HAS_SELECT    /**/
  799. ! /* HAS_SEM
  800. !  *    This symbol, if defined, indicates that the entire sem*(2) library is
  801. !  *    supported.
  802. !  */
  803. ! /* #define    HAS_SEM        /**/
  804. ! /* HAS_SEMCTL
  805. !  *    This symbol, if defined, indicates that the semctl() routine is
  806. !  *    available to control semaphores.
  807. !  */
  808. ! /* #define    HAS_SEMCTL        /**/
  809. ! /* HAS_SEMGET
  810. !  *    This symbol, if defined, indicates that the semget() routine is
  811. !  *    available to get semaphores ids.
  812. !  */
  813. ! /* #define    HAS_SEMGET        /**/
  814. ! /* HAS_SEMOP
  815. !  *    This symbol, if defined, indicates that the semop() routine is
  816. !  *    available to perform semaphore operations.
  817. !  */
  818. ! /* #define    HAS_SEMOP        /**/
  819. ! /* HAS_SETEGID
  820.    *    This symbol, if defined, indicates that the setegid routine is available
  821.    *    to change the effective gid of the current program.
  822.    */
  823. ! /* #define    HAS_SETEGID        /**/
  824.   
  825. ! /* HAS_SETEUID
  826.    *    This symbol, if defined, indicates that the seteuid routine is available
  827.    *    to change the effective uid of the current program.
  828.    */
  829. ! /* #define    HAS_SETEUID        /**/
  830.   
  831. ! /* HAS_SETPGRP
  832.    *    This symbol, if defined, indicates that the setpgrp() routine is
  833.    *    available to set the current process group.
  834.    */
  835. ! /* #define    HAS_SETPGRP        /**/
  836.   
  837. ! /* HAS_SETPGRP2
  838. !  *    This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
  839. !  *    routine is available to set the current process group.
  840. !  */
  841. ! /*#undef    HAS_SETPGRP2        /**/
  842. ! /* HAS_SETPRIORITY
  843.    *    This symbol, if defined, indicates that the setpriority() routine is
  844.    *    available to set a process's priority.
  845.    */
  846. ! #define    HAS_SETPRIORITY        /**/
  847.   
  848. ! /* HAS_SETREGID
  849. !  *    This symbol, if defined, indicates that the setregid routine is
  850. !  *    available to change the real and effective gid of the current program.
  851.    */
  852. ! /* HAS_SETRESGID
  853. !  *    This symbol, if defined, indicates that the setresgid routine is
  854. !  *    available to change the real, effective and saved gid of the current
  855. !  *    program.
  856. !  */
  857. ! /* #define    HAS_SETREGID        /**/
  858. ! /*#undef    HAS_SETRESGID        /**/
  859.   
  860. ! /* HAS_SETREUID
  861. !  *    This symbol, if defined, indicates that the setreuid routine is
  862. !  *    available to change the real and effective uid of the current program.
  863.    */
  864. ! /* HAS_SETRESUID
  865. !  *    This symbol, if defined, indicates that the setresuid routine is
  866. !  *    available to change the real, effective and saved uid of the current
  867. !  *    program.
  868. !  */
  869. ! /* #define    HAS_SETREUID        /**/
  870. ! /*#undef    HAS_SETRESUID        /**/
  871.   
  872. ! /* HAS_SETRGID
  873.    *    This symbol, if defined, indicates that the setrgid routine is available
  874.    *    to change the real gid of the current program.
  875.    */
  876. ! /* #define    HAS_SETRGID        /**/
  877.   
  878. ! /* HAS_SETRUID
  879.    *    This symbol, if defined, indicates that the setruid routine is available
  880.    *    to change the real uid of the current program.
  881.    */
  882. ! /* #define    HAS_SETRUID        /**/
  883.   
  884. ! /* HAS_SHM
  885. !  *    This symbol, if defined, indicates that the entire shm*(2) library is
  886. !  *    supported.
  887.    */
  888. ! /* #define    HAS_SHM        /**/
  889. ! /* HAS_SHMAT
  890. !  *    This symbol, if defined, indicates that the shmat() routine is
  891. !  *    available to attach a shared memory segment.
  892.    */
  893. ! /* VOID_SHMAT
  894. !  *    This symbol, if defined, indicates that the shmat() routine
  895. !  *    returns a pointer of type void*.
  896.    */
  897. ! /* #define    HAS_SHMAT        /**/
  898.   
  899. ! /*#undef    VOIDSHMAT        /**/
  900.   
  901. ! /* HAS_SHMCTL
  902. !  *    This symbol, if defined, indicates that the shmctl() routine is
  903. !  *    available to control a shared memory segment.
  904. !  */
  905. ! /* #define    HAS_SHMCTL        /**/
  906.   
  907. ! /* HAS_SHMDT
  908. !  *    This symbol, if defined, indicates that the shmdt() routine is
  909. !  *    available to detach a shared memory segment.
  910. !  */
  911. ! /* #define    HAS_SHMDT        /**/
  912. ! /* HAS_SHMGET
  913. !  *    This symbol, if defined, indicates that the shmget() routine is
  914. !  *    available to get a shared memory segment id.
  915. !  */
  916. ! /* #define    HAS_SHMGET        /**/
  917. ! /* HAS_SOCKET
  918. !  *    This symbol, if defined, indicates that the BSD socket interface is
  919. !  *    supported.
  920. !  */
  921. ! /* HAS_SOCKETPAIR
  922. !  *    This symbol, if defined, indicates that the BSD socketpair call is
  923. !  *    supported.
  924. !  */
  925. ! /* OLDSOCKET
  926. !  *    This symbol, if defined, indicates that the 4.1c BSD socket interface
  927. !  *    is supported instead of the 4.2/4.3 BSD socket interface.
  928. !  */
  929. ! /* #define    HAS_SOCKET        /**/
  930. ! /* #define    HAS_SOCKETPAIR    /**/
  931. ! /*#undef    OLDSOCKET    /**/
  932. ! /* STATBLOCKS
  933.    *    This symbol is defined if this system has a stat structure declaring
  934.    *    st_blksize and st_blocks.
  935.    */
  936. ! /* #define    STATBLOCKS     /**/
  937.   
  938. ! /* STDSTDIO
  939.    *    This symbol is defined if this system has a FILE structure declaring
  940.    *    _ptr and _cnt in stdio.h.
  941.    */
  942.   #define    STDSTDIO     /**/
  943.   
  944. ! /* STRUCTCOPY
  945.    *    This symbol, if defined, indicates that this C compiler knows how
  946.    *    to copy structures.  If undefined, you'll need to use a block copy
  947.    *    routine of some sort instead.
  948. ***************
  949. *** 348,520 ****
  950.    */
  951.   #define    STRUCTCOPY    /**/
  952.   
  953. ! /* HAS_SYMLINK:
  954.    *    This symbol, if defined, indicates that the symlink routine is available
  955.    *    to create symbolic links.
  956.    */
  957. ! /*#define    HAS_SYMLINK        /**/
  958.   
  959. ! /* HAS_SYSCALL:
  960.    *    This symbol, if defined, indicates that the syscall routine is available
  961.    *    to call arbitrary system calls.  If undefined, that's tough.
  962.    */
  963. ! /*#define    HAS_SYSCALL        /**/
  964.   
  965. ! /* s_tm:
  966. !  *    This symbol is defined if this system declares "struct tm" in
  967. !  *    in <sys/time.h> rather than <time.h>.  We can't just say
  968. !  *    -I/usr/include/sys because some systems have both time files, and
  969. !  *    the -I trick gets the wrong one.
  970.    */
  971. ! /* I_SYS_TIME:
  972. !  *    This symbol is defined if this system has the file <sys/time.h>.
  973. !  */
  974. ! /*
  975. !  * I_TIME:
  976. !  *    This symbol is defined if time this  system has the file <time.h>.
  977. !  */
  978. ! /*#undef    s_tm     /**/
  979. ! /*#define    I_SYS_TIME     /**/
  980. ! #define I_TIME
  981.   
  982. ! /* VARARGS:
  983. !  *    This symbol, if defined, indicates to the C program that it should
  984. !  *    include varargs.h.
  985.    */
  986. ! #define    VARARGS        /**/
  987.   
  988. ! /* vfork:
  989. !  *    This symbol, if defined, remaps the vfork routine to fork if the
  990. !  *    vfork() routine isn't supported here.
  991.    */
  992. ! /*#undef    vfork fork    /**/
  993.   
  994. ! /* VOIDSIG:
  995.    *    This symbol is defined if this system declares "void (*signal())()" in
  996.    *    signal.h.  The old way was to declare it as "int (*signal())()".  It
  997.    *    is up to the package author to declare things correctly based on the
  998.    *    symbol.
  999.    */
  1000.   #define    VOIDSIG     /**/
  1001.   
  1002. ! /* HAS_VPRINTF:
  1003.    *    This symbol, if defined, indicates that the vprintf routine is available
  1004.    *    to printf with a pointer to an argument list.  If unavailable, you
  1005.    *    may need to write your own, probably in terms of _doprnt().
  1006.    */
  1007. ! /* CHARVSPRINTF:
  1008.    *    This symbol is defined if this system has vsprintf() returning type
  1009.    *    (char*).  The trend seems to be to declare it as "int vsprintf()".  It
  1010.    *    is up to the package author to declare vsprintf correctly based on the
  1011.    *    symbol.
  1012.    */
  1013. ! #define    HAS_VPRINTF        /**/
  1014. ! /*#undef    CHARVSPRINTF     /**/
  1015.   
  1016. ! /* GIDTYPE:
  1017.    *    This symbol has a value like gid_t, int, ushort, or whatever type is
  1018.    *    used to declare group ids in the kernel.
  1019.    */
  1020. - /* TODO */
  1021.   #define GIDTYPE int        /**/
  1022.   
  1023. ! /* I_DIRENT:
  1024. !  *    This symbol, if defined, indicates to the C program that it should
  1025. !  *    include dirent.h.
  1026.    */
  1027. ! /* DIRNAMLEN:
  1028. !  *    This symbol, if defined, indicates to the C program that the length
  1029. !  *    of directory entry names is provided by a d_namlen field.  Otherwise
  1030. !  *    you need to do strlen() on the d_name field.
  1031.    */
  1032. ! /*#undef    I_DIRENT        /**/
  1033. ! #define    DIRNAMLEN        /**/
  1034.   
  1035. ! /* I_FCNTL:
  1036. !  *    This symbol, if defined, indicates to the C program that it should
  1037. !  *    include fcntl.h.
  1038.    */
  1039. ! /*#define    I_FCNTL        /**/
  1040.   
  1041. ! /* I_GRP:
  1042.    *    This symbol, if defined, indicates to the C program that it should
  1043.    *    include grp.h.
  1044.    */
  1045. ! /*#define    I_GRP        /**/
  1046.   
  1047. ! /* I_PWD:
  1048.    *    This symbol, if defined, indicates to the C program that it should
  1049.    *    include pwd.h.
  1050.    */
  1051. ! /* PWQUOTA:
  1052.    *    This symbol, if defined, indicates to the C program that struct passwd
  1053.    *    contains pw_quota.
  1054.    */
  1055. ! /* PWAGE:
  1056.    *    This symbol, if defined, indicates to the C program that struct passwd
  1057.    *    contains pw_age.
  1058.    */
  1059. ! /*#define    I_PWD        /**/
  1060. ! /*#define    PWQUOTA        /**/
  1061. ! /*#undef    PWAGE        /**/
  1062.   
  1063. ! /* I_SYS_DIR:
  1064. !  *    This symbol, if defined, indicates to the C program that it should
  1065. !  *    include sys/dir.h.
  1066.    */
  1067. ! #define    I_SYS_DIR        /**/
  1068.   
  1069. ! /* I_SYSIOCTL:
  1070.    *    This symbol, if defined, indicates that sys/ioctl.h exists and should
  1071.    *    be included.
  1072.    */
  1073. ! /*#define    I_SYSIOCTL        /**/
  1074.   
  1075. ! /* I_VARARGS:
  1076.    *    This symbol, if defined, indicates to the C program that it should
  1077.    *    include varargs.h.
  1078.    */
  1079.   #define    I_VARARGS        /**/
  1080.   
  1081. ! /* INTSIZE:
  1082.    *    This symbol contains the size of an int, so that the C preprocessor
  1083.    *    can make decisions based on it.
  1084.    */
  1085.   #define INTSIZE 2        /**/
  1086.   
  1087. ! /* RANDBITS:
  1088.    *    This symbol contains the number of bits of random number the rand()
  1089.    *    function produces.  Usual values are 15, 16, and 31.
  1090.    */
  1091. ! #define RANDBITS 31        /**/
  1092.   
  1093. ! /* SIG_NAME:
  1094.    *    This symbol contains an list of signal names in order.
  1095.    */
  1096. ! #ifdef OS2
  1097. ! #define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\
  1098. !       /*      0      1     2     3      4      5     6     7    8 */\
  1099.      "KILL","BUS","SEGV","SYS","PIPE","UALRM","TERM","ALRM","USR2","CLD",\
  1100.     /* 9     10     11    12    13     14     15     16     17    18 */\
  1101.      "PWR","USR3","BREAK","ABRT"
  1102.     /*19     20     21    22   */
  1103. - #else
  1104. - #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"        /**/
  1105. - #endif /* OS2 */
  1106.   
  1107. ! /* STDCHAR:
  1108.    *    This symbol is defined to be the type of char used in stdio.h.
  1109.    *    It has the values "unsigned char" or "char".
  1110.    */
  1111.   #define STDCHAR char    /**/
  1112.   
  1113. ! /* UIDTYPE:
  1114.    *    This symbol has a value like uid_t, int, ushort, or whatever type is
  1115.    *    used to declare user ids in the kernel.
  1116.    */
  1117.   #define UIDTYPE int        /**/
  1118.   
  1119. ! /* VOIDFLAGS:
  1120.    *    This symbol indicates how much support of the void type is given by this
  1121.    *    compiler.  What various bits mean:
  1122.    *
  1123. --- 558,852 ----
  1124.    */
  1125.   #define    STRUCTCOPY    /**/
  1126.   
  1127. ! /* HAS_STRERROR
  1128. !  *    This symbol, if defined, indicates that the strerror() routine is
  1129. !  *    available to translate error numbers to strings.
  1130. !  */
  1131. ! /*#undef    HAS_STRERROR        /**/
  1132. ! /* HAS_SYMLINK
  1133.    *    This symbol, if defined, indicates that the symlink routine is available
  1134.    *    to create symbolic links.
  1135.    */
  1136. ! /* #define    HAS_SYMLINK        /**/
  1137.   
  1138. ! /* HAS_SYSCALL
  1139.    *    This symbol, if defined, indicates that the syscall routine is available
  1140.    *    to call arbitrary system calls.  If undefined, that's tough.
  1141.    */
  1142. ! /* #define    HAS_SYSCALL        /**/
  1143.   
  1144. ! /* HAS_TELLDIR
  1145. !  *    This symbol, if defined, indicates that the telldir routine is
  1146. !  *    available to tell your location in directories.
  1147.    */
  1148. ! #define    HAS_TELLDIR        /**/
  1149.   
  1150. ! /* HAS_TRUNCATE
  1151. !  *    This symbol, if defined, indicates that the truncate routine is
  1152. !  *    available to truncate files.
  1153.    */
  1154. ! /* #define    HAS_TRUNCATE        /**/
  1155.   
  1156. ! /* HAS_VFORK
  1157. !  *    This symbol, if defined, indicates that vfork() exists.
  1158.    */
  1159. ! /* #define    HAS_VFORK    /**/
  1160.   
  1161. ! /* VOIDSIG
  1162.    *    This symbol is defined if this system declares "void (*signal())()" in
  1163.    *    signal.h.  The old way was to declare it as "int (*signal())()".  It
  1164.    *    is up to the package author to declare things correctly based on the
  1165.    *    symbol.
  1166.    */
  1167. + /* TO_SIGNAL
  1168. +  *    This symbol's value is either "void" or "int", corresponding to the
  1169. +  *    appropriate return "type" of a signal handler.  Thus, one can declare
  1170. +  *    a signal handler using "TO_SIGNAL (*handler())()", and define the
  1171. +  *    handler using "TO_SIGNAL handler(sig)".
  1172. +  */
  1173.   #define    VOIDSIG     /**/
  1174. + #define    TO_SIGNAL    void     /**/
  1175.   
  1176. ! /* HASVOLATILE
  1177. !  *    This symbol, if defined, indicates that this C compiler knows about
  1178. !  *    the volatile declaration.
  1179. !  */
  1180. ! #define    HASVOLATILE    /**/
  1181. ! /* HAS_VPRINTF
  1182.    *    This symbol, if defined, indicates that the vprintf routine is available
  1183.    *    to printf with a pointer to an argument list.  If unavailable, you
  1184.    *    may need to write your own, probably in terms of _doprnt().
  1185.    */
  1186. ! /* CHARVSPRINTF
  1187.    *    This symbol is defined if this system has vsprintf() returning type
  1188.    *    (char*).  The trend seems to be to declare it as "int vsprintf()".  It
  1189.    *    is up to the package author to declare vsprintf correctly based on the
  1190.    *    symbol.
  1191.    */
  1192. ! #define    HAS_VPRINTF    /**/
  1193. ! /* #define    CHARVSPRINTF     /**/
  1194.   
  1195. ! /* HAS_WAIT4
  1196. !  *    This symbol, if defined, indicates that wait4() exists.
  1197. !  */
  1198. ! /* #define    HAS_WAIT4    /**/
  1199. ! /* HAS_WAITPID
  1200. !  *    This symbol, if defined, indicates that waitpid() exists.
  1201. !  */
  1202. ! #define    HAS_WAITPID    /**/
  1203. ! /* GIDTYPE
  1204.    *    This symbol has a value like gid_t, int, ushort, or whatever type is
  1205.    *    used to declare group ids in the kernel.
  1206.    */
  1207.   #define GIDTYPE int        /**/
  1208.   
  1209. ! /* GROUPSTYPE
  1210. !  *    This symbol has a value like gid_t, int, ushort, or whatever type is
  1211. !  *    used in the return value of getgroups().
  1212.    */
  1213. ! #define GROUPSTYPE int        /**/
  1214. ! /* I_FCNTL
  1215. !  *    This manifest constant tells the C program to include <fcntl.h>.
  1216.    */
  1217. ! /*#undef    I_FCNTL    /**/
  1218.   
  1219. ! /* I_GDBM
  1220. !  *    This symbol, if defined, indicates that gdbm.h exists and should
  1221. !  *    be included.
  1222.    */
  1223. ! #define    I_GDBM        /**/
  1224.   
  1225. ! /* I_GRP
  1226.    *    This symbol, if defined, indicates to the C program that it should
  1227.    *    include grp.h.
  1228.    */
  1229. ! /* #define    I_GRP        /**/
  1230.   
  1231. ! /* I_NETINET_IN
  1232.    *    This symbol, if defined, indicates to the C program that it should
  1233. +  *    include netinet/in.h.
  1234. +  */
  1235. + /* I_SYS_IN
  1236. +  *    This symbol, if defined, indicates to the C program that it should
  1237. +  *    include sys/in.h.
  1238. +  */
  1239. + /* #define    I_NETINET_IN        /**/
  1240. + /*#undef    I_SYS_IN        /**/
  1241. + /* I_PWD
  1242. +  *    This symbol, if defined, indicates to the C program that it should
  1243.    *    include pwd.h.
  1244.    */
  1245. ! /* PWQUOTA
  1246.    *    This symbol, if defined, indicates to the C program that struct passwd
  1247.    *    contains pw_quota.
  1248.    */
  1249. ! /* PWAGE
  1250.    *    This symbol, if defined, indicates to the C program that struct passwd
  1251.    *    contains pw_age.
  1252.    */
  1253. ! /* PWCHANGE
  1254. !  *    This symbol, if defined, indicates to the C program that struct passwd
  1255. !  *    contains pw_change.
  1256. !  */
  1257. ! /* PWCLASS
  1258. !  *    This symbol, if defined, indicates to the C program that struct passwd
  1259. !  *    contains pw_class.
  1260. !  */
  1261. ! /* PWEXPIRE
  1262. !  *    This symbol, if defined, indicates to the C program that struct passwd
  1263. !  *    contains pw_expire.
  1264. !  */
  1265. ! /* PWCOMMENT
  1266. !  *    This symbol, if defined, indicates to the C program that struct passwd
  1267. !  *    contains pw_comment.
  1268. !  */
  1269. ! /* #define    I_PWD        /**/
  1270. ! /*#undef    PWQUOTA        /**/
  1271. ! /* #define    PWAGE        /**/
  1272. ! /*#undef    PWCHANGE    /**/
  1273. ! /*#undef    PWCLASS        /**/
  1274. ! /*#undef    PWEXPIRE    /**/
  1275. ! /* #define    PWCOMMENT    /**/
  1276.   
  1277. ! /* I_SYS_FILE
  1278. !  *    This manifest constant tells the C program to include <sys/file.h>.
  1279.    */
  1280. ! /* #define    I_SYS_FILE    /**/
  1281.   
  1282. ! /* I_SYSIOCTL
  1283.    *    This symbol, if defined, indicates that sys/ioctl.h exists and should
  1284.    *    be included.
  1285.    */
  1286. ! /* #define    I_SYSIOCTL        /**/
  1287.   
  1288. ! /* I_TIME
  1289. !  *    This symbol is defined if the program should include <time.h>.
  1290. !  */
  1291. ! /* I_SYS_TIME
  1292. !  *    This symbol is defined if the program should include <sys/time.h>.
  1293. !  */
  1294. ! /* SYSTIMEKERNEL
  1295. !  *    This symbol is defined if the program should include <sys/time.h>
  1296. !  *    with KERNEL defined.
  1297. !  */
  1298. ! /* I_SYS_SELECT
  1299. !  *    This symbol is defined if the program should include <sys/select.h>.
  1300. !  */
  1301. ! #define    I_TIME         /**/
  1302. ! /* #define    I_SYS_TIME     /**/
  1303. ! /*#undef    SYSTIMEKERNEL     /**/
  1304. ! /*#undef    I_SYS_SELECT     /**/
  1305. ! /* I_UTIME
  1306.    *    This symbol, if defined, indicates to the C program that it should
  1307. +  *    include utime.h.
  1308. +  */
  1309. + /* #define    I_UTIME        /**/
  1310. + /* I_VARARGS
  1311. +  *    This symbol, if defined, indicates to the C program that it should
  1312.    *    include varargs.h.
  1313.    */
  1314.   #define    I_VARARGS        /**/
  1315.   
  1316. ! /* I_VFORK
  1317. !  *    This symbol, if defined, indicates to the C program that it should
  1318. !  *    include vfork.h.
  1319. !  */
  1320. ! /* #define    I_VFORK        /**/
  1321. ! /* INTSIZE
  1322.    *    This symbol contains the size of an int, so that the C preprocessor
  1323.    *    can make decisions based on it.
  1324.    */
  1325.   #define INTSIZE 2        /**/
  1326.   
  1327. ! /* I_DIRENT
  1328. !  *    This symbol, if defined, indicates that the program should use the
  1329. !  *    P1003-style directory routines, and include <dirent.h>.
  1330. !  */
  1331. ! /* I_SYS_DIR
  1332. !  *    This symbol, if defined, indicates that the program should use the
  1333. !  *    directory functions by including <sys/dir.h>.
  1334. !  */
  1335. ! /* I_NDIR
  1336. !  *    This symbol, if defined, indicates that the program should include the
  1337. !  *    system's version of ndir.h, rather than the one with this package.
  1338. !  */
  1339. ! /* I_SYS_NDIR
  1340. !  *    This symbol, if defined, indicates that the program should include the
  1341. !  *    system's version of sys/ndir.h, rather than the one with this package.
  1342. !  */
  1343. ! /* I_MY_DIR
  1344. !  *    This symbol, if defined, indicates that the program should compile
  1345. !  *    the ndir.c code provided with the package.
  1346. !  */
  1347. ! /* DIRNAMLEN
  1348. !  *    This symbol, if defined, indicates to the C program that the length
  1349. !  *    of directory entry names is provided by a d_namlen field.  Otherwise
  1350. !  *    you need to do strlen() on the d_name field.
  1351. !  */
  1352. ! /* #define    I_DIRENT    /**/
  1353. ! #define    I_SYS_DIR    /**/
  1354. ! /*#undef    I_NDIR        /**/
  1355. ! /*#undef    I_SYS_NDIR    /**/
  1356. ! /*#undef    I_MY_DIR    /**/
  1357. ! #define    DIRNAMLEN    /**/
  1358. ! /* MYMALLOC
  1359. !  *    This symbol, if defined, indicates that we're using our own malloc.
  1360. !  */
  1361. ! /* MALLOCPTRTYPE
  1362. !  *    This symbol defines the kind of ptr returned by malloc and realloc.
  1363. !  */
  1364. ! #define MYMALLOC            /**/
  1365. ! #define MALLOCPTRTYPE void         /**/
  1366. ! /* RANDBITS
  1367.    *    This symbol contains the number of bits of random number the rand()
  1368.    *    function produces.  Usual values are 15, 16, and 31.
  1369.    */
  1370. ! #define RANDBITS 15        /**/
  1371.   
  1372. ! /* SCRIPTDIR
  1373. !  *    This symbol holds the name of the directory in which the user wants
  1374. !  *    to keep publicly executable scripts for the package in question.  It
  1375. !  *    is often a directory that is mounted across diverse architectures.
  1376. !  */
  1377. ! #define SCRIPTDIR "c:/bin/perl"             /**/
  1378. ! /* SIG_NAME
  1379.    *    This symbol contains an list of signal names in order.
  1380.    */
  1381. ! #define SIG_NAME \
  1382. !    "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\
  1383. !   /* 0      1     2     3      4      5     6     7    8 */\
  1384.      "KILL","BUS","SEGV","SYS","PIPE","UALRM","TERM","ALRM","USR2","CLD",\
  1385.     /* 9     10     11    12    13     14     15     16     17    18 */\
  1386.      "PWR","USR3","BREAK","ABRT"
  1387.     /*19     20     21    22   */
  1388.   
  1389. ! /* STDCHAR
  1390.    *    This symbol is defined to be the type of char used in stdio.h.
  1391.    *    It has the values "unsigned char" or "char".
  1392.    */
  1393.   #define STDCHAR char    /**/
  1394.   
  1395. ! /* UIDTYPE
  1396.    *    This symbol has a value like uid_t, int, ushort, or whatever type is
  1397.    *    used to declare user ids in the kernel.
  1398.    */
  1399.   #define UIDTYPE int        /**/
  1400.   
  1401. ! /* VOIDHAVE
  1402.    *    This symbol indicates how much support of the void type is given by this
  1403.    *    compiler.  What various bits mean:
  1404.    *
  1405. ***************
  1406. *** 523,560 ****
  1407.    *        4 = supports comparisons between pointers to void functions and
  1408.    *            addresses of void functions
  1409.    *
  1410. !  *    The package designer should define VOIDUSED to indicate the requirements
  1411. !  *    of the package.  This can be done either by #defining VOIDUSED before
  1412. !  *    including config.h, or by defining defvoidused in Myinit.U.  If the
  1413. !  *    latter approach is taken, only those flags will be tested.  If the
  1414. !  *    level of void support necessary is not present, defines void to int.
  1415.    */
  1416. ! #ifndef VOIDUSED
  1417. ! #define VOIDUSED 7
  1418.   #endif
  1419. ! #define VOIDFLAGS 7
  1420. ! #if (VOIDFLAGS & VOIDUSED) != VOIDUSED
  1421.   #define void int        /* is void to be avoided? */
  1422.   #define M_VOID        /* Xenix strikes again */
  1423.   #endif
  1424.   
  1425. ! /* PRIVLIB:
  1426.    *    This symbol contains the name of the private library for this package.
  1427.    *    The library is private in the sense that it needn't be in anyone's
  1428.    *    execution path, but it should be accessible by the world.  The program
  1429. !  *    should be prepared to do ^ expansion.
  1430.    */
  1431.   #define PRIVLIB "c:/bin/perl"        /**/
  1432.   
  1433.   /*
  1434. -  * BUGGY_MSC:
  1435. -  *    This symbol is defined if you are the unfortunate owner of a buggy
  1436. -  *    Microsoft C compiler and want to use intrinsic functions.  Versions
  1437. -  *    up to 5.1 are known conform to this definition.
  1438. -  */
  1439. - /*#define BUGGY_MSC            /**/
  1440. - /*
  1441.    * BINARY:
  1442.    *    This symbol is defined if you run under an operating system that
  1443.    *    distinguishes between binary and text files.  If so the function
  1444. --- 855,905 ----
  1445.    *        4 = supports comparisons between pointers to void functions and
  1446.    *            addresses of void functions
  1447.    *
  1448. !  *    The package designer should define VOIDWANT to indicate the requirements
  1449. !  *    of the package.  This can be done either by #defining VOIDWANT before
  1450. !  *    including config.h, or by defining voidwant in Myinit.U.  If the level
  1451. !  *    of void support necessary is not present, config.h defines void to "int",
  1452. !  *    VOID to the empty string, and VOIDP to "char *".
  1453.    */
  1454. ! /* void
  1455. !  *    This symbol is used for void casts.  On implementations which support
  1456. !  *    void appropriately, its value is "void".  Otherwise, its value maps
  1457. !  *    to "int".
  1458. !  */
  1459. ! /* VOID
  1460. !  *    This symbol's value is "void" if the implementation supports void
  1461. !  *    appropriately.  Otherwise, its value is the empty string.  The primary
  1462. !  *    use of this symbol is in specifying void parameter lists for function
  1463. !  *    prototypes.
  1464. !  */
  1465. ! /* VOIDP
  1466. !  *    This symbol is used for casting generic pointers.  On implementations
  1467. !  *    which support void appropriately, its value is "void *".  Otherwise,
  1468. !  *    its value is "char *".
  1469. !  */
  1470. ! #ifndef VOIDWANT
  1471. ! #define VOIDWANT 7
  1472.   #endif
  1473. ! #define VOIDHAVE 7
  1474. ! #if (VOIDHAVE & VOIDWANT) != VOIDWANT
  1475.   #define void int        /* is void to be avoided? */
  1476. + #define VOID
  1477. + #define VOIDP (char *)
  1478.   #define M_VOID        /* Xenix strikes again */
  1479. + #else
  1480. + #define VOID void
  1481. + #define VOIDP (void *)
  1482.   #endif
  1483.   
  1484. ! /* PRIVLIB
  1485.    *    This symbol contains the name of the private library for this package.
  1486.    *    The library is private in the sense that it needn't be in anyone's
  1487.    *    execution path, but it should be accessible by the world.  The program
  1488. !  *    should be prepared to do ~ expansion.
  1489.    */
  1490.   #define PRIVLIB "c:/bin/perl"        /**/
  1491.   
  1492.   /*
  1493.    * BINARY:
  1494.    *    This symbol is defined if you run under an operating system that
  1495.    *    distinguishes between binary and text files.  If so the function
  1496. ***************
  1497. *** 562,567 ****
  1498.    */
  1499.   #define BINARY
  1500.   
  1501. ! #define S_ISUID 0
  1502. ! #define S_ISGID 0
  1503. ! #define CASTNEGFLOAT
  1504. --- 907,910 ----
  1505.    */
  1506.   #define BINARY
  1507.   
  1508. ! #endif
  1509.  
  1510. Index: atarist/echo.c
  1511. *** atarist/echo.c.old    Mon Jun  8 17:35:11 1992
  1512. --- atarist/echo.c    Mon Jun  8 17:35:11 1992
  1513. ***************
  1514. *** 0 ****
  1515. --- 1,98 ----
  1516. + /*
  1517. +  * echo args, globbing is necessary.
  1518. +  * usage:
  1519. +  *    echo [-n] [args ...]
  1520. +  * \n \r \b \c \v \\ \f \t \NNN escapes supported
  1521. +  * -n and \c mean dont echo the final newline.
  1522. +  *
  1523. +  * ++jrb  bammi@cadence.com
  1524. +  */
  1525. + #include <stdio.h>
  1526. + #if __STDC__
  1527. + # include <compiler.h>
  1528. + #else
  1529. + # define __PROTO(X) ()
  1530. + #endif
  1531. + char    **glob __PROTO((char *patt, int decend_dir));
  1532. + int    contains_wild __PROTO((char *patt));
  1533. + void    free_all __PROTO((void));
  1534. + int final_newline = 1; /* turned off by -n or \c */
  1535. + int main(argc, argv)
  1536. + int argc;
  1537. + char **argv;
  1538. + {
  1539. +     --argc; ++argv;
  1540. +     if((*argv)[0] == '-')
  1541. +     {
  1542. +     if ((*argv)[1] == 'n')
  1543. +         final_newline = 0;
  1544. +     else
  1545. +     {
  1546. +         fputs("usage: echo [-n] [arguement ... ]\n", stderr);
  1547. +         return 1;
  1548. +     }
  1549. +     --argc; ++argv;
  1550. +     }
  1551. +     while(argc--)
  1552. +     {
  1553. +     char *word = *argv;
  1554. +     char **list;
  1555. +     if(contains_wild(word) && (list = glob(word, 0)))
  1556. +     {
  1557. +         while(*list)
  1558. +         {
  1559. +         fputs(*list, stdout);
  1560. +             if(*++list) putchar(' ');
  1561. +         }
  1562. +         free_all();
  1563. +     }
  1564. +     else
  1565. +     {
  1566. +         char c;
  1567. +         for(c = *word; c; c = (*word)? *++word : 0)
  1568. +         {
  1569. +         if(c != '\\')
  1570. +             putchar(c);
  1571. +         else
  1572. +         {
  1573. +             switch(*++word)
  1574. +             {
  1575. +             case 'b':  putchar('\b'); break;
  1576. +             case 'f':  putchar('\f'); break;
  1577. +             case 'n':  putchar('\n'); break;
  1578. +             case 'r':  putchar('\r'); break;
  1579. +                 case 't':  putchar('\t'); break;
  1580. +             case 'v':  putchar('\v'); break;
  1581. +                 case '\\': putchar('\\'); break;
  1582. +             case 'c':  final_newline = 0; break;
  1583. +             default:   putchar(*word); /* ?? */
  1584. +             case '0':
  1585. +             {
  1586. +                 int n = 0;
  1587. +                 for(c = *++word; (c >= '0') && (c <= '7'); c = *++word)
  1588. +                 n = (n << 3) + (c - '0');
  1589. +                 putchar(n);
  1590. +             }
  1591. +             }
  1592. +         }
  1593. +         }
  1594. +     }
  1595. +     if(*++argv) putchar(' ');
  1596. +     }
  1597. +     if(final_newline) putchar('\n');
  1598. +     return 0;
  1599. + }
  1600. +                   
  1601. +     
  1602. +     
  1603. +     
  1604. +     
  1605.  
  1606. *** End of Patch 24 ***
  1607. exit 0 # Just in case...
  1608.