Program matrix2;
uses crt;
type sor = array[1..80] of char;
const fol : string = 'Follow the white rabbit';
      n1 : string = 'Neo';
      n2 : string = 'Wake up Neo';
var s : sor;
Procedure torl;
label c,veg;
          begin
          ASM
           MOV AX,0B800h
           MOV ES,AX
           MOV DI,0
           MOV AX,02FFh
          c:
           MOV ES:[DI],AX
           CMP DI,4000d
           JE veg
           ADD DI,2
           JMP c
          veg:
          end;
          gotoxy(1,1);
          end;
Procedure scroll;
label c,veg;
          begin
          ASM
           MOV AX,0B800h
           MOV ES,AX
           MOV DI,4000d
           MOV SI,3840d
         c:
           MOV AX,ES:[SI]
           MOV ES:[DI],AX
           CMP DI,0000d
           JE veg
           SUB DI,2
           SUB SI,2
           JMP c
          veg:
          end;
          end;
Procedure rndsor2(var s : sor);
     var j,d : byte;
     begin
      gotoxy(1,1);
      For j:=1 to 80 do
       begin
        d:=30+random(225);
        if (not(Ord(s[j])=255) or (d>245)) then s[j]:=char(d);
        if d>250 then s[j]:='ÿ';
      end;
      For j:=1 to 80 do
       begin
        write(s[j]);
       end
      end;
Procedure Folow(m: string);
var i  : byte;
    d  : integer;
      begin;
      i:=0;
      Repeat
      i:=i+1;
      write(m[i]);
      d:= trunc(596*(random(100)));
      delay(d);
      Until (i=length(m)) or (keypressed)
      end;
begin torl;
      textcolor(green);
      randomize;
{      folow(n1);
      delay(1300);
      torl;
      folow(n2);
      delay(1300);
      torl;
      folow(fol);
      delay(1300);
      torl;       }
      Repeat
      scroll;
      rndsor2(s);
      delay(3500);
      until keypressed;
end.