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

    {
    >show some help Text or something, and then make it disappear
    >without erasing the Text that the Window overlapped.  In other
    >Words, there will be a screen full of Text, the Window would open
    >up over some Text display whatever message, and disappear, leaving

    The Text you see displayed on the screen can be captured to a Variable
    and subsequently restored through direct screen reads/Writes.  Video
    memory is located (on most systems) at $B800 For color and $B000 on
    monochrome adapters.  Each screen location consists of two Bytes: 1) the
    Foreground/background color of the location, and 2) the Character at the
    location.

    The following Program Writes a screen full of 'Text', captures this
    screen to a Variable (VidScreen), Writes over top of the current screen,
    then restores original screen stored in VidScreen.
    }
    Program OverLap;
    Uses Crt;

    Const
      VidSeg = $B800;     {..$B000 For monochrome}

    Type
      VidArray = Array[1..2000] of Word;

    Var
      VidScreen : VidArray;
      x : Integer;

    Procedure SetScreenColor(back,Fore : Integer);
    begin
      TextBackGround(back);
      TextColor(Fore);
    end;

    begin
      SetScreenColor(4,2);                   {.. green on red }
      ClrScr;
      For x := 1 to 25 do
        begin                                {..Write original screen }
        GotoXY(1,x);
        Write('Text Text Text Text Text Text Text Text Text Text Text '+
               'Text Text Text Text Text');
        end;
      readln;                                {..press enter to cont. }

      For x := 1 to 2000 do                  {..store current screen in }
        VidScreen[x] := MemW[VidSeg:x];      {  VidScreen Array }

      SetScreenColor(7,0);                   {..black on white }
      GotoXY(38,11);
      WriteLn('HELP');                       {..Write help Text, or }
      GotoXY(38,12);                         {  whatever... }
      WriteLn('HELP');
      GotoXY(38,13);
      WriteLn('HELP');
      readln;                                {..press enter to cont. }

      For x := 1 to 2000 do                  {..restore VidScreen Array }
        MemW[VidSeg:x] := VidScreen[x];
      readln;
    end.

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