home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CBM Funet Archive
/
cbm-funet-archive-2003.iso
/
cbm
/
csbruce
/
crc32a.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-12-24
|
1KB
|
53 lines
/* CRC32A.C BY cRAIG bRUCE, 26-fEB-93 */
#INCLUDE <STDIO.H>
#DEFINE crc32_gen0X04C11DB7 /* ccitt STANDARD */
#DEFINE crc32_msb0X80000000
UNSIGNED LONG GETCRC();
/******************************************************************************/
MAIN( ARGC, ARGV )
INT ARGC;
CHAR *ARGV[];
{$7b}
INT I;
file *FP;
UNSIGNED LONG CRC;
IF (ARGC < 2) {$7b}
CRC = GETCRC( STDIN );
PRINTF("CRC32A = %10LU FOR <STDIN>\N", CRC);
{$7d} ELSE {$7b}
FOR (I=1; I<ARGC; I++) {$7b}
IF ( (FP=FOPEN(ARGV[I],"RB")) == null ) {$7b}
PRINTF("ERROR OPENING FILE \"%S\"!\N", ARGV[I]);
{$7d} ELSE {$7b}
CRC = GETCRC( FP );
PRINTF("CRC32A = %10LU FOR \"%S\"\N",
CRC, ARGV[I]);
FCLOSE( FP );
{$7d}
{$7d}
{$7d}
{$7d}
/******************************************************************************/
UNSIGNED LONG GETCRC( FP )
file *FP;
{$7b}
REGISTER UNSIGNED LONG CRCBIN, CRCoVERFLOW;
INT C, I;
CRCBIN = 0;
WHILE( (C=GETC(FP)) != eof ) {$7b}
FOR (I=0X80; I; I >>= 1) {$7b}
CRCoVERFLOW = CRCBIN & crc32_msb;
CRCBIN = (CRCBIN << 1) {$7c} (I&C ? 1 : 0);
IF (CRCoVERFLOW) CRCBIN ^= crc32_gen;
{$7d}
{$7d}
RETURN( CRCBIN );
{$7d}