5 * This file is hand tailored for MS-DOS and MSC 5.1 and 6.00A.
6 * Tom Dinger, March 1991.
12 * This symbol is defined if you are the unfortunate owner of the buggy
13 * Microsoft C compiler version 5.1. It is used as a conditional to
14 * guard code sections that are known to break this compiler.
16 * This symbol is defined if you are the unfortunate owner of the buggy
17 * Microsoft C compiler version 6.0A. It is used as a conditional to
18 * guard code sections that are known to break this compiler.
20 #define BUGGY_MSC5 /**/
21 /*#undef BUGGY_MSC6 /**/
25 * This symbol, if defined, indicates that the program is being compiled
26 * under the EUNICE package under VMS. The program will need to handle
27 * things like files that don't go away the first time you unlink them,
28 * due to version numbering. It will also need to compensate for lack
29 * of a respectable link() command.
32 * This symbol, if defined, indicates that the program is running under
33 * VMS. It is currently only set in conjunction with the EUNICE symbol.
39 * This symbol contains the number of bytes required to align a double.
40 * Usual values are 2, 4, and 8.
42 #define ALIGNBYTES 4 /**/
45 * This symbol holds the name of the directory in which the user wants
46 * to put publicly executable images for the package in question. It
47 * is most often a local directory such as /usr/local/bin.
49 #define BIN "/usr/local/bin" /**/
52 * This symbol contains an encoding of the order of bytes in a long.
53 * Usual values (in octal) are 01234, 04321, 02143, 03412...
55 #define BYTEORDER 0x1234 /**/
58 * This symbol contains the first part of the string which will invoke
59 * the C preprocessor on the standard input and produce to standard
60 * output. Typical value of "cc -E" or "/lib/cpp".
63 * This symbol contains the second part of the string which will invoke
64 * the C preprocessor on the standard input and produce to standard
65 * output. This symbol will have the value "-" if CPPSTDIN needs a minus
66 * to specify standard input, otherwise the value is "".
68 /* TODO: doesn't work for MSC -- it's more complicated than this */
69 #define CPPSTDIN "cl "
73 * This symbol, if defined, indicates that the bcmp routine is available
74 * to compare blocks of memory. If undefined, use memcmp. If that's
75 * not available, roll your own.
77 /*#undef HAS_BCMP /**/
80 * This symbol, if defined, indicates that the bcopy routine is available
81 * to copy blocks of memory. Otherwise you should probably use memcpy().
83 /*#undef HAS_BCOPY /**/
86 * This symbol, if defined, indicates that the bzero routine is available
87 * to zero blocks of memory. Otherwise you should probably use memset()
90 /*#undef HAS_BZERO /**/
93 * This symbol, if defined, indicates that this C compiler knows how to
94 * cast negative or large floating point numbers to unsigned longs, ints
98 * This symbol contains flags that say what difficulties the compiler
99 * has casting odd floating values to unsigned long:
100 * 1 = couldn't cast < 0
101 * 2 = couldn't cast >= 0x80000000
103 #define CASTNEGFLOAT /**/
104 #define CASTFLAGS 0 /**/
107 * This symbol is defined if this system declares "char *sprintf()" in
108 * stdio.h. The trend seems to be to declare it as "int sprintf()". It
109 * is up to the package author to declare sprintf correctly based on the
112 /*#undef CHARSPRINTF /**/
115 * This symbol, if defined, indicates that the chsize routine is available
116 * to truncate files. You might need a -lx to get this routine.
118 #define HAS_CHSIZE /**/
121 * This symbol, if defined, indicates that the crypt routine is available
122 * to encrypt passwords and the like.
124 /*#undef HAS_CRYPT /**/
127 * This symbol, if defined, indicates that the C-shell exists.
128 * If defined, contains the full pathname of csh.
130 /*#undef CSH "/usr/bin/csh" /**/
133 * This symbol, if defined, indicates that the C program should
134 * check the script that it is executing for setuid/setgid bits, and
135 * attempt to emulate setuid/setgid on systems that have disabled
136 * setuid #! scripts because the kernel can't do it securely.
137 * It is up to the package designer to make sure that this emulation
138 * is done securely. Among other things, it should do an fstat on
139 * the script it just opened to make sure it really is a setuid/setgid
140 * script, it should make sure the arguments passed correspond exactly
141 * to the argument on the #! line, and it should not trust any
142 * subprocesses to which it must pass the filename rather than the
143 * file descriptor of the script to be executed.
148 * This symbol, if defined, indicates that the dup2 routine is available
149 * to dup file descriptors. Otherwise you should use dup().
151 #define HAS_DUP2 /**/
154 * This symbol, if defined, indicates that the fchmod routine is available
155 * to change mode of opened files. If unavailable, use chmod().
157 /*#undef HAS_FCHMOD /**/
160 * This symbol, if defined, indicates that the fchown routine is available
161 * to change ownership of opened files. If unavailable, use chown().
163 /*#undef HAS_FCHOWN /**/
166 * This symbol, if defined, indicates to the C program that
167 * the fcntl() function exists.
169 /*#undef HAS_FCNTL /**/
172 * This symbol, if defined, indicates that the system supports filenames
173 * longer than 14 characters.
175 /*#undef FLEXFILENAMES /**/
178 * This symbol, if defined, indicates that the flock() routine is
179 * available to do file locking.
181 /*#undef HAS_FLOCK /**/
184 * This symbol, if defined, indicates that the getgroups() routine is
185 * available to get the list of process groups. If unavailable, multiple
186 * groups are probably not supported.
188 /*#undef HAS_GETGROUPS /**/
191 * This symbol, if defined, indicates that the gethostent() routine is
192 * available to lookup host names in some data base or other.
194 /*#undef HAS_GETHOSTENT /**/
197 * This symbol, if defined, indicates that the getpgrp() routine is
198 * available to get the current process group.
200 /*#undef HAS_GETPGRP /**/
203 * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
204 * routine is available to get the current process group.
206 /*#undef HAS_GETPGRP2 /**/
209 * This symbol, if defined, indicates that the getpriority() routine is
210 * available to get a process's priority.
212 /*#undef HAS_GETPRIORITY /**/
215 * This symbol, if defined, indicates that the htons routine (and friends)
216 * are available to do network order byte swapping.
219 * This symbol, if defined, indicates that the htonl routine (and friends)
220 * are available to do network order byte swapping.
223 * This symbol, if defined, indicates that the ntohs routine (and friends)
224 * are available to do network order byte swapping.
227 * This symbol, if defined, indicates that the ntohl routine (and friends)
228 * are available to do network order byte swapping.
230 /*#undef HAS_HTONS /**/
231 /*#undef HAS_HTONL /**/
232 /*#undef HAS_NTOHS /**/
233 /*#undef HAS_NTOHL /**/
236 * This preprocessor symbol is defined, along with rindex, if the system
237 * uses the strchr and strrchr routines instead.
240 * This preprocessor symbol is defined, along with index, if the system
241 * uses the strchr and strrchr routines instead.
243 #define index strchr /* cultural */
244 #define rindex strrchr /* differences? */
247 * This symbol, if defined, indicates that the killpg routine is available
248 * to kill process groups. If unavailable, you probably should use kill
249 * with a negative process number.
251 /*#undef HAS_KILLPG /**/
254 * This symbol, if defined, indicates that the lstat() routine is
255 * available to stat symbolic links.
257 /*#undef HAS_LSTAT /**/
260 * This symbol, if defined, indicates that the memcmp routine is available
261 * to compare blocks of memory. If undefined, roll your own.
263 #define HAS_MEMCMP /**/
266 * This symbol, if defined, indicates that the memcpy routine is available
267 * to copy blocks of memory. Otherwise you should probably use bcopy().
268 * If neither is defined, roll your own.
270 #define HAS_MEMCPY /**/
273 * This symbol, if defined, indicates that the mkdir routine is available
274 * to create directories. Otherwise you should fork off a new process to
277 #define HAS_MKDIR /**/
280 * This symbol, if defined, indicates that the entire msg*(2) library is
283 /*#undef HAS_MSG /**/
286 * This symbol, if defined, indicates that the msgctl() routine is
287 * available to stat symbolic links.
289 /*#undef HAS_MSGCTL /**/
292 * This symbol, if defined, indicates that the msgget() routine is
293 * available to stat symbolic links.
295 /*#undef HAS_MSGGET /**/
298 * This symbol, if defined, indicates that the msgrcv() routine is
299 * available to stat symbolic links.
301 /*#undef HAS_MSGRCV /**/
304 * This symbol, if defined, indicates that the msgsnd() routine is
305 * available to stat symbolic links.
307 /*#undef HAS_MSGSND /**/
310 * This symbol, if defined, indicates that ndbm.h exists and should
313 /*#undef HAS_NDBM /**/
316 * This symbol, if defined, indicates that dbm.h exists and should
319 /*#undef HAS_ODBM /**/
322 * This manifest constant lets the C program know that the three
323 * argument form of open(2) is available.
325 #define HAS_OPEN3 /**/
328 * This symbol, if defined, indicates that the readdir routine is available
329 * from the C library to read directories.
331 #define HAS_READDIR /**/
334 * This symbol, if defined, indicates that the rename routine is available
335 * to rename files. Otherwise you should do the unlink(), link(), unlink()
338 #define HAS_RENAME /**/
341 * This symbol, if defined, indicates that the rmdir routine is available
342 * to remove directories. Otherwise you should fork off a new process to
345 #define HAS_RMDIR /**/
348 * This symbol, if defined, indicates that the select() subroutine
351 /*#undef HAS_SELECT /**/
354 * This symbol, if defined, indicates that the entire sem*(2) library is
357 /*#undef HAS_SEM /**/
360 * This symbol, if defined, indicates that the semctl() routine is
361 * available to stat symbolic links.
363 /*#undef HAS_SEMCTL /**/
366 * This symbol, if defined, indicates that the semget() routine is
367 * available to stat symbolic links.
369 /*#undef HAS_SEMGET /**/
372 * This symbol, if defined, indicates that the semop() routine is
373 * available to stat symbolic links.
375 /*#undef HAS_SEMOP /**/
378 * This symbol, if defined, indicates that the setegid routine is available
379 * to change the effective gid of the current program.
381 /*#undef HAS_SETEGID /**/
384 * This symbol, if defined, indicates that the seteuid routine is available
385 * to change the effective uid of the current program.
387 /*#undef HAS_SETEUID /**/
390 * This symbol, if defined, indicates that the setpgrp() routine is
391 * available to set the current process group.
393 /*#undef HAS_SETPGRP /**/
396 * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
397 * routine is available to set the current process group.
399 /*#undef HAS_SETPGRP2 /**/
402 * This symbol, if defined, indicates that the setpriority() routine is
403 * available to set a process's priority.
405 /*#undef HAS_SETPRIORITY /**/
408 * This symbol, if defined, indicates that the setregid routine is
409 * available to change the real and effective gid of the current program.
412 * This symbol, if defined, indicates that the setresgid routine is
413 * available to change the real, effective and saved gid of the current
416 /*#undef HAS_SETREGID /**/
417 /*#undef HAS_SETRESGID /**/
420 * This symbol, if defined, indicates that the setreuid routine is
421 * available to change the real and effective uid of the current program.
424 * This symbol, if defined, indicates that the setresuid routine is
425 * available to change the real, effective and saved uid of the current
428 /*#undef HAS_SETREUID /**/
429 /*#undef HAS_SETRESUID /**/
432 * This symbol, if defined, indicates that the setrgid routine is available
433 * to change the real gid of the current program.
435 /*#undef HAS_SETRGID /**/
438 * This symbol, if defined, indicates that the setruid routine is available
439 * to change the real uid of the current program.
441 /*#undef HAS_SETRUID /**/
444 * This symbol, if defined, indicates that the entire shm*(2) library is
447 /*#undef HAS_SHM /**/
450 * This symbol, if defined, indicates that the shmat() routine is
451 * available to stat symbolic links.
453 /*#undef HAS_SHMAT /**/
456 * This symbol, if defined, indicates that the shmctl() routine is
457 * available to stat symbolic links.
459 /*#undef HAS_SHMCTL /**/
462 * This symbol, if defined, indicates that the shmdt() routine is
463 * available to stat symbolic links.
465 /*#undef HAS_SHMDT /**/
468 * This symbol, if defined, indicates that the shmget() routine is
469 * available to stat symbolic links.
471 /*#undef HAS_SHMGET /**/
474 * This symbol, if defined, indicates that the BSD socket interface is
478 * This symbol, if defined, indicates that the BSD socketpair call is
482 * This symbol, if defined, indicates that the 4.1c BSD socket interface
483 * is supported instead of the 4.2/4.3 BSD socket interface.
485 /*#undef HAS_SOCKET /**/
487 /*#undef HAS_SOCKETPAIR /**/
489 /*#undef OLDSOCKET /**/
492 * This symbol is defined if this system has a stat structure declaring
493 * st_blksize and st_blocks.
495 /*#undef STATBLOCKS /**/
498 * This symbol is defined if this system has a FILE structure declaring
499 * _ptr and _cnt in stdio.h.
501 * NOTE: [Tom Dinger, 23 February 1991] You also need the _filbuf()
502 * function, usually referred to by the getc() macro in stdio.h.
504 #define STDSTDIO /**/
507 * This symbol, if defined, indicates that this C compiler knows how
508 * to copy structures. If undefined, you'll need to use a block copy
509 * routine of some sort instead.
511 #define STRUCTCOPY /**/
514 * This symbol, if defined, indicates that the strerror() routine is
515 * available to translate error numbers to strings.
517 #define HAS_STRERROR /**/
520 * This symbol, if defined, indicates that the symlink routine is available
521 * to create symbolic links.
523 /*#undef HAS_SYMLINK /**/
526 * This symbol, if defined, indicates that the syscall routine is available
527 * to call arbitrary system calls. If undefined, that's tough.
529 /*#undef HAS_SYSCALL /**/
532 * This symbol, if defined, indicates that the truncate routine is
533 * available to truncate files.
535 /*#undef HAS_TRUNCATE /**/
538 * This symbol, if defined, indicates that vfork() exists.
540 /*#undef HAS_VFORK /**/
543 * This symbol is defined if this system declares "void (*signal())()" in
544 * signal.h. The old way was to declare it as "int (*signal())()". It
545 * is up to the package author to declare things correctly based on the
549 * This symbol's value is either "void" or "int", corresponding to the
550 * appropriate return "type" of a signal handler. Thus, one can declare
551 * a signal handler using "TO_SIGNAL (*handler())()", and define the
552 * handler using "TO_SIGNAL handler(sig)".
555 #define TO_SIGNAL int /**/
558 * This symbol, if defined, indicates that this C compiler knows about
559 * the volatile declaration.
561 /*#undef HASVOLATILE /**/
564 * This symbol, if defined, indicates that the vprintf routine is available
565 * to printf with a pointer to an argument list. If unavailable, you
566 * may need to write your own, probably in terms of _doprnt().
569 * This symbol is defined if this system has vsprintf() returning type
570 * (char*). The trend seems to be to declare it as "int vsprintf()". It
571 * is up to the package author to declare vsprintf correctly based on the
574 #define HAS_VPRINTF /**/
575 /*#undef CHARVSPRINTF /**/
578 * This symbol, if defined, indicates that wait4() exists.
580 /*#undef HAS_WAIT4 /**/
583 * This symbol, if defined, indicates that waitpid() exists.
585 /*#undef HAS_WAITPID /**/
588 * This symbol has a value like gid_t, int, ushort, or whatever type is
589 * used to declare group ids in the kernel.
591 #define GIDTYPE int /**/
594 * This manifest constant tells the C program to include <fcntl.h>.
599 * This symbol, if defined, indicates to the C program that it should
605 * This symbol, if defined, indicates to the C program that it should
606 * include netinet/in.h.
609 * This symbol, if defined, indicates to the C program that it should
612 /*#undef I_NETINET_IN /**/
613 /*#undef I_SYS_IN /**/
616 * This symbol, if defined, indicates to the C program that it should
620 * This symbol, if defined, indicates to the C program that struct passwd
624 * This symbol, if defined, indicates to the C program that struct passwd
628 * This symbol, if defined, indicates to the C program that struct passwd
629 * contains pw_change.
632 * This symbol, if defined, indicates to the C program that struct passwd
636 * This symbol, if defined, indicates to the C program that struct passwd
637 * contains pw_expire.
640 * This symbol, if defined, indicates to the C program that struct passwd
641 * contains pw_comment.
644 /*#undef PWQUOTA /**/
646 /*#undef PWCHANGE /**/
647 /*#undef PWCLASS /**/
648 /*#undef PWEXPIRE /**/
649 /*#undef PWCOMMENT /**/
652 * This manifest constant tells the C program to include <sys/file.h>.
654 /*#undef I_SYS_FILE /**/
657 * This symbol, if defined, indicates that sys/ioctl.h exists and should
660 /*#undef I_SYSIOCTL /**/
663 * This symbol is defined if the program should include <time.h>.
666 * This symbol is defined if the program should include <sys/time.h>.
669 * This symbol is defined if the program should include <sys/time.h>
670 * with KERNEL defined.
673 * This symbol is defined if the program should include <sys/select.h>.
676 /*#undef I_SYS_TIME /**/
677 /*#undef SYSTIMEKERNEL /**/
678 /*#undef I_SYS_SELECT /**/
681 * This symbol, if defined, indicates to the C program that it should
684 /*#undef I_UTIME /**/
687 * This symbol, if defined, indicates to the C program that it should
690 #define I_VARARGS /**/
693 * This symbol, if defined, indicates to the C program that it should
696 /*#undef I_VFORK /**/
699 * This symbol contains the size of an int, so that the C preprocessor
700 * can make decisions based on it.
702 #define INTSIZE 2 /**/
705 * This symbol, if defined, indicates that the program should use the
706 * P1003-style directory routines, and include <dirent.h>.
709 * This symbol, if defined, indicates that the program should use the
710 * directory functions by including <sys/dir.h>.
713 * This symbol, if defined, indicates that the program should include the
714 * system's version of ndir.h, rather than the one with this package.
717 * This symbol, if defined, indicates that the program should include the
718 * system's version of sys/ndir.h, rather than the one with this package.
721 * This symbol, if defined, indicates that the program should compile
722 * the ndir.c code provided with the package.
725 * This symbol, if defined, indicates to the C program that the length
726 * of directory entry names is provided by a d_namlen field. Otherwise
727 * you need to do strlen() on the d_name field.
729 /*#undef I_DIRENT /**/
730 #define I_SYS_DIR /**/
732 /*#undef I_SYS_NDIR /**/
733 /*#undef I_MY_DIR /**/
734 /*#undef DIRNAMLEN /**/
738 * This symbol contains the number of bits of random number the rand()
739 * function produces. Usual values are 15, 16, and 31.
741 #define RANDBITS 31 /**/
744 * This symbol holds the name of the directory in which the user wants
745 * to put publicly executable scripts for the package in question. It
746 * is often a directory that is mounted across diverse architectures.
748 #define SCRIPTDIR "C:/bin/perl" /**/
751 * This symbol contains an list of signal names in order.
753 * Note: This list is specific for Microsoft C 5.1 and 6.0, which only
754 * support SIGINT, SIGFPE, SIGILL, SIGSEGV, and SIGABRT on
755 * DOS 3.x, but in addition defines SIGTERM, SIGBREAK, SIGUSR1,
756 * SIGUSR2, and SIGUSR3.
759 "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE","KILL",\
760 "BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","TSTP","CONT",\
761 "USR3","BREAK","ABRT" /**/
764 * This symbol is defined to be the type of char used in stdio.h.
765 * It has the values "unsigned char" or "char".
767 #define STDCHAR char /**/
770 * This symbol has a value like uid_t, int, ushort, or whatever type is
771 * used to declare user ids in the kernel.
773 #define UIDTYPE int /**/
776 * This symbol indicates how much support of the void type is given by this
777 * compiler. What various bits mean:
779 * 1 = supports declaration of void
780 * 2 = supports arrays of pointers to functions returning void
781 * 4 = supports comparisons between pointers to void functions and
782 * addresses of void functions
784 * The package designer should define VOIDWANT to indicate the requirements
785 * of the package. This can be done either by #defining VOIDWANT before
786 * including config.h, or by defining voidwant in Myinit.U. If the level
787 * of void support necessary is not present, config.h defines void to "int",
788 * VOID to the empty string, and VOIDP to "char *".
791 * This symbol is used for void casts. On implementations which support
792 * void appropriately, its value is "void". Otherwise, its value maps
796 * This symbol's value is "void" if the implementation supports void
797 * appropriately. Otherwise, its value is the empty string. The primary
798 * use of this symbol is in specifying void parameter lists for function
802 * This symbol is used for casting generic pointers. On implementations
803 * which support void appropriately, its value is "void *". Otherwise,
804 * its value is "char *".
810 #if (VOIDHAVE & VOIDWANT) != VOIDWANT
811 #define void int /* is void to be avoided? */
813 #define VOIDP (char *)
814 #define M_VOID /* Xenix strikes again */
817 #define VOIDP (void *)
821 * This symbol contains the name of the private library for this package.
822 * The library is private in the sense that it needn't be in anyone's
823 * execution path, but it should be accessible by the world. The program
824 * should be prepared to do ~ expansion.
826 #define PRIVLIB "/usr/local/lib/perl" /**/
830 * This symbol is defined if you run under an operating system that
831 * distinguishes between binary and text files. If so the function
832 * setmode will be used to set the file into binary mode.
839 /* For MSC5.1, toke.c "runs out of heap space" unless CRIPPLED_CC is
842 #if defined(BUGGY_MSC5) || defined(BUGGY_MSC6)
843 #define CRIPPLED_CC /**/
846 /* MSC (5.1 and 6.0) doesn't know about S_IFBLK or S_IFIFO -- these are
847 * normally found in sys/stat.h
849 #define S_IFBLK (S_IFDIR | S_IFCHR)
850 #define S_IFIFO 0010000
852 /* Define SUFFIX to get special DOS suffix-replacement code */
855 /* Add this for the DOS-specific chdir() function */
856 #define chdir perl_chdir