]> diplodocus.org Git - nmh/blob - docs/historical/mh-6.8.5/sbr/RCS/m_seqnew.c,v
sbr/mts.c: Delete mmdlm2; use same-valued mmdlm1 instead.
[nmh] / docs / historical / mh-6.8.5 / sbr / RCS / m_seqnew.c,v
1 head 1.7;
2 access;
3 symbols;
4 locks; strict;
5 comment @ * @;
6
7
8 1.7
9 date 92.12.15.00.20.22; author jromine; state Exp;
10 branches;
11 next 1.6;
12
13 1.6
14 date 92.01.31.21.55.34; author jromine; state Exp;
15 branches;
16 next 1.5;
17
18 1.5
19 date 91.02.14.14.46.26; author mh; state Exp;
20 branches;
21 next 1.4;
22
23 1.4
24 date 90.04.05.15.32.00; author sources; state Exp;
25 branches;
26 next 1.3;
27
28 1.3
29 date 90.04.05.14.49.19; author sources; state Exp;
30 branches;
31 next 1.2;
32
33 1.2
34 date 90.02.06.13.09.00; author sources; state Exp;
35 branches;
36 next 1.1;
37
38 1.1
39 date 90.02.06.13.06.00; author sources; state Exp;
40 branches;
41 next ;
42
43
44 desc
45 @@
46
47
48 1.7
49 log
50 @endif sugar
51 @
52 text
53 @/* m_seqnew.c - manage sequences */
54 #ifndef lint
55 static char ident[] = "@@(#)$Id: m_seqnew.c,v 1.6 1992/01/31 21:55:34 jromine Exp jromine $";
56 #endif /* lint */
57
58 #include "../h/mh.h"
59 #include <ctype.h>
60 #include <stdio.h>
61
62 static int m_seqok();
63
64 int m_seqnew (mp, cp, public)
65 register struct msgs *mp;
66 register char *cp;
67 register int public;
68 {
69 int bits;
70 register int i,
71 j;
72
73 if (!m_seqok (cp))
74 return 0;
75
76 if (public == -1) /* XXX */
77 public = mp -> msgflags & READONLY ? 0 : 1;
78
79 bits = FFATTRSLOT;
80 for (i = 0; mp -> msgattrs[i]; i++)
81 if (strcmp (mp -> msgattrs[i], cp) == 0) {
82 for (j = mp -> lowmsg; j <= mp -> hghmsg; j++)
83 mp -> msgstats[j] &= ~(1 << (bits + i));
84 if (public)
85 mp -> attrstats &= ~(1 << (bits + i));
86 else
87 mp -> attrstats |= 1 << (bits + i);
88 mp -> msgflags |= SEQMOD;
89
90 return 1;
91 }
92
93 if (i >= NATTRS) {
94 advise (NULLCP, "only %d sequences allowed (no room for %s)!",
95 NATTRS, cp);
96 return 0;
97 }
98
99 mp -> msgattrs[i] = getcpy (cp);
100 for (j = mp -> lowmsg; j <= mp -> hghmsg; j++)
101 mp -> msgstats[j] &= ~(1 << (bits + i));
102 if (public)
103 mp -> attrstats &= ~(1 << (bits + i));
104 else
105 mp -> attrstats |= 1 << (bits + i);
106 mp -> msgflags |= SEQMOD;
107
108 mp -> msgattrs[++i] = NULL;
109
110 return 1;
111 }
112
113 /* \f */
114
115 int m_seqadd (mp, cp, j, public)
116 register struct msgs *mp;
117 register char *cp;
118 register int j,
119 public;
120 {
121 int bits;
122 register int i,
123 k;
124
125 if (!m_seqok (cp))
126 return 0;
127
128 /* keep mp->curmsg & msgattrs["cur"] in sync - see m_seq() */
129 if (strcmp (current,cp) == 0)
130 mp->curmsg = j;
131
132 if (public == -1) /* XXX */
133 public = mp -> msgflags & READONLY ? 0 : 1;
134
135 bits = FFATTRSLOT;
136 for (i = 0; mp -> msgattrs[i]; i++)
137 if (strcmp (mp -> msgattrs[i], cp) == 0) {
138 mp -> msgstats[j] |= 1 << (bits + i);
139 if (public)
140 mp -> attrstats &= ~(1 << (bits + i));
141 else
142 mp -> attrstats |= 1 << (bits + i);
143 mp -> msgflags |= SEQMOD;
144
145 return 1;
146 }
147
148 if (i >= NATTRS) {
149 advise (NULLCP, "only %d sequences allowed (no room for %s)!",
150 NATTRS, cp);
151 return 0;
152 }
153
154 mp -> msgattrs[i] = getcpy (cp);
155 for (k = mp -> lowmsg; k <= mp -> hghmsg; k++)
156 mp -> msgstats[k] &= ~(1 << (bits + i));
157 mp -> msgstats[j] |= 1 << (bits + i);
158 if (public)
159 mp -> attrstats &= ~(1 << (bits + i));
160 else
161 mp -> attrstats |= 1 << (bits + i);
162 mp -> msgflags |= SEQMOD;
163
164 mp -> msgattrs[++i] = NULL;
165
166 return 1;
167 }
168
169 /* \f */
170
171 int m_seqdel (mp, cp, j)
172 register struct msgs *mp;
173 register char *cp;
174 register int j;
175 {
176 int bits;
177 register int i;
178
179 if (!m_seqok (cp))
180 return 0;
181
182 bits = FFATTRSLOT;
183 for (i = 0; mp -> msgattrs[i]; i++)
184 if (strcmp (mp -> msgattrs[i], cp) == 0) {
185 mp -> msgstats[j] &= ~(1 << (bits + i));
186 mp -> msgflags |= SEQMOD;
187
188 return 1;
189 }
190
191 advise (NULLCP, "no such sequence as %s", cp);
192 return 0;
193 }
194
195 /* \f */
196
197 static int m_seqok (cp)
198 register char *cp;
199 {
200 register char *pp;
201
202 if (cp == NULL || *cp == 0) {
203 advise (NULLCP, "empty sequence name");
204 return 0;
205 }
206
207 if (strcmp (cp, "new") == 0
208 #ifdef notdef
209 || strcmp (cp, "cur") == 0
210 #endif /* notdef */
211 || strcmp (cp, "all") == 0
212 || strcmp (cp, "first") == 0
213 || strcmp (cp, "last") == 0
214 || strcmp (cp, "prev") == 0
215 || strcmp (cp, "next") == 0) {
216 advise (NULLCP, "illegal sequence name: %s", cp);
217 return 0;
218 }
219
220 if (!isalpha (*cp)) {
221 advise (NULLCP, "illegal sequence name: %s", cp);
222 return 0;
223 }
224 for (pp = cp + 1; *pp; pp++)
225 if (!isalnum (*pp)) {
226 advise (NULLCP, "illegal sequence name: %s", cp);
227 return 0;
228 }
229
230 return 1;
231 }
232 @
233
234
235 1.6
236 log
237 @kerberos
238 @
239 text
240 @d3 2
241 a4 2
242 static char ident[] = "@@(#)$Id: m_seqnew.c,v 1.5 1991/02/14 14:46:26 mh Exp jromine $";
243 #endif lint
244 d158 1
245 a158 1
246 #endif notdef
247 @
248
249
250 1.5
251 log
252 @fix van jacobson bug.
253 jlr
254 @
255 text
256 @d3 1
257 a3 1
258 static char ident[] = "@@(#)$Id: m_seqnew.c,v 1.4 90/04/05 15:32:00 sources Exp Locker: mh $";
259 d150 1
260 a150 1
261 if (cp == NULL || *cp == NULL) {
262 @
263
264
265 1.4
266 log
267 @add ID
268 @
269 text
270 @d3 1
271 a3 1
272 static char ident[] = "@@(#)$Id:$";
273 d75 4
274 @
275
276
277 1.3
278 log
279 @add ID
280 @
281 text
282 @d3 1
283 a3 1
284 static char ident[] = "$Id:";
285 @
286
287
288 1.2
289 log
290 @ANSI Compilance
291 @
292 text
293 @d2 3
294 @
295
296
297 1.1
298 log
299 @Initial revision
300 @
301 text
302 @d7 1
303 @