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