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