Commit | Line | Data |
---|---|---|
42d6e430 BJ |
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; |