Annotation of 43BSDTahoe/usr.bin/struct/3.branch.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)3.branch.c 4.1     (Berkeley)      2/11/83";
                      3: #endif not lint
                      4: 
                      5: #include <stdio.h>
                      6: #include "def.h"
                      7: #include "3.def.h"
                      8: 
                      9: 
                     10: getbranch(head)
                     11: VERT *head;
                     12:        {
                     13:        VERT v;
                     14:        for (v = 0; v < nodenum; ++v)
                     15:                LABEL(v) = FALSE;
                     16:        for (v = START; DEFINED(v); v = RSIB(v))
                     17:                chkbranch(v,head);
                     18:        addlab(START);
                     19:        }
                     20: 
                     21: 
                     22: 
                     23: chkbranch(v,head)
                     24: VERT v,*head;
                     25:        {
                     26:        VERT  w;
                     27:        int i;
                     28:        switch(NTYPE(v))
                     29:                {
                     30:                case GOVX:
                     31:                                for (i = 1, w = head[v]; DEFINED(w); w = head[w], ++i)
                     32:                                        {
                     33:                                        if (i > 1 && !levnxt && !levbrk) break;
                     34:                                        if (ARC(v,0) == BRK(w) && (levbrk || i == 1))
                     35:                                                {
                     36:                                                NTYPE(v) = BRKVX;
                     37:                                                LEVEL(v) = i;
                     38:                                                break;
                     39:                                                }
                     40:                                        else if (ARC(v,0) == NXT(w) && (levnxt || i == 1))
                     41:                                                {
                     42:                                                NTYPE(v) = NXTVX;
                     43:                                                LEVEL(v) = i;
                     44:                                                break;
                     45:                                                }
                     46:                                        }
                     47:                        if (NTYPE(v) == GOVX)
                     48:                                {
                     49:                                if (ARC(v,0) == stopvert)
                     50:                                        NTYPE(v) = STOPVX;
                     51:                                else if (ARC(v,0) == retvert)
                     52:                                        NTYPE(v) = RETVX;
                     53:                                else LABEL(ARC(v,0)) = TRUE;
                     54:                                }
                     55:                        break;
                     56:                case COMPVX:
                     57:                case ASGOVX:
                     58:                        for (i = 0; i < ARCNUM(v); ++i)
                     59:                                LABEL(ARC(v,i)) = TRUE;
                     60:                        break;
                     61:                case IOVX:
                     62:                                if (DEFINED(ARC(v,ENDEQ)))
                     63:                                        LABEL(ARC(v,ENDEQ)) = TRUE;
                     64:                                if (DEFINED(ARC(v,ERREQ)))
                     65:                                        LABEL(ARC(v,ERREQ)) = TRUE;
                     66:                                if (DEFINED(FMTREF(v)))
                     67:                                        LABEL(FMTREF(v)) = TRUE;
                     68:                                break;
                     69:                }
                     70:        for (i = 0; i < CHILDNUM(v); ++i)
                     71:                for (w = LCHILD(v,i); DEFINED(w); w = RSIB(w))
                     72:                        chkbranch(w,head);
                     73:        }
                     74: 
                     75: 
                     76: addlab(v)              /* add labels */
                     77: VERT v;
                     78:        {
                     79:        int recvar;
                     80:        if (NTYPE(v) != ITERVX && LABEL(v) )
                     81:                LABEL(v) = nxtlab();
                     82:        RECURSE(addlab,v,recvar);
                     83:        if (NTYPE(v) == ITERVX && LABEL(NXT(v)))
                     84:                LABEL(NXT(v)) = nxtlab();
                     85:        }
                     86: 
                     87: 
                     88: nxtlab()
                     89:        {
                     90:        static count;
                     91:        return(labinit + (count++) * labinc);
                     92:        }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.