home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume30 / perl / patch23 < prev    next >
Encoding:
Text File  |  1992-06-11  |  49.3 KB  |  1,677 lines

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