46 #define QIF_FILE_MAX_SIZE 256000 48 int ofx_proc_transaction_cb(
const struct OfxTransactionData data,
void * transaction_data)
50 char dest_string[255];
51 char trans_buff[4096];
53 char trans_list_buff[QIF_FILE_MAX_SIZE];
55 trans_list_buff[0]=
'\0';
57 if(data.date_posted_valid==
true){
59 sprintf(trans_buff,
"D%d%s%d%s%d%s", temp_tm.tm_mday,
"/", temp_tm.tm_mon+1,
"/", temp_tm.tm_year+1900,
"\n");
60 strncat(trans_list_buff, trans_buff,
sizeof(trans_list_buff)-1 - strlen(trans_list_buff));
62 if(data.amount_valid==
true){
63 sprintf(trans_buff,
"T%.2f%s",data.
amount,
"\n");
64 strncat(trans_list_buff, trans_buff,
sizeof(trans_list_buff)-1 - strlen(trans_list_buff));
66 if(data.check_number_valid==
true){
68 strncat(trans_list_buff, trans_buff,
sizeof(trans_list_buff)-1 - strlen(trans_list_buff));
70 else if(data.reference_number_valid==
true){
72 strncat(trans_list_buff, trans_buff,
sizeof(trans_list_buff)-1 - strlen(trans_list_buff));
74 if(data.name_valid==
true){
75 sprintf(trans_buff,
"P%s%s",data.
name,
"\n");
76 strncat(trans_list_buff, trans_buff,
sizeof(trans_list_buff)-1 - strlen(trans_list_buff));
78 if(data.memo_valid==
true){
79 sprintf(trans_buff,
"M%s%s",data.
memo,
"\n");
80 strncat(trans_list_buff, trans_buff,
sizeof(trans_list_buff)-1 - strlen(trans_list_buff));
86 switch(data.transactiontype){
87 case OFX_CREDIT: strncpy(dest_string,
"Generic credit",
sizeof(dest_string));
89 case OFX_DEBIT: strncpy(dest_string,
"Generic debit",
sizeof(dest_string));
91 case OFX_INT: strncpy(dest_string,
"Interest earned or paid (Note: Depends on signage of amount)",
sizeof(dest_string));
93 case OFX_DIV: strncpy(dest_string,
"Dividend",
sizeof(dest_string));
95 case OFX_FEE: strncpy(dest_string,
"FI fee",
sizeof(dest_string));
97 case OFX_SRVCHG: strncpy(dest_string,
"Service charge",
sizeof(dest_string));
99 case OFX_DEP: strncpy(dest_string,
"Deposit",
sizeof(dest_string));
101 case OFX_ATM: strncpy(dest_string,
"ATM debit or credit (Note: Depends on signage of amount)",
sizeof(dest_string));
103 case OFX_POS: strncpy(dest_string,
"Point of sale debit or credit (Note: Depends on signage of amount)",
sizeof(dest_string));
105 case OFX_XFER: strncpy(dest_string,
"Transfer",
sizeof(dest_string));
107 case OFX_CHECK: strncpy(dest_string,
"Check",
sizeof(dest_string));
109 case OFX_PAYMENT: strncpy(dest_string,
"Electronic payment",
sizeof(dest_string));
111 case OFX_CASH: strncpy(dest_string,
"Cash withdrawal",
sizeof(dest_string));
113 case OFX_DIRECTDEP: strncpy(dest_string,
"Direct deposit",
sizeof(dest_string));
115 case OFX_DIRECTDEBIT: strncpy(dest_string,
"Merchant initiated debit",
sizeof(dest_string));
117 case OFX_REPEATPMT: strncpy(dest_string,
"Repeating payment/standing order",
sizeof(dest_string));
119 case OFX_OTHER: strncpy(dest_string,
"Other",
sizeof(dest_string));
121 default : strncpy(dest_string,
"Unknown transaction type",
sizeof(dest_string));
124 sprintf(trans_buff,
"L%s%s",dest_string,
"\n");
125 strncat(trans_list_buff, trans_buff,
sizeof(trans_list_buff)-1 - strlen(trans_list_buff));
127 strcpy(trans_buff,
"^\n");
128 strncat(trans_list_buff, trans_buff,
sizeof(trans_list_buff)-1 - strlen(trans_list_buff));
129 fputs(trans_list_buff,stdout);
133 int ofx_proc_statement_cb(
const struct OfxStatementData data,
void * statement_data)
137 printf(
"!Account\n");
138 if(data.account_id_valid==
true){
145 case OFX_CHECKING : printf(
"TBank\n");
147 case OFX_SAVINGS : printf(
"TBank\n");
149 case OFX_MONEYMRKT : printf(
"TOth A\n");
151 case OFX_CREDITLINE : printf(
"TOth L\n");
153 case OFX_CMA : printf(
"TOth A\n");
155 case OFX_CREDITCARD : printf(
"TCCard\n");
157 default: perror(
"WRITEME: ofx_proc_account() This is an unknown account type!");
160 printf(
"DOFX online account\n");
162 if(data.ledger_balance_date_valid==
true){
164 printf(
"/%d%s%d%s%d%s", temp_tm.tm_mday,
"/", temp_tm.tm_mon+1,
"/", temp_tm.tm_year+1900,
"\n");
166 if(data.ledger_balance_valid==
true){
173 case OFX_CHECKING : printf(
"!Type:Bank\n");
175 case OFX_SAVINGS : printf(
"!Type:Bank\n");
177 case OFX_MONEYMRKT : printf(
"!Type:Oth A\n");
179 case OFX_CREDITLINE : printf(
"!Type:Oth L\n");
181 case OFX_CMA : printf(
"!Type:Oth A\n");
183 case OFX_CREDITCARD : printf(
"!Type:CCard\n");
185 default: perror(
"WRITEME: ofx_proc_account() This is an unknown account type!");
192 int ofx_proc_account_cb(
const struct OfxAccountData data,
void * account_data)
194 char dest_string[255]=
"";
198 fputs(dest_string,stdout);
202 int main (
int argc,
char *argv[])
time_t ledger_balance_date
An abstraction of an account.
char reference_number[OFX_REFERENCE_NUMBER_LENGTH]
char check_number[OFX_CHECK_NUMBER_LENGTH]
int transactiontype_valid
char name[OFX_TRANSACTION_NAME_LENGTH]
char memo[OFX_MEMO2_LENGTH]
LibofxContextPtr libofx_get_new_context()
Initialise the library and return a new context.
char account_id[OFX_ACCOUNT_ID_LENGTH]
void ofx_set_statement_cb(LibofxContextPtr ctx, LibofxProcStatementCallback cb, void *user_data)
void ofx_set_account_cb(LibofxContextPtr ctx, LibofxProcAccountCallback cb, void *user_data)
struct OfxAccountData * account_ptr
void ofx_set_transaction_cb(LibofxContextPtr ctx, LibofxProcTransactionCallback cb, void *user_data)
int main(int argc, char *argv[])
An abstraction of a transaction in an account.
int libofx_proc_file(LibofxContextPtr libofx_context, const char *p_filename, enum LibofxFileFormat ftype)
libofx_proc_file is the entry point of the library.
int libofx_free_context(LibofxContextPtr)
Free all ressources used by this context.
An abstraction of an account statement.