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

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