mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 20:09:18 +02:00
* ScreenWidth and ScreenHeight changed to word; several other types also changed to 16-bit and added typecasts to avoid 32-bit calculations due to mixing signed and unsigned 16-bit ints
git-svn-id: trunk@25477 -
This commit is contained in:
parent
60c0de6c09
commit
7e6092c4f2
@ -22,7 +22,7 @@ interface
|
|||||||
|
|
||||||
Var
|
Var
|
||||||
ScreenWidth,
|
ScreenWidth,
|
||||||
ScreenHeight : longint;
|
ScreenHeight : word;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function GetScreenHeight : longint;
|
function GetScreenHeight : word;
|
||||||
begin
|
begin
|
||||||
getscreenheight:=mem[$40:$84]+1;
|
getscreenheight:=mem[$40:$84]+1;
|
||||||
If mem[$40:$84]=0 then
|
If mem[$40:$84]=0 then
|
||||||
@ -94,7 +94,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function GetScreenWidth : longint;
|
function GetScreenWidth : word;
|
||||||
begin
|
begin
|
||||||
getscreenwidth:=memw[$40:$4a];
|
getscreenwidth:=memw[$40:$4a];
|
||||||
end;
|
end;
|
||||||
@ -138,7 +138,7 @@ Function FullWin:boolean;
|
|||||||
}
|
}
|
||||||
begin
|
begin
|
||||||
FullWin:=(WinMin.X=0) and (WinMin.Y=0) and
|
FullWin:=(WinMin.X=0) and (WinMin.Y=0) and
|
||||||
((WinMax.X+1)=ScreenWidth) and ((WinMax.Y+1)=ScreenHeight);
|
(word(WinMax.X+1)=ScreenWidth) and (word(WinMax.Y+1)=ScreenHeight);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -243,8 +243,8 @@ Procedure Window(X1, Y1, X2, Y2: Byte);
|
|||||||
Set screen window to the specified coordinates.
|
Set screen window to the specified coordinates.
|
||||||
}
|
}
|
||||||
Begin
|
Begin
|
||||||
if (X1>X2) or (X2>ScreenWidth) or
|
if (X1>X2) or (word(X2)>ScreenWidth) or
|
||||||
(Y1>Y2) or (Y2>ScreenHeight) then
|
(Y1>Y2) or (word(Y2)>ScreenHeight) then
|
||||||
exit;
|
exit;
|
||||||
WindMin:=((Y1-1) Shl 8)+(X1-1);
|
WindMin:=((Y1-1) Shl 8)+(X1-1);
|
||||||
WindMax:=((Y2-1) Shl 8)+(X2-1);
|
WindMax:=((Y2-1) Shl 8)+(X2-1);
|
||||||
@ -258,7 +258,7 @@ Procedure ClrScr;
|
|||||||
}
|
}
|
||||||
var
|
var
|
||||||
fil : word;
|
fil : word;
|
||||||
y : longint;
|
y : word;
|
||||||
begin
|
begin
|
||||||
fil:=32 or (textattr shl 8);
|
fil:=32 or (textattr shl 8);
|
||||||
if FullWin then
|
if FullWin then
|
||||||
@ -266,7 +266,7 @@ begin
|
|||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
for y:=WinMin.Y to WinMax.Y do
|
for y:=WinMin.Y to WinMax.Y do
|
||||||
DosmemFillWord(VidSeg,(y*ScreenWidth+WinMin.X)*2,WinMax.X-WinMin.X+1,fil);
|
DosmemFillWord(VidSeg,(y*ScreenWidth+word(WinMin.X))*2,WinMax.X-WinMin.X+1,fil);
|
||||||
end;
|
end;
|
||||||
Gotoxy(1,1);
|
Gotoxy(1,1);
|
||||||
end;
|
end;
|
||||||
@ -283,7 +283,7 @@ Begin
|
|||||||
GetScreenCursor(x,y);
|
GetScreenCursor(x,y);
|
||||||
fil:=32 or (textattr shl 8);
|
fil:=32 or (textattr shl 8);
|
||||||
if x<=(WinMax.X+1) then
|
if x<=(WinMax.X+1) then
|
||||||
DosmemFillword(VidSeg,((y-1)*ScreenWidth+(x-1))*2,WinMax.X-x+2,fil);
|
DosmemFillword(VidSeg,(word(y-1)*ScreenWidth+word(x-1))*2,WinMax.X-x+2,fil);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
||||||
@ -500,7 +500,7 @@ end;
|
|||||||
HighLevel Crt Functions
|
HighLevel Crt Functions
|
||||||
****************************************************************************}
|
****************************************************************************}
|
||||||
|
|
||||||
procedure removeline(y : longint);
|
procedure removeline(y : word);
|
||||||
var
|
var
|
||||||
fil : word;
|
fil : word;
|
||||||
begin
|
begin
|
||||||
@ -508,11 +508,11 @@ begin
|
|||||||
y:=WinMin.Y+y;
|
y:=WinMin.Y+y;
|
||||||
While (y<=WinMax.Y) do
|
While (y<=WinMax.Y) do
|
||||||
begin
|
begin
|
||||||
dosmemmove(VidSeg,(y*ScreenWidth+WinMin.X)*2,
|
dosmemmove(VidSeg,(y*ScreenWidth+word(WinMin.X))*2,
|
||||||
VidSeg,((y-1)*ScreenWidth+WinMin.X)*2,(WinMax.X-WinMin.X+1)*2);
|
VidSeg,((y-1)*ScreenWidth+word(WinMin.X))*2,(WinMax.X-WinMin.X+1)*2);
|
||||||
inc(y);
|
inc(y);
|
||||||
end;
|
end;
|
||||||
dosmemfillword(VidSeg,(WinMax.Y*ScreenWidth+WinMin.X)*2,(WinMax.X-WinMin.X+1),fil);
|
dosmemfillword(VidSeg,(word(WinMax.Y)*ScreenWidth+word(WinMin.X))*2,(WinMax.X-WinMin.X+1),fil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -524,7 +524,7 @@ end;
|
|||||||
|
|
||||||
procedure insline;
|
procedure insline;
|
||||||
var
|
var
|
||||||
my,y : longint;
|
my,y : smallint;
|
||||||
fil : word;
|
fil : word;
|
||||||
begin
|
begin
|
||||||
fil:=32 or (textattr shl 8);
|
fil:=32 or (textattr shl 8);
|
||||||
@ -532,11 +532,11 @@ begin
|
|||||||
my:=WinMax.Y-WinMin.Y;
|
my:=WinMax.Y-WinMin.Y;
|
||||||
while (my>=y) do
|
while (my>=y) do
|
||||||
begin
|
begin
|
||||||
dosmemmove(VidSeg,((WinMin.Y+my-1)*ScreenWidth+WinMin.X)*2,
|
dosmemmove(VidSeg,(word(WinMin.Y+my-1)*ScreenWidth+word(WinMin.X))*2,
|
||||||
VidSeg,((WinMin.Y+my)*ScreenWidth+WinMin.X)*2,(WinMax.X-WinMin.X+1)*2);
|
VidSeg,(word(WinMin.Y+my)*ScreenWidth+word(WinMin.X))*2,(WinMax.X-WinMin.X+1)*2);
|
||||||
dec(my);
|
dec(my);
|
||||||
end;
|
end;
|
||||||
dosmemfillword(VidSeg,((WinMin.Y+y-1)*ScreenWidth+WinMin.X)*2,(WinMax.X-WinMin.X+1),fil);
|
dosmemfillword(VidSeg,(word(WinMin.Y+y-1)*ScreenWidth+word(WinMin.X))*2,(WinMax.X-WinMin.X+1),fil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -604,7 +604,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
memw[VidSeg:((CurrY-1)*ScreenWidth+(CurrX-1))*2]:=(textattr shl 8) or byte(c);
|
memw[VidSeg:(word(CurrY-1)*ScreenWidth+word(CurrX-1))*2]:=(textattr shl 8) or byte(c);
|
||||||
inc(CurrX);
|
inc(CurrX);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -779,7 +779,7 @@ begin
|
|||||||
VidSeg := $b800
|
VidSeg := $b800
|
||||||
else
|
else
|
||||||
VidSeg := $b000;
|
VidSeg := $b000;
|
||||||
TextAttr:=mem[VidSeg:((y-1)*ScreenWidth+(x-1))*2+1];
|
TextAttr:=mem[VidSeg:(word(y-1)*ScreenWidth+word(x-1))*2+1];
|
||||||
{ Redirect the standard output }
|
{ Redirect the standard output }
|
||||||
assigncrt(Output);
|
assigncrt(Output);
|
||||||
Rewrite(Output);
|
Rewrite(Output);
|
||||||
|
Loading…
Reference in New Issue
Block a user