Browse Source

* 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
a protected mode selector
Fixed it for go32v1 (remove the $E0000000 offset !)

pierre 27 years ago
parent
commit
2f163d10d7
3 changed files with 65 additions and 40 deletions
  1. 27 19
      rtl/dos/dos.pp
  2. 17 5
      rtl/dos/go32.pp
  3. 21 16
      rtl/dos/go32v2/system.pp

+ 27 - 19
rtl/dos/dos.pp

@@ -612,10 +612,10 @@ begin
   dosregs.si:=1; { use ms-dos time }
   dosregs.ecx:=attr;
   dosregs.edx:=tb_offset+Sizeof(LFNSearchrec)+1;
-  dosmemput(tb_selector,tb_offset+Sizeof(LFNSearchrec)+1,path^,strlen(path)+1);
-  dosregs.ds:=tb_selector;
+  dosmemput(tb_segment,tb_offset+Sizeof(LFNSearchrec)+1,path^,strlen(path)+1);
+  dosregs.ds:=tb_segment;
   dosregs.edi:=tb_offset;
-  dosregs.es:=tb_selector;
+  dosregs.es:=tb_segment;
   dosregs.ax:=$714e;
   msdos(dosregs);
   LoadDosError;
@@ -632,7 +632,7 @@ begin
   Move(s.Fill,hdl,4);
   dosregs.si:=1; { use ms-dos time }
   dosregs.edi:=tb_offset;
-  dosregs.es:=tb_selector;
+  dosregs.es:=tb_segment;
   dosregs.ebx:=hdl;
   dosregs.ax:=$714f;
   msdos(dosregs);
@@ -681,13 +681,13 @@ begin
     if path[i]='/' then path[i]:='\';
   copytodos(f,sizeof(searchrec));
   dosregs.edx:=tb_offset;
-  dosregs.ds:=tb_selector;
+  dosregs.ds:=tb_segment;
   dosregs.ah:=$1a;
   msdos(dosregs);
   dosregs.ecx:=attr;
   dosregs.edx:=tb_offset+Sizeof(searchrec)+1;
-  dosmemput(tb_selector,tb_offset+Sizeof(searchrec)+1,path^,strlen(path)+1);
-  dosregs.ds:=tb_selector;
+  dosmemput(tb_segment,tb_offset+Sizeof(searchrec)+1,path^,strlen(path)+1);
+  dosregs.ds:=tb_segment;
   dosregs.ah:=$4e;
   msdos(dosregs);
   copyfromdos(f,sizeof(searchrec));
@@ -700,7 +700,7 @@ procedure Dosfindnext(var f : searchrec);
 begin
   copytodos(f,sizeof(searchrec));
   dosregs.edx:=tb_offset;
-  dosregs.ds:=tb_selector;
+  dosregs.ds:=tb_segment;
   dosregs.ah:=$1a;
   msdos(dosregs);
   dosregs.ah:=$4f;
@@ -1022,17 +1022,17 @@ begin
 {$ifdef GO32V2}
   copytodos(filerec(f).name,strlen(filerec(f).name)+1);
   dosregs.edx:=tb_offset;
-  dosregs.ds:=tb_selector;
-{$else}
-  strpcopy(n,filerec(f).name);
-  dosregs.edx:=longint(@n);
-{$endif}
+  dosregs.ds:=tb_segment;
   if LFNSupport then
    begin
      dosregs.ax:=$7143;
      dosregs.bx:=0;
    end
   else
+{$else}
+  strpcopy(n,filerec(f).name);
+  dosregs.edx:=longint(@n);
+{$endif GO32V2}
    dosregs.ax:=$4300;
   msdos(dosregs);
   LoadDosError;
@@ -1049,17 +1049,17 @@ begin
 {$ifdef GO32V2}
   copytodos(filerec(f).name,strlen(filerec(f).name)+1);
   dosregs.edx:=tb_offset;
