[Back to COLOR SWAG index] [Back to Main SWAG index] [Original]
PROGRAM HighBack;
USES Dos,Crt;
TYPE
AttrType = (Blinking,HighInt);
PROCEDURE SelectAttribute(Attribute: AttrType);
VAR
Reg :Registers;
BEGIN
Reg.ah := $10;
Reg.al := 3;
CASE Attribute OF
HighInt : Reg.bl := 0;
Blinking : Reg.bl := 1
END;
Intr($10,Reg)
END;
PROCEDURE SetBackground(BG: Byte);
BEGIN
BG := (BG AND $F) SHL 4; {Limit to range 0 - 15, then shift up}
Crt.TextAttr := (Crt.TextAttr MOD 16) + BG;
END;
PROCEDURE SetForeground(FG: Byte);
BEGIN
FG := (FG AND $F); {Limit to range 0 - 15}
Crt.TextAttr := (Crt.TextAttr AND $F0) + FG;
END;
FUNCTION GetBackground: Byte;
BEGIN
GetBackground := Crt.TextAttr DIV 16;
END;
FUNCTION GetForeground: Byte;
BEGIN
GetForeground := Crt.TextAttr MOD 16;
END;
CONST
Flip : Integer = 0;
BGM : Byte = Black;
FGM : Byte = White;
VAR
BG, FG : Byte;
A : Char;
BEGIN
{Initialize screen}
TextMode(CO80);
TextBackGround(BGM);
TextColor(FGM);
ClrScr;
{Display demo color combinations}
GotoXY(35,1);WriteLn('Foreground');
Write('Background ');
FOR FG := 0 TO $F DO Write(FG:3,' ');
WriteLn;WriteLn;
FOR BG:= 0 TO $F DO BEGIN {Cycle through colors}
SetBackground(BGM);
Write(BG:5,' ');
SetBackground(BG);
FOR FG := 0 TO $F DO BEGIN
SetForeground(FG); {Adjust FG for visibilty}
Write(Crt.TextAttr:4);
END;
WriteLn;
END;
GotoXY(18,25); {Create prompt}
SetBackground(LightCyan);
SetForeground(Black);
Write('Press <Esc> to quit, any other key to swap attributes');
A := ' '; {Loop to swap attributes}
WHILE Ord(A) <> 27 DO BEGIN
CASE Flip OF
0 : SelectAttribute(HighInt);
-1 : SelectAttribute(Blinking);
END;
Flip := NOT Flip;
A := ReadKey;
END;
TextMode(CO80);
ClrScr
END.
[Back to COLOR SWAG index] [Back to Main SWAG index] [Original]