{ 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.