int infile,outfile; 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 \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; } } p=argv[2]; num=0; while(*p>='0' && *p<='9') num+=9*num + (*p++) -'0'; len=fileread(18,0,dir); i=0; p=dir+0xfe; while(i!=num) { i++; p+=32; if((i&7)==0) p-=2; if(p-dir>=len) {puts("Illegal file number\n");return;} } outfile=fopen(argv[3],"w"); if(!outfile) { printf("Cannot open %s for output\n",argv[3]); fclose(infile); return; } copy(p[1],p[2],outfile); fclose(outfile); fclose(infile); }