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 begin
143 exit;
150 var
152 begin
156 begin
159 begin
161 exit;
168 var
170 begin
173 begin
175 begin
178 exit;
187 { TWADFile }
189 begin
195 begin
202 begin
208 begin
210 //if fFileName <> '' then e_WriteLog(Format('TWADFile.ReadFile: [%s] closed', [fFileName]), MSG_NOTIFY);
215 var
218 begin
223 try
227 except
229 exit;
235 var
237 begin
241 begin
242 //writeln('[', s, '] -> [', Copy(s, 1, i-2), ']');
248 function TWADFile.GetResourceEx (name: AnsiString; wantMap: Boolean; var pData: Pointer; var Len: Integer): Boolean;
249 var
257 begin
264 begin
269 begin
272 end
273 else
274 begin
277 // backwards, due to possible similar names and such
279 begin
283 begin
284 // i found her (maybe)
286 begin
289 begin
291 end
292 else
293 begin
295 if not StrEquCI1251(Copy(fi.path, length(fi.path)+1-length(rpath), length(fi.path)), rpath) then continue; // alas
298 try
300 except
304 begin
307 break;
309 // if we want only maps, check if this is map
310 {$IFDEF SFS_MAPDETECT_FX}
312 begin
314 //e_WriteLog(Format('DFWAD: checking for good map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
315 try
318 {
319 if goodMap then
320 e_WriteLog(Format(' GOOD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY)
321 else
322 e_WriteLog(Format(' BAD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
323 }
324 except
327 begin
328 //e_WriteLog(Format(' not a map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
330 continue;
334 {$ENDIF}
338 try
341 finally
343 begin
350 {$IFNDEF SFS_MAPDETECT_FX}
352 begin
355 begin
360 begin
361 //e_WriteLog(Format(' not a map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
365 continue;
368 {$ENDIF}
370 {$IFDEF SFS_DWFAD_DEBUG}
372 e_WriteLog(Format('DFWAD: file [%s] FOUND in [%s]; size is %d bytes', [name, fFileName, Len]), MSG_NOTIFY);
373 {$ENDIF}
374 exit;
380 function TWADFile.GetResource (name: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
381 begin
385 function TWADFile.GetMapResource (name: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
386 begin
391 var
395 begin
399 begin
403 //e_WriteLog(Format('DFWAD: checking for map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
405 begin
409 begin
414 begin
424 var
426 //f: Integer;
427 //fi: TSFSFileInfo;
428 begin
430 //e_WriteLog(Format('TWADFile.ReadFile: [%s]', [FileName]), MSG_NOTIFY);
434 begin
436 exit;
438 {$IFDEF SFS_DWFAD_DEBUG}
440 {$ENDIF}
441 // cache this wad
442 try
444 begin
446 end
447 else
448 begin
451 except
452 exit;
457 {$IFDEF SFS_DWFAD_DEBUG}
458 if gSFSDebug then e_WriteLog(Format('TWADFile.ReadFile: [%s] opened', [fFileName]), MSG_NOTIFY);
459 {$ENDIF}
464 var
468 var
471 //f: Integer;
472 //fi: TSFSFileInfo;
473 begin
477 begin
479 Exit;
484 {$IFDEF SFS_DWFAD_DEBUG}
486 {$ENDIF}
488 try
491 begin
493 Exit;
495 except
497 Exit;
504 {$IFDEF SFS_DWFAD_DEBUG}
506 {$ENDIF}
508 {
509 for f := 0 to fIter.Count-1 do
510 begin
511 fi := fIter.Files[f];
512 if fi = nil then continue;
513 st := fIter.volume.OpenFileByIndex(f);
514 if st = nil then
515 begin
516 e_WriteLog(Format('[%s]: [%s : %s] CAN''T OPEN', [fFileName, fi.path, fi.name]), MSG_NOTIFY);
517 end
518 else
519 begin
520 e_WriteLog(Format('[%s]: [%s : %s] %u', [fFileName, fi.path, fi.name, st.size]), MSG_NOTIFY);
521 st.Free;
522 end;
523 end;
524 //fIter.volume.OpenFileByIndex(0);
525 }
531 begin