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 */
 |