From 211a219d75e7b7f17f3cf8ade6ac5e2565d97953 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 28 Aug 1998 10:48:04 +0000 Subject: [PATCH] * fixed chdir with drive changing * updated checklfn from mailinglist --- rtl/dos/go32v2/system.pp | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/rtl/dos/go32v2/system.pp b/rtl/dos/go32v2/system.pp index 22da962d04..ab03e4fa6b 100644 --- a/rtl/dos/go32v2/system.pp +++ b/rtl/dos/go32v2/system.pp @@ -984,9 +984,26 @@ end; procedure chdir(const s : string);[IOCheck]; +var + regs : trealregs; begin If InOutRes <> 0 then exit; +{ First handle Drive changes } + if (length(s)>=2) and (s[2]=':') then + begin + regs.realedx:=(ord(s[1]) and (not 32))-ord('A'); + regs.realeax:=$0e00; + sysrealintr($21,regs); + regs.realeax:=$1900; + sysrealintr($21,regs); + if byte(regs.realeax)<>byte(regs.realedx) then + begin + Inoutres:=15; + exit; + end; + end; +{ do the normal dos chdir } DosDir($3b,s); end; @@ -1050,21 +1067,22 @@ end; function CheckLFN:boolean; var regs : TRealRegs; - Buffers, RootName : pchar; begin - RootName:='C:\'+#0; - Buffers:=' '+#0; +{ Check LFN API on drive c:\ } + RootName:='C:\'; syscopytodos(longint(RootName),strlen(RootName)+1); +{ Call 'Get Volume Information' ($71A0) } regs.realeax:=$71a0; regs.reales:=tb_segment; regs.realedi:=tb_offset; - regs.realecx:=strlen(Buffers)+1; + regs.realecx:=32; regs.realds:=tb_segment; regs.realedx:=tb_offset; + regs.realflags:=carryflag; sysrealintr($21,regs); - syscopyfromdos(longint(Buffers),strlen(Buffers)+1); - CheckLFN:=(regs.realecx=255); +{ If carryflag=0 and LFN API bit in ebx is set then use Long file names } + CheckLFN:=(regs.realflags and carryflag=0) and (regs.realebx and $4000=$4000); end; {$endif RTLLITE} @@ -1088,7 +1106,11 @@ Begin End. { $Log$ - Revision 1.17 1998-08-27 10:30:51 pierre + Revision 1.18 1998-08-28 10:48:04 peter + * fixed chdir with drive changing + * updated checklfn from mailinglist + + Revision 1.17 1998/08/27 10:30:51 pierre * go32v1 RTL did not compile (LFNsupport outside go32v2 defines !) I renamed tb_selector to tb_segment because it is a real mode segment as opposed to