1 | /*
|
---|
2 | * cawf.h - definitions for cawf(1)
|
---|
3 | */
|
---|
4 |
|
---|
5 | /*
|
---|
6 | * Copyright (c) 1991 Purdue University Research Foundation,
|
---|
7 | * West Lafayette, Indiana 47907. All rights reserved.
|
---|
8 | *
|
---|
9 | * Written by Victor A. Abell <abe@mace.cc.purdue.edu>, Purdue
|
---|
10 | * University Computing Center. Not derived from licensed software;
|
---|
11 | * derived from awf(1) by Henry Spencer of the University of Toronto.
|
---|
12 | *
|
---|
13 | * Permission is granted to anyone to use this software for any
|
---|
14 | * purpose on any computer system, and to alter it and redistribute
|
---|
15 | * it freely, subject to the following restrictions:
|
---|
16 | *
|
---|
17 | * 1. The author is not responsible for any consequences of use of
|
---|
18 | * this software, even if they arise from flaws in it.
|
---|
19 | *
|
---|
20 | * 2. The origin of this software must not be misrepresented, either
|
---|
21 | * by explicit claim or by omission. Credits must appear in the
|
---|
22 | * documentation.
|
---|
23 | *
|
---|
24 | * 3. Altered versions must be plainly marked as such, and must not
|
---|
25 | * be misrepresented as being the original software. Credits must
|
---|
26 | * appear in the documentation.
|
---|
27 | *
|
---|
28 | * 4. This notice may not be removed or altered.
|
---|
29 | */
|
---|
30 |
|
---|
31 | #include <stdio.h>
|
---|
32 | #ifdef UNIX
|
---|
33 | #include <sys/types.h>
|
---|
34 | #else
|
---|
35 | #include <sys\types.h>
|
---|
36 | #endif
|
---|
37 | #include "regexp.h"
|
---|
38 | #include "cawflib.h"
|
---|
39 | #include "proto.h"
|
---|
40 |
|
---|
41 | #define DEVCONFIG "device.cf" /* device configuration file */
|
---|
42 | #define ESC '\033' /* ESCape character */
|
---|
43 | #define MAXEXP 30 /* maximum expressions
|
---|
44 | * (and TABs) */
|
---|
45 | #define MAXFSTK 5 /* maximum file stack
|
---|
46 | * (for .so) */
|
---|
47 | #define MAXHYCH 10 /* maximum hyphen characters */
|
---|
48 | #define MAXLINE 512 /* maximum line length */
|
---|
49 | #define MAXMACRO 100 /* maximum number of macros */
|
---|
50 | #define MAXMTXT 1024 /* maximum macro text lines */
|
---|
51 | #define MAXNHNR 10 /* maximum ".NH" numbers
|
---|
52 | * (but 0 not used) */
|
---|
53 | #define MAXNR 50 /* maximum number reg */
|
---|
54 | #define MAXOLL 512 /* maximum output line length */
|
---|
55 | #define MAXSCH 256 /* maximum special characters */
|
---|
56 | #define MAXSP 25 /* maximum stack pointer (for
|
---|
57 | * nesting of macro calls) */
|
---|
58 | #define MAXSTR 100 /* maximum ".ds" strings */
|
---|
59 |
|
---|
60 | /*
|
---|
61 | * Output line adjustment modes
|
---|
62 | */
|
---|
63 |
|
---|
64 | #define LEFTADJ 0
|
---|
65 | #define RIGHTADJ 1
|
---|
66 | #define BOTHADJ 2
|
---|
67 |
|
---|
68 | /*
|
---|
69 | * Error handling codes
|
---|
70 | */
|
---|
71 |
|
---|
72 | #define FATAL 0 /* fatal error */
|
---|
73 | #define LINE 0 /* display line */
|
---|
74 | #define NOLINE 1 /* don't display line */
|
---|
75 | #define WARN 1 /* warning error */
|
---|
76 |
|
---|
77 | /*
|
---|
78 | * Padding directions
|
---|
79 | */
|
---|
80 |
|
---|
81 | #define PADLEFT 0 /* pad from left */
|
---|
82 | #define PADRIGHT 1 /* pad from right */
|
---|
83 |
|
---|
84 | /*
|
---|
85 | * Pass 3 signal codes
|
---|
86 | */
|
---|
87 |
|
---|
88 | #define NOBREAK -1
|
---|
89 | #define DOBREAK -2
|
---|
90 | #define MESSAGE -3
|
---|
91 |
|
---|
92 | /*
|
---|
93 | * Macro argument types
|
---|
94 | */
|
---|
95 |
|
---|
96 | #define MANMACROS 1 /* -man */
|
---|
97 | #define MSMACROS 2 /* -ms */
|
---|
98 |
|
---|
99 |
|
---|
100 | struct fcode {
|
---|
101 | unsigned char nm; /* font name character */
|
---|
102 | unsigned char status; /* status */
|
---|
103 | };
|
---|
104 |
|
---|
105 | struct fontstr { /* font control strings */
|
---|
106 |
|
---|
107 | unsigned char *i; /* font initialization string */
|
---|
108 | int il; /* length of *i */
|
---|
109 | unsigned char *b; /* bold */
|
---|
110 | int bl; /* length of *bb */
|
---|
111 | unsigned char *it; /* italic */
|
---|
112 | int itl; /* length of *itb */
|
---|
113 | unsigned char *r; /* roman string */
|
---|
114 | int rl; /* length of *r */
|
---|
115 | };
|
---|
116 |
|
---|
117 | struct hytab {
|
---|
118 | unsigned char font; /* font name character */
|
---|
119 | int len; /* effective length */
|
---|
120 | unsigned char *str; /* value string */
|
---|
121 | };
|
---|
122 |
|
---|
123 | struct macro {
|
---|
124 | unsigned char name[2]; /* macro name */
|
---|
125 | int bx; /* beginning Macrotxt[] index */
|
---|
126 | int ct; /* index count */
|
---|
127 | };
|
---|
128 |
|
---|
129 | struct nbr {
|
---|
130 | unsigned char nm[2]; /* register name */
|
---|
131 | int val; /* value */
|
---|
132 | };
|
---|
133 |
|
---|
134 | struct parms {
|
---|
135 | char nm[2]; /* parameter name */
|
---|
136 | char *cmd; /* pass 3 command */
|
---|
137 | int val; /* current value */
|
---|
138 | int prev; /* previous value */
|
---|
139 | };
|
---|
140 |
|
---|
141 | struct rx {
|
---|
142 | char *re; /* regular expression */
|
---|
143 | struct regexp *pat; /* compiled pattern */
|
---|
144 | };
|
---|
145 |
|
---|
146 | struct scale {
|
---|
147 | unsigned char nm; /* scale factor name */
|
---|
148 | double val; /* value */
|
---|
149 | };
|
---|
150 |
|
---|
151 | struct schtab {
|
---|
152 | unsigned char nm[2]; /* character name */
|
---|
153 | int len; /* effective length */
|
---|
154 | unsigned char *str; /* value string */
|
---|
155 | };
|
---|
156 |
|
---|
157 | struct str {
|
---|
158 | unsigned char nm[2]; /* string name */
|
---|
159 | unsigned char *str; /* string value */
|
---|
160 | };
|
---|
161 |
|
---|
162 | extern int Adj; /* output line adjustment mode */
|
---|
163 | extern unsigned char *Aftnxt; /* action after next line */
|
---|
164 | extern unsigned char *Args[]; /* macro arguments */
|
---|
165 | extern unsigned char *Argstack[]; /* stack for Expand()'s "args[]" */
|
---|
166 | extern int Backc; /* last word ended with '\\c' */
|
---|
167 | extern int Botmarg; /* bottom margin */
|
---|
168 | extern int Centering; /* centering count */
|
---|
169 | extern int Condstack[]; /* stack for Expand()'s "cond" */
|
---|
170 | extern unsigned char *Cont; /* continue line append */
|
---|
171 | extern int Contlen; /* continue line append length */
|
---|
172 | extern int Curmx; /* current macro name */
|
---|
173 | extern char *Device; /* output device name */
|
---|
174 | extern char *Devconf; /* device configuration file path */
|
---|
175 | extern char *Devfont; /* output device font */
|
---|
176 | extern int Divert; /* diversion status */
|
---|
177 | extern FILE *Efs; /* error file stream pointer */
|
---|
178 | extern unsigned char *Eol; /* end of line information */
|
---|
179 | extern int Eollen; /* end of line length */
|
---|
180 | extern int Err; /* error flag */
|
---|
181 | extern unsigned char *F; /* field value */
|
---|
182 | extern struct fcode Fcode[]; /* font codes */
|
---|
183 | extern int Fill; /* fill status */
|
---|
184 | extern unsigned char Font[]; /* current font */
|
---|
185 | extern int Fontctl; /* output font control */
|
---|
186 | extern char Fontstat; /* output font status */
|
---|
187 | extern int Fph; /* first page header status */
|
---|
188 | extern int Fsp; /* files stack pointer (for .so) */
|
---|
189 | extern struct fontstr Fstr; /* font control strings */
|
---|
190 | extern unsigned char *Ftc; /* center footer */
|
---|
191 | extern unsigned char *Ftl; /* left footer */
|
---|
192 | extern unsigned char *Ftr; /* right footer */
|
---|
193 | extern unsigned char *Hdc; /* center header */
|
---|
194 | extern int Hdft; /* header/footer status */
|
---|
195 | extern unsigned char *Hdl; /* left header */
|
---|
196 | extern unsigned char *Hdr; /* right header */
|
---|
197 | extern FILE *Ifs; /* input file stream */
|
---|
198 | extern FILE *Ifs_stk[]; /* Ifs stack */
|
---|
199 | extern int Ind; /* indentation amount */
|
---|
200 | extern unsigned char *Inname; /* input file name */
|
---|
201 | extern unsigned char *Inn_stk[]; /* Inname stack */
|
---|
202 | extern struct hytab Hychar[]; /* hyphen characters */
|
---|
203 | extern int LL; /* line length */
|
---|
204 | extern unsigned char Line[]; /* input line */
|
---|
205 | extern int Lockil; /* pass 2 line number is locked
|
---|
206 | * (processing is inside macro) */
|
---|
207 | extern int Marg; /* macro argument - man, ms, etc. */
|
---|
208 | extern struct macro Macrotab[]; /* macro table */
|
---|
209 | extern int Macrostack[]; /* stack for Expand()'s "macro" */
|
---|
210 | extern unsigned char *Macrotxt[]; /* macro text */
|
---|
211 | extern int Mtx; /* macro text index */
|
---|
212 | extern int Mxstack[]; /* stack for Expand()'s "mx" */
|
---|
213 | extern int Nhnr[]; /* ".NH" numbers */
|
---|
214 | extern int Nhy; /* number of Hychar[] entries */
|
---|
215 | extern int Nleftstack[]; /* stack for Expand()'s "nleft" */
|
---|
216 | extern int Nmac; /* number of macros */
|
---|
217 | extern int Nnr; /* number of Numb[] entries */
|
---|
218 | extern int Nospmode; /* no space mode */
|
---|
219 | extern int Nparms; /* number of Parms[] entries */
|
---|
220 | extern int NR; /* number of record, ala awk */
|
---|
221 | extern int NR_stk[]; /* NR stack */
|
---|
222 | extern int Nsch; /* number of Schar[] entries */
|
---|
223 | extern int Nstr; /* number of entries in Str[] */
|
---|
224 | extern int Ntabs; /* number of TAB positions */
|
---|
225 | extern struct nbr Numb[]; /* number registers */
|
---|
226 | extern int Nxtln; /* next line number */
|
---|
227 | extern char *optarg; /* getopt(3) argument pointer */
|
---|
228 | extern int optind; /* getopt(3) index */
|
---|
229 | extern int Outll; /* output line length */
|
---|
230 | extern unsigned char Outln[]; /* output line */
|
---|
231 | extern int Outlx; /* output line index */
|
---|
232 | extern int P2il; /* pass 2 input line number */
|
---|
233 | extern unsigned char *P2name; /* pass 2 input file name */
|
---|
234 | extern int P3fill; /* pass 3 fill status */
|
---|
235 | extern int Padchar[]; /* padding character locations */
|
---|
236 | extern int Padfrom; /* which end to pad from */
|
---|
237 | extern int Padx; /* Padchar[] index */
|
---|
238 | extern struct parms Parms[]; /* parameter registers */
|
---|
239 | extern unsigned char Pass1ln[]; /* pass 1 output line */
|
---|
240 | extern unsigned char Pass2ln[]; /* pass 2 output line */
|
---|
241 | extern struct rx Pat[]; /* compiled regexp patterns */
|
---|
242 | extern int Pglen; /* page length */
|
---|
243 | extern int Pgoff; /* page offset */
|
---|
244 | extern char *Pname; /* program name */
|
---|
245 | extern unsigned char Prevfont; /* previous font */
|
---|
246 | extern int Ptrstack[]; /* stack for Expand()'s "ptr" */
|
---|
247 | extern struct scale Scale[]; /* scaling factors */
|
---|
248 | extern double Scalen; /* 'n' scaling factor */
|
---|
249 | extern double Scaleu; /* 'u' scaling factor */
|
---|
250 | extern double Scalev; /* 'v' scaling factor */
|
---|
251 | extern struct schtab Schar[]; /* special characters */
|
---|
252 | extern int Sp; /* stack pointer */
|
---|
253 | extern struct str Str[]; /* ".ds" strings */
|
---|
254 | extern int Sx; /* string index */
|
---|
255 | extern int Tabs[]; /* TAB positions */
|
---|
256 | extern int Thispg; /* this page number */
|
---|
257 | extern int Tind; /* temporary indentation amount */
|
---|
258 | extern int Topmarg; /* top margin */
|
---|
259 | extern unsigned char *Trtbl; /* .tr table */
|
---|
260 | extern int Uhyph; /* hyphen usage state */
|
---|
261 | extern int Vspace; /* vertical (inter-text-line) spacing */
|
---|
262 | extern unsigned char Word[]; /* pass 2 word buffer */
|
---|
263 | extern int Wordl; /* effective length of Word[] */
|
---|
264 | extern int Wordx; /* Word[] index */
|
---|
265 | extern int Dowarn; /* Enables warnings when true */
|
---|