|
|
1.1 root 1: #define ASSERT(P,R) {if (!(P)) {fprintf(stderr,"failed assertion in routine R: P\n"); abort();}}
2:
3: extern int routnum, routerr;
4: extern long rtnbeg; /* number of chars up to beginnine of curernt routing */
5: extern int **graph, nodenum;
6: extern 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:
42: extern int hascom[TYPENUM]; /* FALSE for types with no comments, 2 otherwise */
43: extern int nonarcs[TYPENUM]; /* number of wds per node other than arcs */
44: extern VERT *arc(), *lchild();
45: extern 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 */
93: extern int arcsper[TYPENUM];
94:
95: /* also nodes contain wds for children as specified by childper */
96: extern childper[TYPENUM];
97:
98:
99: /* switches */
100: extern int intcase, arbcase, whiloop, invelse, exitsize, maxnode,
101: maxhash, progress, labinit, labinc, inputform, debug,levbrk,levnxt,mkunt;
102:
103: /* arrays */
104: extern int *after;
105: extern char *typename[];
106:
107: struct list {
108: VERT elt;
109: struct list *nxtlist;
110: };
111: struct list *append(), *consl();
112: extern VERT retvert, stopvert; /* specifies unique return and stop vertices */
113: extern VERT START;
114: extern int progtype; /* type of program - main or sub or blockdata */
115: #define sub 1
116: #define blockdata 2
117:
118: extern FILE *infd, *debfd, *outfd;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.