Commit | Line | Data |
463ee0b2 |
1 | /* |
2 | * dbd - dump a dbm data file |
3 | */ |
4 | |
5 | #include <stdio.h> |
6 | #include <sys/file.h> |
17f28c40 |
7 | #include "EXTERN.h" |
463ee0b2 |
8 | #include "sdbm.h" |
9 | |
10 | char *progname; |
11 | extern void oops(); |
12 | |
13 | |
14 | #define empty(page) (((short *) page)[0] == 0) |
15 | |
16 | int |
ba106d47 |
17 | main(int argc, char **argv) |
463ee0b2 |
18 | { |
19 | int n; |
20 | char *p; |
21 | char *name; |
22 | int pagf; |
23 | |
24 | progname = argv[0]; |
25 | |
26 | if (p = argv[1]) { |
27 | name = (char *) malloc((n = strlen(p)) + 5); |
db7c17d7 |
28 | if (!name) |
29 | oops("cannot get memory"); |
30 | |
463ee0b2 |
31 | strcpy(name, p); |
32 | strcpy(name + n, ".pag"); |
33 | |
34 | if ((pagf = open(name, O_RDONLY)) < 0) |
35 | oops("cannot open %s.", name); |
36 | |
37 | sdump(pagf); |
38 | } |
39 | else |
40 | oops("usage: %s dbname", progname); |
41 | return 0; |
42 | } |
43 | |
ba106d47 |
44 | void |
45 | sdump(int pagf) |
463ee0b2 |
46 | { |
47 | register r; |
48 | register n = 0; |
49 | register o = 0; |
50 | char pag[PBLKSIZ]; |
51 | |
52 | while ((r = read(pagf, pag, PBLKSIZ)) > 0) { |
53 | if (!okpage(pag)) |
54 | fprintf(stderr, "%d: bad page.\n", n); |
55 | else if (empty(pag)) |
56 | o++; |
57 | else |
58 | dispage(pag); |
59 | n++; |
60 | } |
61 | |
62 | if (r == 0) |
63 | fprintf(stderr, "%d pages (%d holes).\n", n, o); |
64 | else |
65 | oops("read failed: block %d", n); |
66 | } |
67 | |
68 | |
69 | #ifdef OLD |
ba106d47 |
70 | int |
71 | dispage(char *pag) |
463ee0b2 |
72 | { |
73 | register i, n; |
74 | register off; |
75 | register short *ino = (short *) pag; |
76 | |
77 | off = PBLKSIZ; |
78 | for (i = 1; i < ino[0]; i += 2) { |
79 | printf("\t[%d]: ", ino[i]); |
80 | for (n = ino[i]; n < off; n++) |
81 | putchar(pag[n]); |
82 | putchar(' '); |
83 | off = ino[i]; |
84 | printf("[%d]: ", ino[i + 1]); |
85 | for (n = ino[i + 1]; n < off; n++) |
86 | putchar(pag[n]); |
87 | off = ino[i + 1]; |
88 | putchar('\n'); |
89 | } |
90 | } |
91 | #else |
ba106d47 |
92 | void |
93 | dispage(char *pag) |
463ee0b2 |
94 | { |
95 | register i, n; |
96 | register off; |
97 | register short *ino = (short *) pag; |
98 | |
99 | off = PBLKSIZ; |
100 | for (i = 1; i < ino[0]; i += 2) { |
101 | for (n = ino[i]; n < off; n++) |
102 | if (pag[n] != 0) |
103 | putchar(pag[n]); |
104 | putchar('\t'); |
105 | off = ino[i]; |
106 | for (n = ino[i + 1]; n < off; n++) |
107 | if (pag[n] != 0) |
108 | putchar(pag[n]); |
109 | putchar('\n'); |
110 | off = ino[i + 1]; |
111 | } |
112 | } |
113 | #endif |