{
 FollowMouse.p Copyright © Kamran Karimi. Shows a pair of small blinking
 eyes. Compiled using  Maxon KickPascal on an A500
} 

Program FollowMouse;

uses Intuition;


Type
  Plane = Array[1..39] of Word;     { 3*13 = 39;place for the images }

  label EndIt;

Var
  bool: Boolean;
  x1,y1,Old,R,count,CurCoOrd,CurImage,SameImage,PrevCoOrd :integer;
  Sec1,Mic1,Sec2,Mic2 : Long;
  x,add,Ang,Mx,My :real;
  Wind :NewWindow;
  Rast :^RastPort;
  Win :^Window;
  Mes1,Mes2 :^IntuiMessage;
  PRG,Name :IntuiText;
  ImSquaint,ImStraight,ImDown,ImUp,ImLeft,ImRight,ImRU,ImRD,ImLU,
                                   ImLD,ImF1,ImF2,ImF3,ImF4 :Image;
  Down,Up,Left,Right,RU,RD,LU,LD,Squaint,Straight,F1,F2,F3,F4 :^Plane;

Procedure Initialize;
 begin

  {initializing the images: }


  Straight^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111000011 ,%1111000000001111 ,%1100001111110000,
  %0000111110000001 ,%1111000000001111 ,%1000000111110000,
  %0000111111000011 ,%1111000000001111 ,%1100001111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  Down^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000011111000011 ,%1110000000000111 ,%1100001111100000,
  %0000001110000001 ,%1100000000000011 ,%1000000111000000,
  %0000000111000011 ,%1000000000000001 ,%1100001110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  Up^ := Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111000011 ,%1000000000000001 ,%1100001110000000,
  %0000001110000001 ,%1100000000000011 ,%1000000111000000,
  %0000011111000011 ,%1110000000000111 ,%1100001111100000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  Left^ :=Plane(
  %0000000000000000 ,%0000000000000000,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000110000111111 ,%1111000000001100 ,%0011111111110000,
  %0000100000011111 ,%1111000000001000 ,%0001111111110000,
  %0000110000111111 ,%1111000000001100 ,%0011111111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  Right^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111111100 ,%0011000000001111 ,%1111110000110000,
  %0000111111111000 ,%0001000000001111 ,%1111100000010000,
  %0000111111111100 ,%0011000000001111 ,%1111110000110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  LD^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111000011111 ,%1111000000001110 ,%0001111111110000,
  %0000010000001111 ,%1110000000000100 ,%0000111111100000,
  %0000001000011111 ,%1100000000000010 ,%0001111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  RD^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111000 ,%0111000000001111 ,%1111100001110000,
  %0000011111110000 ,%0010000000000111 ,%1111000000100000,
  %0000001111111000 ,%0100000000000011 ,%1111100001000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  RU^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111000 ,%0100000000000011 ,%1111100001000000,
  %0000011111110000 ,%0010000000000111 ,%1111000000100000,
  %0000111111111000 ,%0111000000001111 ,%1111100001110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  LU^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001000011111 ,%1100000000000010 ,%0001111111000000,
  %0000010000001111 ,%1110000000000100 ,%0000111111100000,
  %0000111000011111 ,%1111000000001110 ,%0001111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

  Squaint^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111111100 ,%0011000000000100 ,%0011111111110000,
  %0000111111111000 ,%0001000000001000 ,%0001111111110000,
  %0000111111111100 ,%0011000000001100 ,%0011111111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );


 F1^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

 F2^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001110000001 ,%1100000000000011 ,%1000000111000000,
  %0000010001111110 ,%0010000000000100 ,%0111111000100000,
  %0000101111111111 ,%1101000000001011 ,%1111111111010000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

 F3^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000011111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000100000000000 ,%0001000000001000 ,%0000000000010000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );

 F4^ :=Plane(
  %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  %0000101111111111 ,%1101000000001011 ,%1111111111010000,
  %0000010001111110 ,%0010000000000100 ,%0111111000100000,
  %0000001110000001 ,%1100000000000011 ,%1000000111000000,
  %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  %0000000000000000 ,%0000000000000000 ,%0000000000000000 );


  { Image-Structure }
  ImStraight:=Image(1,1,
             48,      { width }
             13,      { hight }
             1,       { one Plane }
             Straight,     { data }
             1,0,
             Nil);    { no further Images }

  ImDown:=Image(1,1,
             48,     
             13,     
             1,      
             Down,   
             1,0,
             Nil);   

  ImUp:=Image(1,1,
             48,
             13,
             1,
             Up,
             1,0,
             Nil);

  ImRight:=Image(1,1,
             48,
             13,
             1,
             Right,
             1,0,
             Nil);

  ImLeft:=Image(1,1,
             48,
             13,
             1,
             Left,
             1,0,
             Nil);

  ImRU:=Image(1,1,
             48,
             13,
             1,
             RU,
             1,0,
             Nil);

  ImRD:=Image(1,1,
             48,
             13,
             1,
             RD,
             1,0,
             Nil);

  ImLU:=Image(1,1,
             48,
             13,
             1,
             LU,
             1,0,
             Nil);

  ImLD:=Image(1,1,
             48,
             13,
             1,
             LD,
             1,0,
             Nil);

  ImSquaint:=Image(1,1,
             48,
             13,
             1,
             Squaint,
             1,0,
             Nil);

  ImF1:=Image(1,1,
             48,
             13,
             1,
             F1,
             1,0,
             Nil);

  ImF2:=Image(1,1,
             48,
             13,
             1,
             F2,
             1,0,
             Nil);

  ImF3:=Image(1,1,
             48,
             13,
             1,
             F3,
             1,0,
             Nil);

  ImF4:=Image(1,1,
             48,
             13,
             1,
             F4,
             1,0,
             Nil);
 end;


