[Back to COLOR SWAG index] [Back to Main SWAG index] [Original]
{
I have seen a lot of applications that use highintensity background
colors in Text mode. How do they do it??????
}
Program HighInt; { 91-5-30 Robert Mashlan
Public Domain
The following Program is an example of how to set the CrtC controller
in in order that high intensity backgrounds may be displayed instead
of blinking Characters, or use the the EGA/VGA BIOS to do the same
thing.
}
Uses
Dos, Crt;
Const
HighIntesity = Blink; (* high intesity attribute mask *)
Procedure HighIntensity( state : Boolean );
(* enables or disables high intensity background colors *)
Const
BlinkBit = $20; (* For mode select port, bit 5 *)
ModeSelofs = 4; (* offset from CrtC port base *)
Var
R : Registers;
(* BIOS data area Variables *)
CrtMode : Byte Absolute $0040:$0065; (* current CrtC mode *)
CrtPortBase : Word Absolute $0040:$0063; (* CrtC port base addr *)
Function EgaBios : Boolean;
{ test For the existance of EGA/VGA BIOS }
Var R : Registers;
begin
With R do begin
AH := $12;
BX := $ff10;
Intr($10,R);
EgaBios := BX <> $ff10;
end;
end;
begin
if EgaBios then With R do begin (* use EGA/VGA BIOS Function *)
R.AX := $1003;
if state then BL := 0
else BL := 1;
Intr($10,R);
end else begin (* Program CGA/MDA/Herc CrtC controller *)
if state then CrtMode := CrtMode and not BlinkBit
else CrtMode := CrtMode or BlinkBit;
Port[ CrtPortBase + ModeSelofs ] := CrtMode;
end;
end;
begin
HighIntensity(True);
if LastMode = 7 then
TextAttr := $80 + $7E
else
Textattr := $80 + $6D;
ClrScr;
TextBackGround(green);
GotoXY(20,11);
Writeln('What do you think of this background?');
GotoXY(1,25);
Repeat Until ReadKey <> #0;
HighIntensity(False);
ClrScr;
end.
[Back to COLOR SWAG index] [Back to Main SWAG index] [Original]