program demo;
uses
    crt,graph,dos;
const
     Xmax=640;
     Ymax=480;
 
procedure inicializacion;
var
   Gd, Gm: Integer;
begin
     Gd := Detect;
     InitGraph(Gd, Gm, '');
     if GraphResult <> grOk then
     Halt(1);
     randomize;
end;
 
procedure esperar;
var
tecleado:char;
const esc=#27;
begin
     repeat until keypressed;
     tecleado:=readkey;
     if tecleado = #0 then tecleado:=readkey;
     if tecleado = esc then halt(0)
     else cleardevice;
end;
 
procedure recuadro;
var
   ViewPort : ViewPortType;
begin
     cleardevice;
     setcolor(white);
     SetLineStyle(solidln, 0, NormWidth);
     GetViewSettings(ViewPort);
     with ViewPort do
     Rectangle(0, 0, x2-x1, y2-y1)
end;
 
procedure stars;
begin
 
     repeat
     setbkcolor(0);
     putpixel(random(getmaxX-5) , random(getmaxY-5) , (white))
     until keypressed;
     esperar;
end;
 
procedure lineas;
begin
     repeat
     setbkcolor(0);
     setcolor(random(getmaxcolor));
     line((getmaxX div 2) ,( getmaxY div 2) ,random(getmaxX-5) , random(getmaxY-5));
     until keypressed;
     delay(1);
     esperar;
end;
procedure elipses;
begin
 
    repeat
    setcolor(random(100)); ellipse(random(getmaxX-50),random(getmaxY-50),
random(360),random(360),random(50),random(50));
    until keypressed;
    delay(100);
    esperar;
end;
procedure tramado;
var x,y:word;
begin
    y:=1;
    x:=1;
    while y<480 do
    while x<640 do
     begin
      y:=y+20;
      x:=x+20;
      setcolor(lightblue);
      line(0,y,x,480);
      line(x,0,640,y);
    end;
  esperar;
  end;
begin{cuerpo principal}
 inicializacion;
 recuadro;
 stars;
 recuadro;
 elipses;
 recuadro;
 lineas;
 tramado;
 readln;
 closegraph;
 end.