⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checksum.c

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 C
字号:
#include <stdio.h>#include <fcntl.h>#define USAGE	"USAGE: checkum -[vhcs] infile outfile\n\t-v\tverbose\n\\t-h\thelp\n\t-c\tcheck checksum\n\t-s\tprint the ipl size"static int verbose = 0;static int verify  = 0;static int size    = 0;typedef int word_t;#define WORDSIZE (sizeof(word_t))main(argc, argv)     int argc;     char **argv;{  char	 *infile;  char	 *outfile;  int	 infd;  int	 outfd;  word_t checksum = 0;  int	 nbytes;  word_t buf;  int	 i        = 1;  int	filesize  = 0;    while (*argv[i] == '-') {      switch (*(argv[i]+1)) {      case 'v':	verbose++;	break;      case 'c':	verify++;	puts ("Sorry, unimplemented for now");	exit(1);	break;      case 's':	size++;	break;      case 'h':	puts (USAGE);	exit(0);      default:	printf ("\"%s\", Illegal option\n", argv[i]);	puts (USAGE);	exit(1);    }    i++;  }  infile = *(argv + i);  outfile = *(argv + i+1);  /* see it there were file names on the command line */  if (infile == 0x0) {    puts("Didn't specify an input file name");    exit(1);  }  if (outfile == 0x0) {    puts("Didn't specify an output file name");     exit(1);  }  /* try to open the files */  infd = open(infile, O_RDONLY);  if (infd == -1) {    printf("Couldn't open %s\n", infile);    exit(1);  }  outfd = open(outfile, O_WRONLY|O_CREAT|O_TRUNC);  if (outfd == -1) {    printf("Couldn't open %s\n", outfile);    exit(1);  }  if (verbose > 2)     putchar('\n');  /* calculate the checksum */  while ((nbytes = read(infd, &buf, WORDSIZE)) == WORDSIZE) {    if (verbose > 2)       putchar('.');    checksum+= buf;    filesize+= WORDSIZE;    if (write(outfd, &buf, WORDSIZE) != WORDSIZE) {      puts("Couldn't write");    }     if (verbose > 3)       putchar('+');  }  if (verbose > 2)     putchar('\n');    /* write the last byte read */  if (nbytes > 0) {    write(outfd, &buf, nbytes);    checksum+= buf;  				/* calculate the last word */    filesize+= nbytes;  }  /* write the checksum */  buf = -checksum;  write(outfd, &buf, WORDSIZE);  filesize+= WORDSIZE;				/* checksum increase the size */  if (verbose > 0)    printf("The calculated checksum is:\n\t0x%x,\n\t%u\n", -checksum, -checksum);  /* calculate the extra 2K here */  buf = 0;  while ((filesize % 2048) !=0) {    filesize+=WORDSIZE;    write(outfd, &buf, WORDSIZE);  }  if (size > 0) {    printf ("%u is the new file size\n", filesize);  }  close(outfd);  close(infd);  exit(0);}#if 0/* Calculate a simple checksum and concatenate it to the end of BUF.  */voidcompute_and_concatenate_checksum (word *buf, size_t bufsize_in_words){  size_t i;  word sum;  sum = buf[0]  for (i = 1; i < bufsize_in_words; i++)    sum += buf[i];  buf[bufsize_in_words] = -sum;}/* Calculate a simple checksum and verify it.  NOTE: bufsize_in_words should   include the checksum, i.e., it should be one larger than when the   checksum was calculated using compute_and_concatenate_checksum!  */intcompute_and_and_verify_checksum (word *buf, size_t bufsize_in_words){  size_t i;  word sum;  sum = buf[0];  for (i = 1; i < bufsize_in_words; i++)    sum += buf[i];  if (sum != 0)    return ERROR;  return SUCCESS;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -