home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_progs
/
txttools
/
nro.lzh
/
NRO
/
NRO.H
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-16
|
11KB
|
287 lines
/*
* Parameter file for NRO word processor
*
* Originally by Stephen L. Browning, 5723 North Parker Avenue
* Indianapolis, Indiana 46220
*
* Transformed beyond immediate recognition, and
* adapted for Amiga by Olaf Seibert, KosmoSoft
*
* Vossendijk 149-1 (study) Beek 5 (home)
* 5634 TN Nijmegen 5815 CS Merselo
* The Netherlands The Netherlands
* Phone:
* (...-31)80561045 (...-31)4786205
* or 080-561045 04786-205
*
* This program is NOT in the public domain. It may, however
* be distributed only at no charge, and this notice must be
* included unaltered.
*/
#include <ctype.h>
#undef tolower
#undef toupper
typedef unsigned char uchar;
typedef unsigned short ushort;
#define EOS (uchar) '\0'
#define ESC (uchar) 0x1B
#undef CPMEOF (uchar) 0x1A
#define NBSP (uchar) 0xA0
#define TRUE 1
#define FALSE 0
#define OK 0
#define NOARGS 0x8000
#define MACRO 0 /* Macro definition */
#define BP 1 /* Begin page */
#define BR 2 /* Break */
#define CE 3 /* Center */
#define FI 4 /* Fill */
#define FO 5 /* Footer */
#define HE 6 /* Header */
#define IN 7 /* Indent */
#define LS 8 /* Line spacing */
#define NF 9 /* No fill */
#define PL 10 /* Page lenght */
#define RM 11 /* Right margin */
#define SP 12 /* Line space */
#define TI 13 /* Temp indent */
#define UL 14 /* Underline */
#define JU 15 /* Justify */
#define NJ 16 /* No justify */
#define M1 17 /* Top margin */
#define M2 18 /* Second top margin */
#define M3 19 /* First bottom margin */
#define M4 20 /* Bottom-most margin */
#define BS 21 /* Allow/disallow '\b' in output */
#define NE 22 /* Need n lines */
#define PC 23 /* Page number character */
#define CC 24 /* Control character */
#define PO 25 /* Page offset */
#define BO 26 /* Bold face */
#define EH 27 /* Header for even numbered pages */
#define OH 28 /* Header for odd numbered pages */
#define EF 29 /* Footer for even numbered pages */
#define OF 30 /* Footer for odd numbered pages */
#define SO 31 /* Source file */
#define CU 32 /* Continuous underline */
#define DE 33 /* Define macro */
#define EN 34 /* End macro definition */
#define NR 35 /* Set number register */
#define IT 36 /* italicize */
#define UN 37 /* Undefine a macro and all later ones */
#define PN 38 /* Page numbering - roman or arabic */
#define C2 39 /* No-break second command character */
#define COMMENT 40 /* What the name says */
#define IF 41 /* Conditional without remembering */
#define IE 42 /* Conditional with remembering */
#define EL 43 /* Else part of last remembered conditional */
#define EV 44 /* Environment switch */
#define TA 45 /* Tab settings */
#define TM 46 /* Terminal Message */
#define UNKNOWN -1
/*
* MAXLINE is set to a value slightly larger
* than twice the longest expected input line.
* Because of the way underlining is handled, the
* input line which is to be underlined, can almost
* triple in length. Unlike normal underlining and
* boldfacing, continuous underlining affects all
* characters in the buffer, and represents the
* worst case condition. If the distance between
* the left margin and the right margin is greater
* than about 65 characters, and continuous underlining
* is in effect, there is a high probability of buffer
* overflow.
* On the Amiga, we can use the standard codes for
* bold, underline, and even italics, and let the
* printer driver worry about it.
*/
#define MAXLINE 300 /* Was 200 */
#define MAXWORD 50
#define MAXTAB 10
#define NOTAB ((ushort) -1)
#define PAGELEN 66
#define PAGEWIDTH 80
#define HUGE 0x7FFFffff
#define LEFT 0 /* Indecies into header margin limit arrays */
#define RIGHT 1
#define NFILES 4 /* Nesting depth for input files */
/*
* The following parameters may be defined in bdscio.h
*/
#define YES 1
#define NO 0
#define ERR -1
/*
* The parameter values selected for macro definitions
* are somewhat arbitrary. MACBUF is the storage area
* for both macro names and definitions. Since macro
* processing is handled by pushing back the expansion
* into the pushback buffer, the longest possible expansion
* would be MXMLEN characters.
* It is assumed that most macro definitions will not
* exceed 20 characters, hence MXMDEF of 100.
*/
#define MXMDEF 512 /* Maximum no. of macro definitions */
#define MACBUF 20480 /* Macro definition buffer */
#define MXMLEN 1024 /* Maximum length of each macro pushback */
#define MNLEN 10 /* Maximum length of macro name */
struct macros {
int mxmdef; /* See MXMDEF */
int macbuf;
int mxmlen;
uchar **mnames; /* Table of pointers to macro names */
int lastp; /* Index to last mname */
uchar *emb; /* Next char avail in macro defn buffer */
uchar *mb; /* Table of macro definitions */
uchar *ppb; /* Pointer into push back buffer */
uchar *pbb; /* Push back buffer */
uchar *pbbend; /* End of push back buffer */
};
/* Control parameters for nro */
#define NUMENV 10
#define ENVSTACK 20
struct environ {
int lsval; /* Current line spacing, init = 1 */
int tival; /* Current temp indent, init = 0 */
int inval; /* Current indent, >= 0, init = 0 */
int tmval; /* Current temp right margin, init = 60 */
int rmval; /* Current right margin, init = 60 */
int ceval; /* Number of lines to center, init = 0 */
int ulval; /* Number of lines to underline, init = 0 */
int cuval; /* No. lines to continuously underline, init = 0 */
int itval; /* Number of lines to italicize, init = 0 */
int juval; /* Justify if YES, init = YES */
int boval; /* Number of lines to bold face, init = 0 */
int fill; /* Fill if YES, init = YES */
int pnflg; /* Value for page numbering, init = 0 */
short dontbrk; /* Disables line breaking, init = FALSE */
int pgchr; /* Page number character, init = '#' */
int cmdchr; /* Command character, init = '.' */
int c2chr; /* No-break cmd character, init = '\'' */
int sprdir; /* Direction for spread(), init = 0 */
short reqmode; /* Requested mode for bold underline &c */
short expmode; /* Expected mode at begin of output buffer */
short curmode; /* Current mode in output buffer */
short lastie; /* Remembered conditional */
short outp; /* Next avail char position in outbuf, init = 0 */
short outw; /* Width of text currently in buffer */
short outwds; /* Number of words in buffer, init = 0 */
uchar outbuf[MAXLINE]; /* Output of filled text */
ushort tabstop[MAXTAB]; /* Tab settings */
};
/* Global variables: */
struct docctl { /* -- These should not be pushable: -- */
int bsflg; /* Can output contain '\b', init = FALSE */
short iflvl; /* Number of @} 's to be skipped */
short flevel; /* Nesting depth for source cmd, init = 0 */
int nr[26]; /* Number registers */
short curmode; /* Current mode at end of printer */
uchar envstack[ENVSTACK];
uchar envsp; /* Current environment stack depth */
#ifdef CPM
short lpr; /* Output to printer, init = FALSE */
#endif
};
/* Page control parameters for nro */
struct page {
int curpag; /* Current output page number, init =0 */
int newpag; /* Next output page number, init = 1 */
int lineno; /* Next line to be printed, init = 0 */
int plval; /* Page length in lines, init = 66 */
int m1val; /* Margin before and including header */
int m2val; /* Margin after header */
int m3val; /* Margin after last text line */
int m4val; /* Bottom margin, including footer */
int bottom; /* Last live line on page */
/* = plval - m3val - m4val */
int offset; /* Page offset from left, init = 0 */
int frstpg; /* First page to print, init = 0 */
int lastpg; /* Last page to print, init = 30000 */
int prflg; /* Print on or off, init = TRUE */
int ehlim[2]; /* Left/right margins for headers/footers */
int ohlim[2]; /* Init = 0 and PAGEWIDTH */
int eflim[2];
int oflim[2];
uchar ehead[MAXLINE]; /* Top of page title, init = '\n' */
uchar ohead[MAXLINE];
uchar efoot[MAXLINE]; /* Bottom of page title, init = '\n' */
uchar ofoot[MAXLINE];
};
#define BSAMIGA 0 /* Use Amiga command sequences for bold & underline */
#define BSYES 1 /* Use backspaces for bold & underline */
#define BSNO 2 /* Use carriage returns for bold & underline */
#define PNARABIC 0 /* Use Arabic way of page numbering */
#define PNLROMAN 1 /* Use lowercase Roman way of page numbering */
#define PNUROMAN 2 /* Use upperercase Roman way of page numbering */
void *malloc();
uchar *getmac(), *tabexp();
short processfx();
#ifndef CPM
# define prchar(c, fp) putc(c, fp)
#endif
#define STRINGTYP '"' /* Command has string argument */
#define MORETXT ';' /* Command seperator */
#define ESCCHAR '@' /* The substitution escape char */
#define CMDCHAR '.' /* The default command character */
#define C2CHAR '\'' /* The default no-break cmd character */
#define PGCHAR '#' /* The default page number character */
#define BEGIF ('{'|0x8000)
#define ENDIF ('}'|0x8000)
#define FXPLAIN 0 /* Printer command sequences */
#define FXBO 1
#define FXIT 2
#define FXUL 4
#define NOGUARD 0x8000
/* #define putlin(string, stream) fwrite(string, strlen(string), 1, stream) fputs(string, stream); */
#ifndef CPM
# define iseol(c) (c) == '\n'
# define isnteol(c) (c) != '\n'
#else
# define iseol(c) (c) == '\n' || (c) == '\r'
# define isnteol(c) (c) != '\n' && (c) != '\r'
#endif
#undef isspace
#define isspace(c) (c) == ' ' || (c) == '\t'
#define isntspace(c) (c) != ' ' && (c) != '\t'