This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove another dead function in vms/vms.c.
[perl5.git] / ext / SDBM_File / dbd.c
1 /*
2  * dbd - dump a dbm data file
3  */
4
5 #include <stdio.h>
6 #include <sys/file.h>
7 #include "EXTERN.h"
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
17 main(int argc, char **argv)
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);
28                 if (!name)
29                     oops("cannot get memory");
30
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
44 void
45 sdump(int pagf)
46 {
47         int r;
48         int n = 0;
49         int 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
70 int
71 dispage(char *pag)
72 {
73         int i, n;
74         int off;
75         int 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
92 void
93 dispage(char *pag)
94 {
95         int i, n;
96         int off;
97         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