16 extern char *strchr();
22 static char *usage = "%s [-R] cat | look |... dbmname";
43 "fetch", DLOOK, O_RDONLY,
44 "get", DLOOK, O_RDONLY,
45 "look", DLOOK, O_RDONLY,
46 "add", DINSERT, O_RDWR,
47 "insert", DINSERT, O_RDWR,
48 "store", DINSERT, O_RDWR,
49 "delete", DDELETE, O_RDWR,
50 "remove", DDELETE, O_RDWR,
51 "dump", DCAT, O_RDONLY,
52 "list", DCAT, O_RDONLY,
53 "cat", DCAT, O_RDONLY,
54 "creat", DCREAT, O_RDWR | O_CREAT | O_TRUNC,
55 "new", DCREAT, O_RDWR | O_CREAT | O_TRUNC,
56 "build", DBUILD, O_RDWR | O_CREAT,
57 "squash", DPRESS, O_RDWR,
58 "compact", DPRESS, O_RDWR,
59 "compress", DPRESS, O_RDWR
62 #define CTABSIZ (sizeof (cmds)/sizeof (cmd))
65 static void badk(), doit(), prdatum();
79 while ((c = getopt(argc, argv, "R")) != EOF)
81 case 'R': /* raw processing */
86 oops("usage: %s", usage);
90 if ((argc -= optind) < 2)
91 oops("usage: %s", usage);
93 if ((act = parse(argv[optind])) == NULL)
96 doit(act, argv[optind]);
116 if ((db = dbm_open(file, act->flags, 0644)) == NULL)
117 oops("cannot open: %s", file);
119 if ((line = (char *) malloc(LINEMAX)) == NULL)
120 oops("%s: cannot get memory", "line alloc");
122 switch (act->scode) {
125 while (fgets(line, LINEMAX, stdin) != NULL) {
126 n = strlen(line) - 1;
130 val = dbm_fetch(db, key);
131 if (val.dptr != NULL) {
132 prdatum(stdout, val);
136 prdatum(stderr, key);
137 fprintf(stderr, ": not found.\n");
143 while (fgets(line, LINEMAX, stdin) != NULL) {
144 n = strlen(line) - 1;
148 if (dbm_delete(db, key) == -1) {
149 prdatum(stderr, key);
150 fprintf(stderr, ": not found.\n");
155 for (key = dbm_firstkey(db); key.dptr != 0;
156 key = dbm_nextkey(db)) {
157 prdatum(stdout, key);
159 prdatum(stdout, dbm_fetch(db, key));
167 while (fgets(line, LINEMAX, stdin) != NULL) {
168 n = strlen(line) - 1;
171 if ((op = strchr(line, '\t')) != 0) {
172 key.dsize = op - line;
175 val.dsize = line + n - op;
178 oops("bad input; %s", line);
180 if (dbm_store(db, key, val, DBM_REPLACE) < 0) {
181 prdatum(stderr, key);
182 fprintf(stderr, ": ");
183 oops("store: %s", "failed");
187 printf("done: %d seconds.\n", time(0) - start);
206 fprintf(stderr, "%s: ", progname);
207 fprintf(stderr, "bad keywd %s. use one of\n", word);
208 for (i = 0; i < (int)CTABSIZ; i++)
209 fprintf(stderr, "%-8s%c", cmds[i].sname,
210 ((i + 1) % 6 == 0) ? '\n' : ' ');
211 fprintf(stderr, "\n");
220 register int i = CTABSIZ;
223 for (p = cmds; i--; p++)
224 if (strcmp(p->sname, str) == 0)
235 register char *p = d.dptr;
236 register int n = d.dsize;
241 fprintf(stream, "M-");
244 if (c == 0177 || c < ' ')
245 fprintf(stream, "^%c", (c == 0177) ? '?' : c + '@');