|
|
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.