ref: 9cf3dc9a259cadc80e6d3840c658ef1d5f7c94a4
dir: /sys/src/cmd/upas/bayes/msgdb.c/
#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); }