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);