|
|
1.1 ! root 1: /* uucp.h ! 2: Header file for the UUCP package. ! 3: ! 4: Copyright (C) 1991, 1992 Ian Lance Taylor ! 5: ! 6: This file is part of the Taylor UUCP package. ! 7: ! 8: This program is free software; you can redistribute it and/or ! 9: modify it under the terms of the GNU General Public License as ! 10: published by the Free Software Foundation; either version 2 of the ! 11: License, or (at your option) any later version. ! 12: ! 13: This program is distributed in the hope that it will be useful, but ! 14: WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 16: General Public License for more details. ! 17: ! 18: You should have received a copy of the GNU General Public License ! 19: along with this program; if not, write to the Free Software ! 20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ! 21: ! 22: The author of the program may be contacted at [email protected] or ! 23: c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254. ! 24: */ ! 25: ! 26: /* Get the system configuration parameters. */ ! 27: #include "conf.h" ! 28: #include "policy.h" ! 29: ! 30: /* Get a definition for ANSI_C if we weren't given one. */ ! 31: #ifndef ANSI_C ! 32: #ifdef __STDC__ ! 33: #define ANSI_C 1 ! 34: #else /* ! defined (__STDC__) */ ! 35: #define ANSI_C 0 ! 36: #endif /* ! defined (__STDC__) */ ! 37: #endif /* ! defined (ANSI_C) */ ! 38: ! 39: /* Pass this definition into uuconf.h. */ ! 40: #define UUCONF_ANSI_C ANSI_C ! 41: ! 42: /* We always include some standard header files. We need <signal.h> ! 43: to define sig_atomic_t. */ ! 44: #if HAVE_STDDEF_H ! 45: #include <stddef.h> ! 46: #endif ! 47: #include <stdio.h> ! 48: #include <signal.h> ! 49: ! 50: /* On some systems we need <sys/types.h> to get sig_atomic_t or ! 51: size_t or time_t. */ ! 52: #if ! HAVE_SIG_ATOMIC_T_IN_SIGNAL_H && HAVE_SIG_ATOMIC_T_IN_TYPES_H ! 53: #define USE_TYPES_H 1 ! 54: #else ! 55: #if ! HAVE_SIZE_T_IN_STDDEF_H && HAVE_SIZE_T_IN_TYPES_H ! 56: #define USE_TYPES_H 1 ! 57: #else ! 58: #if ! HAVE_TIME_T_IN_TIME_H && HAVE_TIME_T_IN_TYPES_H ! 59: #define USE_TYPES_H 1 ! 60: #endif ! 61: #endif ! 62: #endif ! 63: ! 64: #ifndef USE_TYPES_H ! 65: #define USE_TYPES_H 0 ! 66: #endif ! 67: ! 68: #if USE_TYPES_H ! 69: #include <sys/types.h> ! 70: #endif ! 71: ! 72: /* Make sure we have sig_atomic_t. */ ! 73: #if ! HAVE_SIG_ATOMIC_T_IN_SIGNAL_H && ! HAVE_SIG_ATOMIC_T_IN_TYPES_H ! 74: #ifndef SIG_ATOMIC_T ! 75: /* There is no portable definition for sig_atomic_t. */ ! 76: #define SIG_ATOMIC_T char ! 77: #endif /* ! defined (SIG_ATOMIC_T) */ ! 78: typedef SIG_ATOMIC_T sig_atomic_t; ! 79: #endif /* ! HAVE_SIG_ATOMIC_T_IN_SIGNAL_H && ! HAVE_SIG_ATOMIC_T_IN_TYPES_H */ ! 80: ! 81: /* Make sure we have size_t. We use int as the default because the ! 82: main use of this type is to provide an argument to malloc and ! 83: realloc. On a system which does not define size_t, int is ! 84: certainly the correct type to use. */ ! 85: #if ! HAVE_SIZE_T_IN_STDDEF_H && ! HAVE_SIZE_T_IN_TYPES_H ! 86: #ifndef SIZE_T ! 87: #define SIZE_T unsigned ! 88: #endif /* ! defined (SIZE_T) */ ! 89: typedef SIZE_T size_t; ! 90: #endif /* ! HAVE_SIZE_T_IN_STDDEF_H && ! HAVE_SIZE_T_IN_TYPES_H */ ! 91: ! 92: /* Make sure we have time_t. We use long as the default. We don't ! 93: bother to let conf.h override this, since on a system which doesn't ! 94: define time_t long must be correct. */ ! 95: #if ! HAVE_TIME_T_IN_TIME_H && ! HAVE_TIME_T_IN_TYPES_H ! 96: typedef long time_t; ! 97: #endif ! 98: ! 99: /* Set up some definitions for both ANSI C and Classic C. ! 100: ! 101: P() -- for function prototypes (e.g. extern int foo P((int)) ). ! 102: pointer -- for a generic pointer (i.e. void *). ! 103: constpointer -- for a generic pointer to constant data. ! 104: BUCHAR -- to convert a character to unsigned. */ ! 105: #if ANSI_C ! 106: #if ! HAVE_VOID || ! HAVE_UNSIGNED_CHAR ! 107: #error ANSI C compiler without void or unsigned char ! 108: #endif ! 109: #define P(x) x ! 110: typedef void *pointer; ! 111: typedef const void *constpointer; ! 112: #define BUCHAR(b) ((unsigned char) (b)) ! 113: #else /* ! ANSI_C */ ! 114: /* Handle uses of const, volatile and void in Classic C. */ ! 115: #define const ! 116: #define volatile ! 117: #if ! HAVE_VOID ! 118: #define void int ! 119: #endif ! 120: #define P(x) () ! 121: typedef char *pointer; ! 122: typedef const char *constpointer; ! 123: #if HAVE_UNSIGNED_CHAR ! 124: #define BUCHAR(b) ((unsigned char) (b)) ! 125: #else /* ! HAVE_UNSIGNED_CHAR */ ! 126: /* This should work on most systems, but not necessarily all. */ ! 127: #define BUCHAR(b) ((b) & 0xff) ! 128: #endif /* ! HAVE_UNSIGNED_CHAR */ ! 129: #endif /* ! ANSI_C */ ! 130: ! 131: /* Make sure we have a definition for offsetof. */ ! 132: #ifndef offsetof ! 133: #define offsetof(type, field) \ ! 134: ((size_t) ((char *) &(((type *) 0)->field) - (char *) (type *) 0)) ! 135: #endif ! 136: ! 137: /* Only use inline with gcc. */ ! 138: #ifndef __GNUC__ ! 139: #define __inline__ ! 140: #endif ! 141: ! 142: /* Get the string functions, which are used throughout the code. */ ! 143: #if HAVE_MEMORY_H ! 144: #include <memory.h> ! 145: #else ! 146: /* We really need a definition for memchr, and this should not ! 147: conflict with anything in <string.h>. I hope. */ ! 148: extern pointer memchr (); ! 149: #endif ! 150: ! 151: #if HAVE_STRING_H ! 152: #include <string.h> ! 153: #else /* ! HAVE_STRING_H */ ! 154: #if HAVE_STRINGS_H ! 155: #include <strings.h> ! 156: #else /* ! HAVE_STRINGS_H */ ! 157: extern char *strcpy (), *strncpy (), *strchr (), *strrchr (), *strtok (); ! 158: extern char *strcat (), *strerror (), *strstr (); ! 159: extern size_t strlen (), strspn (), strcspn (); ! 160: #if ! HAVE_MEMORY_H ! 161: extern pointer memcpy (), memchr (); ! 162: #endif /* ! HAVE_MEMORY_H */ ! 163: #endif /* ! HAVE_STRINGS_H */ ! 164: #endif /* ! HAVE_STRING_H */ ! 165: ! 166: /* Get what we need from <stdlib.h>. */ ! 167: #if HAVE_STDLIB_H ! 168: #include <stdlib.h> ! 169: #else /* ! HAVE_STDLIB_H */ ! 170: extern pointer malloc (), realloc (), bsearch (); ! 171: extern long strtol (); ! 172: extern char *getenv (); ! 173: #endif /* ! HAVE_STDLIB_H */ ! 174: ! 175: /* NeXT uses <libc.h> to declare a bunch of functions. */ ! 176: #if HAVE_LIBC_H ! 177: #include <libc.h> ! 178: #endif ! 179: ! 180: /* Make sure we have the EXIT_ macros. */ ! 181: #ifndef EXIT_SUCCESS ! 182: #define EXIT_SUCCESS (0) ! 183: #endif ! 184: #ifndef EXIT_FAILURE ! 185: #define EXIT_FAILURE (1) ! 186: #endif ! 187: ! 188: /* If we need to declare errno, do so. I don't want to always do ! 189: this, because some system might theoretically have a different ! 190: declaration for errno. On a POSIX system this is sure to work. */ ! 191: #if ! HAVE_ERRNO_DECLARATION ! 192: extern int errno; ! 193: #endif ! 194: ! 195: /* If the system has the socket call, guess that we can compile the ! 196: TCP code. */ ! 197: #define HAVE_TCP HAVE_SOCKET ! 198: ! 199: /* If the system has the t_open call, guess that we can compile the ! 200: TLI code. */ ! 201: #define HAVE_TLI HAVE_T_OPEN ! 202: ! 203: /* The boolean type holds boolean values. */ ! 204: typedef int boolean; ! 205: #undef TRUE ! 206: #undef FALSE ! 207: #define TRUE (1) ! 208: #define FALSE (0) ! 209: ! 210: /* The openfile_t type holds an open file. This depends on whether we ! 211: are using stdio or not. */ ! 212: #if USE_STDIO ! 213: ! 214: typedef FILE *openfile_t; ! 215: #define EFILECLOSED ((FILE *) NULL) ! 216: #define ffileisopen(e) ((e) != NULL) ! 217: #define ffileeof(e) feof (e) ! 218: #define cfileread(e, z, c) fread ((z), 1, (c), (e)) ! 219: #define ffilereaderror(e, c) ferror (e) ! 220: #define cfilewrite(e, z, c) fwrite ((z), 1, (c), (e)) ! 221: #ifdef SEEK_SET ! 222: #define ffileseek(e, i) (fseek ((e), (long) (i), SEEK_SET) == 0) ! 223: #define ffilerewind(e) (fseek ((e), (long) 0, SEEK_SET) == 0) ! 224: #else ! 225: #define ffileseek(e, i) (fseek ((e), (long) (i), 0) == 0) ! 226: #define ffilerewind(e) (fseek ((e), (long) 0, 0) == 0) ! 227: #endif ! 228: #define ffileclose(e) (fclose (e) == 0) ! 229: ! 230: #else /* ! USE_STDIO */ ! 231: ! 232: #if HAVE_UNISTD_H ! 233: #include <unistd.h> ! 234: #endif ! 235: ! 236: typedef int openfile_t; ! 237: #define EFILECLOSED (-1) ! 238: #define ffileisopen(e) ((e) >= 0) ! 239: #define ffileeof(e) (FALSE) ! 240: #define cfileread(e, z, c) read ((e), (z), (c)) ! 241: #define ffilereaderror(e, c) ((c) < 0) ! 242: #define cfilewrite(e, z, c) write ((e), (z), (c)) ! 243: #ifdef SEEK_SET ! 244: #define ffileseek(e, i) (lseek ((e), (long) i, SEEK_SET) >= 0) ! 245: #define ffilerewind(e) (lseek ((e), (long) 0, SEEK_SET) >= 0) ! 246: #else ! 247: #define ffileseek(e, i) (lseek ((e), (long) i, 0) >= 0) ! 248: #define ffilerewind(e) (lseek ((e), (long) 0, 0) >= 0) ! 249: #endif ! 250: #define ffileclose(e) (close (e) >= 0) ! 251: ! 252: #endif /* ! USE_STDIO */ ! 253: ! 254: /* A prototype for main to avoid warnings from gcc 2.0 ! 255: -Wmissing-prototype option. */ ! 256: extern int main P((int argc, char **argv)); ! 257: ! 258: /* Some standard routines which we only define if they are not present ! 259: on the system we are compiling on. */ ! 260: ! 261: #if ! HAVE_GETLINE ! 262: /* Read a line from a file. */ ! 263: extern int getline P((char **pz, size_t *pc, FILE *e)); ! 264: #endif ! 265: ! 266: #if ! HAVE_REMOVE ! 267: /* Erase a file. */ ! 268: #undef remove ! 269: extern int remove P((const char *zfile)); ! 270: #endif ! 271: ! 272: #if ! HAVE_STRDUP ! 273: /* Copy a string into memory. */ ! 274: extern char *strdup P((const char *z)); ! 275: #endif ! 276: ! 277: #if ! HAVE_STRSTR ! 278: /* Look for one string within another. */ ! 279: extern char *strstr P((const char *zouter, const char *zinner)); ! 280: #endif ! 281: ! 282: #if ! HAVE_STRCASECMP ! 283: #if HAVE_STRICMP ! 284: #define strcasecmp stricmp ! 285: #else /* ! HAVE_STRICMP */ ! 286: /* Rename strcasecmp to avoid ANSI C name space. */ ! 287: #define strcasecmp xstrcasecmp ! 288: extern int strcasecmp P((const char *z1, const char *z2)); ! 289: #endif /* ! HAVE_STRICMP */ ! 290: #endif /* ! HAVE_STRCASECMP */ ! 291: ! 292: #if ! HAVE_STRNCASECMP ! 293: #if HAVE_STRNICMP ! 294: #define strncasecmp strnicmp ! 295: #else /* ! HAVE_STRNICMP */ ! 296: /* Rename strncasecmp to avoid ANSI C name space. */ ! 297: #define strncasecmp xstrncasecmp ! 298: extern int strncasecmp P((const char *z1, const char *z2, size_t clen)); ! 299: #endif /* ! HAVE_STRNICMP */ ! 300: #endif /* ! HAVE_STRNCASECMP */ ! 301: ! 302: #if ! HAVE_STRERROR ! 303: /* Get a string corresponding to an error message. */ ! 304: #undef strerror ! 305: extern char *strerror P((int ierr)); ! 306: #endif ! 307: ! 308: /* Get the appropriate definitions for memcmp, memcpy, memchr and ! 309: bzero. */ ! 310: #if ! HAVE_MEMCMP ! 311: #if HAVE_BCMP ! 312: #define memcmp(p1, p2, c) bcmp ((p1), (p2), (c)) ! 313: #else /* ! HAVE_BCMP */ ! 314: extern int memcmp P((constpointer p1, constpointer p2, size_t c)); ! 315: #endif /* ! HAVE_BCMP */ ! 316: #endif /* ! HAVE_MEMCMP */ ! 317: ! 318: #if ! HAVE_MEMCPY ! 319: #if HAVE_BCOPY ! 320: #define memcpy(pto, pfrom, c) bcopy ((pfrom), (pto), (c)) ! 321: #else /* ! HAVE_BCOPY */ ! 322: extern pointer memcpy P((pointer pto, constpointer pfrom, size_t c)); ! 323: #endif /* ! HAVE_BCOPY */ ! 324: #endif /* ! HAVE_MEMCPY */ ! 325: ! 326: #if ! HAVE_MEMCHR ! 327: extern pointer memchr P((constpointer p, int b, size_t c)); ! 328: #endif ! 329: ! 330: #if ! HAVE_BZERO ! 331: #if HAVE_MEMSET ! 332: #define bzero(p, c) memset ((p), 0, (c)) ! 333: #else /* ! HAVE_MEMSET */ ! 334: extern void bzero P((pointer p, int c)); ! 335: #endif /* ! HAVE_MEMSET */ ! 336: #endif /* ! HAVE_BZERO */ ! 337: ! 338: /* Look up a character in a string. */ ! 339: #if ! HAVE_STRCHR ! 340: #if HAVE_INDEX ! 341: #define strchr index ! 342: extern char *index (); ! 343: #else /* ! HAVE_INDEX */ ! 344: extern char *strchr P((const char *z, int b)); ! 345: #endif /* ! HAVE_INDEX */ ! 346: #endif /* ! HAVE_STRCHR */ ! 347: ! 348: #if ! HAVE_STRRCHR ! 349: #if HAVE_RINDEX ! 350: #define strrchr rindex ! 351: extern char *rindex (); ! 352: #else /* ! HAVE_RINDEX */ ! 353: extern char *strrchr P((const char *z, int b)); ! 354: #endif /* ! HAVE_RINDEX */ ! 355: #endif /* ! HAVE_STRRCHR */ ! 356: ! 357: /* Turn a string into a long integer. */ ! 358: #if ! HAVE_STRTOL ! 359: extern long strtol P((const char *, char **, int)); ! 360: #endif ! 361: ! 362: /* Lookup a key in a sorted array. */ ! 363: #if ! HAVE_BSEARCH ! 364: extern pointer bsearch P((constpointer pkey, constpointer parray, ! 365: size_t celes, size_t cbytes, ! 366: int (*pficmp) P((constpointer, constpointer)))); ! 367: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.