1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#include "common.h"
static uchar flagtab[] = {
'a', Fanswered,
'D', Fdeleted,
'd', Fdraft,
'f', Fflagged,
'r', Frecent,
's', Fseen,
'S', Fstored,
};
char*
flagbuf(char *buf, int flags)
{
char *p, c;
int i;
p = buf;
for(i = 0; i < nelem(flagtab); i += 2){
c = '-';
if(flags & flagtab[i+1])
c = flagtab[i];
*p++ = c;
}
*p = 0;
return buf;
}
int
buftoflags(char *p)
{
uchar flags;
int i;
flags = 0;
for(i = 0; i < nelem(flagtab); i += 2)
if(p[i>>1] == flagtab[i])
flags |= flagtab[i + 1];
return flags;
}
char*
txflags(char *p, uchar *flags)
{
uchar neg, f, c, i;
for(;;){
neg = 0;
again:
if((c = *p++) == '-'){
neg = 1;
goto again;
}else if(c == '+'){
neg = 0;
goto again;
}
if(c == 0)
return nil;
for(i = 0;; i += 2){
if(i == nelem(flagtab))
return "bad flag";
if(c == flagtab[i]){
f = flagtab[i+1];
break;
}
}
if(neg)
*flags &= ~f;
else
*flags |= f;
}
}
|