X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fengine%2Fe_res.pas;h=a4f9da50bd829c9fc28605d850bd0b60df8e12f7;hp=e2f888955076063cf022a58d1c3bda40b2be01ce;hb=a959696d242bc66e6890d281eb6e5d627c2588e9;hpb=93f620df25ad634372657a64d609dcaf44e718bd diff --git a/src/engine/e_res.pas b/src/engine/e_res.pas index e2f8889..a4f9da5 100644 --- a/src/engine/e_res.pas +++ b/src/engine/e_res.pas @@ -48,6 +48,9 @@ interface 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; @@ -215,6 +218,32 @@ implementation 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