home *** CD-ROM | disk | FTP | other *** search
- {
- I attempted to Write a Unit For Text FADING, but I don't have it all down
- right... If any one wants to play With the Unit and perfect it I would not
- mind! My problem is that I do not know the correct values to change in the
- color register For the affect of a fade. Once all the values are 0 the screen
- is black, but on the way there the screen gets some strange colors... Also, if
- you know how to change the colors, you can implement your own custom colors for
- Text mode. I think 256 different colors, but only 16 at a time. (I am only
- guessing at that last part). The FADEOUT and FADEIN does work here, but it
- goes through some strange colors on the way!
-
- Robert
- }
-
- Unit TextFade; {attempt For implementing Text fading}
- { only works For VGA or SVGA as Far as I know! }
-
- Interface
-
- Uses Dos, Crt;
-
- Type
- ColorRegister =
- Record
- Red : Byte;
- Green : Byte;
- Blue : Byte;
- end;
-
- ColorRegisterArray = Array[0..255] of ColorRegister;
- ColorRegisterArrayPtr = ^ColorRegisterArray;
-
- Var
- SaveCRAp : ColorRegisterArrayPtr;
-
- Procedure SaveColorRegister(Var CRAp : ColorRegisterArrayPtr);
- { given a color register Array ptr, this will save the current }
- { values so you can restore from them later... }
-
- Procedure SetColorRegister(Var CRAp : ColorRegisterArrayPtr);
- { when you adjust the values of a color register set, this }
- { Procedure will make put the new values into memory }
-
- Procedure FadeOut(MS_Delay : Integer);
- { using the global Variable 'SaveCRAp', this will fade the Text}
- { screen out till all the values in the color register Array }
- { ptr are 0 }
-
- Procedure FadeIn(MS_Delay : Integer);
- { once again using the global Variable 'SaveCRAp', this will }
- { fade the screen back in till all values of the current color }
- { register Array ptr are equal to 'SaveCRAp' }
-
- Implementation
-
- Procedure Abort(Msg : String);
- begin
- Writeln(Msg);
- Halt(1);
- end;
-
- Procedure SaveColorRegister(Var CRAp : ColorRegisterArrayPtr);
- Var
- R : Registers;
- begin
- With R Do
- begin
- ah := $10;
- al := $17;
- bx := $00;
- cx := 256;
- es := Seg(crap^);
- dx := Ofs(crap^);
- end;
- Intr($10,r);
- end;
-
- Procedure SetColorRegister(Var CRAp : ColorREgisterArrayPtr);
- Var
- R : Registers;
- begin
- With R Do
- begin
- ah := $10;
- al := $12;
- bx := $00;
- cx := 256;
- es := Seg(crap^);
- dx := Ofs(crap^);
- end;
- Intr($10,r);
- end;
-
- Procedure FadeOut(MS_Delay : Integer);
- Var
- NewCRAp : ColorRegisterArrayPtr;
- W : Word;
- T : Word;
- begin
- New(NewCRAp);
- If NewCRAp = NIL Then
- Abort('Not Enough Memory');
- NewCrap^ := SaveCrap^;
- For T := 1 to 63 Do
- begin
- For W := 0 to 255 Do
- With NewCRAp^[w] Do
- If Red + Green + Blue > 0 Then
- begin
- Dec(Red);
- Dec(Green);
- Dec(Blue);
- end;
- SetColorRegister(NewCRAp);
- Delay(MS_Delay);
- end;
- end;
-
- Procedure FadeIn(MS_Delay : Integer);
- Var
- NewCRAp : ColorRegisterArrayPtr;
- W : Word;
- T : Word;
- begin
- New(NewCRAp);
- If NewCRAp = Nil Then
- Abort('Not Enough Memory');
- FillChar(NewCRAp^,SizeOf(NewCRAp^),0);
- For T := 1 to 63 Do
- { The values in the color register are not higher than 63 }
- begin
- For W := 0 to 255 Do
- If SaveCRAp^[w].Red + SaveCRAp^[w].Green + SaveCRAp^[w].Red > 0 Then
- begin
- If NewCRAp^[w].Red < SaveCRAp^[w].Red Then
- Inc(NewCRAp^[w].Red);
- If NewCRAp^[w].Green < SaveCRAp^[w].Green Then
- Inc(NewCRAp^[w].Green);
- If NewCRAp^[w].Blue < SaveCRAp^[w].Blue Then
- Inc(NewCRAp^[w].Blue);
- end;
- SetColorRegister(NewCRAp);
- Delay(MS_Delay);
- end;
- end;
-
-
- begin
- New(SaveCRAp);
- {get memory For the Pointer}
- If SaveCRAp = Nil Then Abort('Not Enough Memory');
- {make sure it actually got some memory}
- SaveColorRegister(SaveCRAp);
- {save the current values into SaveCRAp}
- end.
-
- ---------------8<-----cut here------>8---------
-
- Here is a demo of how to use it...
-
-
- Uses TextFADE;
-
- begin
- FADEOUT(10);
- WriteLN(' HOW DOES THIS LOOK');
- FADEIN(10);
- Dispose(SaveCRAp);
- {I just Realized I never got rid of this Pointer before!}
- end.