266 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			266 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *	cawf.h - definitions for cawf(1)
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  *	Copyright (c) 1991 Purdue University Research Foundation,
 | |
|  *	West Lafayette, Indiana 47907.  All rights reserved.
 | |
|  *
 | |
|  *	Written by Victor A. Abell <abe@mace.cc.purdue.edu>,  Purdue
 | |
|  *	University Computing Center.  Not derived from licensed software;
 | |
|  *	derived from awf(1) by Henry Spencer of the University of Toronto.
 | |
|  *
 | |
|  *	Permission is granted to anyone to use this software for any
 | |
|  *	purpose on any computer system, and to alter it and redistribute
 | |
|  *	it freely, subject to the following restrictions:
 | |
|  *
 | |
|  *	1. The author is not responsible for any consequences of use of
 | |
|  *	   this software, even if they arise from flaws in it.
 | |
|  *
 | |
|  *	2. The origin of this software must not be misrepresented, either
 | |
|  *	   by explicit claim or by omission.  Credits must appear in the
 | |
|  *	   documentation.
 | |
|  *
 | |
|  *	3. Altered versions must be plainly marked as such, and must not
 | |
|  *	   be misrepresented as being the original software.  Credits must
 | |
|  *	   appear in the documentation.
 | |
|  *
 | |
|  *	4. This notice may not be removed or altered.
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #ifdef	UNIX
 | |
| #include <sys/types.h>
 | |
| #else
 | |
| #include <sys\types.h>
 | |
| #endif
 | |
| #include "regexp.h"
 | |
| #include "cawflib.h"
 | |
| #include "proto.h"
 | |
| 
 | |
| #define	DEVCONFIG	"device.cf"		/* device configuration file */
 | |
| #define ESC		'\033'			/* ESCape character */
 | |
| #define MAXEXP          30                      /* maximum expressions
 | |
| 						 * (and TABs) */
 | |
| #define MAXFSTK		5			/* maximum file stack
 | |
| 						 * (for .so) */
 | |
| #define MAXHYCH		10			/* maximum hyphen characters */
 | |
| #define MAXLINE         512			/* maximum line length */
 | |
| #define MAXMACRO        100			/* maximum number of macros */
 | |
| #define MAXMTXT         1024			/* maximum macro text lines */
 | |
| #define MAXNHNR		10			/* maximum ".NH" numbers
 | |
| 						 * (but 0 not used) */
 | |
| #define MAXNR		50			/* maximum number reg */
 | |
| #define MAXOLL		512			/* maximum output line length */
 | |
| #define	MAXSCH		256			/* maximum special characters */
 | |
| #define MAXSP		25			/* maximum stack pointer (for
 | |
| 						 * nesting of macro calls) */
 | |
| #define MAXSTR		100			/* maximum ".ds" strings */
 | |
| 
 | |
| /*
 | |
|  * Output line adjustment modes
 | |
|  */
 | |
| 
 | |
| #define LEFTADJ		0
 | |
| #define RIGHTADJ	1
 | |
| #define BOTHADJ		2
 | |
| 
 | |
| /*
 | |
|  * Error handling codes
 | |
|  */
 | |
| 
 | |
| #define	FATAL		0			/* fatal error */
 | |
| #define	LINE		0			/* display line */
 | |
| #define	NOLINE		1			/* don't display line */
 | |
| #define WARN		1			/* warning error */
 | |
| 
 | |
| /*
 | |
|  * Padding directions
 | |
|  */
 | |
| 
 | |
| #define	PADLEFT		0			/* pad from left */
 | |
| #define PADRIGHT	1			/* pad from right */
 | |
| 
 | |
| /*
 | |
|  * Pass 3 signal codes
 | |
|  */
 | |
| 
 | |
| #define NOBREAK		-1
 | |
| #define DOBREAK		-2
 | |
| #define MESSAGE		-3
 | |
| 
 | |
| /*
 | |
|  * Macro argument types
 | |
|  */
 | |
| 
 | |
| #define	MANMACROS	1			/* -man */
 | |
| #define MSMACROS	2			/* -ms */
 | |
| 
 | |
| 
 | |
| struct fcode {
 | |
| 	unsigned char nm;		/* font name character */
 | |
| 	unsigned char status;		/* status */
 | |
| };
 | |
| 
 | |
