/* writeDBFHeader() {{{ * creates the DBF Header with the information provided by DB_FIELD */ int writeDBFHeader (FILE *fp, P_DBF *p_dbf, const char *in /* __unused */, const char *out /* __unused */) { int i, columns; char *fields, *fieldptr; columns = dbf_NumCols(p_dbf); if(NULL == (fields = malloc(columns * SIZE_OF_DB_FIELD))) { return -1; } fieldptr = fields; for (i = 0; i < columns; i++) { char field_type; const char *field_name; int field_length, field_decimals; field_type = dbf_ColumnType(p_dbf, i); field_name = dbf_ColumnName(p_dbf, i); field_length = dbf_ColumnSize(p_dbf, i); field_decimals = dbf_ColumnDecimals(p_dbf, i); dbf_SetField((DB_FIELD *)fieldptr, field_type, field_name, field_length, field_decimals); fieldptr += SIZE_OF_DB_FIELD; } op_dbf = dbf_CreateFH(fileno(fp), (DB_FIELD *)fields, columns); return 0; }
/* printDBF() {{{ * printDBF is the real function that is hidden behind writeLine */ static int printDBF(FILE *output, P_DBF *p_dbf, const unsigned char *record, int header_length, const char *filename, const char *export_filename) { int i, columns; const char *value; columns = dbf_NumCols(p_dbf); value = record; for (i = 0; i < columns; i++) { char field_type; const char *field_name; int field_length, field_decimals; field_type = dbf_ColumnType(p_dbf, i); field_name = dbf_ColumnName(p_dbf, i); field_length = dbf_ColumnSize(p_dbf, i); field_decimals = dbf_ColumnDecimals(p_dbf, i); printf("%11.11s: %.*s\n", field_name, field_length, value); value += field_length; } return 0; }
void dbf_field_stat (P_DBF *p_dbf) { const struct DB_FIELD *dbf; int cross[] = {1,17,25,41,57,73}; int i, columns; columns = dbf_NumCols(p_dbf); drawline(linelength, cross, (sizeof(cross)/sizeof(int))); printf("| "); printf(_("field name")); printf("\t| "); printf(_("type")); printf("\t| "); printf(_("field address")); printf("\t| "); printf(_("length")); printf("\t| "); printf(_("field dec.")); printf("\t|\n"); drawline(linelength, cross, sizeof(cross)/sizeof(int)); for (i = 0; i < columns; i++) { char field_type; const char *field_name; int field_length, field_decimals, field_address; field_type = dbf_ColumnType(p_dbf, i); field_name = dbf_ColumnName(p_dbf, i); field_length = dbf_ColumnSize(p_dbf, i); field_decimals = dbf_ColumnDecimals(p_dbf, i); field_address = dbf_ColumnAddress(p_dbf, i); printf("|%13.11s\t| %3c\t| %8x\t| %3d\t\t| %3d\t\t|\n", field_name, field_type, field_address, field_length, field_decimals); } drawline(linelength, cross, sizeof(cross)/sizeof(int)); }
/* output for header statistic */ void dbf_file_info (P_DBF *p_dbf) { int version, memo; version = dbf_GetVersion(p_dbf); memo = (version & 128)==128 ? 1 : 0; printf("\n"); printf(_("File statistics:")); printf("\n"); printf(_("dBase version.........:")); printf(" \t %s (%s)\n", dbf_GetStringVersion(p_dbf), memo?"with memo":"without memo"); printf(_("Date of last update...:")); printf(" \t %s\n", dbf_GetDate(p_dbf)); printf(_("Number of records.....:")); printf(" \t %d (0x%08x)\n", dbf_NumRows(p_dbf), dbf_NumRows(p_dbf)); printf(_("Length of header......:")); printf(" \t %d (0x%04x)\n", dbf_HeaderSize(p_dbf), dbf_HeaderSize(p_dbf)); printf(_("Record length.........:")); printf(" \t %d (0x%04x)\n", dbf_RecordLength(p_dbf), dbf_RecordLength(p_dbf)); printf(_("Columns in file.......:")); printf(" \t %d \n", dbf_NumCols(p_dbf)); }