148123Sbostic /*-
248123Sbostic * %sccs.include.proprietary.c%
348123Sbostic */
448123Sbostic
510968Srrh #ifndef lint
6*62290Sbostic static char sccsid[] = "@(#)3.branch.c 8.1 (Berkeley) 06/06/93";
748123Sbostic #endif /* not lint */
810968Srrh
910968Srrh #include <stdio.h>
1010968Srrh #include "def.h"
1110968Srrh #include "3.def.h"
1210968Srrh
1310968Srrh
getbranch(head)1410968Srrh getbranch(head)
1510968Srrh VERT *head;
1610968Srrh {
1710968Srrh VERT v;
1810968Srrh for (v = 0; v < nodenum; ++v)
1910968Srrh LABEL(v) = FALSE;
2010968Srrh for (v = START; DEFINED(v); v = RSIB(v))
2110968Srrh chkbranch(v,head);
2210968Srrh addlab(START);
2310968Srrh }
2410968Srrh
2510968Srrh
2610968Srrh
chkbranch(v,head)2710968Srrh chkbranch(v,head)
2810968Srrh VERT v,*head;
2910968Srrh {
3010968Srrh VERT w;
3110968Srrh int i;
3210968Srrh switch(NTYPE(v))
3310968Srrh {
3410968Srrh case GOVX:
3510968Srrh for (i = 1, w = head[v]; DEFINED(w); w = head[w], ++i)
3610968Srrh {
3710968Srrh if (i > 1 && !levnxt && !levbrk) break;
3810968Srrh if (ARC(v,0) == BRK(w) && (levbrk || i == 1))
3910968Srrh {
4010968Srrh NTYPE(v) = BRKVX;
4110968Srrh LEVEL(v) = i;
4210968Srrh break;
4310968Srrh }
4410968Srrh else if (ARC(v,0) == NXT(w) && (levnxt || i == 1))
4510968Srrh {
4610968Srrh NTYPE(v) = NXTVX;
4710968Srrh LEVEL(v) = i;
4810968Srrh break;
4910968Srrh }
5010968Srrh }
5110968Srrh if (NTYPE(v) == GOVX)
5210968Srrh {
5310968Srrh if (ARC(v,0) == stopvert)
5410968Srrh NTYPE(v) = STOPVX;
5510968Srrh else if (ARC(v,0) == retvert)
5610968Srrh NTYPE(v) = RETVX;
5710968Srrh else LABEL(ARC(v,0)) = TRUE;
5810968Srrh }
5910968Srrh break;
6010968Srrh case COMPVX:
6110968Srrh case ASGOVX:
6210968Srrh for (i = 0; i < ARCNUM(v); ++i)
6310968Srrh LABEL(ARC(v,i)) = TRUE;
6410968Srrh break;
6510968Srrh case IOVX:
6610968Srrh if (DEFINED(ARC(v,ENDEQ)))
6710968Srrh LABEL(ARC(v,ENDEQ)) = TRUE;
6810968Srrh if (DEFINED(ARC(v,ERREQ)))
6910968Srrh LABEL(ARC(v,ERREQ)) = TRUE;
7010968Srrh if (DEFINED(FMTREF(v)))
7110968Srrh LABEL(FMTREF(v)) = TRUE;
7210968Srrh break;
7310968Srrh }
7410968Srrh for (i = 0; i < CHILDNUM(v); ++i)
7510968Srrh for (w = LCHILD(v,i); DEFINED(w); w = RSIB(w))
7610968Srrh chkbranch(w,head);
7710968Srrh }
7810968Srrh
7910968Srrh
addlab(v)8010968Srrh addlab(v) /* add labels */
8110968Srrh VERT v;
8210968Srrh {
8310968Srrh int recvar;
8410968Srrh if (NTYPE(v) != ITERVX && LABEL(v) )
8510968Srrh LABEL(v) = nxtlab();
8610968Srrh RECURSE(addlab,v,recvar);
8710968Srrh if (NTYPE(v) == ITERVX && LABEL(NXT(v)))
8810968Srrh LABEL(NXT(v)) = nxtlab();
8910968Srrh }
9010968Srrh
9110968Srrh
nxtlab()9210968Srrh nxtlab()
9310968Srrh {
9410968Srrh static count;
9510968Srrh return(labinit + (count++) * labinc);
9610968Srrh }
97