Annotation of researchv10dc/630/src/pcheck.c, revision 1.1

1.1     ! root        1: /*
        !             2: **     Packet check bytes calculation
        !             3: */
        !             4: 
        !             5: #ifdef vax
        !             6: /*
        !             7: **     Vax "crc" instruction look-up table for polynomial = 0120001
        !             8: */
        !             9: 
        !            10: unsigned long  crc16t[] = 
        !            11: {
        !            12:        0, 0146001, 0154001,  012000, 0170001,  036000,  024000, 0162001
        !            13:        , 0120001,  066000,  074000, 0132001,  050000, 0116001, 0104001,  042000
        !            14: };
        !            15: 
        !            16: 
        !            17: /*ARGSUSED*/
        !            18: int
        !            19: crc(s, n)
        !            20:        unsigned char   *s;
        !            21:        int     n;
        !            22: {
        !            23:        asm("   crc     _crc16t,$0,8(ap),*4(ap) ");
        !            24:        asm("   cmpw    r0,(r3)                 ");
        !            25:        asm("   beqlu   OK                      ");
        !            26:        asm("   movw    r0,(r3)                 ");
        !            27:        asm("   movl    $1,r0                   ");
        !            28:        asm("   ret                             ");
        !            29:        asm("OK:movw    r0,(r3)                 ");
        !            30:        return (0);
        !            31: }
        !            32: 
        !            33: 
        !            34: #else  vax
        !            35: 
        !            36: 
        !            37: /*
        !            38: **     crc-16:  x**16 + x**15 + x**2 + 1
        !            39: */
        !            40: 
        !            41: typedef unsigned char  uchar;
        !            42: typedef unsigned short ushort;
        !            43: 
        !            44: #define        lobyte(X)       (X&0xff)
        !            45: #define        hibyte(X)       ((X>>8)&0xff)
        !            46: 
        !            47: #ifdef ROMCRC
        !            48: extern ushort crc16t_32[2] [16];
        !            49: #else
        !            50: ushort crc16t_32[2][16]        = 
        !            51: {
        !            52:        0, 0140301, 0140601, 0500, 0141401, 01700, 01200, 0141101,
        !            53:            0143001, 03300, 003600, 0143501, 02400, 0142701, 0142201, 02100,
        !            54:            0, 0146001, 0154001, 012000, 0170001, 036000, 024000, 0162001,
        !            55:            0120001, 066000, 074000, 0132001, 050000, 0116001, 0104001, 042000
        !            56: };
        !            57: #endif
        !            58: 
        !            59: int
        !            60: crc(buffer, nbytes)
        !            61:        register uchar *buffer;
        !            62:        int     nbytes;
        !            63: {
        !            64:        register ushort tcrc = 0;
        !            65:        register int    temp;
        !            66:        register int    i;
        !            67: 
        !            68:        if ( (i = nbytes) > 0 )
        !            69:                do {
        !            70:                        temp = tcrc ^ *buffer++;
        !            71:                        tcrc = crc16t_32[0][temp & 017]
        !            72:                             ^ crc16t_32[1][(temp>>4) & 017]
        !            73:                             ^ (tcrc >> 8);
        !            74:                } while ( --i > 0 );
        !            75: 
        !            76:        if ( lobyte(tcrc) != *buffer )
        !            77:                i++;
        !            78:        *buffer++ = lobyte(tcrc);
        !            79: 
        !            80:        if ( hibyte(tcrc) != *buffer )
        !            81:                i++;
        !            82:        *buffer++ = hibyte(tcrc);
        !            83: 
        !            84:        return(i);
        !            85: }
        !            86: 
        !            87: 
        !            88: #endif vax

unix.superglobalmegacorp.com

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