|
|
1.1 root 1: /* CRC16.C */
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: /* 16-bit CRC routines */
6:
7: #include "smblib.h"
8:
9: /****************************************************************************/
10: /* Updates 16-bit "rcrc" with character 'ch' */
11: /****************************************************************************/
12: void ucrc16(uchar ch, ushort *rcrc) {
13: ushort i, cy;
14: uchar nch=ch;
15:
16: for (i=0; i<8; i++) {
17: cy=*rcrc & 0x8000;
18: *rcrc<<=1;
19: if (nch & 0x80) *rcrc |= 1;
20: nch<<=1;
21: if (cy) *rcrc ^= 0x1021; }
22: }
23:
24: /****************************************************************************/
25: /* Returns 16-crc of string (not counting terminating NULL) */
26: /****************************************************************************/
27: ushort SMBCALL crc16(char *str)
28: {
29: int i=0;
30: ushort crc=0;
31:
32: ucrc16(0,&crc);
33: while(str[i])
34: ucrc16(str[i++],&crc);
35: ucrc16(0,&crc);
36: ucrc16(0,&crc);
37: return(crc);
38: }
39:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.