X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2FWADEDITOR.pas;h=d41acfaa8a83a67b96b9d2f3f1ff5ab0cbf7345d;hb=41d480b02f4d0257f13a87810c0053b8b0df3b13;hp=ac9e74781a103a295d65ade2b3b43b520ebe725a;hpb=6f8bfcced2d551b834fadcfcf2d6d1caed40fe98;p=d2df-sdl.git diff --git a/src/shared/WADEDITOR.pas b/src/shared/WADEDITOR.pas index ac9e747..d41acfa 100644 --- a/src/shared/WADEDITOR.pas +++ b/src/shared/WADEDITOR.pas @@ -49,6 +49,9 @@ const procedure g_ProcessResourceStr (ResourceStr: String; var FileName, SectionName, ResourceName: String); overload; procedure g_ProcessResourceStr (ResourceStr: String; FileName, SectionName, ResourceName: PString); overload; +// return fixed string or empty string +function findDiskWad (fname: string): string; + implementation @@ -56,6 +59,41 @@ uses SysUtils, Classes, BinEditor, e_log, g_options; +function findDiskWad (fname: string): string; +var + path, rfn: string; +begin + result := ''; + path := ExtractFilePath(fname); + rfn := ExtractFileName(fname); + if not sfsFindFileCI(path, rfn) then + begin + //e_WriteLog(Format('TWADEditor_1.ReadFile: error looking for [%s] [%s]', [path, ExtractFileName(fname)]), MSG_NOTIFY); + if SFSStrEqu(ExtractFileExt(fname), '.wad') then + begin + rfn := ChangeFileExt(ExtractFileName(fname), '.pk3'); + //e_WriteLog(Format(' looking for [%s] [%s]', [path, rfn]), MSG_NOTIFY); + if not sfsFindFileCI(path, rfn) then + begin + //e_WriteLog(Format(' looking for [%s] [%s]', [path, rfn]), MSG_NOTIFY); + rfn := ChangeFileExt(ExtractFileName(fname), '.zip'); + if not sfsFindFileCI(path, rfn) then exit; + end; + end + else + begin + exit; + end; + //e_WriteLog(Format('TWADEditor_1.ReadFile: FOUND [%s]', [rfn]), MSG_NOTIFY); + end + else + begin + //if rfn <> ExtractFileName(FileName) then e_WriteLog(Format('TWADEditor_1.ReadFile: FOUND [%s]', [rfn]), MSG_NOTIFY); + end; + result := path+rfn; +end; + + procedure g_ProcessResourceStr (ResourceStr: String; var FileName, SectionName, ResourceName: String); var a, i: Integer; @@ -170,7 +208,7 @@ begin fi := fIter.Files[f]; if fi = nil then continue; //e_WriteLog(Format('DFWAD: searching for [%s : %s] in [%s]; current is [%s : %s]', [Section, Resource, fFileName, fi.path, fi.name]), MSG_NOTIFY); - if {SFSStrEqu}SFSDFPathEqu(fi.path, Section) and SFSStrEqu(removeExt(fi.name), Resource) then + if SFSStrEqu(fi.path, Section) and SFSStrEqu(removeExt(fi.name), Resource) then begin // i found her! //fn := fFileName+'::'+fi.path+fi.name; @@ -225,7 +263,7 @@ begin fi := fIter.Files[f]; if fi = nil then continue; if length(fi.name) = 0 then continue; - if {SFSStrEqu}SFSDFPathEqu(fi.path, Section) then + if SFSStrEqu(fi.path, Section) then begin SetLength(result, Length(result)+1); result[high(result)] := removeExt(fi.name); @@ -236,46 +274,32 @@ end; function TWADEditor_1.ReadFile (FileName: string): Boolean; var - rfn, path: string; + rfn: string; //f: Integer; //fi: TSFSFileInfo; begin Result := False; //e_WriteLog(Format('TWADEditor_1.ReadFile: [%s]', [FileName]), MSG_NOTIFY); FreeWAD(); - path := ExtractFilePath(FileName); - rfn := ExtractFileName(FileName); - if not sfsFindFileCI(path, rfn) then + rfn := findDiskWad(FileName); + if length(rfn) = 0 then begin - //{if gSFSDebug then} e_WriteLog(Format('TWADEditor_1.ReadFile: error looking for [%s] [%s]', [path, ExtractFileName(FileName)]), MSG_NOTIFY); - if SFSStrEqu(ExtractFileExt(FileName), '.wad') then - begin - rfn := ChangeFileExt(ExtractFileName(FileName), '.pk3'); - //{if gSFSDebug then} e_WriteLog(Format(' looking for [%s] [%s]', [path, rfn]), MSG_NOTIFY); - if not sfsFindFileCI(path, rfn) then - begin - //{if gSFSDebug then} e_WriteLog(Format(' looking for [%s] [%s]', [path, rfn]), MSG_NOTIFY); - rfn := ChangeFileExt(ExtractFileName(FileName), '.zip'); - if not sfsFindFileCI(path, rfn) then exit; - end; - end - else - begin - exit; - end; - //{if gSFSDebug then} e_WriteLog(Format('TWADEditor_1.ReadFile: FOUND [%s]', [rfn]), MSG_NOTIFY); - end - else - begin - //if rfn <> ExtractFileName(FileName) then e_WriteLog(Format('TWADEditor_1.ReadFile: FOUND [%s]', [rfn]), MSG_NOTIFY); + e_WriteLog(Format('TWADEditor_1.ReadFile: error looking for [%s]', [FileName]), MSG_NOTIFY); + exit; end; {$IFDEF SFS_DWFAD_DEBUG} if gSFSDebug then e_WriteLog(Format('TWADEditor_1.ReadFile: FOUND [%s]', [rfn]), MSG_NOTIFY); {$ENDIF} // cache this wad - rfn := path+rfn; try - if not SFSAddDataFile(rfn) then exit; + if gSFSFastMode then + begin + if not SFSAddDataFile(rfn, true) then exit; + end + else + begin + if not SFSAddDataFileTemp(rfn, true) then exit; + end; except exit; end; @@ -283,17 +307,8 @@ begin if fIter = nil then Exit; fFileName := rfn; {$IFDEF SFS_DWFAD_DEBUG} - if gSFSDebug then - e_WriteLog(Format('TWADEditor_1.ReadFile: [%s] opened', [fFileName]), MSG_NOTIFY); + if gSFSDebug then e_WriteLog(Format('TWADEditor_1.ReadFile: [%s] opened', [fFileName]), MSG_NOTIFY); {$ENDIF} - { - for f := 0 to fIter.Count-1 do - begin - fi := fIter.Files[f]; - if fi = nil then continue; - e_WriteLog(Format('[%s]: [%s : %s] %u', [fFileName, fi.path, fi.name, fi.size]), MSG_NOTIFY); - end; - } Result := True; end; @@ -324,7 +339,7 @@ begin try st := TSFSMemoryStreamRO.Create(Data, Len); - if not SFSAddSubDataFile(fn, st) then + if not SFSAddSubDataFile(fn, st, true) then begin st.Free; Exit;