(* -------------------------------------------------------------------------
  :Program.       PortInOut
  :Author.        Kai Bolay
  :Address.       Hoffmannstraße 168, 7250 Leonberg
  :Phone.         07152/22135
  :History.       v1.0 Initial
  :Copyright.     Freeware
  :Language.      Modula-2
  :Translator.    M2Amiga 3.3d
  :Contents.      interface for Tasks which want to use PortPrint's Window
------------------------------------------------------------------------- *)
IMPLEMENTATION MODULE PortInOut;

FROM SYSTEM IMPORT ADR;
FROM Str    IMPORT Copy, Length;
FROM Exec   IMPORT AllocMem, MemReqs, MemReqSet, PutMsg, FindPort, MessagePtr,
                   MsgPortPtr, NodeType, Message, FreeMem, Forbid, Permit;

VAR PortPtr : MsgPortPtr;

(* $S- *)
PROCEDURE SendText (Text : ARRAY OF CHAR);

VAR TextPtr : POINTER TO ARRAY [0..999] OF CHAR;
    MsgPtr  : MessagePtr;

BEGIN
   Forbid;
   PortPtr := FindPort (ADR (PortName));
   IF PortPtr # NIL THEN
      TextPtr := AllocMem (Length (Text) + 1, MemReqSet {});
      IF TextPtr # NIL THEN
         Copy (TextPtr^, Text);
         MsgPtr := AllocMem (SIZE (Message), MemReqSet {});
         IF MsgPtr # NIL THEN
            WITH MsgPtr^.node DO
               name := TextPtr;
               type := message;
            END; (* WITH *)
            PutMsg (PortPtr, MsgPtr);
         ELSE
            FreeMem (TextPtr, Length (Text) + 1);
         END; (* IF *)
      END; (* IF *)
   END; (* IF *)
   Permit;
END SendText;
(* $S= *)

END PortInOut.
