/—————————————_———;
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