csquery.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bio.h>
  4. char *server;
  5. char *status;
  6. int statusonly;
  7. void
  8. usage(void)
  9. {
  10. fprint(2, "usage: ndb/csquery [/net/cs [addr...]]\n");
  11. exits("usage");
  12. }
  13. void
  14. query(char *addr)
  15. {
  16. char buf[128];
  17. int fd, n;
  18. fd = open(server, ORDWR);
  19. if(fd < 0)
  20. sysfatal("cannot open %s: %r", server);
  21. if(write(fd, addr, strlen(addr)) <= 0){
  22. if(!statusonly)
  23. fprint(2, "translating %s: %r\n", addr);
  24. status = "errors";
  25. close(fd);
  26. return;
  27. }
  28. if(!statusonly){
  29. seek(fd, 0, 0);
  30. while((n = read(fd, buf, sizeof(buf)-1)) > 0){
  31. buf[n] = 0;
  32. print("%s\n", buf);
  33. }
  34. }
  35. close(fd);
  36. }
  37. void
  38. main(int argc, char **argv)
  39. {
  40. char *p;
  41. int i;
  42. Biobuf in;
  43. ARGBEGIN{
  44. case 's':
  45. statusonly = 1;
  46. break;
  47. default:
  48. usage();
  49. }ARGEND
  50. if(argc > 0)
  51. server = argv[0];
  52. else
  53. server = "/net/cs";
  54. if(argc > 1){
  55. for(i=1; i<argc; i++)
  56. query(argv[i]);
  57. exits(status);
  58. }
  59. Binit(&in, 0, OREAD);
  60. for(;;){
  61. print("> ");
  62. p = Brdline(&in, '\n');
  63. if(p == 0)
  64. break;
  65. p[Blinelen(&in)-1] = 0;
  66. query(p);
  67. }
  68. exits(nil);
  69. }