From 14cee4c15272f8b8ff2a968a23d5466a4603f536 Mon Sep 17 00:00:00 2001 From: Karoly Balogh Date: Tue, 5 Dec 2023 11:25:03 +0100 Subject: [PATCH] human68k: implemented do_getdir (based on the Atari version) --- rtl/human68k/h68kdos.inc | 2 ++ rtl/human68k/sysdir.inc | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/rtl/human68k/h68kdos.inc b/rtl/human68k/h68kdos.inc index 1163a38734..c68cf00acc 100644 --- a/rtl/human68k/h68kdos.inc +++ b/rtl/human68k/h68kdos.inc @@ -106,6 +106,7 @@ const SEEK_FROM_END = 2; procedure h68kdos_exit; noreturn; syscall $ff00; +function h68kdos_curdrv: longint; syscall $ff17; function h68kdos_gettim2: longint; syscall $ff27; function h68kdos_mkdir(name: pchar): longint; syscall $ff39; function h68kdos_rmdir(name: pchar): longint; syscall $ff3a; @@ -117,6 +118,7 @@ function h68kdos_read(fileno: word; buffer: pointer; len: longint): longint; sys function h68kdos_write(fileno: word; buffer: pointer; len: longint): longint; syscall $ff40; function h68kdos_delete(name: pchar): longint; syscall $ff41; function h68kdos_seek(fileno: word; offset: longint; mode: word): longint; syscall $ff42; +function h68kdos_curdir(driveno: word; buffer: pointer): longint; syscall $ff47; function h68kdos_malloc(size: longint): pointer; syscall $ff48; function h68kdos_mfree(ptr: pointer): longint; syscall $ff49; function h68kdos_setblock(ptr: pointer; size: longint): longint; syscall $ff4a; diff --git a/rtl/human68k/sysdir.inc b/rtl/human68k/sysdir.inc index a56d05dc10..d0e685b192 100644 --- a/rtl/human68k/sysdir.inc +++ b/rtl/human68k/sysdir.inc @@ -55,5 +55,26 @@ end; procedure do_GetDir (DriveNr: byte; var Dir: RawByteString); +var + dosResult: longint; + pathbuf: array[0..259] of AnsiChar; begin + Dir := ''; + + dosResult:=h68kdos_curdir(DriveNr,@pathbuf[2]); + if dosResult < 0 then + begin + Error2InOutRes(dosResult); + exit; + end; + + if DriveNr = 0 then + DriveNr := h68kdos_curdrv + 1; + + { return a full path, including drive } + pathbuf[0]:=AnsiChar(ord('A') + DriveNr - 1); + pathbuf[1]:=DriveSeparator; + + Dir:=pathbuf; + SetCodePage(Dir,DefaultSystemCodePage,false); end;