Bell 32V development
[unix-history] / usr / src / cmd / struct / def.h
CommitLineData
6fd945b9
TL
1#define ASSERT(P,R) {if (!(P)) {fprintf(stderr,"failed assertion in routine R: P\n"); abort();}}
2
3extern int routnum, routerr;
4extern long rtnbeg; /* number of chars up to beginnine of curernt routing */
5extern int **graph, nodenum;
6extern int stopflg; /* turns off generation of stop statements */
7
8#define TRUE 1
9#define FALSE 0
10#define LOGICAL int
11#define VERT int
12#define DEFINED(v) (v >= 0)
13#define UNDEFINED -1
14
15/* node types */
16#define STLNVX 0
17#define IFVX 1
18#define DOVX 2
19#define IOVX 3
20#define FMTVX 4
21#define COMPVX 5
22#define ASVX 6
23#define ASGOVX 7
24#define LOOPVX 8
25#define WHIVX 9
26#define UNTVX 10
27#define ITERVX 11
28#define THENVX 12
29#define STOPVX 13
30#define RETVX 14
31#define DUMVX 15
32#define GOVX 16
33#define BRKVX 17
34#define NXTVX 18
35#define SWCHVX 19
36#define ACASVX 20
37#define ICASVX 21
38
39#define TYPENUM 22
40
41
42extern int hascom[TYPENUM]; /* FALSE for types with no comments, 2 otherwise */
43extern int nonarcs[TYPENUM]; /* number of wds per node other than arcs */
44extern VERT *arc(), *lchild();
45extern int *vxpart(), *negpart(), *predic(), *expres(), *level(), *stlfmt();
46/* node parts */
47#define FIXED 4 /* number of wds needed in every node */
48#define NTYPE(v) graph[v][0]
49#define BEGCOM(v) graph[v][1]
50#define RSIB(v) graph[v][2]
51#define REACH(v) graph[v][3]
52#define LCHILD(v,i) *lchild(v,i)
53#define CHILDNUM(v) childper[NTYPE(v)]
54#define ARC(v,i) *arc(v,i)
55#define ARCNUM(v) *((arcsper[NTYPE(v)] >= 0) ? &arcsper[NTYPE(v)]: &graph[v][-arcsper[NTYPE(v)]])
56
57/* STLNVX, FMTVX parts */
58#define BEGCODE(v) *stlfmt(v,0) /* 1st char of line on disk or address of string */
59#define ONDISK(v) *stlfmt(v,1) /* FALSE if in core,# of lines on disk otherwise */
60#define CODELINES(v) *vxpart(v,STLNVX,2) /* # of statements stored in node */
61
62/* IOVX parts */
63#define FMTREF(v) *vxpart(v,IOVX,0) /* FMTVX associated with i/o statememt */
64#define PRERW(v) *vxpart(v,IOVX,1) /* string occurring in i/o statement before parts with labels */
65#define POSTRW(v) *vxpart(v,IOVX,2) /* string occurring in i/o statement after parts wih labels */
66#define ENDEQ 1 /* arc number associated with endeq */
67#define ERREQ 2 /* arc number associated wth erreq */
68
69/* ITERVX parts */
70#define NXT(v) *vxpart(v,ITERVX,0) /* THENVX containing condition for iteration for WHILE or UNTIL */
71#define FATH(v) *vxpart(v,ITERVX,1) /* father of v */
72#define LPRED(v) *vxpart(v,ITERVX,2) /* loop predicate for WHILE, UNTIL */
73
74/*DOVX parts */
75#define INC(v) *vxpart(v,DOVX,0) /* string for iteration condition of DO */
76
77/* IFVX,THENVX parts */
78#define PRED(v) *predic(v) /* string containing predicate */
79#define NEG(v) *negpart(v) /* TRUE if predicate negated */
80#define THEN 0 /* arc number of true branch */
81#define ELSE 1 /* arc number of false branch */
82
83/* miscellaneous parts */
84#define EXP(v) *expres(v) /* expression - ASVX, COMPVX, ASGOVX, SWCHVX, ICASVX */
85#define LABREF(v) *vxpart(v,ASVX,1) /* node referred to by label in ASSIGN statement */
86
87
88/* BRKVX, NXTVX parts */
89#define LEVEL(v) *level(v)
90
91/* also COMPVX, ASGOVX, SWCHVX, and DUMVX contain wd for number of arcs */
92/* location of this wd specified by negative entry in arcsper */
93extern int arcsper[TYPENUM];
94
95/* also nodes contain wds for children as specified by childper */
96extern childper[TYPENUM];
97
98
99/* switches */
100extern int intcase, arbcase, whiloop, invelse, exitsize, maxnode,
101 maxhash, progress, labinit, labinc, inputform, debug,levbrk,levnxt,mkunt;
102
103/* arrays */
104extern int *after;
105extern char *typename[];
106
107struct list {
108 VERT elt;
109 struct list *nxtlist;
110 };
111struct list *append(), *consl();
112extern VERT retvert, stopvert; /* specifies unique return and stop vertices */
113extern VERT START;
114extern int progtype; /* type of program - main or sub or blockdata */
115#define sub 1
116#define blockdata 2
117
118extern FILE *infd, *debfd, *outfd;