``````{
A while back someone asked for a "cascade" type screen thingy, and a also a
screen wipe that would look sort of like a TV screen powering down... Here
they are... & I would like them to get into the next SWAG... 8)
}

{causes entire screen to "fall", character by character, to the bottom of the }
{     screen...                                                               }
{                                                                             }
{              Released for SWAG use!  Use freely!                            }
{                                                                             }
{   But if you do use it, please let me know...                               }
{                                                                             }
{         Allen Walker  - Crazy Train ][  (604)383-2201                       }
{                                                                             }

Uses CRT;

Var MGAScreenMem:Array[0..1999] of Word Absolute \$B000:0000;
CGAScreenMem:Array[0..1999] of Word Absolute \$B800:0000;

Function Mono_Colour:Boolean;
{Mono = False, Color = True}
Var I,J,X,Y:Integer;
A,B,C,D:Word;
begin
X:=WhereX-1; Y:=WhereY-1;
C:=MGAScreenMem[Y*80+X]; D:=CGAScreenMem[Y*80+X];
Write('A'+Chr(8));
A:=MGAScreenMem[Y*80+X]; B:=CGAScreenMem[Y*80+X];
MGAScreenMem[Y*80+X]:=C; CGAScreenMem[Y*80+X]:=D;
If (A mod 256) =\$41 then begin Mono_Colour:=False; Exit; end;
If (B mod 256) =\$41 then begin Mono_Colour:=True; Exit; end;
end;

Var L,I,X : Word;
MC    : Boolean;
begin
MC:=Mono_Colour;
For L:=1 to 25 do
begin
For I:=1999 downto 80 do
begin
If MC then
begin
If (CGAScreenMem[I] and \$70FF =32) and
(CGAScreenMem[I-80] and \$70FF <>32) then
begin
X:=CGAScreenMem[I]; CGAScreenMem[I]:=CGAScreenMem[I-80];
CGAScreenMem[I-80]:=X;
end;
end
else
begin
If (MGAScreenMem[I] and \$70FF =32) and
(MGAScreenMem[I-80] and \$70FF <>32) then
begin
X:=MGAScreenMem[I]; MGAScreenMem[I]:=MGAScreenMem[I-80];
MGAScreenMem[I-80]:=X;
end;
end;
end;
Delay(100);
end;
end;

begin
end.

Program CRTWipe;
{Causes screen to wipe from bottom & top towards the middle, then from the    }
{   sides to the center...                                                    }
{                                                                             }
{              Released for SWAG use!  Use freely!                            }
{                                                                             }
{   But if you do use it, please let me know...                               }
{                                                                             }
{         Allen Walker  - Crazy Train ][  (604)383-2201                       }
{                                                                             }
Uses CRT;

Var MGAScreenMem:Array[0..1999] of Word Absolute \$B000:0000;
CGAScreenMem:Array[0..1999] of Word Absolute \$B800:0000;
MC : Boolean;

Function Mono_Colour:Boolean;
{Mono = False, Color = True}
Var I,J,X,Y:Integer;
A,B,C,D:Word;
begin
X:=WhereX-1; Y:=WhereY-1;
C:=MGAScreenMem[Y*80+X]; D:=CGAScreenMem[Y*80+X];
Write('A'+Chr(8));
A:=MGAScreenMem[Y*80+X]; B:=CGAScreenMem[Y*80+X];
MGAScreenMem[Y*80+X]:=C; CGAScreenMem[Y*80+X]:=D;
If (A mod 256) =\$41 then begin Mono_Colour:=False; Exit; end;
If (B mod 256) =\$41 then begin Mono_Colour:=True; Exit; end;
end;

Procedure SetChar(N,Z:Word);
begin
If MC then CGAScreenMem[N]:=Z else MGAScreenMem[N]:=Z;
end;

begin
end;

Procedure WipeIt;
Var L,X,Y,Z : Word;
begin
MC:=Mono_Colour;
For L:=1 to 12 do
For Y:=12 downto 0 do
begin
For X:=0 to 79 do
begin
end;
For X:=0 to 79 do
begin
SetChar(X+(80*(25-Y)),1792);
end;
end;
Delay(100);
For X:=0 to 39 do
begin
SetChar(X+960,1792); SetChar(1039-X,1792); Delay(10);
end;
end;

begin
WipeIt;
end.

``````