home *** CD-ROM | disk | FTP | other *** search
- int infile;
- long track[36];
-
- long lseek();
-
- char dir[16384];
- long fileread(tr,se,where)
- int tr,se;
- char *where;
- {
- long offset;
- char buffer[256];
- char *p;
- long len=0;
- int i;
-
- while()
- {
- offset=track[tr]+se*0x100L;
- lseek(infile,offset,0);
- read(infile,buffer,256);
- p=buffer;
- tr=*p++;
- se=*p++;
- if(tr)
- {
- for(i=0;i<254;i++) *where++=*p++;
- len+=254;
- }
- else
- {
- se--;
- for(i=0;i<se;i++) *where++=*p++;
- len+=se;
- return len;
- }
- }
- }
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- int i,j;
- long v;
- long len;
- char *p;
- char name[20];
- char fname[64];
-
- v=0;i=1;
- while(i<18) {track[i++]=v;v+=0x1500L;}
- while(i<25) {track[i++]=v;v+=0x1300L;}
- while(i<31) {track[i++]=v;v+=0x1200L;}
- while(i<36) {track[i++]=v;v+=0x1100L;}
-
- if(argc!=2)
- {
- puts("Use: CDIR <imagefile>\n");
- return;
- }
-
- strcpy(fname,argv[1]);
- infile=fopen(fname,"r");
- if(!infile)
- {
- strcat(fname,".d64");
- infile=fopen(fname,"r");
- if(!infile)
- {
- printf("Cannot open \"%s\"\n",argv[1]);
- return;
- }
- }
-
- len=fileread(18,0,dir);
- fclose(infile);
- /*
- printf("length=%lx\n",len);
- i=fopen("e:\\out","w");
- if(!i) return;
- write(i,dir,(int)len);
- fclose(i);
- */
- i=0;
- p=dir+0xfe;
- while()
- {
- for(j=0;j<16;j++) name[j]=p[j+3]&0x7f;
- name[j]=0;
- if(p[0])
- printf("%2d:%3d %s %2x\n",i,p[28]+p[29]*256,name,p[0]);
- i++;
- p+=32;
- if((i&7)==0) p-=2;
- if(p-dir>=len) break;
- }
- }
-