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