bool iso9660::flist(char *path) { int flag,bp,prv_fldr=1,f_cnt,g,st=0,i=0,j,file_flag=0,folder_flag=0,k,count; unsigned char tname[30],*bf,*bf2; short int file_location,parent; if((pr.pts%512)==0) count=pr.pts/512; else count=(pr.pts/512)+1; bf=(unsigned char*) (klm.kdmalloc (count*512)); drv->pioread(pr.lptb*4,count,bf); int off=0; load_rdr(0,pr.rdr); if(path[0]!='\0' && path[0]=='/') { path++; } while(path[i]!='\0') { load_ptb(0,bf); off=0; bp=0; flag=0; j=0; if(i==0) file_location=pt.loc_ext; while(path[i]!='/' && path[i]!='\0') { tname[j++]=path[i++]; } tname[j]='\0'; if(path[i]=='/' || path[i]=='\0') { if(path[i]!='\0') i++; while(off<pr.pts) { if(pt.len_di%2==0) { off=off+8+pt.len_di; if(off!=pr.pts) { load_ptb(off,bf); bp++; } if(prv_fldr!=pt.par_dir_no) { flag=0; continue; } for(g=0;tname[g]!='\0' && tname[g]==pt.dir_id[g];++g); if((off==pr.pts && pt.len_di!=g)||(g==pt.len_di && parent==pt.par_dir_no && tname[g]!='\0')) { disp1.printf("\nInvalid Directory %s",tname); return 0; } else if(g==pt.len_di && tname[g]=='\0') { file_location=pt.loc_ext; parent=pt.par_dir_no; prv_fldr=bp+1; flag=1; //disp1.printf("\nParent Directory of %s is %x",tname,parent); break; } } else { off=off+8+pt.len_di+1; if(off!=pr.pts) { load_ptb(off,bf); bp++; } if(prv_fldr!=pt.par_dir_no) { flag=0; continue; } for(g=0;tname[g]!='\0' && tname[g]==pt.dir_id[g];++g); if((off==pr.pts && g!=pt.len_di)||(g==pt.len_di && parent==pt.par_dir_no && tname[g]!='\0')) { disp1.printf("\nInvalid Directory %s",tname); return 0; } else if(g==pt.len_di && tname[g]=='\0') { file_location=pt.loc_ext; parent=pt.par_dir_no; prv_fldr=bp+1; //disp1.printf("\nParent Directory of %s is %x",tname,parent); flag=1; break; } } } if(flag==0) { disp1.printf("\nCannot find the directory %s",tname); return 0; } } } //disp1.printf("\nNonesense location %x %x",file_location,pr.lbs); //disp1.printf("\n"); if(path[0]=='\0' && *(path-1)=='/') { file_location=rd.loc_ext; } if((pr.lbs%512)==0) count=pr.lbs/512; else count=(pr.lbs/512)+1; bf2=(unsigned char*) (klm.kdmalloc (count*512)); drv->pioread(file_location*4,count,bf2); off=0; flag=0; load_rdr(off,bf2); off=off+rd.len_dir; load_rdr(off,bf2); off=off+rd.len_dir; load_rdr(off,bf2); int h; while(rd.len_dir !=0) { if(rd.file_flag==0x00) disp1.setattrib(0x02); else disp1.setattrib(0x01); for(h=0;h<rd.len_file_id;++h) disp1.printf("%c",rd.file_id[h]); disp1.printf(" "); off=off+rd.len_dir; load_rdr(off,bf2); } disp1.printf("\n"); disp1.setattrib(0x0f); return 1; }