/****************** LISTING 4 - client.c  ******************/
 
#include "ipc.h"
 
extern  RCVBUF msgque[QSIZE];
extern  BOOL qfull, qempty, qovrflo;
extern  int qtail, qhead;
 
main()
{
int     i, process_num, status;
char    mbxname[16];
MSGBUF  msgbuf;
USHORT  rcvmbx, xmtmbx;
 
/*++++++++++++ Startup ++++++++++++*/
 
status = get_process_no(&process_num);
sprintf(mbxname, "CLIENTMBX%d", process_num);
status = open_comm_link(&rcvmbx,
                sizeof(MSGBUF),mbxname);
status = open_comm_link(&xmtmbx,
                sizeof(MSGBUF),"SERVERMBX");
status = SYS$DCLAST(&receive, rcvmbx, PSL$C_SUPER);
 
msgbuf.xmt_prcnum = 0;
msgbuf.msgtyp = ADDMBX;
send(xmtmbx, &msgbuf, sizeof(MSGBUF));
 
/*++++++++++ Main loop ++++++++++*/
 
FOREVER {
  status = SYS$WAITFR(RCVEF);
  status = SYS$CLREF(RCVEF);
  while (!qempty) { 
    dequeue(&msgbuf);
    switch(msgbuf.msgtyp) {
 
      case INT_ARRAY:
          for (i=0; i < 100; i++)
              printf("\n%d", msgbuf.msg.array[i]);
          break;
 
      case TEXT:
          printf("%s", msgbuf.msg.text);
          break;
 
      case SHUTDOWN:
          close_comm_link(rcvmbx);
          close_comm_link(xmtmbx);
          exit(SUCCEED);
          break;
         
      default:
          break;
    } 
  }
}  
} 
