home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * MAIN.C
- *
- * (C)Copyright 1989 by Vidyanath Rao. All Rights Reserved.
- *
- */
-
- #include "defs.h"
- #include <libraries/dos.h>
- #include <functions.h>
-
- #define CPF_SIGFD 1
- #define CPF_RHPORT 2
-
- struct MsgPort *RHPort;
-
- UWORD ChkPorts;
-
- extern char* RHUsrPassWd;
- struct Library *RexxSysBase;
-
- main(mac, mav)
- char *mav[];
- {
- unsigned long rcvdmask, RHMask, Mask;
- char cmd[256];
-
- if ((String = (char *)malloc(1)) == NULL) {
- exiterr("Unable to get space for String");
- /* initialize $ variable */
- }
- *String = 0;
-
- if ( (RexxSysBase = OpenLibrary("rexxsyslib.library", 0)) == NULL) {
- exiterr("Unable to open Rexx System library");
- }
- if ( (RHPort = CreatePort("RDE", 0L)) == NULL) {
- exiterr("Unable to create Rexx Host port");
- }
- init_command();
- RHMask = 1 << RHPort->mp_SigBit;
- Mask = SIGBREAKF_CTRL_D | RHMask;
- if ( (mav[1] != NULL) && (mav[1][0] != '\0') ) {
- RHUsrPassWd = mav[1];
- }
-
- puts("TestRH: Example of a bi-dirctional ARexx Host");
- puts("\251Copyright 1989 by Vidhyanath K. Rao. All rights reserved");
- puts("Hit Ctrl-D before entering your command.");
- loop:
- for (Quitflag = 0; ; ) {
-
- rcvdmask = (ChkPorts == 0) ? Wait(Mask) : 0L;
-
- if ( ((ChkPorts & CPF_RHPORT) != 0)
- || ((rcvdmask & RHMask) != 0) ){
- struct Message *msg;
-
- while ((msg = GetMsg(RHPort)) != NULL) {
- disprxmsg(msg);
- if (SetSignal(0, SIGBREAKF_CTRL_D) & SIGBREAKF_CTRL_D) {
- ChkPorts |= (CPF_SIGFD | CPF_RHPORT);
- goto usrcmds;
- }
- }
- ChkPorts &= ~CPF_RHPORT;
- }
-
- usrcmds:
- if ( (rcvdmask & SIGBREAKF_CTRL_D) || (ChkPorts & CPF_SIGFD) ){
- puts("Enter Command");
- gets(cmd);
- do_command(cmd);
- ChkPorts &= ~CPF_SIGFD;
- }
-
- if (Quitflag)
- break; /* out of the for loop */
-
- }
-
- RHFlags |= RHF_HALTED;
- killRH();
- }
-
-
-
-
- killRH()
-
- {
- extern UWORD RHOutCount;
- struct Message *msg;
-
- while(RHOutCount > 0) {
- WaitPort(RHPort);
- while( (msg = GetMsg(RHPort)) != NULL)
- disprxmsg(msg);
- }
- DeletePort(RHPort);
- CloseLibrary(RexxSysBase);
- }
-
-
- exiterr(msg)
- char *msg;
-
- {
- if (RHPort != NULL)
- DeletePort(RHPort);
- if (RexxSysBase != NULL)
- CloseLibrary(RexxSysBase);
- puts(msg);
- exit(5L);
- }
-
- _wb_parse()
-
- {
- }
-