|
|
researchv10 Norman
/* tdef.hd -- Definitions for the C pre-processor.
*
*
*
*
* The first defines here (copied from the first page of n1.c)
* control the generation of various permutations of the nroff/
* troff programs. This single set of source files generates
* both nroff and troff, on the PDP-11, VAX, UNIVAC UNIX, TSO
* (as in IBM), and soon () the 3B-20 Processors without
* any special compilation procedures, except for the need to define
* the symbol 'NROFF' when compiling nroff. By default, compilation
* will produce troff.
*
* Some other compilation options are available for building
* a customized version of nroff or troff. A list of definable
* symbols and their effect is given here:
*
*
* SMALL Produce a version of nroff or troff that uses a
* minimum amount of instruction space. This symbol
* automatically defines NDIAGS and NOCOMPACT (see below).
* It also causes the following features to be missing:
* requests ! and pi, troff paper accounting.
*
* INCORE Causes nroff/troff to keep both the suffix table (for
* hyphenation) and the /tmp file in main memory.
* This version of nroff/troff has a minimum of inter-
* action with the operating system, but a maximum of
* main memory size. Not recommended on minis, and probably
* won't work at all on the 11. It also uses standard
* I/O, and hence is portable to non-UNIX C environments.
* Automatically sets NOCOMPACT.
*
* NDIAGS Causes the pm request to not be included.
*
* NOCOMPACT Produces an nroff/troff without compacted macros. The
* -c command line option is synonymous with -m, and
* the -k option is missing.
*
* tso Use TSO-style standard I/O
*
*
* All these symbols will cause a suitably modified 'what' command
* response when applied to the object nroff or troff.
*
* Finally, the symbols expected to be set by the C compiler are:
*
* unix If this is the UNIX operating system. If this symbol
* is not defined, it causes the automatic definition of
* INCORE, SMALL, and tso. The latter is used to control
* generation of standard I/O calls.
*
* ebcdic Produces code to run on a machine with ebcdic as its native
* character set. nroff/troff still runs in ASCII internally
* and expects ASCII input, but does produce ebcdic on the
* standard output channel.
*
*/
#ifndef unix
#define INCORE
#define SMALL
#define tso
#endif
#ifdef SMALL
#define NDIAGS
#define NOCOMPACT
#endif
#ifdef INCORE
#define NOCOMPACT
#endif
/* the following define is the version number of nroff/troff */
#define NTVER "@(#)roff.src 1.123"
#ifdef NROFF /*NROFF*/
#define EM t.Em
#define HOR t.Adj
#define VERT t.Vert
#define INCH 240 /*increments per inch*/
#define SPS INCH/10 /*space size*/
#define SS INCH/10 /* " */
#define TRAILER 0
#define UNPAD 0227
#define PO 0 /*page offset*/
#define ASCII 1
#define PTID 1
#define LG 0
#define DTAB 0 /*set at 8 Ems at init time*/
#define ICS 2*SPS
#endif
#ifndef NROFF /*TROFF*/
#define INCH 432 /*troff resolution*/
#define SPS 20 /*space size at 10pt; 1/3 Em*/
#define SS 12 /*space size in 36ths of an em*/
#define TRAILER 4968 /*144*11.5*3 = 11.5 inches*/
#define UNPAD 027
#define PO 416 /*page offset 26/27ths inch*/
#define HOR 1
#define VERT 3
#define EM (6*(pts&077))
#define ASCII 0
#define PTID 0
#define LG 1
#define DTAB (INCH/2)
#define ICS 3*SPS
#endif
#ifdef INCORE
#define NMACS 100 /* max number of nested macro calls */
#define MARGL 512 /* max total length of macro args */
#define TSTBUF 1000 /* terminal strings buffer */
#endif
#ifdef unix
#include <signal.h>
#endif
#ifdef tso
#include "stdio.h"
#endif
#define BSIZE 512 /* size of any IO buffers */
#define ARGLEN 50 /* exec request (!) argument length (approx) */
#define NARSP 0177 /*narrow space*/
#define HNSP 0226 /*half narrow space*/
#define PS 10 /*default point size*/
#define FT 0 /*default font position*/
#define LL 65*INCH/10 /*line length; 39picas=6.5in*/
#define VS INCH/6 /*vert space; 12points*/
#define NN 300 /*number registers*/
#define NNAMES 14 /*predefined reg names*/
#define NIF 15 /*if-else nesting*/
#define NS 64 /*name buffer*/
#define NSN 4 /* number of macro packages per command line */
/* NOTE: must change with definition of nextf in ni.c */
#define NTM 256 /*tm buffer*/
#define NEV 3 /*environments*/
#define EVLSZ 10 /*size of ev stack*/
#define NM 350 /*requests + macros*/
#define DELTA (256*sizeof(int)) /*delta core bytes*/
#define NHYP 10 /*max hyphens per word*/
#define NHEX 128 /*byte size of exception word list*/
#define NTAB 35 /*tab stops*/
#define NSO 5 /*"so" depth*/
#define WDSIZE 500 /*word buffer size*/
#define LNSIZE 680 /*line buffer size*/
#define NDI 5 /*number of diversions*/
#define DBL 0100000 /*double size indicator*/
#define MOT 0100000 /*motion character indicator*/
#define MOTV 0160000 /*clear for motion part*/
#define VMOT 0040000 /*vert motion bit*/
#define NMOT 0020000 /* negative motion indicator*/
#define MMASK 0100000 /*macro mask indicator*/
#define CMASK 0100377
#define ZBIT 0400 /*zero width char*/
#define BMASK 0377
#define BYTE 8
#define IMP 004 /*impossible char*/
#define FILLER 037
#define PRESC 026
#define HX 0376 /*High-order part of xlss*/
#define LX 0375 /*low-order part of xlss*/
#define COLON 013 /* lem's character */
#define CONT 025
#define XPAR 030
#define ESC 032
#define FLSS 031
#define JREG 0374
#define NTRAP 20 /*number of traps*/
#define NPN 20 /*numbers in "-o"*/
#define T_PAD 0101 /*cat padding*/
#define T_INIT 0100
#define T_IESC 16 /*initial offset*/
#define T_STOP 0111
#define NPP 10 /*pads per field*/
#define FBUFSZ 256 /*field buf size words*/
#define OBUFSZ 512 /*bytes*/
#define IBUFSZ 512 /*bytes*/
#define NC 256 /*cbuf size words*/
#define NOV 10 /*number of overstrike chars*/
#define ZONE 5 /*5hrs for EST*/
#define LEFT 035
#define RIGHT 036
#define LEADER 001
#define TAB 011
#define TMASK 037777
#define RTAB 0100000
#define CTAB 0040000
#define OHC 024
#define PAIR(A,B) (A|(B<<BYTE))
#define BLK 128 /*alloc block words*/
typedef unsigned filep;
#define NBLIST 512 /* /tmp file allocation list */
/* Compiler Dependent Defines */
#ifdef tso
#define filedes FILE *
#define cptmpfaddr(new,old) new.o = old.o; new.b = old.b
#endif
#ifdef unix
typedef int filedes;
#define cptmpfaddr(new,old) new = old
#endif
/* The following block of defines are used for the name table hashing
* algorithms (see fname and dname). These definitions are used by the
* bldtable program for building the initial names table (which contains
* request and number register names
*/
#define TAGSMASK (MMASK) /* tags on name */
#define NAMEMASK (~TAGSMASK) /* name part */
/* MMASK 0100000 macro (not request) */
#define HBMASK 0177400 /* high order byte mask */
#define HASH(NMPR,SIZE) (((((unsigned)(NMPR&HBMASK))>>3)- \
(NMPR&BMASK))%SIZE)
/* NOTE: this may return a negative, which must
be made positive */
/* The following defines used to be regular procedures, but are
* defined here to produce inline code.
*/
#define incoff(fp) { if (!(fp.o = (fp.o + 1) & (BLK - 1)))\
if ((fp.b = blist[fp.b]) == (filep)-1) errbsa(); }
#define atoi(i) ((int) atoi0(i))
#define boff(i) ((i-1)*BLK + NEV*sizeof(struct envblock))
#define horiz(i) { register int jj; \
vflag = 0; \
if (jj=i) pchar(makem(jj)); }
#define maplow(i) (((i&CMASK) < 'a') ? ((i&CMASK)+'a'-'A') : (i&CMASK))
#ifndef ebcdic
#define aprstr(s) prstr(s)
#define aprstrfl(s) prstrfl(s)
#endif
/* The following defines are used for the getch0 character pointer
* stack. The set.. defines are used to enter a new pointer into
* the stack. The defines following are pointer names and their
* traditional entry in the stack. 'stack' meaning that is the
* way characters are removed from the structure - in practice,
* pointers are entered into fixed positions in the structure, and
* in any order of insertion.
*/
#define setap(i) { cstk[AP] = i; if (AP > cstkl) cstkl = AP; }
#define setcp(i) { cstk[CP] = i; if (CP > cstkl) cstkl = CP; }
#define setrp(i) { cstk[RP] = i; if (RP > cstkl) cstkl = RP; }
#define setch0(i) { tch[0] = i; cstk[cstkl = CH0] = tch; }
#define CH0 4 /* single character top priority buffer */
#define RP 3 /* repeat characters buffer pointer */
#define CP 2 /* arbitrary string pointer */
#define AP 1 /* pointer to macro call argument */
#define RPTLEN 135 /* max length of repeat string */
#define NB 5 /* number of macro cache buffers */
/* The names in the next set of defines are the names of all the
* items in the environment block. The environment block is a
* structure, defined in ni.c. The names below used to be names
* for the variables themselves, but now are mapped into
* structure accesses.
*/
#ifndef INCORE
#define ics eblock.Eics
#define ic eblock.Eic
#define icf eblock.Eicf
#define chbits eblock.Echbits
#define nmbits eblock.Enmbits
#define apts eblock.Eapts
#define apts1 eblock.Eapts1
#define pts eblock.Epts
#define pts1 eblock.Epts1
#define font eblock.Efont
#define font1 eblock.Efont1
#define sps eblock.Esps
#ifndef NROFF
#define spacesz eblock.Espacesz
#define spbits eblock.Espbits
#endif
#define lss eblock.Elss
#define lss1 eblock.Elss1
#define ls eblock.Els
#define ls1 eblock.Els1
#define ll eblock.Ell
#define ll1 eblock.Ell1
#define lt eblock.Elt
#define lt1 eblock.Elt1
#define ad eblock.Ead
#define nms eblock.Enms
#define ndf eblock.Endf
#define fi eblock.Efi
#define cc eblock.Ecc
#define c2 eblock.Ec2
#define ohc eblock.Eohc
#define hyf eblock.Ehyf
#define hyoff eblock.Ehyoff
#define un1 eblock.Eun1
#define tabc eblock.Etabc
#define dotc eblock.Edotc
#define adsp eblock.Eadsp
#define adrem eblock.Eadrem
#define lastl eblock.Elastl
#define nel eblock.Enel
#define admod eblock.Eadmod
#define wordp eblock.Ewordp
#define spflg eblock.Espflg
#define linep eblock.Elinep
#define wdend eblock.Ewdend
#define wdstart eblock.Ewdstart
#define wne eblock.Ewne
#define ne eblock.Ene
#define nc eblock.Enc
#define nb eblock.Enb
#define lnmod eblock.Elnmod
#define nwd eblock.Enwd
#define nn eblock.Enn
#define ni eblock.Eni
#define ul eblock.Eul
#define cu eblock.Ecu
#define ce eblock.Ece
#define in eblock.Ein
#define in1 eblock.Ein1
#define un eblock.Eun
#define wch eblock.Ewch
#define pendt eblock.Ependt
#define pendw eblock.Ependw
#define pendnf eblock.Ependnf
#define spread eblock.Espread
#define it eblock.Eit
#define itmac eblock.Eitmac
#define lnsize eblock.Elnsize
#define hyptr eblock.Ehyptr
#define tabtab eblock.Etabtab
#define line eblock.Eline
#define word eblock.Eword
#else
#define ics eblock[ev].Eics
#define ic eblock[ev].Eic
#define icf eblock[ev].Eicf
#define chbits eblock[ev].Echbits
#define nmbits eblock[ev].Enmbits
#define apts eblock[ev].Eapts
#define apts1 eblock[ev].Eapts1
#define pts eblock[ev].Epts
#define pts1 eblock[ev].Epts1
#define font eblock[ev].Efont
#define font1 eblock[ev].Efont1
#define sps eblock[ev].Esps
#ifndef NROFF
#define spacesz eblock[ev].Espacesz
#define spbits eblock[ev].Espbits
#endif
#define lss eblock[ev].Elss
#define lss1 eblock[ev].Elss1
#define ls eblock[ev].Els
#define ls1 eblock[ev].Els1
#define ll eblock[ev].Ell
#define ll1 eblock[ev].Ell1
#define lt eblock[ev].Elt
#define lt1 eblock[ev].Elt1
#define ad eblock[ev].Ead
#define nms eblock[ev].Enms
#define ndf eblock[ev].Endf
#define fi eblock[ev].Efi
#define cc eblock[ev].Ecc
#define c2 eblock[ev].Ec2
#define ohc eblock[ev].Eohc
#define hyf eblock[ev].Ehyf
#define hyoff eblock[ev].Ehyoff
#define un1 eblock[ev].Eun1
#define tabc eblock[ev].Etabc
#define dotc eblock[ev].Edotc
#define adsp eblock[ev].Eadsp
#define adrem eblock[ev].Eadrem
#define lastl eblock[ev].Elastl
#define nel eblock[ev].Enel
#define admod eblock[ev].Eadmod
#define wordp eblock[ev].Ewordp
#define spflg eblock[ev].Espflg
#define linep eblock[ev].Elinep
#define wdend eblock[ev].Ewdend
#define wdstart eblock[ev].Ewdstart
#define wne eblock[ev].Ewne
#define ne eblock[ev].Ene
#define nc eblock[ev].Enc
#define nb eblock[ev].Enb
#define lnmod eblock[ev].Elnmod
#define nwd eblock[ev].Enwd
#define nn eblock[ev].Enn
#define ni eblock[ev].Eni
#define ul eblock[ev].Eul
#define cu eblock[ev].Ecu
#define ce eblock[ev].Ece
#define in eblock[ev].Ein
#define in1 eblock[ev].Ein1
#define un eblock[ev].Eun
#define wch eblock[ev].Ewch
#define pendt eblock[ev].Ependt
#define pendw eblock[ev].Ependw
#define pendnf eblock[ev].Ependnf
#define spread eblock[ev].Espread
#define it eblock[ev].Eit
#define itmac eblock[ev].Eitmac
#define lnsize eblock[ev].Elnsize
#define hyptr eblock[ev].Ehyptr
#define tabtab eblock[ev].Etabtab
#define line eblock[ev].Eline
#define word eblock[ev].Eword
#endif
/* defines for nroff/troff data area (struct datablock dblock) */
#define r dblock.Dr
#define nametab dblock.Dnametab
#define nlist dblock.Dnlist
#define mlist dblock.Dmlist
#define vlist dblock.Dvlist
#define inc dblock.Dinc
#define fmt dblock.Dfmt
#define trtab dblock.Dtrtab
#define blist dblock.Dblist
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.