2 * search the network database for matches
6 #include <parlib/parlib.h>
11 #include <iplib/iplib.h>
12 #include <ndblib/ndb.h>
14 static int all, multiple;
17 #define ARGBEGIN for((argv0||(argv0=*argv)),argv++,argc--;\
18 argv[0] && argv[0][0]=='-' && argv[0][1];\
23 if(_args[0]=='-' && _args[1]==0){\
24 argc--; argv++; break;\
27 while(*_args && _args++)\
29 #define ARGEND /*SET(_argt);USED(_argt,_argc,_args);}USED(argv, argc);*/}
30 #define ARGF() (_argt=_args, _args="",\
31 (*_argt? _argt: argv[1]? (argc--, *++argv): 0))
32 #define EARGF(x) (_argt=_args, _args="",\
33 (*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0)))
40 fprintf(stderr, "usage: query [-am] [-f ndbfile] attr value "
41 "[returned-attr [reps]]\n");
42 fprintf(stderr, "usage");
46 /* print values of nt's attributes matching rattr */
48 prmatch(struct ndbtuple *nt, char *rattr)
50 for(; nt; nt = nt->entry)
51 if (strcmp(nt->attr, rattr) == 0)
52 printf("%s\n", nt->val);
56 search(struct ndb *db, char *attr, char *val, char *rattr)
60 struct ndbtuple *t, *nt;
62 /* first entry with a matching rattr */
64 p = ndbgetvalue(db, &s, attr, val, rattr, &t);
74 /* all entries with matching rattrs */
76 for(t = ndbsearch(db, &s, attr, val); t != NULL;
77 t = ndbsnext(&s, attr, val)){
85 for(t = ndbsearch(db, &s, attr, val); t; t = ndbsnext(&s, attr, val)){
86 for(nt = t; nt; nt = nt->entry)
87 printf("%s=%s ", nt->attr, nt->val);
94 main(int argc, char **argv)
97 char *rattr = NULL, *dbfile = NULL;
108 dbfile = EARGF(usage());
116 reps = atoi(argv[3]); /* wtf use is this? */
128 db = ndbopen(dbfile);
130 error(1, 0, "no db: %r");
133 search(db, argv[0], argv[1], rattr);