home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / misc / imagefx_sdk / sas / scanlib / sendmsg.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-07  |  1.7 KB  |  57 lines

  1. #include <exec/types.h>
  2. #include <exec/ports.h>
  3. #include <clib/exec_protos.h>
  4. #include <clib/rexxsyslib_protos.h>
  5. #include <pragmas/exec_pragmas.h>
  6. #include <pragmas/rexxsyslib_pragmas.h>
  7. #include <rexx/storage.h>
  8. #include <string.h>
  9.  
  10. extern struct Library *SysBase;
  11. static struct Library *RexxSysBase;
  12.  
  13. int SendRexxMsg (char *port, char *command)
  14. {
  15.    struct RexxArg *cmd_arg;
  16.    struct RexxMsg *cmd_msg;
  17.    struct RexxMsg *msg;
  18.    struct MsgPort *host_port;
  19.    struct MsgPort *rexx_port;
  20.    int rc = -1;
  21.  
  22.    if (RexxSysBase = OpenLibrary("rexxsyslib.library", 0)) {
  23.       if (host_port = CreateMsgPort()) {
  24.          if (cmd_arg = (struct RexxArg *)CreateArgstring(command, strlen(command))) {
  25.             if (cmd_msg = CreateRexxMsg(host_port, NULL, NULL)) {
  26.                cmd_msg->rm_Action = RXCOMM;
  27.                ARG0(cmd_msg) = (STRPTR)cmd_arg;
  28.                Forbid();
  29.                if (rexx_port = FindPort(port)) {
  30.                   Permit();
  31.                   PutMsg (rexx_port, (struct Message *)cmd_msg);
  32.                   for (;;) {
  33.                      WaitPort (host_port);
  34.                      while (msg = (struct RexxMsg *)GetMsg (host_port)) {
  35.                         if (msg == cmd_msg) break;
  36.                         ReplyMsg ((struct Message *)msg);
  37.                      }
  38.                      if (msg == cmd_msg) break;
  39.                   }
  40.                   rc = cmd_msg->rm_Result1;
  41.                }
  42.                else {
  43.                   Permit();
  44.                   rc = -2;
  45.                }
  46.                DeleteRexxMsg (cmd_msg);
  47.             }
  48.             DeleteArgstring ((UBYTE *)cmd_arg);
  49.          }
  50.          DeleteMsgPort(host_port);
  51.       }
  52.       CloseLibrary(RexxSysBase);
  53.    }
  54.  
  55.    return(rc);
  56. }
  57.