Annotation of 43BSD/contrib/icon/functions/set.c, revision 1.1

1.1     ! root        1: #include "../h/rt.h"
        !             2: #ifdef SETS
        !             3: 
        !             4: /*
        !             5:  * set(list) - create a set with members in list.
        !             6:  *  The members are linked into hash chains which are
        !             7:  *  arranged in increasing order by hash number.
        !             8:  */
        !             9: Xset(nargs,arg1,arg0)
        !            10: int nargs;
        !            11: struct descrip arg1, arg0;
        !            12:    {
        !            13:    register int hn;
        !            14:    register struct descrip *pd;
        !            15:    register struct b_set *ps;
        !            16:    union block *pb;
        !            17:    struct b_selem *ne;
        !            18:    struct descrip *pe;
        !            19:    int res, i, j;
        !            20:    extern struct descrip *memb();
        !            21:    extern struct b_set *alcset();
        !            22:    extern struct b_selem *alcselem();
        !            23: 
        !            24:    DeRef(arg1)
        !            25:    if (QUAL(arg1) || TYPE(arg1) != T_LIST)
        !            26:       runerr(108,&arg1);
        !            27: 
        !            28:    hneed(sizeof(struct b_set) + (BLKLOC(arg1)->list.cursize *
        !            29:       sizeof(struct b_selem)));
        !            30: 
        !            31:    pb = BLKLOC(arg1);
        !            32:    arg0.type = D_SET;
        !            33:    ps = alcset();
        !            34:    BLKLOC(arg0) = (union block *) ps;
        !            35:    /*
        !            36:     * Chain through each list block and for
        !            37:     *  each element contained in the block
        !            38:     *  insert the element into the set if not there.
        !            39:     */
        !            40:    for (arg1 = pb->list.listhead; arg1.type == D_LELEM;
        !            41:       arg1 = BLKLOC(arg1)->lelem.listnext) {
        !            42:          pb = BLKLOC(arg1);
        !            43:          for (i = 0; i < pb->lelem.nused; i++) {
        !            44:             j = pb->lelem.first + i;
        !            45:             if (j >= pb->lelem.nelem)
        !            46:                j -= pb->lelem.nelem;
        !            47:             pd = &pb->lelem.lslots[j];
        !            48:             pe = memb(ps, pd, hn = hash(pd), &res);
        !            49:             if (res == 0) {
        !            50:                ne = alcselem(pd,hn);
        !            51:                 addmem(ps,ne,pe);
        !            52:                 }
        !            53:             }
        !            54:       }
        !            55:    }
        !            56: 
        !            57: Procblock(set,1)
        !            58: #else SETS
        !            59: char junk;                     /* prevent null object file  */
        !            60: #endif SETS

unix.superglobalmegacorp.com

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