فهرست منبع

human68k: implemented some trivial functions in sysutils

Karoly Balogh 1 سال پیش
والد
کامیت
2648f8151d
2فایلهای تغییر یافته به همراه28 افزوده شده و 9 حذف شده
  1. 10 0
      rtl/human68k/h68kdos.inc
  2. 18 9
      rtl/human68k/sysutils.pp

+ 10 - 0
rtl/human68k/h68kdos.inc

@@ -99,6 +99,15 @@ type
   end;
   Ph68kdos_startup = ^Th68kdos_startup;
 
+type
+  Th68kdos_freeinfo = record
+    free: word;
+    max: word;
+    sectors: word;
+    bytes: word;
+  end;
+  Ph68kdos_freeinfo = ^Th68kdos_freeinfo;
+
 // as used by seek
 const
     SEEK_FROM_START   = 0;
@@ -110,6 +119,7 @@ function h68kdos_chgdrv(newdrv: word): longint; syscall $ff0e;
 function h68kdos_curdrv: longint; syscall $ff17;
 function h68kdos_gettim2: longint; syscall $ff27;
 function h68kdos_vernum: longint; syscall $ff30;
+function h68kdos_dskfre(drive: word; buffer: Ph68kdos_freeinfo): longint; syscall $ff36;
 function h68kdos_mkdir(name: pchar): longint; syscall $ff39;
 function h68kdos_rmdir(name: pchar): longint; syscall $ff3a;
 function h68kdos_chdir(name: pchar): longint; syscall $ff3b;

+ 18 - 9
rtl/human68k/sysutils.pp

@@ -60,6 +60,8 @@ uses
 { Include platform independent implementation part }
 {$i sysutils.inc}
 
+{$i h68kdos.inc}
+
 {****************************************************************************
                               File Functions
 ****************************************************************************}
@@ -127,7 +129,7 @@ begin
   if (Count<=0) then
     exit;
 
-  FileRead:=-1;
+  FileRead:=h68kdos_read(Handle, @Buffer, Count);
   if FileRead < -1 then
     FileRead:=-1;
 end;
@@ -139,7 +141,7 @@ begin
   if (Count<=0) then 
     exit;
 
-  FileWrite:=-1;
+  FileWrite:=h68kdos_write(Handle, @Buffer, Count);
   if FileWrite < -1 then
     FileWrite:=-1;
 end;
@@ -151,7 +153,8 @@ var
 begin
   FileSeek:=-1;
 
-  dosResult:=-1;
+  { Human68k seek mode flags are actually compatible to DOS/TP }
+  dosResult:=h68kdos_seek(Handle, FOffset, Origin);
   if dosResult < 0 then
     exit;
 
@@ -166,6 +169,7 @@ end;
 
 procedure FileClose(Handle: THandle);
 begin
+  h68kdos_close(Handle);
 end;
 
 
@@ -177,13 +181,16 @@ end;
 
 function DeleteFile(const FileName: RawByteString) : Boolean;
 begin
-  DeleteFile:=false;
+  DeleteFile:=h68kdos_delete(PAnsiChar(FileName)) >= 0;
 end;
 
 
 function RenameFile(const OldName, NewName: RawByteString): Boolean;
 begin
-  RenameFile:=false;
+  if hi(human68k_vernum) <= 2 then
+    RenameFile:=h68kdos_rename_v2(PAnsiChar(oldname),PAnsiChar(newname)) >= 0
+  else
+    RenameFile:=h68kdos_rename_v3(PAnsiChar(oldname),PAnsiChar(newname)) >= 0;
 end;
 
 
@@ -307,27 +314,29 @@ end;
 function DiskSize(Drive: Byte): Int64;
 var
   dosResult: longint;
+  fi: Th68kdos_freeinfo;
 begin
   DiskSize := -1;
 
-  dosResult:=-1;
+  dosResult:=h68kdos_dskfre(drive,@fi);
   if dosResult < 0 then
     exit;
 
-  DiskSize:=0;
+  DiskSize:=fi.max * fi.sectors * fi.bytes;
 end;
 
 function DiskFree(Drive: Byte): Int64;
 var
   dosResult: longint;
+  fi: Th68kdos_freeinfo;
 begin
   DiskFree := -1;
 
-  dosResult:=-1;
+  dosResult:=h68kdos_dskfre(drive,@fi);
   if dosResult < 0 then
     exit;
 
-  DiskFree:=0;
+  DiskFree:=fi.free * fi.sectors * fi.bytes;
 end;
 
 function DirectoryExists(const Directory: RawByteString; FollowLink : Boolean): Boolean;