Annotation of researchv9/X11/src/X.V11R1/server/os/v9/util.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * These are routines fould in BDS and not found in System V.  They are
        !             3:  * included so that some clients can compile.
        !             4:  */
        !             5: 
        !             6: /* Written by Jack Palevich.  
        !             7:  *            HP Labs
        !             8:  *            April 1987
        !             9:  */
        !            10: 
        !            11: bcopy (b1, b2, length)
        !            12: register unsigned char *b1, *b2;
        !            13: register length;
        !            14: {
        !            15:     if (b1 < b2) {
        !            16:        b2 += length;
        !            17:        b1 += length;
        !            18:        while (length--) {
        !            19:            *--b2 = *--b1;
        !            20:        }
        !            21:     }
        !            22:     else {
        !            23:        while (length--) {
        !            24:            *b2++ = *b1++;
        !            25:        }
        !            26:     }
        !            27: }
        !            28: 
        !            29: bcmp (b1, b2, length)
        !            30: register unsigned char *b1, *b2;
        !            31: register length;
        !            32: {
        !            33:     while (length--) {
        !            34:        if (*b1++ != *b2++) return 1;
        !            35:     }
        !            36:     return 0;
        !            37: }
        !            38: 
        !            39: bzero (b, length)
        !            40: register unsigned char *b;
        !            41: register length;
        !            42: {
        !            43:     while (length--) {
        !            44:        *b++ = '\0';
        !            45:     }
        !            46: }
        !            47: 
        !            48: 
        !            49: /* Find the first set bit
        !            50:  * i.e. least signifigant 1 bit:
        !            51:  * 0 => 0
        !            52:  * 1 => 1
        !            53:  * 2 => 2
        !            54:  * 3 => 1
        !            55:  * 4 => 3
        !            56:  */
        !            57: 
        !            58: int
        !            59: ffs(mask)
        !            60: unsigned int   mask;
        !            61: {
        !            62:     register i;
        !            63: 
        !            64:     if ( ! mask ) return 0;
        !            65:     i = 1;
        !            66:     while (! (mask & 1)) {
        !            67:        i++;
        !            68:        mask = mask >> 1;
        !            69:     }
        !            70:     return i;
        !            71: }
        !            72: 
        !            73: char * 
        !            74: index (s, c)
        !            75: char *s, c;
        !            76: {
        !            77:     return ((char *) strchr (s, c));
        !            78: }
        !            79: 
        !            80: char * 
        !            81: rindex (s, c)
        !            82: char *s, c;
        !            83: {
        !            84:     return ((char *) strrchr (s, c));
        !            85: }
        !            86: 
        !            87: /*
        !            88:  * insque, remque - insert/remove element from a queue
        !            89:  *
        !            90:  * DESCRIPTION
        !            91:  *      Insque and remque manipulate queues built from doubly linked
        !            92:  *      lists.  Each element in the queue must in the form of
        !            93:  *      ``struct qelem''.  Insque inserts elem in a queue immedi-
        !            94:  *      ately after pred; remque removes an entry elem from a queue.
        !            95:  *
        !            96:  * SEE ALSO
        !            97:  *      ``VAX Architecture Handbook'', pp. 228-235.
        !            98:  */
        !            99: 
        !           100: struct qelem {
        !           101:     struct    qelem *q_forw;
        !           102:     struct    qelem *q_back;
        !           103:     char *q_data;
        !           104:     };
        !           105: 
        !           106: insque(elem, pred)
        !           107: register struct qelem *elem, *pred;
        !           108: {
        !           109:     register struct qelem *q;
        !           110:     /* Insert locking code here */
        !           111:     if ( elem->q_forw = q = (pred ? pred->q_forw : pred) )
        !           112:        q->q_back = elem;
        !           113:     if ( elem->q_back = pred )
        !           114:        pred->q_forw = elem;
        !           115:     /* Insert unlocking code here */
        !           116: }
        !           117: 
        !           118: remque(elem)
        !           119: register struct qelem *elem;
        !           120: {
        !           121:     register struct qelem *q;
        !           122:     if ( ! elem ) return;
        !           123:     /* Insert locking code here */
        !           124: 
        !           125:     if ( q = elem->q_back ) q->q_forw = elem->q_forw;
        !           126:     if ( q = elem->q_forw ) q->q_back = elem->q_back;
        !           127: 
        !           128:     /* insert unlocking code here */
        !           129: }
        !           130: 
        !           131: random()
        !           132: {
        !           133:        return rand();
        !           134: }
        !           135: 
        !           136: srandom(seed)
        !           137: {
        !           138:        srand(seed);
        !           139: }

unix.superglobalmegacorp.com

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