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