home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Programmation / e / Modules / ABModules.lha / oomodules / msgport.e < prev    next >
Encoding:
Text File  |  1995-06-25  |  1.7 KB  |  58 lines

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