home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / unix_c / cpm / load.c < prev    next >
C/C++ Source or Header  |  1989-03-21  |  1KB  |  77 lines

  1. /*
  2.  * load - convert a hex file to a com file
  3.  */
  4.  
  5. #include <stdio.h>
  6.  
  7. unsigned char   checksum;
  8.  
  9. unsigned char   getbyte () {
  10.     register int    c;
  11.     unsigned char   x;
  12.  
  13.     c = getchar ();
  14.     if ('0' <= c && c <= '9')
  15.     x = c - '0';
  16.     else
  17.     if ('A' <= c && c <= 'F')
  18.         x = c - 'A' + 10;
  19.     else
  20.         goto funny;
  21.  
  22.     x <<= 4;
  23.     c = getchar ();
  24.     if ('0' <= c && c <= '9')
  25.     x |= c - '0';
  26.     else
  27.     if ('A' <= c && c <= 'F')
  28.         x |= c - 'A' + 10;
  29.     else {
  30.     funny:
  31.         fprintf (stderr, "Funny hex letter %c\n", c);
  32.         exit (2);
  33.     }
  34.     checksum += x;
  35.     return x;
  36. }
  37.  
  38. main () {
  39.     register unsigned   i, n;
  40.     char    c, buf[64];
  41.     unsigned    type;
  42.  
  43.     do {
  44.     do {
  45.         c = getchar ();
  46.         if (c == EOF) {
  47.         fprintf (stderr, "Premature EOF colon missing\n");
  48.         exit (1);
  49.         }
  50.     } while (c != ':');
  51.  
  52.     checksum = 0;
  53.     n = getbyte ();
  54.     (void) getbyte ();
  55.     (void) getbyte ();
  56.  
  57.     switch (type = getbyte ()) {
  58.         case 1:
  59.         break;
  60.         case 0:
  61.         for (i = 0; i < n; i++)
  62.             buf[i] = getbyte ();
  63.         fwrite (buf, 1, n, stdout);
  64.         break;
  65.         default:
  66.         fprintf (stderr, "Funny record type %d\n");
  67.         exit (1);
  68.     }
  69.  
  70.     (void) getbyte ();
  71.     if (checksum != 0) {
  72.         fprintf (stderr, "Checksum error");
  73.         exit (2);
  74.     }
  75.     } while (type != 1);
  76. }
  77.