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