home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / mar94 / util / misc / kalender.lha / Kalender / txt / ARexx.mod < prev    next >
Text File  |  1993-12-18  |  2KB  |  106 lines

  1.  IMPLEMENTATION MODULE ARexx; (* Copyright 1993 by Kai Hofmann *)
  2.  
  3.  (*$ StackChk       := FALSE *)
  4.  (*$ RangeChk       := FALSE *)
  5.  (*$ OverflowChk    := FALSE *)
  6.  (*$ NilChk         := FALSE *)
  7.  (*$ CaseChk        := FALSE *)
  8.  (*$ ReturnChk      := FALSE *)
  9.  (*$ LargeVars      := FALSE *)
  10.  (*$ EntryClear     := TRUE  *)
  11.  (*$ Volatile       := TRUE  *)
  12.  (*$ StackParms     := TRUE  *)
  13.  (*$ CStrings       := TRUE  *)
  14.  
  15.  
  16.  FROM SYSTEM    IMPORT    ADR,ADDRESS,BITSET;
  17.  FROM ExecD    IMPORT    MsgPort,MsgPortPtr,MsgPortAction;
  18.  FROM ExecL    IMPORT    CreateMsgPort,DeleteMsgPort,FindPort,GetMsg,ReplyMsg,
  19.             PutMsg,Forbid,Permit,WaitPort;
  20.  FROM RexxD    IMPORT    RexxMsg,RexxMsgPtr,RexxArg,RexxArgPtr,Command;
  21.  FROM RexxL    IMPORT    CreateArgstring,DeleteArgstring,
  22.             CreateRexxMsg,DeleteRexxMsg,
  23.             ClearRexxMsg,FillRexxMsg;
  24.  FROM String    IMPORT    Length;
  25.  
  26.  
  27.  VAR
  28.     erg    : BOOLEAN;
  29.     port    : MsgPortPtr;
  30.  
  31.  
  32.  PROCEDURE PutRexxMsg(msg : RexxMsgPtr; portname : ARRAY OF CHAR) : BOOLEAN;
  33.  
  34.  VAR
  35.     dport    : MsgPortPtr;
  36.     stat    : BOOLEAN;
  37.  
  38.  BEGIN
  39.    stat := FALSE;
  40.    Forbid();
  41.    dport := FindPort(ADR(portname));
  42.    IF dport # NIL THEN
  43.      PutMsg(dport,msg);
  44.      stat := TRUE;
  45.    END;
  46.    Permit();
  47.    RETURN(stat);
  48.  END PutRexxMsg;
  49.  
  50.  
  51.  PROCEDURE OpenRexxPort() : MsgPortPtr;
  52.  
  53.  VAR
  54.     port    : MsgPortPtr;
  55.  
  56.  BEGIN
  57.    port := CreateMsgPort();
  58.    RETURN(port);
  59.  END OpenRexxPort;
  60.  
  61.  
  62.  PROCEDURE CloseRexxPort(port : MsgPortPtr);
  63.  
  64.  BEGIN
  65.    ;
  66.    DeleteMsgPort(port);
  67.  END CloseRexxPort;
  68.  
  69.  
  70.  PROCEDURE SendRexxMsg(port : MsgPortPtr; dest : ARRAY OF CHAR;
  71.                         msg : ARRAY OF CHAR) : BOOLEAN;
  72.  
  73.  VAR
  74.     rexxmsg    : RexxMsgPtr;
  75.     arg    : ADDRESS;
  76.     erg    : BOOLEAN;
  77.  
  78.  BEGIN
  79.    rexxmsg := CreateRexxMsg(port,NIL,NIL);
  80.    IF rexxmsg # NIL THEN
  81.      rexxmsg^.action.command := comm;
  82.      arg := CreateArgstring(ADR(msg),Length(msg));
  83.      IF arg # NIL THEN
  84.        ClearRexxMsg(rexxmsg,16);
  85.        erg := FillRexxMsg(rexxmsg,1,BITSET{});
  86.        rexxmsg^.args[0] := arg;
  87.        erg := PutRexxMsg(rexxmsg,dest);
  88.        IF erg THEN
  89.          WaitPort(port);
  90.          rexxmsg := GetMsg(port);
  91.        END;
  92.        DeleteArgstring(arg);
  93.      ELSE
  94.        erg := FALSE;
  95.      END;
  96.      DeleteRexxMsg(rexxmsg);
  97.    ELSE
  98.      erg := FALSE;
  99.    END;
  100.    RETURN(erg);
  101.  END SendRexxMsg;
  102.  
  103.  
  104.  BEGIN
  105.  END ARexx.
  106.