/* * definitions unique to all of C news * things marked with qqq are subject to being configured by "build" */ /* * tunable parameters * which actually very seldom need to be tuned * in particular, don't get alarmed about MAXCOMP, it's not used for * anything where it matters */ #define MAXPATH 1024 /* max. length of pwd output */ #define MAXCOMP 14 /* file name component length */ #define MAXHOST 128 /* max. length of this host's name */ #define SPOOLTMP ".tmpXXXXXX" /* template for NEWSARTS temporary link */ /* STATIC & FORWARD must agree to avoid redeclarations(!) */ #ifndef STATIC #define STATIC static /* "static" when not debugging|profiling */ #endif /* adapt to compiler limitations */ #ifndef FORWARD #ifdef pdp11 #define FORWARD /* "static" except for dmr's 11 compiler */ #else #define FORWARD static /* "static" except for dmr's 11 compiler */ #endif #endif #ifdef NOVOID #define void int /* if your compiler doesn't understand void's */ #endif #ifdef NOUNSLONG #define MAXLONG 017777777777L /* if your compiler lacks "unsigned long" type */ #endif /* fundamental constants of the implementation */ /* #define SMALLMEM /* qqq for PDP-11s, PDP-8s, IBM PCs, etc. */ /* #define FASTSTRCHR /* qqq if string functions are very fast */ /* automatic configuration */ #ifdef pdp11 #ifndef SMALLMEM #define SMALLMEM #endif /* SMALLMEM */ #endif /* pdp11 */ /* types */ typedef short statust; typedef char boolean; /* status bits */ #define ST_OKAY 0 /* nothing wrong */ #define ST_SHORT (1<<1) /* article shorter than byte count; truncated? */ #define ST_ACCESS (1<<2) /* no access permission */ #define ST_REFUSED (1<<3) /* article was deliberately refused - OK */ #define ST_DROPPED (1<<4) /* article was accidentally dropped */ #define ST_DISKFULL (1<<5) /* disk full - give up */ #define ST_JUNKED (1<<6) /* article was accepted, but junked */ #define ST_NEEDATTN (1<<7) /* news system needs human attention - give up */ /* newsgroup specific definitions */ #define NGSEP ',' /* separates groups */ #define NGNEG '!' /* preceding a pattern, negates it */ #define NGDELIM '.' /* within a group */ #define SNGDELIM "." /* string of NGDELIM */ #define FNDELIM '/' /* within a group, on disk */ #define SFNDELIM "/" /* string of FNDELIM */ /* macros, replacing functions for speed */ #define max(a,b) ((a) > (b)? (a): (b)) #define min(a,b) ((a) < (b)? (a): (b)) #define iswhite(c) ((c) == ' ' || (c) == '\t') /* STREQ is an optimised strcmp(a,b)==0 */ #define STREQ(a, b) ((a)[0] == (b)[0] && strcmp(a, b) == 0) /* STREQN is an optimised strncmp(a,b,n)==0; assumes n > 0 */ #define STREQN(a, b, n) ((a)[0] == (b)[0] && strncmp(a, b, n) == 0) #define STRLEN(s) ((unsigned)sizeof(s) - 1) /* s must be a char array */ #ifdef FASTSTRCHR #define STRCHR(src, chr, dest) (dest) = strchr(src, chr) #else #define STRCHR(src, chr, dest) \ for ((dest) = (src); *(dest) != '\0' && *(dest) != (chr); ++(dest)) \ ; \ if (*(dest) == '\0') \ (dest) = NULL /* N.B.: missing semi-colon */ #endif /* macros, of necessity */ /* nnafree(any **) where "any" is any type; must be a macro */ #define nnafree(mempp) (*(mempp) != 0? (free((char *)*(mempp)), (*(mempp) = 0)): 0) #ifdef lint static nnfree(mempp) /* If *mempp is non-null, free it and zero it. */ register char **mempp; /* pointer to malloc'ed ptr. */ { if (*mempp != 0) { free(*mempp); *mempp = 0; } } #else /* lint */ #define nnfree nnafree #endif /* lint */ #define YES 1 #define NO 0 #define SIZENUL (sizeof(char)) /* size in bytes of an ASCII NUL byte */ #define NOTALLHDRS NO /* hdrdump flags for "all headers seen?" */ #define ALLHDRS YES #define DEFEXP "-" /* default expiry period */ /* imports from news */ extern char *progname; extern void fclsexec(); /* from ../libos */ extern FILE *fopenexcl(); /* from ../libos */ extern char *getcwd(); /* from ../libos */ extern FILE *fopenclex(), *fopenwclex(); /* from ../libcnews/fopenclex.c */ extern char *gethdr(); /* from ../libcnews/gethdr.c */ extern char *hostname(); /* from ../libcnews/hostname.c */ extern void lockdebug(), newslock(), newsunlock(); /* from ../libcnews/lock.c */ extern void errunlock(); /* from ../libcnews/lock.c */ extern int ltozan(), ltoza(); /* from ../libcnews/ltoza.c */ extern void matchdebug(); /* from ../libcnews/ngmatch.c */ extern boolean ngmatch(); /* from ../libcnews/ngmatch.c */ extern void mkfilenm(); /* from ../libcnews/string.c */ extern char *trim(); /* from ../libcnews/string.c */ extern boolean anyhostin(), hostin(); /* from ../libcnews/string.c */ extern int hopcount(); /* from ../libcnews/string.c */ extern char *skipsp(), *first(), *strsvto(); /* from ../libcnews/string.c */ extern char *sendersite(), *nullify(); /* from ../libcnews/string.c */ extern char *canonpath(); /* from ../libcnews/string.c */ extern void timestamp(); /* from ../libcnews/time.c */ extern void warning(), error(); /* from ../libc */ extern void closeall(); /* from ../libc */ extern void stdfdopen(); /* from ../libc */ extern int nfclose(); /* from ../libc */ #include "alloc.h" /* ugh */