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 keep 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().
82 * If neither is defined, roll your own.
85 * This symbol, if defined, indicates that the bcopy routine is available
86 * to copy potentially overlapping copy blocks of bcopy. Otherwise you
87 * should probably use memmove() or memcpy(). If neither is defined,
90 /*#undef HAS_BCOPY /**/
91 /*#undef SAFE_BCOPY /**/
94 * This symbol, if defined, indicates that the bzero routine is available
95 * to zero blocks of memory. Otherwise you should probably use memset()
98 /*#undef HAS_BZERO /**/
101 * This symbol, if defined, indicates that this C compiler knows how to
102 * cast negative or large floating point numbers to unsigned longs, ints
106 * This symbol contains flags that say what difficulties the compiler
107 * has casting odd floating values to unsigned long:
108 * 1 = couldn't cast < 0
109 * 2 = couldn't cast >= 0x80000000
111 #define CASTNEGFLOAT /**/
112 #define CASTFLAGS 0 /**/
115 * This symbol is defined if this system declares "char *sprintf()" in
116 * stdio.h. The trend seems to be to declare it as "int sprintf()". It
117 * is up to the package author to declare sprintf correctly based on the
120 /*#undef CHARSPRINTF /**/
123 * This symbol, if defined, indicates that the chsize routine is available
124 * to truncate files. You might need a -lx to get this routine.
126 #define HAS_CHSIZE /**/
129 * This symbol, if defined, indicates that the crypt routine is available
130 * to encrypt passwords and the like.
132 /*#undef HAS_CRYPT /**/
135 * This symbol, if defined, indicates that the C-shell exists.
136 * If defined, contains the full pathname of csh.
138 /*#undef CSH "/usr/bin/csh" /**/
141 * This symbol, if defined, indicates that the C program should
142 * check the script that it is executing for setuid/setgid bits, and
143 * attempt to emulate setuid/setgid on systems that have disabled
144 * setuid #! scripts because the kernel can't do it securely.
145 * It is up to the package designer to make sure that this emulation
146 * is done securely. Among other things, it should do an fstat on
147 * the script it just opened to make sure it really is a setuid/setgid
148 * script, it should make sure the arguments passed correspond exactly
149 * to the argument on the #! line, and it should not trust any
150 * subprocesses to which it must pass the filename rather than the
151 * file descriptor of the script to be executed.
156 * This symbol, if defined, indicates that the dup2 routine is available
157 * to dup file descriptors. Otherwise you should use dup().
159 #define HAS_DUP2 /**/
162 * This symbol, if defined, indicates that the fchmod routine is available
163 * to change mode of opened files. If unavailable, use chmod().
165 /*#undef HAS_FCHMOD /**/
168 * This symbol, if defined, indicates that the fchown routine is available
169 * to change ownership of opened files. If unavailable, use chown().
171 /*#undef HAS_FCHOWN /**/
174 * This symbol, if defined, indicates to the C program that
175 * the fcntl() function exists.
177 /*#undef HAS_FCNTL /**/
180 * This symbol, if defined, indicates that the system supports filenames
181 * longer than 14 characters.
183 /*#undef FLEXFILENAMES /**/
186 * This symbol, if defined, indicates that the flock() routine is
187 * available to do file locking.
189 /*#undef HAS_FLOCK /**/
192 * This symbol, if defined, indicates that the getgroups() routine is
193 * available to get the list of process groups. If unavailable, multiple
194 * groups are probably not supported.
196 /*#undef HAS_GETGROUPS /**/
199 * This symbol, if defined, indicates that the gethostent() routine is
200 * available to lookup host names in some data base or other.
202 /*#undef HAS_GETHOSTENT /**/
205 * This symbol, if defined, indicates that the getpgrp() routine is
206 * available to get the current process group.
208 /*#undef HAS_GETPGRP /**/
211 * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
212 * routine is available to get the current process group.
214 /*#undef HAS_GETPGRP2 /**/
217 * This symbol, if defined, indicates that the getpriority() routine is
218 * available to get a process's priority.
220 /*#undef HAS_GETPRIORITY /**/
223 * This symbol, if defined, indicates that the htons routine (and friends)
224 * are available to do network order byte swapping.
227 * This symbol, if defined, indicates that the htonl routine (and friends)
228 * are available to do network order byte swapping.
231 * This symbol, if defined, indicates that the ntohs routine (and friends)
232 * are available to do network order byte swapping.
235 * This symbol, if defined, indicates that the ntohl routine (and friends)
236 * are available to do network order byte swapping.
238 /*#undef HAS_HTONS /**/
239 /*#undef HAS_HTONL /**/
240 /*#undef HAS_NTOHS /**/
241 /*#undef HAS_NTOHL /**/
244 * This preprocessor symbol is defined, along with rindex, if the system
245 * uses the strchr and strrchr routines instead.
248 * This preprocessor symbol is defined, along with index, if the system
249 * uses the strchr and strrchr routines instead.
251 #define index strchr /* cultural */
252 #define rindex strrchr /* differences? */
255 * This symbol, if defined, indicates that the isascii routine is available
256 * to test characters for asciiness.
258 #define HAS_ISASCII /**/
261 * This symbol, if defined, indicates that the killpg routine is available
262 * to kill process groups. If unavailable, you probably should use kill
263 * with a negative process number.
265 /*#undef HAS_KILLPG /**/
268 * This symbol, if defined, indicates that the lstat() routine is
269 * available to stat symbolic links.
271 /*#undef HAS_LSTAT /**/
274 * This symbol, if defined, indicates that the memcmp routine is available
275 * to compare blocks of memory. If undefined, roll your own.
277 #define HAS_MEMCMP /**/
280 * This symbol, if defined, indicates that the memcpy routine is available
281 * to copy blocks of memory. Otherwise you should probably use bcopy().
282 * If neither is defined, roll your own.
285 * This symbol, if defined, indicates that the memcpy routine is available
286 * to copy potentially overlapping copy blocks of memory. Otherwise you
287 * should probably use memmove() or bcopy(). If neither is defined,
290 #define HAS_MEMCPY /**/
291 /*#undef SAFE_MEMCPY /**/
294 * This symbol, if defined, indicates that the memmove routine is available
295 * to move potentially overlapping blocks of memory. Otherwise you
296 * should use bcopy() or roll your own.
298 /*#undef HAS_MEMMOVE /**/
301 * This symbol, if defined, indicates that the memset routine is available
302 * to set a block of memory to a character. If undefined, roll your own.
304 #define HAS_MEMSET /**/
307 * This symbol, if defined, indicates that the mkdir routine is available
308 * to create directories. Otherwise you should fork off a new process to
311 #define HAS_MKDIR /**/
314 * This symbol, if defined, indicates that the entire msg*(2) library is
317 /*#undef HAS_MSG /**/
320 * This symbol, if defined, indicates that the msgctl() routine is
321 * available to control message passing.
323 /*#undef HAS_MSGCTL /**/
326 * This symbol, if defined, indicates that the msgget() routine is
327 * available to get messages.
329 /*#undef HAS_MSGGET /**/
332 * This symbol, if defined, indicates that the msgrcv() routine is
333 * available to receive messages.
335 /*#undef HAS_MSGRCV /**/
338 * This symbol, if defined, indicates that the msgsnd() routine is
339 * available to send messages.
341 /*#undef HAS_MSGSND /**/
344 * This symbol, if defined, indicates that ndbm.h exists and should
347 /*#undef HAS_NDBM /**/
350 * This symbol, if defined, indicates that dbm.h exists and should
353 /*#undef HAS_ODBM /**/
356 * This manifest constant lets the C program know that the three
357 * argument form of open(2) is available.
359 #define HAS_OPEN3 /**/
362 * This symbol, if defined, indicates that the readdir routine is available
363 * from the C library to read directories.
365 #define HAS_READDIR /**/
368 * This symbol, if defined, indicates that the rename routine is available
369 * to rename files. Otherwise you should do the unlink(), link(), unlink()
372 #define HAS_RENAME /**/
375 * This symbol, if defined, indicates that the rewindir routine is
376 * available to rewind directories.
378 #define HAS_REWINDDIR /**/
381 * This symbol, if defined, indicates that the rmdir routine is available
382 * to remove directories. Otherwise you should fork off a new process to
385 #define HAS_RMDIR /**/
388 * This symbol, if defined, indicates that the seekdir routine is
389 * available to seek into directories.
391 #define HAS_SEEKDIR /**/
394 * This symbol, if defined, indicates that the select() subroutine
397 /*#undef HAS_SELECT /**/
400 * This symbol, if defined, indicates that the entire sem*(2) library is
403 /*#undef HAS_SEM /**/
406 * This symbol, if defined, indicates that the semctl() routine is
407 * available to control semaphores.
409 /*#undef HAS_SEMCTL /**/
412 * This symbol, if defined, indicates that the semget() routine is
413 * available to get semaphores ids.
415 /*#undef HAS_SEMGET /**/
418 * This symbol, if defined, indicates that the semop() routine is
419 * available to perform semaphore operations.
421 /*#undef HAS_SEMOP /**/
424 * This symbol, if defined, indicates that the setegid routine is available
425 * to change the effective gid of the current program.
427 /*#undef HAS_SETEGID /**/
430 * This symbol, if defined, indicates that the seteuid routine is available
431 * to change the effective uid of the current program.
433 /*#undef HAS_SETEUID /**/
436 * This symbol, if defined, indicates that the setpgrp() routine is
437 * available to set the current process group.
439 /*#undef HAS_SETPGRP /**/
442 * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
443 * routine is available to set the current process group.
445 /*#undef HAS_SETPGRP2 /**/
448 * This symbol, if defined, indicates that the setpriority() routine is
449 * available to set a process's priority.
451 /*#undef HAS_SETPRIORITY /**/
454 * This symbol, if defined, indicates that the setregid routine is
455 * available to change the real and effective gid of the current program.
458 * This symbol, if defined, indicates that the setresgid routine is
459 * available to change the real, effective and saved gid of the current
462 /*#undef HAS_SETREGID /**/
463 /*#undef HAS_SETRESGID /**/
466 * This symbol, if defined, indicates that the setreuid routine is
467 * available to change the real and effective uid of the current program.
470 * This symbol, if defined, indicates that the setresuid routine is
471 * available to change the real, effective and saved uid of the current
474 /*#undef HAS_SETREUID /**/
475 /*#undef HAS_SETRESUID /**/
478 * This symbol, if defined, indicates that the setrgid routine is available
479 * to change the real gid of the current program.
481 /*#undef HAS_SETRGID /**/
484 * This symbol, if defined, indicates that the setruid routine is available
485 * to change the real uid of the current program.
487 /*#undef HAS_SETRUID /**/
490 * This symbol, if defined, indicates that the entire shm*(2) library is
493 /*#undef HAS_SHM /**/
496 * This symbol, if defined, indicates that the shmat() routine is
497 * available to attach a shared memory segment.
500 * This symbol, if defined, indicates that the shmat() routine
501 * returns a pointer of type void*.
503 /*#undef HAS_SHMAT /**/
505 /*#undef VOIDSHMAT /**/
508 * This symbol, if defined, indicates that the shmctl() routine is
509 * available to control a shared memory segment.
511 /*#undef HAS_SHMCTL /**/
514 * This symbol, if defined, indicates that the shmdt() routine is
515 * available to detach a shared memory segment.
517 /*#undef HAS_SHMDT /**/
520 * This symbol, if defined, indicates that the shmget() routine is
521 * available to get a shared memory segment id.
523 /*#undef HAS_SHMGET /**/
526 * This symbol, if defined, indicates that the BSD socket interface is
530 * This symbol, if defined, indicates that the BSD socketpair call is
534 * This symbol, if defined, indicates that the 4.1c BSD socket interface
535 * is supported instead of the 4.2/4.3 BSD socket interface.
537 /*#undef HAS_SOCKET /**/
539 /*#undef HAS_SOCKETPAIR /**/
541 /*#undef OLDSOCKET /**/
544 * This symbol is defined if this system has a stat structure declaring
545 * st_blksize and st_blocks.
547 /*#undef STATBLOCKS /**/
550 * This symbol is defined if this system has a FILE structure declaring
551 * _ptr and _cnt in stdio.h.
553 * NOTE: [Tom Dinger, 23 February 1991] You also need the _filbuf()
554 * function, usually referred to by the getc() macro in stdio.h.
556 #define STDSTDIO /**/
559 * This symbol, if defined, indicates that this C compiler knows how
560 * to copy structures. If undefined, you'll need to use a block copy
561 * routine of some sort instead.
563 #define STRUCTCOPY /**/
566 * This symbol, if defined, indicates that the strerror() routine is
567 * available to translate error numbers to strings.
569 #define HAS_STRERROR /**/
572 * This symbol, if defined, indicates that the symlink routine is available
573 * to create symbolic links.
575 /*#undef HAS_SYMLINK /**/
578 * This symbol, if defined, indicates that the syscall routine is available
579 * to call arbitrary system calls. If undefined, that's tough.
581 /*#undef HAS_SYSCALL /**/
584 * This symbol, if defined, indicates that the telldir routine is
585 * available to tell your location in directories.
587 #define HAS_TELLDIR /**/
590 * This symbol, if defined, indicates that the truncate routine is
591 * available to truncate files.
593 /*#undef HAS_TRUNCATE /**/
596 * This symbol, if defined, indicates that vfork() exists.
598 /*#undef HAS_VFORK /**/
601 * This symbol is defined if this system declares "void (*signal())()" in
602 * signal.h. The old way was to declare it as "int (*signal())()". It
603 * is up to the package author to declare things correctly based on the
607 * This symbol's value is either "void" or "int", corresponding to the
608 * appropriate return "type" of a signal handler. Thus, one can declare
609 * a signal handler using "TO_SIGNAL (*handler())()", and define the
610 * handler using "TO_SIGNAL handler(sig)".
613 #define TO_SIGNAL int /**/
616 * This symbol, if defined, indicates that this C compiler knows about
617 * the volatile declaration.
619 /*#undef HASVOLATILE /**/
622 * This symbol, if defined, indicates that the vprintf routine is available
623 * to printf with a pointer to an argument list. If unavailable, you
624 * may need to write your own, probably in terms of _doprnt().
627 * This symbol is defined if this system has vsprintf() returning type
628 * (char*). The trend seems to be to declare it as "int vsprintf()". It
629 * is up to the package author to declare vsprintf correctly based on the
632 #define HAS_VPRINTF /**/
633 /*#undef CHARVSPRINTF /**/
636 * This symbol, if defined, indicates that wait4() exists.
638 /*#undef HAS_WAIT4 /**/
641 * This symbol, if defined, indicates that waitpid() exists.
643 /*#undef HAS_WAITPID /**/
646 * This symbol has a value like gid_t, int, ushort, or whatever type is
647 * used to declare group ids in the kernel.
649 #define GIDTYPE int /**/
652 * This symbol has a value like gid_t, int, ushort, or whatever type is
653 * used in the return value of getgroups().
655 #define GROUPSTYPE int /**/
658 * This manifest constant tells the C program to include <fcntl.h>.
663 * This symbol, if defined, indicates that gdbm.h exists and should
669 * This symbol, if defined, indicates to the C program that it should
675 * This symbol, if defined, indicates to the C program that it should
676 * include netinet/in.h.
679 * This symbol, if defined, indicates to the C program that it should
682 /*#undef I_NETINET_IN /**/
683 /*#undef I_SYS_IN /**/
686 * This symbol, if defined, indicates to the C program that it should
690 * This symbol, if defined, indicates to the C program that struct passwd
694 * This symbol, if defined, indicates to the C program that struct passwd
698 * This symbol, if defined, indicates to the C program that struct passwd
699 * contains pw_change.
702 * This symbol, if defined, indicates to the C program that struct passwd
706 * This symbol, if defined, indicates to the C program that struct passwd
707 * contains pw_expire.
710 * This symbol, if defined, indicates to the C program that struct passwd
711 * contains pw_comment.
714 /*#undef PWQUOTA /**/
716 /*#undef PWCHANGE /**/
717 /*#undef PWCLASS /**/
718 /*#undef PWEXPIRE /**/
719 /*#undef PWCOMMENT /**/
722 * This manifest constant tells the C program to include <sys/file.h>.
724 /*#undef I_SYS_FILE /**/
727 * This symbol, if defined, indicates that sys/ioctl.h exists and should
730 /*#undef I_SYSIOCTL /**/
733 * This symbol is defined if the program should include <time.h>.
736 * This symbol is defined if the program should include <sys/time.h>.
739 * This symbol is defined if the program should include <sys/time.h>
740 * with KERNEL defined.
743 * This symbol is defined if the program should include <sys/select.h>.
746 /*#undef I_SYS_TIME /**/
747 /*#undef SYSTIMEKERNEL /**/
748 /*#undef I_SYS_SELECT /**/
751 * This symbol, if defined, indicates to the C program that it should
754 /*#undef I_UTIME /**/
757 * This symbol, if defined, indicates to the C program that it should
760 #define I_VARARGS /**/
763 * This symbol, if defined, indicates to the C program that it should
766 /*#undef I_VFORK /**/
769 * This symbol contains the size of an int, so that the C preprocessor
770 * can make decisions based on it.
772 #define INTSIZE 2 /**/
775 * This symbol, if defined, indicates that the program should use the
776 * P1003-style directory routines, and include <dirent.h>.
779 * This symbol, if defined, indicates that the program should use the
780 * directory functions by including <sys/dir.h>.
783 * This symbol, if defined, indicates that the program should include the
784 * system's version of ndir.h, rather than the one with this package.
787 * This symbol, if defined, indicates that the program should include the
788 * system's version of sys/ndir.h, rather than the one with this package.
791 * This symbol, if defined, indicates that the program should compile
792 * the ndir.c code provided with the package.
795 * This symbol, if defined, indicates to the C program that the length
796 * of directory entry names is provided by a d_namlen field. Otherwise
797 * you need to do strlen() on the d_name field.
799 /*#undef I_DIRENT /**/
800 #define I_SYS_DIR /**/
802 /*#undef I_SYS_NDIR /**/
803 /*#undef I_MY_DIR /**/
804 /*#undef DIRNAMLEN /**/
807 * This symbol, if defined, indicates that we're using our own malloc.
810 * This symbol defines the kind of ptr returned by malloc and realloc.
812 #define MYMALLOC /**/
814 #define MALLOCPTRTYPE void /**/
818 * This symbol contains the number of bits of random number the rand()
819 * function produces. Usual values are 15, 16, and 31.
821 #define RANDBITS 31 /**/
824 * This symbol holds the name of the directory in which the user wants
825 * to keep publicly executable scripts for the package in question. It
826 * is often a directory that is mounted across diverse architectures.
828 #define SCRIPTDIR "C:/bin/perl" /**/
831 * This symbol contains an list of signal names in order.
833 * Note: This list is specific for Microsoft C 5.1 and 6.0, which only
834 * support SIGINT, SIGFPE, SIGILL, SIGSEGV, and SIGABRT on
835 * DOS 3.x, but in addition defines SIGTERM, SIGBREAK, SIGUSR1,
836 * SIGUSR2, and SIGUSR3.
839 "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE","KILL",\
840 "BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","TSTP","CONT",\
841 "USR3","BREAK","ABRT" /**/
844 * This symbol is defined to be the type of char used in stdio.h.
845 * It has the values "unsigned char" or "char".
847 #define STDCHAR char /**/
850 * This symbol has a value like uid_t, int, ushort, or whatever type is
851 * used to declare user ids in the kernel.
853 #define UIDTYPE int /**/
856 * This symbol indicates how much support of the void type is given by this
857 * compiler. What various bits mean:
859 * 1 = supports declaration of void
860 * 2 = supports arrays of pointers to functions returning void
861 * 4 = supports comparisons between pointers to void functions and
862 * addresses of void functions
864 * The package designer should define VOIDWANT to indicate the requirements
865 * of the package. This can be done either by #defining VOIDWANT before
866 * including config.h, or by defining voidwant in Myinit.U. If the level
867 * of void support necessary is not present, config.h defines void to "int",
868 * VOID to the empty string, and VOIDP to "char *".
871 * This symbol is used for void casts. On implementations which support
872 * void appropriately, its value is "void". Otherwise, its value maps
876 * This symbol's value is "void" if the implementation supports void
877 * appropriately. Otherwise, its value is the empty string. The primary
878 * use of this symbol is in specifying void parameter lists for function
882 * This symbol is used for casting generic pointers. On implementations
883 * which support void appropriately, its value is "void *". Otherwise,
884 * its value is "char *".
890 #if (VOIDHAVE & VOIDWANT) != VOIDWANT
891 #define void int /* is void to be avoided? */
893 #define VOIDP (char *)
894 #define M_VOID /* Xenix strikes again */
897 #define VOIDP (void *)
901 * This symbol contains the name of the private library for this package.
902 * The library is private in the sense that it needn't be in anyone's
903 * execution path, but it should be accessible by the world. The program
904 * should be prepared to do ~ expansion.
906 #define PRIVLIB "/usr/local/lib/perl" /**/
910 * This symbol is defined if you run under an operating system that
911 * distinguishes between binary and text files. If so the function
912 * setmode will be used to set the file into binary mode.
919 /* For MSC5.1, toke.c "runs out of heap space" unless CRIPPLED_CC is
922 #if defined(BUGGY_MSC5) || defined(BUGGY_MSC6)
923 #define CRIPPLED_CC /**/
926 /* MSC (5.1 and 6.0) doesn't know about S_IFBLK or S_IFIFO -- these are
927 * normally found in sys/stat.h
929 #define S_IFBLK (S_IFDIR | S_IFCHR)
930 #define S_IFIFO 0010000
932 /* Define SUFFIX to get special DOS suffix-replacement code */
935 /* Add this for the DOS-specific chdir() function */
936 #define chdir perl_chdir