Program IntMsgDemo3; { dritte Version }

{$path 'pascal:include/'; incl 'intuition.lib' }

Const
 Rahmenbreite=2;
 Balkenhoehe=12;

Var
 Win: ^Window;
 Msg: ^IntuiMessage;
 Ende: Boolean;
 Signale: Long;

Procedure Star(x, y, farb: integer);
  Var IText: IntuiText;
  Begin
    IText:=IntuiText(farb, 0, 0, -4, -4, Nil, '*', Nil);
    PrintIText(Win^.RPort, ^Itext, x-Rahmenbreite, y-Balkenhoehe)
  End;

Begin
  Win:=Open_Window(20,10, 200,80, 1, _CLOSEWINDOW or MOUSEBUTTONS,
                   ACTIVATE or WINDOWCLOSE or WINDOWDEPTH
                    or WINDOWDRAG or RMBTRAP or GIMMEZEROZERO,
                   'Klick mich!', Nil, 100, 20, 640, 256);
  Ende:= false;
  OpenLib(IntBase, 'intuition.library', 0);   { ist nötig, weil die
                      Intuition-Funktion "PrintIText" benutzt wird. }
  Repeat

    { auf Nachricht warten: }
    Repeat
      Msg:= Get_Msg(Win^.UserPort);
      If Msg=Nil Then
        Signale:=Wait(-1)
    Until Msg<>Nil;

    Case Msg^.Class Of
     _CLOSEWINDOW: Ende:=true;
     MOUSEBUTTONS: If (Msg^.Code and $80)=0 Then
                     Begin
                       If (Msg^.Code and $01)=0 Then
                         Star(Msg^.MouseX, Msg^.MouseY,3) { links }
                       Else
                         Star(Msg^.MouseX, Msg^.MouseY,1) { rechts }
                     End
    Otherwise
      { unbekannte Message empfangen }
    End;

    Reply_Msg(Msg);   { Nachricht als ausgewertet kennzeichnen }

  Until Ende;
  Close_Window(Win);
  CloseLib(IntBase);  { eigentlich überflüssig }
End.
