Annotation of researchv10dc/630/src/pcheck.c, revision 1.1.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.