15 extern char *strchr();
21 static char *usage = "%s [-R] cat | look |... dbmname";
42 "fetch", DLOOK, O_RDONLY,
43 "get", DLOOK, O_RDONLY,
44 "look", DLOOK, O_RDONLY,
45 "add", DINSERT, O_RDWR,
46 "insert", DINSERT, O_RDWR,
47 "store", DINSERT, O_RDWR,
48 "delete", DDELETE, O_RDWR,
49 "remove", DDELETE, O_RDWR,
50 "dump", DCAT, O_RDONLY,
51 "list", DCAT, O_RDONLY,
52 "cat", DCAT, O_RDONLY,
53 "creat", DCREAT, O_RDWR | O_CREAT | O_TRUNC,
54 "new", DCREAT, O_RDWR | O_CREAT | O_TRUNC,
55 "build", DBUILD, O_RDWR | O_CREAT,
56 "squash", DPRESS, O_RDWR,
57 "compact", DPRESS, O_RDWR,
58 "compress", DPRESS, O_RDWR
61 #define CTABSIZ (sizeof (cmds)/sizeof (cmd))
64 static void badk(), doit(), prdatum();
78 while ((c = getopt(argc, argv, "R")) != EOF)
80 case 'R': /* raw processing */
85 oops("usage: %s", usage);
89 if ((argc -= optind) < 2)
90 oops("usage: %s", usage);
92 if ((act = parse(argv[optind])) == NULL)
95 doit(act, argv[optind]);
115 if ((db = dbm_open(file, act->flags, 0644)) == NULL)
116 oops("cannot open: %s", file);
118 if ((line = (char *) malloc(LINEMAX)) == NULL)
119 oops("%s: cannot get memory", "line alloc");
121 switch (act->scode) {
124 while (fgets(line, LINEMAX, stdin) != NULL) {
125 n = strlen(line) - 1;
129 val = dbm_fetch(db, key);
130 if (val.dptr != NULL) {
131 prdatum(stdout, val);
135 prdatum(stderr, key);
136 fprintf(stderr, ": not found.\n");
142 while (fgets(line, LINEMAX, stdin) != NULL) {
143 n = strlen(line) - 1;
147 if (dbm_delete(db, key) == -1) {
148 prdatum(stderr, key);
149 fprintf(stderr, ": not found.\n");
154 for (key = dbm_firstkey(db); key.dptr != 0;
155 key = dbm_nextkey(db)) {
156 prdatum(stdout, key);
158 prdatum(stdout, dbm_fetch(db, key));
166 while (fgets(line, LINEMAX, stdin) != NULL) {
167 n = strlen(line) - 1;
170 if ((op = strchr(line, '\t')) != 0) {
171 key.dsize = op - line;
174 val.dsize = line + n - op;
177 oops("bad input; %s", line);
179 if (dbm_store(db, key, val, DBM_REPLACE) < 0) {
180 prdatum(stderr, key);
181 fprintf(stderr, ": ");
182 oops("store: %s", "failed");
186 printf("done: %d seconds.\n", time(0) - start);
205 fprintf(stderr, "%s: ", progname);
206 fprintf(stderr, "bad keywd %s. use one of\n", word);
207 for (i = 0; i < (int)CTABSIZ; i++)
208 fprintf(stderr, "%-8s%c", cmds[i].sname,
209 ((i + 1) % 6 == 0) ? '\n' : ' ');
210 fprintf(stderr, "\n");
219 register int i = CTABSIZ;
222 for (p = cmds; i--; p++)
223 if (strcmp(p->sname, str) == 0)
234 register char *p = d.dptr;
235 register int n = d.dsize;
240 fprintf(stream, "M-");
243 if (c == 0177 || c < ' ')
244 fprintf(stream, "^%c", (c == 0177) ? '?' : c + '@');