1 /* 2 * @(#)tdef.h 2.5 (Berkeley) 02/25/93 3 */ 4 5 /* starting values for typesetting parameters: */ 6 7 #define PS 10 /* default point size */ 8 #define FT 1 /* default font position */ 9 #define ULFONT 2 /* default underline font */ 10 #define BDFONT 3 /* default emboldening font */ 11 #define BIFONT 4 /* default bold italic font */ 12 #define STIP 1 /* default stipple */ 13 #define LL (unsigned) 65*INCH/10 /* line length; 39picas=6.5in */ 14 #define VS ((12*INCH)/72) /* initial vert space */ 15 16 #ifdef NROFF 17 # define EM t.Em 18 # define HOR t.Adj 19 # define VERT t.Vert 20 # define INCH 240 /* increments per inch */ 21 # define SPS INCH/10 /* space size */ 22 # define SS INCH/10 /* " */ 23 # define TRAILER 0 24 # define PO 0 /* page offset */ 25 # define ASCII 1 26 # define LG 0 27 # define DTAB 0 /* set at 8 Ems at init time */ 28 # define ICS 2*SPS 29 #endif 30 #ifndef NROFF /* TROFF */ 31 /* Inch is set by ptinit() when troff started. 32 /* all derived values set then too 33 */ 34 # define INCH Inch /* troff resolution -- number of goobies/inch */ 35 # define POINT (INCH/72) /* goobies per point (1/72 inch) */ 36 # define HOR Hor /* horizontal resolution in goobies */ 37 # define VERT Vert /* vertical resolution in goobies */ 38 # define SPS (EM/3) /* space size */ 39 # define SS 12 /* space size in 36ths of an em */ 40 # define PO (INCH) /* page offset 1 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 LG 1 46 # define DTAB (INCH/2) 47 # define ICS 3*SPS 48 #endif 49 50 /* These "characters" are used to encode various internal functions 51 /* Some make use of the fact that most ascii characters between 52 /* 0 and 040 don't have any graphic or other function. 53 /* The few that do have a purpose (e.g., \n, \b, \t, ... 54 /* are avoided by the ad hoc choices here. 55 /* See ifilt[] in n1.c for others -- 1, 2, 3, 5, 6, 7, 010, 011, 012 56 */ 57 58 #define LEADER 001 59 #define IMP 004 /* impossible char; glues things together */ 60 #define TAB 011 61 #define RPT 014 /* next character is to be repeated many times */ 62 #define CHARHT 015 /* size field sets character height */ 63 #define SLANT 016 /* size field sets amount of slant */ 64 #define DRAWFCN 017 /* next several chars describe arb drawing fcn */ 65 /* style: 's' m */ 66 /* thickness: 't' w */ 67 /* line: 'l' dx dy char */ 68 /* circle: 'c' r */ 69 /* ellipse: 'e' rx ry */ 70 /* arc: 'a' dx dy r */ 71 /* wiggly line '~' x y x y ... */ 72 /* or 'g' x y x y ... */ 73 #define DRAWTHICK 't' 74 #define DRAWSTYLE 's' 75 #define DRAWLINE 'l' 76 #define DRAWCIRCLE 'c' /* circle */ 77 #define DRAWELLIPSE 'e' 78 #define DRAWARC 'a' /* arbitrary arc */ 79 #define DRAWCURVE 'g' /* gremlin spline */ 80 #define DRAWWIG '~' /* wiggly line with spline */ 81 #define DRAWSPLINE '~' /* quadratic B spline */ 82 #define DRAWPOLY 'p' /* polygon with stipples */ 83 #define DRAWUBPOLY 'P' /* polygon, stipples, no border */ 84 85 #define LEFT 020 /* \{ */ 86 #define RIGHT 021 /* \} */ 87 #define FILLER 022 /* \& and similar purposes */ 88 #define XON 023 /* \X'...' starts here */ 89 #define OHC 024 /* optional hyphenation character \% */ 90 #define CONT 025 /* \c character */ 91 #define PRESC 026 /* printable escape */ 92 #define UNPAD 027 /* unpaddable blank */ 93 #define XPAR 030 /* transparent mode indicator */ 94 #define FLSS 031 95 #define WORDSP 032 /* paddable word space */ 96 #define ESC 033 97 #define XOFF 034 /* \X'...' ends here */ 98 99 #define iscontrol(n) (n==035 || n==036) /* used to test the next two */ 100 #define HX 035 /* next character is value of \x'...' */ 101 #define MAXFONTS 99 /* Max number of mounted fonts (in fontab) */ 102 103 #define HYPHEN c_hyphen 104 #define EMDASH c_emdash /* \(em */ 105 #define RULE c_rule /* \(ru */ 106 #define MINUS c_minus /* minus sign on current font */ 107 #define LIG_FI c_fi /* \(ff */ 108 #define LIG_FL c_fl /* \(fl */ 109 #define LIG_FF c_ff /* \(ff */ 110 #define LIG_FFI c_ffi /* \(Fi */ 111 #define LIG_FFL c_ffl /* \(Fl */ 112 #define ACUTE c_acute /* acute accent \(aa */ 113 #define GRAVE c_grave /* grave accent \(ga */ 114 #define UNDERLINE c_under /* \(ul */ 115 #define ROOTEN c_rooten /* root en \(rn */ 116 #define BOXRULE c_boxrule /* box rule \(br */ 117 #define LEFTHAND c_lefthand /* left hand for word overflow */ 118 #define DAGGER c_dagger /* dagger for footnotes */ 119 120 /* array sizes, and similar limits: */ 121 122 #define NFONT 128 /* maximum number of fonts (including specials) */ 123 #define NN 400 /* number registers */ 124 #define NNAMES 15 /* predefined reg names */ 125 #define NIF 15 /* if-else nesting */ 126 #define NS 128 /* name buffer */ 127 #define NTM 256 /* tm buffer */ 128 #define NEV 3 /* environments */ 129 #define EVLSZ 10 /* size of ev stack */ 130 #define DSIZE 2048 /* disk sector size in chars */ 131 132 #define NM 500 /* requests + macros */ 133 #define DELTA 8192 /* delta core bytes */ 134 #define NHYP 10 /* max hyphens per word */ 135 #define NHEX 128 /* byte size of exception word list */ 136 #define NTAB 40 /* tab stops */ 137 #define NSO 5 /* "so" depth */ 138 #define WDSIZE 270 /* word buffer size */ 139 #define LNSIZE 1024 /* line buffer size */ 140 #define NDI 5 /* number of diversions */ 141 #define NTRTAB 512 /* number of items in trtab[] */ 142 #define NWIDCACHE 512 /* number of items in widcache[] */ 143 #define NTRAP 20 /* number of traps */ 144 #define NPN 20 /* numbers in "-o" */ 145 #define FBUFSZ 256 /* field buf size words */ 146 #define IBUFSZ 8192 /* bytes */ 147 #define NC 1024 /* cbuf size words */ 148 #define NOV 10 /* number of overstrike chars */ 149 #define NPP 10 /* pads per field */ 150 151 /* 152 Internal character representation: 153 Internally, every character is carried around as 154 a 32 bit cookie, called a "tchar" (typedef long). 155 Bits are numbered 31..0 from left to right. 156 If bit 15 is 1, the character is motion, with 157 if bit 16 it's vertical motion 158 if bit 17 it's negative motion 159 If bit 15 is 0, the character is a real character. 160 if bit 31 zero motion 161 bits 30..24 size 162 bits 23..16 font 163 bit 8 absolute char number in 7..0 164 This implies at most 256-32 characters in a single font, 165 which is going to be a problem somewhere 166 */ 167 168 /* in the following, "L" should really be a tchar, but ... */ 169 170 #define MOT (01L<<15) /* motion character indicator */ 171 #define MOTV (07L<<15) /* clear for motion part */ 172 #define VMOT (01L<<16) /* vert motion bit */ 173 #define NMOT (01L<<17) /* negative motion indicator*/ 174 #define MAXMOT 32767 /* bad way to write this!!! */ 175 #define ismot(n) ((n) & MOT) 176 #define isvmot(n) ((n) & VMOT) /* must have tested MOT previously */ 177 #define isnmot(n) ((n) & NMOT) /* ditto */ 178 #define absmot(n) (unsigned)(0177777 & (n) & ~MOT) /* (short) is cheap mask */ 179 180 #define ZBIT (01L << 31) /* zero width char */ 181 #define iszbit(n) ((n) & ZBIT) 182 #define ABSCHAR 0400 /* absolute char number in this font */ 183 184 #define SMASK (0177L << 24) 185 #define FMASK (0377L << 16) 186 #define SFMASK (SMASK|FMASK) /* size and font in a tchar */ 187 #define sbits(n) (((n) >> 24) & 0177) 188 #define fbits(n) (((n) >> 16) & 0377) 189 #define sfbits(n) (unsigned)(0177777 & (((n) & SFMASK) >> 16)) 190 #define cbits(n) (unsigned)(0177777 & (n)) /* isolate bottom 16 bits */ 191 #define absbits(n) (cbits(n) & ~ABSCHAR) 192 193 #define setsbits(n,s) n = (n & ~SMASK) | (tchar)(s) << 24 194 #define setfbits(n,f) n = (n & ~FMASK) | (tchar)(f) << 16 195 #define setsfbits(n,sf) n = (n & ~SFMASK) | (tchar)(sf) << 16 196 #define setcbits(n,c) n = (n & ~077777L | (c)) /* set character bits */ 197 198 #define BYTEMASK 0377 199 #define BYTE 8 200 201 #define ZONE 5 /* 5 hrs for EST */ 202 #define TABMASK 037777 203 #define RTAB (unsigned) 0100000 204 #define CTAB 040000 205 206 #define TABBIT 02 /* bits in gchtab */ 207 #define LDRBIT 04 208 #define FCBIT 010 209 210 #define PAIR(A,B) (A|(B<<BYTE)) 211 212 #define oput(c) putc(c, ptid) 213 214 /* 215 * "temp file" parameters. macros and strings 216 * are stored in an array of linked blocks, 217 * which may be in memory if INCORE is set during 218 * compilation, or otherwise in a file. 219 * The numerology is delicate if filep is 16 bits: 220 #define BLK 128 221 #define NBLIST 512 222 * i.e., the product is 16 bits long. 223 224 * If filep is an unsigned long (and if your 225 * compiler will let you say that) then NBLIST 226 * can be a lot bigger. Of course that makes 227 * the file or core image a lot bigger too, 228 * and means you don't detect missing diversion 229 * terminations as quickly... . 230 * It also means that you may have trouble running 231 * on non-swapping systems, since the core image 232 * will be over 1Mb. 233 234 * In any case, both must be powers of 2. 235 */ 236 237 typedef unsigned int filep; /* this is good for 32 bit machines */ 238 239 #define BLK 128 /* alloc block in tchars */ 240 #ifdef SMALLER 241 242 #define NBLIST 1024 243 244 #else 245 246 #define NBLIST 2048 /* allocation list. smallish machines use 1024, bigger use 2048 */ 247 248 #endif 249 250 typedef long tchar; /* as an experiment */ 251 252 extern tchar getch(), getch0(); 253 extern tchar rbf(), rbf0(); 254 extern tchar mot(), hmot(), vmot(); 255 extern tchar makem(), sethl(); 256 extern tchar popi(); 257 extern tchar getlg(); 258 extern tchar xlss(); 259 extern tchar setfield(); 260 extern tchar setz(); 261 extern tchar setch(); 262 extern tchar setht(), setslant(); 263 264 #define atoi(i) ((int) atoi0(i)) 265 extern long atoi0(); 266 267 extern int Inch, Hor, Vert, Unitwidth; 268 269 /* these characters are used as various signals or values 270 /* in miscellaneous places. 271 /* values are set in specnames in t10.c 272 */ 273 274 extern int c_hyphen; 275 extern int c_emdash; 276 extern int c_rule; 277 extern int c_minus; 278 extern int c_fi; 279 extern int c_fl; 280 extern int c_ff; 281 extern int c_ffi; 282 extern int c_ffl; 283 extern int c_acute; 284 extern int c_grave; 285 extern int c_under; 286 extern int c_rooten; 287 extern int c_boxrule; 288 extern int c_lefthand; 289 extern int c_dagger; 290 291 struct d { /* diversion */ 292 filep op; 293 int dnl; 294 int dimac; 295 int ditrap; 296 int ditf; 297 int alss; 298 int blss; 299 int nls; 300 int mkline; 301 int maxl; 302 int hnl; 303 int curd; 304 }; 305 306 struct s { /* stack frame */ 307 int nargs; 308 struct s *pframe; 309 filep pip; 310 int pnchar; 311 tchar prchar; 312 int ppendt; 313 tchar pch; 314 tchar *lastpbp; 315 int mname; 316 }; 317 318 extern struct contab { 319 unsigned short rq; 320 struct contab *link; 321 int (*f)(); 322 unsigned mx; 323 } contab[NM]; 324 325 extern struct numtab { 326 short r; /* name */ 327 short fmt; 328 short inc; 329 int val; 330 struct numtab *link; 331 } numtab[NN]; 332 333 #define PN 0 334 #define NL 1 335 #define YR 2 336 #define HP 3 337 #define CT 4 338 #define DN 5 339 #define MO 6 340 #define DY 7 341 #define DW 8 342 #define LN 9 343 #define DL 10 344 #define ST 11 345 #define SB 12 346 #define CD 13 347 #define PID 14 348 349 /* the infamous environment block */ 350 351 #define ics (env->_ics) 352 #define sps (env->_sps) 353 #define spacesz (env->_spacesz) 354 #define lss (env->_lss) 355 #define lss1 (env->_lss1) 356 #define ll (env->_ll) 357 #define ll1 (env->_ll1) 358 #define lt (env->_lt) 359 #define lt1 (env->_lt1) 360 #define ic (env->_ic) 361 #define icf (env->_icf) 362 #define chbits (env->_chbits) 363 #define spbits (env->_spbits) 364 #define nmbits (env->_nmbits) 365 #define apts (env->_apts) 366 #define apts1 (env->_apts1) 367 #define pts (env->_pts) 368 #define pts1 (env->_pts1) 369 #define font (env->_font) 370 #define font1 (env->_font1) 371 #define ls (env->_ls) 372 #define ls1 (env->_ls1) 373 #define ad (env->_ad) 374 #define nms (env->_nms) 375 #define ndf (env->_ndf) 376 #define fi (env->_fi) 377 #define cc (env->_cc) 378 #define c2 (env->_c2) 379 #define ohc (env->_ohc) 380 #define tdelim (env->_tdelim) 381 #define hyf (env->_hyf) 382 #define hyoff (env->_hyoff) 383 #define hyalg (env->_hyalg) 384 #define hyalg1 (env->_hyalg1) 385 #define thresh (env->_thresh) 386 #define un1 (env->_un1) 387 #define tabc (env->_tabc) 388 #define dotc (env->_dotc) 389 #define adsp (env->_adsp) 390 #define adrem (env->_adrem) 391 #define lastl (env->_lastl) 392 #define nel (env->_nel) 393 #define admod (env->_admod) 394 #define wordp (env->_wordp) 395 #define spflg (env->_spflg) 396 #define linep (env->_linep) 397 #define wdend (env->_wdend) 398 #define wdstart (env->_wdstart) 399 #define wne (env->_wne) 400 #define ne (env->_ne) 401 #define nc (env->_nc) 402 #define nb (env->_nb) 403 #define lnmod (env->_lnmod) 404 #define nwd (env->_nwd) 405 #define nn (env->_nn) 406 #define ni (env->_ni) 407 #define ul (env->_ul) 408 #define cu (env->_cu) 409 #define ce (env->_ce) 410 #define in (env->_in) 411 #define in1 (env->_in1) 412 #define un (env->_un) 413 #define wch (env->_wch) 414 #define pendt (env->_pendt) 415 #define pendw (env->_pendw) 416 #define pendnf (env->_pendnf) 417 #define spread (env->_spread) 418 #define it (env->_it) 419 #define itmac (env->_itmac) 420 #define lnsize (env->_lnsize) 421 #define hyptr (env->_hyptr) 422 #define tabtab (env->_tabtab) 423 #define line (env->_line) 424 #define word (env->_word) 425 #define stip1 (env->_stip1) 426 #define stip (env->_stip) 427 428 /* 429 * Note (jaap) 430 * If this structure changes in ni.c, you should change 431 * this as well 432 */ 433 struct env { 434 int _ics; 435 int _sps; 436 int _spacesz; 437 int _lss; 438 int _lss1; 439 int _ll; 440 int _ll1; 441 int _lt; 442 int _lt1; 443 tchar _ic; 444 int _icf; 445 tchar _chbits; 446 tchar _spbits; 447 tchar _nmbits; 448 int _apts; 449 int _apts1; 450 int _pts; 451 int _pts1; 452 int _font; 453 int _font1; 454 int _ls; 455 int _ls1; 456 int _ad; 457 int _nms; 458 int _ndf; 459 int _fi; 460 int _cc; 461 int _c2; 462 int _ohc; 463 int _tdelim; 464 int _hyf; 465 int _hyoff; 466 int _hyalg; 467 int _hyalg1; 468 int _thresh; 469 int _un1; 470 int _tabc; 471 int _dotc; 472 int _adsp; 473 int _adrem; 474 int _lastl; 475 int _nel; 476 int _admod; 477 tchar *_wordp; 478 int _spflg; 479 tchar *_linep; 480 tchar *_wdend; 481 tchar *_wdstart; 482 int _wne; 483 int _ne; 484 int _nc; 485 int _nb; 486 int _lnmod; 487 int _nwd; 488 int _nn; 489 int _ni; 490 int _ul; 491 int _cu; 492 int _ce; 493 int _in; 494 int _in1; 495 int _un; 496 int _wch; 497 int _pendt; 498 tchar *_pendw; 499 int _pendnf; 500 int _spread; 501 int _it; 502 int _itmac; 503 int _lnsize; 504 int _stip; 505 int _stip1; 506 tchar *_hyptr[NHYP]; 507 int _tabtab[NTAB]; 508 tchar _line[LNSIZE]; 509 tchar _word[WDSIZE]; 510 }; 511 512 extern struct env *env; 513 extern struct env env_array[]; 514 515 /* 516 * All changes will come after this comment (jaap) 517 */ 518 519 /* 520 * hyphenation dependent stuff (jaap) 521 */ 522 #define THRESH 160 /*digram goodness threshold (from n8.c, (jaap))*/ 523 #define DUTCH_THRESH 3 /* for recursive bestesplits (jaap) */ 524 525 #define ORIGINAL 0 /* original (American) English) algorithm */ 526 #define DUTCH 1 /* second hyphenation routine (bestesplits) */ 527 #define MAXDIALECTS 1 /* number of hyphenation algorithms */ 528 529 /* 530 * define enough space for the fontcache. EXTRAFONT is maximum space 531 * currently to be used by a font. The space for the fonttab is 532 * for the "logical to physical font table mapping addition (jaap). 533 */ 534 #define MAXCHARS 255 /* current maximum of characters in a font */ 535 536 #ifdef CWI 537 #define EXTRAFONT (3*MAXCHARS * sizeof(char) + dev.nchtab + (128-32) \ 538 * sizeof(char) + sizeof(struct Font) + 255 * sizeof(short)) 539 #else 540 #define EXTRAFONT (3*MAXCHARS * sizeof(char) + dev.nchtab + (128-32) \ 541 * sizeof(char) + sizeof(struct Font)) 542 #endif 543 544 #include <stdio.h> 545 #define fdprintf fprintf 546 #define flusho() 547