Annotation of researchv10no/cmd/struct/3.branch.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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