Blame


1 5cedca1b 2004-05-15 devnull #include <stdio.h>
2 5cedca1b 2004-05-15 devnull #include <stdlib.h>
3 5cedca1b 2004-05-15 devnull #include <limits.h>
4 5cedca1b 2004-05-15 devnull #include <ctype.h>
5 5cedca1b 2004-05-15 devnull #include <string.h>
6 c5561c23 2004-05-16 devnull #include <unistd.h>
7 5cedca1b 2004-05-15 devnull
8 c5561c23 2004-05-16 devnull #undef MB_CUR_MAX
9 c5561c23 2004-05-16 devnull #define MB_CUR_MAX 3
10 5cedca1b 2004-05-15 devnull
11 c5561c23 2004-05-16 devnull #define NROFF (!TROFF)
12 5cedca1b 2004-05-15 devnull
13 5cedca1b 2004-05-15 devnull /* Site dependent definitions */
14 5cedca1b 2004-05-15 devnull
15 5cedca1b 2004-05-15 devnull #ifndef TMACDIR
16 5cedca1b 2004-05-15 devnull #define TMACDIR "lib/tmac/tmac."
17 5cedca1b 2004-05-15 devnull #endif
18 5cedca1b 2004-05-15 devnull #ifndef FONTDIR
19 5cedca1b 2004-05-15 devnull #define FONTDIR "lib/font"
20 5cedca1b 2004-05-15 devnull #endif
21 5cedca1b 2004-05-15 devnull #ifndef NTERMDIR
22 5cedca1b 2004-05-15 devnull #define NTERMDIR "lib/term/tab."
23 5cedca1b 2004-05-15 devnull #endif
24 5cedca1b 2004-05-15 devnull #ifndef TDEVNAME
25 5cedca1b 2004-05-15 devnull #define TDEVNAME "post"
26 5cedca1b 2004-05-15 devnull #endif
27 5cedca1b 2004-05-15 devnull #ifndef NDEVNAME
28 5cedca1b 2004-05-15 devnull #define NDEVNAME "37"
29 5cedca1b 2004-05-15 devnull #endif
30 5cedca1b 2004-05-15 devnull #ifndef TEXHYPHENS
31 5cedca1b 2004-05-15 devnull #define TEXHYPHENS "/usr/lib/tex/macros/hyphen.tex"
32 5cedca1b 2004-05-15 devnull #endif
33 5cedca1b 2004-05-15 devnull #ifndef ALTHYPHENS
34 5cedca1b 2004-05-15 devnull #define ALTHYPHENS "lib/tmac/hyphen.tex" /* another place to look */
35 5cedca1b 2004-05-15 devnull #endif
36 5cedca1b 2004-05-15 devnull
37 5cedca1b 2004-05-15 devnull typedef unsigned char Uchar;
38 5cedca1b 2004-05-15 devnull typedef unsigned short Ushort;
39 5cedca1b 2004-05-15 devnull
40 5cedca1b 2004-05-15 devnull typedef /*unsigned*/ long Tchar;
41 5cedca1b 2004-05-15 devnull
42 5cedca1b 2004-05-15 devnull typedef struct Blockp Blockp;
43 5cedca1b 2004-05-15 devnull typedef struct Diver Diver;
44 5cedca1b 2004-05-15 devnull typedef struct Stack Stack;
45 5cedca1b 2004-05-15 devnull typedef struct Divsiz Divsiz;
46 5cedca1b 2004-05-15 devnull typedef struct Contab Contab;
47 5cedca1b 2004-05-15 devnull typedef struct Numtab Numtab;
48 5cedca1b 2004-05-15 devnull typedef struct Numerr Numerr;
49 5cedca1b 2004-05-15 devnull typedef struct Env Env;
50 5cedca1b 2004-05-15 devnull typedef struct Term Term;
51 5cedca1b 2004-05-15 devnull typedef struct Chwid Chwid;
52 5cedca1b 2004-05-15 devnull typedef struct Font Font;
53 5cedca1b 2004-05-15 devnull typedef struct Spnames Spnames;
54 5cedca1b 2004-05-15 devnull typedef struct Wcache Wcache;
55 5cedca1b 2004-05-15 devnull typedef struct Tbuf Tbuf;
56 5cedca1b 2004-05-15 devnull
57 5cedca1b 2004-05-15 devnull /* this simulates printf into a buffer that gets flushed sporadically */
58 5cedca1b 2004-05-15 devnull /* the BSD goo is because SunOS sprintf doesn't return anything useful */
59 5cedca1b 2004-05-15 devnull
60 5cedca1b 2004-05-15 devnull #ifdef BSD4_2
61 5cedca1b 2004-05-15 devnull #define OUT (obufp += strlen(sprintf(obufp,
62 5cedca1b 2004-05-15 devnull #define PUT ))) > obuf+BUFSIZ ? flusho() : 1
63 5cedca1b 2004-05-15 devnull #else
64 5cedca1b 2004-05-15 devnull #define OUT (obufp += sprintf(obufp,
65 5cedca1b 2004-05-15 devnull #define PUT )) > obuf+BUFSIZ ? flusho() : 1
66 5cedca1b 2004-05-15 devnull #endif
67 5cedca1b 2004-05-15 devnull
68 5cedca1b 2004-05-15 devnull #define oputs(a) OUT "%s", a PUT
69 5cedca1b 2004-05-15 devnull #define oput(c) ( *obufp++ = (c), obufp > obuf+BUFSIZ ? flusho() : 1 )
70 fa662c95 2009-09-11 russcox
71 fa662c95 2009-09-11 russcox #undef sprintf /* Snow Leopard */
72 5cedca1b 2004-05-15 devnull
73 5cedca1b 2004-05-15 devnull extern char errbuf[];
74 5cedca1b 2004-05-15 devnull #define ERROR sprintf(errbuf,
75 5cedca1b 2004-05-15 devnull #define WARN ), errprint()
76 5cedca1b 2004-05-15 devnull #define FATAL ), errprint(), exit(1)
77 5cedca1b 2004-05-15 devnull
78 5cedca1b 2004-05-15 devnull /* starting values for typesetting parameters: */
79 5cedca1b 2004-05-15 devnull
80 5cedca1b 2004-05-15 devnull #define PS 10 /* default point size */
81 5cedca1b 2004-05-15 devnull #define FT 1 /* default font position */
82 5cedca1b 2004-05-15 devnull #define ULFONT 2 /* default underline font */
83 5cedca1b 2004-05-15 devnull #define BDFONT 3 /* default emboldening font */
84 5cedca1b 2004-05-15 devnull #define BIFONT 4 /* default bold italic font */
85 5cedca1b 2004-05-15 devnull #define LL (unsigned) 65*INCH/10 /* line length; 39picas=6.5in */
86 5cedca1b 2004-05-15 devnull #define VS ((12*INCH)/72) /* initial vert space */
87 5cedca1b 2004-05-15 devnull
88 5cedca1b 2004-05-15 devnull
89 5cedca1b 2004-05-15 devnull #define EMPTS(pts) (((long)Inch*(pts) + 36) / 72)
90 5cedca1b 2004-05-15 devnull #define EM (TROFF? EMPTS(pts): t.Em)
91 5cedca1b 2004-05-15 devnull #define INCH (TROFF? Inch: 240)
92 5cedca1b 2004-05-15 devnull #define HOR (TROFF? Hor: t.Adj)
93 5cedca1b 2004-05-15 devnull #define VERT (TROFF? Vert: t.Vert)
94 5cedca1b 2004-05-15 devnull #define PO (TROFF? Inch: 0)
95 5cedca1b 2004-05-15 devnull #define SPS (TROFF? EMPTS(pts)/3: INCH/10)
96 5cedca1b 2004-05-15 devnull #define SS (TROFF? 12: INCH/10)
97 5cedca1b 2004-05-15 devnull #define ICS (TROFF? EMPTS(pts): 2*INCH/10)
98 5cedca1b 2004-05-15 devnull #define DTAB (TROFF? (INCH/2): 0)
99 5cedca1b 2004-05-15 devnull
100 5cedca1b 2004-05-15 devnull /* These "characters" are used to encode various internal functions
101 5cedca1b 2004-05-15 devnull /* Some make use of the fact that most ascii characters between
102 5cedca1b 2004-05-15 devnull /* 0 and 040 don't have any graphic or other function.
103 5cedca1b 2004-05-15 devnull /* The few that do have a purpose (e.g., \n, \b, \t, ...
104 5cedca1b 2004-05-15 devnull /* are avoided by the ad hoc choices here.
105 fa325e9b 2020-01-10 cross /* See ifilt[] in n1.c for others -- 1, 2, 3, 5, 6, 7, 010, 011, 012
106 5cedca1b 2004-05-15 devnull */
107 5cedca1b 2004-05-15 devnull
108 5cedca1b 2004-05-15 devnull #define LEADER 001
109 5cedca1b 2004-05-15 devnull #define IMP 004 /* impossible char; glues things together */
110 5cedca1b 2004-05-15 devnull #define TAB 011
111 5cedca1b 2004-05-15 devnull #define RPT 014 /* next character is to be repeated many times */
112 5cedca1b 2004-05-15 devnull #define CHARHT 015 /* size field sets character height */
113 5cedca1b 2004-05-15 devnull #define SLANT 016 /* size field sets amount of slant */
114 5cedca1b 2004-05-15 devnull #define DRAWFCN 017 /* next several chars describe arb drawing fcns */
115 5cedca1b 2004-05-15 devnull # define DRAWLINE 'l' /* line: 'l' dx dy char */
116 5cedca1b 2004-05-15 devnull # define DRAWCIRCLE 'c' /* circle: 'c' r */
117 5cedca1b 2004-05-15 devnull # define DRAWELLIPSE 'e' /* ellipse: 'e' rx ry */
118 5cedca1b 2004-05-15 devnull # define DRAWARC 'a' /* arc: 'a' dx dy dx dy */
119 5cedca1b 2004-05-15 devnull # define DRAWSPLINE '~' /* quadratic B spline: '~' dx dy dx dy ... */
120 5cedca1b 2004-05-15 devnull /* other splines go thru too */
121 5cedca1b 2004-05-15 devnull /* NOTE: the use of ~ is a botch since it's often used in .tr commands */
122 5cedca1b 2004-05-15 devnull /* better to use a letter like s, but change it in the postprocessors too */
123 5cedca1b 2004-05-15 devnull /* for now, this is taken care of in n9.c and t10.c */
124 5cedca1b 2004-05-15 devnull # define DRAWBUILD 'b' /* built-up character (e.g., { */
125 5cedca1b 2004-05-15 devnull
126 5cedca1b 2004-05-15 devnull #define LEFT 020 /* \{ */
127 5cedca1b 2004-05-15 devnull #define RIGHT 021 /* \} */
128 5cedca1b 2004-05-15 devnull #define FILLER 022 /* \& and similar purposes */
129 5cedca1b 2004-05-15 devnull #define XON 023 /* \X'...' starts here */
130 5cedca1b 2004-05-15 devnull #define OHC 024 /* optional hyphenation character \% */
131 5cedca1b 2004-05-15 devnull #define CONT 025 /* \c character */
132 5cedca1b 2004-05-15 devnull #define PRESC 026 /* printable escape */
133 5cedca1b 2004-05-15 devnull #define UNPAD 027 /* unpaddable blank */
134 5cedca1b 2004-05-15 devnull #define XPAR 030 /* transparent mode indicator */
135 5cedca1b 2004-05-15 devnull #define FLSS 031 /* next Tchar contains vertical space */
136 5cedca1b 2004-05-15 devnull /* used when recalling diverted text */
137 5cedca1b 2004-05-15 devnull #define WORDSP 032 /* paddable word space */
138 5cedca1b 2004-05-15 devnull #define ESC 033 /* current escape character */
139 5cedca1b 2004-05-15 devnull #define XOFF 034 /* \X'...' ends here */
140 5cedca1b 2004-05-15 devnull /* matches XON, but they will probably never nest */
141 5cedca1b 2004-05-15 devnull /* so could drop this when another control is needed */
142 5cedca1b 2004-05-15 devnull #define HX 035 /* next character is value of \x'...' */
143 5cedca1b 2004-05-15 devnull #define MOTCH 036 /* this "character" is really motion; used by cbits() */
144 5cedca1b 2004-05-15 devnull
145 5cedca1b 2004-05-15 devnull #define HYPHEN c_hyphen
146 5cedca1b 2004-05-15 devnull #define EMDASH c_emdash /* \(em */
147 5cedca1b 2004-05-15 devnull #define RULE c_rule /* \(ru */
148 5cedca1b 2004-05-15 devnull #define MINUS c_minus /* minus sign on current font */
149 5cedca1b 2004-05-15 devnull #define LIG_FI c_fi /* \(ff */
150 5cedca1b 2004-05-15 devnull #define LIG_FL c_fl /* \(fl */
151 5cedca1b 2004-05-15 devnull #define LIG_FF c_ff /* \(ff */
152 5cedca1b 2004-05-15 devnull #define LIG_FFI c_ffi /* \(Fi */
153 5cedca1b 2004-05-15 devnull #define LIG_FFL c_ffl /* \(Fl */
154 5cedca1b 2004-05-15 devnull #define ACUTE c_acute /* acute accent \(aa */
155 5cedca1b 2004-05-15 devnull #define GRAVE c_grave /* grave accent \(ga */
156 5cedca1b 2004-05-15 devnull #define UNDERLINE c_under /* \(ul */
157 5cedca1b 2004-05-15 devnull #define ROOTEN c_rooten /* root en \(rn */
158 5cedca1b 2004-05-15 devnull #define BOXRULE c_boxrule /* box rule \(br */
159 5cedca1b 2004-05-15 devnull #define LEFTHAND c_lefthand /* left hand for word overflow */
160 5cedca1b 2004-05-15 devnull #define DAGGER c_dagger /* dagger for end of sentence/footnote */
161 5cedca1b 2004-05-15 devnull
162 5cedca1b 2004-05-15 devnull #define HYPHALG 1 /* hyphenation algorithm: 0=>good old troff, 1=>tex */
163 5cedca1b 2004-05-15 devnull
164 5cedca1b 2004-05-15 devnull
165 5cedca1b 2004-05-15 devnull /* array sizes, and similar limits: */
166 5cedca1b 2004-05-15 devnull
167 5cedca1b 2004-05-15 devnull #define MAXFONTS 99 /* Maximum number of fonts in fontab */
168 4f36200e 2005-12-14 devnull #define NM 91 /* requests + macros */
169 5cedca1b 2004-05-15 devnull #define NN NNAMES /* number registers */
170 5cedca1b 2004-05-15 devnull #define NNAMES 15 /* predefined reg names */
171 5cedca1b 2004-05-15 devnull #define NIF 15 /* if-else nesting */
172 5cedca1b 2004-05-15 devnull #define NS 128 /* name buffer */
173 5cedca1b 2004-05-15 devnull #define NTM 1024 /* tm buffer */
174 5cedca1b 2004-05-15 devnull #define NEV 3 /* environments */
175 5cedca1b 2004-05-15 devnull #define EVLSZ 10 /* size of ev stack */
176 5cedca1b 2004-05-15 devnull
177 586abfa4 2005-12-29 devnull #define STACKSIZE (12*1024) /* stack for macros and strings in progress */
178 5cedca1b 2004-05-15 devnull #define NHYP 10 /* max hyphens per word */
179 5cedca1b 2004-05-15 devnull #define NHEX 512 /* byte size of exception word list */
180 5cedca1b 2004-05-15 devnull #define NTAB 100 /* tab stops */
181 5cedca1b 2004-05-15 devnull #define NSO 5 /* "so" depth */
182 5cedca1b 2004-05-15 devnull #define NMF 5 /* number of -m flags */
183 5cedca1b 2004-05-15 devnull #define WDSIZE 500 /* word buffer click size */
184 5cedca1b 2004-05-15 devnull #define LNSIZE 4000 /* line buffer click size */
185 5cedca1b 2004-05-15 devnull #define OLNSIZE 5000 /* output line buffer click; bigger for 'w', etc. */
186 5cedca1b 2004-05-15 devnull #define NDI 5 /* number of diversions */
187 5cedca1b 2004-05-15 devnull
188 5cedca1b 2004-05-15 devnull #define ALPHABET alphabet /* number of characters in basic alphabet. */
189 5cedca1b 2004-05-15 devnull /* 128 for parochial USA 7-bit ascii, */
190 5cedca1b 2004-05-15 devnull /* 256 for "European" mode with e.g., Latin-1 */
191 5cedca1b 2004-05-15 devnull
192 fa325e9b 2020-01-10 cross /* NCHARS must be greater than
193 5cedca1b 2004-05-15 devnull ALPHABET (ascii stuff) + total number of distinct char names
194 5cedca1b 2004-05-15 devnull from all fonts that will be run in this job (including
195 5cedca1b 2004-05-15 devnull unnamed ones and \N's)
196 5cedca1b 2004-05-15 devnull */
197 5cedca1b 2004-05-15 devnull
198 5cedca1b 2004-05-15 devnull #define NCHARS (8*1024) /* maximum size of troff character set*/
199 5cedca1b 2004-05-15 devnull
200 5cedca1b 2004-05-15 devnull
201 5cedca1b 2004-05-15 devnull /* However for nroff you want only :
202 5cedca1b 2004-05-15 devnull 1. number of special codes in charset of DESC, which ends up being the
203 5cedca1b 2004-05-15 devnull value of nchtab and which must be less than 512.
204 5cedca1b 2004-05-15 devnull 2. ALPHABET, which apparently is the size of the portion of the tables reserved
205 5cedca1b 2004-05-15 devnull for special control symbols
206 5cedca1b 2004-05-15 devnull Apparently the max N of \N is irrelevant; */
207 5cedca1b 2004-05-15 devnull /* to allow \N of up to 254 with up to 338 special characters
208 5cedca1b 2004-05-15 devnull you need NCHARS of 338 + ALPHABET = 466 */
209 5cedca1b 2004-05-15 devnull
210 5cedca1b 2004-05-15 devnull #define NROFFCHARS 1024 /* maximum size of nroff character set */
211 5cedca1b 2004-05-15 devnull
212 5cedca1b 2004-05-15 devnull #define NTRTAB NCHARS /* number of items in trtab[] */
213 5cedca1b 2004-05-15 devnull #define NWIDCACHE NCHARS /* number of items in widcache[] */
214 5cedca1b 2004-05-15 devnull
215 5cedca1b 2004-05-15 devnull #define NTRAP 20 /* number of traps */
216 5cedca1b 2004-05-15 devnull #define NPN 20 /* numbers in "-o" */
217 5cedca1b 2004-05-15 devnull #define FBUFSZ 512 /* field buf size words */
218 5cedca1b 2004-05-15 devnull #define IBUFSZ 4096 /* bytes */
219 5cedca1b 2004-05-15 devnull #define NC 1024 /* cbuf size words */
220 5cedca1b 2004-05-15 devnull #define NOV 10 /* number of overstrike chars */
221 5cedca1b 2004-05-15 devnull #define NPP 10 /* pads per field */
222 5cedca1b 2004-05-15 devnull
223 5cedca1b 2004-05-15 devnull /*
224 5cedca1b 2004-05-15 devnull Internal character representation:
225 5cedca1b 2004-05-15 devnull Internally, every character is carried around as
226 5cedca1b 2004-05-15 devnull a 32 bit cookie, called a "Tchar" (typedef long).
227 5cedca1b 2004-05-15 devnull Bits are numbered 31..0 from left to right.
228 5cedca1b 2004-05-15 devnull If bit 15 is 1, the character is motion, with
229 5cedca1b 2004-05-15 devnull if bit 16 it's vertical motion
230 5cedca1b 2004-05-15 devnull if bit 17 it's negative motion
231 5cedca1b 2004-05-15 devnull If bit 15 is 0, the character is a real character.
232 5cedca1b 2004-05-15 devnull if bit 31 zero motion
233 5cedca1b 2004-05-15 devnull bits 30..24 size
234 5cedca1b 2004-05-15 devnull bits 23..16 font
235 5cedca1b 2004-05-15 devnull */
236 5cedca1b 2004-05-15 devnull
237 5cedca1b 2004-05-15 devnull /* in the following, "L" should really be a Tchar, but ... */
238 5cedca1b 2004-05-15 devnull /* numerology leaves room for 16 bit chars */
239 5cedca1b 2004-05-15 devnull
240 5cedca1b 2004-05-15 devnull #define MOT (01uL << 16) /* motion character indicator */
241 5cedca1b 2004-05-15 devnull #define VMOT (01uL << 30) /* vertical motion bit */
242 5cedca1b 2004-05-15 devnull #define NMOT (01uL << 29) /* negative motion indicator */
243 5cedca1b 2004-05-15 devnull /* #define MOTV (MOT|VMOT|NMOT) /* motion flags */
244 5cedca1b 2004-05-15 devnull /* #define MAXMOT (~MOTV) /* maximum motion permitted */
245 5cedca1b 2004-05-15 devnull #define MAXMOT 0xFFFF
246 5cedca1b 2004-05-15 devnull
247 5cedca1b 2004-05-15 devnull #define ismot(n) ((n) & MOT)
248 5cedca1b 2004-05-15 devnull #define isvmot(n) (((n) & (MOT|VMOT)) == (MOT|VMOT)) /* must have tested MOT previously */
249 5cedca1b 2004-05-15 devnull #define isnmot(n) (((n) & (MOT|NMOT)) == (MOT|NMOT)) /* ditto */
250 5cedca1b 2004-05-15 devnull #define absmot(n) ((n) & 0xFFFF)
251 5cedca1b 2004-05-15 devnull
252 5cedca1b 2004-05-15 devnull #define ZBIT (01uL << 31) /* zero width char */
253 5cedca1b 2004-05-15 devnull #define iszbit(n) ((n) & ZBIT)
254 5cedca1b 2004-05-15 devnull
255 5cedca1b 2004-05-15 devnull #define FSHIFT 17
256 5cedca1b 2004-05-15 devnull #define SSHIFT (FSHIFT+7)
257 5cedca1b 2004-05-15 devnull #define SMASK (0177uL << SSHIFT) /* 128 distinct sizes */
258 5cedca1b 2004-05-15 devnull #define FMASK (0177uL << FSHIFT) /* 128 distinct fonts */
259 5cedca1b 2004-05-15 devnull #define SFMASK (SMASK|FMASK) /* size and font in a Tchar */
260 5cedca1b 2004-05-15 devnull #define sbits(n) (((n) >> SSHIFT) & 0177)
261 5cedca1b 2004-05-15 devnull #define fbits(n) (((n) >> FSHIFT) & 0177)
262 5cedca1b 2004-05-15 devnull #define sfbits(n) (((n) & SFMASK) >> FSHIFT)
263 5cedca1b 2004-05-15 devnull #define cbits(n) ((n) & 0x1FFFF) /* isolate character bits, */
264 5cedca1b 2004-05-15 devnull /* but don't include motions */
265 5cedca1b 2004-05-15 devnull extern int realcbits(Tchar);
266 5cedca1b 2004-05-15 devnull
267 5cedca1b 2004-05-15 devnull #define setsbits(n,s) n = (n & ~SMASK) | (Tchar)(s) << SSHIFT
268 5cedca1b 2004-05-15 devnull #define setfbits(n,f) n = (n & ~FMASK) | (Tchar)(f) << FSHIFT
269 5cedca1b 2004-05-15 devnull #define setsfbits(n,sf) n = (n & ~SFMASK) | (Tchar)(sf) << FSHIFT
270 5cedca1b 2004-05-15 devnull #define setcbits(n,c) n = (n & ~0xFFFFuL | (c)) /* set character bits */
271 5cedca1b 2004-05-15 devnull
272 5cedca1b 2004-05-15 devnull #define BYTEMASK 0377
273 5cedca1b 2004-05-15 devnull #define BYTE 8
274 5cedca1b 2004-05-15 devnull
275 5cedca1b 2004-05-15 devnull #define SHORTMASK 0XFFFF
276 5cedca1b 2004-05-15 devnull #define SHORT 16
277 5cedca1b 2004-05-15 devnull
278 5cedca1b 2004-05-15 devnull #define TABMASK ((unsigned) INT_MAX >> 1)
279 5cedca1b 2004-05-15 devnull #define RTAB ((TABMASK << 1) & ~TABMASK)
280 5cedca1b 2004-05-15 devnull #define CTAB (RTAB << 1)
281 5cedca1b 2004-05-15 devnull
282 5cedca1b 2004-05-15 devnull #define TABBIT 02 /* bits in gchtab */
283 5cedca1b 2004-05-15 devnull #define LDRBIT 04
284 5cedca1b 2004-05-15 devnull #define FCBIT 010
285 5cedca1b 2004-05-15 devnull
286 5cedca1b 2004-05-15 devnull #define PAIR(A,B) (A|(B<<SHORT))
287 5cedca1b 2004-05-15 devnull
288 5cedca1b 2004-05-15 devnull
289 5cedca1b 2004-05-15 devnull extern int Inch, Hor, Vert, Unitwidth;
290 5cedca1b 2004-05-15 devnull
291 5cedca1b 2004-05-15 devnull struct Spnames
292 5cedca1b 2004-05-15 devnull {
293 5cedca1b 2004-05-15 devnull int *n;
294 5cedca1b 2004-05-15 devnull char *v;
295 5cedca1b 2004-05-15 devnull };
296 5cedca1b 2004-05-15 devnull
297 5cedca1b 2004-05-15 devnull extern Spnames spnames[];
298 5cedca1b 2004-05-15 devnull
299 5cedca1b 2004-05-15 devnull /*
300 5cedca1b 2004-05-15 devnull String and macro definitions are stored conceptually in a giant array
301 5cedca1b 2004-05-15 devnull indexed by type Offset. In olden times, this array was real, and thus
302 5cedca1b 2004-05-15 devnull both huge and limited in size, leading to the "Out of temp file space"
303 5cedca1b 2004-05-15 devnull error. In this version, the array is represented by a list of blocks,
304 5cedca1b 2004-05-15 devnull pointed to by blist[].bp. Each block is of size BLK Tchars, and BLK
305 5cedca1b 2004-05-15 devnull MUST be a power of 2 for the macros below to work.
306 fa325e9b 2020-01-10 cross
307 5cedca1b 2004-05-15 devnull The blocks associated with a particular string or macro are chained
308 5cedca1b 2004-05-15 devnull together in the array blist[]. Each blist[i].nextoff contains the
309 5cedca1b 2004-05-15 devnull Offset associated with the next block in the giant array, or -1 if
310 5cedca1b 2004-05-15 devnull this is the last block in the chain. If .nextoff is 0, the block is
311 5cedca1b 2004-05-15 devnull free.
312 fa325e9b 2020-01-10 cross
313 5cedca1b 2004-05-15 devnull To find the right index in blist for an Offset, divide by BLK.
314 5cedca1b 2004-05-15 devnull */
315 5cedca1b 2004-05-15 devnull
316 5cedca1b 2004-05-15 devnull #define NBLIST 2048 /* starting number of blocks in all definitions */
317 5cedca1b 2004-05-15 devnull
318 5cedca1b 2004-05-15 devnull #define BLK 128 /* number of Tchars in a block; must be 2^N with defns below */
319 5cedca1b 2004-05-15 devnull
320 5cedca1b 2004-05-15 devnull #define rbf0(o) (blist[bindex(o)].bp[boffset(o)])
321 5cedca1b 2004-05-15 devnull #define bindex(o) ((o) / BLK)
322 5cedca1b 2004-05-15 devnull #define boffset(o) ((o) & (BLK-1))
323 5cedca1b 2004-05-15 devnull #define pastend(o) (((o) & (BLK-1)) == 0)
324 5cedca1b 2004-05-15 devnull /* #define incoff(o) ( (++o & (BLK-1)) ? o : blist[bindex(o-1)].nextoff ) */
325 5cedca1b 2004-05-15 devnull #define incoff(o) ( (((o)+1) & (BLK-1)) ? o+1 : blist[bindex(o)].nextoff )
326 5cedca1b 2004-05-15 devnull
327 5cedca1b 2004-05-15 devnull #define skipline(f) while (getc(f) != '\n')
328 5cedca1b 2004-05-15 devnull #define is(s) (strcmp(cmd, s) == 0)
329 5cedca1b 2004-05-15 devnull #define eq(s1, s2) (strcmp(s1, s2) == 0)
330 5cedca1b 2004-05-15 devnull
331 5cedca1b 2004-05-15 devnull
332 5cedca1b 2004-05-15 devnull typedef unsigned long Offset; /* an offset in macro/string storage */
333 5cedca1b 2004-05-15 devnull
334 5cedca1b 2004-05-15 devnull struct Blockp { /* info about a block: */
335 5cedca1b 2004-05-15 devnull Tchar *bp; /* the data */
336 5cedca1b 2004-05-15 devnull Offset nextoff; /* offset of next block in a chain */
337 5cedca1b 2004-05-15 devnull };
338 5cedca1b 2004-05-15 devnull
339 5cedca1b 2004-05-15 devnull extern Blockp *blist;
340 5cedca1b 2004-05-15 devnull
341 5cedca1b 2004-05-15 devnull #define RD_OFFSET (1 * BLK) /* .rd command uses block 1 */
342 5cedca1b 2004-05-15 devnull
343 5cedca1b 2004-05-15 devnull struct Diver { /* diversion */
344 5cedca1b 2004-05-15 devnull Offset op;
345 5cedca1b 2004-05-15 devnull int dnl;
346 5cedca1b 2004-05-15 devnull int dimac;
347 5cedca1b 2004-05-15 devnull int ditrap;
348 5cedca1b 2004-05-15 devnull int ditf;
349 5cedca1b 2004-05-15 devnull int alss;
350 5cedca1b 2004-05-15 devnull int blss;
351 5cedca1b 2004-05-15 devnull int nls;
352 5cedca1b 2004-05-15 devnull int mkline;
353 5cedca1b 2004-05-15 devnull int maxl;
354 5cedca1b 2004-05-15 devnull int hnl;
355 5cedca1b 2004-05-15 devnull int curd;
356 5cedca1b 2004-05-15 devnull };
357 5cedca1b 2004-05-15 devnull
358 5cedca1b 2004-05-15 devnull struct Stack { /* stack frame */
359 5cedca1b 2004-05-15 devnull int nargs;
360 5cedca1b 2004-05-15 devnull Stack *pframe;
361 5cedca1b 2004-05-15 devnull Offset pip;
362 5cedca1b 2004-05-15 devnull int pnchar;
363 5cedca1b 2004-05-15 devnull Tchar prchar;
364 5cedca1b 2004-05-15 devnull int ppendt;
365 5cedca1b 2004-05-15 devnull Tchar pch;
366 5cedca1b 2004-05-15 devnull Tchar *lastpbp;
367 5cedca1b 2004-05-15 devnull int mname;
368 5cedca1b 2004-05-15 devnull };
369 5cedca1b 2004-05-15 devnull
370 5cedca1b 2004-05-15 devnull extern Stack s;
371 5cedca1b 2004-05-15 devnull
372 5cedca1b 2004-05-15 devnull struct Divsiz {
373 5cedca1b 2004-05-15 devnull int dix;
374 5cedca1b 2004-05-15 devnull int diy;
375 5cedca1b 2004-05-15 devnull };
376 5cedca1b 2004-05-15 devnull
377 5cedca1b 2004-05-15 devnull struct Contab { /* command or macro */
378 5cedca1b 2004-05-15 devnull unsigned int rq;
379 5cedca1b 2004-05-15 devnull Contab *link;
380 5cedca1b 2004-05-15 devnull void (*f)(void);
381 5cedca1b 2004-05-15 devnull Offset mx;
382 5cedca1b 2004-05-15 devnull Offset emx;
383 5cedca1b 2004-05-15 devnull Divsiz *divsiz;
384 5cedca1b 2004-05-15 devnull };
385 5cedca1b 2004-05-15 devnull
386 5cedca1b 2004-05-15 devnull #define C(a,b) {a, 0, b, 0, 0} /* how to initialize a contab entry */
387 5cedca1b 2004-05-15 devnull
388 5cedca1b 2004-05-15 devnull extern Contab contab[NM];
389 5cedca1b 2004-05-15 devnull
390 5cedca1b 2004-05-15 devnull struct Numtab { /* number registers */
391 5cedca1b 2004-05-15 devnull unsigned int r; /* name */
392 5cedca1b 2004-05-15 devnull int val;
393 5cedca1b 2004-05-15 devnull short fmt;
394 5cedca1b 2004-05-15 devnull short inc;
395 5cedca1b 2004-05-15 devnull Numtab *link;
396 5cedca1b 2004-05-15 devnull };
397 5cedca1b 2004-05-15 devnull
398 5cedca1b 2004-05-15 devnull extern Numtab numtab[NN];
399 5cedca1b 2004-05-15 devnull
400 5cedca1b 2004-05-15 devnull #define PN 0
401 5cedca1b 2004-05-15 devnull #define NL 1
402 5cedca1b 2004-05-15 devnull #define YR 2
403 5cedca1b 2004-05-15 devnull #define HP 3
404 5cedca1b 2004-05-15 devnull #define CT 4
405 5cedca1b 2004-05-15 devnull #define DN 5
406 5cedca1b 2004-05-15 devnull #define MO 6
407 5cedca1b 2004-05-15 devnull #define DY 7
408 5cedca1b 2004-05-15 devnull #define DW 8
409 5cedca1b 2004-05-15 devnull #define LN 9
410 5cedca1b 2004-05-15 devnull #define DL 10
411 5cedca1b 2004-05-15 devnull #define ST 11
412 5cedca1b 2004-05-15 devnull #define SB 12
413 5cedca1b 2004-05-15 devnull #define CD 13
414 5cedca1b 2004-05-15 devnull #define PID 14
415 5cedca1b 2004-05-15 devnull
416 5cedca1b 2004-05-15 devnull struct Wcache { /* width cache, indexed by character */
417 5cedca1b 2004-05-15 devnull short fontpts;
418 5cedca1b 2004-05-15 devnull short width;
419 5cedca1b 2004-05-15 devnull };
420 5cedca1b 2004-05-15 devnull
421 5cedca1b 2004-05-15 devnull struct Tbuf { /* growable Tchar buffer */
422 5cedca1b 2004-05-15 devnull Tchar *_bufp;
423 5cedca1b 2004-05-15 devnull unsigned int _size;
424 5cedca1b 2004-05-15 devnull };
425 5cedca1b 2004-05-15 devnull
426 5cedca1b 2004-05-15 devnull /* the infamous environment block */
427 5cedca1b 2004-05-15 devnull
428 5cedca1b 2004-05-15 devnull #define ics envp->_ics
429 5cedca1b 2004-05-15 devnull #define sps envp->_sps
430 5cedca1b 2004-05-15 devnull #define spacesz envp->_spacesz
431 5cedca1b 2004-05-15 devnull #define lss envp->_lss
432 5cedca1b 2004-05-15 devnull #define lss1 envp->_lss1
433 5cedca1b 2004-05-15 devnull #define ll envp->_ll
434 5cedca1b 2004-05-15 devnull #define ll1 envp->_ll1
435 5cedca1b 2004-05-15 devnull #define lt envp->_lt
436 5cedca1b 2004-05-15 devnull #define lt1 envp->_lt1
437 5cedca1b 2004-05-15 devnull #define ic envp->_ic
438 5cedca1b 2004-05-15 devnull #define icf envp->_icf
439 5cedca1b 2004-05-15 devnull #define chbits envp->_chbits
440 5cedca1b 2004-05-15 devnull #define spbits envp->_spbits
441 5cedca1b 2004-05-15 devnull #define nmbits envp->_nmbits
442 5cedca1b 2004-05-15 devnull #define apts envp->_apts
443 5cedca1b 2004-05-15 devnull #define apts1 envp->_apts1
444 5cedca1b 2004-05-15 devnull #define pts envp->_pts
445 5cedca1b 2004-05-15 devnull #define pts1 envp->_pts1
446 5cedca1b 2004-05-15 devnull #define font envp->_font
447 5cedca1b 2004-05-15 devnull #define font1 envp->_font1
448 5cedca1b 2004-05-15 devnull #define ls envp->_ls
449 5cedca1b 2004-05-15 devnull #define ls1 envp->_ls1
450 5cedca1b 2004-05-15 devnull #define ad envp->_ad
451 5cedca1b 2004-05-15 devnull #define nms envp->_nms
452 5cedca1b 2004-05-15 devnull #define ndf envp->_ndf
453 5cedca1b 2004-05-15 devnull #define nmwid envp->_nmwid
454 5cedca1b 2004-05-15 devnull #define fi envp->_fi
455 5cedca1b 2004-05-15 devnull #define cc envp->_cc
456 5cedca1b 2004-05-15 devnull #define c2 envp->_c2
457 5cedca1b 2004-05-15 devnull #define ohc envp->_ohc
458 5cedca1b 2004-05-15 devnull #define tdelim envp->_tdelim
459 5cedca1b 2004-05-15 devnull #define hyf envp->_hyf
460 5cedca1b 2004-05-15 devnull #define hyoff envp->_hyoff
461 5cedca1b 2004-05-15 devnull #define hyphalg envp->_hyphalg
462 5cedca1b 2004-05-15 devnull #define un1 envp->_un1
463 5cedca1b 2004-05-15 devnull #define tabc envp->_tabc
464 5cedca1b 2004-05-15 devnull #define dotc envp->_dotc
465 5cedca1b 2004-05-15 devnull #define adsp envp->_adsp
466 5cedca1b 2004-05-15 devnull #define adrem envp->_adrem
467 5cedca1b 2004-05-15 devnull #define lastl envp->_lastl
468 5cedca1b 2004-05-15 devnull #define nel envp->_nel
469 5cedca1b 2004-05-15 devnull #define admod envp->_admod
470 5cedca1b 2004-05-15 devnull #define wordp envp->_wordp
471 5cedca1b 2004-05-15 devnull #define spflg envp->_spflg
472 5cedca1b 2004-05-15 devnull #define linep envp->_linep
473 5cedca1b 2004-05-15 devnull #define wdend envp->_wdend
474 5cedca1b 2004-05-15 devnull #define wdstart envp->_wdstart
475 5cedca1b 2004-05-15 devnull #define wne envp->_wne
476 5cedca1b 2004-05-15 devnull #define ne envp->_ne
477 5cedca1b 2004-05-15 devnull #define nc envp->_nc
478 5cedca1b 2004-05-15 devnull #define nb envp->_nb
479 5cedca1b 2004-05-15 devnull #define lnmod envp->_lnmod
480 5cedca1b 2004-05-15 devnull #define nwd envp->_nwd
481 5cedca1b 2004-05-15 devnull #define nn envp->_nn
482 5cedca1b 2004-05-15 devnull #define ni envp->_ni
483 5cedca1b 2004-05-15 devnull #define ul envp->_ul
484 5cedca1b 2004-05-15 devnull #define cu envp->_cu
485 5cedca1b 2004-05-15 devnull #define ce envp->_ce
486 5cedca1b 2004-05-15 devnull #define in envp->_in
487 5cedca1b 2004-05-15 devnull #define in1 envp->_in1
488 5cedca1b 2004-05-15 devnull #define un envp->_un
489 5cedca1b 2004-05-15 devnull #define wch envp->_wch
490 5cedca1b 2004-05-15 devnull #define pendt envp->_pendt
491 5cedca1b 2004-05-15 devnull #define pendw envp->_pendw
492 5cedca1b 2004-05-15 devnull #define pendnf envp->_pendnf
493 5cedca1b 2004-05-15 devnull #define spread envp->_spread
494 5cedca1b 2004-05-15 devnull #define it envp->_it
495 5cedca1b 2004-05-15 devnull #define itmac envp->_itmac
496 5cedca1b 2004-05-15 devnull #define hyptr envp->_hyptr
497 5cedca1b 2004-05-15 devnull #define tabtab envp->_tabtab
498 5cedca1b 2004-05-15 devnull #define line envp->_line._bufp
499 5cedca1b 2004-05-15 devnull #define lnsize envp->_line._size
500 5cedca1b 2004-05-15 devnull #define word envp->_word._bufp
501 5cedca1b 2004-05-15 devnull #define wdsize envp->_word._size
502 5cedca1b 2004-05-15 devnull
503 5cedca1b 2004-05-15 devnull #define oline _oline._bufp
504 5cedca1b 2004-05-15 devnull #define olnsize _oline._size
505 5cedca1b 2004-05-15 devnull
506 5cedca1b 2004-05-15 devnull /*
507 5cedca1b 2004-05-15 devnull * Note:
508 5cedca1b 2004-05-15 devnull * If this structure changes in ni.c, you must change
509 5cedca1b 2004-05-15 devnull * this as well, and vice versa.
510 5cedca1b 2004-05-15 devnull */
511 5cedca1b 2004-05-15 devnull
512 5cedca1b 2004-05-15 devnull struct Env {
513 5cedca1b 2004-05-15 devnull int _ics;
514 5cedca1b 2004-05-15 devnull int _sps;
515 5cedca1b 2004-05-15 devnull int _spacesz;
516 5cedca1b 2004-05-15 devnull int _lss;
517 5cedca1b 2004-05-15 devnull int _lss1;
518 5cedca1b 2004-05-15 devnull int _ll;
519 5cedca1b 2004-05-15 devnull int _ll1;
520 5cedca1b 2004-05-15 devnull int _lt;
521 5cedca1b 2004-05-15 devnull int _lt1;
522 5cedca1b 2004-05-15 devnull Tchar _ic;
523 5cedca1b 2004-05-15 devnull int _icf;
524 5cedca1b 2004-05-15 devnull Tchar _chbits;
525 5cedca1b 2004-05-15 devnull Tchar _spbits;
526 5cedca1b 2004-05-15 devnull Tchar _nmbits;
527 5cedca1b 2004-05-15 devnull int _apts;
528 5cedca1b 2004-05-15 devnull int _apts1;
529 5cedca1b 2004-05-15 devnull int _pts;
530 5cedca1b 2004-05-15 devnull int _pts1;
531 5cedca1b 2004-05-15 devnull int _font;
532 5cedca1b 2004-05-15 devnull int _font1;
533 5cedca1b 2004-05-15 devnull int _ls;
534 5cedca1b 2004-05-15 devnull int _ls1;
535 5cedca1b 2004-05-15 devnull int _ad;
536 5cedca1b 2004-05-15 devnull int _nms;
537 5cedca1b 2004-05-15 devnull int _ndf;
538 5cedca1b 2004-05-15 devnull int _nmwid;
539 5cedca1b 2004-05-15 devnull int _fi;
540 5cedca1b 2004-05-15 devnull int _cc;
541 5cedca1b 2004-05-15 devnull int _c2;
542 5cedca1b 2004-05-15 devnull int _ohc;
543 5cedca1b 2004-05-15 devnull int _tdelim;
544 5cedca1b 2004-05-15 devnull int _hyf;
545 5cedca1b 2004-05-15 devnull int _hyoff;
546 5cedca1b 2004-05-15 devnull int _hyphalg;
547 5cedca1b 2004-05-15 devnull int _un1;
548 5cedca1b 2004-05-15 devnull int _tabc;
549 5cedca1b 2004-05-15 devnull int _dotc;
550 5cedca1b 2004-05-15 devnull int _adsp;
551 5cedca1b 2004-05-15 devnull int _adrem;
552 5cedca1b 2004-05-15 devnull int _lastl;
553 5cedca1b 2004-05-15 devnull int _nel;
554 5cedca1b 2004-05-15 devnull int _admod;
555 5cedca1b 2004-05-15 devnull Tchar *_wordp;
556 5cedca1b 2004-05-15 devnull int _spflg;
557 5cedca1b 2004-05-15 devnull Tchar *_linep;
558 5cedca1b 2004-05-15 devnull Tchar *_wdend;
559 5cedca1b 2004-05-15 devnull Tchar *_wdstart;
560 5cedca1b 2004-05-15 devnull int _wne;
561 5cedca1b 2004-05-15 devnull int _ne;
562 5cedca1b 2004-05-15 devnull int _nc;
563 5cedca1b 2004-05-15 devnull int _nb;
564 5cedca1b 2004-05-15 devnull int _lnmod;
565 5cedca1b 2004-05-15 devnull int _nwd;
566 5cedca1b 2004-05-15 devnull int _nn;
567 5cedca1b 2004-05-15 devnull int _ni;
568 5cedca1b 2004-05-15 devnull int _ul;
569 5cedca1b 2004-05-15 devnull int _cu;
570 5cedca1b 2004-05-15 devnull int _ce;
571 5cedca1b 2004-05-15 devnull int _in;
572 5cedca1b 2004-05-15 devnull int _in1;
573 5cedca1b 2004-05-15 devnull int _un;
574 5cedca1b 2004-05-15 devnull int _wch;
575 5cedca1b 2004-05-15 devnull int _pendt;
576 5cedca1b 2004-05-15 devnull Tchar *_pendw;
577 5cedca1b 2004-05-15 devnull int _pendnf;
578 5cedca1b 2004-05-15 devnull int _spread;
579 5cedca1b 2004-05-15 devnull int _it;
580 5cedca1b 2004-05-15 devnull int _itmac;
581 5cedca1b 2004-05-15 devnull Tchar *_hyptr[NHYP];
582 5cedca1b 2004-05-15 devnull long _tabtab[NTAB];
583 5cedca1b 2004-05-15 devnull Tbuf _line;
584 5cedca1b 2004-05-15 devnull Tbuf _word;
585 5cedca1b 2004-05-15 devnull };
586 5cedca1b 2004-05-15 devnull
587 5cedca1b 2004-05-15 devnull extern Env env[];
588 5cedca1b 2004-05-15 devnull extern Env *envp;
589 5cedca1b 2004-05-15 devnull
590 5cedca1b 2004-05-15 devnull enum { MBchar = 'U', Troffchar = 'C', Number = 'N', Install = 'i', Lookup = 'l' };
591 5cedca1b 2004-05-15 devnull /* U => utf, for instance; C => \(xx, N => \N'...' */
592 5cedca1b 2004-05-15 devnull
593 5cedca1b 2004-05-15 devnull
594 5cedca1b 2004-05-15 devnull
595 5cedca1b 2004-05-15 devnull struct Chwid { /* data on one character */
596 5cedca1b 2004-05-15 devnull Ushort num; /* character number:
597 5cedca1b 2004-05-15 devnull 0 -> not on this font
598 5cedca1b 2004-05-15 devnull >= ALPHABET -> its number among all Cxy's */
599 5cedca1b 2004-05-15 devnull Ushort code; /* char code for actual device. used for \N */
600 5cedca1b 2004-05-15 devnull char *str; /* code string for nroff */
601 5cedca1b 2004-05-15 devnull Uchar wid; /* width */
602 5cedca1b 2004-05-15 devnull Uchar kern; /* ascender/descender */
603 5cedca1b 2004-05-15 devnull };
604 5cedca1b 2004-05-15 devnull
605 5cedca1b 2004-05-15 devnull struct Font { /* characteristics of a font */
606 5cedca1b 2004-05-15 devnull int name; /* int name, e.g., BI (2 chars) */
607 5cedca1b 2004-05-15 devnull char longname[64]; /* long name of this font (e.g., "Bembo" */
608 5cedca1b 2004-05-15 devnull char *truename; /* path name of table if not in standard place */
609 5cedca1b 2004-05-15 devnull int nchars; /* number of width entries for this font */
610 5cedca1b 2004-05-15 devnull char specfont; /* 1 == special font */
611 5cedca1b 2004-05-15 devnull int spacewidth; /* width of space on this font */
612 5cedca1b 2004-05-15 devnull int defaultwidth; /* default width of characters on this font */
613 5cedca1b 2004-05-15 devnull Chwid *wp; /* widths, etc., of the real characters */
614 5cedca1b 2004-05-15 devnull char ligfont; /* 1 == ligatures exist on this font */
615 5cedca1b 2004-05-15 devnull };
616 5cedca1b 2004-05-15 devnull
617 5cedca1b 2004-05-15 devnull /* ligatures, ORed into ligfont */
618 5cedca1b 2004-05-15 devnull
619 5cedca1b 2004-05-15 devnull #define LFF 01
620 5cedca1b 2004-05-15 devnull #define LFI 02
621 5cedca1b 2004-05-15 devnull #define LFL 04
622 5cedca1b 2004-05-15 devnull #define LFFI 010
623 5cedca1b 2004-05-15 devnull #define LFFL 020
624 5cedca1b 2004-05-15 devnull
625 5cedca1b 2004-05-15 devnull /* tracing modes */
626 5cedca1b 2004-05-15 devnull #define TRNARGS 01 /* trace legality of numeric arguments */
627 5cedca1b 2004-05-15 devnull #define TRREQ 02 /* trace requests */
628 5cedca1b 2004-05-15 devnull #define TRMAC 04 /* trace macros */
629 5cedca1b 2004-05-15 devnull #define RQERR 01 /* processing request/macro */
630 5cedca1b 2004-05-15 devnull
631 5cedca1b 2004-05-15 devnull /* typewriter driving table structure */
632 5cedca1b 2004-05-15 devnull
633 5cedca1b 2004-05-15 devnull
634 5cedca1b 2004-05-15 devnull extern Term t;
635 5cedca1b 2004-05-15 devnull struct Term {
636 5cedca1b 2004-05-15 devnull int bset; /* these bits have to be on */
637 5cedca1b 2004-05-15 devnull int breset; /* these bits have to be off */
638 5cedca1b 2004-05-15 devnull int Hor; /* #units in minimum horiz motion */
639 5cedca1b 2004-05-15 devnull int Vert; /* #units in minimum vert motion */
640 5cedca1b 2004-05-15 devnull int Newline; /* #units in single line space */
641 5cedca1b 2004-05-15 devnull int Char; /* #units in character width */
642 5cedca1b 2004-05-15 devnull int Em; /* ditto */
643 5cedca1b 2004-05-15 devnull int Halfline; /* half line units */
644 5cedca1b 2004-05-15 devnull int Adj; /* minimum units for horizontal adjustment */
645 5cedca1b 2004-05-15 devnull char *twinit; /* initialize terminal */
646 5cedca1b 2004-05-15 devnull char *twrest; /* reinitialize terminal */
647 5cedca1b 2004-05-15 devnull char *twnl; /* terminal sequence for newline */
648 5cedca1b 2004-05-15 devnull char *hlr; /* half-line reverse */
649 5cedca1b 2004-05-15 devnull char *hlf; /* half-line forward */
650 5cedca1b 2004-05-15 devnull char *flr; /* full-line reverse */
651 5cedca1b 2004-05-15 devnull char *bdon; /* turn bold mode on */
652 5cedca1b 2004-05-15 devnull char *bdoff; /* turn bold mode off */
653 5cedca1b 2004-05-15 devnull char *iton; /* turn italic mode on */
654 5cedca1b 2004-05-15 devnull char *itoff; /* turn italic mode off */
655 5cedca1b 2004-05-15 devnull char *ploton; /* turn plot mode on */
656 5cedca1b 2004-05-15 devnull char *plotoff; /* turn plot mode off */
657 5cedca1b 2004-05-15 devnull char *up; /* sequence to move up in plot mode */
658 5cedca1b 2004-05-15 devnull char *down; /* ditto */
659 5cedca1b 2004-05-15 devnull char *right; /* ditto */
660 5cedca1b 2004-05-15 devnull char *left; /* ditto */
661 5cedca1b 2004-05-15 devnull
662 5cedca1b 2004-05-15 devnull Font tfont; /* widths and other info, as in a troff font */
663 5cedca1b 2004-05-15 devnull };
664 5cedca1b 2004-05-15 devnull
665 5cedca1b 2004-05-15 devnull extern Term t;
666 5cedca1b 2004-05-15 devnull
667 5cedca1b 2004-05-15 devnull /*
668 5cedca1b 2004-05-15 devnull * for error reporting; keep track of escapes/requests with numeric arguments
669 5cedca1b 2004-05-15 devnull */
670 5cedca1b 2004-05-15 devnull struct Numerr {
671 5cedca1b 2004-05-15 devnull char type; /* request or escape? */
672 5cedca1b 2004-05-15 devnull char esc; /* was escape sequence named esc */
673 5cedca1b 2004-05-15 devnull char escarg; /* argument of esc's like \D'l' */
674 5cedca1b 2004-05-15 devnull unsigned int req; /* was request or macro named req */
675 5cedca1b 2004-05-15 devnull };