home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / amigae / arismodules / msgport / msgport.e < prev    next >
Text File  |  1977-12-31  |  2KB  |  63 lines

  1. OPT MODULE
  2. OPT PREPROCESS
  3. OPT EXPORT
  4.  
  5. MODULE 'exec/ports','exec/nodes','rexxsyslib','rexx/storage','amigalib/ports'
  6.  
  7. #define _MSGPORTVERSION_ '$VER: msgport.e 01.10 23.08.95\n'
  8.  
  9. EXPORT ENUM CMD,FUNC
  10.  
  11. EXPORT OBJECT msgport
  12.     msgport:PTR TO mp
  13.     ENDOBJECT
  14.  
  15. PROC create(name=NIL:PTR TO LONG,pri=0) OF msgport
  16.     IF name THEN IF FindPort(name) THEN Throw("mp",-2)
  17.     self.msgport:=createPort(name,pri)
  18.     IF (self.msgport=NIL)
  19.         Throw("mp",-1)
  20.         ENDIF
  21.     ENDPROC self.msgport
  22. PROC delete() OF msgport
  23.     IF self.msgport
  24.         deletePort(self.msgport)
  25.         ENDIF
  26.     ENDPROC
  27. PROC end() OF msgport IS self.delete()
  28. PROC reply(msg,dummy1=NIL,dummy2=NIL) OF msgport IS ReplyMsg(msg)
  29. PROC sigbit() OF msgport IS self.msgport.sigbit
  30. PROC sigbitA() OF msgport IS Shl(1,self.sigbit())
  31. PROC getmsg() OF msgport IS GetMsg(self.msgport)
  32. PROC wait() OF msgport IS WaitPort(self.msgport)
  33. PROC putmsg(port:PTR TO mp,m:PTR TO mn) OF msgport IS PutMsg(port,m)
  34. PROC putrx(type,cmd:PTR TO LONG,port=NIL:PTR TO LONG,fx=NIL:PTR TO LONG) OF msgport
  35.     DEF rxm:PTR TO rexxmsg,rxport:PTR TO mp,rc=0,res=NIL,help:PTR TO LONG
  36.     IF fx=NIL THEN StrCopy(fx,'rexx')
  37.     IF (rxm:=CreateRexxMsg(self.msgport,fx,NIL))
  38.         IF type=CMD
  39.             rxm.mn.ln.name:="REXX"
  40.             rxm.action:=RXCOMM
  41.         ELSEIF type:=FUNC
  42.             rxm.mn.ln.name:='REXX'
  43.             rxm.action:=(RXFUNC OR RXFF_RESULT)
  44.             ENDIF
  45.         help:=rxm.args
  46.         help[0]:=CreateArgstring(cmd,StrLen(cmd))
  47.         IF (rxport:=FindPort(port))
  48.             self.putmsg(rxport,rxm)
  49.         ELSE
  50.             RETURN (rc=-255),(res=NIL)
  51.             ENDIF
  52.         self.wait()
  53.         WHILE (rxm:=self.getmsg())
  54.             rc:=rxm.result1
  55.             IF type=FUNC THEN res:=rxm.result2
  56.             ClearRexxMsg(rxm,1)
  57.             DeleteRexxMsg(rxm)
  58.             ENDWHILE
  59.         RETURN rc,res
  60.         ENDIF
  61.     Throw("mp",-3)
  62.     ENDPROC
  63.