| struct fontstr {			/* font control strings */
 | |
| 
 | |
| 	unsigned char *i;		/* font initialization string */
 | |
| 	int il;				/* length of *i */ 
 | |
| 	unsigned char *b;		/* bold */
 | |
| 	int bl;				/* length of *bb */
 | |
| 	unsigned char *it;		/* italic */
 | |
| 	int itl;			/* length of *itb */
 | |
| 	unsigned char *r;		/* roman string */
 | |
| 	int rl;				/* length of *r */
 | |
| }; 
 | |
| 
 | |
| struct hytab {
 | |
| 	unsigned char font;		/* font name character */
 | |
| 	int len;			/* effective length */
 | |
| 	unsigned char *str;		/* value string */
 | |
| };
 | |
| 
 | |
| struct macro {
 | |
|         unsigned char name[2];		/* macro name */
 | |
|         int bx;				/* beginning Macrotxt[] index */
 | |
| 	int ct;				/* index count */
 | |
| };
 | |
| 
 | |
| struct nbr {
 | |
| 	unsigned char nm[2];		/* register name */
 | |
| 	int val;			/* value */
 | |
| };
 | |
| 
 | |
| struct parms {
 | |
| 	char nm[2];			/* parameter name */
 | |
| 	char *cmd;			/* pass 3 command */
 | |
| 	int val;                        /* current value */
 | |
| 	int prev;                       /* previous value */
 | |
| };
 | |
| 
 | |
| struct rx {
 | |
| 	char *re;			/* regular expression */
 | |
| 	struct regexp *pat;		/* compiled pattern */
 | |
| };
 | |
| 
 | |
| struct scale {
 | |
| 	unsigned char nm;		/* scale factor name */
 | |
| 	double val;			/* value */
 | |
| };
 | |
| 
 | |
| struct schtab {
 | |
| 	unsigned char nm[2];		/* character name */
 | |
| 	int len;			/* effective length */
 | |
| 	unsigned char *str;		/* value string */
 | |
| };
 | |
| 
 | |
| struct str {
 | |
| 	unsigned char nm[2];		/* string name */
 | |
| 	unsigned char *str;		/* string value */
 | |
| };
 | |
| 
 | |
| extern int Adj;				/* output line adjustment mode */
 | |
| extern unsigned char *Aftnxt;		/* action after next line */
 | |
| extern unsigned char *Args[];		/* macro arguments */
 | |
| extern unsigned char *Argstack[];	/* stack for Expand()'s "args[]" */
 | |
| extern int Backc;                       /* last word ended with '\\c' */
 | |
| extern int Botmarg;			/* bottom margin */
 | |
| extern int Centering;                   /* centering count */
 | |
| extern int Condstack[];                 /* stack for Expand()'s "cond" */
 | |
| extern unsigned char *Cont;		/* continue line append */
 | |
| extern int Contlen;			/* continue line append length */
 | |
| extern int Curmx;                 	/* current macro name */
 | |
| extern char *Device;			/* output device name */
 | |
| extern char *Devconf;			/* device configuration file path */
 | |
| extern char *Devfont;			/* output device font */
 | |
| extern int Divert;			/* diversion status */
 | |
| extern FILE *Efs;			/* error file stream pointer */
 | |
| extern unsigned char *Eol;		/* end of line information */
 | |
| extern int Eollen;			/* end of line length */
 | |
| extern int Err;                         /* error flag */
 | |
| extern unsigned char *F;		/* field value */
 | |
| extern struct fcode Fcode[];		/* font codes */
 | |
| extern int Fill;			/* fill status */
 | |
| extern unsigned char Font[];		/* current font */
 | |
| extern int Fontctl;			/* output font control */
 | |
| extern char Fontstat;			/* output font status */
 | |
| extern int Fph;				/* first page header status */
 | |
| extern int Fsp;                         /* files stack pointer (for .so) */
 | |
| extern struct fontstr Fstr;		/* font control strings */
 | |
| extern unsigned char *Ftc;		/* center footer */
 | |
| extern unsigned char *Ftl;		/* left footer */
 | |
| extern unsigned char *Ftr;		/* right footer */
 | |
| extern unsigned char *Hdc;		/* center header */
 | |
| extern int Hdft;			/* header/footer status */
 | |
| extern unsigned char *Hdl;		/* left header */
 | |
| extern unsigned char *Hdr;		/* right header */
 | |
| extern FILE *Ifs;			/* input file stream */
 | |
| extern FILE *Ifs_stk[];			/* Ifs stack */
 | |
