From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- delphi/Awkward/utils/io.pas | 249 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 delphi/Awkward/utils/io.pas (limited to 'delphi/Awkward/utils/io.pas') diff --git a/delphi/Awkward/utils/io.pas b/delphi/Awkward/utils/io.pas new file mode 100644 index 0000000..aedbfeb --- /dev/null +++ b/delphi/Awkward/utils/io.pas @@ -0,0 +1,249 @@ +unit IO; + +interface +uses windows; + +function Reset (fname:PWideChar):THANDLE; overload; +function Reset (fname:PAnsiChar):THANDLE; overload; +function ReWrite(fname:PWideChar):THANDLE; overload; +function ReWrite(fname:PAnsiChar):THANDLE; overload; +function Append (fname:PWideChar):THANDLE; overload; +function Append (fname:PAnsiChar):THANDLE; overload; + +function GetFSize(name:PWideChar):dword; overload; +function GetFSize(name:PAnsiChar):dword; overload; +function FileExists(fname:PAnsiChar):Boolean; overload; +function FileExists(fname:PWideChar):Boolean; overload; + +function Skip(f:THANDLE;count:integer):integer; +function Seek(f:THANDLE;pos:integer):integer; +function FilePos(f:THANDLE):dword; +function FileSize(f:THANDLE):dword; +function Eof(f:THANDLE):boolean; + +function BlockRead (f:THANDLE;var buf;size:integer):dword; +function BlockWrite(f:THANDLE;var buf;size:integer):dword; + +function ForceDirectories(path:PAnsiChar):boolean; overload; +function ForceDirectories(path:PWideChar):boolean; overload; +function DirectoryExists(Directory:PAnsiChar):Boolean; overload; +function DirectoryExists(Directory:PWideChar):Boolean; overload; + +implementation + +function Reset(fname:PWideChar):THANDLE; +begin + result:=CreateFileW(fname,GENERIC_READ,FILE_SHARE_READ+FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0); +end; + +function Reset(fname:PAnsiChar):THANDLE; +begin + result:=CreateFileA(fname,GENERIC_READ,FILE_SHARE_READ+FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0); +end; + +function Append(fname:PWideChar):THANDLE; +begin + result:=CreateFileW(fname,GENERIC_WRITE,FILE_SHARE_READ,nil,OPEN_ALWAYS,0,0); + SetFilePointer(result,0,nil,FILE_END); +end; + +function Append(fname:PAnsiChar):THANDLE; +begin + result:=CreateFileA(fname,GENERIC_WRITE,FILE_SHARE_READ,nil,OPEN_ALWAYS,0,0); + SetFilePointer(result,0,nil,FILE_END); +end; + +function ReWrite(fname:PWideChar):THANDLE; overload; +begin + result:=CreateFileW(fname,GENERIC_WRITE,FILE_SHARE_READ,nil,CREATE_ALWAYS,0,0); +end; + +function ReWrite(fname:PAnsiChar):THANDLE; overload; +begin + result:=CreateFileA(fname,GENERIC_WRITE,FILE_SHARE_READ,nil,CREATE_ALWAYS,0,0); +end; + +function Skip(f:THANDLE;count:integer):integer; +begin + result:=SetFilePointer(f,count,nil,FILE_CURRENT); +end; + +function Eof(f:THANDLE):boolean; +begin + result:=FilePos(f)>=FileSize(f); +end; + +function Seek(f:THANDLE;pos:integer):integer; +begin + result:=SetFilePointer(f,pos,nil,FILE_BEGIN); +end; + +function FilePos(f:THANDLE):dword; +begin + result:=SetFilePointer(f,0,nil,FILE_CURRENT); +end; + +function FileSize(f:THANDLE):dword; +begin + result:=GetFileSize(f,nil); +end; + +function BlockRead(f:THANDLE;var buf;size:integer):dword; +begin + ReadFile(f,buf,size,result,nil); +end; + +function BlockWrite(f:THANDLE;var buf;size:integer):dword; +begin + WriteFile(f,buf,size,result,nil); +end; + +function GetFSize(name:PWideChar):dword; +var + lRec:WIN32_FIND_DATAW; + h:THANDLE; +begin + h:=FindFirstFileW(name,lRec); + if h=THANDLE(INVALID_HANDLE_VALUE) then + result:=0 + else + begin + result:=lRec.nFileSizeLow; + FindClose(h); + end; +end; + +function GetFSize(name:PAnsiChar):dword; +var + lRec:WIN32_FIND_DATAA; + h:THANDLE; +begin + h:=FindFirstFileA(name,lRec); + if h=THANDLE(INVALID_HANDLE_VALUE) then + result:=0 + else + begin + result:=lRec.nFileSizeLow; + FindClose(h); + end; +end; + +function ForceDirectories(path:PAnsiChar):boolean; +var + p,pc:PAnsiChar; + i:cardinal; + c:AnsiChar; +begin + result:=true; + if DirectoryExists(path) then exit; + if (path<>nil) and (path^<>#0) then + begin + i:=lstrlena(path)+1; + GetMem(pc,i); + move(path^,pc^,i); + p:=pc; + if (p^ in ['A'..'Z','a'..'z']) and (p[1]=':') then inc(p,2); + if p^ in ['/','\'] then inc(p); + c:=#0; + while p^<>#0 do + begin + c:=' '; + if (p^ in ['/','\']) and (p[1]<>#0) then + begin + c:=p^; + p^:=#0; + if not CreateDirectoryA(pc,nil) then + begin + if GetLastError<>ERROR_ALREADY_EXISTS then + begin + result:=false; + FreeMem(pc); + exit; + end; + end; + p^:=c; + end; + inc(p); + end; + if (c<>#0) and (c=' ') then + if not CreateDirectoryA(pc,nil) then + result:=false; + FreeMem(pc); + end; +end; + +function ForceDirectories(path:PWideChar):boolean; +var + p,pc:PWideChar; + i:cardinal; + c:WideChar; +begin + result:=true; + if DirectoryExists(path) then exit; + if (path<>nil) and (path^<>#0) then + begin + i:=(lstrlenw(path)+1)*SizeOf(WideChar); + GetMem(pc,i); + move(path^,pc^,i); + p:=pc; + if (((p^>='A') and (p^<='Z')) or ((p^>='a') and (p^<='z'))) and (p[1]=':') then inc(p,2); + if (p^='/') or (p^='\') then inc(p); + c:=#0; + while p^<>#0 do + begin + c:=' '; + if ((p^='/') or (p^='\')) and (p[1]<>#0) then + begin + c:=p^; + p^:=#0; + if not CreateDirectoryW(pc,nil) then + if GetLastError<>ERROR_ALREADY_EXISTS then + begin + result:=false; + FreeMem(pc); + exit; + end; + p^:=c; + end; + inc(p); + end; + if (c<>#0) and (c=' ') then + if not CreateDirectoryW(pc,nil) then + result:=false; + FreeMem(pc); + end; +end; + +function DirectoryExists(Directory:PAnsiChar):Boolean; +var + Code: Integer; +begin + Code := GetFileAttributesA(Directory); + Result := (Code<>-1) and ((Code and FILE_ATTRIBUTE_DIRECTORY)<>0); +end; + +function DirectoryExists(Directory:PWideChar):Boolean; +var + Code: Integer; +begin + Code := GetFileAttributesW(Directory); + Result := (Code<>-1) and ((Code and FILE_ATTRIBUTE_DIRECTORY)<>0); +end; + +function FileExists(fname:PAnsiChar):Boolean; +var + Code: Integer; +begin + Code := GetFileAttributesA(fname); + Result := (Code<>-1) and ((Code and FILE_ATTRIBUTE_DIRECTORY)=0); +end; + +function FileExists(fname:PWideChar):Boolean; +var + Code: Integer; +begin + Code := GetFileAttributesW(fname); + Result := (Code<>-1) and ((Code and FILE_ATTRIBUTE_DIRECTORY)=0); +end; + +end. -- cgit v1.2.3