xref: /plan9/sys/src/cmd/ndb/csquery.c (revision 4f8f669ce30aa840f020b0b32ad38c5b9f2b3b4a)
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