[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]