Annotation of 43BSD/contrib/icon/lib/llist.c, revision 1.1.1.1

1.1       root        1: #include "../h/rt.h"
                      2: 
                      3: /*
                      4:  * [ ... ] - create an explicitly specified list.
                      5:  */
                      6: 
                      7: llist(nargs)
                      8: int nargs;
                      9:    {
                     10:    register int i;
                     11:    register struct b_list *hp;
                     12:    register struct b_lelem *bp;
                     13:    extern struct b_list *alclist();
                     14:    extern struct b_lelem *alclstb();
                     15:    int nelem;
                     16: 
                     17:    SetBound;
                     18: 
                     19:    /*
                     20:     * Round the number of elements in the list (as indicated by nargs)
                     21:     *  up to LISTBLKSIZE and ensure space for the list.
                     22:     */
                     23:    nelem = nargs;
                     24:    if (nelem < LISTBLKSIZE)
                     25:       nelem = LISTBLKSIZE;
                     26:    hneed(sizeof(struct b_list) + sizeof(struct b_lelem) +
                     27:          nelem * sizeof(struct descrip));
                     28: 
                     29:    /*
                     30:     * Allocate the list and a list block.
                     31:     */
                     32:    hp = alclist(nargs);
                     33:    bp = alclstb(nelem, 0, nargs);
                     34: 
                     35:    /*
                     36:     * Make the list block just allocated into the first and last blocks
                     37:     *  for the list.
                     38:     */
                     39:    hp->listhead.type = hp->listtail.type = D_LELEM;
                     40:    BLKLOC(hp->listhead) = BLKLOC(hp->listtail) = (union block *) bp;
                     41:    /*
                     42:     * Dereference each argument in turn and assign it to a list element.
                     43:     */
                     44:    for (i = 1; i <= nargs; i++) {
                     45:       DeRef(ARG(i))
                     46:       bp->lslots[i-1] = ARG(i);
                     47:       }
                     48:    /*
                     49:     * Point arg0 at the new list and return it.
                     50:     */
                     51:    ARGTYPE(0) = D_LIST;
                     52:    ARGVAL(0) = (int) hp;
                     53:    ClearBound;
                     54:    }

unix.superglobalmegacorp.com

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