|
|
1.1 ! root 1: /* tdef.hd -- Definitions for the C pre-processor. ! 2: * ! 3: * ! 4: * ! 5: * ! 6: * The first defines here (copied from the first page of n1.c) ! 7: * control the generation of various permutations of the nroff/ ! 8: * troff programs. This single set of source files generates ! 9: * both nroff and troff, on the PDP-11, VAX, UNIVAC UNIX, TSO ! 10: * (as in IBM), and soon () the 3B-20 Processors without ! 11: * any special compilation procedures, except for the need to define ! 12: * the symbol 'NROFF' when compiling nroff. By default, compilation ! 13: * will produce troff. ! 14: * ! 15: * Some other compilation options are available for building ! 16: * a customized version of nroff or troff. A list of definable ! 17: * symbols and their effect is given here: ! 18: * ! 19: * ! 20: * SMALL Produce a version of nroff or troff that uses a ! 21: * minimum amount of instruction space. This symbol ! 22: * automatically defines NDIAGS and NOCOMPACT (see below). ! 23: * It also causes the following features to be missing: ! 24: * requests ! and pi, troff paper accounting. ! 25: * ! 26: * INCORE Causes nroff/troff to keep both the suffix table (for ! 27: * hyphenation) and the /tmp file in main memory. ! 28: * This version of nroff/troff has a minimum of inter- ! 29: * action with the operating system, but a maximum of ! 30: * main memory size. Not recommended on minis, and probably ! 31: * won't work at all on the 11. It also uses standard ! 32: * I/O, and hence is portable to non-UNIX C environments. ! 33: * Automatically sets NOCOMPACT. ! 34: * ! 35: * NDIAGS Causes the pm request to not be included. ! 36: * ! 37: * NOCOMPACT Produces an nroff/troff without compacted macros. The ! 38: * -c command line option is synonymous with -m, and ! 39: * the -k option is missing. ! 40: * ! 41: * tso Use TSO-style standard I/O ! 42: * ! 43: * ! 44: * All these symbols will cause a suitably modified 'what' command ! 45: * response when applied to the object nroff or troff. ! 46: * ! 47: * Finally, the symbols expected to be set by the C compiler are: ! 48: * ! 49: * unix If this is the UNIX operating system. If this symbol ! 50: * is not defined, it causes the automatic definition of ! 51: * INCORE, SMALL, and tso. The latter is used to control ! 52: * generation of standard I/O calls. ! 53: * ! 54: * ebcdic Produces code to run on a machine with ebcdic as its native ! 55: * character set. nroff/troff still runs in ASCII internally ! 56: * and expects ASCII input, but does produce ebcdic on the ! 57: * standard output channel. ! 58: * ! 59: */ ! 60: ! 61: ! 62: ! 63: #ifndef unix ! 64: #define INCORE ! 65: #define SMALL ! 66: #define tso ! 67: #endif ! 68: #ifdef SMALL ! 69: #define NDIAGS ! 70: #define NOCOMPACT ! 71: #endif ! 72: #ifdef INCORE ! 73: #define NOCOMPACT ! 74: #endif ! 75: /* the following define is the version number of nroff/troff */ ! 76: #define NTVER "@(#)roff.src 1.123" ! 77: #ifdef NROFF /*NROFF*/ ! 78: #define EM t.Em ! 79: #define HOR t.Adj ! 80: #define VERT t.Vert ! 81: #define INCH 240 /*increments per inch*/ ! 82: #define SPS INCH/10 /*space size*/ ! 83: #define SS INCH/10 /* " */ ! 84: #define TRAILER 0 ! 85: #define UNPAD 0227 ! 86: #define PO 0 /*page offset*/ ! 87: #define ASCII 1 ! 88: #define PTID 1 ! 89: #define LG 0 ! 90: #define DTAB 0 /*set at 8 Ems at init time*/ ! 91: #define ICS 2*SPS ! 92: #endif ! 93: #ifndef NROFF /*TROFF*/ ! 94: #define INCH 432 /*troff resolution*/ ! 95: #define SPS 20 /*space size at 10pt; 1/3 Em*/ ! 96: #define SS 12 /*space size in 36ths of an em*/ ! 97: #define TRAILER 4968 /*144*11.5*3 = 11.5 inches*/ ! 98: #define UNPAD 027 ! 99: #define PO 416 /*page offset 26/27ths inch*/ ! 100: #define HOR 1 ! 101: #define VERT 3 ! 102: #define EM (6*(pts&077)) ! 103: #define ASCII 0 ! 104: #define PTID 0 ! 105: #define LG 1 ! 106: #define DTAB (INCH/2) ! 107: #define ICS 3*SPS ! 108: #endif ! 109: ! 110: #ifdef INCORE ! 111: #define NMACS 100 /* max number of nested macro calls */ ! 112: #define MARGL 512 /* max total length of macro args */ ! 113: #define TSTBUF 1000 /* terminal strings buffer */ ! 114: #endif ! 115: #ifdef unix ! 116: #include <signal.h> ! 117: #endif ! 118: #ifdef tso ! 119: #include "stdio.h" ! 120: #endif ! 121: #define BSIZE 512 /* size of any IO buffers */ ! 122: #define ARGLEN 50 /* exec request (!) argument length (approx) */ ! 123: #define NARSP 0177 /*narrow space*/ ! 124: #define HNSP 0226 /*half narrow space*/ ! 125: #define PS 10 /*default point size*/ ! 126: #define FT 0 /*default font position*/ ! 127: #define LL 65*INCH/10 /*line length; 39picas=6.5in*/ ! 128: #define VS INCH/6 /*vert space; 12points*/ ! 129: #define NN 300 /*number registers*/ ! 130: #define NNAMES 14 /*predefined reg names*/ ! 131: #define NIF 15 /*if-else nesting*/ ! 132: #define NS 64 /*name buffer*/ ! 133: #define NSN 4 /* number of macro packages per command line */ ! 134: /* NOTE: must change with definition of nextf in ni.c */ ! 135: #define NTM 256 /*tm buffer*/ ! 136: #define NEV 3 /*environments*/ ! 137: #define EVLSZ 10 /*size of ev stack*/ ! 138: #define NM 350 /*requests + macros*/ ! 139: #define DELTA (256*sizeof(int)) /*delta core bytes*/ ! 140: #define NHYP 10 /*max hyphens per word*/ ! 141: #define NHEX 128 /*byte size of exception word list*/ ! 142: #define NTAB 35 /*tab stops*/ ! 143: #define NSO 5 /*"so" depth*/ ! 144: #define WDSIZE 500 /*word buffer size*/ ! 145: #define LNSIZE 680 /*line buffer size*/ ! 146: #define NDI 5 /*number of diversions*/ ! 147: #define DBL 0100000 /*double size indicator*/ ! 148: #define MOT 0100000 /*motion character indicator*/ ! 149: #define MOTV 0160000 /*clear for motion part*/ ! 150: #define VMOT 0040000 /*vert motion bit*/ ! 151: #define NMOT 0020000 /* negative motion indicator*/ ! 152: #define MMASK 0100000 /*macro mask indicator*/ ! 153: #define CMASK 0100377 ! 154: #define ZBIT 0400 /*zero width char*/ ! 155: #define BMASK 0377 ! 156: #define BYTE 8 ! 157: #define IMP 004 /*impossible char*/ ! 158: #define FILLER 037 ! 159: #define PRESC 026 ! 160: #define HX 0376 /*High-order part of xlss*/ ! 161: #define LX 0375 /*low-order part of xlss*/ ! 162: #define COLON 013 /* lem's character */ ! 163: #define CONT 025 ! 164: #define XPAR 030 ! 165: #define ESC 032 ! 166: #define FLSS 031 ! 167: #define JREG 0374 ! 168: #define NTRAP 20 /*number of traps*/ ! 169: #define NPN 20 /*numbers in "-o"*/ ! 170: #define T_PAD 0101 /*cat padding*/ ! 171: #define T_INIT 0100 ! 172: #define T_IESC 16 /*initial offset*/ ! 173: #define T_STOP 0111 ! 174: #define NPP 10 /*pads per field*/ ! 175: #define FBUFSZ 256 /*field buf size words*/ ! 176: #define OBUFSZ 512 /*bytes*/ ! 177: #define IBUFSZ 512 /*bytes*/ ! 178: #define NC 256 /*cbuf size words*/ ! 179: #define NOV 10 /*number of overstrike chars*/ ! 180: #define ZONE 5 /*5hrs for EST*/ ! 181: #define LEFT 035 ! 182: #define RIGHT 036 ! 183: #define LEADER 001 ! 184: #define TAB 011 ! 185: #define TMASK 037777 ! 186: #define RTAB 0100000 ! 187: #define CTAB 0040000 ! 188: #define OHC 024 ! 189: ! 190: #define PAIR(A,B) (A|(B<<BYTE)) ! 191: ! 192: #define BLK 128 /*alloc block words*/ ! 193: typedef unsigned filep; ! 194: #define NBLIST 512 /* /tmp file allocation list */ ! 195: ! 196: /* Compiler Dependent Defines */ ! 197: ! 198: #ifdef tso ! 199: #define filedes FILE * ! 200: #define cptmpfaddr(new,old) new.o = old.o; new.b = old.b ! 201: #endif ! 202: #ifdef unix ! 203: typedef int filedes; ! 204: #define cptmpfaddr(new,old) new = old ! 205: #endif ! 206: ! 207: ! 208: /* The following block of defines are used for the name table hashing ! 209: * algorithms (see fname and dname). These definitions are used by the ! 210: * bldtable program for building the initial names table (which contains ! 211: * request and number register names ! 212: */ ! 213: ! 214: #define TAGSMASK (MMASK) /* tags on name */ ! 215: #define NAMEMASK (~TAGSMASK) /* name part */ ! 216: /* MMASK 0100000 macro (not request) */ ! 217: #define HBMASK 0177400 /* high order byte mask */ ! 218: ! 219: #define HASH(NMPR,SIZE) (((((unsigned)(NMPR&HBMASK))>>3)- \ ! 220: (NMPR&BMASK))%SIZE) ! 221: /* NOTE: this may return a negative, which must ! 222: be made positive */ ! 223: ! 224: ! 225: /* The following defines used to be regular procedures, but are ! 226: * defined here to produce inline code. ! 227: */ ! 228: ! 229: #define incoff(fp) { if (!(fp.o = (fp.o + 1) & (BLK - 1)))\ ! 230: if ((fp.b = blist[fp.b]) == (filep)-1) errbsa(); } ! 231: #define atoi(i) ((int) atoi0(i)) ! 232: #define boff(i) ((i-1)*BLK + NEV*sizeof(struct envblock)) ! 233: #define horiz(i) { register int jj; \ ! 234: vflag = 0; \ ! 235: if (jj=i) pchar(makem(jj)); } ! 236: #define maplow(i) (((i&CMASK) < 'a') ? ((i&CMASK)+'a'-'A') : (i&CMASK)) ! 237: ! 238: #ifndef ebcdic ! 239: #define aprstr(s) prstr(s) ! 240: #define aprstrfl(s) prstrfl(s) ! 241: #endif ! 242: ! 243: ! 244: /* The following defines are used for the getch0 character pointer ! 245: * stack. The set.. defines are used to enter a new pointer into ! 246: * the stack. The defines following are pointer names and their ! 247: * traditional entry in the stack. 'stack' meaning that is the ! 248: * way characters are removed from the structure - in practice, ! 249: * pointers are entered into fixed positions in the structure, and ! 250: * in any order of insertion. ! 251: */ ! 252: ! 253: #define setap(i) { cstk[AP] = i; if (AP > cstkl) cstkl = AP; } ! 254: #define setcp(i) { cstk[CP] = i; if (CP > cstkl) cstkl = CP; } ! 255: #define setrp(i) { cstk[RP] = i; if (RP > cstkl) cstkl = RP; } ! 256: #define setch0(i) { tch[0] = i; cstk[cstkl = CH0] = tch; } ! 257: ! 258: #define CH0 4 /* single character top priority buffer */ ! 259: #define RP 3 /* repeat characters buffer pointer */ ! 260: #define CP 2 /* arbitrary string pointer */ ! 261: #define AP 1 /* pointer to macro call argument */ ! 262: ! 263: #define RPTLEN 135 /* max length of repeat string */ ! 264: ! 265: #define NB 5 /* number of macro cache buffers */ ! 266: ! 267: ! 268: ! 269: /* The names in the next set of defines are the names of all the ! 270: * items in the environment block. The environment block is a ! 271: * structure, defined in ni.c. The names below used to be names ! 272: * for the variables themselves, but now are mapped into ! 273: * structure accesses. ! 274: */ ! 275: ! 276: #ifndef INCORE ! 277: #define ics eblock.Eics ! 278: #define ic eblock.Eic ! 279: #define icf eblock.Eicf ! 280: #define chbits eblock.Echbits ! 281: #define nmbits eblock.Enmbits ! 282: #define apts eblock.Eapts ! 283: #define apts1 eblock.Eapts1 ! 284: #define pts eblock.Epts ! 285: #define pts1 eblock.Epts1 ! 286: #define font eblock.Efont ! 287: #define font1 eblock.Efont1 ! 288: #define sps eblock.Esps ! 289: #ifndef NROFF ! 290: #define spacesz eblock.Espacesz ! 291: #define spbits eblock.Espbits ! 292: #endif ! 293: #define lss eblock.Elss ! 294: #define lss1 eblock.Elss1 ! 295: #define ls eblock.Els ! 296: #define ls1 eblock.Els1 ! 297: #define ll eblock.Ell ! 298: #define ll1 eblock.Ell1 ! 299: #define lt eblock.Elt ! 300: #define lt1 eblock.Elt1 ! 301: #define ad eblock.Ead ! 302: #define nms eblock.Enms ! 303: #define ndf eblock.Endf ! 304: #define fi eblock.Efi ! 305: #define cc eblock.Ecc ! 306: #define c2 eblock.Ec2 ! 307: #define ohc eblock.Eohc ! 308: #define hyf eblock.Ehyf ! 309: #define hyoff eblock.Ehyoff ! 310: #define un1 eblock.Eun1 ! 311: #define tabc eblock.Etabc ! 312: #define dotc eblock.Edotc ! 313: #define adsp eblock.Eadsp ! 314: #define adrem eblock.Eadrem ! 315: #define lastl eblock.Elastl ! 316: #define nel eblock.Enel ! 317: #define admod eblock.Eadmod ! 318: #define wordp eblock.Ewordp ! 319: #define spflg eblock.Espflg ! 320: #define linep eblock.Elinep ! 321: #define wdend eblock.Ewdend ! 322: #define wdstart eblock.Ewdstart ! 323: #define wne eblock.Ewne ! 324: #define ne eblock.Ene ! 325: #define nc eblock.Enc ! 326: #define nb eblock.Enb ! 327: #define lnmod eblock.Elnmod ! 328: #define nwd eblock.Enwd ! 329: #define nn eblock.Enn ! 330: #define ni eblock.Eni ! 331: #define ul eblock.Eul ! 332: #define cu eblock.Ecu ! 333: #define ce eblock.Ece ! 334: #define in eblock.Ein ! 335: #define in1 eblock.Ein1 ! 336: #define un eblock.Eun ! 337: #define wch eblock.Ewch ! 338: #define pendt eblock.Ependt ! 339: #define pendw eblock.Ependw ! 340: #define pendnf eblock.Ependnf ! 341: #define spread eblock.Espread ! 342: #define it eblock.Eit ! 343: #define itmac eblock.Eitmac ! 344: #define lnsize eblock.Elnsize ! 345: #define hyptr eblock.Ehyptr ! 346: #define tabtab eblock.Etabtab ! 347: #define line eblock.Eline ! 348: #define word eblock.Eword ! 349: ! 350: #else ! 351: ! 352: #define ics eblock[ev].Eics ! 353: #define ic eblock[ev].Eic ! 354: #define icf eblock[ev].Eicf ! 355: #define chbits eblock[ev].Echbits ! 356: #define nmbits eblock[ev].Enmbits ! 357: #define apts eblock[ev].Eapts ! 358: #define apts1 eblock[ev].Eapts1 ! 359: #define pts eblock[ev].Epts ! 360: #define pts1 eblock[ev].Epts1 ! 361: #define font eblock[ev].Efont ! 362: #define font1 eblock[ev].Efont1 ! 363: #define sps eblock[ev].Esps ! 364: #ifndef NROFF ! 365: #define spacesz eblock[ev].Espacesz ! 366: #define spbits eblock[ev].Espbits ! 367: #endif ! 368: #define lss eblock[ev].Elss ! 369: #define lss1 eblock[ev].Elss1 ! 370: #define ls eblock[ev].Els ! 371: #define ls1 eblock[ev].Els1 ! 372: #define ll eblock[ev].Ell ! 373: #define ll1 eblock[ev].Ell1 ! 374: #define lt eblock[ev].Elt ! 375: #define lt1 eblock[ev].Elt1 ! 376: #define ad eblock[ev].Ead ! 377: #define nms eblock[ev].Enms ! 378: #define ndf eblock[ev].Endf ! 379: #define fi eblock[ev].Efi ! 380: #define cc eblock[ev].Ecc ! 381: #define c2 eblock[ev].Ec2 ! 382: #define ohc eblock[ev].Eohc ! 383: #define hyf eblock[ev].Ehyf ! 384: #define hyoff eblock[ev].Ehyoff ! 385: #define un1 eblock[ev].Eun1 ! 386: #define tabc eblock[ev].Etabc ! 387: #define dotc eblock[ev].Edotc ! 388: #define adsp eblock[ev].Eadsp ! 389: #define adrem eblock[ev].Eadrem ! 390: #define lastl eblock[ev].Elastl ! 391: #define nel eblock[ev].Enel ! 392: #define admod eblock[ev].Eadmod ! 393: #define wordp eblock[ev].Ewordp ! 394: #define spflg eblock[ev].Espflg ! 395: #define linep eblock[ev].Elinep ! 396: #define wdend eblock[ev].Ewdend ! 397: #define wdstart eblock[ev].Ewdstart ! 398: #define wne eblock[ev].Ewne ! 399: #define ne eblock[ev].Ene ! 400: #define nc eblock[ev].Enc ! 401: #define nb eblock[ev].Enb ! 402: #define lnmod eblock[ev].Elnmod ! 403: #define nwd eblock[ev].Enwd ! 404: #define nn eblock[ev].Enn ! 405: #define ni eblock[ev].Eni ! 406: #define ul eblock[ev].Eul ! 407: #define cu eblock[ev].Ecu ! 408: #define ce eblock[ev].Ece ! 409: #define in eblock[ev].Ein ! 410: #define in1 eblock[ev].Ein1 ! 411: #define un eblock[ev].Eun ! 412: #define wch eblock[ev].Ewch ! 413: #define pendt eblock[ev].Ependt ! 414: #define pendw eblock[ev].Ependw ! 415: #define pendnf eblock[ev].Ependnf ! 416: #define spread eblock[ev].Espread ! 417: #define it eblock[ev].Eit ! 418: #define itmac eblock[ev].Eitmac ! 419: #define lnsize eblock[ev].Elnsize ! 420: #define hyptr eblock[ev].Ehyptr ! 421: #define tabtab eblock[ev].Etabtab ! 422: #define line eblock[ev].Eline ! 423: #define word eblock[ev].Eword ! 424: #endif ! 425: ! 426: /* defines for nroff/troff data area (struct datablock dblock) */ ! 427: ! 428: #define r dblock.Dr ! 429: #define nametab dblock.Dnametab ! 430: #define nlist dblock.Dnlist ! 431: #define mlist dblock.Dmlist ! 432: #define vlist dblock.Dvlist ! 433: #define inc dblock.Dinc ! 434: #define fmt dblock.Dfmt ! 435: #define trtab dblock.Dtrtab ! 436: #define blist dblock.Dblist
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.