# include "ctlmod.h" # include "pipes.h" # include SCCSID(@(#)pb_write.c 8.1 12/31/84) /* ** PB_WRITE -- Write pipe block ** ** Writes the block specified by ppb to the pipe implied by ** ppb->pb_proc. Also handles broadcase messages. ** ** Parameters: ** ppb -- a ptr to the pipe block to write. ** ** Returns: ** none ** ** Side Effects: ** none ** ** Trace Flags: ** 12.10 - 12.15 */ pb_write(ppb) register pb_t *ppb; { register int i; # ifdef xCTR1 if (tTf(12, 10)) { lprintf("pb_write: "); pb_dump(ppb, TRUE); } # endif /* handle broadcast messages */ if (ppb->pb_proc == PB_WILD) { /* write on all pipes marked as a broadcast pipe */ for (i = 0; i < CM_MAXPROC; i++) { if ((Cm.cm_proc[i].pr_stat & PR_BCAST) != 0) pb_wphys(ppb, Cm.cm_proc[i].pr_file); } } else { /* normal message */ i = ppb->pb_proc; # ifdef xCM_DEBUG if (i > CM_MAXPROC || i < 0) syserr("pb_write: proc %d", i); # endif # ifdef xCTR1 if (tTf(12, 11)) printf("pb_write: proc %d fd=%d\n", i, Cm.cm_proc[i].pr_file); # endif pb_wphys(ppb, Cm.cm_proc[i].pr_file); } /* determine the new input */ if ((ppb->pb_stat & (PB_INFO|PB_EOF)) == PB_EOF) Cm.cm_input = Cm.cm_proc[ppb->pb_proc].pr_ninput; /* reset some exciting pointers */ ppb->pb_xptr = ppb->pb_data; ppb->pb_nleft = PB_DBSIZE; ppb->pb_nused = 0; }