index ac9e74781a103a295d65ade2b3b43b520ebe725a..d41acfaa8a83a67b96b9d2f3f1ff5ab0cbf7345d 100644 (file)
--- a/src/shared/WADEDITOR.pas
+++ b/src/shared/WADEDITOR.pas
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
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;
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;
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);
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;
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;
try
st := TSFSMemoryStreamRO.Create(Data, Len);
- if not SFSAddSubDataFile(fn, st) then
+ if not SFSAddSubDataFile(fn, st, true) then
begin
st.Free;
Exit;