msgdb.c 902 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bio.h>
  4. #include "msgdb.h"
  5. void
  6. usage(void)
  7. {
  8. fprint(2, "usage: msgdb [-c] file\n");
  9. exits("usage");
  10. }
  11. void
  12. main(int argc, char **argv)
  13. {
  14. int create = 0;
  15. Msgdb *db;
  16. char *tok, *p;
  17. long val;
  18. int input;
  19. Biobuf b;
  20. input = 0;
  21. ARGBEGIN{
  22. case 'c':
  23. create = 1;
  24. break;
  25. case 'i':
  26. input = 1;
  27. break;
  28. default:
  29. usage();
  30. }ARGEND
  31. if(argc != 1)
  32. usage();
  33. if((db = mdopen(argv[0], create)) == nil)
  34. sysfatal("open db: %r");
  35. if(input){
  36. Binit(&b, 0, OREAD);
  37. while((tok = Brdline(&b, '\n')) != nil){
  38. tok[Blinelen(&b)-1] = '\0';
  39. p = strrchr(tok, ' ');
  40. if(p == nil)
  41. val = mdget(db, tok)+1;
  42. else{
  43. *p++ = 0;
  44. val = atoi(p);
  45. }
  46. mdput(db, tok, val);
  47. }
  48. }else{
  49. mdenum(db);
  50. Binit(&b, 1, OWRITE);
  51. while(mdnext(db, &tok, &val) >= 0)
  52. Bprint(&b, "%s %ld\n", tok, val);
  53. Bterm(&b);
  54. }
  55. mdclose(db);
  56. exits(nil);
  57. }