home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include "def.h"
- #include "3.def.h"
-
-
- getbranch(head)
- VERT *head;
- {
- VERT v;
- for (v = 0; v < nodenum; ++v)
- LABEL(v) = FALSE;
- for (v = START; DEFINED(v); v = RSIB(v))
- chkbranch(v,head);
- addlab(START);
- }
-
-
-
- chkbranch(v,head)
- VERT v,*head;
- {
- VERT w;
- int i;
- switch(NTYPE(v))
- {
- case GOVX:
- for (i = 1, w = head[v]; DEFINED(w); w = head[w], ++i)
- {
- if (i > 1 && !levnxt && !levbrk) break;
- if (ARC(v,0) == BRK(w) && (levbrk || i == 1))
- {
- NTYPE(v) = BRKVX;
- LEVEL(v) = i;
- break;
- }
- else if (ARC(v,0) == NXT(w) && (levnxt || i == 1))
- {
- NTYPE(v) = NXTVX;
- LEVEL(v) = i;
- break;
- }
- }
- if (NTYPE(v) == GOVX)
- {
- if (ARC(v,0) == stopvert)
- NTYPE(v) = STOPVX;
- else if (ARC(v,0) == retvert)
- NTYPE(v) = RETVX;
- else LABEL(ARC(v,0)) = TRUE;
- }
- break;
- case COMPVX:
- case ASGOVX:
- for (i = 0; i < ARCNUM(v); ++i)
- LABEL(ARC(v,i)) = TRUE;
- break;
- case IOVX:
- if (DEFINED(ARC(v,ENDEQ)))
- LABEL(ARC(v,ENDEQ)) = TRUE;
- if (DEFINED(ARC(v,ERREQ)))
- LABEL(ARC(v,ERREQ)) = TRUE;
- if (DEFINED(FMTREF(v)))
- LABEL(FMTREF(v)) = TRUE;
- break;
- }
- for (i = 0; i < CHILDNUM(v); ++i)
- for (w = LCHILD(v,i); DEFINED(w); w = RSIB(w))
- chkbranch(w,head);
- }
-
-
- addlab(v) /* add labels */
- VERT v;
- {
- int recvar;
- if (NTYPE(v) != ITERVX && LABEL(v) )
- LABEL(v) = nxtlab();
- RECURSE(addlab,v,recvar);
- if (NTYPE(v) == ITERVX && LABEL(NXT(v)))
- LABEL(NXT(v)) = nxtlab();
- }
-
-
- nxtlab()
- {
- static count;
- return(labinit + (count++) * labinc);
- }
-