home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / unix_c / cpm / unload.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-03-21  |  892 b   |  62 lines

  1. /*
  2.  * unload [files ...]
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <ctype.h>
  7. #define SIZE 16
  8.  
  9. main(argc,argv)
  10. char *argv[];
  11. {
  12.     FILE *f;
  13.  
  14.     if(argc > 1)
  15.         while(--argc) {
  16.             if( (f = fopen(argv[argc], "r")) == NULL) {
  17.                 perror(argv[argc]);
  18.                 exit(1);
  19.             }
  20.             printf("%s;\n",argv[argc]);
  21.             unload(f);
  22.             fclose(f);
  23.         }
  24.     else
  25.         unload(stdin);
  26. }
  27.  
  28. unsigned char check;
  29.  
  30. unload(f)
  31. FILE *f;
  32. {
  33.     char buf[SIZE];
  34.     register int n,i;
  35.     int addr = 0x100;
  36.  
  37.     while((n = fread(buf, 1, SIZE, f)) > 0) {
  38.         check = 0;
  39.         putchar(':');
  40.         putbyte(n);
  41.         putbyte(addr>>8);
  42.         putbyte(addr&0xff);
  43.         putbyte(0);
  44.         addr += n;
  45.         for(i = 0; i<n; i++)
  46.             putbyte(buf[i]);
  47.         putbyte( (-check) & 0xff);
  48.         putchar('\n');
  49.     }
  50.     printf(":00010001FE\n");
  51. }
  52.  
  53. static char hexcode[] = "0123456789ABCDEF";
  54.  
  55. putbyte(b)
  56. register int b;
  57. {
  58.     putchar( hexcode[(b>>4) & 0xf] );
  59.     putchar( hexcode[b & 0xf] );
  60.     check += (unsigned char) (b & 0xff);
  61. }
  62.