Browse Source

+ implemented do_truncate

carl 27 years ago
parent
commit
52b20dbba5
1 changed files with 34 additions and 2 deletions
  1. 34 2
      rtl/amiga/sysamiga.pas

+ 34 - 2
rtl/amiga/sysamiga.pas

@@ -153,6 +153,7 @@ const
     _LVODupLock           =  -96;
     _LVODupLock           =  -96;
     _LVOExamine           = -102;
     _LVOExamine           = -102;
     _LVOParentDir         = -210;
     _LVOParentDir         = -210;
+    _LVOSetFileSize       = -456;
 
 
       { Errors from IoErr(), etc. }
       { Errors from IoErr(), etc. }
       ERROR_NO_FREE_STORE              = 103;
       ERROR_NO_FREE_STORE              = 103;
@@ -941,7 +942,32 @@ end;
 
 
 procedure do_truncate (handle,pos:longint);
 procedure do_truncate (handle,pos:longint);
 begin
 begin
-  {!!!!!!!!!!!!}
+      { Point to the end of the file }
+      { with the new size            }
+      asm
+      @noerr_one:                          { Seek a second time            }
+             move.l  a6,d6                 { Save base pointer             }
+
+             move.l  handle,d1
+             move.l  d2,-(sp)
+             move.l  d3,-(sp)              { save registers                }
+
+             move.l  pos,d2
+             move.l  #-1,d3                { Setup correct move type     }
+             move.l  _DOSBase,a6           { from beginning of file      }
+             jsr    _LVOSetFileSize(a6)
+
+             move.l  (sp)+,d3              { restore registers }
+             move.l  (sp)+,d2
+             cmp.l   #-1,d0                { is there a file access error? }
+             bne     @noerr
+             jsr     _LVOIoErr(a6)
+             move.w  d0,errno              { Global variable, so no need    }
+      @noerr:                              { to restore base pointer now    }
+             move.l  d6,a6                 { Restore base pointer           }
+      end;
+  If Errno <> 0 then
+    Error2InOut;
 end;
 end;
 
 
 
 
@@ -1114,6 +1140,9 @@ var
   FIB :pFileInfoBlock;
   FIB :pFileInfoBlock;
 begin
 begin
   If InOutRes <> 0 then exit;
   If InOutRes <> 0 then exit;
+  if s = '..' then
+   Begin
+   end;
   alock := 0;
   alock := 0;
   fib:=nil;
   fib:=nil;
   new(fib);
   new(fib);
@@ -1362,7 +1391,10 @@ end.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.6  1998-07-02 12:37:52  carl
+  Revision 1.7  1998-07-09 11:54:57  carl
+    + implemented do_truncate
+
+  Revision 1.6  1998/07/02 12:37:52  carl
     * IOCheck for chdir,rmdir and mkdir as in TP
     * IOCheck for chdir,rmdir and mkdir as in TP
 
 
   Revision 1.5  1998/07/01 14:30:56  carl
   Revision 1.5  1998/07/01 14:30:56  carl