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)) <= 0){ 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 } 79