X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2Futils.pas;h=73c7274740d204b637a1b5443cb2cd1ea57e2f37;hb=d48835ed248033dcbc23b465a0d7408aa5c2ae3b;hp=59a49f251dbb3b927cfea195b442f38ab3656ae8;hpb=e4b651a876eccee3cdc7f96cef3203db81db369b;p=d2df-sdl.git diff --git a/src/shared/utils.pas b/src/shared/utils.pas index 59a49f2..73c7274 100644 --- a/src/shared/utils.pas +++ b/src/shared/utils.pas @@ -100,6 +100,9 @@ function utf8to1251 (s: AnsiString): AnsiString; // nobody cares about shitdoze, so i'll use the same code path for it function findFileCI (var pathname: AnsiString; lastIsDir: Boolean=false): Boolean; +// return fixed AnsiString or empty AnsiString +function findDiskWad (fname: AnsiString): AnsiString; + // they throws function openDiskFileRO (pathname: AnsiString): TStream; function createDiskFile (pathname: AnsiString): TStream; @@ -1122,6 +1125,34 @@ begin end; +const fileExtensions: array [0..5] of AnsiString = ('.wad', '.dfzip', '.dfwad', '.pk3', '.pak', '.zip'); + +function findDiskWad (fname: AnsiString): AnsiString; +var + origExt: AnsiString = ''; + newExt: AnsiString = ''; +begin + result := ''; + //writeln('findDiskWad00: fname=<', fname, '>'); + if (findFileCI(fname)) then begin result := fname; exit; end; + origExt := getFilenameExt(fname); + fname := forceFilenameExt(fname, ''); + //writeln(' findDiskWad01: fname=<', fname, '>; origExt=<', origExt, '>'); + for newExt in fileExtensions do + begin + //writeln(' findDiskWad02: fname=<', fname, '>; origExt=<', origExt, '>; newExt=<', newExt, '>'); + if (StrEquCI1251(newExt, origExt)) then + begin + //writeln(' SKIP'); + continue; + end; + result := fname+newExt; + if (findFileCI(result)) then exit; + end; + result := ''; +end; + + function openDiskFileRO (pathname: AnsiString): TStream; begin if not findFileCI(pathname) then raise Exception.Create('can''t open file "'+pathname+'"');