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