-  dosregs.ds:=tb_selector;
-{$else}
-  strpcopy(n,filerec(f).name);
-  dosregs.edx:=longint(@n);
-{$endif}
+  dosregs.ds:=tb_segment;
   if LFNSupport then
    begin
      dosregs.ax:=$7143;
      dosregs.bx:=1;
    end
   else
+{$else}
+  strpcopy(n,filerec(f).name);
+  dosregs.edx:=longint(@n);
+{$endif}
    dosregs.ax:=$4301;
   dosregs.cx:=attr;
   msdos(dosregs);
@@ -1139,7 +1139,14 @@ End;
 end.
 {
   $Log$
-  Revision 1.9  1998-08-26 10:04:01  peter
+  Revision 1.10  1998-08-27 10:30:48  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
+        a protected mode selector
+      Fixed it for go32v1 (remove the $E0000000 offset !)
+
+  Revision 1.9  1998/08/26 10:04:01  peter
     * new lfn check from mailinglist
     * renamed win95 -> LFNSupport
     + tb_selector, tb_offset for easier access to transferbuffer
@@ -1168,3 +1175,4 @@ end.
     * fixed read_text_as_array
     + read_text_as_pchar which was not yet in the rtl
 }
+

+ 17 - 5
rtl/dos/go32.pp

@@ -159,7 +159,7 @@ unit go32;
     function get_run_mode : word;
 
     function transfer_buffer : longint;
-    function tb_selector : longint;
+    function tb_segment : longint;
     function tb_offset : longint;
     function tb_size : longint;
     procedure copytodos(var addr; len : longint);
@@ -215,7 +215,7 @@ var
 {$ifndef go32v2}
 
     { the following procedures copy from and to DOS memory without DPMI,
-      these are not necessary for go32v2, becuase that requires dpmi (PFV) }
+      these are not necessary for go32v2, because that requires dpmi (PFV) }
 
     procedure raw_dosmemput(seg : word;ofs : word;var data;count : longint);
 
@@ -1163,9 +1163,14 @@ end ['EAX','EDX'];
       end;
 
 
-    function tb_selector : longint;
+    function tb_segment : longint;
       begin
-        tb_selector:=go32_info_block.linear_address_of_transfer_buffer shr 4;
+{$ifdef go32v2}
+        tb_segment:=go32_info_block.linear_address_of_transfer_buffer shr 4;
+{$else  i.E. for go32v1}
+        { all real mode memory is mapped to $E000000 location !! }
+        tb_segment:=(go32_info_block.linear_address_of_transfer_buffer shr 4) and $FFFF;
+{$endif go32v2}
       end;
 
 
