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