Browse Source

+ Added filetruncate

michael 26 years ago
parent
commit
a7761fce12
2 changed files with 72 additions and 12 deletions
  1. 7 1
      rtl/go32v2/filutil.inc
  2. 65 11
      rtl/win32/filutil.inc

+ 7 - 1
rtl/go32v2/filutil.inc

@@ -122,6 +122,9 @@ Regs.Ebx := Handle;
 RealIntr($21, Regs);
 RealIntr($21, Regs);
 end;
 end;
 
 
+Function FileTruncate (Handle,Size: Longint) : boolean;
+begin
+end;
 
 
 Function FileAge (Const FileName : String): Longint;
 Function FileAge (Const FileName : String): Longint;
 var Handle: longint;
 var Handle: longint;
@@ -321,7 +324,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.1  1998-12-21 13:07:02  peter
+  Revision 1.2  1999-02-03 11:42:31  michael
+  + Added filetruncate
+
+  Revision 1.1  1998/12/21 13:07:02  peter
     * use -FE
     * use -FE
 
 
   Revision 1.4  1998/10/29 13:16:19  michael
   Revision 1.4  1998/10/29 13:16:19  michael

+ 65 - 11
rtl/win32/filutil.inc

@@ -17,57 +17,108 @@
 
 
 Function FileOpen (Const FileName : string; Mode : Integer) : Longint;
 Function FileOpen (Const FileName : string; Mode : Integer) : Longint;
 
 
-Begin
-  //!! Needs implementing    
+const
+  AccessMode: array[0..2] of Integer = (
+    GENERIC_READ,
+    GENERIC_WRITE,
+    GENERIC_READ or GENERIC_WRITE);
+  ShareMode: array[0..4] of Integer = (
+               0,
+               0,
+               FILE_SHARE_READ,
+               FILE_SHARE_WRITE,
+               FILE_SHARE_READ or FILE_SHARE_WRITE);
+
+Var FN : string;
+
+begin
+  FN:=FileName+#0;
+  Result := CreateFile(@FN[1], AccessMode[Mode and 3],
+                         ShareMode[(Mode and $F0) shr 4], nil, OPEN_EXISTING,
+                       FILE_ATTRIBUTE_NORMAL, 0);
 end;
 end;
 
 
 
 
 Function FileCreate (Const FileName : String) : Longint;
 Function FileCreate (Const FileName : String) : Longint;
 
 
+Var FN : string;
+
 begin
 begin
-  //!! Needs implementing    
+  FN:=FileName+#0;
+ Result := CreateFile(@FN[1], GENERIC_READ or GENERIC_WRITE,
+     0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
 end;
 end;
 
 
 
 
 Function FileRead (Handle : Longint; Var Buffer; Count : longint) : Longint;
 Function FileRead (Handle : Longint; Var Buffer; Count : longint) : Longint;
 
 
+Var res : Longint;
+
 begin
 begin
-  //!! Needs implementing    
+  if not ReadFile(Handle, @Buffer, Count, @res, nil) then res := -1;
+  FileRead:=Res;
 end;
 end;
 
 
 
 
 Function FileWrite (Handle : Longint; Var Buffer; Count : Longint) : Longint;
 Function FileWrite (Handle : Longint; Var Buffer; Count : Longint) : Longint;
 
 
+Var Res : longint;
+
 begin
 begin
-  //!! Needs implementing    
+  if not WriteFile(Handle, @Buffer, Count, @Res, nil) then Res:= -1;
+  FileWrite:=Res;
 end;
 end;
 
 
 
 
 Function FileSeek (Handle,Offset,Origin : Longint) : Longint;
 Function FileSeek (Handle,Offset,Origin : Longint) : Longint;
 
 
 begin
 begin
-  //!! Needs implementing    
+  Result := SetFilePointer(Handle, Offset, nil, Origin);
 end;
 end;
 
 
 
 
 Procedure FileClose (Handle : Longint);
 Procedure FileClose (Handle : Longint);
 
 
 begin
 begin
-  //!! Needs implementing    
+  CloseHandle(Handle);
+end;
+
+Function FileTruncate (Handle,Size: Longint) : boolean;
+
+begin
 end;
 end;
 
 
 
 
 Function FileAge (Const FileName : String): Longint;
 Function FileAge (Const FileName : String): Longint;
 
 
-begin
-  //!! Needs implementing    
+var
+  Handle: THandle;
+  FindData: TWin32FindData;
+  LocalFileTime: TFileTime;
+  Fn : String;
+  
+begin
+  FN:=FN+#0;
+  Handle := FindFirstFile(@FN[1], @FindData);
+  if Handle <> INVALID_HANDLE_VALUE then
+    begin
+    Windows.FindClose(Handle);
+    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
+      begin
+{
+      FileTimeToLocalFileTime(FindData.ftLastWriteTime, @LocalFileTime);
+      if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
+                               LongRec(Result).Lo) then Exit;
+}      end;
+    end;
+  Result := -1;
 end;
 end;
 
 
 
 
 Function FileExists (Const FileName : String) : Boolean;
 Function FileExists (Const FileName : String) : Boolean;
 
 
 begin
 begin
-  //!! Needs implementing    
+  Result := FileAge(FileName) <> -1;
 end;
 end;
 
 
 
 
@@ -143,7 +194,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.1  1998-10-11 12:21:01  michael
+  Revision 1.2  1999-02-03 11:41:30  michael
+  + Added filetruncate
+
+  Revision 1.1  1998/10/11 12:21:01  michael
   Added file calls. Implemented for linux only
   Added file calls. Implemented for linux only
 
 
 }
 }