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