Listing 1
#include <stdio.h> main(argc,argv) int argc; char **argv; { int i; void crc(); if (argc <= 1) { printf("USAGE:crc15 filename [filename...]\n"); exit(1); } for(i=1; i < argc; i++) { printf ("\n%-s ",argv[i]); crc(argv[i]); } exit(0); } /* main */ /* CRC * Cycric Redundancy Check * */ void crc(argv) char *argv; { FILE *fd; int crc; int c; char crc_char; int crc_clear(),crc_update(),crc_finish(); fd = fopen(argv,"rb"); if(!fd) { fprintf(stderr,"Can't open %s !\n",argv); exit(1); } crc = crc_clear(); while((c = getc(fd)) != EOF) { crc_char = c; crc = crc_update(crc,crc_char); } crc = crc_finish(crc); printf("%04x",crc); fclose(fd); } /* crc */ int crc_clear() { return(0); } int crc_update(crc,crc_char) int crc; char crc_char; { long x; int i; x = ((long)crc << 8) + crc_char; for(i = 0;i < 8;i++) { x = x << 1; if(x & 0x01000000) x = x ^ 0x01A09700; } return(((x & 0x00ffff00) >> 8)); } int crc_finish(crc) int crc; { return(crc_update(crc_update(crc,'\0'),'\0')); }