]> diplodocus.org Git - nmh/blob - docs/historical/mh-6.8.5/sbr/RCS/m_seq.c,v
Exposed a bunch of switches that are now documented.
[nmh] / docs / historical / mh-6.8.5 / sbr / RCS / m_seq.c,v
1 head 1.8;
2 access;
3 symbols;
4 locks; strict;
5 comment @ * @;
6
7
8 1.8
9 date 92.12.15.00.20.22; author jromine; state Exp;
10 branches;
11 next 1.7;
12
13 1.7
14 date 91.02.14.14.44.38; author mh; state Exp;
15 branches;
16 next 1.6;
17
18 1.6
19 date 90.04.05.15.30.40; author sources; state Exp;
20 branches;
21 next 1.5;
22
23 1.5
24 date 90.04.05.14.44.39; author sources; state Exp;
25 branches;
26 next 1.4;
27
28 1.4
29 date 90.02.21.16.36.08; author sources; state Exp;
30 branches;
31 next 1.3;
32
33 1.3
34 date 90.02.21.16.35.38; author sources; state Exp;
35 branches;
36 next 1.2;
37
38 1.2
39 date 90.02.01.14.07.31; author sources; state Exp;
40 branches;
41 next 1.1;
42
43 1.1
44 date 90.02.01.14.04.09; author sources; state Exp;
45 branches;
46 next ;
47
48
49 desc
50 @@
51
52
53 1.8
54 log
55 @endif sugar
56 @
57 text
58 @/* m_seq.c - print out a message sequence */
59 #ifndef lint
60 static char ident[] = "@@(#)$Id: m_seq.c,v 1.7 1991/02/14 14:44:38 mh Exp jromine $";
61 #endif /* lint */
62
63 #include "../h/mh.h"
64 #include <stdio.h>
65
66 /* new version from VJ 2/90 - faster? */
67
68 char *
69 m_seq(mp, cp)
70 struct msgs *mp;
71 char *cp;
72 {
73 int mask;
74 register int i, j;
75 register char *bp;
76 static char buffer[BUFSIZ*2]; /* for big sequences */
77
78 if (strcmp (current, cp) == 0) {
79 /* assume this is in sync with msgstats["cur"] */
80 /* see m_seqadd() for details */
81 if (mp->curmsg) {
82 (void) sprintf(buffer, "%s", m_name(mp->curmsg));
83 return (buffer);
84 } else
85 return (NULL);
86 }
87 for (i = 0; mp->msgattrs[i]; i++)
88 if (strcmp(mp->msgattrs[i], cp) == 0)
89 break;
90
91 if (! mp->msgattrs[i])
92 return (NULL);
93
94 mask = EXISTS | (1 << (FFATTRSLOT + i));
95 bp = buffer;
96 for (i = mp->lowmsg; i <= mp->hghmsg; ++i) {
97 if ((mp->msgstats[i] & mask) != mask)
98 continue;
99
100 if (bp > buffer)
101 *bp++ = ' ';
102
103 (void) sprintf(bp, "%s", m_name(i));
104 bp += strlen(bp);
105 j = i;
106 for (++i; i <= mp->hghmsg && (mp->msgstats[i] & mask) == mask;
107 ++i)
108 ;
109 if (i - j > 1) {
110 (void) sprintf(bp, "-%s", m_name(i - 1));
111 bp += strlen(bp);
112 }
113 }
114 return (bp > buffer? buffer : NULL);
115 }
116 @
117
118
119 1.7
120 log
121 @comment unclear code
122 jlr
123 @
124 text
125 @d3 2
126 a4 2
127 static char ident[] = "@@(#)$Id: m_seq.c,v 1.6 90/04/05 15:30:40 sources Exp Locker: mh $";
128 #endif lint
129 @
130
131
132 1.6
133 log
134 @add ID
135 @
136 text
137 @d3 1
138 a3 1
139 static char ident[] = "@@(#)$Id:$";
140 d21 8
141 a28 6
142 if (strcmp(current, cp) == 0) {
143 if (mp->curmsg) {
144 (void) sprintf(buffer, "%s", m_name(mp->curmsg));
145 return (buffer);
146 } else
147 return (NULL);
148 @
149
150
151 1.5
152 log
153 @add ID
154 @
155 text
156 @d3 1
157 a3 1
158 static char ident[] = "$Id:";
159 @
160
161
162 1.4
163 log
164 @make buffer bigger
165 @
166 text
167 @d2 3
168 @
169
170
171 1.3
172 log
173 @Fixes from Van Jacobson
174 @
175 text
176 @d16 1
177 a16 1
178 static char buffer[BUFSIZ];
179 @
180
181
182 1.2
183 log
184 @increase message sequence buffer size by factor of 2. I hope this
185 is worth it, since it'll make things bigger.
186 @
187 text
188 @d6 1
189 d8 4
190 a11 3
191 char *m_seq (mp, cp)
192 struct msgs *mp;
193 char *cp;
194 d13 4
195 a16 8
196 int bits,
197 found,
198 hack;
199 register int i,
200 j,
201 k;
202 register char *bp;
203 static char buffer[BUFSIZ * 2];
204 d18 18
205 a35 15
206 bits = FFATTRSLOT;
207 hack = strcmp (current, cp) == 0;
208 for (i = 0; mp -> msgattrs[i]; i++)
209 if (strcmp (mp -> msgattrs[i], cp) == 0) {
210 found = 0;
211 bp = buffer;
212 for (j = mp -> lowmsg; j <= mp -> hghmsg; j++)
213 if ((mp -> msgstats[j] & EXISTS)
214 && (mp -> msgstats[j] & (1 << (bits + i)))) {
215 (void) sprintf (bp, "%s%s", found ? " " : "", m_name (j));
216 bp += strlen (bp);
217 for (k = j + 1; k <= mp -> hghmsg
218 && (mp -> msgstats[k] & EXISTS)
219 && (mp -> msgstats[k] & (1 << (bits + i)));
220 k++)
221 d37 13
222 a49 6
223 if (--k > j) {
224 (void) sprintf (bp, "-%s", m_name (k));
225 bp += strlen (bp);
226 }
227 j = k + 1;
228 found++;
229 a50 5
230 if (found == 0 && hack && mp -> curmsg) {
231 found++;
232 (void) sprintf (buffer, "%s", m_name (mp -> curmsg));
233 }
234 return (found > 0 ? buffer : NULL);
235 d52 1
236 a52 2
237
238 return NULL;
239 @
240
241
242 1.1
243 log
244 @Initial revision
245 @
246 text
247 @d18 1
248 a18 1
249 static char buffer[BUFSIZ];
250 @