xref: /plan9/sys/src/cmd/ndb/csquery.c (revision 4f8f669ce30aa840f020b0b32ad38c5b9f2b3b4a)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier #include <bio.h>
43e12c5d1SDavid du Colombier 
57dd7cddfSDavid du Colombier char *server;
69a747e4fSDavid du Colombier char *status;
79a747e4fSDavid du Colombier int statusonly;
83e12c5d1SDavid du Colombier 
99a747e4fSDavid du Colombier void
usage(void)109a747e4fSDavid du Colombier usage(void)
119a747e4fSDavid du Colombier {
129a747e4fSDavid du Colombier 	fprint(2, "usage: ndb/csquery [/net/cs [addr...]]\n");
139a747e4fSDavid du Colombier 	exits("usage");
149a747e4fSDavid du Colombier }
153e12c5d1SDavid du Colombier 
169a747e4fSDavid du Colombier void
query(char * addr)179a747e4fSDavid du Colombier query(char *addr)
189a747e4fSDavid du Colombier {
199a747e4fSDavid du Colombier 	char buf[128];
209a747e4fSDavid du Colombier 	int fd, n;
219a747e4fSDavid du Colombier 
227dd7cddfSDavid du Colombier 	fd = open(server, ORDWR);
233e12c5d1SDavid du Colombier 	if(fd < 0)
249a747e4fSDavid du Colombier 		sysfatal("cannot open %s: %r", server);
25*4f8f669cSDavid du Colombier 	if(write(fd, addr, strlen(addr)) != strlen(addr)){
269a747e4fSDavid du Colombier 		if(!statusonly)
279a747e4fSDavid du Colombier 			fprint(2, "translating %s: %r\n", addr);
289a747e4fSDavid du Colombier 		status = "errors";
299a747e4fSDavid du Colombier 		close(fd);
309a747e4fSDavid du Colombier 		return;
313e12c5d1SDavid du Colombier 	}
329a747e4fSDavid du Colombier 	if(!statusonly){
333e12c5d1SDavid du Colombier 		seek(fd, 0, 0);
343e12c5d1SDavid du Colombier 		while((n = read(fd, buf, sizeof(buf)-1)) > 0){
353e12c5d1SDavid du Colombier 			buf[n] = 0;
363e12c5d1SDavid du Colombier 			print("%s\n", buf);
373e12c5d1SDavid du Colombier 		}
383e12c5d1SDavid du Colombier 	}
399a747e4fSDavid du Colombier 	close(fd);
409a747e4fSDavid du Colombier }
419a747e4fSDavid du Colombier 
429a747e4fSDavid du Colombier void
main(int argc,char ** argv)439a747e4fSDavid du Colombier main(int argc, char **argv)
449a747e4fSDavid du Colombier {
459a747e4fSDavid du Colombier 	char *p;
469a747e4fSDavid du Colombier 	int i;
479a747e4fSDavid du Colombier 	Biobuf in;
489a747e4fSDavid du Colombier 
499a747e4fSDavid du Colombier 	ARGBEGIN{
509a747e4fSDavid du Colombier 	case 's':
519a747e4fSDavid du Colombier 		statusonly = 1;
529a747e4fSDavid du Colombier 		break;
539a747e4fSDavid du Colombier 	default:
549a747e4fSDavid du Colombier 		usage();
559a747e4fSDavid du Colombier 	}ARGEND
569a747e4fSDavid du Colombier 
579a747e4fSDavid du Colombier 	if(argc > 0)
589a747e4fSDavid du Colombier 		server = argv[0];
599a747e4fSDavid du Colombier 	else
609a747e4fSDavid du Colombier 		server = "/net/cs";
619a747e4fSDavid du Colombier 
629a747e4fSDavid du Colombier 	if(argc > 1){
639a747e4fSDavid du Colombier 		for(i=1; i<argc; i++)
649a747e4fSDavid du Colombier 			query(argv[i]);
659a747e4fSDavid du Colombier 		exits(status);
669a747e4fSDavid du Colombier 	}
679a747e4fSDavid du Colombier 
689a747e4fSDavid du Colombier 	Binit(&in, 0, OREAD);
699a747e4fSDavid du Colombier 	for(;;){
709a747e4fSDavid du Colombier 		print("> ");
719a747e4fSDavid du Colombier 		p = Brdline(&in, '\n');
729a747e4fSDavid du Colombier 		if(p == 0)
739a747e4fSDavid du Colombier 			break;
749a747e4fSDavid du Colombier 		p[Blinelen(&in)-1] = 0;
759a747e4fSDavid du Colombier 		query(p);
769a747e4fSDavid du Colombier 	}
779a747e4fSDavid du Colombier 	exits(nil);
783e12c5d1SDavid du Colombier }
79