diff options
Diffstat (limited to 'libgloss/hp74x/checksum.c')
-rw-r--r-- | libgloss/hp74x/checksum.c | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/libgloss/hp74x/checksum.c b/libgloss/hp74x/checksum.c deleted file mode 100644 index 4a2b331fe..000000000 --- a/libgloss/hp74x/checksum.c +++ /dev/null @@ -1,150 +0,0 @@ -#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. */ -void -compute_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! */ -int -compute_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 |