| #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); |
| } |