typedef struct header { int signature; int filecount; int toplink; } HEADER; typedef struct fileindex { int structsize; int filename_length; int prev_index; int next_index; int constant;//14h char filename[filename_length]; } FILEINDEX; typedef struct filedata { int datasize; int unk1; int unk2; int structsize; byte bindata[datasize]; } FILEDATA; typedef struct dfile { FILEINDEX fileidx; FILEDATA filedat; } DFILE; /* int recursefile(int link) { if(link>0) { FSeek(link); DFILE files; recursefile(files.fileidx.prev_index); recursefile(files.fileidx.next_index); } return 1; } */ void recursefile(int link1,int link2) { local int idx1,idx2; if(link1>0) { FSeek(link1); DFILE files; idx1=files.fileidx.prev_index; idx2=files.fileidx.next_index; recursefile(idx1,idx2); } if(link2>0) { FSeek(link2); DFILE files; idx1=files.fileidx.prev_index; idx2=files.fileidx.next_index; recursefile(idx1,idx2); } } HEADER head; if( head.toplink > 0 ) recursefile(head.toplink,0);