|
|
BSD 4.3
# include "ctlmod.h"
# include "pipes.h"
# include <sccs.h>
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;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.