diff --git a/src/engine/e_res.pas b/src/engine/e_res.pas
index e2f888955076063cf022a58d1c3bda40b2be01ce..a4f9da50bd829c9fc28605d850bd0b60df8e12f7 100644 (file)
--- a/src/engine/e_res.pas
+++ b/src/engine/e_res.pas
function e_FindResource (dirs: SSArray; var name: AnsiString; nameIsDir: Boolean = false): Boolean;
function e_FindWad (dirs: SSArray; name: AnsiString): AnsiString;
function e_FindResource (dirs: SSArray; var name: AnsiString; nameIsDir: Boolean = false): Boolean;
function e_FindWad (dirs: SSArray; name: AnsiString): AnsiString;
+ {--- returns relative wad name; never empty string ---}
+ function e_FindWadRel (dirs: SSArray; name: AnsiString): AnsiString;
+
{--- append dirs to 'path.wad:\file'. if disk is void, append defWad ---}
function e_GetResourcePath (dirs: SSArray; path: AnsiString; defWad: AnsiString): AnsiString;
{--- append dirs to 'path.wad:\file'. if disk is void, append defWad ---}
function e_GetResourcePath (dirs: SSArray; path: AnsiString; defWad: AnsiString): AnsiString;
end
end;
end
end;
+ function e_FindWadRel (dirs: SSArray; name: AnsiString): AnsiString;
+ var
+ s: AnsiString;
+ maxpfx: AnsiString = '';
+ pfx: AnsiString;
+ begin
+ result := name;
+ if not findFileCI(name) then exit;
+ for s in dirs do
+ begin
+ if (length(s) = 0) then continue;
+ if (length(name) <= length(s)) then continue;
+ if (length(s) < length(maxpfx)) then continue;
+ pfx := s;
+ if not findFileCI(pfx, true) then continue;
+ if (pfx[length(pfx)] <> '/') and (pfx[length(pfx)] <> '\') then pfx := pfx+'/';
+ if (length(pfx)+1 > length(name)) then continue;
+ if (strEquCI1251(copy(name, 1, length(pfx)), pfx)) then maxpfx := pfx;
+ end;
+ if (length(maxpfx) > 0) then
+ begin
+ result := name;
+ Delete(result, 1, length(maxpfx));
+ end;
+ end;
+
function e_GetResourcePath (dirs: SSArray; path: AnsiString; defWad: AnsiString): AnsiString;
var diskName, fileName: AnsiString;
begin
function e_GetResourcePath (dirs: SSArray; path: AnsiString; defWad: AnsiString): AnsiString;
var diskName, fileName: AnsiString;
begin