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

 Program FancyWiper;
 uses crt;

 Type
   {I define the following type for all my virtual screens. Using this
    record allows me to write to any screen variable very easily}
   ScreenType = array [1..25,1..80] of record
        ch   : Char;
        Attr : Byte;
      end;

 Var
   {define a variable which points to the screen location. If you had a mono
    card then the address would be $B000:0000.}
   Screen : ScreenType absolute $B800:0000;

   {Declare a variable to save your old DOS screen}
   OldScreen : ScreenType;
   {Declare a virtual screen}
   VirtScr : ScreenType;

   {This procedure is used to write text to a virtual screen. Now
    there are no problems writing to line 25! ;-) }
   Procedure MyWrite(var Scr : ScreenType; x,y : integer; st : String);
   var
     t, xpos : integer;
   begin
     xpos := 0;

     {exit proc if y not in screen limits}
     if not (y in [1..25]) then
       exit;

     while (xpos+1 <= length(st)) and (xpos+x <=80) do
       begin
         with Scr[y, xpos+x] do
           begin
             ch := St[xpos+1];
             attr := TextAttr;
           end;
         inc(xpos);
       end;
   end;

   {A kludgy ClrScr for a virtual screen }
   Procedure MyClrScr(var Scr : ScreenType);
   begin
     fillchar(Scr, Sizeof(scr), 0);
   end;

   {Simple demonstration of a fancy effect. There's a lot more where this came
   from!!}
   Procedure Wipe(Scr : ScreenType; Left : Boolean; DelayTime : Word);
   var
     xstep,x,y : integer;
   begin
     if Left then
       begin
         xstep := -1;
         x := 80;
       end
     else
       begin
         xstep := 1;
         x := 1;
       end;

     while x in [1..80] do
       begin
         for y := 1 to 25 do
           Screen[y,x] := Scr[y,x];
         Delay(DelayTime);
         inc(x,xstep);
       end;
   end;


 Begin
   {Save the dos screen first}
   OldScreen := Screen;

   {Now go and do whatever you want with the screen}
   TextColor(Green);
   MyClrScr(VirtScr);
   MyWrite(VirtScr,10,10,'Hello there! Hows everything!  That should make this line long enough');
   MyWrite(VirtScr,10,13,'Whats your name : ');
   Wipe(VirtScr,True,30);
   GotoXy(28,13);
   TextColor(White);
   Readln;

   {Now to restore the old screen}
   Wipe(OldScreen,False,20);
 End.

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