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