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