home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/ports.h>
- #include <clib/exec_protos.h>
- #include <clib/rexxsyslib_protos.h>
- #include <pragmas/exec_pragmas.h>
- #include <pragmas/rexxsyslib_pragmas.h>
- #include <rexx/storage.h>
- #include <string.h>
-
- extern struct Library *SysBase;
- static struct Library *RexxSysBase;
-
- int SendRexxMsg (char *port, char *command)
- {
- struct RexxArg *cmd_arg;
- struct RexxMsg *cmd_msg;
- struct RexxMsg *msg;
- struct MsgPort *host_port;
- struct MsgPort *rexx_port;
- int rc = -1;
-
- if (RexxSysBase = OpenLibrary("rexxsyslib.library", 0)) {
- if (host_port = CreateMsgPort()) {
- if (cmd_arg = (struct RexxArg *)CreateArgstring(command, strlen(command))) {
- if (cmd_msg = CreateRexxMsg(host_port, NULL, NULL)) {
- cmd_msg->rm_Action = RXCOMM;
- ARG0(cmd_msg) = (STRPTR)cmd_arg;
- Forbid();
- if (rexx_port = FindPort(port)) {
- Permit();
- PutMsg (rexx_port, (struct Message *)cmd_msg);
- for (;;) {
- WaitPort (host_port);
- while (msg = (struct RexxMsg *)GetMsg (host_port)) {
- if (msg == cmd_msg) break;
- ReplyMsg ((struct Message *)msg);
- }
- if (msg == cmd_msg) break;
- }
- rc = cmd_msg->rm_Result1;
- }
- else {
- Permit();
- rc = -2;
- }
- DeleteRexxMsg (cmd_msg);
- }
- DeleteArgstring ((UBYTE *)cmd_arg);
- }
- DeleteMsgPort(host_port);
- }
- CloseLibrary(RexxSysBase);
- }
-
- return(rc);
- }
-