index 69d04394ceaeacd10c077c149852d82dd8a210a7..96bf2293b01bff634f722032f9e225e7948019bd 100644 (file)
--- a/src/shared/wadreader.pas
+++ b/src/shared/wadreader.pas
implementation
uses
- SysUtils, e_log, utils, MAPDEF;
+ SysUtils, e_log, utils, MAPDEF, xdynrec;
function findDiskWad (fname: AnsiString): AnsiString;
//FIXME: detect text maps properly here
function TWADFile.isMapResource (idx: Integer): Boolean;
var
- sign: packed array [0..2] of Char;
+ //sign: packed array [0..2] of Char;
fs: TStream = nil;
begin
result := false;
if (idx < 0) or (idx >= fIter.Count) then exit;
try
fs := fIter.volume.OpenFileByIndex(idx);
+ result := TDynMapDef.canBeMap(fs);
+ (*
fs.readBuffer(sign, 3);
result := (sign = MAP_SIGNATURE);
if not result then result := (sign[0] = 'm') and (sign[1] = 'a') and (sign[2] = 'p');
+ *)
except
- if fs <> nil then fs.Free();
+ fs.Free();
+ result := false; // just in case
exit;
end;
fs.Free();
fs: TStream;
fpp: Pointer;
rpath, rname: AnsiString;
- sign: packed array [0..2] of Char;
+ //sign: packed array [0..2] of Char;
goodMap: Boolean;
+ {$IFNDEF SFS_MAPDETECT_FX}
+ wst: TSFSMemoryChunkStream;
+ {$ENDIF}
begin
Result := False;
if not isOpen or (fIter = nil) then Exit;
e_LogWritefln('DFWAD: checking for good map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f]);
{$ENDIF}
try
- fs.readBuffer(sign, 3);
- goodMap := (sign = MAP_SIGNATURE);
- if not goodMap then goodMap := (sign[0] = 'm') and (sign[1] = 'a') and (sign[2] = 'p');
+ //fs.readBuffer(sign, 3);
+ //goodMap := (sign = MAP_SIGNATURE);
+ //if not goodMap then goodMap := (sign[0] = 'm') and (sign[1] = 'a') and (sign[2] = 'p');
+ goodMap := TDynMapDef.canBeMap(fs);
{$IF DEFINED(D2D_NEW_MAP_READER_DBG)}
if goodMap then
e_LogWritefln(' GOOD map in wad [%s], file [%s] (#%d)', [fFileName, fi.fname, f])
goodMap := false;
if Len >= 3 then
begin
- Move(pData^, sign, 3);
- goodMap := (sign = MAP_SIGNATURE);
+ //Move(pData^, sign, 3);
+ //goodMap := (sign = MAP_SIGNATURE);
+ wst := TSFSMemoryChunkStream.Create(pData, Len);
+ try
+ goodMap := TDynMapDef.canBeMap(wst);
+ except
+ goodMap := false;
+ end;
+ wst.Free();
end;
if not goodMap then
begin