home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / utilpc / d64util / cdir.c < prev    next >
C/C++ Source or Header  |  1994-03-29  |  1KB  |  99 lines

  1. int infile;
  2. long track[36];
  3.  
  4. long lseek();
  5.  
  6. char dir[16384];
  7. long fileread(tr,se,where)
  8. int tr,se;
  9. char *where;
  10. {
  11. long offset;
  12. char buffer[256];
  13. char *p;
  14. long len=0;
  15. int i;
  16.  
  17.     while()
  18.     {
  19.         offset=track[tr]+se*0x100L;
  20.         lseek(infile,offset,0);
  21.         read(infile,buffer,256);
  22.         p=buffer;
  23.         tr=*p++;
  24.         se=*p++;
  25.         if(tr)
  26.         {
  27.             for(i=0;i<254;i++) *where++=*p++;
  28.             len+=254;
  29.         }
  30.         else
  31.         {
  32.             se--;
  33.             for(i=0;i<se;i++) *where++=*p++;
  34.             len+=se;
  35.             return len;
  36.         }
  37.     }
  38. }
  39.  
  40. main(argc,argv)
  41. int argc;
  42. char *argv[];
  43. {
  44. int i,j;
  45. long v;
  46. long len;
  47. char *p;
  48. char name[20];
  49. char fname[64];
  50.  
  51.     v=0;i=1;
  52.     while(i<18) {track[i++]=v;v+=0x1500L;}
  53.     while(i<25) {track[i++]=v;v+=0x1300L;}
  54.     while(i<31) {track[i++]=v;v+=0x1200L;}
  55.     while(i<36) {track[i++]=v;v+=0x1100L;}
  56.  
  57.     if(argc!=2)
  58.     {
  59.         puts("Use: CDIR <imagefile>\n");
  60.         return;
  61.     }
  62.  
  63.     strcpy(fname,argv[1]);
  64.     infile=fopen(fname,"r");
  65.     if(!infile)
  66.     {
  67.         strcat(fname,".d64");
  68.         infile=fopen(fname,"r");
  69.         if(!infile)
  70.         {
  71.         printf("Cannot open \"%s\"\n",argv[1]);
  72.         return;
  73.         }
  74.     }
  75.  
  76.     len=fileread(18,0,dir);
  77.     fclose(infile);
  78. /*
  79.     printf("length=%lx\n",len);
  80.     i=fopen("e:\\out","w");
  81.     if(!i) return;
  82.     write(i,dir,(int)len);
  83.     fclose(i);
  84. */
  85.     i=0;
  86.     p=dir+0xfe;
  87.     while()
  88.     {
  89.         for(j=0;j<16;j++) name[j]=p[j+3]&0x7f;
  90.         name[j]=0;
  91.         if(p[0])
  92.             printf("%2d:%3d %s %2x\n",i,p[28]+p[29]*256,name,p[0]);
  93.         i++;
  94.         p+=32;
  95.         if((i&7)==0) p-=2;
  96.         if(p-dir>=len) break;
  97.     }
  98. }
  99.