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