Annotation of 43BSD/ingres/source/ctlmod/pb_read.c, revision 1.1

1.1     ! root        1: # include      "ctlmod.h"
        !             2: # include      "pipes.h"
        !             3: # include      <sccs.h>
        !             4: 
        !             5: SCCSID(@(#)pb_read.c   8.1     12/31/84)
        !             6: 
        !             7: /*
        !             8: **  PB_READ -- read a pipe block
        !             9: **
        !            10: **     This routine reads a pipe block into *ppb.  It also handles
        !            11: **     all the low level protocol: RESET blocks, SYNC blocks, META
        !            12: **     blocks, blocks intended for another process, etc.
        !            13: **
        !            14: **     When this routine returns, it returns with a block intended
        !            15: **     for this process, which must be a REGULAR block, a RESPONSE
        !            16: **     block, or an ERROR block.
        !            17: **
        !            18: **     Parameters:
        !            19: **             ppb -- a pointer to the area which wants the block.
        !            20: **
        !            21: **     Returns:
        !            22: **             none
        !            23: **
        !            24: **     Side Effects:
        !            25: **             ppb is set to the named block.
        !            26: **             Virtually any amount of stuff can happen, depending
        !            27: **                     on what is coming through the pipe.
        !            28: **
        !            29: **     Trace Flags:
        !            30: **             12.4 - 12.9
        !            31: */
        !            32: 
        !            33: 
        !            34: pb_read(ppb)
        !            35: register pb_t  *ppb;
        !            36: {
        !            37:        register int    type;
        !            38:        register int    from;
        !            39:        extern int      (*ExitFn)();
        !            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: # ifdef xCTR1
        !            51:                if (tTf(12, 4))
        !            52:                        lprintf("pb_read: fd=%d:\n", Cm.cm_input);
        !            53: # endif
        !            54:                from = pb_rphys(ppb, Cm.cm_input);
        !            55:                if (from == 0)
        !            56:                {
        !            57: # ifdef xCTR1
        !            58:                        if (tTf(12, 4))
        !            59:                                lprintf("EOF\n");
        !            60: # endif
        !            61:                        (*ExitFn)(0);
        !            62:                }
        !            63:                else if (from != PB_IOSIZE)
        !            64:                        syserr("pb_read: read error (%d)", from);
        !            65: # ifdef xCTR1
        !            66:                if (tTf(12, 4))
        !            67:                        pb_dump(ppb, TRUE);
        !            68: # endif
        !            69: 
        !            70:                /* set up buffer pointers, etc. */
        !            71:                ppb->pb_xptr = ppb->pb_data;
        !            72:                ppb->pb_nleft = ppb->pb_nused;
        !            73:                type = ppb->pb_type;
        !            74:                from = ppb->pb_from;
        !            75: # ifdef xCM_DEBUG
        !            76:                if (from > CM_MAXPROC || from < 0)
        !            77:                        syserr("pb_read: from %d", from);
        !            78: # endif
        !            79: 
        !            80:                /* mark this block if possibly from the front */
        !            81:                if (Cm.cm_input == Cm.cm_proc[0].pr_ninput &&
        !            82:                    bitset(PR_RADJCT, Cm.cm_proc[0].pr_stat))
        !            83:                        setbit(PB_FRFR, ppb->pb_stat);
        !            84: 
        !            85:                /* handle RESET blocks before anything else */
        !            86:                if (type == PB_RESET)
        !            87:                {
        !            88:                        cm_reset();
        !            89:                        continue;
        !            90:                }
        !            91: 
        !            92:                /* do sync block processing */
        !            93:                if (type == PB_SYNC)
        !            94:                {
        !            95: /*
        !            96:                        if (Syncs[from] <= 0)
        !            97:                                lprintf("pb_read: bad SYNC block from %d", from);
        !            98:                        else
        !            99: */
        !           100:                                Syncs[from]--;
        !           101:                        continue;
        !           102:                }
        !           103: 
        !           104:                /* see if we are ignoring from this process */
        !           105:                if (Syncs[from] > 0)
        !           106:                        continue;
        !           107: 
        !           108:                /* check for re-routing */
        !           109:                if (ppb->pb_proc != Cm.cm_myproc)
        !           110:                {
        !           111:                        pb_write(ppb);
        !           112:                        if (ppb->pb_proc != PB_WILD)
        !           113:                                continue;
        !           114:                }
        !           115: 
        !           116:                /*
        !           117:                **  Block type dispatching.
        !           118:                **      Regular, response, and error blocks return.
        !           119:                **      Meta blocks are handled by calling other
        !           120:                **              routines.
        !           121:                */
        !           122: 
        !           123:                switch (type)
        !           124:                {
        !           125:                  case PB_REG:
        !           126:                  case PB_RESP:
        !           127:                  case PB_ERR:
        !           128:                        /* handled by readinput() */
        !           129:                        return;
        !           130: 
        !           131:                  case PB_TRACE:
        !           132:                        pb_trace(ppb);
        !           133:                        break;
        !           134: 
        !           135:                  /* insert more meta handling before this line */
        !           136: 
        !           137:                  default:
        !           138:                        syserr("pb_read: type %d", type);
        !           139:                }
        !           140:        }
        !           141: }
        !           142: /*
        !           143: **  PB_TRACE -- handle dynamic trace information
        !           144: **
        !           145: **     Parameters:
        !           146: **             ppb -- a pipe block from which to get information.
        !           147: **
        !           148: **     Returns:
        !           149: **             none.
        !           150: **
        !           151: **     Side Effects:
        !           152: **             trace vectors will be changed.
        !           153: */
        !           154: 
        !           155: pb_trace(ppb)
        !           156: pb_t   *ppb;
        !           157: {
        !           158:        register int            i;
        !           159:        register struct fn_def  *f;
        !           160: 
        !           161:        for (i = 0; i < NumFunc; i++)
        !           162:        {
        !           163:                f = FuncVect[i];
        !           164:                if (f->fn_tflag != '\0')
        !           165:                        tTamper(ppb->pb_data, f->fn_tflag, f->fn_tvect, f->fn_tsize);
        !           166:        }
        !           167: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.