home *** CD-ROM | disk | FTP | other *** search
- /* 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}
-