home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-01-25 | 49.9 KB | 2,003 lines |
- Newsgroups: comp.lang.perl
- Path: sparky!uunet!walter!dino!dana
- From: dana@dino.bellcore.com (Dana Chee)
- Subject: Re: Help: perl on Solaris 2.1, how ?
- Message-ID: <1993Jan25.172038.9912@walter.bellcore.com>
- Sender: news@walter.bellcore.com
- Nntp-Posting-Host: dino.bellcore.com
- Reply-To: dana@thumper.bellcore.com
- Organization: Packet Communications Research Group (Bellcore)
- References: <C198Hr.Atv@micromuse.co.uk>
- Date: Mon, 25 Jan 93 17:20:38 GMT
- Lines: 1989
-
- In article <C198Hr.Atv@micromuse.co.uk>, peter@micromuse.co.uk (Peter Galbavy) writes:
- |>
- |> I remember reading about problems with perl on Solaris 2.1, but at the time
- |> I didn't think I would be using 2.1... sigh. I am now.
- |>
- |> Can anyone please mail me the solution to getting it going. Thanks.
- |>
- |> PS. I tried and get the core dumps on make test.
- |>
- |> ---
- |> Peter Galbavy
- |> Tech Support, Micromuse Ltd
- |> Phone: +44 71 352 7774 E-Mail: P.Galbavy@micromuse.co.uk
-
- With gcc 2.3.2 or 2.3.3. I had to play with Configure to get this to
- turn out almost right, and I had to add stuff to perl.h to handle the
- move of dbm.h. Below are my hints file, my perl.h and my config.h
-
- ==================== solaris_gnu_2.x.sh
- d_ndbm='undef'
- d_odbm='define'
- libpth='/opt/cygnus/lib /usr/ccs/lib /lib /usr/lib /usr/local/lib'
- libswanted=`echo $libswanted | sed -e 's/ dbm PW malloc / /' -e 's/ ucb//'`
- inclwanted=`echo $inclwanted | sed -e 's% /usr/ucbinclude% %'`
- ==================== perl.h
- /* $RCSfile: perl.h,v $$Revision: 4.0.1.6 $$Date: 92/06/08 14:55:10 $
- *
- * Copyright (c) 1991, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: perl.h,v $
- * Revision 4.0.1.6 92/06/08 14:55:10 lwall
- * patch20: added Atari ST portability
- * patch20: bcopy() and memcpy() now tested for overlap safety
- * patch20: Perl now distinguishes overlapped copies from non-overlapped
- * patch20: removed implicit int declarations on functions
- *
- * Revision 4.0.1.5 91/11/11 16:41:07 lwall
- * patch19: uts wrongly defines S_ISDIR() et al
- * patch19: too many preprocessors can't expand a macro right in #if
- * patch19: added little-endian pack/unpack options
- *
- * Revision 4.0.1.4 91/11/05 18:06:10 lwall
- * patch11: various portability fixes
- * patch11: added support for dbz
- * patch11: added some support for 64-bit integers
- * patch11: hex() didn't understand leading 0x
- *
- * Revision 4.0.1.3 91/06/10 01:25:10 lwall
- * patch10: certain pattern optimizations were botched
- *
- * Revision 4.0.1.2 91/06/07 11:28:33 lwall
- * patch4: new copyright notice
- * patch4: made some allowances for "semi-standard" C
- * patch4: many, many itty-bitty portability fixes
- *
- * Revision 4.0.1.1 91/04/11 17:49:51 lwall
- * patch1: hopefully straightened out some of the Xenix mess
- *
- * Revision 4.0 91/03/20 01:37:56 lwall
- * 4.0 baseline.
- *
- */
-
- #define VOIDWANT 1
- #include "config.h"
-
- #ifdef MYMALLOC
- # ifdef HIDEMYMALLOC
- # define malloc Mymalloc
- # define realloc Myremalloc
- # define free Myfree
- # endif
- # define safemalloc malloc
- # define saferealloc realloc
- # define safefree free
- #endif
-
- /* work around some libPW problems */
- #define fatal Myfatal
- #ifdef DOINIT
- char Error[1];
- #endif
-
- /* define this once if either system, instead of cluttering up the src */
- #if defined(MSDOS) || defined(atarist)
- #define DOSISH 1
- #endif
-
- #ifdef DOSISH
- /* This stuff now in the MS-DOS config.h file. */
- #else /* !MSDOS */
-
- /*
- * The following symbols are defined if your operating system supports
- * functions by that name. All Unixes I know of support them, thus they
- * are not checked by the configuration script, but are directly defined
- * here.
- */
- #define HAS_ALARM
- #define HAS_CHOWN
- #define HAS_CHROOT
- #define HAS_FORK
- #define HAS_GETLOGIN
- #define HAS_GETPPID
- #define HAS_KILL
- #define HAS_LINK
- #define HAS_PIPE
- #define HAS_WAIT
- #define HAS_UMASK
- /*
- * The following symbols are defined if your operating system supports
- * password and group functions in general. All Unix systems do.
- */
- #define HAS_GROUP
- #define HAS_PASSWD
-
- #endif /* !MSDOS */
-
- #if defined(__STDC__) || defined(_AIX) || defined(__stdc__)
- # define STANDARD_C 1
- #endif
-
- #if defined(HASVOLATILE) || defined(STANDARD_C)
- #define VOLATILE volatile
- #else
- #define VOLATILE
- #endif
-
- #ifdef IAMSUID
- # ifndef TAINT
- # define TAINT
- # endif
- #endif
-
- #ifndef HAS_VFORK
- # define vfork fork
- #endif
-
- #ifdef HAS_GETPGRP2
- # ifndef HAS_GETPGRP
- # define HAS_GETPGRP
- # endif
- # define getpgrp getpgrp2
- #endif
-
- #ifdef HAS_SETPGRP2
- # ifndef HAS_SETPGRP
- # define HAS_SETPGRP
- # endif
- # define setpgrp setpgrp2
- #endif
-
- #include <stdio.h>
- #include <ctype.h>
- #include <setjmp.h>
- #ifndef MSDOS
- #ifdef PARAM_NEEDS_TYPES
- #include <sys/types.h>
- #endif
- #include <sys/param.h>
- #endif
- #ifdef STANDARD_C
- /* Use all the "standard" definitions */
- #include <stdlib.h>
- #include <string.h>
- #define MEM_SIZE size_t
- #else
- typedef unsigned int MEM_SIZE;
- #endif /* STANDARD_C */
-
- #if defined(HAS_MEMCMP) && defined(mips) && defined(ultrix)
- #undef HAS_MEMCMP
- #endif
-
- #ifdef HAS_MEMCPY
- # ifndef STANDARD_C
- # ifndef memcpy
- extern void * memcpy();
- # endif
- # endif
- #else
- # ifndef memcpy
- # ifdef HAS_BCOPY
- # define memcpy(d,s,l) bcopy(s,d,l)
- # else
- # define memcpy(d,s,l) my_bcopy(s,d,l)
- # endif
- # endif
- #endif /* HAS_MEMCPY */
-
- #ifdef HAS_MEMSET
- # ifndef STANDARD_C
- # ifndef memset
- extern void *memset();
- # endif
- # endif
- # define memzero(d,l) memset(d,0,l)
- #else
- # ifndef memzero
- # ifdef HAS_BZERO
- # define memzero(d,l) bzero(d,l)
- # else
- # define memzero(d,l) my_bzero(d,l)
- # endif
- # endif
- #endif /* HAS_MEMSET */
-
- #ifdef HAS_MEMCMP
- # ifndef STANDARD_C
- # ifndef memcmp
- extern int memcmp();
- # endif
- # endif
- #else
- # ifndef memcmp
- # define memcmp(s1,s2,l) my_memcmp(s1,s2,l)
- # endif
- #endif /* HAS_MEMCMP */
-
- /* we prefer bcmp slightly for comparisons that don't care about ordering */
- #ifndef HAS_BCMP
- # ifndef bcmp
- # define bcmp(s1,s2,l) memcmp(s1,s2,l)
- # endif
- #endif /* HAS_BCMP */
-
- #ifndef HAS_MEMMOVE
- #if defined(HAS_BCOPY) && defined(SAFE_BCOPY)
- #define memmove(d,s,l) bcopy(s,d,l)
- #else
- #if defined(HAS_MEMCPY) && defined(SAFE_MEMCPY)
- #define memmove(d,s,l) memcpy(d,s,l)
- #else
- #define memmove(d,s,l) my_bcopy(s,d,l)
- #endif
- #endif
- #endif
-
- #ifndef _TYPES_ /* If types.h defines this it's easy. */
- #ifndef major /* Does everyone's types.h define this? */
- #include <sys/types.h>
- #endif
- #endif
-
- #ifdef I_NETINET_IN
- #include <netinet/in.h>
- #endif
-
- #include <sys/stat.h>
- #if defined(uts) || defined(UTekV)
- #undef S_ISDIR
- #undef S_ISCHR
- #undef S_ISBLK
- #undef S_ISREG
- #undef S_ISFIFO
- #undef S_ISLNK
- #define S_ISDIR(P) (((P)&S_IFMT)==S_IFDIR)
- #define S_ISCHR(P) (((P)&S_IFMT)==S_IFCHR)
- #define S_ISBLK(P) (((P)&S_IFMT)==S_IFBLK)
- #define S_ISREG(P) (((P)&S_IFMT)==S_IFREG)
- #define S_ISFIFO(P) (((P)&S_IFMT)==S_IFIFO)
- #ifdef S_IFLNK
- #define S_ISLNK(P) (((P)&S_IFMT)==S_IFLNK)
- #endif
- #endif
-
- #ifdef I_TIME
- # include <time.h>
- #endif
-
- #ifdef I_SYS_TIME
- # ifdef SYSTIMEKERNEL
- # define KERNEL
- # endif
- # include <sys/time.h>
- # ifdef SYSTIMEKERNEL
- # undef KERNEL
- # endif
- #endif
-
- #ifndef MSDOS
- #include <sys/times.h>
- #endif
-
- #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
- #undef HAS_STRERROR
- #endif
-
- #include <errno.h>
- #ifndef MSDOS
- #ifndef errno
- extern int errno; /* ANSI allows errno to be an lvalue expr */
- #endif
- #endif
-
- #ifndef strerror
- #ifdef HAS_STRERROR
- char *strerror();
- #else
- extern int sys_nerr;
- extern char *sys_errlist[];
- #define strerror(e) ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
- #endif
- #endif
-
- #ifdef I_SYSIOCTL
- #ifndef _IOCTL_
- #include <sys/ioctl.h>
- #endif
- #endif
-
- #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
- #ifdef HAS_SOCKETPAIR
- #undef HAS_SOCKETPAIR
- #endif
- #ifdef HAS_NDBM
- #undef HAS_NDBM
- #endif
- #endif
-
- #ifdef WANT_DBZ
- #include <dbz.h>
- #define SOME_DBM
- #define dbm_fetch(db,dkey) fetch(dkey)
- #define dbm_delete(db,dkey) fatal("dbz doesn't implement delete")
- #define dbm_store(db,dkey,dcontent,flags) store(dkey,dcontent)
- #define dbm_close(db) dbmclose()
- #define dbm_firstkey(db) (fatal("dbz doesn't implement traversal"),fetch())
- #define nextkey() (fatal("dbz doesn't implement traversal"),fetch())
- #define dbm_nextkey(db) (fatal("dbz doesn't implement traversal"),fetch())
- #ifdef HAS_NDBM
- #undef HAS_NDBM
- #endif
- #ifndef HAS_ODBM
- #define HAS_ODBM
- #endif
- #else
- #ifdef HAS_GDBM
- #ifdef I_GDBM
- #include <gdbm.h>
- #endif
- #define SOME_DBM
- #ifdef HAS_NDBM
- #undef HAS_NDBM
- #endif
- #ifdef HAS_ODBM
- #undef HAS_ODBM
- #endif
- #else
- #ifdef HAS_NDBM
- #include <ndbm.h>
- #define SOME_DBM
- #ifdef HAS_ODBM
- #undef HAS_ODBM
- #endif
- #else
- #ifdef HAS_ODBM
- #ifdef NULL
- #undef NULL /* suppress redefinition message */
- #endif
- #if defined(sun) && defined(__svr4__)
- #include <rpcsvc/dbm.h>
- #else
- #include <dbm.h>
- #endif
- #ifdef NULL
- #undef NULL
- #endif
- #define NULL 0 /* silly thing is, we don't even use this */
- #define SOME_DBM
- #define dbm_fetch(db,dkey) fetch(dkey)
- #define dbm_delete(db,dkey) delete(dkey)
- #define dbm_store(db,dkey,dcontent,flags) store(dkey,dcontent)
- #define dbm_close(db) dbmclose()
- #define dbm_firstkey(db) firstkey()
- #endif /* HAS_ODBM */
- #endif /* HAS_NDBM */
- #endif /* HAS_GDBM */
- #endif /* WANT_DBZ */
- #ifdef SOME_DBM
- EXT char *dbmkey;
- EXT int dbmlen;
- #endif
-
- #if INTSIZE == 2
- #define htoni htons
- #define ntohi ntohs
- #else
- #define htoni htonl
- #define ntohi ntohl
- #endif
-
- #if defined(I_DIRENT)
- # include <dirent.h>
- # define DIRENT dirent
- #else
- # ifdef I_SYS_NDIR
- # include <sys/ndir.h>
- # define DIRENT direct
- # else
- # ifdef I_SYS_DIR
- # ifdef hp9000s500
- # include <ndir.h> /* may be wrong in the future */
- # else
- # include <sys/dir.h>
- # endif
- # define DIRENT direct
- # endif
- # endif
- #endif
-
- #ifdef FPUTS_BOTCH
- /* work around botch in SunOS 4.0.1 and 4.0.2 */
- # ifndef fputs
- # define fputs(str,fp) fprintf(fp,"%s",str)
- # endif
- #endif
-
- /*
- * The following gobbledygook brought to you on behalf of __STDC__.
- * (I could just use #ifndef __STDC__, but this is more bulletproof
- * in the face of half-implementations.)
- */
-
- #ifndef S_IFMT
- # ifdef _S_IFMT
- # define S_IFMT _S_IFMT
- # else
- # define S_IFMT 0170000
- # endif
- #endif
-
- #ifndef S_ISDIR
- # define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
- #endif
-
- #ifndef S_ISCHR
- # define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
- #endif
-
- #ifndef S_ISBLK
- # ifdef S_IFBLK
- # define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
- # else
- # define S_ISBLK(m) (0)
- # endif
- #endif
-
- #ifndef S_ISREG
- # define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
- #endif
-
- #ifndef S_ISFIFO
- # ifdef S_IFIFO
- # define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
- # else
- # define S_ISFIFO(m) (0)
- # endif
- #endif
-
- #ifndef S_ISLNK
- # ifdef _S_ISLNK
- # define S_ISLNK(m) _S_ISLNK(m)
- # else
- # ifdef _S_IFLNK
- # define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
- # else
- # ifdef S_IFLNK
- # define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
- # else
- # define S_ISLNK(m) (0)
- # endif
- # endif
- # endif
- #endif
-
- #ifndef S_ISSOCK
- # ifdef _S_ISSOCK
- # define S_ISSOCK(m) _S_ISSOCK(m)
- # else
- # ifdef _S_IFSOCK
- # define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
- # else
- # ifdef S_IFSOCK
- # define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
- # else
- # define S_ISSOCK(m) (0)
- # endif
- # endif
- # endif
- #endif
-
- #ifndef S_IRUSR
- # ifdef S_IREAD
- # define S_IRUSR S_IREAD
- # define S_IWUSR S_IWRITE
- # define S_IXUSR S_IEXEC
- # else
- # define S_IRUSR 0400
- # define S_IWUSR 0200
- # define S_IXUSR 0100
- # endif
- # define S_IRGRP (S_IRUSR>>3)
- # define S_IWGRP (S_IWUSR>>3)
- # define S_IXGRP (S_IXUSR>>3)
- # define S_IROTH (S_IRUSR>>6)
- # define S_IWOTH (S_IWUSR>>6)
- # define S_IXOTH (S_IXUSR>>6)
- #endif
-
- #ifndef S_ISUID
- # define S_ISUID 04000
- #endif
-
- #ifndef S_ISGID
- # define S_ISGID 02000
- #endif
-
- #ifdef f_next
- #undef f_next
- #endif
-
- #if defined(cray) || defined(gould) || defined(i860)
- # define SLOPPYDIVIDE
- #endif
-
- #if defined(cray) || defined(convex) || defined (uts) || BYTEORDER > 0xffff
- # define QUAD
- #endif
-
- #ifdef QUAD
- # ifdef cray
- # define quad int
- # else
- # if defined(convex) || defined (uts)
- # define quad long long
- # else
- # define quad long
- # endif
- # endif
- #endif
-
- typedef MEM_SIZE STRLEN;
-
- typedef struct arg ARG;
- typedef struct cmd CMD;
- typedef struct formcmd FCMD;
- typedef struct scanpat SPAT;
- typedef struct stio STIO;
- typedef struct sub SUBR;
- typedef struct string STR;
- typedef struct atbl ARRAY;
- typedef struct htbl HASH;
- typedef struct regexp REGEXP;
- typedef struct stabptrs STBP;
- typedef struct stab STAB;
- typedef struct callsave CSV;
-
- #include "handy.h"
- #include "regexp.h"
- #include "str.h"
- #include "util.h"
- #include "form.h"
- #include "stab.h"
- #include "spat.h"
- #include "arg.h"
- #include "cmd.h"
- #include "array.h"
- #include "hash.h"
-
- #if defined(iAPX286) || defined(M_I286) || defined(I80286)
- # define I286
- #endif
-
- #ifndef STANDARD_C
- #ifdef CHARSPRINTF
- char *sprintf();
- #else
- int sprintf();
- #endif
- #endif
-
- EXT char *Yes INIT("1");
- EXT char *No INIT("");
-
- /* "gimme" values */
-
- /* Note: cmd.c assumes that it can use && to produce one of these values! */
- #define G_SCALAR 0
- #define G_ARRAY 1
-
- #ifdef CRIPPLED_CC
- int str_true();
- #else /* !CRIPPLED_CC */
- #define str_true(str) (Str = (str), \
- (Str->str_pok ? \
- ((*Str->str_ptr > '0' || \
- Str->str_cur > 1 || \
- (Str->str_cur && *Str->str_ptr != '0')) ? 1 : 0) \
- : \
- (Str->str_nok ? (Str->str_u.str_nval != 0.0) : 0 ) ))
- #endif /* CRIPPLED_CC */
-
- #ifdef DEBUGGING
- #define str_peek(str) (Str = (str), \
- (Str->str_pok ? \
- Str->str_ptr : \
- (Str->str_nok ? \
- (sprintf(tokenbuf,"num(%g)",Str->str_u.str_nval), \
- (char*)tokenbuf) : \
- "" )))
- #endif
-
- #ifdef CRIPPLED_CC
- char *str_get();
- #else
- #ifdef TAINT
- #define str_get(str) (Str = (str), tainted |= Str->str_tainted, \
- (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
- #else
- #define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
- #endif /* TAINT */
- #endif /* CRIPPLED_CC */
-
- #ifdef CRIPPLED_CC
- double str_gnum();
- #else /* !CRIPPLED_CC */
- #ifdef TAINT
- #define str_gnum(str) (Str = (str), tainted |= Str->str_tainted, \
- (Str->str_nok ? Str->str_u.str_nval : str_2num(Str)))
- #else /* !TAINT */
- #define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_u.str_nval : str_2num(Str)))
- #endif /* TAINT*/
- #endif /* CRIPPLED_CC */
- EXT STR *Str;
-
- #define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
-
- #ifndef DOSISH
- #define STR_GROW(str,len) if ((str)->str_len < (len)) str_grow(str,len)
- #define Str_Grow str_grow
- #else
- /* extra parentheses intentionally NOT placed around "len"! */
- #define STR_GROW(str,len) if ((str)->str_len < (unsigned long)len) \
- str_grow(str,(unsigned long)len)
- #define Str_Grow(str,len) str_grow(str,(unsigned long)(len))
- #endif /* DOSISH */
-
- #ifndef BYTEORDER
- #define BYTEORDER 0x1234
- #endif
-
- #if defined(htonl) && !defined(HAS_HTONL)
- #define HAS_HTONL
- #endif
- #if defined(htons) && !defined(HAS_HTONS)
- #define HAS_HTONS
- #endif
- #if defined(ntohl) && !defined(HAS_NTOHL)
- #define HAS_NTOHL
- #endif
- #if defined(ntohs) && !defined(HAS_NTOHS)
- #define HAS_NTOHS
- #endif
- #ifndef HAS_HTONL
- #if (BYTEORDER & 0xffff) != 0x4321
- #define HAS_HTONS
- #define HAS_HTONL
- #define HAS_NTOHS
- #define HAS_NTOHL
- #define MYSWAP
- #define htons my_swap
- #define htonl my_htonl
- #define ntohs my_swap
- #define ntohl my_ntohl
- #endif
- #else
- #if (BYTEORDER & 0xffff) == 0x4321
- #undef HAS_HTONS
- #undef HAS_HTONL
- #undef HAS_NTOHS
- #undef HAS_NTOHL
- #endif
- #endif
-
- /*
- * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
- * -DWS
- */
- #if BYTEORDER != 0x1234
- # define HAS_VTOHL
- # define HAS_VTOHS
- # define HAS_HTOVL
- # define HAS_HTOVS
- # if BYTEORDER == 0x4321
- # define vtohl(x) ((((x)&0xFF)<<24) \
- +(((x)>>24)&0xFF) \
- +(((x)&0x0000FF00)<<8) \
- +(((x)&0x00FF0000)>>8) )
- # define vtohs(x) ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
- # define htovl(x) vtohl(x)
- # define htovs(x) vtohs(x)
- # endif
- /* otherwise default to functions in util.c */
- #endif
-
- #ifdef CASTNEGFLOAT
- #define U_S(what) ((unsigned short)(what))
- #define U_I(what) ((unsigned int)(what))
- #define U_L(what) ((unsigned long)(what))
- #else
- unsigned long castulong();
- #define U_S(what) ((unsigned int)castulong(what))
- #define U_I(what) ((unsigned int)castulong(what))
- #define U_L(what) (castulong(what))
- #endif
-
- CMD *add_label();
- CMD *block_head();
- CMD *append_line();
- CMD *make_acmd();
- CMD *make_ccmd();
- CMD *make_icmd();
- CMD *invert();
- CMD *addcond();
- CMD *addloop();
- CMD *wopt();
- CMD *over();
-
- STAB *stabent();
- STAB *genstab();
-
- ARG *stab2arg();
- ARG *op_new();
- ARG *make_op();
- ARG *make_match();
- ARG *make_split();
- ARG *rcatmaybe();
- ARG *listish();
- ARG *maybelistish();
- ARG *localize();
- ARG *fixeval();
- ARG *jmaybe();
- ARG *l();
- ARG *fixl();
- ARG *mod_match();
- ARG *make_list();
- ARG *cmd_to_arg();
- ARG *addflags();
- ARG *hide_ary();
- ARG *cval_to_arg();
-
- STR *str_new();
- STR *stab_str();
-
- int apply();
- int do_each();
- int do_subr();
- int do_match();
- int do_unpack();
- int eval(); /* this evaluates expressions */
- int do_eval(); /* this evaluates eval operator */
- int do_assign();
-
- SUBR *make_sub();
-
- FCMD *load_format();
-
- char *scanpat();
- char *scansubst();
- char *scantrans();
- char *scanstr();
- char *scanident();
- char *str_append_till();
- char *str_gets();
- char *str_grow();
-
- bool do_open();
- bool do_close();
- bool do_print();
- bool do_aprint();
- bool do_exec();
- bool do_aexec();
-
- int do_subst();
- int cando();
- int ingroup();
- int whichsig();
- int userinit();
- #ifdef CRYPTSCRIPT
- void cryptswitch();
- #endif
-
- void str_replace();
- void str_inc();
- void str_dec();
- void str_free();
- void cmd_free();
- void arg_free();
- void spat_free();
- void regfree();
- void stab_clear();
- void do_chop();
- void do_vop();
- void do_write();
- void do_join();
- void do_sprintf();
- void do_accept();
- void do_pipe();
- void do_vecset();
- void do_unshift();
- void do_execfree();
- void magicalize();
- void magicname();
- void savelist();
- void saveitem();
- void saveint();
- void savelong();
- void savesptr();
- void savehptr();
- void restorelist();
- void repeatcpy();
- void make_form();
- void dehoist();
- void format();
- void my_unexec();
- void fatal();
- void warn();
- #ifdef DEBUGGING
- void dump_all();
- void dump_cmd();
- void dump_arg();
- void dump_flags();
- void dump_stab();
- void dump_spat();
- #endif
- #ifdef MSTATS
- void mstats();
- #endif
-
- HASH *savehash();
- ARRAY *saveary();
-
- EXT char **origargv;
- EXT int origargc;
- EXT char **origenviron;
- extern char **environ;
-
- EXT long subline INIT(0);
- EXT STR *subname INIT(Nullstr);
- EXT int arybase INIT(0);
-
- struct outrec {
- long o_lines;
- char *o_str;
- int o_len;
- };
-
- EXT struct outrec outrec;
- EXT struct outrec toprec;
-
- EXT STAB *stdinstab INIT(Nullstab);
- EXT STAB *last_in_stab INIT(Nullstab);
- EXT STAB *defstab INIT(Nullstab);
- EXT STAB *argvstab INIT(Nullstab);
- EXT STAB *envstab INIT(Nullstab);
- EXT STAB *sigstab INIT(Nullstab);
- EXT STAB *defoutstab INIT(Nullstab);
- EXT STAB *curoutstab INIT(Nullstab);
- EXT STAB *argvoutstab INIT(Nullstab);
- EXT STAB *incstab INIT(Nullstab);
- EXT STAB *leftstab INIT(Nullstab);
- EXT STAB *amperstab INIT(Nullstab);
- EXT STAB *rightstab INIT(Nullstab);
- EXT STAB *DBstab INIT(Nullstab);
- EXT STAB *DBline INIT(Nullstab);
- EXT STAB *DBsub INIT(Nullstab);
-
- EXT HASH *defstash; /* main symbol table */
- EXT HASH *curstash; /* symbol table for current package */
- EXT HASH *debstash; /* symbol table for perldb package */
-
- EXT STR *curstname; /* name of current package */
-
- EXT STR *freestrroot INIT(Nullstr);
- EXT STR *lastretstr INIT(Nullstr);
- EXT STR *DBsingle INIT(Nullstr);
- EXT STR *DBtrace INIT(Nullstr);
- EXT STR *DBsignal INIT(Nullstr);
- EXT STR *formfeed INIT(Nullstr);
-
- EXT int lastspbase;
- EXT int lastsize;
-
- EXT char *hexdigit INIT("0123456789abcdef0123456789ABCDEFx");
- EXT char *origfilename;
- EXT FILE * VOLATILE rsfp;
- EXT char buf[1024];
- EXT char *bufptr;
- EXT char *oldbufptr;
- EXT char *oldoldbufptr;
- EXT char *bufend;
-
- EXT STR *linestr INIT(Nullstr);
-
- EXT char *rs INIT("\n");
- EXT int rschar INIT('\n'); /* final char of rs, or 0777 if none */
- EXT int rslen INIT(1);
- EXT bool rspara INIT(FALSE);
- EXT char *ofs INIT(Nullch);
- EXT int ofslen INIT(0);
- EXT char *ors INIT(Nullch);
- EXT int orslen INIT(0);
- EXT char *ofmt INIT(Nullch);
- EXT char *inplace INIT(Nullch);
- EXT char *nointrp INIT("");
-
- EXT bool preprocess INIT(FALSE);
- EXT bool minus_n INIT(FALSE);
- EXT bool minus_p INIT(FALSE);
- EXT bool minus_l INIT(FALSE);
- EXT bool minus_a INIT(FALSE);
- EXT bool doswitches INIT(FALSE);
- EXT bool dowarn INIT(FALSE);
- EXT bool doextract INIT(FALSE);
- EXT bool allstabs INIT(FALSE); /* init all customary symbols in symbol table?*/
- EXT bool sawampersand INIT(FALSE); /* must save all match strings */
- EXT bool sawstudy INIT(FALSE); /* do fbminstr on all strings */
- EXT bool sawi INIT(FALSE); /* study must assume case insensitive */
- EXT bool sawvec INIT(FALSE);
- EXT bool localizing INIT(FALSE); /* are we processing a local() list? */
-
- #ifndef MAXSYSFD
- # define MAXSYSFD 2
- #endif
- EXT int maxsysfd INIT(MAXSYSFD); /* top fd to pass to subprocesses */
-
- #ifdef CSH
- EXT char *cshname INIT(CSH);
- EXT int cshlen INIT(0);
- #endif /* CSH */
-
- #ifdef TAINT
- EXT bool tainted INIT(FALSE); /* using variables controlled by $< */
- EXT bool taintanyway INIT(FALSE); /* force taint checks when !set?id */
- #endif
-
- EXT bool nomemok INIT(FALSE); /* let malloc context handle nomem */
-
- #ifndef DOSISH
- #define TMPPATH "/tmp/perl-eXXXXXX"
- #else
- #define TMPPATH "plXXXXXX"
- #endif /* MSDOS */
- EXT char *e_tmpname;
- EXT FILE *e_fp INIT(Nullfp);
-
- EXT char tokenbuf[256];
- EXT int expectterm INIT(TRUE); /* how to interpret ambiguous tokens */
- EXT VOLATILE int in_eval INIT(FALSE); /* trap fatal errors? */
- EXT int multiline INIT(0); /* $*--do strings hold >1 line? */
- EXT int forkprocess; /* so do_open |- can return proc# */
- EXT int do_undump INIT(0); /* -u or dump seen? */
- EXT int error_count INIT(0); /* how many errors so far, max 10 */
- EXT int multi_start INIT(0); /* 1st line of multi-line string */
- EXT int multi_end INIT(0); /* last line of multi-line string */
- EXT int multi_open INIT(0); /* delimiter of said string */
- EXT int multi_close INIT(0); /* delimiter of said string */
-
- FILE *popen();
- /* char *str_get(); */
- STR *interp();
- void free_arg();
- STIO *stio_new();
- void hoistmust();
- void scanconst();
-
- EXT struct stat statbuf;
- EXT struct stat statcache;
- EXT STAB *statstab INIT(Nullstab);
- EXT STR *statname;
- #ifndef MSDOS
- EXT struct tms timesbuf;
- #endif
- EXT int uid;
- EXT int euid;
- EXT int gid;
- EXT int egid;
- UIDTYPE getuid();
- UIDTYPE geteuid();
- GIDTYPE getgid();
- GIDTYPE getegid();
- EXT int unsafe;
-
- #ifdef DEBUGGING
- EXT VOLATILE int debug INIT(0);
- EXT int dlevel INIT(0);
- EXT int dlmax INIT(128);
- EXT char *debname;
- EXT char *debdelim;
- #define YYDEBUG 1
- #endif
- EXT int perldb INIT(0);
- #define YYMAXDEPTH 300
-
- EXT line_t cmdline INIT(NOLINE);
-
- EXT STR str_undef;
- EXT STR str_no;
- EXT STR str_yes;
-
- /* runtime control stuff */
-
- EXT struct loop {
- char *loop_label; /* what the loop was called, if anything */
- int loop_sp; /* stack pointer to copy stuff down to */
- jmp_buf loop_env;
- } *loop_stack;
-
- EXT int loop_ptr INIT(-1);
- EXT int loop_max INIT(128);
-
- EXT jmp_buf top_env;
-
- EXT char * VOLATILE goto_targ INIT(Nullch); /* cmd_exec gets strange when set */
-
- struct ufuncs {
- int (*uf_val)();
- int (*uf_set)();
- int uf_index;
- };
-
- EXT ARRAY *stack; /* THE STACK */
-
- EXT ARRAY * VOLATILE savestack; /* to save non-local values on */
-
- EXT ARRAY *tosave; /* strings to save on recursive subroutine */
-
- EXT ARRAY *lineary; /* lines of script for debugger */
- EXT ARRAY *dbargs; /* args to call listed by caller function */
-
- EXT ARRAY *fdpid; /* keep fd-to-pid mappings for mypopen */
- EXT HASH *pidstatus; /* keep pid-to-status mappings for waitpid */
-
- EXT int *di; /* for tmp use in debuggers */
- EXT char *dc;
- EXT short *ds;
-
- /* Fix these up for __STDC__ */
- EXT time_t basetime INIT(0);
- char *mktemp();
- #ifndef STANDARD_C
- /* All of these are in stdlib.h or time.h for ANSI C */
- double atof();
- long time();
- struct tm *gmtime(), *localtime();
- char *index(), *rindex();
- char *strcpy(), *strcat();
- #endif /* ! STANDARD_C */
-
- #ifdef EUNICE
- #define UNLINK unlnk
- int unlnk();
- #else
- #define UNLINK unlink
- #endif
-
- #ifndef HAS_SETREUID
- #ifdef HAS_SETRESUID
- #define setreuid(r,e) setresuid(r,e,-1)
- #define HAS_SETREUID
- #endif
- #endif
- #ifndef HAS_SETREGID
- #ifdef HAS_SETRESGID
- #define setregid(r,e) setresgid(r,e,-1)
- #define HAS_SETREGID
- #endif
- #endif
-
- #define SCAN_DEF 0
- #define SCAN_TR 1
- #define SCAN_REPL 2
- ==================== config.h
- #ifndef config_h
- #define config_h
- /* config.h
- * This file was produced by running the config.h.SH script, which
- * gets its values from config.sh, which is generally produced by
- * running Configure.
- *
- * Feel free to modify any of this as the need arises. Note, however,
- * that running config.h.SH again will wipe out any changes you've made.
- * For a more permanent change edit config.sh and rerun config.h.SH.
- */
- /*SUPPRESS 460*/
-
-
- /* EUNICE
- * This symbol, if defined, indicates that the program is being compiled
- * under the EUNICE package under VMS. The program will need to handle
- * things like files that don't go away the first time you unlink them,
- * due to version numbering. It will also need to compensate for lack
- * of a respectable link() command.
- */
- /* VMS
- * This symbol, if defined, indicates that the program is running under
- * VMS. It is currently only set in conjunction with the EUNICE symbol.
- */
- /*#undef EUNICE /**/
- /*#undef VMS /**/
-
- /* LOC_SED
- * This symbol holds the complete pathname to the sed program.
- */
- #define LOC_SED "/usr/bin/sed" /**/
-
- /* ALIGNBYTES
- * This symbol contains the number of bytes required to align a double.
- * Usual values are 2, 4, and 8.
- */
- #define ALIGNBYTES 8 /**/
-
- /* BIN
- * This symbol holds the name of the directory in which the user wants
- * to keep publicly executable images for the package in question. It
- * is most often a local directory such as /usr/local/bin.
- */
- #define BIN "/usr/local/bin" /**/
-
- /* BYTEORDER
- * This symbol contains an encoding of the order of bytes in a long.
- * Usual values (in hex) are 0x1234, 0x4321, 0x2143, 0x3412...
- */
- #define BYTEORDER 0x4321 /**/
-
- /* CPPSTDIN
- * This symbol contains the first part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. Typical value of "cc -E" or "/lib/cpp".
- */
- /* CPPMINUS
- * This symbol contains the second part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. This symbol will have the value "-" if CPPSTDIN needs a minus
- * to specify standard input, otherwise the value is "".
- */
- #define CPPSTDIN "cppstdin"
- #define CPPMINUS ""
-
- /* HAS_BCMP
- * This symbol, if defined, indicates that the bcmp routine is available
- * to compare blocks of memory. If undefined, use memcmp. If that's
- * not available, roll your own.
- */
- /*#undef HAS_BCMP /**/
-
- /* HAS_BCOPY
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy blocks of memory. Otherwise you should probably use memcpy().
- * If neither is defined, roll your own.
- */
- /* SAFE_BCOPY
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping copy blocks of bcopy. Otherwise you
- * should probably use memmove() or memcpy(). If neither is defined,
- * roll your own.
- */
- /*#undef HAS_BCOPY /**/
- /*#undef SAFE_BCOPY /**/
-
- /* HAS_BZERO
- * This symbol, if defined, indicates that the bzero routine is available
- * to zero blocks of memory. Otherwise you should probably use memset()
- * or roll your own.
- */
- /*#undef HAS_BZERO /**/
-
- /* CASTNEGFLOAT
- * This symbol, if defined, indicates that this C compiler knows how to
- * cast negative or large floating point numbers to unsigned longs, ints
- * and shorts.
- */
- /* CASTFLAGS
- * This symbol contains flags that say what difficulties the compiler
- * has casting odd floating values to unsigned long:
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- */
- #define CASTNEGFLOAT /**/
- #define CASTFLAGS 0 /**/
-
- /* CHARSPRINTF
- * This symbol is defined if this system declares "char *sprintf()" in
- * stdio.h. The trend seems to be to declare it as "int sprintf()". It
- * is up to the package author to declare sprintf correctly based on the
- * symbol.
- */
- /*#undef CHARSPRINTF /**/
-
- /* HAS_CHSIZE
- * This symbol, if defined, indicates that the chsize routine is available
- * to truncate files. You might need a -lx to get this routine.
- */
- /*#undef HAS_CHSIZE /**/
-
- /* HAS_CRYPT
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
- #define HAS_CRYPT /**/
-
- /* CSH
- * This symbol, if defined, indicates that the C-shell exists.
- * If defined, contains the full pathname of csh.
- */
- #define CSH "/usr/bin/csh" /**/
-
- /* DOSUID
- * This symbol, if defined, indicates that the C program should
- * check the script that it is executing for setuid/setgid bits, and
- * attempt to emulate setuid/setgid on systems that have disabled
- * setuid #! scripts because the kernel can't do it securely.
- * It is up to the package designer to make sure that this emulation
- * is done securely. Among other things, it should do an fstat on
- * the script it just opened to make sure it really is a setuid/setgid
- * script, it should make sure the arguments passed correspond exactly
- * to the argument on the #! line, and it should not trust any
- * subprocesses to which it must pass the filename rather than the
- * file descriptor of the script to be executed.
- */
- /*#undef DOSUID /**/
-
- /* HAS_DUP2
- * This symbol, if defined, indicates that the dup2 routine is available
- * to dup file descriptors. Otherwise you should use dup().
- */
- #define HAS_DUP2 /**/
-
- /* HAS_FCHMOD
- * This symbol, if defined, indicates that the fchmod routine is available
- * to change mode of opened files. If unavailable, use chmod().
- */
- #define HAS_FCHMOD /**/
-
- /* HAS_FCHOWN
- * This symbol, if defined, indicates that the fchown routine is available
- * to change ownership of opened files. If unavailable, use chown().
- */
- #define HAS_FCHOWN /**/
-
- /* HAS_FCNTL
- * This symbol, if defined, indicates to the C program that
- * the fcntl() function exists.
- */
- #define HAS_FCNTL /**/
-
- /* FLEXFILENAMES
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
- #define FLEXFILENAMES /**/
-
- /* HAS_FLOCK
- * This symbol, if defined, indicates that the flock() routine is
- * available to do file locking.
- */
- /*#undef HAS_FLOCK /**/
-
- /* HAS_GETGROUPS
- * This symbol, if defined, indicates that the getgroups() routine is
- * available to get the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
- #define HAS_GETGROUPS /**/
-
- /* HAS_GETHOSTENT
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to lookup host names in some data base or other.
- */
- #define HAS_GETHOSTENT /**/
-
- /* HAS_GETPGRP
- * This symbol, if defined, indicates that the getpgrp() routine is
- * available to get the current process group.
- */
- #define HAS_GETPGRP /**/
-
- /* HAS_GETPGRP2
- * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- * routine is available to get the current process group.
- */
- /*#undef HAS_GETPGRP2 /**/
-
- /* HAS_GETPRIORITY
- * This symbol, if defined, indicates that the getpriority() routine is
- * available to get a process's priority.
- */
- /*#undef HAS_GETPRIORITY /**/
-
- /* HAS_HTONS
- * This symbol, if defined, indicates that the htons routine (and friends)
- * are available to do network order byte swapping.
- */
- /* HAS_HTONL
- * This symbol, if defined, indicates that the htonl routine (and friends)
- * are available to do network order byte swapping.
- */
- /* HAS_NTOHS
- * This symbol, if defined, indicates that the ntohs routine (and friends)
- * are available to do network order byte swapping.
- */
- /* HAS_NTOHL
- * This symbol, if defined, indicates that the ntohl routine (and friends)
- * are available to do network order byte swapping.
- */
- #define HAS_HTONS /**/
- #define HAS_HTONL /**/
- #define HAS_NTOHS /**/
- #define HAS_NTOHL /**/
-
- /* index
- * This preprocessor symbol is defined, along with rindex, if the system
- * uses the strchr and strrchr routines instead.
- */
- /* rindex
- * This preprocessor symbol is defined, along with index, if the system
- * uses the strchr and strrchr routines instead.
- */
- #define index strchr /* cultural */
- #define rindex strrchr /* differences? */
-
- /* HAS_ISASCII
- * This symbol, if defined, indicates that the isascii routine is available
- * to test characters for asciiness.
- */
- #define HAS_ISASCII /**/
-
- /* HAS_KILLPG
- * This symbol, if defined, indicates that the killpg routine is available
- * to kill process groups. If unavailable, you probably should use kill
- * with a negative process number.
- */
- /*#undef HAS_KILLPG /**/
-
- /* HAS_LSTAT
- * This symbol, if defined, indicates that the lstat() routine is
- * available to stat symbolic links.
- */
- #define HAS_LSTAT /**/
-
- /* HAS_MEMCMP
- * This symbol, if defined, indicates that the memcmp routine is available
- * to compare blocks of memory. If undefined, roll your own.
- */
- #define HAS_MEMCMP /**/
-
- /* HAS_MEMCPY
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy blocks of memory. Otherwise you should probably use bcopy().
- * If neither is defined, roll your own.
- */
- /* SAFE_MEMCPY
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping copy blocks of memory. Otherwise you
- * should probably use memmove() or bcopy(). If neither is defined,
- * roll your own.
- */
- #define HAS_MEMCPY /**/
- /*#undef SAFE_MEMCPY /**/
-
- /* HAS_MEMMOVE
- * This symbol, if defined, indicates that the memmove routine is available
- * to move potentially overlapping blocks of memory. Otherwise you
- * should use bcopy() or roll your own.
- */
- #define HAS_MEMMOVE /**/
-
- /* HAS_MEMSET
- * This symbol, if defined, indicates that the memset routine is available
- * to set a block of memory to a character. If undefined, roll your own.
- */
- #define HAS_MEMSET /**/
-
- /* HAS_MKDIR
- * This symbol, if defined, indicates that the mkdir routine is available
- * to create directories. Otherwise you should fork off a new process to
- * exec /bin/mkdir.
- */
- #define HAS_MKDIR /**/
-
- /* HAS_MSG
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported.
- */
- #define HAS_MSG /**/
-
- /* HAS_MSGCTL
- * This symbol, if defined, indicates that the msgctl() routine is
- * available to control message passing.
- */
- #define HAS_MSGCTL /**/
-
- /* HAS_MSGGET
- * This symbol, if defined, indicates that the msgget() routine is
- * available to get messages.
- */
- #define HAS_MSGGET /**/
-
- /* HAS_MSGRCV
- * This symbol, if defined, indicates that the msgrcv() routine is
- * available to receive messages.
- */
- #define HAS_MSGRCV /**/
-
- /* HAS_MSGSND
- * This symbol, if defined, indicates that the msgsnd() routine is
- * available to send messages.
- */
- #define HAS_MSGSND /**/
-
- /* HAS_NDBM
- * This symbol, if defined, indicates that ndbm.h exists and should
- * be included.
- */
- /*#undef HAS_NDBM /**/
-
- /* HAS_ODBM
- * This symbol, if defined, indicates that dbm.h exists and should
- * be included.
- */
- #define HAS_ODBM /**/
-
- /* HAS_OPEN3
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
- #define HAS_OPEN3 /**/
-
- /* HAS_READDIR
- * This symbol, if defined, indicates that the readdir routine is available
- * from the C library to read directories.
- */
- #define HAS_READDIR /**/
-
- /* HAS_RENAME
- * This symbol, if defined, indicates that the rename routine is available
- * to rename files. Otherwise you should do the unlink(), link(), unlink()
- * trick.
- */
- #define HAS_RENAME /**/
-
- /* HAS_REWINDDIR
- * This symbol, if defined, indicates that the rewindir routine is
- * available to rewind directories.
- */
- #define HAS_REWINDDIR /**/
-
- /* HAS_RMDIR
- * This symbol, if defined, indicates that the rmdir routine is available
- * to remove directories. Otherwise you should fork off a new process to
- * exec /bin/rmdir.
- */
- #define HAS_RMDIR /**/
-
- /* HAS_SEEKDIR
- * This symbol, if defined, indicates that the seekdir routine is
- * available to seek into directories.
- */
- #define HAS_SEEKDIR /**/
-
- /* HAS_SELECT
- * This symbol, if defined, indicates that the select() subroutine
- * exists.
- */
- #define HAS_SELECT /**/
-
- /* HAS_SEM
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
- #define HAS_SEM /**/
-
- /* HAS_SEMCTL
- * This symbol, if defined, indicates that the semctl() routine is
- * available to control semaphores.
- */
- #define HAS_SEMCTL /**/
-
- /* HAS_SEMGET
- * This symbol, if defined, indicates that the semget() routine is
- * available to get semaphores ids.
- */
- #define HAS_SEMGET /**/
-
- /* HAS_SEMOP
- * This symbol, if defined, indicates that the semop() routine is
- * available to perform semaphore operations.
- */
- #define HAS_SEMOP /**/
-
- /* HAS_SETEGID
- * This symbol, if defined, indicates that the setegid routine is available
- * to change the effective gid of the current program.
- */
- #define HAS_SETEGID /**/
-
- /* HAS_SETEUID
- * This symbol, if defined, indicates that the seteuid routine is available
- * to change the effective uid of the current program.
- */
- #define HAS_SETEUID /**/
-
- /* HAS_SETPGRP
- * This symbol, if defined, indicates that the setpgrp() routine is
- * available to set the current process group.
- */
- #define HAS_SETPGRP /**/
-
- /* HAS_SETPGRP2
- * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- * routine is available to set the current process group.
- */
- /*#undef HAS_SETPGRP2 /**/
-
- /* HAS_SETPRIORITY
- * This symbol, if defined, indicates that the setpriority() routine is
- * available to set a process's priority.
- */
- /*#undef HAS_SETPRIORITY /**/
-
- /* HAS_SETREGID
- * This symbol, if defined, indicates that the setregid routine is
- * available to change the real and effective gid of the current program.
- */
- /* HAS_SETRESGID
- * This symbol, if defined, indicates that the setresgid routine is
- * available to change the real, effective and saved gid of the current
- * program.
- */
- /*#undef HAS_SETREGID /**/
- /*#undef HAS_SETRESGID /**/
-
- /* HAS_SETREUID
- * This symbol, if defined, indicates that the setreuid routine is
- * available to change the real and effective uid of the current program.
- */
- /* HAS_SETRESUID
- * This symbol, if defined, indicates that the setresuid routine is
- * available to change the real, effective and saved uid of the current
- * program.
- */
- /*#undef HAS_SETREUID /**/
- /*#undef HAS_SETRESUID /**/
-
- /* HAS_SETRGID
- * This symbol, if defined, indicates that the setrgid routine is available
- * to change the real gid of the current program.
- */
- /*#undef HAS_SETRGID /**/
-
- /* HAS_SETRUID
- * This symbol, if defined, indicates that the setruid routine is available
- * to change the real uid of the current program.
- */
- /*#undef HAS_SETRUID /**/
-
- /* HAS_SHM
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
- #define HAS_SHM /**/
-
- /* HAS_SHMAT
- * This symbol, if defined, indicates that the shmat() routine is
- * available to attach a shared memory segment.
- */
- /* VOID_SHMAT
- * This symbol, if defined, indicates that the shmat() routine
- * returns a pointer of type void*.
- */
- #define HAS_SHMAT /**/
-
- #define VOIDSHMAT /**/
-
- /* HAS_SHMCTL
- * This symbol, if defined, indicates that the shmctl() routine is
- * available to control a shared memory segment.
- */
- #define HAS_SHMCTL /**/
-
- /* HAS_SHMDT
- * This symbol, if defined, indicates that the shmdt() routine is
- * available to detach a shared memory segment.
- */
- #define HAS_SHMDT /**/
-
- /* HAS_SHMGET
- * This symbol, if defined, indicates that the shmget() routine is
- * available to get a shared memory segment id.
- */
- #define HAS_SHMGET /**/
-
- /* HAS_SOCKET
- * This symbol, if defined, indicates that the BSD socket interface is
- * supported.
- */
- /* HAS_SOCKETPAIR
- * This symbol, if defined, indicates that the BSD socketpair call is
- * supported.
- */
- /* OLDSOCKET
- * This symbol, if defined, indicates that the 4.1c BSD socket interface
- * is supported instead of the 4.2/4.3 BSD socket interface.
- */
- #define HAS_SOCKET /**/
-
- #define HAS_SOCKETPAIR /**/
-
- /*#undef OLDSOCKET /**/
-
- /* STATBLOCKS
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
- #define STATBLOCKS /**/
-
- /* STDSTDIO
- * This symbol is defined if this system has a FILE structure declaring
- * _ptr and _cnt in stdio.h.
- */
- #define STDSTDIO /**/
-
- /* STRUCTCOPY
- * This symbol, if defined, indicates that this C compiler knows how
- * to copy structures. If undefined, you'll need to use a block copy
- * routine of some sort instead.
- */
- #define STRUCTCOPY /**/
-
- /* HAS_STRERROR
- * This symbol, if defined, indicates that the strerror() routine is
- * available to translate error numbers to strings.
- */
- #define HAS_STRERROR /**/
-
- /* HAS_SYMLINK
- * This symbol, if defined, indicates that the symlink routine is available
- * to create symbolic links.
- */
- #define HAS_SYMLINK /**/
-
- /* HAS_SYSCALL
- * This symbol, if defined, indicates that the syscall routine is available
- * to call arbitrary system calls. If undefined, that's tough.
- */
- #define HAS_SYSCALL /**/
-
- /* HAS_TELLDIR
- * This symbol, if defined, indicates that the telldir routine is
- * available to tell your location in directories.
- */
- #define HAS_TELLDIR /**/
-
- /* HAS_TRUNCATE
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
- #define HAS_TRUNCATE /**/
-
- /* HAS_VFORK
- * This symbol, if defined, indicates that vfork() exists.
- */
- #define HAS_VFORK /**/
-
- /* VOIDSIG
- * This symbol is defined if this system declares "void (*signal())()" in
- * signal.h. The old way was to declare it as "int (*signal())()". It
- * is up to the package author to declare things correctly based on the
- * symbol.
- */
- /* TO_SIGNAL
- * This symbol's value is either "void" or "int", corresponding to the
- * appropriate return "type" of a signal handler. Thus, one can declare
- * a signal handler using "TO_SIGNAL (*handler())()", and define the
- * handler using "TO_SIGNAL handler(sig)".
- */
- #define VOIDSIG /**/
- #define TO_SIGNAL int /**/
-
- /* HASVOLATILE
- * This symbol, if defined, indicates that this C compiler knows about
- * the volatile declaration.
- */
- #define HASVOLATILE /**/
-
- /* HAS_VPRINTF
- * This symbol, if defined, indicates that the vprintf routine is available
- * to printf with a pointer to an argument list. If unavailable, you
- * may need to write your own, probably in terms of _doprnt().
- */
- /* CHARVSPRINTF
- * This symbol is defined if this system has vsprintf() returning type
- * (char*). The trend seems to be to declare it as "int vsprintf()". It
- * is up to the package author to declare vsprintf correctly based on the
- * symbol.
- */
- #define HAS_VPRINTF /**/
- /*#undef CHARVSPRINTF /**/
-
- /* HAS_WAIT4
- * This symbol, if defined, indicates that wait4() exists.
- */
- /*#undef HAS_WAIT4 /**/
-
- /* HAS_WAITPID
- * This symbol, if defined, indicates that waitpid() exists.
- */
- #define HAS_WAITPID /**/
-
- /* GIDTYPE
- * This symbol has a value like gid_t, int, ushort, or whatever type is
- * used to declare group ids in the kernel.
- */
- #define GIDTYPE gid_t /**/
-
- /* GROUPSTYPE
- * This symbol has a value like gid_t, int, ushort, or whatever type is
- * used in the return value of getgroups().
- */
- #define GROUPSTYPE int /**/
-
- /* I_FCNTL
- * This manifest constant tells the C program to include <fcntl.h>.
- */
- #define I_FCNTL /**/
-
- /* I_GDBM
- * This symbol, if defined, indicates that gdbm.h exists and should
- * be included.
- */
- /*#undef I_GDBM /**/
-
- /* I_GRP
- * This symbol, if defined, indicates to the C program that it should
- * include grp.h.
- */
- #define I_GRP /**/
-
- /* I_NETINET_IN
- * This symbol, if defined, indicates to the C program that it should
- * include netinet/in.h.
- */
- /* I_SYS_IN
- * This symbol, if defined, indicates to the C program that it should
- * include sys/in.h.
- */
- #define I_NETINET_IN /**/
- /*#undef I_SYS_IN /**/
-
- /* I_PWD
- * This symbol, if defined, indicates to the C program that it should
- * include pwd.h.
- */
- /* PWQUOTA
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_quota.
- */
- /* PWAGE
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_age.
- */
- /* PWCHANGE
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_change.
- */
- /* PWCLASS
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_class.
- */
- /* PWEXPIRE
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_expire.
- */
- /* PWCOMMENT
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_comment.
- */
- #define I_PWD /**/
- /*#undef PWQUOTA /**/
- #define PWAGE /**/
- /*#undef PWCHANGE /**/
- /*#undef PWCLASS /**/
- /*#undef PWEXPIRE /**/
- #define PWCOMMENT /**/
-
- /* I_SYS_FILE
- * This manifest constant tells the C program to include <sys/file.h>.
- */
- /*#undef I_SYS_FILE /**/
-
- /* I_SYSIOCTL
- * This symbol, if defined, indicates that sys/ioctl.h exists and should
- * be included.
- */
- #define I_SYSIOCTL /**/
-
- /* I_TIME
- * This symbol is defined if the program should include <time.h>.
- */
- /* I_SYS_TIME
- * This symbol is defined if the program should include <sys/time.h>.
- */
- /* SYSTIMEKERNEL
- * This symbol is defined if the program should include <sys/time.h>
- * with KERNEL defined.
- */
- /* I_SYS_SELECT
- * This symbol is defined if the program should include <sys/select.h>.
- */
- /*#undef I_TIME /**/
- #define I_SYS_TIME /**/
- /*#undef SYSTIMEKERNEL /**/
- /*#undef I_SYS_SELECT /**/
-
- /* I_UTIME
- * This symbol, if defined, indicates to the C program that it should
- * include utime.h.
- */
- #define I_UTIME /**/
-
- /* I_VARARGS
- * This symbol, if defined, indicates to the C program that it should
- * include varargs.h.
- */
- #define I_VARARGS /**/
-
- /* I_VFORK
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
- /*#undef I_VFORK /**/
-
- /* INTSIZE
- * This symbol contains the size of an int, so that the C preprocessor
- * can make decisions based on it.
- */
- #define INTSIZE 4 /**/
-
- /* I_DIRENT
- * This symbol, if defined, indicates that the program should use the
- * P1003-style directory routines, and include <dirent.h>.
- */
- /* I_SYS_DIR
- * This symbol, if defined, indicates that the program should use the
- * directory functions by including <sys/dir.h>.
- */
- /* I_NDIR
- * This symbol, if defined, indicates that the program should include the
- * system's version of ndir.h, rather than the one with this package.
- */
- /* I_SYS_NDIR
- * This symbol, if defined, indicates that the program should include the
- * system's version of sys/ndir.h, rather than the one with this package.
- */
- /* I_MY_DIR
- * This symbol, if defined, indicates that the program should compile
- * the ndir.c code provided with the package.
- */
- /* DIRNAMLEN
- * This symbol, if defined, indicates to the C program that the length
- * of directory entry names is provided by a d_namlen field. Otherwise
- * you need to do strlen() on the d_name field.
- */
- #define I_DIRENT /**/
- /*#undef I_SYS_DIR /**/
- /*#undef I_NDIR /**/
- /*#undef I_SYS_NDIR /**/
- /*#undef I_MY_DIR /**/
- /*#undef DIRNAMLEN /**/
-
- /* MYMALLOC
- * This symbol, if defined, indicates that we're using our own malloc.
- */
- /* MALLOCPTRTYPE
- * This symbol defines the kind of ptr returned by malloc and realloc.
- */
- /*#undef MYMALLOC /**/
-
- #define MALLOCPTRTYPE void /**/
-
-
- /* RANDBITS
- * This symbol contains the number of bits of random number the rand()
- * function produces. Usual values are 15, 16, and 31.
- */
- #define RANDBITS 15 /**/
-
- /* SCRIPTDIR
- * This symbol holds the name of the directory in which the user wants
- * to keep publicly executable scripts for the package in question. It
- * is often a directory that is mounted across diverse architectures.
- */
- #define SCRIPTDIR "/usr/local/lib/perl" /**/
-
- /* SIG_NAME
- * This symbol contains an list of signal names in order.
- */
- #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" /**/
-
- /* STDCHAR
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
- #define STDCHAR unsigned char /**/
-
- /* UIDTYPE
- * This symbol has a value like uid_t, int, ushort, or whatever type is
- * used to declare user ids in the kernel.
- */
- #define UIDTYPE uid_t /**/
-
- /* VOIDHAVE
- * This symbol indicates how much support of the void type is given by this
- * compiler. What various bits mean:
- *
- * 1 = supports declaration of void
- * 2 = supports arrays of pointers to functions returning void
- * 4 = supports comparisons between pointers to void functions and
- * addresses of void functions
- *
- * The package designer should define VOIDWANT to indicate the requirements
- * of the package. This can be done either by #defining VOIDWANT before
- * including config.h, or by defining voidwant in Myinit.U. If the level
- * of void support necessary is not present, config.h defines void to "int",
- * VOID to the empty string, and VOIDP to "char *".
- */
- /* void
- * This symbol is used for void casts. On implementations which support
- * void appropriately, its value is "void". Otherwise, its value maps
- * to "int".
- */
- /* VOID
- * This symbol's value is "void" if the implementation supports void
- * appropriately. Otherwise, its value is the empty string. The primary
- * use of this symbol is in specifying void parameter lists for function
- * prototypes.
- */
- /* VOIDP
- * This symbol is used for casting generic pointers. On implementations
- * which support void appropriately, its value is "void *". Otherwise,
- * its value is "char *".
- */
- #ifndef VOIDWANT
- #define VOIDWANT 7
- #endif
- #define VOIDHAVE 7
- #if (VOIDHAVE & VOIDWANT) != VOIDWANT
- #define void int /* is void to be avoided? */
- #define VOID
- #define VOIDP (char *)
- #define M_VOID /* Xenix strikes again */
- #else
- #define VOID void
- #define VOIDP (void *)
- #endif
-
- /* PRIVLIB
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- */
- #define PRIVLIB "/usr/local/lib/perl" /**/
-
- #endif
-
-
- --
- +*************************************************************************+
- * Dana Chee (201) 829-4488 *
- * Bellcore *
- * Room 2P-298 *
- * 445 South Street ARPA: dana@bellcore.com *
- * Morristown, NJ 07960-1910 UUCP: {gateways}!bellcore!dana *
- +*************************************************************************+
-