home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / x / xtrsutl.zip / DUMPBIN.C < prev    next >
C/C++ Source or Header  |  1992-12-31  |  4KB  |  183 lines

  1. /* 
  2.     8/4/92
  3.     
  4.     This program will dump a TRS-80 Disk BASIC program that has been
  5.     converted to a SYSTEM loadable format by cvtcmd.exe
  6.     To be used with xtrs1.0
  7.  
  8.     By Abel M. Hernandez  amh@hp835.mitek.com
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <dos.h>
  14. #include <io.h>
  15. #include <fcntl.h>
  16. #include <sys\types.h>
  17. #include <sys\stat.h>
  18.  
  19. int fptr;
  20. unsigned char buffer[256];
  21. char filename[20];      /* source file */
  22. char mod_file[20];      /* destination file */
  23. char cas_fname[10];     /* storage for cassette filename */
  24.  
  25. unsigned char blk_size, lsb, msb, blk_type;
  26. int addr;
  27.  
  28. main(argc, argv)
  29. int argc;
  30. char *argv[];
  31.     {
  32.     int i;
  33.     
  34.     if (argc < 2)
  35.         usage();
  36.     else
  37.         strcpy (filename,argv[1]);
  38.  
  39.     mkupper(filename);
  40.     
  41.     strcat (filename,".BIN");
  42.     
  43.     fptr = open(filename, O_RDONLY+O_BINARY);   /* open for read binary */
  44.  
  45.     if ( fptr == -1 )
  46.         {
  47.         printf("\nError! Opening %s \n",filename);
  48.         usage();
  49.         }
  50.  
  51.     read(fptr,buffer,255);
  52.     read(fptr,buffer,1);
  53.     
  54.     if (buffer[0] != 0x0a5)
  55.         printf("No sync byte, found=0x%02x\n",buffer[0]);
  56.     else
  57.         printf("Found sync byte....\n");
  58.         
  59.     read(fptr,buffer,1);
  60.  
  61.     if (buffer[0] != 0x55)
  62.         printf("No filename header byte, found=0x%02x\n",buffer[0]);
  63.     else
  64.         printf("Found filename header byte....\n");
  65.         
  66.     read(fptr,buffer,6);
  67.  
  68.     printf("name=%s\n",buffer);
  69.  
  70. loop:
  71.     read(fptr,buffer,1);        /* get block type */
  72.     blk_type=buffer[0];
  73.  
  74.     printf("Block type=0x%02X   ----- ",blk_type);
  75.  
  76.     if (blk_type == 0x3c)       /* block type = data? */
  77.         {
  78.         get_blk();              /* get a block of data */
  79.         goto loop;
  80.         }
  81.     else if (blk_type != 0x78)  /* block type = entry point? */
  82.         {
  83.         printf("\nText Block: ");
  84.         read(fptr,buffer,1);        /* get block size */
  85.         blk_size = buffer[0];
  86.         for (i=0; i<blk_size; i++)
  87.             {
  88.             read(fptr,buffer,1);
  89.             printf("%c",buffer[0]);
  90.             }
  91.         printf("\n");
  92.         goto loop;
  93.         }
  94.  
  95.     read(fptr,buffer,1);        /* read pass the block size */
  96.  
  97.     read(fptr,buffer,1);        /* get entry point address */
  98.     lsb  = buffer[0];
  99.     
  100.     read(fptr,buffer,1);
  101.     msb  = buffer[0];
  102.  
  103.     addr = msb*256+lsb;
  104.     
  105.     printf("Entry point=0x%04X\n",addr);
  106.  
  107.     close(fptr);
  108.  
  109.     }
  110.  
  111. /****************************************************************************/
  112.  
  113. get_blk()
  114.     {
  115.     int bytes_rd, i;
  116.     unsigned char chksum, block_sz;
  117.  
  118.     read(fptr,buffer,1);        /* get block size */
  119.     blk_size=buffer[0];
  120.     printf("Block size=0x%02X\n",blk_size);
  121.  
  122.     read(fptr,buffer,1);        /* get destination address */
  123.     lsb  = buffer[0];
  124.     chksum = lsb;
  125.  
  126.     read(fptr,buffer,1);
  127.     msb  = buffer[0];
  128.     chksum += msb;
  129.     
  130.     addr = msb*256+lsb;
  131.     
  132.     printf("Dest addr =0x%04X ----- ",addr);
  133.  
  134.     blk_size--;
  135.  
  136. //  if (blk_size == 0)
  137. //      blk_size = 255;
  138.  
  139.     bytes_rd = read(fptr,buffer,blk_size+1);        /* read in blk_size of data */
  140.     printf("Bytes read=0x%02X\n",bytes_rd);
  141.  
  142.     for (i=0; i<bytes_rd; i++)      /* calculate the checksum */
  143.         chksum += buffer[i];
  144.     printf("Cal CkSum =0x%02X   ----- ",chksum);
  145.         
  146.     read(fptr,buffer,1);        /* get the checksum */
  147.     chksum=buffer[0];
  148.     printf("Check Sum =0x%02X\n\n",chksum);
  149.  
  150.     }
  151.  
  152. /****************************************************************************/
  153.  
  154. mkupper(string)
  155. char *string;
  156.     {
  157.     int i;
  158.  
  159.     i = strlen(string);
  160.     while(i--)
  161.         {
  162.         *string = toupper(*string);
  163.         string++;
  164.         }
  165.     }
  166.  
  167. /****************************************************************************/
  168.  
  169. usage()
  170.     {
  171.     printf("\nTRS-80 Disk object program displayer\n");
  172.     printf("\nUsage: dumpbin <filename>\n");
  173.     printf("\nWhere <fileaname> is a TRS-80 Disk object program without\n");
  174.     printf("      an extension. The extension BIN is assumed.\n");
  175.     printf("\nThis program will display a TRS-80 disk object (machine\n");
  176.     printf("language) program that has been convert to a SYSTEM loadable\n");
  177.     printf("format by cvtcmd.exe onto the screen.\n");
  178.     printf("\nby Abel M. Hernandez 8/4/92 amh@hp835.mitek.com.\n");
  179.     exit(1);
  180.     }
  181.  
  182.  
  183.