This commit is contained in:
brianb 2000-03-11 21:40:06 +00:00
parent 6714088c27
commit 282902b6e3
4 changed files with 60 additions and 5 deletions

View File

@ -121,4 +121,8 @@ extern MdbTableDef *mdb_read_table(MdbCatalogEntry *entry);
/* data.c */
extern void mdb_data_dump(MdbTableDef *table);
/* dump.c */
void buffer_dump(const char* buf, int start, int end);
#endif /* _mdbtools_h_ */

View File

@ -2,7 +2,7 @@
CC = gcc
INC = -I ../include `glib-config --cflags`
OBJS = catalog.o mem.o file.o kkd.o table.o data.o
OBJS = catalog.o mem.o file.o kkd.o table.o data.o dump.o
all: libmdb

View File

@ -31,16 +31,32 @@ int row_start, row_end;
int fixed_cols_found, var_cols_found;
int col_start, len;
int eod; /* end of data */
int delflag, lookupflag;
for (pg_num=1;pg_num<=table->num_pgs;pg_num++) {
mdb_read_pg(mdb,table->first_data_pg + pg_num);
rows = mdb_get_int16(mdb,8);
fprintf(stdout,"Rows on page %d: %d\n", pg_num, rows);
fprintf(stdout,"Rows on page %d: %d\n",
pg_num + table->first_data_pg,
rows);
row_end=2047;
for (i=0;i<rows;i++) {
row_start = mdb_get_int16(mdb,10+i*2);
fprintf(stdout,"Pg %d Row %d bytes %d to %d\n", pg_num, i, row_start, row_end);
row_start = mdb_get_int16(mdb,10+i*2);
delflag = lookupflag = 0;
if (row_start & 0x8000) delflag++;
if (row_start & 0x4000) lookupflag++;
row_start &= 0x0FFF; /* remove flags */
fprintf(stdout,"Pg %d Row %d bytes %d to %d %s %s\n",
pg_num, i, row_start, row_end,
lookupflag ? "[lookup]" : "",
delflag ? "[delflag]" : "");
if (delflag || lookupflag) {
row_end = row_start-1;
continue;
}
buffer_dump(mdb->pg_buf, row_start, row_end);
num_cols = mdb->pg_buf[row_start];
var_cols = mdb->pg_buf[row_end-1];
fixed_cols = num_cols - var_cols;
@ -55,7 +71,7 @@ int eod; /* end of data */
col = g_array_index(table->columns,MdbColumn,j);
if (mdb_is_fixed_col(&col) &&
++fixed_cols_found <= fixed_cols) {
fprintf(stdout,"fixed col %s = %s\n",col.name,mdb_col_to_string(&mdb->pg_buf[row_start + col_start],col.col_type,NULL));
fprintf(stdout,"fixed col %s = %s\n",col.name,mdb_col_to_string(&mdb->pg_buf[row_start + col_start],col.col_type,0));
col_start += col.col_size;
}
}

35
src/libmdb/dump.c Normal file
View File

@ -0,0 +1,35 @@
#include <ctype.h>
#include <string.h>
#include <stdio.h>
void buffer_dump(const char* buf, int start, int end)
{
char asc[20];
int j, k;
memset(asc, 0, sizeof(asc));
k = 0;
for (j=start; j<=end; j++) {
if (k == 0) {
fprintf(stdout, "%04x ", j);
}
fprintf(stdout, "%02x ", buf[j]);
asc[k] = isprint(buf[j]) ? buf[j] : '.';
k++;
if (k == 8) {
fprintf(stdout, " ");
}
if (k == 16) {
fprintf(stdout, " %s\n", asc);
memset(asc, 0, sizeof(asc));
k = 0;
}
}
for (j=k; j<16; j++) {
fprintf(stdout, " ");
}
if (k < 8) {
fprintf(stdout, " ");
}
fprintf(stdout, " %s\n", asc);
}