|
|
1.1 ! root 1: #include <signal.h> ! 2: ! 3: #define MAXPTR (char *)-1 /* max value of any pointer variable */ ! 4: /* likely to be machine-dependent */ ! 5: ! 6: /* starting values for typesetting parameters: */ ! 7: ! 8: #define PS 10 /* default point size */ ! 9: #define FT 1 /* default font position */ ! 10: #define LL (unsigned) 65*INCH/10 /* line length; 39picas=6.5in */ ! 11: #define VS ((12*INCH)/72) /* initial vert space */ ! 12: ! 13: #ifdef NROFF ! 14: # define EM t.Em ! 15: # define HOR t.Hor ! 16: # define VERT t.Vert ! 17: # define INCH 240 /* increments per inch */ ! 18: # define SPS INCH/10 /* space size */ ! 19: # define SS INCH/10 /* " */ ! 20: # define TRAILER 0 ! 21: # define UNPAD 0227 ! 22: # define PO 0 /* page offset */ ! 23: # define ASCII 1 ! 24: # define PTID 1 ! 25: # define LG 0 ! 26: # define DTAB 0 /* set at 8 Ems at init time */ ! 27: # define ICS 2*SPS ! 28: #endif ! 29: #ifndef NROFF /* TROFF */ ! 30: /* Inch is set by ptinit() when troff started. ! 31: /* all derived values set then too ! 32: */ ! 33: # define INCH Inch /* troff resolution -- number of goobies/inch */ ! 34: # define POINT (INCH/72) /* goobies per point (1/72 inch) */ ! 35: # define HOR Hor /* horizontal resolution in goobies */ ! 36: # define VERT Vert /* vertical resolution in goobies */ ! 37: # define SPS (EM/3) /* space size */ ! 38: # define SS 12 /* space size in 36ths of an em */ ! 39: # define UNPAD 027 ! 40: # define PO (INCH - INCH/27) /* page offset 26/27ths inch */ ! 41: /* # define EM (POINT * pts) */ ! 42: #define EM (((long) INCH * pts + 36) / 72) /* don't lose significance */ ! 43: #define EMPTS(pts) (((long) INCH * (pts) + 36) / 72) ! 44: # define ASCII 0 ! 45: # define PTID 1 ! 46: # define LG 1 ! 47: # define DTAB (INCH/2) ! 48: # define ICS 3*SPS ! 49: #endif ! 50: ! 51: /* These "characters" are used to encode various internal functions ! 52: /* Some make use of the fact that most ascii characters between ! 53: /* 0 and 040 don't have any graphic or other function. ! 54: /* The few that do have a purpose (e.g., \n, \b, \t, ... ! 55: /* are avoided by the ad hoc choices here. ! 56: /* See ifilt[] in n1.c for others -- 1, 2, 3, 5, 6, 7, 010, 011, 012 ! 57: */ ! 58: ! 59: #define LEADER 001 ! 60: #define IMP 004 /* impossible char; glues things together */ ! 61: #define TAB 011 ! 62: #define RPT 014 /* next character is to be repeated many times */ ! 63: #define CHARHT 015 /* size field sets character height */ ! 64: #define SLANT 016 /* size field sets amount of slant */ ! 65: #define DRAWFCN 017 /* next several chars describe arb drawing fcn */ ! 66: /* line: 'l' dx dy char */ ! 67: /* circle: 'c' r */ ! 68: /* ellipse: 'e' rx ry */ ! 69: /* arc: 'a' dx dy r */ ! 70: /* wiggly line '~' x y x y ... */ ! 71: #define DRAWLINE 'l' ! 72: #define DRAWCIRCLE 'c' /* circle */ ! 73: #define DRAWELLIPSE 'e' ! 74: #define DRAWARC 'a' /* arbitrary arc */ ! 75: #define DRAWWIG '~' /* wiggly line with spline */ ! 76: ! 77: #define LEFT 020 /* \{ */ ! 78: #define RIGHT 021 /* \} */ ! 79: #define FILLER 022 /* \& and similar purposes */ ! 80: #define OHC 024 /* optional hyphenation character \% */ ! 81: #define CONT 025 /* \c character */ ! 82: #define PRESC 026 /* printable escape */ ! 83: #define XPAR 030 /* transparent mode indicator */ ! 84: #define FLSS 031 ! 85: #define WORDSP 032 /* paddable word space */ ! 86: #define ESC 033 ! 87: ! 88: /* there are several tests (using iscontrol()) ! 89: /* that rely on these having 034 true. ! 90: */ ! 91: #define iscontrol(n) (n>=034 && n<=037) /* used to test the next two */ ! 92: #define HX 035 /* next character is value of \x'...' */ ! 93: #define FONTPOS 036 /* position of font \f(XX encoded in top */ ! 94: #define FONTNAME 037 /* name of font in \f(XX in top */ ! 95: /* have to appear in this order */ ! 96: ! 97: #define HYPHEN c_hyphen ! 98: #define EMDASH c_emdash /* \(em */ ! 99: #define RULE c_rule /* \(ru */ ! 100: #define MINUS c_minus /* minus sign on current font */ ! 101: #define NARSP c_narsp /* narrow space \|: fake character */ ! 102: #define HNARSP c_hnarsp /* half narrow space \^: fake character */ ! 103: #define LIG_FI c_fi /* \(ff */ ! 104: #define LIG_FL c_fl /* \(fl */ ! 105: #define LIG_FF c_ff /* \(ff */ ! 106: #define LIG_FFI c_ffi /* \(Fi */ ! 107: #define LIG_FFL c_ffl /* \(Fl */ ! 108: #define ACUTE c_acute /* acute accent \(aa */ ! 109: #define GRAVE c_grave /* grave accent \(ga */ ! 110: #define UNDERLINE c_under /* \(ul */ ! 111: #define ROOTEN c_rooten /* root en \(rn */ ! 112: #define BOXRULE c_boxrule /* box rule \(br */ ! 113: #define LEFTHAND c_lefthand ! 114: ! 115: /* array sizes, and similar limits: */ ! 116: ! 117: #define NFONT 10 /* maximum number of fonts (including specials) */ ! 118: #define EXTRAFONT 500 /* extra space for swapping a font */ ! 119: #define NN 300 /* number registers */ ! 120: #define NNAMES 15 /* predefined reg names */ ! 121: #define NIF 15 /* if-else nesting */ ! 122: #define NS 64 /* name buffer */ ! 123: #define NTM 256 /* tm buffer */ ! 124: #define NEV 3 /* environments */ ! 125: #define EVLSZ 10 /* size of ev stack */ ! 126: #define DSIZE 512 /* disk sector size in chars */ ! 127: ! 128: /* the following defines the size of the infamous environment block. ! 129: this macro is guaranteed to blow older C preprocessors out of the ! 130: water. ! 131: Furthermore, it is wrong: the proper value is more accurately ! 132: determined by using sizeof *tchar in several places. ! 133: no harm is done as long as it's big enough. ! 134: */ ! 135: ! 136: #define EVUSED \ ! 137: (59 * sizeof(int) /* integers in env block */ \ ! 138: + 9 * sizeof(tchar) /* tchars in env block */ \ ! 139: + NHYP * sizeof(tchar) /* hytab */ \ ! 140: + NTAB * sizeof(int) /* tabtab */ \ ! 141: + (LNSIZE+WDSIZE) * sizeof(tchar)) /* line+word */ ! 142: ! 143: #define EVSPARE DSIZE - EVUSED % DSIZE /* number of leftover chars */ ! 144: #define EVS (EVUSED + EVSPARE) /* should be a multiple of DSIZE */ ! 145: #define NM 350 /* requests + macros */ ! 146: #define DELTA 1024 /* delta core bytes */ ! 147: #define NHYP 10 /* max hyphens per word */ ! 148: #define NHEX 128 /* byte size of exception word list */ ! 149: #define NTAB 35 /* tab stops */ ! 150: #define NSO 5 /* "so" depth */ ! 151: #define WDSIZE 270 /* word buffer size */ ! 152: #define LNSIZE 680 /* line buffer size */ ! 153: #define NDI 5 /* number of diversions */ ! 154: #define NTRTAB 350 /* number of items in trtab[] */ ! 155: #define NTRAP 20 /* number of traps */ ! 156: #define NPN 20 /* numbers in "-o" */ ! 157: #define FBUFSZ 256 /* field buf size words */ ! 158: #define OBUFSZ 512 /* bytes */ ! 159: #define IBUFSZ 512 /* bytes */ ! 160: #define NC 256 /* cbuf size words */ ! 161: #define NOV 10 /* number of overstrike chars */ ! 162: #define NPP 10 /* pads per field */ ! 163: ! 164: /* ! 165: Internal character representation: ! 166: Internally, every character is carried around as ! 167: a 32 bit cookie, called a "tchar" (typedef long). ! 168: Bits are numbered 31..0 from left to right. ! 169: If bit 15 is 1, the character is motion, with ! 170: if bit 16 it's vertical motion ! 171: if bit 17 it's negative motion ! 172: If bit 15 is 0, the character is a real character. ! 173: if bit 31 zero motion ! 174: bits 30..24 size ! 175: bits 23..16 font ! 176: */ ! 177: ! 178: /* in the following, "L" should really be a tchar, but ... */ ! 179: ! 180: #define MOT (unsigned short)(01<<15) /* motion character indicator */ ! 181: #define MOTV (07L<<15) /* clear for motion part */ ! 182: #define VMOT (01L<<16) /* vert motion bit */ ! 183: #define NMOT (01L<<17) /* negative motion indicator*/ ! 184: #define MAXMOT 32767 /* bad way to write this!!! */ ! 185: #define ismot(n) ((unsigned short)(n) & MOT) /* (short) is a cheap mask */ ! 186: #define isvmot(n) ((n) & VMOT) /* must have tested MOT previously */ ! 187: #define isnmot(n) ((n) & NMOT) /* ditto */ ! 188: #define absmot(n) ((unsigned short)(n) & ~MOT) /* (short) is cheap mask */ ! 189: ! 190: #define ZBIT (01L << 31) /* zero width char */ ! 191: #define iszbit(n) ((n) & ZBIT) ! 192: ! 193: #define SMASK (0177L << 24) ! 194: #define FMASK (0377L << 16) ! 195: #define SFMASK (SMASK|FMASK) /* size and font in a tchar */ ! 196: #define CMASK ~MOT /* clears MOT */ ! 197: #define CMASKL 077777L ! 198: #define sbits(n) ((unsigned short)((n) >> 24) & 0177) ! 199: #define fbits(n) ((unsigned short)((n) >> 16) & 0377) ! 200: #define sfbits(n) ((unsigned short)(((n) & SFMASK) >> 16)) ! 201: #define cbits(n) (unsigned short)(n) /* isolate bottom 16 bits */ ! 202: #define setsbits(n,s) n = (n & ~SMASK) | (tchar)(s) << 24 ! 203: #define setfbits(n,f) n = (n & ~FMASK) | (tchar)(f) << 16 ! 204: #define setsfbits(n,sf) n = (n & ~SFMASK) | (tchar)(sf) << 16 ! 205: #define setcbits(n,c) n = (n & ~CMASKL | (c)) /* set character bits */ ! 206: ! 207: #define MMASK 0100000 /* macro mask indicator */ ! 208: #define BMASK 0377 ! 209: #define BYTE 8 ! 210: ! 211: #define ZONE 5 /* 5 hrs for EST */ ! 212: #define TMASK 037777 ! 213: #define RTAB (unsigned) 0100000 ! 214: #define CTAB 040000 ! 215: ! 216: #define PAIR(A,B) (A|(B<<BYTE)) ! 217: ! 218: typedef unsigned filep; ! 219: #define BLK 128 /* alloc block tchars */ ! 220: #define NBLIST 1024 /* allocation list */ ! 221: /* previous values were BLK 256 NBLIST 512 */ ! 222: /* it seems good to keep the product constant */ ! 223: /* BLK*NBLIST<=65536 words, if filep=unsigned */ ! 224: ! 225: typedef long tchar; /* as an experiment */ ! 226: ! 227: extern tchar getch(), getch0(); ! 228: extern tchar rbf(), rbf0(); ! 229: extern tchar mot(), hmot(), vmot(); ! 230: extern tchar makem(), sethl(); ! 231: extern tchar popi(); ! 232: extern tchar getlg(); ! 233: extern tchar xlss(); ! 234: extern tchar setfield(); ! 235: extern tchar setz(); ! 236: extern tchar setch(), absch(); ! 237: extern tchar setht(), setslant(); ! 238: ! 239: #define atoi(i) ((int) atoi0(i)) ! 240: extern long atoi0(); ! 241: ! 242: extern int Inch, Hor, Vert, Unitwidth; ! 243: ! 244: /* these characters are used as various signals or values ! 245: /* in miscellaneous places. ! 246: /* values are set in specnames in t10.c ! 247: */ ! 248: ! 249: extern int c_hyphen; ! 250: extern int c_emdash; ! 251: extern int c_rule; ! 252: extern int c_minus; ! 253: extern int c_narsp; ! 254: extern int c_hnarsp; ! 255: extern int c_fi; ! 256: extern int c_fl; ! 257: extern int c_ff; ! 258: extern int c_ffi; ! 259: extern int c_ffl; ! 260: extern int c_acute; ! 261: extern int c_grave; ! 262: extern int c_under; ! 263: extern int c_rooten; ! 264: extern int c_boxrule; ! 265: extern int c_lefthand; ! 266: ! 267: extern int stderr; /* this is NOT the stdio value! */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.