/—————————————_———;

IMPLEMENTATION ^—————————————————..-————————————-/

var

Reg: registers;

const

ActivePage: Byte =0; (Номер активной страницы} {

Подпрограммы управления цветом

}

Procedure ChangeAttribute(Page,Xl,Yl,X2,Y2,01dAtt,NewAtt: Byte) ;

{Меняет атрибут OLDATT на значение NEHATT в прямоугольнике XI...У2 страницы PAGE} var

Buf: array [1..80,1..2] of Byte;

k,j,Size: Byte;

begin

{Проверяем параметры обращения} if (Page<=MaxPage) and (XI in [1..MaxChar])

and (Yl in [1..MaxLine]) and (X2 in [1..MaxChar]) and (Y2 in [1..MaxLine]) and (X2>Xl) and (Y2>Y1) then begin

Size := (X2-X1+1)*2; {Размер строки видеобуфера} for k := Yl •to Y2 do {цикл по строкам} begin

(Получаем копию видеопамяти} MoveFromScreen(Mem[VMemory:Page*VSi2e+ (pred(k)*MaxChar+Xl-l)*2],Buf,Size) ;

{Меняем атрибут}

for j := 1 to Size div 2 do if Buf[j,2] ° OldAtt then Buf[j,2] := NewAtt;

{Возвращаем в видеопамять} MoveToScreen(Buf,Mem[VMemory:Page*VSize+

(pred(k)*MaxChar+Xl-l)*2],Size) end end

end; (ChangeAttniluce' ;———————————————;

Procedure Colors (Text,Back: Byte);

{Устанавливает цвет текста TEXT и цвет фона BACK для активной страницы} begin

PageColors(ActivePage,Text,Back) end;

^———————————————.^

Procedure PageColors (Page,Text,Back: Byte);

(Устанавливает цвет текста TEXT и цвет фона BACK для страницы PAGE) begin

if Page<=MaxPage then begin

PagesiPage].Attrib := (Text and $8F) or ((Back and ^7) shi 4) or (Back and $80);

if Page=0 then begin

CRT.TextColor(Text);

CRT.TextBackGround(Back) end