/****************** LISTING 1 - ipc.h ******************/
 
#include <stdio.h>
#include <descrip.h>  /* Pass-by-descriptor structures   */
#include <ssdef.h>    /* System services definitions     */
#include <psldef.h>   /* Processor status longword def's */
#include <iodef.h>    /* I/O services definitions        */
 
#define ADDMBX      0    /* Add server-client mailbox    */
#define DELMBX      1    /* Delete server-client mailbox */
#define PASSTHRU    2    /* Pass message to other client */
#define BROADCAST   3    /* Broadcast to all clients     */
#define SHUTDOWN    4    /* Shutdown                     */
 
#define MAX_NO_PROCESS     10          /* maximum clients */
#define QSIZE  (2 * MAX_NO_PROCESS)    /* Rcv queue size  */
#define RCVEF       1               /* Receive event flag */
 
/*====== structure for final I/O completion (QIO) ========*/
 
typedef struct { 
               USHORT   status;    /* completion status   */
               USHORT   bytcnt;    /* bytes transferred   */
               ULONG    sndPID;    /* sender's PID        */
               } IO_STATUS_BLOCK;
 
/*================ Message buffer ========================*/
 
typedef union {
              int    array[100]; 
              char   text[100];
              } MSG;
 
typedef struct {
         int   cmdtyp;     /* server command type         */
         int   msgtyp;     /* message type                */
         int   xmt_prcnum; /* sender's process number     */
         int   rcv_prcnum; /* receiver's process number   */
         MSG   msg;        /* msg buffer: int or text     */
         } MSGBUF;
 
typedef struct {
        IO_STATUS_BLOCK iosb;  
        MSGBUF msg;            
        } RCVBUF;
 
/*================= Process buffer =======================*/
 
typedef struct {
           ULONG     prcnum;       /* process number */
           USHORT    mbxid;        /* mailbox id     */
           struct    CLIENT *link; /* next in list   */
           } CLIENT;
