Blame


1 d1f529f4 2005-10-29 devnull #include <u.h>
2 d1f529f4 2005-10-29 devnull #include <libc.h>
3 d1f529f4 2005-10-29 devnull #include <bio.h>
4 d1f529f4 2005-10-29 devnull #include "msgdb.h"
5 d1f529f4 2005-10-29 devnull
6 d1f529f4 2005-10-29 devnull void
7 d1f529f4 2005-10-29 devnull usage(void)
8 d1f529f4 2005-10-29 devnull {
9 d1f529f4 2005-10-29 devnull fprint(2, "usage: msgdb [-c] file\n");
10 d1f529f4 2005-10-29 devnull exits("usage");
11 d1f529f4 2005-10-29 devnull }
12 d1f529f4 2005-10-29 devnull
13 d1f529f4 2005-10-29 devnull void
14 d1f529f4 2005-10-29 devnull main(int argc, char **argv)
15 d1f529f4 2005-10-29 devnull {
16 d1f529f4 2005-10-29 devnull int create = 0;
17 d1f529f4 2005-10-29 devnull Msgdb *db;
18 d1f529f4 2005-10-29 devnull char *tok, *p;
19 d1f529f4 2005-10-29 devnull long val;
20 d1f529f4 2005-10-29 devnull int input;
21 d1f529f4 2005-10-29 devnull Biobuf b;
22 d1f529f4 2005-10-29 devnull
23 d1f529f4 2005-10-29 devnull input = 0;
24 d1f529f4 2005-10-29 devnull ARGBEGIN{
25 d1f529f4 2005-10-29 devnull case 'c':
26 d1f529f4 2005-10-29 devnull create = 1;
27 d1f529f4 2005-10-29 devnull break;
28 d1f529f4 2005-10-29 devnull case 'i':
29 d1f529f4 2005-10-29 devnull input = 1;
30 d1f529f4 2005-10-29 devnull break;
31 d1f529f4 2005-10-29 devnull default:
32 d1f529f4 2005-10-29 devnull usage();
33 d1f529f4 2005-10-29 devnull }ARGEND
34 d1f529f4 2005-10-29 devnull
35 d1f529f4 2005-10-29 devnull if(argc != 1)
36 d1f529f4 2005-10-29 devnull usage();
37 d1f529f4 2005-10-29 devnull
38 d1f529f4 2005-10-29 devnull if((db = mdopen(argv[0], create)) == nil)
39 d1f529f4 2005-10-29 devnull sysfatal("open db: %r");
40 d1f529f4 2005-10-29 devnull
41 d1f529f4 2005-10-29 devnull if(input){
42 d1f529f4 2005-10-29 devnull Binit(&b, 0, OREAD);
43 d1f529f4 2005-10-29 devnull while((tok = Brdline(&b, '\n')) != nil){
44 d1f529f4 2005-10-29 devnull tok[Blinelen(&b)-1] = '\0';
45 d1f529f4 2005-10-29 devnull p = strrchr(tok, ' ');
46 d1f529f4 2005-10-29 devnull if(p == nil)
47 d1f529f4 2005-10-29 devnull val = mdget(db, tok)+1;
48 d1f529f4 2005-10-29 devnull else{
49 d1f529f4 2005-10-29 devnull *p++ = 0;
50 d1f529f4 2005-10-29 devnull val = atoi(p);
51 d1f529f4 2005-10-29 devnull }
52 d1f529f4 2005-10-29 devnull mdput(db, tok, val);
53 d1f529f4 2005-10-29 devnull }
54 d1f529f4 2005-10-29 devnull }else{
55 d1f529f4 2005-10-29 devnull mdenum(db);
56 d1f529f4 2005-10-29 devnull Binit(&b, 1, OWRITE);
57 d1f529f4 2005-10-29 devnull while(mdnext(db, &tok, &val) >= 0)
58 d1f529f4 2005-10-29 devnull Bprint(&b, "%s %ld\n", tok, val);
59 d1f529f4 2005-10-29 devnull Bterm(&b);
60 d1f529f4 2005-10-29 devnull }
61 d1f529f4 2005-10-29 devnull mdclose(db);
62 d1f529f4 2005-10-29 devnull exits(nil);
63 d1f529f4 2005-10-29 devnull }