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