{
I recently found out that you can adjust the colours regardless of what
video mode you happen to be in.  Play around with this program ...

------------------- 8< ------------------------------------
{ Simple little program to "fade" out text on the screen.

  Feel free to play around with it ...

  Doesn't fully work, but should give you a good idea.  Note that it requires
  a VGA (or better) graphics card. }

USES CRT;
 
CONST 
  { Colour of DOS text. } 
  DOS_COLOUR = LIGHTGRAY; 
 
TYPE 
  PaletteType = RECORD 
                  R, G, B : BYTE; 
                End; 
 
VAR 
  Colour, 
  ColourCnt  : BYTE; 
  AllColours : ARRAY[ 0..63 ] OF PaletteType; 
 
BEGIN 
  FOR Colour := 0 TO 16 DO 
  Begin 
    TextColor( Colour ); 
    WriteLn( 'This is some text' );
  End; 
 
  { Read in all the colours of the palette into an array. } 
  FOR Colour := 0 TO 63 DO 
  Begin 
    { Indicate that the palette registers are going to be read } 
    Port[ $3C7 ] := 0; 
 
    AllColours[ Colour ].R := Port[ $3C9 ]; 
    AllColours[ Colour ].G := Port[ $3C9 ]; 
    AllColours[ Colour ].B := Port[ $3C9 ]; 
  End; 
 
  { Fade out any text that is on the screen. } 
  WHILE AllColours[ 61 ].B > 1 DO 
    FOR Colour := 0 TO 63 DO 
    Begin 
      Port[ $3C8 ] := Colour; 
 
      IF AllColours[ Colour ].R > 0 THEN
        DEC( AllColours[ Colour ].R ); 
 
      IF AllColours[ Colour ].G > 0 THEN 
        DEC( AllColours[ Colour ].G ); 
 
      IF AllColours[ Colour ].B > 0 THEN 
        DEC( AllColours[ Colour ].B ); 
 
      Port[ $3C9 ] := AllColours[ Colour ].R; 
      Port[ $3C9 ] := AllColours[ Colour ].G; 
      Port[ $3C9 ] := AllColours[ Colour ].B; 
 
      Delay( 10 ); 
    End; 
 
  TextColor( DOS_COLOUR ); 
 
  ClrScr; 
  WriteLn( 'Watch me fade back in ...' ); 

  FOR ColourCnt := 0 TO 42 DO 
  Begin 
    Port[ $3C8 ] := DOS_COLOUR; 
 
    Port[ $3C9 ] := ColourCnt; 
    Port[ $3C9 ] := ColourCnt; 
    Port[ $3C9 ] := ColourCnt; 
 
    Delay( 20 ); 
  End; 
END. 
