1 /****************************************************************************
2 * odbf.c
3 ****************************************************************************
4 * dbf Reader and Converter for dBASE files
5 * Implementation
6 *
7 * Author: Bjoern Berg <clergyman@gmx.de>
8 * Modifications: Uwe Steinmann <uwe@steinmann.cx>
9 *
10 ****************************************************************************
11 * Functions to write dBASE files
12 ****************************************************************************
13 * $Id: odbf.c,v 1.1 2004/09/07 16:04:36 steinm Exp $
14 ***************************************************************************/
15
16 #include <libdbf/libdbf.h>
17 #include "dbf.h"
18
19 static P_DBF *op_dbf;
20
21 /* writeDBFHeader() {{{
22 * creates the DBF Header with the information provided by DB_FIELD
23 */
24 int
writeDBFHeader(FILE * fp,P_DBF * p_dbf,const char * in,const char * out)25 writeDBFHeader (FILE *fp, P_DBF *p_dbf,
26 const char *in /* __unused */, const char *out /* __unused */)
27 {
28 int i, columns;
29 char *fields, *fieldptr;
30
31 columns = dbf_NumCols(p_dbf);
32 if(NULL == (fields = malloc(columns * SIZE_OF_DB_FIELD))) {
33 return -1;
34 }
35
36 fieldptr = fields;
37 for (i = 0; i < columns; i++) {
38 char field_type;
39 const char *field_name;
40 int field_length, field_decimals;
41 field_type = dbf_ColumnType(p_dbf, i);
42 field_name = dbf_ColumnName(p_dbf, i);
43 field_length = dbf_ColumnSize(p_dbf, i);
44 field_decimals = dbf_ColumnDecimals(p_dbf, i);
45 dbf_SetField((DB_FIELD *)fieldptr, field_type, field_name, field_length, field_decimals);
46 fieldptr += SIZE_OF_DB_FIELD;
47 }
48 op_dbf = dbf_CreateFH(fileno(fp), (DB_FIELD *)fields, columns);
49
50 return 0;
51 }
52 /* }}} */
53
54 /* writeDBFFooter() {{{
55 * creates the DBF Footer
56 */
writeDBFFooter(FILE * fp,P_DBF * p_dbf,const char * filename,const char * export_filename)57 int writeDBFFooter (FILE *fp, P_DBF *p_dbf,
58 const char *filename, const char *export_filename)
59 {
60 //dbf_Close(op_dbf);
61 }
62 /* }}} */
63
64 /* writeDBFLine {{{
65 * creates a line in the DBF document for each data set
66 */
67 int
writeDBFLine(FILE * fp,P_DBF * p_dbf,const unsigned char * value,int record_length,const char * in,const char * out)68 writeDBFLine(FILE *fp, P_DBF *p_dbf,
69 const unsigned char *value, int record_length,
70 const char *in /* unused */, const char *out /* unused */)
71 {
72 if(0 > dbf_WriteRecord(op_dbf, value, record_length))
73 exit(1);
74 return 0;
75 }
76 /* }}} */
77
78 /*
79 * Local variables:
80 * tab-width: 4
81 * c-basic-offset: 4
82 * End:
83 * vim600: sw=4 ts=4 fdm=marker
84 * vim<600: sw=4 ts=4
85 */
86