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
311 {
312 if goodMap then
313 e_WriteLog(Format(' GOOD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY)
314 else
315 e_WriteLog(Format(' BAD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
316 }
317 except
320 begin
321 //e_WriteLog(Format(' not a map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
323 continue;
327 {$ENDIF}
331 try
334 finally
336 begin
343 {$IFNDEF SFS_MAPDETECT_FX}
345 begin
348 begin
353 begin
354 //e_WriteLog(Format(' not a map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
358 continue;
361 {$ENDIF}
363 {$IFDEF SFS_DWFAD_DEBUG}
365 e_WriteLog(Format('DFWAD: file [%s] FOUND in [%s]; size is %d bytes', [name, fFileName, Len]), MSG_NOTIFY);
366 {$ENDIF}
367 exit;
373 function TWADFile.GetResource (name: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
374 begin
378 function TWADFile.GetMapResource (name: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
379 begin
384 var
388 begin
392 begin
396 //e_WriteLog(Format('DFWAD: checking for map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
398 begin
402 begin
407 begin
417 var
419 //f: Integer;
420 //fi: TSFSFileInfo;
421 begin
423 //e_WriteLog(Format('TWADFile.ReadFile: [%s]', [FileName]), MSG_NOTIFY);
427 begin
429 exit;
431 {$IFDEF SFS_DWFAD_DEBUG}
433 {$ENDIF}
434 // cache this wad
435 try
437 begin
439 end
440 else
441 begin
444 except
445 exit;
450 {$IFDEF SFS_DWFAD_DEBUG}
451 if gSFSDebug then e_WriteLog(Format('TWADFile.ReadFile: [%s] opened', [fFileName]), MSG_NOTIFY);
452 {$ENDIF}
457 var
461 var
464 //f: Integer;
465 //fi: TSFSFileInfo;
466 begin
470 begin
472 Exit;
477 {$IFDEF SFS_DWFAD_DEBUG}
479 {$ENDIF}
481 try
484 begin
486 Exit;
488 except
490 Exit;
497 {$IFDEF SFS_DWFAD_DEBUG}
499 {$ENDIF}
501 {
502 for f := 0 to fIter.Count-1 do
503 begin
504 fi := fIter.Files[f];
505 if fi = nil then continue;
506 st := fIter.volume.OpenFileByIndex(f);
507 if st = nil then
508 begin
509 e_WriteLog(Format('[%s]: [%s : %s] CAN''T OPEN', [fFileName, fi.path, fi.name]), MSG_NOTIFY);
510 end
511 else
512 begin
513 e_WriteLog(Format('[%s]: [%s : %s] %u', [fFileName, fi.path, fi.name, st.size]), MSG_NOTIFY);
514 st.Free;
515 end;
516 end;
517 //fIter.volume.OpenFileByIndex(0);
518 }
524 begin