/* run a script from REXX: (set the default extension in sendRexxMsg) */
sendRexxMsg('REXX','scriptname',NIL,0)
/* send a 'QUIT' command to ourselves :o) */
sendRexxMsg('ExampleHost','QUIT',NIL,0)
*/
/* inform the user we are running */
WriteF('Waiting for events to occur. Send me an ARexx QUIT command by typing:\nrx "ADDRESS \aExampleHost\a; QUIT" from a shell. Or press CTRL-C to break me.\n')
/* wait for events */
wait()
deletePort(hostport)
ELSE
WriteF('Sorry dude, seems like I\am already running once.\n')
ENDIF
CloseLibrary(rexxsysbase)
ELSE
WriteF('Could not open the rexxsyslib.library. I really need it!\n')
ENDIF
EXCEPT
WriteF('Something like \d went wrong, ya see?\n')
deletePort(hostport)
hostport:=NIL
IF rexxsysbase
CloseLibrary(rexxsysbase)
rexxsysbase:=NIL
ENDIF
ENDPROC
/* FEND */
/* FOLD "wait" */
PROC wait()
DEF signalmask=0
DEF hostmask=0
/* signalmask for our host port */
hostmask:=Shl(1,hostport.sigbit)
/* still running or unconfirmed messages? */
WHILE runflag OR unconfirmed
/* wait for event signals */
signalmask:=Wait(hostmask OR SIGBREAKF_CTRL_C)
/* and handle all happened events */
IF signalmask AND hostmask THEN handleRexxMsg()
IF signalmask AND SIGBREAKF_CTRL_C THEN runflag:=FALSE
ENDWHILE
ENDPROC
/* FEND */
/* FOLD "handleRexxMsg" */
PROC handleRexxMsg()
/* pointer to handled message */
DEF rexxmsg:PTR TO rexxmsg
/* pointer to messagenode */
DEF msgnode:PTR TO mn
/* pointer to listnode of message */
DEF listnode:PTR TO ln
/* list of 16 pointers to command strings */
DEF rexxargs:PTR TO LONG
/* points to first char of trimmed command */
DEF command:PTR TO CHAR
/* (another) message in queue? */
WHILE rexxmsg:=GetMsg(hostport)
/* set pointer to messagenode */
msgnode:=rexxmsg.mn
/* set pointer to listnode */
listnode:=msgnode.ln
/* set pointer to commands */
rexxargs:=rexxmsg.args
/* confirmation reply of a message sent by us? */
IF listnode.type=NT_REPLYMSG
/* original message pointer present? */
IF rexxargs[15]
/* reply original message */
ReplyMsg(rexxargs[15])
ENDIF
/* delete this confirmation message */
DeleteArgstring(rexxargs[0])
DeleteRexxMsg(rexxmsg)
/* decrease unconfirmed count */
DEC unconfirmed
/* a brand new message */
ELSE
/* point to command after skipping spaces etc. */
command:=TrimStr(rexxargs[0])
WriteF('We received an ARexx command: \s\n',command)
/* initialize the resultcodes */
rexxmsg.result1:=0
rexxmsg.result2:=NIL
/* example of handling a command that someone sent to us