/* CRC-32 v1.0
** Last edit date: 2002.5.23
*/
#include <stdio.h>
/**/
unsigned long crcTable[256];
/*Function: CRCTable generate
**
**input:
**output: unsigned long crcTable[256]
**return:
**
*/
void crcgen()
{
unsigned long crc, poly;
int i, j;
poly = 0xEDB88320L;
for (i=0; i<256; i++)
{
crc = i;
for (j=8; j>0; j--)
{
if (crc&1)
{
crc = (crc >> 1) ^ poly;
}
else
{
crc >>= 1;
}
}
crcTable[i] = crc;
}
}
/*Function: Generate CRC Checksum
**
**input: unsigned int len,unsigned char * buf;
**output:
**return: CRC checksum (unsigned long)
**
*/
unsigned long gencrc(len,buf)
register unsigned int len;
register unsigned char *buf;
{
int i;
unsigned long crc = 0xFFFFFFFF;
for (i=0; i<len; i++)
crc = ((crc>>8) & 0x00FFFFFF) ^ crcTable[(crc ^ *buf++) & 0xFF ];
return( crc^0xFFFFFFFF );
}