1 {$MODE DELPHI}
4 {$DEFINE SFS_DWFAD_DEBUG}
5 {$DEFINE SFS_MAPDETECT_FX}
7 interface
9 uses
13 type
17 private
24 function GetResourceEx (name: AnsiString; wantMap: Boolean; var pData: Pointer; var Len: Integer): Boolean;
26 public
49 // return fixed AnsiString or empty AnsiString
53 implementation
55 uses
60 begin
63 begin
64 //e_WriteLog(Format('findDiskWad: error looking for [%s]', [fname]), MSG_NOTIFY);
66 begin
68 //e_WriteLog(Format(' looking for [%s]', [fname]), MSG_NOTIFY);
70 begin
72 //e_WriteLog(Format(' looking for [%s]', [fname]), MSG_NOTIFY);
75 end
76 else
77 begin
78 exit;
81 //e_WriteLog(Format('findDiskWad: FOUND [%s]', [fname]), MSG_NOTIFY);
87 var
89 begin
95 var
97 begin
99 begin
101 begin
106 exit;
113 var
115 begin
117 begin
119 begin
121 exit;
128 var
130 begin
134 begin
137 begin
139 exit;
146 var
148 begin
152 begin
155 begin
157 exit;
164 var
166 begin
169 begin
171 begin
173 exit;
180 { TWADFile }
182 begin
188 begin
195 begin
201 begin
203 //if fFileName <> '' then e_WriteLog(Format('TWADFile.ReadFile: [%s] closed', [fFileName]), MSG_NOTIFY);
208 var
211 begin
216 try
220 except
222 exit;
228 var
230 begin
234 begin
235 //writeln('[', s, '] -> [', Copy(s, 1, i-2), ']');
241 function TWADFile.GetResourceEx (name: AnsiString; wantMap: Boolean; var pData: Pointer; var Len: Integer): Boolean;
242 var
250 begin
257 begin
262 begin
265 end
266 else
267 begin
270 // backwards, due to possible similar names and such
272 begin
276 begin
277 // i found her (maybe)
279 begin
282 begin
284 end
285 else
286 begin
288 if not StrEquCI1251(Copy(fi.path, length(fi.path)+1-length(rpath), length(fi.path)), rpath) then continue; // alas
291 try
293 except
297 begin
300 break;
302 // if we want only maps, check if this is map
303 {$IFDEF SFS_MAPDETECT_FX}
305 begin
307 e_WriteLog(Format('DFWAD: checking for good map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
308 try
312 e_WriteLog(Format(' GOOD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY)
313 else
314 e_WriteLog(Format(' BAD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
315 except
318 begin
319 e_WriteLog(Format(' not a map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
321 continue;
325 {$ENDIF}
329 try
332 finally
334 begin
341 {$IFNDEF SFS_MAPDETECT_FX}
343 begin
346 begin
351 begin
352 e_WriteLog(Format(' not a map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
356 continue;
359 {$ENDIF}
361 {$IFDEF SFS_DWFAD_DEBUG}
363 e_WriteLog(Format('DFWAD: file [%s] FOUND in [%s]; size is %d bytes', [name, fFileName, Len]), MSG_NOTIFY);
364 {$ENDIF}
365 exit;
371 function TWADFile.GetResource (name: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
372 begin
376 function TWADFile.GetMapResource (name: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
377 begin
382 var
386 begin
390 begin
394 e_WriteLog(Format('DFWAD: checking for map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
396 begin
400 begin
405 begin
415 var
417 //f: Integer;
418 //fi: TSFSFileInfo;
419 begin
421 //e_WriteLog(Format('TWADFile.ReadFile: [%s]', [FileName]), MSG_NOTIFY);
425 begin
427 exit;
429 {$IFDEF SFS_DWFAD_DEBUG}
431 {$ENDIF}
432 // cache this wad
433 try
435 begin
437 end
438 else
439 begin
442 except
443 exit;
448 {$IFDEF SFS_DWFAD_DEBUG}
449 if gSFSDebug then e_WriteLog(Format('TWADFile.ReadFile: [%s] opened', [fFileName]), MSG_NOTIFY);
450 {$ENDIF}
455 var
459 var
462 //f: Integer;
463 //fi: TSFSFileInfo;
464 begin
468 begin
470 Exit;
475 {$IFDEF SFS_DWFAD_DEBUG}
477 {$ENDIF}
479 try
482 begin
484 Exit;
486 except
488 Exit;
495 {$IFDEF SFS_DWFAD_DEBUG}
497 {$ENDIF}
499 {
500 for f := 0 to fIter.Count-1 do
501 begin
502 fi := fIter.Files[f];
503 if fi = nil then continue;
504 st := fIter.volume.OpenFileByIndex(f);
505 if st = nil then
506 begin
507 e_WriteLog(Format('[%s]: [%s : %s] CAN''T OPEN', [fFileName, fi.path, fi.name]), MSG_NOTIFY);
508 end
509 else
510 begin
511 e_WriteLog(Format('[%s]: [%s : %s] %u', [fFileName, fi.path, fi.name, st.size]), MSG_NOTIFY);
512 st.Free;
513 end;
514 end;
515 //fIter.volume.OpenFileByIndex(0);
516 }
522 begin