2 ** A utility for printing all or part of an SQLite database file.
13 static int pagesize
= 1024;
15 static int mxPage
= 0;
17 static void out_of_memory(void){
18 fprintf(stderr
,"Out of memory...\n");
22 static print_page(int iPg
){
25 aData
= malloc(pagesize
);
26 if( aData
==0 ) out_of_memory();
27 lseek(db
, (iPg
-1)*pagesize
, SEEK_SET
);
28 read(db
, aData
, pagesize
);
29 fprintf(stdout
, "Page %d:\n", iPg
);
30 for(i
=0; i
<pagesize
; i
+= 16){
31 fprintf(stdout
, " %03x: ",i
);
33 fprintf(stdout
,"%02x ", aData
[i
+j
]);
36 fprintf(stdout
,"%c", isprint(aData
[i
+j
]) ? aData
[i
+j
] : '.');
43 int main(int argc
, char **argv
){
46 fprintf(stderr
,"Usage: %s FILENAME ?PAGE? ...\n", argv
[0]);
49 db
= open(argv
[1], O_RDONLY
);
51 fprintf(stderr
,"%s: can't open %s\n", argv
[0], argv
[1]);
55 mxPage
= sbuf
.st_size
/pagesize
+ 1;
58 for(i
=1; i
<=mxPage
; i
++) print_page(i
);
61 for(i
=2; i
<argc
; i
++){
64 iStart
= strtol(argv
[i
], &zLeft
, 0);
65 if( zLeft
&& strcmp(zLeft
,"..end")==0 ){
67 }else if( zLeft
&& zLeft
[0]=='.' && zLeft
[1]=='.' ){
68 iEnd
= strtol(&zLeft
[2], 0, 0);
72 if( iStart
<1 || iEnd
<iStart
|| iEnd
>mxPage
){
74 "Page argument should be LOWER?..UPPER?. Range 1 to %d\n",
78 while( iStart
<=iEnd
){