Added all of the MH sources, including RCS files, in
[mmh] / 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 @