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