@@ -1226,7 +1231,14 @@ end.
 
 {
   $Log$
-  Revision 1.11  1998-08-26 10:04:02  peter
+  Revision 1.12  1998-08-27 10:30:50  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
+        a protected mode selector
+      Fixed it for go32v1 (remove the $E0000000 offset !)
+
+  Revision 1.11  1998/08/26 10:04:02  peter
     * new lfn check from mailinglist
     * renamed win95 -> LFNSupport
     + tb_selector, tb_offset for easier access to transferbuffer

+ 21 - 16
rtl/dos/go32v2/system.pp

@@ -117,8 +117,6 @@ var
   procedure sysrealintr(intnr : word;var regs : trealregs);
   function  tb : longint;
 
-
-
 implementation
 
 { include system independent routines }
@@ -213,9 +211,9 @@ begin
 end;
 
 
-function tb_selector : longint;
+function tb_segment : longint;
 begin
-  tb_selector:=go32_info_block.linear_address_of_transfer_buffer shr 4;
+  tb_segment:=go32_info_block.linear_address_of_transfer_buffer shr 4;
 end;
 
 
@@ -624,7 +622,7 @@ begin
   AllowSlash(p);
   syscopytodos(longint(p),strlen(p)+1);
   regs.realedx:=tb_offset;
-  regs.realds:=tb_selector;
+  regs.realds:=tb_segment;
 {$ifndef RTLLITE}
   if LFNSupport then
    regs.realeax:=$7141
@@ -651,8 +649,8 @@ begin
   sysseg_move(get_ds,longint(p1),dos_selector,tb+strlen(p2)+2,strlen(p1)+1);
   regs.realedi:=tb_offset;
   regs.realedx:=tb_offset + strlen(p2)+2;
-  regs.realds:=tb_selector;
-  regs.reales:=tb_selector;
+  regs.realds:=tb_segment;
+  regs.reales:=tb_segment;
 {$ifndef RTLLITE}
   if LFNSupport then
    regs.realeax:=$7156
@@ -682,7 +680,7 @@ begin
      syscopytodos(addr+writesize,size);
      regs.realecx:=size;
      regs.realedx:=tb_offset;
-     regs.realds:=tb_selector;
+     regs.realds:=tb_segment;
      regs.realebx:=h;
      regs.realeax:=$4000;
      sysrealintr($21,regs);
@@ -713,7 +711,7 @@ begin
       size:=len;
      regs.realecx:=size;
      regs.realedx:=tb_offset;
-     regs.realds:=tb_selector;
+     regs.realds:=tb_segment;
      regs.realebx:=h;
      regs.realeax:=$3f00;
      sysrealintr($21,regs);
@@ -809,7 +807,7 @@ begin
   do_seek(handle,pos);
   regs.realecx:=0;
   regs.realedx:=tb_offset;
-  regs.realds:=tb_selector;
+  regs.realds:=tb_segment;
   regs.realebx:=handle;
   regs.realeax:=$4000;
   sysrealintr($21,regs);
@@ -880,7 +878,7 @@ begin
 {$endif RTLLITE}
    regs.realeax:=$6c00;
   regs.realedx:=action;
-  regs.realds:=tb_selector;
+  regs.realds:=tb_segment;
   regs.realesi:=tb_offset;
   regs.realebx:=$2000+(flags and $ff);
   regs.realecx:=$20;
@@ -956,7 +954,7 @@ begin
   AllowSlash(pchar(@buffer));
   syscopytodos(longint(@buffer),length(s)+1);
   regs.realedx:=tb_offset;
-  regs.realds:=tb_selector;
+  regs.realds:=tb_segment;
 {$ifndef RTLLITE}
   if LFNSupport then
    regs.realeax:=$7100+func
@@ -1001,7 +999,7 @@ var
 begin
   regs.realedx:=drivenr;
   regs.realesi:=tb_offset;
-  regs.realds:=tb_selector;
+  regs.realds:=tb_segment;
 {$ifndef RTLLITE}
   if LFNSupport then
    regs.realeax:=$7147
@@ -1059,10 +1057,10 @@ begin
   Buffers:='                    '+#0;
   syscopytodos(longint(RootName),strlen(RootName)+1);
   regs.realeax:=$71a0;
-  regs.reales:=tb_selector;
+  regs.reales:=tb_segment;
   regs.realedi:=tb_offset;
   regs.realecx:=strlen(Buffers)+1;
-  regs.realds:=tb_selector;
+  regs.realds:=tb_segment;
   regs.realedx:=tb_offset;
   sysrealintr($21,regs);
   syscopyfromdos(longint(Buffers),strlen(Buffers)+1);
@@ -1090,7 +1088,14 @@ Begin
 End.
 {
   $Log$
-  Revision 1.16  1998-08-26 10:04:03  peter
+  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
+        a protected mode selector
+      Fixed it for go32v1 (remove the $E0000000 offset !)
+
+  Revision 1.16  1998/08/26 10:04:03  peter
     * new lfn check from mailinglist
     * renamed win95 -> LFNSupport
     + tb_selector, tb_offset for easier access to transferbuffer