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