1: # include   <ingres.h>
   2: # include   "IIglobals.h"
   3: # include   <sccs.h>
   4: 
   5: SCCSID(@(#)IIpb_read.c	8.1	12/31/84)
   6: 
   7: 
   8: /*
   9: **  IIPB_READ -- read a pipe block
  10: **
  11: **	This routine reads a pipe block into *ppb.  It also handles
  12: **	all the low level protocol: RESET blocks, SYNC blocks, META
  13: **	blocks, blocks intended for another process, etc.
  14: **
  15: **	When this routine returns, it returns with a block intended
  16: **	for this process, which must be a REGULAR block, a RESPONSE
  17: **	block, or an ERROR block.
  18: **
  19: **	Parameters:
  20: **		ppb -- a pointer to the area which wants the block.
  21: **
  22: **	Returns:
  23: **		none
  24: **
  25: **	Side Effects:
  26: **		ppb is set to the named block.
  27: **		Virtually any amount of stuff can happen, depending
  28: **			on what is coming through the pipe.
  29: **
  30: **	Trace Flags:
  31: **		12.4 - 12.9
  32: */
  33: 
  34: 
  35: IIpb_read(ppb)
  36: register pb_t   *ppb;
  37: {
  38:     register int    type;
  39:     register int    from;
  40: 
  41:     /*
  42: 	**  Top Loop.
  43: 	**	Hang waiting for a normal block.  Other blocks are
  44: 	**		handled inside the loop.
  45: 	**	We multiplex 'from' in here temporarily.
  46: 	*/
  47: 
  48:     for (;;)
  49:     {
  50:         from = IIpb_rphys(ppb, IIinput);
  51: 
  52:         if (from != PB_IOSIZE)
  53:             IIsyserr("pb_read: read error (%d)", from);
  54: 
  55:         /* set up buffer pointers, etc. */
  56:         ppb->pb_xptr = ppb->pb_data;
  57:         ppb->pb_nleft = ppb->pb_nused;
  58:         type = ppb->pb_type;
  59:         from = ppb->pb_from;
  60: 
  61:         /* do sync block processing */
  62:         if (type == PB_SYNC)
  63:         {
  64:             IISyncs[from]--;
  65:             continue;
  66:         }
  67: 
  68:         /* see if we are ignoring from this process */
  69:         if (IISyncs[from] > 0)
  70:             continue;
  71: 
  72:         /*
  73: 		**  Block type dispatching.
  74: 		**	Regular, response, and error blocks return.
  75: 		**	Meta blocks are handled by calling other
  76: 		**		routines.
  77: 		*/
  78: 
  79:         switch (type)
  80:         {
  81:           case PB_REG:
  82:           case PB_RESP:
  83:           case PB_ERR:
  84:             /* handled by readinput() */
  85:             return;
  86: 
  87:           /* insert more meta handling before this line */
  88: 
  89:           default:
  90:             IIsyserr("pb_read: type %d", type);
  91:         }
  92:     }
  93: }
Last modified: 1986-04-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 840
Valid CSS Valid XHTML 1.0 Strict