xref: /original-bsd/usr.bin/struct/struct/def.h (revision aba77441)
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