|  | #include <u.h> | 
|  | #include <libc.h> | 
|  | #include <bio.h> | 
|  | #include "msgdb.h" | 
|  |  | 
|  | void | 
|  | usage(void) | 
|  | { | 
|  | fprint(2, "usage: msgdb [-c] file\n"); | 
|  | exits("usage"); | 
|  | } | 
|  |  | 
|  | void | 
|  | main(int argc, char **argv) | 
|  | { | 
|  | int create = 0; | 
|  | Msgdb *db; | 
|  | char *tok, *p; | 
|  | long val; | 
|  | int input; | 
|  | Biobuf b; | 
|  |  | 
|  | input = 0; | 
|  | ARGBEGIN{ | 
|  | case 'c': | 
|  | create = 1; | 
|  | break; | 
|  | case 'i': | 
|  | input = 1; | 
|  | break; | 
|  | default: | 
|  | usage(); | 
|  | }ARGEND | 
|  |  | 
|  | if(argc != 1) | 
|  | usage(); | 
|  |  | 
|  | if((db = mdopen(argv[0], create)) == nil) | 
|  | sysfatal("open db: %r"); | 
|  |  | 
|  | if(input){ | 
|  | Binit(&b, 0, OREAD); | 
|  | while((tok = Brdline(&b, '\n')) != nil){ | 
|  | tok[Blinelen(&b)-1] = '\0'; | 
|  | p = strrchr(tok, ' '); | 
|  | if(p == nil) | 
|  | val = mdget(db, tok)+1; | 
|  | else{ | 
|  | *p++ = 0; | 
|  | val = atoi(p); | 
|  | } | 
|  | mdput(db, tok, val); | 
|  | } | 
|  | }else{ | 
|  | mdenum(db); | 
|  | Binit(&b, 1, OWRITE); | 
|  | while(mdnext(db, &tok, &val) >= 0) | 
|  | Bprint(&b, "%s %ld\n", tok, val); | 
|  | Bterm(&b); | 
|  | } | 
|  | mdclose(db); | 
|  | exits(nil); | 
|  | } |