[Back to EGAVGA SWAG index]  [Back to Main SWAG index]  [Original]

{
REYNIR STEFANSSON

     Here is yet another fade-in routine. This one does a proportional fade
of all colours.
}

Program FadeDemo;

Uses
  Crt;

Const
  PelAddrRgR  = $3C7;
  PelAddrRgW  = $3C8;
  PelDataReg  = $3C9;

Type
  rgb = Record
    r, g, b : Byte;
  end;

Var
  i   : Integer;
  ch  : Char;
  col : Array[0..63] of rgb;

Procedure GetCol(C : Byte; Var R, G, B : Byte);
begin
  Port[PelAddrRgR] := C;
  R := Port[PelDataReg];
  G := Port[PelDataReg];
  B := Port[PelDataReg];
end;

Procedure SetCol(C, R, G, B : Byte);
begin
  Port[PelAddrRgW] := C;
  Port[PelDataReg] := R;
  Port[PelDataReg] := G;
  Port[PelDataReg] := B;
end;

Procedure SetInten(b : Byte);
Var
  i  : Integer;
  fr,
  fg,
  fb : Byte;
begin
  For i := 0 to 63 DO
  begin
    fr := col[i].r * b div 63;
    fg := col[i].g * b div 63;
    fb := col[i].b * b div 63;
    SetCol(i, fr, fg, fb);
  end;
end;

begin
  TextMode(LastMode);
  For i := 0 to 63 DO
    GetCol(i, col[i].r, col[i].g, col[i].b);
  For i := 1 to 15 DO
  begin
    TextAttr := i;
    WriteLn('Foreground colour = ', i : 2);
  end;
  ch := ReadKey;
  For i := 63 DOWNTO 0 DO
  begin
    SetInten(i);
    Delay(20);
  end;
  GotoXY(1, 1);
  For i := 15 DOWNTO 1 DO
  begin
    TextAttr := i;
    WriteLn('Foreground colour = ', i : 2);
  end;

  For i := 0 to 63 DO
  begin
    SetInten(i);
    Delay(20);
  end;
  ch := ReadKey;
  TextMode(LastMode);
end.

[Back to EGAVGA SWAG index]  [Back to Main SWAG index]  [Original]