From: Larry Wall Date: Mon, 8 Jun 1992 04:49:46 +0000 (+0000) Subject: perl 4.0 patch 24: patch #20, continued X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=1d4d38c37d3c694b3c50c8fd57f5afcdb93c1ffe;p=p5sagit%2Fp5-mst-13.2.git perl 4.0 patch 24: patch #20, continued See patch #20. --- diff --git a/atarist/echo.c b/atarist/echo.c new file mode 100644 index 0000000..0853d62 --- /dev/null +++ b/atarist/echo.c @@ -0,0 +1,98 @@ +/* + * echo args, globbing is necessary. + * usage: + * echo [-n] [args ...] + * \n \r \b \c \v \\ \f \t \NNN escapes supported + * -n and \c mean dont echo the final newline. + * + * ++jrb bammi@cadence.com + */ + +#include + +#if __STDC__ +# include +#else +# define __PROTO(X) () +#endif + +char **glob __PROTO((char *patt, int decend_dir)); +int contains_wild __PROTO((char *patt)); +void free_all __PROTO((void)); + + +int final_newline = 1; /* turned off by -n or \c */ + +int main(argc, argv) +int argc; +char **argv; +{ + --argc; ++argv; + if((*argv)[0] == '-') + { + if ((*argv)[1] == 'n') + final_newline = 0; + else + { + fputs("usage: echo [-n] [arguement ... ]\n", stderr); + return 1; + } + --argc; ++argv; + } + + while(argc--) + { + char *word = *argv; + char **list; + + if(contains_wild(word) && (list = glob(word, 0))) + { + while(*list) + { + fputs(*list, stdout); + if(*++list) putchar(' '); + } + free_all(); + } + else + { + char c; + for(c = *word; c; c = (*word)? *++word : 0) + { + if(c != '\\') + putchar(c); + else + { + switch(*++word) + { + case 'b': putchar('\b'); break; + case 'f': putchar('\f'); break; + case 'n': putchar('\n'); break; + case 'r': putchar('\r'); break; + case 't': putchar('\t'); break; + case 'v': putchar('\v'); break; + case '\\': putchar('\\'); break; + case 'c': final_newline = 0; break; + default: putchar(*word); /* ?? */ + case '0': + { + int n = 0; + for(c = *++word; (c >= '0') && (c <= '7'); c = *++word) + n = (n << 3) + (c - '0'); + putchar(n); + } + } + } + } + } + if(*++argv) putchar(' '); + } + if(final_newline) putchar('\n'); + return 0; +} + + + + + + diff --git a/os2/config.h b/os2/config.h index 6a707ac..b37cf5e 100644 --- a/os2/config.h +++ b/os2/config.h @@ -1,102 +1,142 @@ +/* manually edited version for OS/2 with MS C 6.00 + check the HAS_?DBM symbols and if you have such a library ... + June 1991, Kai Uwe Rommel */ + +#ifndef config_h +#define config_h /* config.h - * This file was hand tailored for compiling under MS-DOS and MSC 5.1. - * Diomidis Spinellis, March 1990. + * This file was produced by running the config.h.SH script, which + * gets its values from config.sh, which is generally produced by + * running Configure. * - * Then it got mangled again for compiling under OS/2 and MSC 6.0. - * Raymond Chen, June 1990. + * Feel free to modify any of this as the need arises. Note, however, + * that running config.h.SH again will wipe out any changes you've made. + * For a more permanent change edit config.sh and rerun config.h.SH. */ -#define OS2 /**/ + +#define OS2 /* OS/2 supports some additional things MS-DOS doesn't. */ -#ifdef OS2 -#define PIPE -#define GETPPID -#define HAS_GETPRIORITY -#define HAS_SETPRIORITY -#define KILL -#endif /* OS2 */ +#define S_ISUID 0 +#define S_ISGID 0 -/* SUFFIX: - * This symbol, if defined, indicates that the function add_suffix has - * been supplied in a system-dependent .c file. This function is - * recommended for operating systems whose filenaming conventions - * do not permit arbitrary strings as filenames. - */ -#define SUFFIX /**/ +#define HAS_ALARM +#define HAS_GETPPID +#define HAS_PIPE +#define HAS_KILL +#define HAS_WAIT +#define HAS_UMASK +#define HAS_GDBM -/* EUNICE: +/* EUNICE * This symbol, if defined, indicates that the program is being compiled * under the EUNICE package under VMS. The program will need to handle * things like files that don't go away the first time you unlink them, * due to version numbering. It will also need to compensate for lack * of a respectable link() command. */ -/* VMS: +/* VMS * This symbol, if defined, indicates that the program is running under * VMS. It is currently only set in conjunction with the EUNICE symbol. */ /*#undef EUNICE /**/ /*#undef VMS /**/ -/* BIN: +/* ALIGNBYTES + * This symbol contains the number of bytes required to align a double. + * Usual values are 2, 4, and 8. + */ +#define ALIGNBYTES 2 /**/ + +/* BIN * This symbol holds the name of the directory in which the user wants - * to put publicly executable images for the package in question. It + * to keep publicly executable images for the package in question. It * is most often a local directory such as /usr/local/bin. */ -#define BIN "/usr/local/bin" /**/ +#define BIN "c:/bin" /**/ -/* BYTEORDER: +/* BYTEORDER * This symbol contains an encoding of the order of bytes in a long. * Usual values (in octal) are 01234, 04321, 02143, 03412... */ -/* CHECK */ #define BYTEORDER 0x1234 /**/ -/* CPPSTDIN: +/* CPPSTDIN * This symbol contains the first part of the string which will invoke * the C preprocessor on the standard input and produce to standard - * output. Typical value of "cc -{" or "/lib/cpp". + * output. Typical value of "cc -E" or "/lib/cpp". */ -/* CPPMINUS: +/* CPPMINUS * This symbol contains the second part of the string which will invoke * the C preprocessor on the standard input and produce to standard * output. This symbol will have the value "-" if CPPSTDIN needs a minus * to specify standard input, otherwise the value is "". */ -/* TODO */ -#define CPPSTDIN "cc -{" +#define CPPSTDIN "cpp -P" #define CPPMINUS "" -/* HAS_BCMP: +/* HAS_BCMP * This symbol, if defined, indicates that the bcmp routine is available * to compare blocks of memory. If undefined, use memcmp. If that's * not available, roll your own. */ -/*#define HAS_BCMP /**/ +/* #define HAS_BCMP /**/ -/* HAS_BCOPY: +/* HAS_BCOPY * This symbol, if defined, indicates that the bcopy routine is available * to copy blocks of memory. Otherwise you should probably use memcpy(). */ -/*#define HAS_BCOPY /**/ +/* #define HAS_BCOPY /**/ -/* CHARSPRINTF: +/* HAS_BZERO + * This symbol, if defined, indicates that the bzero routine is available + * to zero blocks of memory. Otherwise you should probably use memset() + * or roll your own. + */ +/* #define HAS_BZERO /**/ + +/* CASTNEGFLOAT + * This symbol, if defined, indicates that this C compiler knows how to + * cast negative or large floating point numbers to unsigned longs, ints + * and shorts. + */ +/* CASTFLAGS + * This symbol contains flags that say what difficulties the compiler + * has casting odd floating values to unsigned long: + * 1 = couldn't cast < 0 + * 2 = couldn't cast >= 0x80000000 + */ +#define CASTNEGFLOAT /**/ +#define CASTFLAGS 1 /**/ + +/* CHARSPRINTF * This symbol is defined if this system declares "char *sprintf()" in * stdio.h. The trend seems to be to declare it as "int sprintf()". It * is up to the package author to declare sprintf correctly based on the * symbol. */ -/*#define CHARSPRINTF /**/ +/* #define CHARSPRINTF /**/ -/* HAS_CRYPT: +/* HAS_CHSIZE + * This symbol, if defined, indicates that the chsize routine is available + * to truncate files. You might need a -lx to get this routine. + */ +#undef HAS_CHSIZE /**/ + +/* HAS_CRYPT * This symbol, if defined, indicates that the crypt routine is available * to encrypt passwords and the like. */ -/* TODO */ -/*#define HAS_CRYPT /**/ +#define HAS_CRYPT /**/ -/* DOSUID: +/* CSH + * This symbol, if defined, indicates that the C-shell exists. + * If defined, contains the full pathname of csh. + */ +/* #define CSH "/bin/csh" /**/ + +/* DOSUID * This symbol, if defined, indicates that the C program should * check the script that it is executing for setuid/setgid bits, and * attempt to emulate setuid/setgid on systems that have disabled @@ -109,412 +149,704 @@ * subprocesses to which it must pass the filename rather than the * file descriptor of the script to be executed. */ -/*#define DOSUID /**/ +/*#undef DOSUID /**/ -/* HAS_DUP2: +/* HAS_DUP2 * This symbol, if defined, indicates that the dup2 routine is available * to dup file descriptors. Otherwise you should use dup(). */ #define HAS_DUP2 /**/ -/* HAS_FCHMOD: +/* HAS_FCHMOD * This symbol, if defined, indicates that the fchmod routine is available * to change mode of opened files. If unavailable, use chmod(). */ -/*#define HAS_FCHMOD /**/ +/* #define HAS_FCHMOD /**/ -/* HAS_FCHOWN: +/* HAS_FCHOWN * This symbol, if defined, indicates that the fchown routine is available * to change ownership of opened files. If unavailable, use chown(). */ -/*#define HAS_FCHOWN /**/ +/* #define HAS_FCHOWN /**/ -/* I_FCNTL: - * This symbol, if defined, indicates to the C program that it should - * include fcntl.h. +/* HAS_FCNTL + * This symbol, if defined, indicates to the C program that + * the fcntl() function exists. + */ +/* #define HAS_FCNTL /**/ + +/* FLEXFILENAMES + * This symbol, if defined, indicates that the system supports filenames + * longer than 14 characters. */ -/*#define I_FCNTL /**/ +#define FLEXFILENAMES /**/ -/* HAS_FLOCK: +/* HAS_FLOCK * This symbol, if defined, indicates that the flock() routine is * available to do file locking. */ -/*#define HAS_FLOCK /**/ +/* #define HAS_FLOCK /**/ -/* HAS_GETGROUPS: +/* HAS_GETGROUPS * This symbol, if defined, indicates that the getgroups() routine is * available to get the list of process groups. If unavailable, multiple * groups are probably not supported. */ -/*#define HAS_GETGROUPS /**/ +/* #define HAS_GETGROUPS /**/ -/* HAS_GETHOSTENT: +/* HAS_GETHOSTENT * This symbol, if defined, indicates that the gethostent() routine is * available to lookup host names in some data base or other. */ -/*#define HAS_GETHOSTENT /**/ +/*#undef HAS_GETHOSTENT /**/ -/* HAS_GETPGRP: +/* HAS_GETPGRP * This symbol, if defined, indicates that the getpgrp() routine is * available to get the current process group. */ -/*#define HAS_GETPGRP /**/ +/* #define HAS_GETPGRP /**/ -/* HAS_GETPRIORITY: +/* HAS_GETPGRP2 + * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX) + * routine is available to get the current process group. + */ +/*#undef HAS_GETPGRP2 /**/ + +/* HAS_GETPRIORITY * This symbol, if defined, indicates that the getpriority() routine is * available to get a process's priority. */ -/*#define HAS_GETPRIORITY /**/ +#define HAS_GETPRIORITY /**/ -/* HAS_HTONS: +/* HAS_HTONS * This symbol, if defined, indicates that the htons routine (and friends) * are available to do network order byte swapping. */ -/* HAS_HTONL: +/* HAS_HTONL * This symbol, if defined, indicates that the htonl routine (and friends) * are available to do network order byte swapping. */ -/* HAS_NTOHS: +/* HAS_NTOHS * This symbol, if defined, indicates that the ntohs routine (and friends) * are available to do network order byte swapping. */ -/* HAS_NTOHL: +/* HAS_NTOHL * This symbol, if defined, indicates that the ntohl routine (and friends) * are available to do network order byte swapping. */ -/*#define HAS_HTONS /**/ -/*#define HAS_HTONL /**/ -/*#define HAS_NTOHS /**/ -/*#define HAS_NTOHL /**/ +/* #define HAS_HTONS /**/ +/* #define HAS_HTONL /**/ +/* #define HAS_NTOHS /**/ +/* #define HAS_NTOHL /**/ -/* index: +/* index * This preprocessor symbol is defined, along with rindex, if the system * uses the strchr and strrchr routines instead. */ -/* rindex: +/* rindex * This preprocessor symbol is defined, along with index, if the system * uses the strchr and strrchr routines instead. */ #define index strchr /* cultural */ #define rindex strrchr /* differences? */ -/* I_SYSIOCTL: - * This symbol, if defined, indicates that sys/ioctl.h exists and should - * be included. +/* HAS_ISASCII + * This symbol, if defined, indicates that the isascii routine is available + * to test characters for asciiness. */ -/*#define I_SYSIOCTL /**/ +/*#undef HAS_ISASCII /**/ -/* HAS_KILLPG: +/* HAS_KILLPG * This symbol, if defined, indicates that the killpg routine is available * to kill process groups. If unavailable, you probably should use kill * with a negative process number. */ -/*#define HAS_KILLPG /**/ +/* #define HAS_KILLPG /**/ -/* HAS_MEMCMP: +/* HAS_LSTAT + * This symbol, if defined, indicates that the lstat() routine is + * available to stat symbolic links. + */ +/* #define HAS_LSTAT /**/ + +/* HAS_MEMCMP * This symbol, if defined, indicates that the memcmp routine is available * to compare blocks of memory. If undefined, roll your own. */ #define HAS_MEMCMP /**/ -/* HAS_MEMCPY: +/* HAS_MEMCPY * This symbol, if defined, indicates that the memcpy routine is available * to copy blocks of memory. Otherwise you should probably use bcopy(). * If neither is defined, roll your own. */ +/* SAFE_MEMCPY + * This symbol, if defined, indicates that the memcpy routine is available + * to copy potentially overlapping copy blocks of memory. Otherwise you + * should probably use memmove() or bcopy(). If neither is defined, + * roll your own. + */ #define HAS_MEMCPY /**/ +/*#undef SAFE_MEMCPY /**/ + +/* HAS_MEMMOVE + * This symbol, if defined, indicates that the memmove routine is available + * to move potentially overlapping blocks of memory. Otherwise you + * should use bcopy() or roll your own. + */ +/*#undef HAS_MEMMOVE /**/ + +/* HAS_MEMSET + * This symbol, if defined, indicates that the memset routine is available + * to set a block of memory to a character. If undefined, roll your own. + */ +#define HAS_MEMSET /**/ -/* HAS_MKDIR: +/* HAS_MKDIR * This symbol, if defined, indicates that the mkdir routine is available * to create directories. Otherwise you should fork off a new process to * exec /bin/mkdir. */ #define HAS_MKDIR /**/ -/* HAS_NDBM: +/* HAS_MSG + * This symbol, if defined, indicates that the entire msg*(2) library is + * supported. + */ +/* #define HAS_MSG /**/ + +/* HAS_MSGCTL + * This symbol, if defined, indicates that the msgctl() routine is + * available to control message passing. + */ +/* #define HAS_MSGCTL /**/ + +/* HAS_MSGGET + * This symbol, if defined, indicates that the msgget() routine is + * available to get messages. + */ +/* #define HAS_MSGGET /**/ + +/* HAS_MSGRCV + * This symbol, if defined, indicates that the msgrcv() routine is + * available to receive messages. + */ +/* #define HAS_MSGRCV /**/ + +/* HAS_MSGSND + * This symbol, if defined, indicates that the msgsnd() routine is + * available to send messages. + */ +/* #define HAS_MSGSND /**/ + +/* HAS_NDBM * This symbol, if defined, indicates that ndbm.h exists and should * be included. */ -#define HAS_NDBM /**/ +/* #define HAS_NDBM /**/ -/* HAS_ODBM: +/* HAS_ODBM * This symbol, if defined, indicates that dbm.h exists and should * be included. */ -/*#define HAS_ODBM /**/ +/* #define HAS_ODBM /**/ -/* HAS_READDIR: +/* HAS_OPEN3 + * This manifest constant lets the C program know that the three + * argument form of open(2) is available. + */ +#define HAS_OPEN3 /**/ + +/* HAS_READDIR * This symbol, if defined, indicates that the readdir routine is available - * from the C library to create directories. + * from the C library to read directories. */ #define HAS_READDIR /**/ -/* HAS_RENAME: +/* HAS_RENAME * This symbol, if defined, indicates that the rename routine is available * to rename files. Otherwise you should do the unlink(), link(), unlink() * trick. */ #define HAS_RENAME /**/ -/* HAS_RMDIR: +/* HAS_REWINDDIR + * This symbol, if defined, indicates that the rewindir routine is + * available to rewind directories. + */ +#define HAS_REWINDDIR /**/ + +/* HAS_RMDIR * This symbol, if defined, indicates that the rmdir routine is available * to remove directories. Otherwise you should fork off a new process to * exec /bin/rmdir. */ #define HAS_RMDIR /**/ -/* HAS_SETEGID: +/* HAS_SEEKDIR + * This symbol, if defined, indicates that the seekdir routine is + * available to seek into directories. + */ +#define HAS_SEEKDIR /**/ + +/* HAS_SELECT + * This symbol, if defined, indicates that the select() subroutine + * exists. + */ +/* #define HAS_SELECT /**/ + +/* HAS_SEM + * This symbol, if defined, indicates that the entire sem*(2) library is + * supported. + */ +/* #define HAS_SEM /**/ + +/* HAS_SEMCTL + * This symbol, if defined, indicates that the semctl() routine is + * available to control semaphores. + */ +/* #define HAS_SEMCTL /**/ + +/* HAS_SEMGET + * This symbol, if defined, indicates that the semget() routine is + * available to get semaphores ids. + */ +/* #define HAS_SEMGET /**/ + +/* HAS_SEMOP + * This symbol, if defined, indicates that the semop() routine is + * available to perform semaphore operations. + */ +/* #define HAS_SEMOP /**/ + +/* HAS_SETEGID * This symbol, if defined, indicates that the setegid routine is available * to change the effective gid of the current program. */ -/*#define HAS_SETEGID /**/ +/* #define HAS_SETEGID /**/ -/* HAS_SETEUID: +/* HAS_SETEUID * This symbol, if defined, indicates that the seteuid routine is available * to change the effective uid of the current program. */ -/*#define HAS_SETEUID /**/ +/* #define HAS_SETEUID /**/ -/* HAS_SETPGRP: +/* HAS_SETPGRP * This symbol, if defined, indicates that the setpgrp() routine is * available to set the current process group. */ -/*#define HAS_SETPGRP /**/ +/* #define HAS_SETPGRP /**/ -/* HAS_SETPRIORITY: +/* HAS_SETPGRP2 + * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX) + * routine is available to set the current process group. + */ +/*#undef HAS_SETPGRP2 /**/ + +/* HAS_SETPRIORITY * This symbol, if defined, indicates that the setpriority() routine is * available to set a process's priority. */ -/*#define HAS_SETPRIORITY /**/ +#define HAS_SETPRIORITY /**/ -/* HAS_SETREGID: - * This symbol, if defined, indicates that the setregid routine is available - * to change the real and effective gid of the current program. +/* HAS_SETREGID + * This symbol, if defined, indicates that the setregid routine is + * available to change the real and effective gid of the current program. + */ +/* HAS_SETRESGID + * This symbol, if defined, indicates that the setresgid routine is + * available to change the real, effective and saved gid of the current + * program. */ -/*#define HAS_SETREGID /**/ +/* #define HAS_SETREGID /**/ +/*#undef HAS_SETRESGID /**/ -/* HAS_SETREUID: - * This symbol, if defined, indicates that the setreuid routine is available - * to change the real and effective uid of the current program. +/* HAS_SETREUID + * This symbol, if defined, indicates that the setreuid routine is + * available to change the real and effective uid of the current program. */ -/*#define HAS_SETREUID /**/ +/* HAS_SETRESUID + * This symbol, if defined, indicates that the setresuid routine is + * available to change the real, effective and saved uid of the current + * program. + */ +/* #define HAS_SETREUID /**/ +/*#undef HAS_SETRESUID /**/ -/* HAS_SETRGID: +/* HAS_SETRGID * This symbol, if defined, indicates that the setrgid routine is available * to change the real gid of the current program. */ -/*#define HAS_SETRGID /**/ +/* #define HAS_SETRGID /**/ -/* HAS_SETRUID: +/* HAS_SETRUID * This symbol, if defined, indicates that the setruid routine is available * to change the real uid of the current program. */ -/*#define HAS_SETRUID /**/ +/* #define HAS_SETRUID /**/ + +/* HAS_SHM + * This symbol, if defined, indicates that the entire shm*(2) library is + * supported. + */ +/* #define HAS_SHM /**/ + +/* HAS_SHMAT + * This symbol, if defined, indicates that the shmat() routine is + * available to attach a shared memory segment. + */ +/* VOID_SHMAT + * This symbol, if defined, indicates that the shmat() routine + * returns a pointer of type void*. + */ +/* #define HAS_SHMAT /**/ + +/*#undef VOIDSHMAT /**/ + +/* HAS_SHMCTL + * This symbol, if defined, indicates that the shmctl() routine is + * available to control a shared memory segment. + */ +/* #define HAS_SHMCTL /**/ + +/* HAS_SHMDT + * This symbol, if defined, indicates that the shmdt() routine is + * available to detach a shared memory segment. + */ +/* #define HAS_SHMDT /**/ + +/* HAS_SHMGET + * This symbol, if defined, indicates that the shmget() routine is + * available to get a shared memory segment id. + */ +/* #define HAS_SHMGET /**/ -/* HAS_SOCKET: - * This symbol, if defined, indicates that the BSD socket interface is - * supported. +/* HAS_SOCKET + * This symbol, if defined, indicates that the BSD socket interface is + * supported. */ -/* HAS_SOCKETPAIR: - * This symbol, if defined, indicates that the BSD socketpair call is - * supported. +/* HAS_SOCKETPAIR + * This symbol, if defined, indicates that the BSD socketpair call is + * supported. */ -/* OLDSOCKET: - * This symbol, if defined, indicates that the 4.1c BSD socket interface - * is supported instead of the 4.2/4.3 BSD socket interface. +/* OLDSOCKET + * This symbol, if defined, indicates that the 4.1c BSD socket interface + * is supported instead of the 4.2/4.3 BSD socket interface. */ -/*#undef HAS_SOCKET /**/ +/* #define HAS_SOCKET /**/ -/*#undef HAS_SOCKETPAIR /**/ +/* #define HAS_SOCKETPAIR /**/ -/*#undef OLDSOCKET /**/ +/*#undef OLDSOCKET /**/ -/* STATBLOCKS: +/* STATBLOCKS * This symbol is defined if this system has a stat structure declaring * st_blksize and st_blocks. */ -/*#define STATBLOCKS /**/ +/* #define STATBLOCKS /**/ -/* STDSTDIO: +/* STDSTDIO * This symbol is defined if this system has a FILE structure declaring * _ptr and _cnt in stdio.h. */ #define STDSTDIO /**/ -/* STRUCTCOPY: +/* STRUCTCOPY * This symbol, if defined, indicates that this C compiler knows how * to copy structures. If undefined, you'll need to use a block copy * routine of some sort instead. */ #define STRUCTCOPY /**/ -/* HAS_SYMLINK: +/* HAS_STRERROR + * This symbol, if defined, indicates that the strerror() routine is + * available to translate error numbers to strings. + */ +/*#undef HAS_STRERROR /**/ + +/* HAS_SYMLINK * This symbol, if defined, indicates that the symlink routine is available * to create symbolic links. */ -/*#define HAS_SYMLINK /**/ +/* #define HAS_SYMLINK /**/ -/* HAS_SYSCALL: +/* HAS_SYSCALL * This symbol, if defined, indicates that the syscall routine is available * to call arbitrary system calls. If undefined, that's tough. */ -/*#define HAS_SYSCALL /**/ +/* #define HAS_SYSCALL /**/ -/* s_tm: - * This symbol is defined if this system declares "struct tm" in - * in rather than . We can't just say - * -I/usr/include/sys because some systems have both time files, and - * the -I trick gets the wrong one. - */ -/* I_SYS_TIME: - * This symbol is defined if this system has the file . - */ -/* - * I_TIME: - * This symbol is defined if time this system has the file . +/* HAS_TELLDIR + * This symbol, if defined, indicates that the telldir routine is + * available to tell your location in directories. */ -/*#undef s_tm /**/ -/*#define I_SYS_TIME /**/ -#define I_TIME +#define HAS_TELLDIR /**/ -/* VARARGS: - * This symbol, if defined, indicates to the C program that it should - * include varargs.h. +/* HAS_TRUNCATE + * This symbol, if defined, indicates that the truncate routine is + * available to truncate files. */ -#define VARARGS /**/ +/* #define HAS_TRUNCATE /**/ -/* vfork: - * This symbol, if defined, remaps the vfork routine to fork if the - * vfork() routine isn't supported here. +/* HAS_VFORK + * This symbol, if defined, indicates that vfork() exists. */ -/*#undef vfork fork /**/ +/* #define HAS_VFORK /**/ -/* VOIDSIG: +/* VOIDSIG * This symbol is defined if this system declares "void (*signal())()" in * signal.h. The old way was to declare it as "int (*signal())()". It * is up to the package author to declare things correctly based on the * symbol. */ +/* TO_SIGNAL + * This symbol's value is either "void" or "int", corresponding to the + * appropriate return "type" of a signal handler. Thus, one can declare + * a signal handler using "TO_SIGNAL (*handler())()", and define the + * handler using "TO_SIGNAL handler(sig)". + */ #define VOIDSIG /**/ +#define TO_SIGNAL void /**/ + +/* HASVOLATILE + * This symbol, if defined, indicates that this C compiler knows about + * the volatile declaration. + */ +#define HASVOLATILE /**/ -/* HAS_VPRINTF: +/* HAS_VPRINTF * This symbol, if defined, indicates that the vprintf routine is available * to printf with a pointer to an argument list. If unavailable, you * may need to write your own, probably in terms of _doprnt(). */ -/* CHARVSPRINTF: +/* CHARVSPRINTF * This symbol is defined if this system has vsprintf() returning type * (char*). The trend seems to be to declare it as "int vsprintf()". It * is up to the package author to declare vsprintf correctly based on the * symbol. */ -#define HAS_VPRINTF /**/ -/*#undef CHARVSPRINTF /**/ +#define HAS_VPRINTF /**/ +/* #define CHARVSPRINTF /**/ -/* GIDTYPE: +/* HAS_WAIT4 + * This symbol, if defined, indicates that wait4() exists. + */ +/* #define HAS_WAIT4 /**/ + +/* HAS_WAITPID + * This symbol, if defined, indicates that waitpid() exists. + */ +#define HAS_WAITPID /**/ + +/* GIDTYPE * This symbol has a value like gid_t, int, ushort, or whatever type is * used to declare group ids in the kernel. */ -/* TODO */ #define GIDTYPE int /**/ -/* I_DIRENT: - * This symbol, if defined, indicates to the C program that it should - * include dirent.h. +/* GROUPSTYPE + * This symbol has a value like gid_t, int, ushort, or whatever type is + * used in the return value of getgroups(). */ -/* DIRNAMLEN: - * This symbol, if defined, indicates to the C program that the length - * of directory entry names is provided by a d_namlen field. Otherwise - * you need to do strlen() on the d_name field. +#define GROUPSTYPE int /**/ + +/* I_FCNTL + * This manifest constant tells the C program to include . */ -/*#undef I_DIRENT /**/ -#define DIRNAMLEN /**/ +/*#undef I_FCNTL /**/ -/* I_FCNTL: - * This symbol, if defined, indicates to the C program that it should - * include fcntl.h. +/* I_GDBM + * This symbol, if defined, indicates that gdbm.h exists and should + * be included. */ -/*#define I_FCNTL /**/ +#define I_GDBM /**/ -/* I_GRP: +/* I_GRP * This symbol, if defined, indicates to the C program that it should * include grp.h. */ -/*#define I_GRP /**/ +/* #define I_GRP /**/ -/* I_PWD: +/* I_NETINET_IN + * This symbol, if defined, indicates to the C program that it should + * include netinet/in.h. + */ +/* I_SYS_IN + * This symbol, if defined, indicates to the C program that it should + * include sys/in.h. + */ +/* #define I_NETINET_IN /**/ +/*#undef I_SYS_IN /**/ + +/* I_PWD * This symbol, if defined, indicates to the C program that it should * include pwd.h. */ -/* PWQUOTA: +/* PWQUOTA * This symbol, if defined, indicates to the C program that struct passwd * contains pw_quota. */ -/* PWAGE: +/* PWAGE * This symbol, if defined, indicates to the C program that struct passwd * contains pw_age. */ -/*#define I_PWD /**/ -/*#define PWQUOTA /**/ -/*#undef PWAGE /**/ +/* PWCHANGE + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_change. + */ +/* PWCLASS + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_class. + */ +/* PWEXPIRE + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_expire. + */ +/* PWCOMMENT + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_comment. + */ +/* #define I_PWD /**/ +/*#undef PWQUOTA /**/ +/* #define PWAGE /**/ +/*#undef PWCHANGE /**/ +/*#undef PWCLASS /**/ +/*#undef PWEXPIRE /**/ +/* #define PWCOMMENT /**/ -/* I_SYS_DIR: - * This symbol, if defined, indicates to the C program that it should - * include sys/dir.h. +/* I_SYS_FILE + * This manifest constant tells the C program to include . */ -#define I_SYS_DIR /**/ +/* #define I_SYS_FILE /**/ -/* I_SYSIOCTL: +/* I_SYSIOCTL * This symbol, if defined, indicates that sys/ioctl.h exists and should * be included. */ -/*#define I_SYSIOCTL /**/ +/* #define I_SYSIOCTL /**/ -/* I_VARARGS: +/* I_TIME + * This symbol is defined if the program should include . + */ +/* I_SYS_TIME + * This symbol is defined if the program should include . + */ +/* SYSTIMEKERNEL + * This symbol is defined if the program should include + * with KERNEL defined. + */ +/* I_SYS_SELECT + * This symbol is defined if the program should include . + */ +#define I_TIME /**/ +/* #define I_SYS_TIME /**/ +/*#undef SYSTIMEKERNEL /**/ +/*#undef I_SYS_SELECT /**/ + +/* I_UTIME + * This symbol, if defined, indicates to the C program that it should + * include utime.h. + */ +/* #define I_UTIME /**/ + +/* I_VARARGS * This symbol, if defined, indicates to the C program that it should * include varargs.h. */ #define I_VARARGS /**/ -/* INTSIZE: +/* I_VFORK + * This symbol, if defined, indicates to the C program that it should + * include vfork.h. + */ +/* #define I_VFORK /**/ + +/* INTSIZE * This symbol contains the size of an int, so that the C preprocessor * can make decisions based on it. */ #define INTSIZE 2 /**/ -/* RANDBITS: +/* I_DIRENT + * This symbol, if defined, indicates that the program should use the + * P1003-style directory routines, and include . + */ +/* I_SYS_DIR + * This symbol, if defined, indicates that the program should use the + * directory functions by including . + */ +/* I_NDIR + * This symbol, if defined, indicates that the program should include the + * system's version of ndir.h, rather than the one with this package. + */ +/* I_SYS_NDIR + * This symbol, if defined, indicates that the program should include the + * system's version of sys/ndir.h, rather than the one with this package. + */ +/* I_MY_DIR + * This symbol, if defined, indicates that the program should compile + * the ndir.c code provided with the package. + */ +/* DIRNAMLEN + * This symbol, if defined, indicates to the C program that the length + * of directory entry names is provided by a d_namlen field. Otherwise + * you need to do strlen() on the d_name field. + */ +/* #define I_DIRENT /**/ +#define I_SYS_DIR /**/ +/*#undef I_NDIR /**/ +/*#undef I_SYS_NDIR /**/ +/*#undef I_MY_DIR /**/ +#define DIRNAMLEN /**/ + +/* MYMALLOC + * This symbol, if defined, indicates that we're using our own malloc. + */ +/* MALLOCPTRTYPE + * This symbol defines the kind of ptr returned by malloc and realloc. + */ +#define MYMALLOC /**/ + +#define MALLOCPTRTYPE void /**/ + + +/* RANDBITS * This symbol contains the number of bits of random number the rand() * function produces. Usual values are 15, 16, and 31. */ -#define RANDBITS 31 /**/ +#define RANDBITS 15 /**/ + +/* SCRIPTDIR + * This symbol holds the name of the directory in which the user wants + * to keep publicly executable scripts for the package in question. It + * is often a directory that is mounted across diverse architectures. + */ +#define SCRIPTDIR "c:/bin/perl" /**/ -/* SIG_NAME: +/* SIG_NAME * This symbol contains an list of signal names in order. */ -#ifdef OS2 -#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\ - /* 0 1 2 3 4 5 6 7 8 */\ +#define SIG_NAME \ + "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\ + /* 0 1 2 3 4 5 6 7 8 */\ "KILL","BUS","SEGV","SYS","PIPE","UALRM","TERM","ALRM","USR2","CLD",\ /* 9 10 11 12 13 14 15 16 17 18 */\ "PWR","USR3","BREAK","ABRT" /*19 20 21 22 */ -#else -#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CHLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","USR1","USR2" /**/ -#endif /* OS2 */ -/* STDCHAR: +/* STDCHAR * This symbol is defined to be the type of char used in stdio.h. * It has the values "unsigned char" or "char". */ #define STDCHAR char /**/ -/* UIDTYPE: +/* UIDTYPE * This symbol has a value like uid_t, int, ushort, or whatever type is * used to declare user ids in the kernel. */ #define UIDTYPE int /**/ -/* VOIDFLAGS: +/* VOIDHAVE * This symbol indicates how much support of the void type is given by this * compiler. What various bits mean: * @@ -523,38 +855,51 @@ * 4 = supports comparisons between pointers to void functions and * addresses of void functions * - * The package designer should define VOIDUSED to indicate the requirements - * of the package. This can be done either by #defining VOIDUSED before - * including config.h, or by defining defvoidused in Myinit.U. If the - * latter approach is taken, only those flags will be tested. If the - * level of void support necessary is not present, defines void to int. - */ -#ifndef VOIDUSED -#define VOIDUSED 7 + * The package designer should define VOIDWANT to indicate the requirements + * of the package. This can be done either by #defining VOIDWANT before + * including config.h, or by defining voidwant in Myinit.U. If the level + * of void support necessary is not present, config.h defines void to "int", + * VOID to the empty string, and VOIDP to "char *". + */ +/* void + * This symbol is used for void casts. On implementations which support + * void appropriately, its value is "void". Otherwise, its value maps + * to "int". + */ +/* VOID + * This symbol's value is "void" if the implementation supports void + * appropriately. Otherwise, its value is the empty string. The primary + * use of this symbol is in specifying void parameter lists for function + * prototypes. + */ +/* VOIDP + * This symbol is used for casting generic pointers. On implementations + * which support void appropriately, its value is "void *". Otherwise, + * its value is "char *". + */ +#ifndef VOIDWANT +#define VOIDWANT 7 #endif -#define VOIDFLAGS 7 -#if (VOIDFLAGS & VOIDUSED) != VOIDUSED +#define VOIDHAVE 7 +#if (VOIDHAVE & VOIDWANT) != VOIDWANT #define void int /* is void to be avoided? */ +#define VOID +#define VOIDP (char *) #define M_VOID /* Xenix strikes again */ +#else +#define VOID void +#define VOIDP (void *) #endif -/* PRIVLIB: +/* PRIVLIB * This symbol contains the name of the private library for this package. * The library is private in the sense that it needn't be in anyone's * execution path, but it should be accessible by the world. The program - * should be prepared to do ^ expansion. + * should be prepared to do ~ expansion. */ #define PRIVLIB "c:/bin/perl" /**/ /* - * BUGGY_MSC: - * This symbol is defined if you are the unfortunate owner of a buggy - * Microsoft C compiler and want to use intrinsic functions. Versions - * up to 5.1 are known conform to this definition. - */ -/*#define BUGGY_MSC /**/ - -/* * BINARY: * This symbol is defined if you run under an operating system that * distinguishes between binary and text files. If so the function @@ -562,6 +907,4 @@ */ #define BINARY -#define S_ISUID 0 -#define S_ISGID 0 -#define CASTNEGFLOAT +#endif diff --git a/patchlevel.h b/patchlevel.h index 2627e90..f198d8a 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -1 +1 @@ -#define PATCHLEVEL 23 +#define PATCHLEVEL 24