mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-11 22:46:01 +02:00
* only clear DS and ES instead of fillchar-ing the whole Registers record in
various places in the win16 rtl where int 21h is called git-svn-id: trunk@31871 -
This commit is contained in:
parent
eaf719a623
commit
2f32a7b718
@ -35,7 +35,7 @@ var
|
||||
begin
|
||||
if Handle<=4 then
|
||||
exit;
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.BX:=handle;
|
||||
if handle<max_files then
|
||||
begin
|
||||
@ -62,7 +62,7 @@ var
|
||||
begin
|
||||
oldp:=p;
|
||||
DoDirSeparators(p,pchangeable);
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.DX:=Ofs(p^);
|
||||
regs.DS:=Seg(p^);
|
||||
if LFNSupport then
|
||||
@ -88,7 +88,7 @@ begin
|
||||
oldp2:=p2;
|
||||
DoDirSeparators(p1,p1changeable);
|
||||
DoDirSeparators(p2,p2changeable);
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.DS:=Seg(p1^);
|
||||
regs.DX:=Ofs(p1^);
|
||||
regs.ES:=Seg(p2^);
|
||||
@ -112,7 +112,7 @@ function do_write(h:thandle;addr:pointer;len : longint) : longint;
|
||||
var
|
||||
regs: Registers;
|
||||
begin
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.AH := $40;
|
||||
regs.BX := h;
|
||||
regs.CX := len;
|
||||
@ -132,7 +132,7 @@ function do_read(h:thandle;addr:pointer;len : longint) : longint;
|
||||
var
|
||||
regs: Registers;
|
||||
begin
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.AH := $3F;
|
||||
regs.BX := h;
|
||||
regs.CX := len;
|
||||
@ -152,7 +152,7 @@ function do_filepos(handle : thandle) : longint;
|
||||
var
|
||||
regs : Registers;
|
||||
begin
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.BX:=handle;
|
||||
regs.CX:=0;
|
||||
regs.DX:=0;
|
||||
@ -172,7 +172,7 @@ procedure do_seek(handle:thandle;pos : longint);
|
||||
var
|
||||
regs : Registers;
|
||||
begin
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.BX:=handle;
|
||||
regs.CX:=pos shr 16;
|
||||
regs.DX:=pos and $ffff;
|
||||
@ -188,7 +188,7 @@ function do_seekend(handle:thandle):longint;
|
||||
var
|
||||
regs : Registers;
|
||||
begin
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.BX:=handle;
|
||||
regs.CX:=0;
|
||||
regs.DX:=0;
|
||||
@ -220,7 +220,7 @@ var
|
||||
regs : Registers;
|
||||
begin
|
||||
do_seek(handle,pos);
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.CX:=0;
|
||||
regs.BX:=handle;
|
||||
regs.AX:=$4000;
|
||||
@ -237,7 +237,7 @@ var
|
||||
regs : Registers;
|
||||
begin
|
||||
Inc(FileHandleCount,10);
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.BX:=FileHandleCount;
|
||||
regs.AX:=$6700;
|
||||
MsDos(regs);
|
||||
@ -263,7 +263,7 @@ var
|
||||
action : word;
|
||||
oldp : pchar;
|
||||
begin
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
{ close first if opened }
|
||||
if ((flags and $10000)=0) then
|
||||
begin
|
||||
@ -332,7 +332,7 @@ begin
|
||||
if regs.AX=4 then
|
||||
if Increase_file_handle_count then
|
||||
begin
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
{ Try again }
|
||||
if LFNSupport then
|
||||
begin
|
||||
@ -409,7 +409,7 @@ begin
|
||||
do_isdevice:=true;
|
||||
exit;
|
||||
end;
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.AX := $4400;
|
||||
regs.BX := handle;
|
||||
MsDos(regs);
|
||||
|
@ -19,7 +19,7 @@ procedure GetInOutRes(def: Word);
|
||||
var
|
||||
regs : Registers;
|
||||
begin
|
||||
FillChar(regs,SizeOf(regs),0);
|
||||
ZeroSegRegs(regs);
|
||||
regs.AX:=$5900;
|
||||
regs.BX:=$0;
|
||||
MsDos(regs);
|
||||
|
@ -146,6 +146,14 @@ procedure MsDos_Carry(var Regs: Registers); external name 'FPC_MSDOS_CARRY';
|
||||
{$I winprocsh.inc}
|
||||
{$I winprocs.inc}
|
||||
|
||||
{ in protected mode, loading invalid values into segment registers causes an
|
||||
exception, so we use this function to initialize our Registers structure }
|
||||
procedure ZeroSegRegs(var regs: Registers); inline;
|
||||
begin
|
||||
regs.DS:=0;
|
||||
regs.ES:=0;
|
||||
end;
|
||||
|
||||
{$I system.inc}
|
||||
|
||||
{$IFDEF FPC_X86_DATA_NEAR}
|
||||
|
Loading…
Reference in New Issue
Block a user