home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_08_11 / 8n11074a < prev    next >
Text File  |  1990-07-31  |  2KB  |  69 lines

  1. /****************** LISTING 3 - comm.c ******************/
  2.  
  3. #include "ipc.h"
  4.  
  5. ULONG open_comm_link(USHORT *mbxid, ULONG mbxsiz, 
  6.             char *mbxname)
  7. {
  8. char    permanence_flag     = TEMPORARY_MBX;
  9. ULONG   protection          = WORLD_ACCESS;
  10. ULONG   access_mode         = PSL$C_USER;
  11. $DESCRIPTOR (mbx_logical_name, mbxname);
  12. mbx_logical_name.dsc$w_length = strlen(mbxname);
  13.  
  14. return (SYS$CREMBX(permanence_flag, mbxid, mbxsiz, mbxsiz, 
  15.             protection, access_mode, &mbx_logical_name));
  16. }
  17.  
  18. ULONG close_comm_link(USHORT mbxid)
  19. {
  20. return (SYS$DASSGN(mbxid));
  21.  
  22.  
  23. ULONG send(USHORT mbxid, MSGBUF *msg, int msgsiz)
  24. {
  25. int               status;
  26. USHORT            func = IO$_WRITEVBLK | IO$M_NOW; 
  27. IO_STATUS_BLOCK   iosb = {0, 0, 0}; 
  28.  
  29. status = SYS$QIOW(0, mbxid, func, &iosb, 0, 0, msg, 
  30.             msgsiz, 0, 0, 0, 0);
  31.  
  32. return status;
  33. }
  34.  
  35.  
  36. ULONG broadcast(MSGBUF *msg, ULONG msgsiz, CLIENT *p)
  37. {
  38. while (p) { 
  39.     send(p->mbxid, msg, msgsiz);
  40.     p = p->link;
  41. }
  42. return SUCCEED;
  43. }
  44.  
  45. void receive(USHORT mbxid)
  46. {
  47. int    status;
  48. USHORT func = IO$_READVBLK;
  49.  
  50. extern RCVBUF msgque[QSIZE];
  51. extern BOOL qfull, qempty, qovrflo;
  52. extern int qtail, qhead;
  53.  
  54. if (!qfull) {
  55.     qempty = FALSE;
  56.     qtail = (++qtail) % QSIZE;
  57.     status = SYS$QIO (RCVEF, mbxid, func, 
  58.                  &msgque[qtail].iosb, &receive, 
  59.                  mbxid, &msgque[qtail].msg, sizeof(MSGBUF),
  60.                  0, 0, 0, 0);
  61.     if (((qtail+1) % QSIZE) == qhead)
  62.         qfull = TRUE;
  63. }
  64. else {
  65.     qovrflo = TRUE;
  66. }
  67. }
  68.