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; 121