(******************************************************************************

    :Program.    ObCEDCall.mod
    :Contents.   Communication with CED
    :Author.     Achim Siebert
    :Address.    Nobileweg 67 , 7000 Stuttgart 40
    :Copyright.  Public Domain
    :Language.   Oberon
    :Translator. AmigaOberon A+L
    :Imports.    CED
    :History.    Dec-1990; V1.2
    :Usage.      ObCEDCall [c][l][e][opt] | [next] | [prev] | [first] | [quit]

*******************************************************************************)

MODULE ObCEDCall;

IMPORT
       ExecSupport,
       Arguments,
       Strings,
       Dos,
       CED,
       s:SYSTEM,
       Exec;

VAR
    i : INTEGER;
    msp, replmsp : Exec.MsgPortPtr;
    msgstring : ARRAY 8 OF CHAR;
    msgstringPtr : POINTER TO ARRAY 8 OF CHAR;
    mymess : CED.CEDMsg;

CONST myportname = "OB_CED";
      myreplyname = "ObRxCallReply";

PROCEDURE GetArgs():BOOLEAN;

BEGIN

   i := Arguments.NumArgs();
   IF i = 1 THEN
      Arguments.GetArg(1,msgstring);
      Strings.Upper(msgstring);
      RETURN TRUE;
   END;
   RETURN FALSE;

END GetArgs;

BEGIN

   msp := Exec.FindPort(myportname);
   LOOP
      IF msp#NIL THEN
         replmsp := ExecSupport.CreatePort(s.ADR(myreplyname),0);
         IF replmsp = NIL THEN HALT(20) END;
         mymess.cmNode.node.type:=Exec.message;
         mymess.cmNode.length:=s.SIZE(CED.CEDMsg);
         mymess.cmNode.replyPort:=replmsp;
         IF NOT GetArgs() THEN EXIT;END;
         NEW(msgstringPtr);
         IF msgstringPtr = NIL THEN HALT(20) END;
         mymess.args[0] := msgstringPtr;
         COPY(msgstring,msgstringPtr^);
         Exec.PutMsg(msp,s.ADR(mymess));
         Exec.WaitPort(replmsp);
         IF Exec.GetMsg(replmsp) = NIL THEN END;
         ExecSupport.DeletePort(replmsp);
         DISPOSE(msgstringPtr);
         EXIT;
      ELSE IF Dos.Execute("Run >NIL: ObCED",NIL,NIL) THEN
              Dos.Delay(100);
              msp := Exec.FindPort(myportname);
              IF msp = NIL THEN EXIT END;
           ELSE EXIT;
           END;
      END;
    END;

END ObCEDCall.
