Browse Source

human68k: implemented do_rename

Karoly Balogh 1 year ago
parent
commit
005cb5914c
2 changed files with 26 additions and 0 deletions
  1. 6 0
      rtl/human68k/h68kdos.inc
  2. 20 0
      rtl/human68k/sysfile.inc

+ 6 - 0
rtl/human68k/h68kdos.inc

@@ -125,3 +125,9 @@ function h68kdos_malloc(size: longint): pointer; syscall $ff48;
 function h68kdos_mfree(ptr: pointer): longint; syscall $ff49;
 function h68kdos_mfree(ptr: pointer): longint; syscall $ff49;
 function h68kdos_setblock(ptr: pointer; size: longint): longint; syscall $ff4a;
 function h68kdos_setblock(ptr: pointer; size: longint): longint; syscall $ff4a;
 procedure h68kdos_exit2(code: smallint); noreturn; syscall $ff4c;
 procedure h68kdos_exit2(code: smallint); noreturn; syscall $ff4c;
+
+{ * human68k v2 only calls * }
+function h68kdos_rename_v2(oldname: PChar; newname: PChar): longint; syscall $ff56;
+
+{ * human68k v3 only calls * }
+function h68kdos_rename_v3(oldname: PChar; newname: PChar): longint; syscall $ff86;

+ 20 - 0
rtl/human68k/sysfile.inc

@@ -46,7 +46,27 @@ end;
 
 
 
 
 procedure do_rename(p1,p2 : pchar; p1changeable, p2changeable: boolean);
 procedure do_rename(p1,p2 : pchar; p1changeable, p2changeable: boolean);
+var
+  oldp1, oldp2 : PAnsiChar;
+  dosResult: longint;
 begin
 begin
+  oldp1:=p1;
+  oldp2:=p2;
+  DoDirSeparators(p1,p1changeable);
+  DoDirSeparators(p2,p2changeable);
+
+  if hi(human68k_vernum) <= 2 then
+    dosResult:=h68kdos_rename_v2(p1,p2)
+  else
+    dosResult:=h68kdos_rename_v3(p1,p2);
+
+  if dosResult < 0 then
+    Error2InOutRes(dosResult);
+
+  if oldp1<>p1 then
+    FreeMem(p1);
+  if oldp2<>p2 then
+    FreeMem(p2);
 end;
 end;