X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=inline;f=src%2Fshared%2Futils.pas;h=20706c661dae397f8a0b4914ab00e9caa765a252;hb=87c3a28dda4534eec3fde4ef06dc5f324b2c4b3b;hp=5ef58845df0057b088866ef616bbf1e1f6b3ebcf;hpb=c1d7385c2d86d001a256775480d713727b0615c5;p=d2df-sdl.git diff --git a/src/shared/utils.pas b/src/shared/utils.pas index 5ef5884..20706c6 100644 --- a/src/shared/utils.pas +++ b/src/shared/utils.pas @@ -18,7 +18,7 @@ unit utils; interface uses - SysUtils, Classes; + SysUtils, Classes, md5; // ////////////////////////////////////////////////////////////////////////// // @@ -87,6 +87,8 @@ function int64ToStrComma (i: Int64): AnsiString; function upcase1251 (ch: AnsiChar): AnsiChar; inline; function locase1251 (ch: AnsiChar): AnsiChar; inline; +function IsValid1251 (ch: Word): Boolean; +function IsPrintable1251 (ch: AnsiChar): Boolean; function toLowerCase1251 (const s: AnsiString): AnsiString; @@ -277,6 +279,21 @@ procedure CopyMemory (Dest: Pointer; Src: Pointer; Len: LongWord); inline; procedure ZeroMemory (Dest: Pointer; Len: LongWord); inline; +type + TDiskFileInfo = record + diskName: AnsiString; + size: LongInt; + age: LongInt; + // not changed by info getter; used in other parts of the code + userName: AnsiString; + tag: Integer; + hash: TMD5Digest; + udata: Pointer; + end; + +function GetDiskFileInfo (fname: AnsiString; var info: TDiskFileInfo): Boolean; + + implementation uses @@ -946,6 +963,16 @@ begin result := ch; end; +function IsValid1251 (ch: Word): Boolean; +begin + result := (ch = Ord('?')) or (wc2shitmap[ch] <> '?') +end; + +function IsPrintable1251 (ch: AnsiChar): Boolean; +begin + result := (ch >= #32) and (ch <> #127) +end; + function strEquCI1251 (const s0, s1: AnsiString): Boolean; var @@ -1997,6 +2024,32 @@ begin end; +function GetDiskFileInfo (fname: AnsiString; var info: TDiskFileInfo): Boolean; +var + age: LongInt; + size: LongInt; + handle: THandle; +begin + result := false; + if (length(fname) = 0) then exit; + if not findFileCI(fname) then exit; + // get age + age := FileAge(fname); + if (age = -1) then exit; + // get size + handle := FileOpen(fname, fmOpenRead or fmShareDenyNone); + if (handle = THandle(-1)) then exit; + size := FileSeek(handle, 0, fsFromEnd); + FileClose(handle); + if (size = -1) then exit; + // fill info + info.diskName := fname; + info.size := size; + info.age := age; + result := true; +end; + + (* var ss: ShortString;