{ Kleines Programm, das zeigt, wie man ganz einfach }
{ seine Programme auch über ARexx steuern kann.     }
{ ©1994 by Björn Schotte.                           }
{ Geschrieben mit MaxonPASCAL 3                     }
{ Hier wird auf verschiedene Befehle reagiert:      }
{                                                   }
{ CLOSETP       Beendet das Programm                }
{ BEEP          Läßt den Bildschirm aufblitzen      }

{ Hier noch ein kleines ARexx-Programm, das zeigt,  }
{ wie man dieses Programm steuert. Dazu muß aber    }
{ erst das Pascal-Programm gestartet werden !!      }
{                                                   }
{ /* RexxTest-Test */                               }
{ ADDRESS TEST_REXX                                 }
{ BEEP                                              }
{ CLOSETP                                           }
{                                                   }
{ Das war`s !!                                      }
{                                       BS/28/07/94 }


PROGRAM RexxTest;

{$opt q}

USES ExecSupport, Intuition;

{$incl "rexxsyslib.lib"}

VAR
  port : p_MsgPort;
  sigs,m : LONG;
  msg  : p_RexxMsg;
  dummy: BOOLEAN;
  argo : STRING[256];

BEGIN
  OpenLib(RexxSysBase, "rexxsyslib.library",0);
  { Message-Port kreieren }
  port := CreateMsgPort;
  IF port = NIL THEN Error("Kann keinen Message-Port kreieren !!");
  port^.mp_Node.ln_Name := "TEST_REXX";
  { Port öffentlich machen: }
  AddPort(port);
  sigs := LONG(1) SHL LONG(port^.mp_SigBit); { Signal-Maske }
  dummy := FALSE;
  REPEAT
    m := _Wait(sigs); { Warten ... }
    IF (m AND sigs)=sigs THEN
    BEGIN
      msg := p_RexxMsg(GetMsg(port)); { Message abholen }
      argo := msg^.rm_Args[0];
      { Befehls-Abfrage }
      IF argo="CLOSETP" THEN dummy := TRUE
      ELSE IF argo="BEEP" THEN DisplayBeep(NIL)
      ELSE Writeln(argo);
      { Return-Codes auf 0 }
      msg^.rm_Result1 := 0;
      msg^.rm_Result2 := 0;
      { Message beantworten }
      ReplyMsg(p_Message(msg));
    END;
  UNTIL dummy;
  { Alle noch anliegenden Messages entfernen }
  Forbid;
  msg := p_RexxMsg(GetMsg(port));
  WHILE msg <> NIL DO
  BEGIN
    ReplyMsg(p_Message(msg));
    msg := p_RexxMsg(GetMsg(port));
  END;
  Permit;
  RemPort(port); { Port nicht-öffentlich machen }
  DeleteMsgPort(port); { Port löschen }
END.


