home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / comp / lang / perl / 7981 < prev    next >
Encoding:
Text File  |  1993-01-25  |  49.9 KB  |  2,003 lines

  1. Newsgroups: comp.lang.perl
  2. Path: sparky!uunet!walter!dino!dana
  3. From: dana@dino.bellcore.com (Dana Chee)
  4. Subject: Re: Help: perl on Solaris 2.1, how ?
  5. Message-ID: <1993Jan25.172038.9912@walter.bellcore.com>
  6. Sender: news@walter.bellcore.com
  7. Nntp-Posting-Host: dino.bellcore.com
  8. Reply-To: dana@thumper.bellcore.com
  9. Organization: Packet Communications Research Group (Bellcore)
  10. References:  <C198Hr.Atv@micromuse.co.uk>
  11. Date: Mon, 25 Jan 93 17:20:38 GMT
  12. Lines: 1989
  13.  
  14. In article <C198Hr.Atv@micromuse.co.uk>, peter@micromuse.co.uk (Peter Galbavy) writes:
  15. |> 
  16. |> I remember reading about problems with perl on Solaris 2.1, but at the time
  17. |> I didn't think I would be using 2.1... sigh. I am now.
  18. |> 
  19. |> Can anyone please mail me the solution to getting it going. Thanks.
  20. |> 
  21. |> PS. I tried and get the core dumps on make test.
  22. |> 
  23. |> ---
  24. |> Peter Galbavy
  25. |> Tech Support, Micromuse Ltd
  26. |> Phone: +44 71 352 7774        E-Mail: P.Galbavy@micromuse.co.uk
  27.  
  28. With gcc 2.3.2 or 2.3.3.  I had to play with Configure to get this to
  29. turn out almost right, and I had to add stuff to perl.h to handle the
  30. move of dbm.h.  Below are my hints file, my perl.h and my config.h
  31.  
  32. ==================== solaris_gnu_2.x.sh
  33. d_ndbm='undef'
  34. d_odbm='define'
  35. libpth='/opt/cygnus/lib /usr/ccs/lib /lib /usr/lib /usr/local/lib'
  36. libswanted=`echo $libswanted | sed -e 's/ dbm PW malloc / /' -e 's/ ucb//'`
  37. inclwanted=`echo $inclwanted | sed -e 's% /usr/ucbinclude% %'`
  38. ==================== perl.h
  39. /* $RCSfile: perl.h,v $$Revision: 4.0.1.6 $$Date: 92/06/08 14:55:10 $
  40.  *
  41.  *    Copyright (c) 1991, Larry Wall
  42.  *
  43.  *    You may distribute under the terms of either the GNU General Public
  44.  *    License or the Artistic License, as specified in the README file.
  45.  *
  46.  * $Log:    perl.h,v $
  47.  * Revision 4.0.1.6  92/06/08  14:55:10  lwall
  48.  * patch20: added Atari ST portability
  49.  * patch20: bcopy() and memcpy() now tested for overlap safety
  50.  * patch20: Perl now distinguishes overlapped copies from non-overlapped
  51.  * patch20: removed implicit int declarations on functions
  52.  * 
  53.  * Revision 4.0.1.5  91/11/11  16:41:07  lwall
  54.  * patch19: uts wrongly defines S_ISDIR() et al
  55.  * patch19: too many preprocessors can't expand a macro right in #if
  56.  * patch19: added little-endian pack/unpack options
  57.  * 
  58.  * Revision 4.0.1.4  91/11/05  18:06:10  lwall
  59.  * patch11: various portability fixes
  60.  * patch11: added support for dbz
  61.  * patch11: added some support for 64-bit integers
  62.  * patch11: hex() didn't understand leading 0x
  63.  * 
  64.  * Revision 4.0.1.3  91/06/10  01:25:10  lwall
  65.  * patch10: certain pattern optimizations were botched
  66.  * 
  67.  * Revision 4.0.1.2  91/06/07  11:28:33  lwall
  68.  * patch4: new copyright notice
  69.  * patch4: made some allowances for "semi-standard" C
  70.  * patch4: many, many itty-bitty portability fixes
  71.  * 
  72.  * Revision 4.0.1.1  91/04/11  17:49:51  lwall
  73.  * patch1: hopefully straightened out some of the Xenix mess
  74.  * 
  75.  * Revision 4.0  91/03/20  01:37:56  lwall
  76.  * 4.0 baseline.
  77.  * 
  78.  */
  79.  
  80. #define VOIDWANT 1
  81. #include "config.h"
  82.  
  83. #ifdef MYMALLOC
  84. #   ifdef HIDEMYMALLOC
  85. #    define malloc Mymalloc
  86. #    define realloc Myremalloc
  87. #    define free Myfree
  88. #   endif
  89. #   define safemalloc malloc
  90. #   define saferealloc realloc
  91. #   define safefree free
  92. #endif
  93.  
  94. /* work around some libPW problems */
  95. #define fatal Myfatal
  96. #ifdef DOINIT
  97. char Error[1];
  98. #endif
  99.  
  100. /* define this once if either system, instead of cluttering up the src */
  101. #if defined(MSDOS) || defined(atarist)
  102. #define DOSISH 1
  103. #endif
  104.  
  105. #ifdef DOSISH
  106. /* This stuff now in the MS-DOS config.h file. */
  107. #else /* !MSDOS */
  108.  
  109. /*
  110.  * The following symbols are defined if your operating system supports
  111.  * functions by that name.  All Unixes I know of support them, thus they
  112.  * are not checked by the configuration script, but are directly defined
  113.  * here.
  114.  */
  115. #define HAS_ALARM
  116. #define HAS_CHOWN
  117. #define HAS_CHROOT
  118. #define HAS_FORK
  119. #define HAS_GETLOGIN
  120. #define HAS_GETPPID
  121. #define HAS_KILL
  122. #define HAS_LINK
  123. #define HAS_PIPE
  124. #define HAS_WAIT
  125. #define HAS_UMASK
  126. /*
  127.  * The following symbols are defined if your operating system supports
  128.  * password and group functions in general.  All Unix systems do.
  129.  */
  130. #define HAS_GROUP
  131. #define HAS_PASSWD
  132.  
  133. #endif /* !MSDOS */
  134.  
  135. #if defined(__STDC__) || defined(_AIX) || defined(__stdc__)
  136. # define STANDARD_C 1
  137. #endif
  138.  
  139. #if defined(HASVOLATILE) || defined(STANDARD_C)
  140. #define VOLATILE volatile
  141. #else
  142. #define VOLATILE
  143. #endif
  144.  
  145. #ifdef IAMSUID
  146. #   ifndef TAINT
  147. #    define TAINT
  148. #   endif
  149. #endif
  150.  
  151. #ifndef HAS_VFORK
  152. #   define vfork fork
  153. #endif
  154.  
  155. #ifdef HAS_GETPGRP2
  156. #   ifndef HAS_GETPGRP
  157. #    define HAS_GETPGRP
  158. #   endif
  159. #   define getpgrp getpgrp2
  160. #endif
  161.  
  162. #ifdef HAS_SETPGRP2
  163. #   ifndef HAS_SETPGRP
  164. #    define HAS_SETPGRP
  165. #   endif
  166. #   define setpgrp setpgrp2
  167. #endif
  168.  
  169. #include <stdio.h>
  170. #include <ctype.h>
  171. #include <setjmp.h>
  172. #ifndef MSDOS
  173. #ifdef PARAM_NEEDS_TYPES
  174. #include <sys/types.h>
  175. #endif
  176. #include <sys/param.h>
  177. #endif
  178. #ifdef STANDARD_C
  179. /* Use all the "standard" definitions */
  180. #include <stdlib.h>
  181. #include <string.h>
  182. #define MEM_SIZE size_t
  183. #else
  184. typedef unsigned int MEM_SIZE;
  185. #endif /* STANDARD_C */
  186.  
  187. #if defined(HAS_MEMCMP) && defined(mips) && defined(ultrix)
  188. #undef HAS_MEMCMP
  189. #endif
  190.  
  191. #ifdef HAS_MEMCPY
  192. #  ifndef STANDARD_C
  193. #    ifndef memcpy
  194.     extern void * memcpy();
  195. #    endif
  196. #  endif
  197. #else
  198. #   ifndef memcpy
  199. #    ifdef HAS_BCOPY
  200. #        define memcpy(d,s,l) bcopy(s,d,l)
  201. #    else
  202. #        define memcpy(d,s,l) my_bcopy(s,d,l)
  203. #    endif
  204. #   endif
  205. #endif /* HAS_MEMCPY */
  206.  
  207. #ifdef HAS_MEMSET
  208. #  ifndef STANDARD_C
  209. #    ifndef memset
  210.     extern void *memset();
  211. #    endif
  212. #  endif
  213. #  define memzero(d,l) memset(d,0,l)
  214. #else
  215. #   ifndef memzero
  216. #    ifdef HAS_BZERO
  217. #        define memzero(d,l) bzero(d,l)
  218. #    else
  219. #        define memzero(d,l) my_bzero(d,l)
  220. #    endif
  221. #   endif
  222. #endif /* HAS_MEMSET */
  223.  
  224. #ifdef HAS_MEMCMP
  225. #  ifndef STANDARD_C
  226. #    ifndef memcmp
  227.     extern int memcmp();
  228. #    endif
  229. #  endif
  230. #else
  231. #   ifndef memcmp
  232. #    define memcmp(s1,s2,l) my_memcmp(s1,s2,l)
  233. #   endif
  234. #endif /* HAS_MEMCMP */
  235.  
  236. /* we prefer bcmp slightly for comparisons that don't care about ordering */
  237. #ifndef HAS_BCMP
  238. #   ifndef bcmp
  239. #    define bcmp(s1,s2,l) memcmp(s1,s2,l)
  240. #   endif
  241. #endif /* HAS_BCMP */
  242.  
  243. #ifndef HAS_MEMMOVE
  244. #if defined(HAS_BCOPY) && defined(SAFE_BCOPY)
  245. #define memmove(d,s,l) bcopy(s,d,l)
  246. #else
  247. #if defined(HAS_MEMCPY) && defined(SAFE_MEMCPY)
  248. #define memmove(d,s,l) memcpy(d,s,l)
  249. #else
  250. #define memmove(d,s,l) my_bcopy(s,d,l)
  251. #endif
  252. #endif
  253. #endif
  254.  
  255. #ifndef _TYPES_        /* If types.h defines this it's easy. */
  256. #ifndef major        /* Does everyone's types.h define this? */
  257. #include <sys/types.h>
  258. #endif
  259. #endif
  260.  
  261. #ifdef I_NETINET_IN
  262. #include <netinet/in.h>
  263. #endif
  264.  
  265. #include <sys/stat.h>
  266. #if defined(uts) || defined(UTekV)
  267. #undef S_ISDIR
  268. #undef S_ISCHR
  269. #undef S_ISBLK
  270. #undef S_ISREG
  271. #undef S_ISFIFO
  272. #undef S_ISLNK
  273. #define S_ISDIR(P) (((P)&S_IFMT)==S_IFDIR)
  274. #define S_ISCHR(P) (((P)&S_IFMT)==S_IFCHR)
  275. #define S_ISBLK(P) (((P)&S_IFMT)==S_IFBLK)
  276. #define S_ISREG(P) (((P)&S_IFMT)==S_IFREG)
  277. #define S_ISFIFO(P) (((P)&S_IFMT)==S_IFIFO)
  278. #ifdef S_IFLNK
  279. #define S_ISLNK(P) (((P)&S_IFMT)==S_IFLNK)
  280. #endif
  281. #endif
  282.  
  283. #ifdef I_TIME
  284. #   include <time.h>
  285. #endif
  286.  
  287. #ifdef I_SYS_TIME
  288. #   ifdef SYSTIMEKERNEL
  289. #    define KERNEL
  290. #   endif
  291. #   include <sys/time.h>
  292. #   ifdef SYSTIMEKERNEL
  293. #    undef KERNEL
  294. #   endif
  295. #endif
  296.  
  297. #ifndef MSDOS
  298. #include <sys/times.h>
  299. #endif
  300.  
  301. #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
  302. #undef HAS_STRERROR
  303. #endif
  304.  
  305. #include <errno.h>
  306. #ifndef MSDOS
  307. #ifndef errno
  308. extern int errno;     /* ANSI allows errno to be an lvalue expr */
  309. #endif
  310. #endif
  311.  
  312. #ifndef strerror
  313. #ifdef HAS_STRERROR
  314. char *strerror();
  315. #else
  316. extern int sys_nerr;
  317. extern char *sys_errlist[];
  318. #define strerror(e) ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
  319. #endif
  320. #endif
  321.  
  322. #ifdef I_SYSIOCTL
  323. #ifndef _IOCTL_
  324. #include <sys/ioctl.h>
  325. #endif
  326. #endif
  327.  
  328. #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
  329. #ifdef HAS_SOCKETPAIR
  330. #undef HAS_SOCKETPAIR
  331. #endif
  332. #ifdef HAS_NDBM
  333. #undef HAS_NDBM
  334. #endif
  335. #endif
  336.  
  337. #ifdef WANT_DBZ
  338. #include <dbz.h>
  339. #define SOME_DBM
  340. #define dbm_fetch(db,dkey) fetch(dkey)
  341. #define dbm_delete(db,dkey) fatal("dbz doesn't implement delete")
  342. #define dbm_store(db,dkey,dcontent,flags) store(dkey,dcontent)
  343. #define dbm_close(db) dbmclose()
  344. #define dbm_firstkey(db) (fatal("dbz doesn't implement traversal"),fetch())
  345. #define nextkey() (fatal("dbz doesn't implement traversal"),fetch())
  346. #define dbm_nextkey(db) (fatal("dbz doesn't implement traversal"),fetch())
  347. #ifdef HAS_NDBM
  348. #undef HAS_NDBM
  349. #endif
  350. #ifndef HAS_ODBM
  351. #define HAS_ODBM
  352. #endif
  353. #else
  354. #ifdef HAS_GDBM
  355. #ifdef I_GDBM
  356. #include <gdbm.h>
  357. #endif
  358. #define SOME_DBM
  359. #ifdef HAS_NDBM
  360. #undef HAS_NDBM
  361. #endif
  362. #ifdef HAS_ODBM
  363. #undef HAS_ODBM
  364. #endif
  365. #else
  366. #ifdef HAS_NDBM
  367. #include <ndbm.h>
  368. #define SOME_DBM
  369. #ifdef HAS_ODBM
  370. #undef HAS_ODBM
  371. #endif
  372. #else
  373. #ifdef HAS_ODBM
  374. #ifdef NULL
  375. #undef NULL        /* suppress redefinition message */
  376. #endif
  377. #if defined(sun) && defined(__svr4__)
  378. #include <rpcsvc/dbm.h>
  379. #else
  380. #include <dbm.h>
  381. #endif
  382. #ifdef NULL
  383. #undef NULL
  384. #endif
  385. #define NULL 0        /* silly thing is, we don't even use this */
  386. #define SOME_DBM
  387. #define dbm_fetch(db,dkey) fetch(dkey)
  388. #define dbm_delete(db,dkey) delete(dkey)
  389. #define dbm_store(db,dkey,dcontent,flags) store(dkey,dcontent)
  390. #define dbm_close(db) dbmclose()
  391. #define dbm_firstkey(db) firstkey()
  392. #endif /* HAS_ODBM */
  393. #endif /* HAS_NDBM */
  394. #endif /* HAS_GDBM */
  395. #endif /* WANT_DBZ */
  396. #ifdef SOME_DBM
  397. EXT char *dbmkey;
  398. EXT int dbmlen;
  399. #endif
  400.  
  401. #if INTSIZE == 2
  402. #define htoni htons
  403. #define ntohi ntohs
  404. #else
  405. #define htoni htonl
  406. #define ntohi ntohl
  407. #endif
  408.  
  409. #if defined(I_DIRENT)
  410. #   include <dirent.h>
  411. #   define DIRENT dirent
  412. #else
  413. #   ifdef I_SYS_NDIR
  414. #    include <sys/ndir.h>
  415. #    define DIRENT direct
  416. #   else
  417. #    ifdef I_SYS_DIR
  418. #        ifdef hp9000s500
  419. #        include <ndir.h>    /* may be wrong in the future */
  420. #        else
  421. #        include <sys/dir.h>
  422. #        endif
  423. #        define DIRENT direct
  424. #    endif
  425. #   endif
  426. #endif
  427.  
  428. #ifdef FPUTS_BOTCH
  429. /* work around botch in SunOS 4.0.1 and 4.0.2 */
  430. #   ifndef fputs
  431. #    define fputs(str,fp) fprintf(fp,"%s",str)
  432. #   endif
  433. #endif
  434.  
  435. /*
  436.  * The following gobbledygook brought to you on behalf of __STDC__.
  437.  * (I could just use #ifndef __STDC__, but this is more bulletproof
  438.  * in the face of half-implementations.)
  439.  */
  440.  
  441. #ifndef S_IFMT
  442. #   ifdef _S_IFMT
  443. #    define S_IFMT _S_IFMT
  444. #   else
  445. #    define S_IFMT 0170000
  446. #   endif
  447. #endif
  448.  
  449. #ifndef S_ISDIR
  450. #   define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
  451. #endif
  452.  
  453. #ifndef S_ISCHR
  454. #   define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
  455. #endif
  456.  
  457. #ifndef S_ISBLK
  458. #   ifdef S_IFBLK
  459. #    define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
  460. #   else
  461. #    define S_ISBLK(m) (0)
  462. #   endif
  463. #endif
  464.  
  465. #ifndef S_ISREG
  466. #   define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
  467. #endif
  468.  
  469. #ifndef S_ISFIFO
  470. #   ifdef S_IFIFO
  471. #    define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
  472. #   else
  473. #    define S_ISFIFO(m) (0)
  474. #   endif
  475. #endif
  476.  
  477. #ifndef S_ISLNK
  478. #   ifdef _S_ISLNK
  479. #    define S_ISLNK(m) _S_ISLNK(m)
  480. #   else
  481. #    ifdef _S_IFLNK
  482. #        define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
  483. #    else
  484. #        ifdef S_IFLNK
  485. #        define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
  486. #        else
  487. #        define S_ISLNK(m) (0)
  488. #        endif
  489. #    endif
  490. #   endif
  491. #endif
  492.  
  493. #ifndef S_ISSOCK
  494. #   ifdef _S_ISSOCK
  495. #    define S_ISSOCK(m) _S_ISSOCK(m)
  496. #   else
  497. #    ifdef _S_IFSOCK
  498. #        define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
  499. #    else
  500. #        ifdef S_IFSOCK
  501. #        define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
  502. #        else
  503. #        define S_ISSOCK(m) (0)
  504. #        endif
  505. #    endif
  506. #   endif
  507. #endif
  508.  
  509. #ifndef S_IRUSR
  510. #   ifdef S_IREAD
  511. #    define S_IRUSR S_IREAD
  512. #    define S_IWUSR S_IWRITE
  513. #    define S_IXUSR S_IEXEC
  514. #   else
  515. #    define S_IRUSR 0400
  516. #    define S_IWUSR 0200
  517. #    define S_IXUSR 0100
  518. #   endif
  519. #   define S_IRGRP (S_IRUSR>>3)
  520. #   define S_IWGRP (S_IWUSR>>3)
  521. #   define S_IXGRP (S_IXUSR>>3)
  522. #   define S_IROTH (S_IRUSR>>6)
  523. #   define S_IWOTH (S_IWUSR>>6)
  524. #   define S_IXOTH (S_IXUSR>>6)
  525. #endif
  526.  
  527. #ifndef S_ISUID
  528. #   define S_ISUID 04000
  529. #endif
  530.  
  531. #ifndef S_ISGID
  532. #   define S_ISGID 02000
  533. #endif
  534.  
  535. #ifdef f_next
  536. #undef f_next
  537. #endif
  538.  
  539. #if defined(cray) || defined(gould) || defined(i860)
  540. #   define SLOPPYDIVIDE
  541. #endif
  542.  
  543. #if defined(cray) || defined(convex) || defined (uts) || BYTEORDER > 0xffff
  544. #   define QUAD
  545. #endif
  546.  
  547. #ifdef QUAD
  548. #   ifdef cray
  549. #    define quad int
  550. #   else
  551. #    if defined(convex) || defined (uts)
  552. #        define quad long long
  553. #    else
  554. #        define quad long
  555. #    endif
  556. #   endif
  557. #endif
  558.  
  559. typedef MEM_SIZE STRLEN;
  560.  
  561. typedef struct arg ARG;
  562. typedef struct cmd CMD;
  563. typedef struct formcmd FCMD;
  564. typedef struct scanpat SPAT;
  565. typedef struct stio STIO;
  566. typedef struct sub SUBR;
  567. typedef struct string STR;
  568. typedef struct atbl ARRAY;
  569. typedef struct htbl HASH;
  570. typedef struct regexp REGEXP;
  571. typedef struct stabptrs STBP;
  572. typedef struct stab STAB;
  573. typedef struct callsave CSV;
  574.  
  575. #include "handy.h"
  576. #include "regexp.h"
  577. #include "str.h"
  578. #include "util.h"
  579. #include "form.h"
  580. #include "stab.h"
  581. #include "spat.h"
  582. #include "arg.h"
  583. #include "cmd.h"
  584. #include "array.h"
  585. #include "hash.h"
  586.  
  587. #if defined(iAPX286) || defined(M_I286) || defined(I80286)
  588. #   define I286
  589. #endif
  590.  
  591. #ifndef    STANDARD_C
  592. #ifdef CHARSPRINTF
  593.     char *sprintf();
  594. #else
  595.     int sprintf();
  596. #endif
  597. #endif
  598.  
  599. EXT char *Yes INIT("1");
  600. EXT char *No INIT("");
  601.  
  602. /* "gimme" values */
  603.  
  604. /* Note: cmd.c assumes that it can use && to produce one of these values! */
  605. #define G_SCALAR 0
  606. #define G_ARRAY 1
  607.  
  608. #ifdef CRIPPLED_CC
  609. int str_true();
  610. #else /* !CRIPPLED_CC */
  611. #define str_true(str) (Str = (str), \
  612.     (Str->str_pok ? \
  613.         ((*Str->str_ptr > '0' || \
  614.           Str->str_cur > 1 || \
  615.           (Str->str_cur && *Str->str_ptr != '0')) ? 1 : 0) \
  616.     : \
  617.         (Str->str_nok ? (Str->str_u.str_nval != 0.0) : 0 ) ))
  618. #endif /* CRIPPLED_CC */
  619.  
  620. #ifdef DEBUGGING
  621. #define str_peek(str) (Str = (str), \
  622.     (Str->str_pok ? \
  623.         Str->str_ptr : \
  624.         (Str->str_nok ? \
  625.         (sprintf(tokenbuf,"num(%g)",Str->str_u.str_nval), \
  626.             (char*)tokenbuf) : \
  627.         "" )))
  628. #endif
  629.  
  630. #ifdef CRIPPLED_CC
  631. char *str_get();
  632. #else
  633. #ifdef TAINT
  634. #define str_get(str) (Str = (str), tainted |= Str->str_tainted, \
  635.     (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
  636. #else
  637. #define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
  638. #endif /* TAINT */
  639. #endif /* CRIPPLED_CC */
  640.  
  641. #ifdef CRIPPLED_CC
  642. double str_gnum();
  643. #else /* !CRIPPLED_CC */
  644. #ifdef TAINT
  645. #define str_gnum(str) (Str = (str), tainted |= Str->str_tainted, \
  646.     (Str->str_nok ? Str->str_u.str_nval : str_2num(Str)))
  647. #else /* !TAINT */
  648. #define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_u.str_nval : str_2num(Str)))
  649. #endif /* TAINT*/
  650. #endif /* CRIPPLED_CC */
  651. EXT STR *Str;
  652.  
  653. #define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
  654.  
  655. #ifndef DOSISH
  656. #define STR_GROW(str,len) if ((str)->str_len < (len)) str_grow(str,len)
  657. #define Str_Grow str_grow
  658. #else
  659. /* extra parentheses intentionally NOT placed around "len"! */
  660. #define STR_GROW(str,len) if ((str)->str_len < (unsigned long)len) \
  661.         str_grow(str,(unsigned long)len)
  662. #define Str_Grow(str,len) str_grow(str,(unsigned long)(len))
  663. #endif /* DOSISH */
  664.  
  665. #ifndef BYTEORDER
  666. #define BYTEORDER 0x1234
  667. #endif
  668.  
  669. #if defined(htonl) && !defined(HAS_HTONL)
  670. #define HAS_HTONL
  671. #endif
  672. #if defined(htons) && !defined(HAS_HTONS)
  673. #define HAS_HTONS
  674. #endif
  675. #if defined(ntohl) && !defined(HAS_NTOHL)
  676. #define HAS_NTOHL
  677. #endif
  678. #if defined(ntohs) && !defined(HAS_NTOHS)
  679. #define HAS_NTOHS
  680. #endif
  681. #ifndef HAS_HTONL
  682. #if (BYTEORDER & 0xffff) != 0x4321
  683. #define HAS_HTONS
  684. #define HAS_HTONL
  685. #define HAS_NTOHS
  686. #define HAS_NTOHL
  687. #define MYSWAP
  688. #define htons my_swap
  689. #define htonl my_htonl
  690. #define ntohs my_swap
  691. #define ntohl my_ntohl
  692. #endif
  693. #else
  694. #if (BYTEORDER & 0xffff) == 0x4321
  695. #undef HAS_HTONS
  696. #undef HAS_HTONL
  697. #undef HAS_NTOHS
  698. #undef HAS_NTOHL
  699. #endif
  700. #endif
  701.  
  702. /*
  703.  * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
  704.  * -DWS
  705.  */
  706. #if BYTEORDER != 0x1234
  707. # define HAS_VTOHL
  708. # define HAS_VTOHS
  709. # define HAS_HTOVL
  710. # define HAS_HTOVS
  711. # if BYTEORDER == 0x4321
  712. #  define vtohl(x)    ((((x)&0xFF)<<24)    \
  713.             +(((x)>>24)&0xFF)    \
  714.             +(((x)&0x0000FF00)<<8)    \
  715.             +(((x)&0x00FF0000)>>8)    )
  716. #  define vtohs(x)    ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
  717. #  define htovl(x)    vtohl(x)
  718. #  define htovs(x)    vtohs(x)
  719. # endif
  720.     /* otherwise default to functions in util.c */
  721. #endif
  722.  
  723. #ifdef CASTNEGFLOAT
  724. #define U_S(what) ((unsigned short)(what))
  725. #define U_I(what) ((unsigned int)(what))
  726. #define U_L(what) ((unsigned long)(what))
  727. #else
  728. unsigned long castulong();
  729. #define U_S(what) ((unsigned int)castulong(what))
  730. #define U_I(what) ((unsigned int)castulong(what))
  731. #define U_L(what) (castulong(what))
  732. #endif
  733.  
  734. CMD *add_label();
  735. CMD *block_head();
  736. CMD *append_line();
  737. CMD *make_acmd();
  738. CMD *make_ccmd();
  739. CMD *make_icmd();
  740. CMD *invert();
  741. CMD *addcond();
  742. CMD *addloop();
  743. CMD *wopt();
  744. CMD *over();
  745.  
  746. STAB *stabent();
  747. STAB *genstab();
  748.  
  749. ARG *stab2arg();
  750. ARG *op_new();
  751. ARG *make_op();
  752. ARG *make_match();
  753. ARG *make_split();
  754. ARG *rcatmaybe();
  755. ARG *listish();
  756. ARG *maybelistish();
  757. ARG *localize();
  758. ARG *fixeval();
  759. ARG *jmaybe();
  760. ARG *l();
  761. ARG *fixl();
  762. ARG *mod_match();
  763. ARG *make_list();
  764. ARG *cmd_to_arg();
  765. ARG *addflags();
  766. ARG *hide_ary();
  767. ARG *cval_to_arg();
  768.  
  769. STR *str_new();
  770. STR *stab_str();
  771.  
  772. int apply();
  773. int do_each();
  774. int do_subr();
  775. int do_match();
  776. int do_unpack();
  777. int eval();        /* this evaluates expressions */
  778. int do_eval();        /* this evaluates eval operator */
  779. int do_assign();
  780.  
  781. SUBR *make_sub();
  782.  
  783. FCMD *load_format();
  784.  
  785. char *scanpat();
  786. char *scansubst();
  787. char *scantrans();
  788. char *scanstr();
  789. char *scanident();
  790. char *str_append_till();
  791. char *str_gets();
  792. char *str_grow();
  793.  
  794. bool do_open();
  795. bool do_close();
  796. bool do_print();
  797. bool do_aprint();
  798. bool do_exec();
  799. bool do_aexec();
  800.  
  801. int do_subst();
  802. int cando();
  803. int ingroup();
  804. int whichsig();
  805. int userinit();
  806. #ifdef CRYPTSCRIPT
  807. void cryptswitch();
  808. #endif
  809.  
  810. void str_replace();
  811. void str_inc();
  812. void str_dec();
  813. void str_free();
  814. void cmd_free();
  815. void arg_free();
  816. void spat_free();
  817. void regfree();
  818. void stab_clear();
  819. void do_chop();
  820. void do_vop();
  821. void do_write();
  822. void do_join();
  823. void do_sprintf();
  824. void do_accept();
  825. void do_pipe();
  826. void do_vecset();
  827. void do_unshift();
  828. void do_execfree();
  829. void magicalize();
  830. void magicname();
  831. void savelist();
  832. void saveitem();
  833. void saveint();
  834. void savelong();
  835. void savesptr();
  836. void savehptr();
  837. void restorelist();
  838. void repeatcpy();
  839. void make_form();
  840. void dehoist();
  841. void format();
  842. void my_unexec();
  843. void fatal();
  844. void warn();
  845. #ifdef DEBUGGING
  846. void dump_all();
  847. void dump_cmd();
  848. void dump_arg();
  849. void dump_flags();
  850. void dump_stab();
  851. void dump_spat();
  852. #endif
  853. #ifdef MSTATS
  854. void mstats();
  855. #endif
  856.  
  857. HASH *savehash();
  858. ARRAY *saveary();
  859.  
  860. EXT char **origargv;
  861. EXT int origargc;
  862. EXT char **origenviron;
  863. extern char **environ;
  864.  
  865. EXT long subline INIT(0);
  866. EXT STR *subname INIT(Nullstr);
  867. EXT int arybase INIT(0);
  868.  
  869. struct outrec {
  870.     long    o_lines;
  871.     char    *o_str;
  872.     int        o_len;
  873. };
  874.  
  875. EXT struct outrec outrec;
  876. EXT struct outrec toprec;
  877.  
  878. EXT STAB *stdinstab INIT(Nullstab);
  879. EXT STAB *last_in_stab INIT(Nullstab);
  880. EXT STAB *defstab INIT(Nullstab);
  881. EXT STAB *argvstab INIT(Nullstab);
  882. EXT STAB *envstab INIT(Nullstab);
  883. EXT STAB *sigstab INIT(Nullstab);
  884. EXT STAB *defoutstab INIT(Nullstab);
  885. EXT STAB *curoutstab INIT(Nullstab);
  886. EXT STAB *argvoutstab INIT(Nullstab);
  887. EXT STAB *incstab INIT(Nullstab);
  888. EXT STAB *leftstab INIT(Nullstab);
  889. EXT STAB *amperstab INIT(Nullstab);
  890. EXT STAB *rightstab INIT(Nullstab);
  891. EXT STAB *DBstab INIT(Nullstab);
  892. EXT STAB *DBline INIT(Nullstab);
  893. EXT STAB *DBsub INIT(Nullstab);
  894.  
  895. EXT HASH *defstash;        /* main symbol table */
  896. EXT HASH *curstash;        /* symbol table for current package */
  897. EXT HASH *debstash;        /* symbol table for perldb package */
  898.  
  899. EXT STR *curstname;        /* name of current package */
  900.  
  901. EXT STR *freestrroot INIT(Nullstr);
  902. EXT STR *lastretstr INIT(Nullstr);
  903. EXT STR *DBsingle INIT(Nullstr);
  904. EXT STR *DBtrace INIT(Nullstr);
  905. EXT STR *DBsignal INIT(Nullstr);
  906. EXT STR *formfeed INIT(Nullstr);
  907.  
  908. EXT int lastspbase;
  909. EXT int lastsize;
  910.  
  911. EXT char *hexdigit INIT("0123456789abcdef0123456789ABCDEFx");
  912. EXT char *origfilename;
  913. EXT FILE * VOLATILE rsfp;
  914. EXT char buf[1024];
  915. EXT char *bufptr;
  916. EXT char *oldbufptr;
  917. EXT char *oldoldbufptr;
  918. EXT char *bufend;
  919.  
  920. EXT STR *linestr INIT(Nullstr);
  921.  
  922. EXT char *rs INIT("\n");
  923. EXT int rschar INIT('\n');    /* final char of rs, or 0777 if none */
  924. EXT int rslen INIT(1);
  925. EXT bool rspara INIT(FALSE);
  926. EXT char *ofs INIT(Nullch);
  927. EXT int ofslen INIT(0);
  928. EXT char *ors INIT(Nullch);
  929. EXT int orslen INIT(0);
  930. EXT char *ofmt INIT(Nullch);
  931. EXT char *inplace INIT(Nullch);
  932. EXT char *nointrp INIT("");
  933.  
  934. EXT bool preprocess INIT(FALSE);
  935. EXT bool minus_n INIT(FALSE);
  936. EXT bool minus_p INIT(FALSE);
  937. EXT bool minus_l INIT(FALSE);
  938. EXT bool minus_a INIT(FALSE);
  939. EXT bool doswitches INIT(FALSE);
  940. EXT bool dowarn INIT(FALSE);
  941. EXT bool doextract INIT(FALSE);
  942. EXT bool allstabs INIT(FALSE);    /* init all customary symbols in symbol table?*/
  943. EXT bool sawampersand INIT(FALSE);    /* must save all match strings */
  944. EXT bool sawstudy INIT(FALSE);        /* do fbminstr on all strings */
  945. EXT bool sawi INIT(FALSE);        /* study must assume case insensitive */
  946. EXT bool sawvec INIT(FALSE);
  947. EXT bool localizing INIT(FALSE);    /* are we processing a local() list? */
  948.  
  949. #ifndef MAXSYSFD
  950. #   define MAXSYSFD 2
  951. #endif
  952. EXT int maxsysfd INIT(MAXSYSFD);    /* top fd to pass to subprocesses */
  953.  
  954. #ifdef CSH
  955. EXT char *cshname INIT(CSH);
  956. EXT int cshlen INIT(0);
  957. #endif /* CSH */
  958.  
  959. #ifdef TAINT
  960. EXT bool tainted INIT(FALSE);        /* using variables controlled by $< */
  961. EXT bool taintanyway INIT(FALSE);    /* force taint checks when !set?id */
  962. #endif
  963.  
  964. EXT bool nomemok INIT(FALSE);        /* let malloc context handle nomem */
  965.  
  966. #ifndef DOSISH
  967. #define TMPPATH "/tmp/perl-eXXXXXX"
  968. #else
  969. #define TMPPATH "plXXXXXX"
  970. #endif /* MSDOS */
  971. EXT char *e_tmpname;
  972. EXT FILE *e_fp INIT(Nullfp);
  973.  
  974. EXT char tokenbuf[256];
  975. EXT int expectterm INIT(TRUE);        /* how to interpret ambiguous tokens */
  976. EXT VOLATILE int in_eval INIT(FALSE);    /* trap fatal errors? */
  977. EXT int multiline INIT(0);        /* $*--do strings hold >1 line? */
  978. EXT int forkprocess;            /* so do_open |- can return proc# */
  979. EXT int do_undump INIT(0);        /* -u or dump seen? */
  980. EXT int error_count INIT(0);        /* how many errors so far, max 10 */
  981. EXT int multi_start INIT(0);        /* 1st line of multi-line string */
  982. EXT int multi_end INIT(0);        /* last line of multi-line string */
  983. EXT int multi_open INIT(0);        /* delimiter of said string */
  984. EXT int multi_close INIT(0);        /* delimiter of said string */
  985.  
  986. FILE *popen();
  987. /* char *str_get(); */
  988. STR *interp();
  989. void free_arg();
  990. STIO *stio_new();
  991. void hoistmust();
  992. void scanconst();
  993.  
  994. EXT struct stat statbuf;
  995. EXT struct stat statcache;
  996. EXT STAB *statstab INIT(Nullstab);
  997. EXT STR *statname;
  998. #ifndef MSDOS
  999. EXT struct tms timesbuf;
  1000. #endif
  1001. EXT int uid;
  1002. EXT int euid;
  1003. EXT int gid;
  1004. EXT int egid;
  1005. UIDTYPE getuid();
  1006. UIDTYPE geteuid();
  1007. GIDTYPE getgid();
  1008. GIDTYPE getegid();
  1009. EXT int unsafe;
  1010.  
  1011. #ifdef DEBUGGING
  1012. EXT VOLATILE int debug INIT(0);
  1013. EXT int dlevel INIT(0);
  1014. EXT int dlmax INIT(128);
  1015. EXT char *debname;
  1016. EXT char *debdelim;
  1017. #define YYDEBUG 1
  1018. #endif
  1019. EXT int perldb INIT(0);
  1020. #define YYMAXDEPTH 300
  1021.  
  1022. EXT line_t cmdline INIT(NOLINE);
  1023.  
  1024. EXT STR str_undef;
  1025. EXT STR str_no;
  1026. EXT STR str_yes;
  1027.  
  1028. /* runtime control stuff */
  1029.  
  1030. EXT struct loop {
  1031.     char *loop_label;        /* what the loop was called, if anything */
  1032.     int loop_sp;        /* stack pointer to copy stuff down to */
  1033.     jmp_buf loop_env;
  1034. } *loop_stack;
  1035.  
  1036. EXT int loop_ptr INIT(-1);
  1037. EXT int loop_max INIT(128);
  1038.  
  1039. EXT jmp_buf top_env;
  1040.  
  1041. EXT char * VOLATILE goto_targ INIT(Nullch); /* cmd_exec gets strange when set */
  1042.  
  1043. struct ufuncs {
  1044.     int (*uf_val)();
  1045.     int (*uf_set)();
  1046.     int uf_index;
  1047. };
  1048.  
  1049. EXT ARRAY *stack;        /* THE STACK */
  1050.  
  1051. EXT ARRAY * VOLATILE savestack;        /* to save non-local values on */
  1052.  
  1053. EXT ARRAY *tosave;        /* strings to save on recursive subroutine */
  1054.  
  1055. EXT ARRAY *lineary;        /* lines of script for debugger */
  1056. EXT ARRAY *dbargs;        /* args to call listed by caller function */
  1057.  
  1058. EXT ARRAY *fdpid;        /* keep fd-to-pid mappings for mypopen */
  1059. EXT HASH *pidstatus;        /* keep pid-to-status mappings for waitpid */
  1060.  
  1061. EXT int *di;            /* for tmp use in debuggers */
  1062. EXT char *dc;
  1063. EXT short *ds;
  1064.  
  1065. /* Fix these up for __STDC__ */
  1066. EXT time_t basetime INIT(0);
  1067. char *mktemp();
  1068. #ifndef STANDARD_C
  1069. /* All of these are in stdlib.h or time.h for ANSI C */
  1070. double atof();
  1071. long time();
  1072. struct tm *gmtime(), *localtime();
  1073. char *index(), *rindex();
  1074. char *strcpy(), *strcat();
  1075. #endif /* ! STANDARD_C */
  1076.  
  1077. #ifdef EUNICE
  1078. #define UNLINK unlnk
  1079. int unlnk();
  1080. #else
  1081. #define UNLINK unlink
  1082. #endif
  1083.  
  1084. #ifndef HAS_SETREUID
  1085. #ifdef HAS_SETRESUID
  1086. #define setreuid(r,e) setresuid(r,e,-1)
  1087. #define HAS_SETREUID
  1088. #endif
  1089. #endif
  1090. #ifndef HAS_SETREGID
  1091. #ifdef HAS_SETRESGID
  1092. #define setregid(r,e) setresgid(r,e,-1)
  1093. #define HAS_SETREGID
  1094. #endif
  1095. #endif
  1096.  
  1097. #define SCAN_DEF 0
  1098. #define SCAN_TR 1
  1099. #define SCAN_REPL 2
  1100. ==================== config.h
  1101. #ifndef config_h
  1102. #define config_h
  1103. /* config.h
  1104.  * This file was produced by running the config.h.SH script, which
  1105.  * gets its values from config.sh, which is generally produced by
  1106.  * running Configure.
  1107.  *
  1108.  * Feel free to modify any of this as the need arises.  Note, however,
  1109.  * that running config.h.SH again will wipe out any changes you've made.
  1110.  * For a more permanent change edit config.sh and rerun config.h.SH.
  1111.  */
  1112.  /*SUPPRESS 460*/
  1113.  
  1114.  
  1115. /* EUNICE
  1116.  *    This symbol, if defined, indicates that the program is being compiled
  1117.  *    under the EUNICE package under VMS.  The program will need to handle
  1118.  *    things like files that don't go away the first time you unlink them,
  1119.  *    due to version numbering.  It will also need to compensate for lack
  1120.  *    of a respectable link() command.
  1121.  */
  1122. /* VMS
  1123.  *    This symbol, if defined, indicates that the program is running under
  1124.  *    VMS.  It is currently only set in conjunction with the EUNICE symbol.
  1125.  */
  1126. /*#undef    EUNICE        /**/
  1127. /*#undef    VMS        /**/
  1128.  
  1129. /* LOC_SED
  1130.  *     This symbol holds the complete pathname to the sed program.
  1131.  */
  1132. #define LOC_SED "/usr/bin/sed"             /**/
  1133.  
  1134. /* ALIGNBYTES
  1135.  *    This symbol contains the number of bytes required to align a double.
  1136.  *    Usual values are 2, 4, and 8.
  1137.  */
  1138. #define ALIGNBYTES 8        /**/
  1139.  
  1140. /* BIN
  1141.  *    This symbol holds the name of the directory in which the user wants
  1142.  *    to keep publicly executable images for the package in question.  It
  1143.  *    is most often a local directory such as /usr/local/bin.
  1144.  */
  1145. #define BIN "/usr/local/bin"             /**/
  1146.  
  1147. /* BYTEORDER
  1148.  *    This symbol contains an encoding of the order of bytes in a long.
  1149.  *    Usual values (in hex) are 0x1234, 0x4321, 0x2143, 0x3412...
  1150.  */
  1151. #define BYTEORDER 0x4321        /**/
  1152.  
  1153. /* CPPSTDIN
  1154.  *    This symbol contains the first part of the string which will invoke
  1155.  *    the C preprocessor on the standard input and produce to standard
  1156.  *    output.     Typical value of "cc -E" or "/lib/cpp".
  1157.  */
  1158. /* CPPMINUS
  1159.  *    This symbol contains the second part of the string which will invoke
  1160.  *    the C preprocessor on the standard input and produce to standard
  1161.  *    output.  This symbol will have the value "-" if CPPSTDIN needs a minus
  1162.  *    to specify standard input, otherwise the value is "".
  1163.  */
  1164. #define CPPSTDIN "cppstdin"
  1165. #define CPPMINUS ""
  1166.  
  1167. /* HAS_BCMP
  1168.  *    This symbol, if defined, indicates that the bcmp routine is available
  1169.  *    to compare blocks of memory.  If undefined, use memcmp.  If that's
  1170.  *    not available, roll your own.
  1171.  */
  1172. /*#undef    HAS_BCMP        /**/
  1173.  
  1174. /* HAS_BCOPY
  1175.  *    This symbol, if defined, indicates that the bcopy routine is available
  1176.  *    to copy blocks of memory.  Otherwise you should probably use memcpy().
  1177.  *    If neither is defined, roll your own.
  1178.  */
  1179. /* SAFE_BCOPY
  1180.  *    This symbol, if defined, indicates that the bcopy routine is available
  1181.  *    to copy potentially overlapping copy blocks of bcopy.  Otherwise you
  1182.  *    should probably use memmove() or memcpy().  If neither is defined,
  1183.  *    roll your own.
  1184.  */
  1185. /*#undef    HAS_BCOPY        /**/
  1186. /*#undef    SAFE_BCOPY        /**/
  1187.  
  1188. /* HAS_BZERO
  1189.  *    This symbol, if defined, indicates that the bzero routine is available
  1190.  *    to zero blocks of memory.  Otherwise you should probably use memset()
  1191.  *    or roll your own.
  1192.  */
  1193. /*#undef    HAS_BZERO        /**/
  1194.  
  1195. /* CASTNEGFLOAT
  1196.  *    This symbol, if defined, indicates that this C compiler knows how to
  1197.  *    cast negative or large floating point numbers to unsigned longs, ints
  1198.  *    and shorts.
  1199.  */
  1200. /* CASTFLAGS
  1201.  *    This symbol contains flags that say what difficulties the compiler
  1202.  *    has casting odd floating values to unsigned long:
  1203.  *        1 = couldn't cast < 0
  1204.  *        2 = couldn't cast >= 0x80000000
  1205.  */
  1206. #define    CASTNEGFLOAT    /**/
  1207. #define    CASTFLAGS 0    /**/
  1208.  
  1209. /* CHARSPRINTF
  1210.  *    This symbol is defined if this system declares "char *sprintf()" in
  1211.  *    stdio.h.  The trend seems to be to declare it as "int sprintf()".  It
  1212.  *    is up to the package author to declare sprintf correctly based on the
  1213.  *    symbol.
  1214.  */
  1215. /*#undef    CHARSPRINTF     /**/
  1216.  
  1217. /* HAS_CHSIZE
  1218.  *    This symbol, if defined, indicates that the chsize routine is available
  1219.  *    to truncate files.  You might need a -lx to get this routine.
  1220.  */
  1221. /*#undef    HAS_CHSIZE        /**/
  1222.  
  1223. /* HAS_CRYPT
  1224.  *    This symbol, if defined, indicates that the crypt routine is available
  1225.  *    to encrypt passwords and the like.
  1226.  */
  1227. #define    HAS_CRYPT        /**/
  1228.  
  1229. /* CSH
  1230.  *    This symbol, if defined, indicates that the C-shell exists.
  1231.  *    If defined, contains the full pathname of csh.
  1232.  */
  1233. #define CSH "/usr/bin/csh"        /**/
  1234.  
  1235. /* DOSUID
  1236.  *    This symbol, if defined, indicates that the C program should
  1237.  *    check the script that it is executing for setuid/setgid bits, and
  1238.  *    attempt to emulate setuid/setgid on systems that have disabled
  1239.  *    setuid #! scripts because the kernel can't do it securely.
  1240.  *    It is up to the package designer to make sure that this emulation
  1241.  *    is done securely.  Among other things, it should do an fstat on
  1242.  *    the script it just opened to make sure it really is a setuid/setgid
  1243.  *    script, it should make sure the arguments passed correspond exactly
  1244.  *    to the argument on the #! line, and it should not trust any
  1245.  *    subprocesses to which it must pass the filename rather than the
  1246.  *    file descriptor of the script to be executed.
  1247.  */
  1248. /*#undef DOSUID        /**/
  1249.  
  1250. /* HAS_DUP2
  1251.  *    This symbol, if defined, indicates that the dup2 routine is available
  1252.  *    to dup file descriptors.  Otherwise you should use dup().
  1253.  */
  1254. #define    HAS_DUP2        /**/
  1255.  
  1256. /* HAS_FCHMOD
  1257.  *    This symbol, if defined, indicates that the fchmod routine is available
  1258.  *    to change mode of opened files.  If unavailable, use chmod().
  1259.  */
  1260. #define    HAS_FCHMOD        /**/
  1261.  
  1262. /* HAS_FCHOWN
  1263.  *    This symbol, if defined, indicates that the fchown routine is available
  1264.  *    to change ownership of opened files.  If unavailable, use chown().
  1265.  */
  1266. #define    HAS_FCHOWN        /**/
  1267.  
  1268. /* HAS_FCNTL
  1269.  *    This symbol, if defined, indicates to the C program that
  1270.  *    the fcntl() function exists.
  1271.  */
  1272. #define    HAS_FCNTL        /**/
  1273.  
  1274. /* FLEXFILENAMES
  1275.  *    This symbol, if defined, indicates that the system supports filenames
  1276.  *    longer than 14 characters.
  1277.  */
  1278. #define    FLEXFILENAMES        /**/
  1279.  
  1280. /* HAS_FLOCK
  1281.  *    This symbol, if defined, indicates that the flock() routine is
  1282.  *    available to do file locking.
  1283.  */
  1284. /*#undef    HAS_FLOCK        /**/
  1285.  
  1286. /* HAS_GETGROUPS
  1287.  *    This symbol, if defined, indicates that the getgroups() routine is
  1288.  *    available to get the list of process groups.  If unavailable, multiple
  1289.  *    groups are probably not supported.
  1290.  */
  1291. #define    HAS_GETGROUPS        /**/
  1292.  
  1293. /* HAS_GETHOSTENT
  1294.  *    This symbol, if defined, indicates that the gethostent() routine is
  1295.  *    available to lookup host names in some data base or other.
  1296.  */
  1297. #define    HAS_GETHOSTENT        /**/
  1298.  
  1299. /* HAS_GETPGRP
  1300.  *    This symbol, if defined, indicates that the getpgrp() routine is
  1301.  *    available to get the current process group.
  1302.  */
  1303. #define    HAS_GETPGRP        /**/
  1304.  
  1305. /* HAS_GETPGRP2
  1306.  *    This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
  1307.  *    routine is available to get the current process group.
  1308.  */
  1309. /*#undef    HAS_GETPGRP2        /**/
  1310.  
  1311. /* HAS_GETPRIORITY
  1312.  *    This symbol, if defined, indicates that the getpriority() routine is
  1313.  *    available to get a process's priority.
  1314.  */
  1315. /*#undef    HAS_GETPRIORITY        /**/
  1316.  
  1317. /* HAS_HTONS
  1318.  *    This symbol, if defined, indicates that the htons routine (and friends)
  1319.  *    are available to do network order byte swapping.
  1320.  */
  1321. /* HAS_HTONL
  1322.  *    This symbol, if defined, indicates that the htonl routine (and friends)
  1323.  *    are available to do network order byte swapping.
  1324.  */
  1325. /* HAS_NTOHS
  1326.  *    This symbol, if defined, indicates that the ntohs routine (and friends)
  1327.  *    are available to do network order byte swapping.
  1328.  */
  1329. /* HAS_NTOHL
  1330.  *    This symbol, if defined, indicates that the ntohl routine (and friends)
  1331.  *    are available to do network order byte swapping.
  1332.  */
  1333. #define    HAS_HTONS    /**/
  1334. #define    HAS_HTONL    /**/
  1335. #define    HAS_NTOHS    /**/
  1336. #define    HAS_NTOHL    /**/
  1337.  
  1338. /* index
  1339.  *    This preprocessor symbol is defined, along with rindex, if the system
  1340.  *    uses the strchr and strrchr routines instead.
  1341.  */
  1342. /* rindex
  1343.  *    This preprocessor symbol is defined, along with index, if the system
  1344.  *    uses the strchr and strrchr routines instead.
  1345.  */
  1346. #define    index strchr    /* cultural */
  1347. #define    rindex strrchr    /*  differences? */
  1348.  
  1349. /* HAS_ISASCII
  1350.  *    This symbol, if defined, indicates that the isascii routine is available
  1351.  *    to test characters for asciiness.
  1352.  */
  1353. #define    HAS_ISASCII        /**/
  1354.  
  1355. /* HAS_KILLPG
  1356.  *    This symbol, if defined, indicates that the killpg routine is available
  1357.  *    to kill process groups.  If unavailable, you probably should use kill
  1358.  *    with a negative process number.
  1359.  */
  1360. /*#undef    HAS_KILLPG        /**/
  1361.  
  1362. /* HAS_LSTAT
  1363.  *    This symbol, if defined, indicates that the lstat() routine is
  1364.  *    available to stat symbolic links.
  1365.  */
  1366. #define    HAS_LSTAT        /**/
  1367.  
  1368. /* HAS_MEMCMP
  1369.  *    This symbol, if defined, indicates that the memcmp routine is available
  1370.  *    to compare blocks of memory.  If undefined, roll your own.
  1371.  */
  1372. #define    HAS_MEMCMP        /**/
  1373.  
  1374. /* HAS_MEMCPY
  1375.  *    This symbol, if defined, indicates that the memcpy routine is available
  1376.  *    to copy blocks of memory.  Otherwise you should probably use bcopy().
  1377.  *    If neither is defined, roll your own.
  1378.  */
  1379. /* SAFE_MEMCPY
  1380.  *    This symbol, if defined, indicates that the memcpy routine is available
  1381.  *    to copy potentially overlapping copy blocks of memory.  Otherwise you
  1382.  *    should probably use memmove() or bcopy().  If neither is defined,
  1383.  *    roll your own.
  1384.  */
  1385. #define    HAS_MEMCPY        /**/
  1386. /*#undef    SAFE_MEMCPY        /**/
  1387.  
  1388. /* HAS_MEMMOVE
  1389.  *    This symbol, if defined, indicates that the memmove routine is available
  1390.  *    to move potentially overlapping blocks of memory.  Otherwise you
  1391.  *    should use bcopy() or roll your own.
  1392.  */
  1393. #define    HAS_MEMMOVE        /**/
  1394.  
  1395. /* HAS_MEMSET
  1396.  *    This symbol, if defined, indicates that the memset routine is available
  1397.  *    to set a block of memory to a character.  If undefined, roll your own.
  1398.  */
  1399. #define    HAS_MEMSET        /**/
  1400.  
  1401. /* HAS_MKDIR
  1402.  *    This symbol, if defined, indicates that the mkdir routine is available
  1403.  *    to create directories.  Otherwise you should fork off a new process to
  1404.  *    exec /bin/mkdir.
  1405.  */
  1406. #define    HAS_MKDIR        /**/
  1407.  
  1408. /* HAS_MSG
  1409.  *    This symbol, if defined, indicates that the entire msg*(2) library is
  1410.  *    supported.
  1411.  */
  1412. #define    HAS_MSG        /**/
  1413.  
  1414. /* HAS_MSGCTL
  1415.  *    This symbol, if defined, indicates that the msgctl() routine is
  1416.  *    available to control message passing.
  1417.  */
  1418. #define    HAS_MSGCTL        /**/
  1419.  
  1420. /* HAS_MSGGET
  1421.  *    This symbol, if defined, indicates that the msgget() routine is
  1422.  *    available to get messages.
  1423.  */
  1424. #define    HAS_MSGGET        /**/
  1425.  
  1426. /* HAS_MSGRCV
  1427.  *    This symbol, if defined, indicates that the msgrcv() routine is
  1428.  *    available to receive messages.
  1429.  */
  1430. #define    HAS_MSGRCV        /**/
  1431.  
  1432. /* HAS_MSGSND
  1433.  *    This symbol, if defined, indicates that the msgsnd() routine is
  1434.  *    available to send messages.
  1435.  */
  1436. #define    HAS_MSGSND        /**/
  1437.  
  1438. /* HAS_NDBM
  1439.  *    This symbol, if defined, indicates that ndbm.h exists and should
  1440.  *    be included.
  1441.  */
  1442. /*#undef    HAS_NDBM        /**/
  1443.  
  1444. /* HAS_ODBM
  1445.  *    This symbol, if defined, indicates that dbm.h exists and should
  1446.  *    be included.
  1447.  */
  1448. #define    HAS_ODBM        /**/
  1449.  
  1450. /* HAS_OPEN3
  1451.  *    This manifest constant lets the C program know that the three
  1452.  *    argument form of open(2) is available.
  1453.  */
  1454. #define    HAS_OPEN3        /**/
  1455.  
  1456. /* HAS_READDIR
  1457.  *    This symbol, if defined, indicates that the readdir routine is available
  1458.  *    from the C library to read directories.
  1459.  */
  1460. #define    HAS_READDIR        /**/
  1461.  
  1462. /* HAS_RENAME
  1463.  *    This symbol, if defined, indicates that the rename routine is available
  1464.  *    to rename files.  Otherwise you should do the unlink(), link(), unlink()
  1465.  *    trick.
  1466.  */
  1467. #define    HAS_RENAME        /**/
  1468.  
  1469. /* HAS_REWINDDIR
  1470.  *    This symbol, if defined, indicates that the rewindir routine is
  1471.  *    available to rewind directories.
  1472.  */
  1473. #define    HAS_REWINDDIR        /**/
  1474.  
  1475. /* HAS_RMDIR
  1476.  *    This symbol, if defined, indicates that the rmdir routine is available
  1477.  *    to remove directories.  Otherwise you should fork off a new process to
  1478.  *    exec /bin/rmdir.
  1479.  */
  1480. #define    HAS_RMDIR        /**/
  1481.  
  1482. /* HAS_SEEKDIR
  1483.  *    This symbol, if defined, indicates that the seekdir routine is
  1484.  *    available to seek into directories.
  1485.  */
  1486. #define    HAS_SEEKDIR        /**/
  1487.  
  1488. /* HAS_SELECT
  1489.  *    This symbol, if defined, indicates that the select() subroutine
  1490.  *    exists.
  1491.  */
  1492. #define    HAS_SELECT    /**/
  1493.  
  1494. /* HAS_SEM
  1495.  *    This symbol, if defined, indicates that the entire sem*(2) library is
  1496.  *    supported.
  1497.  */
  1498. #define    HAS_SEM        /**/
  1499.  
  1500. /* HAS_SEMCTL
  1501.  *    This symbol, if defined, indicates that the semctl() routine is
  1502.  *    available to control semaphores.
  1503.  */
  1504. #define    HAS_SEMCTL        /**/
  1505.  
  1506. /* HAS_SEMGET
  1507.  *    This symbol, if defined, indicates that the semget() routine is
  1508.  *    available to get semaphores ids.
  1509.  */
  1510. #define    HAS_SEMGET        /**/
  1511.  
  1512. /* HAS_SEMOP
  1513.  *    This symbol, if defined, indicates that the semop() routine is
  1514.  *    available to perform semaphore operations.
  1515.  */
  1516. #define    HAS_SEMOP        /**/
  1517.  
  1518. /* HAS_SETEGID
  1519.  *    This symbol, if defined, indicates that the setegid routine is available
  1520.  *    to change the effective gid of the current program.
  1521.  */
  1522. #define    HAS_SETEGID        /**/
  1523.  
  1524. /* HAS_SETEUID
  1525.  *    This symbol, if defined, indicates that the seteuid routine is available
  1526.  *    to change the effective uid of the current program.
  1527.  */
  1528. #define    HAS_SETEUID        /**/
  1529.  
  1530. /* HAS_SETPGRP
  1531.  *    This symbol, if defined, indicates that the setpgrp() routine is
  1532.  *    available to set the current process group.
  1533.  */
  1534. #define    HAS_SETPGRP        /**/
  1535.  
  1536. /* HAS_SETPGRP2
  1537.  *    This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
  1538.  *    routine is available to set the current process group.
  1539.  */
  1540. /*#undef    HAS_SETPGRP2        /**/
  1541.  
  1542. /* HAS_SETPRIORITY
  1543.  *    This symbol, if defined, indicates that the setpriority() routine is
  1544.  *    available to set a process's priority.
  1545.  */
  1546. /*#undef    HAS_SETPRIORITY        /**/
  1547.  
  1548. /* HAS_SETREGID
  1549.  *    This symbol, if defined, indicates that the setregid routine is
  1550.  *    available to change the real and effective gid of the current program.
  1551.  */
  1552. /* HAS_SETRESGID
  1553.  *    This symbol, if defined, indicates that the setresgid routine is
  1554.  *    available to change the real, effective and saved gid of the current
  1555.  *    program.
  1556.  */
  1557. /*#undef    HAS_SETREGID        /**/
  1558. /*#undef    HAS_SETRESGID        /**/
  1559.  
  1560. /* HAS_SETREUID
  1561.  *    This symbol, if defined, indicates that the setreuid routine is
  1562.  *    available to change the real and effective uid of the current program.
  1563.  */
  1564. /* HAS_SETRESUID
  1565.  *    This symbol, if defined, indicates that the setresuid routine is
  1566.  *    available to change the real, effective and saved uid of the current
  1567.  *    program.
  1568.  */
  1569. /*#undef    HAS_SETREUID        /**/
  1570. /*#undef    HAS_SETRESUID        /**/
  1571.  
  1572. /* HAS_SETRGID
  1573.  *    This symbol, if defined, indicates that the setrgid routine is available
  1574.  *    to change the real gid of the current program.
  1575.  */
  1576. /*#undef    HAS_SETRGID        /**/
  1577.  
  1578. /* HAS_SETRUID
  1579.  *    This symbol, if defined, indicates that the setruid routine is available
  1580.  *    to change the real uid of the current program.
  1581.  */
  1582. /*#undef    HAS_SETRUID        /**/
  1583.  
  1584. /* HAS_SHM
  1585.  *    This symbol, if defined, indicates that the entire shm*(2) library is
  1586.  *    supported.
  1587.  */
  1588. #define    HAS_SHM        /**/
  1589.  
  1590. /* HAS_SHMAT
  1591.  *    This symbol, if defined, indicates that the shmat() routine is
  1592.  *    available to attach a shared memory segment.
  1593.  */
  1594. /* VOID_SHMAT
  1595.  *    This symbol, if defined, indicates that the shmat() routine
  1596.  *    returns a pointer of type void*.
  1597.  */
  1598. #define    HAS_SHMAT        /**/
  1599.  
  1600. #define    VOIDSHMAT        /**/
  1601.  
  1602. /* HAS_SHMCTL
  1603.  *    This symbol, if defined, indicates that the shmctl() routine is
  1604.  *    available to control a shared memory segment.
  1605.  */
  1606. #define    HAS_SHMCTL        /**/
  1607.  
  1608. /* HAS_SHMDT
  1609.  *    This symbol, if defined, indicates that the shmdt() routine is
  1610.  *    available to detach a shared memory segment.
  1611.  */
  1612. #define    HAS_SHMDT        /**/
  1613.  
  1614. /* HAS_SHMGET
  1615.  *    This symbol, if defined, indicates that the shmget() routine is
  1616.  *    available to get a shared memory segment id.
  1617.  */
  1618. #define    HAS_SHMGET        /**/
  1619.  
  1620. /* HAS_SOCKET
  1621.  *    This symbol, if defined, indicates that the BSD socket interface is
  1622.  *    supported.
  1623.  */
  1624. /* HAS_SOCKETPAIR
  1625.  *    This symbol, if defined, indicates that the BSD socketpair call is
  1626.  *    supported.
  1627.  */
  1628. /* OLDSOCKET
  1629.  *    This symbol, if defined, indicates that the 4.1c BSD socket interface
  1630.  *    is supported instead of the 4.2/4.3 BSD socket interface.
  1631.  */
  1632. #define    HAS_SOCKET        /**/
  1633.  
  1634. #define    HAS_SOCKETPAIR    /**/
  1635.  
  1636. /*#undef    OLDSOCKET    /**/
  1637.  
  1638. /* STATBLOCKS
  1639.  *    This symbol is defined if this system has a stat structure declaring
  1640.  *    st_blksize and st_blocks.
  1641.  */
  1642. #define    STATBLOCKS     /**/
  1643.  
  1644. /* STDSTDIO
  1645.  *    This symbol is defined if this system has a FILE structure declaring
  1646.  *    _ptr and _cnt in stdio.h.
  1647.  */
  1648. #define    STDSTDIO     /**/
  1649.  
  1650. /* STRUCTCOPY
  1651.  *    This symbol, if defined, indicates that this C compiler knows how
  1652.  *    to copy structures.  If undefined, you'll need to use a block copy
  1653.  *    routine of some sort instead.
  1654.  */
  1655. #define    STRUCTCOPY    /**/
  1656.  
  1657. /* HAS_STRERROR
  1658.  *    This symbol, if defined, indicates that the strerror() routine is
  1659.  *    available to translate error numbers to strings.
  1660.  */
  1661. #define    HAS_STRERROR        /**/
  1662.  
  1663. /* HAS_SYMLINK
  1664.  *    This symbol, if defined, indicates that the symlink routine is available
  1665.  *    to create symbolic links.
  1666.  */
  1667. #define    HAS_SYMLINK        /**/
  1668.  
  1669. /* HAS_SYSCALL
  1670.  *    This symbol, if defined, indicates that the syscall routine is available
  1671.  *    to call arbitrary system calls.  If undefined, that's tough.
  1672.  */
  1673. #define    HAS_SYSCALL        /**/
  1674.  
  1675. /* HAS_TELLDIR
  1676.  *    This symbol, if defined, indicates that the telldir routine is
  1677.  *    available to tell your location in directories.
  1678.  */
  1679. #define    HAS_TELLDIR        /**/
  1680.  
  1681. /* HAS_TRUNCATE
  1682.  *    This symbol, if defined, indicates that the truncate routine is
  1683.  *    available to truncate files.
  1684.  */
  1685. #define    HAS_TRUNCATE        /**/
  1686.  
  1687. /* HAS_VFORK
  1688.  *    This symbol, if defined, indicates that vfork() exists.
  1689.  */
  1690. #define    HAS_VFORK    /**/
  1691.  
  1692. /* VOIDSIG
  1693.  *    This symbol is defined if this system declares "void (*signal())()" in
  1694.  *    signal.h.  The old way was to declare it as "int (*signal())()".  It
  1695.  *    is up to the package author to declare things correctly based on the
  1696.  *    symbol.
  1697.  */
  1698. /* TO_SIGNAL
  1699.  *    This symbol's value is either "void" or "int", corresponding to the
  1700.  *    appropriate return "type" of a signal handler.  Thus, one can declare
  1701.  *    a signal handler using "TO_SIGNAL (*handler())()", and define the
  1702.  *    handler using "TO_SIGNAL handler(sig)".
  1703.  */
  1704. #define    VOIDSIG     /**/
  1705. #define    TO_SIGNAL    int     /**/
  1706.  
  1707. /* HASVOLATILE
  1708.  *    This symbol, if defined, indicates that this C compiler knows about
  1709.  *    the volatile declaration.
  1710.  */
  1711. #define    HASVOLATILE    /**/
  1712.  
  1713. /* HAS_VPRINTF
  1714.  *    This symbol, if defined, indicates that the vprintf routine is available
  1715.  *    to printf with a pointer to an argument list.  If unavailable, you
  1716.  *    may need to write your own, probably in terms of _doprnt().
  1717.  */
  1718. /* CHARVSPRINTF
  1719.  *    This symbol is defined if this system has vsprintf() returning type
  1720.  *    (char*).  The trend seems to be to declare it as "int vsprintf()".  It
  1721.  *    is up to the package author to declare vsprintf correctly based on the
  1722.  *    symbol.
  1723.  */
  1724. #define    HAS_VPRINTF    /**/
  1725. /*#undef    CHARVSPRINTF     /**/
  1726.  
  1727. /* HAS_WAIT4
  1728.  *    This symbol, if defined, indicates that wait4() exists.
  1729.  */
  1730. /*#undef    HAS_WAIT4    /**/
  1731.  
  1732. /* HAS_WAITPID
  1733.  *    This symbol, if defined, indicates that waitpid() exists.
  1734.  */
  1735. #define    HAS_WAITPID    /**/
  1736.  
  1737. /* GIDTYPE
  1738.  *    This symbol has a value like gid_t, int, ushort, or whatever type is
  1739.  *    used to declare group ids in the kernel.
  1740.  */
  1741. #define GIDTYPE gid_t        /**/
  1742.  
  1743. /* GROUPSTYPE
  1744.  *    This symbol has a value like gid_t, int, ushort, or whatever type is
  1745.  *    used in the return value of getgroups().
  1746.  */
  1747. #define GROUPSTYPE int        /**/
  1748.  
  1749. /* I_FCNTL
  1750.  *    This manifest constant tells the C program to include <fcntl.h>.
  1751.  */
  1752. #define    I_FCNTL    /**/
  1753.  
  1754. /* I_GDBM
  1755.  *    This symbol, if defined, indicates that gdbm.h exists and should
  1756.  *    be included.
  1757.  */
  1758. /*#undef    I_GDBM        /**/
  1759.  
  1760. /* I_GRP
  1761.  *    This symbol, if defined, indicates to the C program that it should
  1762.  *    include grp.h.
  1763.  */
  1764. #define    I_GRP        /**/
  1765.  
  1766. /* I_NETINET_IN
  1767.  *    This symbol, if defined, indicates to the C program that it should
  1768.  *    include netinet/in.h.
  1769.  */
  1770. /* I_SYS_IN
  1771.  *    This symbol, if defined, indicates to the C program that it should
  1772.  *    include sys/in.h.
  1773.  */
  1774. #define    I_NETINET_IN        /**/
  1775. /*#undef    I_SYS_IN        /**/
  1776.  
  1777. /* I_PWD
  1778.  *    This symbol, if defined, indicates to the C program that it should
  1779.  *    include pwd.h.
  1780.  */
  1781. /* PWQUOTA
  1782.  *    This symbol, if defined, indicates to the C program that struct passwd
  1783.  *    contains pw_quota.
  1784.  */
  1785. /* PWAGE
  1786.  *    This symbol, if defined, indicates to the C program that struct passwd
  1787.  *    contains pw_age.
  1788.  */
  1789. /* PWCHANGE
  1790.  *    This symbol, if defined, indicates to the C program that struct passwd
  1791.  *    contains pw_change.
  1792.  */
  1793. /* PWCLASS
  1794.  *    This symbol, if defined, indicates to the C program that struct passwd
  1795.  *    contains pw_class.
  1796.  */
  1797. /* PWEXPIRE
  1798.  *    This symbol, if defined, indicates to the C program that struct passwd
  1799.  *    contains pw_expire.
  1800.  */
  1801. /* PWCOMMENT
  1802.  *    This symbol, if defined, indicates to the C program that struct passwd
  1803.  *    contains pw_comment.
  1804.  */
  1805. #define    I_PWD        /**/
  1806. /*#undef    PWQUOTA        /**/
  1807. #define    PWAGE        /**/
  1808. /*#undef    PWCHANGE    /**/
  1809. /*#undef    PWCLASS        /**/
  1810. /*#undef    PWEXPIRE    /**/
  1811. #define    PWCOMMENT    /**/
  1812.  
  1813. /* I_SYS_FILE
  1814.  *    This manifest constant tells the C program to include <sys/file.h>.
  1815.  */
  1816. /*#undef    I_SYS_FILE    /**/
  1817.  
  1818. /* I_SYSIOCTL
  1819.  *    This symbol, if defined, indicates that sys/ioctl.h exists and should
  1820.  *    be included.
  1821.  */
  1822. #define    I_SYSIOCTL        /**/
  1823.  
  1824. /* I_TIME
  1825.  *    This symbol is defined if the program should include <time.h>.
  1826.  */
  1827. /* I_SYS_TIME
  1828.  *    This symbol is defined if the program should include <sys/time.h>.
  1829.  */
  1830. /* SYSTIMEKERNEL
  1831.  *    This symbol is defined if the program should include <sys/time.h>
  1832.  *    with KERNEL defined.
  1833.  */
  1834. /* I_SYS_SELECT
  1835.  *    This symbol is defined if the program should include <sys/select.h>.
  1836.  */
  1837. /*#undef    I_TIME         /**/
  1838. #define    I_SYS_TIME     /**/
  1839. /*#undef    SYSTIMEKERNEL     /**/
  1840. /*#undef    I_SYS_SELECT     /**/
  1841.  
  1842. /* I_UTIME
  1843.  *    This symbol, if defined, indicates to the C program that it should
  1844.  *    include utime.h.
  1845.  */
  1846. #define    I_UTIME        /**/
  1847.  
  1848. /* I_VARARGS
  1849.  *    This symbol, if defined, indicates to the C program that it should
  1850.  *    include varargs.h.
  1851.  */
  1852. #define    I_VARARGS        /**/
  1853.  
  1854. /* I_VFORK
  1855.  *    This symbol, if defined, indicates to the C program that it should
  1856.  *    include vfork.h.
  1857.  */
  1858. /*#undef    I_VFORK        /**/
  1859.  
  1860. /* INTSIZE
  1861.  *    This symbol contains the size of an int, so that the C preprocessor
  1862.  *    can make decisions based on it.
  1863.  */
  1864. #define INTSIZE 4        /**/
  1865.  
  1866. /* I_DIRENT
  1867.  *    This symbol, if defined, indicates that the program should use the
  1868.  *    P1003-style directory routines, and include <dirent.h>.
  1869.  */
  1870. /* I_SYS_DIR
  1871.  *    This symbol, if defined, indicates that the program should use the
  1872.  *    directory functions by including <sys/dir.h>.
  1873.  */
  1874. /* I_NDIR
  1875.  *    This symbol, if defined, indicates that the program should include the
  1876.  *    system's version of ndir.h, rather than the one with this package.
  1877.  */
  1878. /* I_SYS_NDIR
  1879.  *    This symbol, if defined, indicates that the program should include the
  1880.  *    system's version of sys/ndir.h, rather than the one with this package.
  1881.  */
  1882. /* I_MY_DIR
  1883.  *    This symbol, if defined, indicates that the program should compile
  1884.  *    the ndir.c code provided with the package.
  1885.  */
  1886. /* DIRNAMLEN
  1887.  *    This symbol, if defined, indicates to the C program that the length
  1888.  *    of directory entry names is provided by a d_namlen field.  Otherwise
  1889.  *    you need to do strlen() on the d_name field.
  1890.  */
  1891. #define    I_DIRENT    /**/
  1892. /*#undef    I_SYS_DIR    /**/
  1893. /*#undef    I_NDIR        /**/
  1894. /*#undef    I_SYS_NDIR    /**/
  1895. /*#undef    I_MY_DIR    /**/
  1896. /*#undef    DIRNAMLEN    /**/
  1897.  
  1898. /* MYMALLOC
  1899.  *    This symbol, if defined, indicates that we're using our own malloc.
  1900.  */
  1901. /* MALLOCPTRTYPE
  1902.  *    This symbol defines the kind of ptr returned by malloc and realloc.
  1903.  */
  1904. /*#undef MYMALLOC            /**/
  1905.  
  1906. #define MALLOCPTRTYPE void         /**/
  1907.  
  1908.  
  1909. /* RANDBITS
  1910.  *    This symbol contains the number of bits of random number the rand()
  1911.  *    function produces.  Usual values are 15, 16, and 31.
  1912.  */
  1913. #define RANDBITS 15        /**/
  1914.  
  1915. /* SCRIPTDIR
  1916.  *    This symbol holds the name of the directory in which the user wants
  1917.  *    to keep publicly executable scripts for the package in question.  It
  1918.  *    is often a directory that is mounted across diverse architectures.
  1919.  */
  1920. #define SCRIPTDIR "/usr/local/lib/perl"             /**/
  1921.  
  1922. /* SIG_NAME
  1923.  *    This symbol contains an list of signal names in order.
  1924.  */
  1925. #define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","CHLD","PWR","WINCH","URG","POLL","STOP","TSTP","CONT","TTIN","TTOU","VTALRM","PROF","XCPU","XFSZ","WAITING","LWP"        /**/
  1926.  
  1927. /* STDCHAR
  1928.  *    This symbol is defined to be the type of char used in stdio.h.
  1929.  *    It has the values "unsigned char" or "char".
  1930.  */
  1931. #define STDCHAR unsigned char    /**/
  1932.  
  1933. /* UIDTYPE
  1934.  *    This symbol has a value like uid_t, int, ushort, or whatever type is
  1935.  *    used to declare user ids in the kernel.
  1936.  */
  1937. #define UIDTYPE uid_t        /**/
  1938.  
  1939. /* VOIDHAVE
  1940.  *    This symbol indicates how much support of the void type is given by this
  1941.  *    compiler.  What various bits mean:
  1942.  *
  1943.  *        1 = supports declaration of void
  1944.  *        2 = supports arrays of pointers to functions returning void
  1945.  *        4 = supports comparisons between pointers to void functions and
  1946.  *            addresses of void functions
  1947.  *
  1948.  *    The package designer should define VOIDWANT to indicate the requirements
  1949.  *    of the package.  This can be done either by #defining VOIDWANT before
  1950.  *    including config.h, or by defining voidwant in Myinit.U.  If the level
  1951.  *    of void support necessary is not present, config.h defines void to "int",
  1952.  *    VOID to the empty string, and VOIDP to "char *".
  1953.  */
  1954. /* void
  1955.  *    This symbol is used for void casts.  On implementations which support
  1956.  *    void appropriately, its value is "void".  Otherwise, its value maps
  1957.  *    to "int".
  1958.  */
  1959. /* VOID
  1960.  *    This symbol's value is "void" if the implementation supports void
  1961.  *    appropriately.  Otherwise, its value is the empty string.  The primary
  1962.  *    use of this symbol is in specifying void parameter lists for function
  1963.  *    prototypes.
  1964.  */
  1965. /* VOIDP
  1966.  *    This symbol is used for casting generic pointers.  On implementations
  1967.  *    which support void appropriately, its value is "void *".  Otherwise,
  1968.  *    its value is "char *".
  1969.  */
  1970. #ifndef VOIDWANT
  1971. #define VOIDWANT 7
  1972. #endif
  1973. #define VOIDHAVE 7
  1974. #if (VOIDHAVE & VOIDWANT) != VOIDWANT
  1975. #define void int        /* is void to be avoided? */
  1976. #define VOID
  1977. #define VOIDP (char *)
  1978. #define M_VOID        /* Xenix strikes again */
  1979. #else
  1980. #define VOID void
  1981. #define VOIDP (void *)
  1982. #endif
  1983.  
  1984. /* PRIVLIB
  1985.  *    This symbol contains the name of the private library for this package.
  1986.  *    The library is private in the sense that it needn't be in anyone's
  1987.  *    execution path, but it should be accessible by the world.  The program
  1988.  *    should be prepared to do ~ expansion.
  1989.  */
  1990. #define PRIVLIB "/usr/local/lib/perl"        /**/
  1991.  
  1992. #endif
  1993.  
  1994.  
  1995. -- 
  1996. +*************************************************************************+
  1997. *  Dana Chee                (201) 829-4488              *
  1998. *  Bellcore                                  *
  1999. *  Room 2P-298                                  *
  2000. *  445 South Street            ARPA: dana@bellcore.com          *
  2001. *  Morristown,  NJ  07960-1910        UUCP: {gateways}!bellcore!dana      *
  2002. +*************************************************************************+
  2003.