Function FindWhere : integer;
 begin
  Mx :=Win^.MouseX;
  Mx :=Mx-25;        {bring it to...(50 div 2 = 25)}
  My :=Win^.MouseY;
  My :=My-6;             {...the center of the window.(13 div 2 = 6)}
  if My<0 then add:=90
   else add:=270;    {these additions are necessary to gain a 'Normal' angel}
        {any body who wants to know more can print the Tan(Mx/My) for some
                                                                   Mx and My}
  if My=0 then My:=1; {avoid division by zero}

  x:=Mx/My;             {now w'll take the Tan(Mx/My) by the Taylor method}
  if abs(x)<1 then
   Ang:=x-x*x*x/3+x*x*x*x*x/5
  else if x>=1 then
   Ang:=3.14/2-1/x+1/(3*x*x*x)
  else Ang:=-3.14/2-1/x+1/(3*x*x*x);

  Ang:=Ang*180/3.14; {convert it to degrees}
  Ang :=Ang+add;

           {now we'll decide which image to show}
  CurCoOrd := round(Mx + My);
  if (abs(Mx)<12) and (abs(My)<9) then begin
   FindWhere := 0;
   exit;
   end;

  if (Ang > 5) and (Ang < 175) then begin
   if (Ang < 75) then begin
    FindWhere := 1;
    exit;
    end;
   if (Ang > 105) then begin
    FindWhere := 2;
    exit;
    end;
    FindWhere := 3;
    exit;
  end;

  if (Ang >175) and (Ang <185) then begin
   FindWhere := 4;
   exit;
   end;
  if (Ang > 185) and (Ang <255) then begin
   FindWhere := 5;
   exit;
   end;
  if (Ang >255) and (Ang <285) then begin
   FindWhere := 6;
   exit;
   end;
  if (Ang >285) and (Ang <355) then begin
   FindWhere := 7;
   exit;
   end;
  FindWhere := 8;
end;

Procedure ShowImage;
 begin
  case CurImage of
   0: DrawImage(Rast,^ImSquaint, 0, 0);
   1: DrawImage(Rast, ^ImRU, 0, 0);
   2: DrawImage(Rast,^ImLU, 0, 0);
   3: DrawImage(Rast,^ImUp, 0, 0);
   4: DrawImage(Rast,^ImLeft, 0, 0);
   5: DrawImage(Rast,^ImLD, 0, 0);
   6: DrawImage(Rast,^ImDown, 0, 0);
   7: DrawImage(Rast,^ImRD, 0, 0);
   8: DrawImage(Rast,^ImRight, 0, 0);
  end;
end;

Procedure Blink;
 begin
  DrawImage(Rast,^ImF1, 0, 0);
  Delay(1);
  DrawImage(Rast,^ImF2, 0, 0);
  Delay(1);
  DrawImage(Rast,^ImF3, 0, 0);
  Delay(1);
  DrawImage(Rast,^ImF4, 0, 0);
  Delay(1);
  DrawImage(Rast,^ImF1, 0, 0);
  Delay(12);
  DrawImage(Rast,^ImF4, 0, 0);
  Delay(1);
  DrawImage(Rast,^ImF3, 0, 0);
  Delay(1);
  DrawImage(Rast,^ImF2, 0, 0);
  Delay(1);
  DrawImage(Rast,^ImF1, 0, 0);
  Delay(3);
 end;

Procedure LeftRight;
 begin
  for count := 1 to 2 do begin
   DrawImage(Rast,^ImStraight, 0, 0);
   Delay(3);
   DrawImage(Rast,^ImRight, 0, 0);
   Delay(30);
   DrawImage(Rast,^ImStraight, 0, 0);
   Delay(6);
   DrawImage(Rast,^ImLeft, 0, 0);
   Delay(30);
   DrawImage(Rast,^ImStraight, 0, 0);
   Delay(3)
  end;
end;

Procedure GoToSleep;
 Begin
  DrawImage(Rast,^ImF1, 0, 0);
  Delay(2);
  DrawImage(Rast,^ImF2, 0, 0);
  Delay(2);
  DrawImage(Rast,^ImF3, 0, 0);
  Delay(2);
  DrawImage(Rast,^ImF4, 0, 0);
  Delay(10);
end;

Procedure Effect;
 begin
  SameImage := 0;
  bool := WindowToFront(Win);
  LeftRight;
  GoToSleep;
  CurImage := FindWhere;
  while(CurCoOrd = PrevCoOrd) do begin
   Delay(10);
   CurImage := FindWhere;
   Inc(SameImage);
   if (SameImage = 150) then begin
    LeftRight;
    SameImage := 0;
    ShowImage;
    Delay(25);
    GoToSleep;
   end;
  end;
  DrawImage(Rast,^ImF3, 0, 0);
  Delay(2);
  DrawImage(Rast,^ImF2, 0, 0);
  Delay(2);
  DrawImage(Rast,^ImF1, 0, 0);
  Delay(2);
end;

Begin
  PrevCoOrd := 0;
  PRG:=Intuitext(1,0,0,0,0,Nil  ,'   FollowMouse',Nil);
  Name:=Intuitext(1,0,0,0,10,Nil,'By Kamran Karimi',^PRG);

  { reserve memory: } { 2 = "MEMF_CHIP" }
  Straight:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  Squaint:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  Up:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  Down:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  Left:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  Right:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  RU:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  RD:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  LU:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  LD:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  F1:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  F2:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  F3:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  F4:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );

  if(Squaint=nil) or (Up=Nil) or (Down=Nil) or (Right=Nil) or (Left=Nil)
   or (LU=Nil) or (LD=Nil) or (RU=Nil) or (RD=Nil) or (F1=Nil)
   or (F2=Nil) or (F3=Nil) or (F4=Nil) or (Straight=Nil)then goto EndIt;

  Initialize;

  Old:=SetTaskPri(FindTask(NIL),-2);
  Randomize;
  x1 := Random(400) + 80;
  y1 := Random(140) + 20;
  Wind:=NewWindow(x1,y1,150,35,0,1,0,WINDOWDRAG,
                   Nil,Nil,'FollowMouse',Nil,Nil,0,0,0,0,WBENCHSCREEN);
  Win:=OpenWindow(^Wind);
  if (Win = Nil) then goto EndIt;
  Rast:=Win^.RPort;
  PrintItext(Rast,^Name,10,12);
  Delay(150);
  CloseWindow(Win);

  Wind:=NewWindow(x1,y1,50,13,0,0,MOUSEBUTTONS,WINDOWDRAG or RMBTRAP,
                      Nil,Nil,'FM',Nil,Nil,0,0,0,0,WBENCHSCREEN);
  Win:=OpenWindow(^Wind);
  if (Win = Nil) then goto Endit;

  Rast:=Win^.RPort;

  while (True) do  {This is the main loop}
  begin
  Mes1 := Get_Msg(Win^.UserPort);
  if(Mes1 <> Nil) then begin
   Sec1 := Mes1^.Seconds;
   Mic1 := Mes1^.Micros;
  end;
  Mes2 := Get_Msg(Win^.UserPort);
  if(Mes2 <> Nil) then begin
   Sec2 := Mes2^.Seconds;
   Mic2 := Mes2^.Micros;
  end;
  if((Mes1 <> Nil) and (Mes2 <> Nil)) then begin
   if(DoubleClick(Sec1,Mic1,Sec2,Mic2)) then begin
    x1 := SetTaskPri(FindTask(NIL),Old);
    goto EndIt;
   end;
  end;
  if(Mes1 <> Nil) then Reply_Msg(Mes1);
  if(Mes2 <> Nil) then Reply_Msg(Mes2);
  CurImage := FindWhere;
  ShowImage;
  Delay(3);
  if (CurCoOrd = PrevCoOrd) then Inc(SameImage)
  else begin
   PrevCoOrd := CurCoOrd;
   SameImage := 0;
  end;
  if(SameImage = 180) then begin
   Effect;
   SameImage := 0;
  end;
  R := Random(40);
  if R>38 then Blink;
  end;

EndIt:
 Reply_Msg(Mes1);
 Reply_Msg(Mes2);
 repeat
  Mes1 := Get_Msg(Win^.UserPort);
  if (Mes1 <> Nil) then Reply_Msg(Mes1);
 until (Mes1 = Nil);
 CloseWindow(Win); 
End.

