xref: /minix/minix/commands/cawf/cawf.h (revision 433d6423)
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 */
266