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