home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 277.lha / TestRH / src / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-08-08  |  2.2 KB  |  122 lines

  1.  
  2. /*
  3.  * MAIN.C
  4.  *
  5.  *    (C)Copyright 1989 by Vidyanath Rao. All Rights Reserved.
  6.  *
  7.  */
  8.  
  9. #include "defs.h"
  10. #include <libraries/dos.h>
  11. #include <functions.h>
  12.  
  13. #define CPF_SIGFD  1
  14. #define CPF_RHPORT 2
  15.  
  16. struct MsgPort *RHPort;
  17.  
  18. UWORD ChkPorts;
  19.  
  20. extern char* RHUsrPassWd;
  21. struct Library *RexxSysBase;
  22.  
  23. main(mac, mav)
  24. char *mav[];
  25. {
  26.     unsigned long rcvdmask, RHMask, Mask;
  27.     char cmd[256];
  28.  
  29.     if ((String  = (char *)malloc(1)) == NULL) {
  30.     exiterr("Unable to get space for String");
  31.         /*  initialize $ variable   */
  32.     }
  33.     *String = 0;
  34.  
  35.     if ( (RexxSysBase = OpenLibrary("rexxsyslib.library", 0)) == NULL) {
  36.     exiterr("Unable to open Rexx System library");
  37.     }
  38.     if ( (RHPort = CreatePort("RDE", 0L)) == NULL) {
  39.     exiterr("Unable to create Rexx Host port");
  40.     }
  41.     init_command();
  42.     RHMask = 1 << RHPort->mp_SigBit;
  43.     Mask = SIGBREAKF_CTRL_D | RHMask;
  44.     if ( (mav[1] != NULL) && (mav[1][0] != '\0') ) {
  45.     RHUsrPassWd = mav[1];
  46.     }
  47.  
  48.     puts("TestRH: Example of a bi-dirctional ARexx Host");
  49.     puts("\251Copyright 1989 by Vidhyanath K. Rao. All rights reserved");
  50.     puts("Hit Ctrl-D before entering your command.");
  51. loop:
  52.     for (Quitflag = 0; ; ) {
  53.  
  54.     rcvdmask = (ChkPorts == 0) ? Wait(Mask) : 0L;
  55.  
  56.     if ( ((ChkPorts & CPF_RHPORT) != 0)
  57.          || ((rcvdmask & RHMask) != 0) ){
  58.         struct Message *msg;
  59.  
  60.         while ((msg = GetMsg(RHPort)) != NULL) {
  61.         disprxmsg(msg);
  62.         if (SetSignal(0, SIGBREAKF_CTRL_D) & SIGBREAKF_CTRL_D) {
  63.             ChkPorts |= (CPF_SIGFD | CPF_RHPORT);
  64.             goto usrcmds;
  65.         }
  66.         }
  67.         ChkPorts &= ~CPF_RHPORT;
  68.     }
  69.  
  70. usrcmds:
  71.     if ( (rcvdmask & SIGBREAKF_CTRL_D) || (ChkPorts & CPF_SIGFD) ){
  72.         puts("Enter Command");
  73.         gets(cmd);
  74.         do_command(cmd);
  75.         ChkPorts &= ~CPF_SIGFD;
  76.     }
  77.         
  78.     if (Quitflag)
  79.         break; /* out of the for loop */
  80.  
  81.     }
  82.  
  83.     RHFlags |= RHF_HALTED;
  84.     killRH();
  85. }
  86.  
  87.  
  88.  
  89.  
  90. killRH()
  91.  
  92. {
  93.     extern UWORD RHOutCount;
  94.     struct Message *msg;
  95.  
  96.     while(RHOutCount > 0) {
  97.     WaitPort(RHPort);
  98.     while( (msg = GetMsg(RHPort)) != NULL)
  99.         disprxmsg(msg);
  100.     }
  101.     DeletePort(RHPort);
  102.     CloseLibrary(RexxSysBase);
  103. }
  104.  
  105.  
  106. exiterr(msg)
  107.     char *msg;
  108.  
  109. {
  110.     if (RHPort != NULL)
  111.     DeletePort(RHPort);
  112.     if (RexxSysBase != NULL)
  113.     CloseLibrary(RexxSysBase);
  114.     puts(msg);
  115.     exit(5L);
  116. }
  117.  
  118. _wb_parse()
  119.  
  120. {
  121. }
  122.