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