annotate sbr/m_seq.c @ 3:f89a9a79e124

utf-8
author kono
date Wed, 20 Apr 2005 00:25:01 +0900
parents bce86c4163a3
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_seq.c - print out a message sequence */
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 <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 /* new version from VJ 2/90 - faster? */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 char *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 m_seq(mp, cp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 struct msgs *mp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 int mask;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 register int i, j;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 register char *bp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 static char buffer[BUFSIZ*2]; /* for big sequences */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 if (strcmp (current, cp) == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 /* assume this is in sync with msgstats["cur"] */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 /* see m_seqadd() for details */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 if (mp->curmsg) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 (void) sprintf(buffer, "%s", m_name(mp->curmsg));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 return (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 } else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 return (NULL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 for (i = 0; mp->msgattrs[i]; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 if (strcmp(mp->msgattrs[i], cp) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 if (! mp->msgattrs[i])
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 return (NULL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 mask = EXISTS | (1 << (FFATTRSLOT + i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 bp = buffer;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 for (i = mp->lowmsg; i <= mp->hghmsg; ++i) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 if ((mp->msgstats[i] & mask) != mask)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 if (bp > buffer)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 *bp++ = ' ';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 (void) sprintf(bp, "%s", m_name(i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 bp += strlen(bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 j = i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 for (++i; i <= mp->hghmsg && (mp->msgstats[i] & mask) == mask;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50 ++i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 if (i - j > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 (void) sprintf(bp, "-%s", m_name(i - 1));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 bp += strlen(bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 return (bp > buffer? buffer : NULL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 }