mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-04 20:19:29 +01:00
* WinMinX, WinMinY, WinMaxX and WinMaxY helper functions replaced with absolute packed records overlaid on top of WindMin and WindMax for faster access
git-svn-id: trunk@25474 -
This commit is contained in:
parent
e42e9bb677
commit
70937d93c1
@ -122,44 +122,14 @@ end;
|
|||||||
Helper Routines
|
Helper Routines
|
||||||
****************************************************************************}
|
****************************************************************************}
|
||||||
|
|
||||||
Function WinMinX: Byte;
|
var
|
||||||
{
|
WinMin: packed record
|
||||||
Current Minimum X coordinate
|
X, Y: Byte;
|
||||||
}
|
end absolute WindMin;
|
||||||
Begin
|
|
||||||
WinMinX:=WindMin and $ff;
|
|
||||||
End;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Function WinMinY: Byte;
|
|
||||||
{
|
|
||||||
Current Minimum Y Coordinate
|
|
||||||
}
|
|
||||||
Begin
|
|
||||||
WinMinY:=WindMin shr 8;
|
|
||||||
End;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Function WinMaxX: Byte;
|
|
||||||
{
|
|
||||||
Current Maximum X coordinate
|
|
||||||
}
|
|
||||||
Begin
|
|
||||||
WinMaxX:=WindMax and $ff;
|
|
||||||
End;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Function WinMaxY: Byte;
|
|
||||||
{
|
|
||||||
Current Maximum Y coordinate;
|
|
||||||
}
|
|
||||||
Begin
|
|
||||||
WinMaxY:=WindMax shr 8;
|
|
||||||
End;
|
|
||||||
|
|
||||||
|
WinMax: packed record
|
||||||
|
X, Y: Byte;
|
||||||
|
end absolute WindMax;
|
||||||
|
|
||||||
|
|
||||||
Function FullWin:boolean;
|
Function FullWin:boolean;
|
||||||
@ -167,8 +137,8 @@ Function FullWin:boolean;
|
|||||||
Full Screen 80x25? Window(1,1,80,25) is used, allows faster routines
|
Full Screen 80x25? Window(1,1,80,25) is used, allows faster routines
|
||||||
}
|
}
|
||||||
begin
|
begin
|
||||||
FullWin:=(WinMinX=0) and (WinMinY=0) and
|
FullWin:=(WinMin.X=0) and (WinMin.Y=0) and
|
||||||
((WinMaxX+1)=ScreenWidth) and ((WinMaxY+1)=ScreenHeight);
|
((WinMax.X+1)=ScreenWidth) and ((WinMax.Y+1)=ScreenHeight);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -258,11 +228,11 @@ Procedure GotoXy(X: tcrtcoord; Y: tcrtcoord);
|
|||||||
Go to coordinates X,Y in the current window.
|
Go to coordinates X,Y in the current window.
|
||||||
}
|
}
|
||||||
Begin
|
Begin
|
||||||
If (X>0) and (X<=WinMaxX- WinMinX+1) and
|
If (X>0) and (X<=WinMax.X- WinMin.X+1) and
|
||||||
(Y>0) and (Y<=WinMaxY-WinMinY+1) Then
|
(Y>0) and (Y<=WinMax.Y-WinMin.Y+1) Then
|
||||||
Begin
|
Begin
|
||||||
Inc(X,WinMinX);
|
Inc(X,WinMin.X);
|
||||||
Inc(Y,WinMinY);
|
Inc(Y,WinMin.Y);
|
||||||
SetScreenCursor(x,y);
|
SetScreenCursor(x,y);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
@ -295,8 +265,8 @@ begin
|
|||||||
DosmemFillWord(VidSeg,0,ScreenHeight*ScreenWidth,fil)
|
DosmemFillWord(VidSeg,0,ScreenHeight*ScreenWidth,fil)
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
for y:=WinMinY to WinMaxY do
|
for y:=WinMin.Y to WinMax.Y do
|
||||||
DosmemFillWord(VidSeg,(y*ScreenWidth+WinMinX)*2,WinMaxX-WinMinX+1,fil);
|
DosmemFillWord(VidSeg,(y*ScreenWidth+WinMin.X)*2,WinMax.X-WinMin.X+1,fil);
|
||||||
end;
|
end;
|
||||||
Gotoxy(1,1);
|
Gotoxy(1,1);
|
||||||
end;
|
end;
|
||||||
@ -312,8 +282,8 @@ var
|
|||||||
Begin
|
Begin
|
||||||
GetScreenCursor(x,y);
|
GetScreenCursor(x,y);
|
||||||
fil:=32 or (textattr shl 8);
|
fil:=32 or (textattr shl 8);
|
||||||
if x<=(WinMaxX+1) then
|
if x<=(WinMax.X+1) then
|
||||||
DosmemFillword(VidSeg,((y-1)*ScreenWidth+(x-1))*2,WinMaxX-x+2,fil);
|
DosmemFillword(VidSeg,((y-1)*ScreenWidth+(x-1))*2,WinMax.X-x+2,fil);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
||||||
@ -326,7 +296,7 @@ var
|
|||||||
x,y : smallint;
|
x,y : smallint;
|
||||||
Begin
|
Begin
|
||||||
GetScreenCursor(x,y);
|
GetScreenCursor(x,y);
|
||||||
WhereX:=x-WinMinX;
|
WhereX:=x-WinMin.X;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
||||||
@ -339,7 +309,7 @@ var
|
|||||||
x,y : smallint;
|
x,y : smallint;
|
||||||
Begin
|
Begin
|
||||||
GetScreenCursor(x,y);
|
GetScreenCursor(x,y);
|
||||||
WhereY:=y-WinMinY;
|
WhereY:=y-WinMin.Y;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
||||||
@ -535,14 +505,14 @@ var
|
|||||||
fil : word;
|
fil : word;
|
||||||
begin
|
begin
|
||||||
fil:=32 or (textattr shl 8);
|
fil:=32 or (textattr shl 8);
|
||||||
y:=WinMinY+y;
|
y:=WinMin.Y+y;
|
||||||
While (y<=WinMaxY) do
|
While (y<=WinMax.Y) do
|
||||||
begin
|
begin
|
||||||
dosmemmove(VidSeg,(y*ScreenWidth+WinMinX)*2,
|
dosmemmove(VidSeg,(y*ScreenWidth+WinMin.X)*2,
|
||||||
VidSeg,((y-1)*ScreenWidth+WinMinX)*2,(WinMaxX-WinMinX+1)*2);
|
VidSeg,((y-1)*ScreenWidth+WinMin.X)*2,(WinMax.X-WinMin.X+1)*2);
|
||||||
inc(y);
|
inc(y);
|
||||||
end;
|
end;
|
||||||
dosmemfillword(VidSeg,(WinMaxY*ScreenWidth+WinMinX)*2,(WinMaxX-WinMinX+1),fil);
|
dosmemfillword(VidSeg,(WinMax.Y*ScreenWidth+WinMin.X)*2,(WinMax.X-WinMin.X+1),fil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -559,14 +529,14 @@ var
|
|||||||
begin
|
begin
|
||||||
fil:=32 or (textattr shl 8);
|
fil:=32 or (textattr shl 8);
|
||||||
y:=WhereY;
|
y:=WhereY;
|
||||||
my:=WinMaxY-WinMinY;
|
my:=WinMax.Y-WinMin.Y;
|
||||||
while (my>=y) do
|
while (my>=y) do
|
||||||
begin
|
begin
|
||||||
dosmemmove(VidSeg,((WinMinY+my-1)*ScreenWidth+WinMinX)*2,
|
dosmemmove(VidSeg,((WinMin.Y+my-1)*ScreenWidth+WinMin.X)*2,
|
||||||
VidSeg,((WinMinY+my)*ScreenWidth+WinMinX)*2,(WinMaxX-WinMinX+1)*2);
|
VidSeg,((WinMin.Y+my)*ScreenWidth+WinMin.X)*2,(WinMax.X-WinMin.X+1)*2);
|
||||||
dec(my);
|
dec(my);
|
||||||
end;
|
end;
|
||||||
dosmemfillword(VidSeg,((WinMinY+y-1)*ScreenWidth+WinMinX)*2,(WinMaxX-WinMinX+1),fil);
|
dosmemfillword(VidSeg,((WinMin.Y+y-1)*ScreenWidth+WinMin.X)*2,(WinMax.X-WinMin.X+1),fil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -622,9 +592,9 @@ var
|
|||||||
begin
|
begin
|
||||||
case c of
|
case c of
|
||||||
#10 : inc(CurrY);
|
#10 : inc(CurrY);
|
||||||
#13 : CurrX:=WinMinX+1;
|
#13 : CurrX:=WinMin.X+1;
|
||||||
#8 : begin
|
#8 : begin
|
||||||
if CurrX>(WinMinX+1) then
|
if CurrX>(WinMin.X+1) then
|
||||||
dec(CurrX);
|
dec(CurrX);
|
||||||
end;
|
end;
|
||||||
#7 : begin { beep }
|
#7 : begin { beep }
|
||||||
@ -638,12 +608,12 @@ begin
|
|||||||
inc(CurrX);
|
inc(CurrX);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if CurrX>(WinMaxX+1) then
|
if CurrX>(WinMax.X+1) then
|
||||||
begin
|
begin
|
||||||
CurrX:=(WinMinX+1);
|
CurrX:=(WinMin.X+1);
|
||||||
inc(CurrY);
|
inc(CurrY);
|
||||||
end;
|
end;
|
||||||
while CurrY>(WinMaxY+1) do
|
while CurrY>(WinMax.Y+1) do
|
||||||
begin
|
begin
|
||||||
removeline(1);
|
removeline(1);
|
||||||
dec(CurrY);
|
dec(CurrY);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user