|
|
1.1 root 1: /* rydsblock.c - manage dispatch blocks */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/rosy/RCS/rydsblock.c,v 6.0 89/03/18 23:42:48 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/rosy/RCS/rydsblock.c,v 6.0 89/03/18 23:42:48 mrose Rel $
9: *
10: *
11: * $Log: rydsblock.c,v $
12: * Revision 6.0 89/03/18 23:42:48 mrose
13: * Release 5.0
14: *
15: */
16:
17: /*
18: * NOTICE
19: *
20: * Acquisition, use, and distribution of this module and related
21: * materials are subject to the restrictions of a license agreement.
22: * Consult the Preface in the User's Manual for the full terms of
23: * this agreement.
24: *
25: */
26:
27:
28: /* LINTLIBRARY */
29:
30: #include <stdio.h>
31: #include "rosy.h"
32:
33: /* DATA */
34:
35: static int once_only = 0;
36: static struct dspblk dspque;
37: static struct dspblk *DSHead = &dspque;
38:
39: /* DISPATCH BLOCKS */
40:
41: struct dspblk *newdsblk (sd, ryo)
42: int sd;
43: struct RyOperation *ryo;
44: {
45: register struct dspblk *dsb;
46:
47: dsb = (struct dspblk *) calloc (1, sizeof *dsb);
48: if (dsb == NULL)
49: return NULL;
50:
51: dsb -> dsb_fd = sd;
52: dsb -> dsb_ryo = ryo;
53:
54: if (once_only == 0) {
55: DSHead -> dsb_forw = DSHead -> dsb_back = DSHead;
56: once_only++;
57: }
58:
59: insque (dsb, DSHead -> dsb_back);
60:
61: return dsb;
62: }
63:
64: /* */
65:
66: freedsblk (dsb)
67: register struct dspblk *dsb;
68: {
69: if (dsb == NULL)
70: return;
71:
72: remque (dsb);
73:
74: free ((char *) dsb);
75: }
76:
77: /* */
78:
79: struct dspblk *finddsblk (sd, op)
80: register int sd,
81: op;
82: {
83: register struct dspblk *dsb;
84:
85: if (once_only == 0)
86: return NULL;
87:
88: for (dsb = DSHead -> dsb_forw; dsb != DSHead; dsb = dsb -> dsb_forw)
89: if (dsb -> dsb_fd == sd && dsb -> dsb_ryo -> ryo_op == op)
90: return dsb;
91:
92: return NULL;
93: }
94:
95: /* */
96:
97: losedsblk (sd)
98: register int sd;
99: {
100: register struct dspblk *dsb,
101: *ds2;
102:
103: if (once_only == 0)
104: return;
105:
106: for (dsb = DSHead -> dsb_forw; dsb != DSHead; dsb = ds2) {
107: ds2 = dsb -> dsb_forw;
108:
109: if (dsb -> dsb_fd == sd)
110: freedsblk (dsb);
111: }
112: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.