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
usage(void)10 usage(void)
11 {
12 fprint(2, "usage: ndb/csquery [/net/cs [addr...]]\n");
13 exits("usage");
14 }
15
16 void
query(char * addr)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
main(int argc,char ** argv)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 }
79