it ChangeOut then begin
move(OldOutput,Output,SizeOf(Output)); , ChangeOut :° False end end; {PagefirlteOff} ^——————_——_——————;
Procedure PageWriteOn;
(Ïåðåíàçíà÷àåò ñòàíäàðòíûé êàíàë âûâåäàíà ïðîöåäóðó PAGEWRITE, ïîääåðæèâàþùóþ âûâîä â ëþáóþ ñòðàíèöó} begin
if ChangeOut then
Exit; (Áëîêèðóåì ïîâòîðíóþ óñòàíîâêó} ChangeOut := True;
(Ñîõðàíÿåì ñòàðûé äðàéâåð:} move(Output,OldOutput,SizeOf(Output) ) ;
with TextRec(Output) do
begin (Íàçíà÷àåì íîâûé äðàéâåð:} OpenFunc := @ZeroFunc;
InOutFunc := @PageWrite;
FluahFunc := BPageWrite;
CloseFunc := @ZeroFunc;
end end; {PageWriteOn} _•—————_——_-———————;
procedure PutChar (Page: Byte; Cr: Char);
(Çàïèñûâàåò ñèìâîë íà ìåñòî, óêàçûâàåìîå êóðñîðîì â çàäàííîé ñòðàíèöå. Êóðñîð íå ìåíÿåò ïîëîæåíèÿ. Àòðèáóòû áåðóòñÿ èç ìàññèâà Attrib} begin
if Page<°MaxPage then with Reg do begin
AH := $9;
AL := ord(Cr) ;
BH := Page;
BL := Pages[Page].Attrib;
CX := 1;
Intr($10,Reg) end end (PutChar};
^————————_————————;
Procedure WriteChar (Page: Byte; Cr: Char);
{Âûâîäèò ñèìâîë è ñäâèãàåò êóðñîð. Èñïîëüçóþòñÿ àòðèáóòû èç ìàññèâà Attrib} var
X,Y,Xl,Yl,X2,Y2,Size: Byte;
Buf: array [1..80,1..2] of Char;
VW,k: Word;
P: Pointer;
begin
if Page<=MaxPage then with Reg,Pages[Page] do begin
GetCursor(Page,X,Y,Xl,Yl) ;
{Ñìåùåíèå â ñòðàíèöå} k := (Pred(Y)*MaxChar+Pred(X))*2;
P := ptr(VMemory,VMW[Page*2]+k) ;
VW := Pages[Page].Attrib shi 8+ord(Cr);
case Cr of (Îáðàáàòûâàåì ñïåöñèìâîëû} #7: begin /Çâóê/ Sound(900) ;
Delay(150);