xref: /plan9/sys/src/cmd/upas/bayes/msgdb.c (revision 4246b6162acdbb658503b8bdc98024362bfbf0fe)
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