00001 /* 00002 * cawf.h - definitions for cawf(1) 00003 */ 00004 00005 /* 00006 * Copyright (c) 1991 Purdue University Research Foundation, 00007 * West Lafayette, Indiana 47907. All rights reserved. 00008 * 00009 * Written by Victor A. Abell <abe@mace.cc.purdue.edu>, Purdue 00010 * University Computing Center. Not derived from licensed software; 00011 * derived from awf(1) by Henry Spencer of the University of Toronto. 00012 * 00013 * Permission is granted to anyone to use this software for any 00014 * purpose on any computer system, and to alter it and redistribute 00015 * it freely, subject to the following restrictions: 00016 * 00017 * 1. The author is not responsible for any consequences of use of 00018 * this software, even if they arise from flaws in it. 00019 * 00020 * 2. The origin of this software must not be misrepresented, either 00021 * by explicit claim or by omission. Credits must appear in the 00022 * documentation. 00023 * 00024 * 3. Altered versions must be plainly marked as such, and must not 00025 * be misrepresented as being the original software. Credits must 00026 * appear in the documentation. 00027 * 00028 * 4. This notice may not be removed or altered. 00029 */ 00030 00031 #include <stdio.h> 00032 #ifdef UNIX 00033 #include <sys/types.h> 00034 #else 00035 #include <sys\types.h> 00036 #endif 00037 #include "regexp.h" 00038 #include "cawflib.h" 00039 #include "proto.h" 00040 00041 #define DEVCONFIG "device.cf" /* device configuration file */ 00042 #define ESC '\033' /* ESCape character */ 00043 #define MAXEXP 30 /* maximum expressions 00044 * (and TABs) */ 00045 #define MAXFSTK 5 /* maximum file stack 00046 * (for .so) */ 00047 #define MAXHYCH 10 /* maximum hyphen characters */ 00048 #define MAXLINE 512 /* maximum line length */ 00049 #define MAXMACRO 100 /* maximum number of macros */ 00050 #define MAXMTXT 1024 /* maximum macro text lines */ 00051 #define MAXNHNR 10 /* maximum ".NH" numbers 00052 * (but 0 not used) */ 00053 #define MAXNR 50 /* maximum number reg */ 00054 #define MAXOLL 512 /* maximum output line length */ 00055 #define MAXSCH 256 /* maximum special characters */ 00056 #define MAXSP 25 /* maximum stack pointer (for 00057 * nesting of macro calls) */ 00058 #define MAXSTR 100 /* maximum ".ds" strings */ 00059 00060 /* 00061 * Output line adjustment modes 00062 */ 00063 00064 #define LEFTADJ 0 00065 #define RIGHTADJ 1 00066 #define BOTHADJ 2 00067 00068 /* 00069 * Error handling codes 00070 */ 00071 00072 #define FATAL 0 /* fatal error */ 00073 #define LINE 0 /* display line */ 00074 #define NOLINE 1 /* don't display line */ 00075 #define WARN 1 /* warning error */ 00076 00077 /* 00078 * Padding directions 00079 */ 00080 00081 #define PADLEFT 0 /* pad from left */ 00082 #define PADRIGHT 1 /* pad from right */ 00083 00084 /* 00085 * Pass 3 signal codes 00086 */ 00087 00088 #define NOBREAK -1 00089 #define DOBREAK -2 00090 #define MESSAGE -3 00091 00092 /* 00093 * Macro argument types 00094 */ 00095 00096 #define MANMACROS 1 /* -man */ 00097 #define MSMACROS 2 /* -ms */ 00098 00099 00100 struct fcode { 00101 unsigned char nm; /* font name character */ 00102 unsigned char status; /* status */ 00103 }; 00104 00105 struct fontstr { /* font control strings */ 00106 00107 unsigned char *i; /* font initialization string */ 00108 int il; /* length of *i */ 00109 unsigned char *b; /* bold */ 00110 int bl; /* length of *bb */ 00111 unsigned char *it; /* italic */ 00112 int itl; /* length of *itb */ 00113 unsigned char *r; /* roman string */ 00114 int rl; /* length of *r */ 00115 }; 00116 00117 struct hytab { 00118 unsigned char font; /* font name character */ 00119 int len; /* effective length */ 00120 unsigned char *str; /* value string */ 00121 }; 00122 00123 struct macro { 00124 unsigned char name[2]; /* macro name */ 00125 int bx; /* beginning Macrotxt[] index */ 00126 int ct; /* index count */ 00127 }; 00128 00129 struct nbr { 00130 unsigned char nm[2]; /* register name */ 00131 int val; /* value */ 00132 }; 00133 00134 struct parms { 00135 char nm[2]; /* parameter name */ 00136 char *cmd; /* pass 3 command */ 00137 int val; /* current value */ 00138 int prev; /* previous value */ 00139 }; 00140 00141 struct rx { 00142 char *re; /* regular expression */ 00143 struct regexp *pat; /* compiled pattern */ 00144 }; 00145 00146 struct scale { 00147 unsigned char nm; /* scale factor name */ 00148 double val; /* value */ 00149 }; 00150 00151 struct schtab { 00152 unsigned char nm[2]; /* character name */ 00153 int len; /* effective length */ 00154 unsigned char *str; /* value string */ 00155 }; 00156 00157 struct str { 00158 unsigned char nm[2]; /* string name */ 00159 unsigned char *str; /* string value */ 00160 }; 00161 00162 extern int Adj; /* output line adjustment mode */ 00163 extern unsigned char *Aftnxt; /* action after next line */ 00164 extern unsigned char *Args[]; /* macro arguments */ 00165 extern unsigned char *Argstack[]; /* stack for Expand()'s "args[]" */ 00166 extern int Backc; /* last word ended with '\\c' */ 00167 extern int Botmarg; /* bottom margin */ 00168 extern int Centering; /* centering count */ 00169 extern int Condstack[]; /* stack for Expand()'s "cond" */ 00170 extern unsigned char *Cont; /* continue line append */ 00171 extern int Contlen; /* continue line append length */ 00172 extern int Curmx; /* current macro name */ 00173 extern char *Device; /* output device name */ 00174 extern char *Devconf; /* device configuration file path */ 00175 extern char *Devfont; /* output device font */ 00176 extern int Divert; /* diversion status */ 00177 extern FILE *Efs; /* error file stream pointer */ 00178 extern unsigned char *Eol; /* end of line information */ 00179 extern int Eollen; /* end of line length */ 00180 extern int Err; /* error flag */ 00181 extern unsigned char *F; /* field value */ 00182 extern struct fcode Fcode[]; /* font codes */ 00183 extern int Fill; /* fill status */ 00184 extern unsigned char Font[]; /* current font */ 00185 extern int Fontctl; /* output font control */ 00186 extern char Fontstat; /* output font status */ 00187 extern int Fph; /* first page header status */ 00188 extern int Fsp; /* files stack pointer (for .so) */ 00189 extern struct fontstr Fstr; /* font control strings */ 00190 extern unsigned char *Ftc; /* center footer */ 00191 extern unsigned char *Ftl; /* left footer */ 00192 extern unsigned char *Ftr; /* right footer */ 00193 extern unsigned char *Hdc; /* center header */ 00194 extern int Hdft; /* header/footer status */ 00195 extern unsigned char *Hdl; /* left header */ 00196 extern unsigned char *Hdr; /* right header */ 00197 extern FILE *Ifs; /* input file stream */ 00198 extern FILE *Ifs_stk[]; /* Ifs stack */ 00199 extern int Ind; /* indentation amount */ 00200 extern unsigned char *Inname; /* input file name */ 00201 extern unsigned char *Inn_stk[]; /* Inname stack */ 00202 extern struct hytab Hychar[]; /* hyphen characters */ 00203 extern int LL; /* line length */ 00204 extern unsigned char Line[]; /* input line */ 00205 extern int Lockil; /* pass 2 line number is locked 00206 * (processing is inside macro) */ 00207 extern int Marg; /* macro argument - man, ms, etc. */ 00208 extern struct macro Macrotab[]; /* macro table */ 00209 extern int Macrostack[]; /* stack for Expand()'s "macro" */ 00210 extern unsigned char *Macrotxt[]; /* macro text */ 00211 extern int Mtx; /* macro text index */ 00212 extern int Mxstack[]; /* stack for Expand()'s "mx" */ 00213 extern int Nhnr[]; /* ".NH" numbers */ 00214 extern int Nhy; /* number of Hychar[] entries */ 00215 extern int Nleftstack[]; /* stack for Expand()'s "nleft" */ 00216 extern int Nmac; /* number of macros */ 00217 extern int Nnr; /* number of Numb[] entries */ 00218 extern int Nospmode; /* no space mode */ 00219 extern int Nparms; /* number of Parms[] entries */ 00220 extern int NR; /* number of record, ala awk */ 00221 extern int NR_stk[]; /* NR stack */ 00222 extern int Nsch; /* number of Schar[] entries */ 00223 extern int Nstr; /* number of entries in Str[] */ 00224 extern int Ntabs; /* number of TAB positions */ 00225 extern struct nbr Numb[]; /* number registers */ 00226 extern int Nxtln; /* next line number */ 00227 extern char *optarg; /* getopt(3) argument pointer */ 00228 extern int optind; /* getopt(3) index */ 00229 extern int Outll; /* output line length */ 00230 extern unsigned char Outln[]; /* output line */ 00231 extern int Outlx; /* output line index */ 00232 extern int P2il; /* pass 2 input line number */ 00233 extern unsigned char *P2name; /* pass 2 input file name */ 00234 extern int P3fill; /* pass 3 fill status */ 00235 extern int Padchar[]; /* padding character locations */ 00236 extern int Padfrom; /* which end to pad from */ 00237 extern int Padx; /* Padchar[] index */ 00238 extern struct parms Parms[]; /* parameter registers */ 00239 extern unsigned char Pass1ln[]; /* pass 1 output line */ 00240 extern unsigned char Pass2ln[]; /* pass 2 output line */ 00241 extern struct rx Pat[]; /* compiled regexp patterns */ 00242 extern int Pglen; /* page length */ 00243 extern int Pgoff; /* page offset */ 00244 extern char *Pname; /* program name */ 00245 extern unsigned char Prevfont; /* previous font */ 00246 extern int Ptrstack[]; /* stack for Expand()'s "ptr" */ 00247 extern struct scale Scale[]; /* scaling factors */ 00248 extern double Scalen; /* 'n' scaling factor */ 00249 extern double Scaleu; /* 'u' scaling factor */ 00250 extern double Scalev; /* 'v' scaling factor */ 00251 extern struct schtab Schar[]; /* special characters */ 00252 extern int Sp; /* stack pointer */ 00253 extern struct str Str[]; /* ".ds" strings */ 00254 extern int Sx; /* string index */ 00255 extern int Tabs[]; /* TAB positions */ 00256 extern int Thispg; /* this page number */ 00257 extern int Tind; /* temporary indentation amount */ 00258 extern int Topmarg; /* top margin */ 00259 extern unsigned char *Trtbl; /* .tr table */ 00260 extern int Uhyph; /* hyphen usage state */ 00261 extern int Vspace; /* vertical (inter-text-line) spacing */ 00262 extern unsigned char Word[]; /* pass 2 word buffer */ 00263 extern int Wordl; /* effective length of Word[] */ 00264 extern int Wordx; /* Word[] index */ 00265 extern int Dowarn; /* Enables warnings when true */
1.5.8