|
|
1.1 ! root 1: # include "ctlmod.h" ! 2: # include "pipes.h" ! 3: # include <sccs.h> ! 4: ! 5: SCCSID(@(#)pb_write.c 7.1 2/5/81) ! 6: ! 7: /* ! 8: ** PB_WRITE -- Write pipe block ! 9: ** ! 10: ** Writes the block specified by ppb to the pipe implied by ! 11: ** ppb->pb_proc. Also handles broadcase messages. ! 12: ** ! 13: ** Parameters: ! 14: ** ppb -- a ptr to the pipe block to write. ! 15: ** ! 16: ** Returns: ! 17: ** none ! 18: ** ! 19: ** Side Effects: ! 20: ** none ! 21: ** ! 22: ** Trace Flags: ! 23: ** 12.10 - 12.15 ! 24: */ ! 25: ! 26: pb_write(ppb) ! 27: register pb_t *ppb; ! 28: { ! 29: register int i; ! 30: ! 31: # ifdef xCTR1 ! 32: if (tTf(12, 10)) ! 33: { ! 34: lprintf("pb_write: "); ! 35: pb_dump(ppb, TRUE); ! 36: } ! 37: # endif ! 38: ! 39: /* handle broadcast messages */ ! 40: if (ppb->pb_proc == PB_WILD) ! 41: { ! 42: /* write on all pipes marked as a broadcast pipe */ ! 43: for (i = 0; i < CM_MAXPROC; i++) ! 44: { ! 45: if ((Cm.cm_proc[i].pr_stat & PR_BCAST) != 0) ! 46: pb_wphys(ppb, Cm.cm_proc[i].pr_file); ! 47: } ! 48: } ! 49: else ! 50: { ! 51: /* normal message */ ! 52: i = ppb->pb_proc; ! 53: # ifdef xCM_DEBUG ! 54: if (i > CM_MAXPROC || i < 0) ! 55: syserr("pb_write: proc %d", i); ! 56: # endif ! 57: # ifdef xCTR1 ! 58: if (tTf(12, 11)) ! 59: printf("pb_write: proc %d fd=%d\n", i, Cm.cm_proc[i].pr_file); ! 60: # endif ! 61: pb_wphys(ppb, Cm.cm_proc[i].pr_file); ! 62: } ! 63: ! 64: /* determine the new input */ ! 65: if ((ppb->pb_stat & (PB_INFO|PB_EOF)) == PB_EOF) ! 66: Cm.cm_input = Cm.cm_proc[ppb->pb_proc].pr_ninput; ! 67: ! 68: /* reset some exciting pointers */ ! 69: ppb->pb_xptr = ppb->pb_data; ! 70: ppb->pb_nleft = PB_DBSIZE; ! 71: ppb->pb_nused = 0; ! 72: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.