annotate sbr/m_seqnew.c @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children 441a2190cfae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* m_seqnew.c - manage sequences */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #ifndef lint
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 static char ident[] = "@(#)$Id$";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 #endif /* lint */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #include "../h/mh.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 #include <ctype.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 #include <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 static int m_seqok();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 int m_seqnew (mp, cp, public)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 register struct msgs *mp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 register int public;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 int bits;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 register int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 j;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 if (!m_seqok (cp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 if (public == -1) /* XXX */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 public = mp -> msgflags & READONLY ? 0 : 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 bits = FFATTRSLOT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 for (i = 0; mp -> msgattrs[i]; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 if (strcmp (mp -> msgattrs[i], cp) == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 for (j = mp -> lowmsg; j <= mp -> hghmsg; j++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 mp -> msgstats[j] &= ~(1 << (bits + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 if (public)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 mp -> attrstats &= ~(1 << (bits + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 mp -> attrstats |= 1 << (bits + i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 mp -> msgflags |= SEQMOD;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 if (i >= NATTRS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 advise (NULLCP, "only %d sequences allowed (no room for %s)!",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 NATTRS, cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 mp -> msgattrs[i] = getcpy (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 for (j = mp -> lowmsg; j <= mp -> hghmsg; j++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 mp -> msgstats[j] &= ~(1 << (bits + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50 if (public)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 mp -> attrstats &= ~(1 << (bits + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 mp -> attrstats |= 1 << (bits + i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 mp -> msgflags |= SEQMOD;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 mp -> msgattrs[++i] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 int m_seqadd (mp, cp, j, public)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 register struct msgs *mp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 register int j,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 public;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 int bits;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 register int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 k;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 if (!m_seqok (cp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 /* keep mp->curmsg & msgattrs["cur"] in sync - see m_seq() */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77 if (strcmp (current,cp) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 mp->curmsg = j;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 if (public == -1) /* XXX */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 public = mp -> msgflags & READONLY ? 0 : 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 bits = FFATTRSLOT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 for (i = 0; mp -> msgattrs[i]; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 if (strcmp (mp -> msgattrs[i], cp) == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 mp -> msgstats[j] |= 1 << (bits + i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 if (public)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 mp -> attrstats &= ~(1 << (bits + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 mp -> attrstats |= 1 << (bits + i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 mp -> msgflags |= SEQMOD;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 if (i >= NATTRS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97 advise (NULLCP, "only %d sequences allowed (no room for %s)!",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 NATTRS, cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 mp -> msgattrs[i] = getcpy (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 for (k = mp -> lowmsg; k <= mp -> hghmsg; k++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 mp -> msgstats[k] &= ~(1 << (bits + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 mp -> msgstats[j] |= 1 << (bits + i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 if (public)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 mp -> attrstats &= ~(1 << (bits + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 mp -> attrstats |= 1 << (bits + i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 mp -> msgflags |= SEQMOD;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112 mp -> msgattrs[++i] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 int m_seqdel (mp, cp, j)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120 register struct msgs *mp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 register int j;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 int bits;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 register int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 if (!m_seqok (cp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 bits = FFATTRSLOT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 for (i = 0; mp -> msgattrs[i]; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 if (strcmp (mp -> msgattrs[i], cp) == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 mp -> msgstats[j] &= ~(1 << (bits + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134 mp -> msgflags |= SEQMOD;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 advise (NULLCP, "no such sequence as %s", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145 static int m_seqok (cp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 register char *pp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150 if (cp == NULL || *cp == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 advise (NULLCP, "empty sequence name");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 if (strcmp (cp, "new") == 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156 #ifdef notdef
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 || strcmp (cp, "cur") == 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 #endif /* notdef */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159 || strcmp (cp, "all") == 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 || strcmp (cp, "first") == 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161 || strcmp (cp, "last") == 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162 || strcmp (cp, "prev") == 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 || strcmp (cp, "next") == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 advise (NULLCP, "illegal sequence name: %s", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168 if (!isalpha (*cp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 advise (NULLCP, "illegal sequence name: %s", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172 for (pp = cp + 1; *pp; pp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173 if (!isalnum (*pp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174 advise (NULLCP, "illegal sequence name: %s", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 if (pp > cp + NAMESZ) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 advise (NULLCP, "illegal sequence name: %s", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 }