*****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'));
}
