
procedure dofrantic; forward;  

procedure dofrantic;      

var
   currPort   : GrafPtr;     
   screenwidth,screenheight,color,dh,dv,
   sh,sv,len,dir,k,old_dir,j : integer;
   newr: Rect;
   eventrec: EventRecord;
   done:boolean;

begin
   HideCursor;              
   if GetMasterSCB >= 128         
     then screenwidth := 640
     else screenwidth := 320;
   screenheight:=200;
   currPort := GetPort;
   SetPort(GetMenuMgrPort); 
   sh:=6; sv:=3;
   done:=false;
   newr.left:= Random mod (screenwidth+1);
   newr.top := Random mod (screenheight+1);
   newr.right:=newr.left+sh;
   newr.bottom:=newr.top+sv;
   old_dir:=0;
   repeat
     color:= random mod 16;
     setdithcolor(color);
     for j:=1 to 20 do 
     begin
       dir:=random mod 2;
       case old_dir of
       0: if dir=0 then dir:=3 else dir:=1;
       1: if dir=1 then dir:=2;
       2: if dir=0 then dir:=1 else dir:=3;
       3: if dir=1 then dir:=2;
       end;
       old_dir:=dir;
       case dir of
       0: begin
            len:=(random mod newr.top) div sv;
            dh:=0; dv:=-sv;
          end;
       1: begin
            len:=(random mod (screenwidth-newr.right)) div sh;
            dh:=sh; dv:=0;
         end;
       2: begin
            len:=(random mod (screenheight-newr.bottom)) div sv;
            dh:=0; dv:=sv;
          end;
       3: begin
            len:=(random mod newr.left) div sh;
            dh:=-sh; dv:=0;
           end;
        end; 
       for k:=1 to len do begin
          offsetrect(newr,dh,dv);
          paintrect(newr);
       end;
       if GetOSEvent(MDownMask+KeyDownMask,eventrec) then
       begin
         done:=true;
         leave;
       end;   
       end;     
   until Done; 
   SetPort(currPort);
   DrawMenuBar;     
   Refresh(nil);
   ShowCursor;
end; 
