xref: /original-bsd/usr.bin/struct/struct/1.node.c (revision c3e32dec)
1 /*-
2  * %sccs.include.proprietary.c%
3  */
4 
5 #ifndef lint
6 static char sccsid[] = "@(#)1.node.c	8.1 (Berkeley) 06/06/93";
7 #endif /* not lint */
8 
9 #include <stdio.h>
10 #include "def.h"
11 #include "1.incl.h"
12 
13 makenode(type,addimp,addcom, labe,arcnum,arctype,arclab)
14 LOGICAL addimp,addcom;
15 int type, arctype[], arcnum;
16 long arclab[], labe;
17 	{
18 	int i;
19 	VERT num;
20 
21 	ASSERT(arcsper[type] < 0 || arcnum == arcsper[type], makenode);
22 	num = create(type,arcnum);
23 
24 	if (addimp)  fiximp(num,labe);
25 
26 	for (i = 0; i < arcnum; ++i)
27 		{
28 		if (arctype[i] == -2)
29 			addref(arclab[i],&ARC(num,i));
30 		else
31 			ARC(num,i) = arctype[i];
32 		}
33 
34 
35 	if (hascom[type] )
36 		{
37 		if (!addcom || endcom < begline)
38 			BEGCOM(num) = UNDEFINED;
39 		else
40 			BEGCOM(num) = begchar - rtnbeg;
41 		}
42 	return(num);
43 	}
44 
45 
46 
47 
48 
49 fiximp(num,labe)		/* fix implicit links, check nesting */
50 VERT num;
51 long labe;
52 	{
53 	fixvalue(implicit, num);		/* set implicit links to this node */
54 	clear(implicit);
55 	if(labe != implicit) fixvalue(labe, num);
56 	}
57