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 var
58 implementation
60 uses
65 begin
68 begin
69 //e_WriteLog(Format('findDiskWad: error looking for [%s]', [fname]), MSG_NOTIFY);
71 begin
73 //e_WriteLog(Format(' looking for [%s]', [fname]), MSG_NOTIFY);
75 begin
77 //e_WriteLog(Format(' looking for [%s]', [fname]), MSG_NOTIFY);
80 end
81 else
82 begin
83 exit;
86 //e_WriteLog(Format('findDiskWad: FOUND [%s]', [fname]), MSG_NOTIFY);
92 var
94 begin
100 var
102 begin
104 begin
106 begin
111 exit;
118 var
120 begin
122 begin
124 begin
126 exit;
133 var
135 begin
139 begin
142 begin
144 begin
148 exit;
155 var
157 begin
161 begin
164 begin
166 exit;
173 var
175 begin
178 begin
180 begin
183 exit;
192 { TWADFile }
194 begin
200 begin
207 begin
213 begin
215 //if fFileName <> '' then e_WriteLog(Format('TWADFile.ReadFile: [%s] closed', [fFileName]), MSG_NOTIFY);
220 var
223 begin
228 try
232 except
234 exit;
240 var
242 begin
246 begin
247 //writeln('[', s, '] -> [', Copy(s, 1, i-2), ']');
253 function TWADFile.GetResourceEx (name: AnsiString; wantMap: Boolean; var pData: Pointer; var Len: Integer): Boolean;
254 var
262 begin
269 begin
274 begin
277 end
278 else
279 begin
282 // backwards, due to possible similar names and such
284 begin
288 begin
289 // i found her (maybe)
291 begin
294 begin
296 end
297 else
298 begin
300 if not StrEquCI1251(Copy(fi.path, length(fi.path)+1-length(rpath), length(fi.path)), rpath) then continue; // alas
303 try
305 except
309 begin
312 break;
314 // if we want only maps, check if this is map
315 {$IFDEF SFS_MAPDETECT_FX}
317 begin
319 //e_WriteLog(Format('DFWAD: checking for good map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
320 try
323 {
324 if goodMap then
325 e_WriteLog(Format(' GOOD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY)
326 else
327 e_WriteLog(Format(' BAD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
328 }
329 except
332 begin
333 //e_WriteLog(Format(' not a map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
335 continue;
339 {$ENDIF}
343 try
346 finally
348 begin
355 {$IFNDEF SFS_MAPDETECT_FX}
357 begin
360 begin
365 begin
366 //e_WriteLog(Format(' not a map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
370 continue;
373 {$ENDIF}
375 {$IFDEF SFS_DWFAD_DEBUG}
377 e_WriteLog(Format('DFWAD: file [%s] FOUND in [%s]; size is %d bytes', [name, fFileName, Len]), MSG_NOTIFY);
378 {$ENDIF}
379 exit;
385 function TWADFile.GetResource (name: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
386 begin
390 function TWADFile.GetMapResource (name: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
391 begin
396 var
400 begin
404 begin
408 //e_WriteLog(Format('DFWAD: checking for map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]), MSG_NOTIFY);
410 begin
414 begin
419 begin
429 var
431 //f: Integer;
432 //fi: TSFSFileInfo;
433 begin
435 //e_WriteLog(Format('TWADFile.ReadFile: [%s]', [FileName]), MSG_NOTIFY);
439 begin
441 exit;
443 {$IFDEF SFS_DWFAD_DEBUG}
445 {$ENDIF}
446 // cache this wad
447 try
449 begin
451 end
452 else
453 begin
456 except
457 exit;
462 {$IFDEF SFS_DWFAD_DEBUG}
463 if wadoptDebug then e_WriteLog(Format('TWADFile.ReadFile: [%s] opened', [fFileName]), MSG_NOTIFY);
464 {$ENDIF}
469 var
473 var
476 //f: Integer;
477 //fi: TSFSFileInfo;
478 begin
482 begin
484 Exit;
489 {$IFDEF SFS_DWFAD_DEBUG}
491 {$ENDIF}
493 try
496 begin
498 Exit;
500 except
502 Exit;
509 {$IFDEF SFS_DWFAD_DEBUG}
511 {$ENDIF}
513 {
514 for f := 0 to fIter.Count-1 do
515 begin
516 fi := fIter.Files[f];
517 if fi = nil then continue;
518 st := fIter.volume.OpenFileByIndex(f);
519 if st = nil then
520 begin
521 e_WriteLog(Format('[%s]: [%s : %s] CAN''T OPEN', [fFileName, fi.path, fi.name]), MSG_NOTIFY);
522 end
523 else
524 begin
525 e_WriteLog(Format('[%s]: [%s : %s] %u', [fFileName, fi.path, fi.name, st.size]), MSG_NOTIFY);
526 st.Free;
527 end;
528 end;
529 //fIter.volume.OpenFileByIndex(0);
530 }
536 begin