Annotation of researchv10no/cmd/visi/queues.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *      queues.c 1.4
        !             3:  *
        !             4:  *     Queue Handling Functions for Spreadsheet Program `vis'
        !             5:  *
        !             6:  *      A. F. Gettier
        !             7:  *      Bell Laboratories
        !             8:  *      Update made 11/1/82 11:13:33
        !             9:  *      Retrieved 11/15/82 13:22:42
        !            10:  */
        !            11: #include       "vis.h"
        !            12: #include       <stdio.h>
        !            13: 
        !            14: /*LINTLIBRARY*/
        !            15: /*
        !            16:  *     Add to the end of a queue
        !            17:  */
        !            18: void qadd( hdr, val )
        !            19: struct qheader *hdr;
        !            20: struct node    *val;
        !            21: {
        !            22:        struct qentry   *t, *a, *b;
        !            23:        struct node     *x;
        !            24:        t = NODE( qentry );
        !            25:        t->next = 0;
        !            26:        t->nodeptr = val;
        !            27:        a = hdr->first;
        !            28:        b = 0;
        !            29:        if ( a == 0 ) {
        !            30:                hdr->first = hdr->last = t;
        !            31:                return;
        !            32:        }
        !            33:        loop {
        !            34:                x = a->nodeptr;
        !            35:                /*
        !            36:                 *      don't enter if present
        !            37:                 */
        !            38:                if ( (val->row == x->row && val->col < x->col )
        !            39:                    || val->row < x->row ) {
        !            40:                        b = a;
        !            41:                        a = a->next;
        !            42:                        if ( a == 0 ) {
        !            43:                                b->next = hdr->last = t;
        !            44:                                return;
        !            45:                        }
        !            46:                }
        !            47:                else {
        !            48:                        if (val->row == x->row && val->col == x->col )
        !            49:                                return;
        !            50:                        if ( b == 0 ) {
        !            51:                                t->next = hdr->first;
        !            52:                                hdr->first = t;
        !            53:                        }
        !            54:                        else {
        !            55:                                t->next = b->next;
        !            56:                                b->next = t;
        !            57:                        }
        !            58:                        return;
        !            59:                }
        !            60:        }
        !            61: }
        !            62: 
        !            63: 
        !            64: 
        !            65: /*
        !            66:  *     Read from the front of a queue
        !            67:  */
        !            68: struct node *qread( hdr )
        !            69: struct qheader *hdr;
        !            70: {
        !            71:        struct node     *t;
        !            72:        struct qentry   *s;
        !            73:        if ( hdr->first == 0 )  return( 0 );
        !            74:        t = (hdr->first)->nodeptr;
        !            75:        s = (hdr->first)->next;
        !            76:        free( (char *)hdr->first );
        !            77:        hdr->first = s;
        !            78:        if ( s == 0 ) hdr->last = 0;
        !            79:        return( t );
        !            80: }
        !            81: 
        !            82: 
        !            83: 
        !            84: /*
        !            85:  *     Empty a queue
        !            86:  */
        !            87: void qempty( hdr )
        !            88: struct qheader *hdr;
        !            89: {
        !            90:        struct qentry   *t;
        !            91:        while ( hdr->first != 0 ) {
        !            92:                t = hdr->first;
        !            93:                free( (char *)hdr->first );
        !            94:                hdr->first = t;
        !            95:        }
        !            96:        hdr->last = 0;
        !            97: }
        !            98: 
        !            99: 
        !           100: 
        !           101: /*
        !           102:  *     Initialize a queue
        !           103:  */
        !           104: void qinit( hdr )
        !           105: struct qheader *hdr;
        !           106: {
        !           107:        hdr->first = 0;
        !           108:        hdr->last = 0;
        !           109: }
        !           110: 
        !           111: 
        !           112: 
        !           113: /*
        !           114:  *     Copy a Queue
        !           115:  */
        !           116: struct qheader *qcopy( hdr )
        !           117: struct qheader *hdr;
        !           118: {
        !           119:        struct qheader  *t;
        !           120:        struct qentry   *s, *s1;
        !           121:        t = NODE( qheader );
        !           122:        t->first = 0;
        !           123:        t->last = 0;
        !           124:        s1 = hdr->first;
        !           125:        while( s1 != 0 ) {
        !           126:                s = NODE( qentry );
        !           127:                if ( t->first == 0 )
        !           128:                        t->first = s;
        !           129:                else 
        !           130:                        (t->last)->next = s;
        !           131:                t->last = s;
        !           132:                s->next = 0;
        !           133:                s->nodeptr = s1->nodeptr;
        !           134:                s1 = s1->next;
        !           135:        }
        !           136:        return( t );
        !           137: }

unix.superglobalmegacorp.com

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