| extern int Ind;                         /* indentation amount */
 | |
| extern unsigned char *Inname;		/* input file name */
 | |
| extern unsigned char *Inn_stk[];	/* Inname stack */
 | |
| extern struct hytab Hychar[];           /* hyphen characters */
 | |
| extern int LL;				/* line length */
 | |
| extern unsigned char Line[];		/* input line */
 | |
| extern int Lockil;			/* pass 2 line number is locked
 | |
| 					 * (processing is inside macro) */
 | |
| extern int Marg;                        /* macro argument - man, ms, etc. */
 | |
| extern struct macro Macrotab[];         /* macro table */
 | |
| extern int Macrostack[];                /* stack for Expand()'s "macro" */
 | |
| extern unsigned char *Macrotxt[];	/* macro text */
 | |
| extern int Mtx;                         /* macro text index */
 | |
| extern int Mxstack[];                   /* stack for Expand()'s "mx" */
 | |
| extern int Nhnr[];			/* ".NH" numbers */
 | |
| extern int Nhy;                         /* number of Hychar[] entries */
 | |
| extern int Nleftstack[];                /* stack for Expand()'s "nleft" */
 | |
| extern int Nmac;                        /* number of macros */
 | |
| extern int Nnr;                         /* number of Numb[] entries */
 | |
| extern int Nospmode;			/* no space mode */
 | |
| extern int Nparms;                      /* number of Parms[] entries */
 | |
| extern int NR;                          /* number of record, ala awk */
 | |
| extern int NR_stk[];			/* NR stack */
 | |
| extern int Nsch;                        /* number of Schar[] entries */
 | |
| extern int Nstr;                        /* number of entries in Str[] */
 | |
| extern int Ntabs;			/* number of TAB positions */
 | |
| extern struct nbr Numb[];		/* number registers */
 | |
| extern int Nxtln;			/* next line number */
 | |
| extern char *optarg;			/* getopt(3) argument pointer */
 | |
| extern int optind;			/* getopt(3) index */
 | |
| extern int Outll;			/* output line length */
 | |
| extern unsigned char Outln[];		/* output line */
 | |
| extern int Outlx;			/* output line index */
 | |
| extern int P2il;                        /* pass 2 input line number */
 | |
| extern unsigned char *P2name;		/* pass 2 input file name */
 | |
| extern int P3fill;			/* pass 3 fill status */
 | |
| extern int Padchar[];			/* padding character locations */
 | |
| extern int Padfrom;			/* which end to pad from */
 | |
| extern int Padx;			/* Padchar[] index */
 | |
| extern struct parms Parms[];            /* parameter registers */
 | |
| extern unsigned char Pass1ln[];		/* pass 1 output line */
 | |
| extern unsigned char Pass2ln[];		/* pass 2 output line */
 | |
| extern struct rx Pat[];			/* compiled regexp patterns */
 | |
| extern int Pglen;			/* page length */
 | |
| extern int Pgoff;			/* page offset */
 | |
| extern char *Pname;			/* program name */
 | |
| extern unsigned char Prevfont;		/* previous font */
 | |
| extern int Ptrstack[];                  /* stack for Expand()'s "ptr" */
 | |
| extern struct scale Scale[];		/* scaling factors */
 | |
| extern double Scalen;                   /* 'n' scaling factor */
 | |
| extern double Scaleu;                   /* 'u' scaling factor */
 | |
| extern double Scalev;                   /* 'v' scaling factor */
 | |
| extern struct schtab Schar[];           /* special characters */
 | |
| extern int Sp;				/* stack pointer */
 | |
| extern struct str Str[];		/* ".ds" strings */
 | |
| extern int Sx;				/* string index */
 | |
| extern int Tabs[];			/* TAB positions */
 | |
| extern int Thispg;			/* this page number */
 | |
| extern int Tind;			/* temporary indentation amount */
 | |
| extern int Topmarg;			/* top margin */
 | |
| extern unsigned char *Trtbl;		/* .tr table */
 | |
| extern int Uhyph;			/* hyphen usage state */
 | |
| extern int Vspace;                      /* vertical (inter-text-line) spacing */
 | |
| extern unsigned char Word[];		/* pass 2 word buffer */
 | |
| extern int Wordl;                       /* effective length of Word[] */
 | |
| extern int Wordx;                       /* Word[] index */
 | |
| extern int Dowarn;			/* Enables warnings when true */
 | 
