bool generic_gnc_numeric_end_handler(gpointer data_for_children, GSList *data_from_children, GSList *sibling_data, gpointer parent_data, gpointer global_data, gpointer *result, const gchar *tag) { gnc_numeric *num = NULL; gchar *txt = NULL; bool ok = FALSE; txt = concatenate_child_result_chars(data_from_children); if (txt) { num = g_new(gnc_numeric, 1); if (num) { if (string_to_gnc_numeric(txt, num)) { ok = TRUE; *result = num; } } } g_free(txt); if (!ok) { PERR ("couldn't parse numeric quantity"); g_free(num); } return(ok); }
void gnc_exp_parser_real_init ( gboolean addPredefined ) { gchar *filename, **keys, **key, *str_value; GKeyFile *key_file; gnc_numeric value; if (parser_inited) gnc_exp_parser_shutdown (); variable_bindings = g_hash_table_new (g_str_hash, g_str_equal); /* This comes after the statics have been initialized. Not at the end! */ parser_inited = TRUE; if ( addPredefined ) { filename = gnc_exp_parser_filname(); key_file = gnc_key_file_load_from_file(filename, TRUE, FALSE, NULL); if (key_file) { keys = g_key_file_get_keys(key_file, GROUP_NAME, NULL, NULL); for (key = keys; key && *key; key++) { str_value = g_key_file_get_string(key_file, GROUP_NAME, *key, NULL); if (str_value && string_to_gnc_numeric(str_value, &value)) { gnc_exp_parser_set_value (*key, gnc_numeric_reduce (value)); } } g_strfreev(keys); g_key_file_free(key_file); } g_free(filename); } }
static split_record interpret_split_record( char *record_line) { char * tok_ptr; split_record record; memset(&record, 0, sizeof(record)); DEBUG("interpret_split_record(): Start..."); if (strlen(tok_ptr = my_strtok(record_line, "\t")) != 0) { switch (tok_ptr[0]) { case 'B': record.log_action = split_record::LOG_BEGIN_EDIT; break; case 'D': record.log_action = split_record::LOG_DELETE; break; case 'C': record.log_action = split_record::LOG_COMMIT; break; case 'R': record.log_action = split_record::LOG_ROLLBACK; break; } record.log_action_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { string_to_guid(tok_ptr, &(record.trans_guid)); record.trans_guid_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { string_to_guid(tok_ptr, &(record.split_guid)); record.split_guid_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { record.log_date = gnc_iso8601_to_timespec_gmt(tok_ptr); record.log_date_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { record.date_entered = gnc_iso8601_to_timespec_gmt(tok_ptr); record.date_entered_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { record.date_posted = gnc_iso8601_to_timespec_gmt(tok_ptr); record.date_posted_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { string_to_guid(tok_ptr, &(record.acc_guid)); record.acc_guid_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { strncpy(record.acc_name, tok_ptr, STRING_FIELD_SIZE - 1); record.acc_name_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { strncpy(record.trans_num, tok_ptr, STRING_FIELD_SIZE - 1); record.trans_num_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { strncpy(record.trans_descr, tok_ptr, STRING_FIELD_SIZE - 1); record.trans_descr_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { strncpy(record.trans_notes, tok_ptr, STRING_FIELD_SIZE - 1); record.trans_notes_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { strncpy(record.split_memo, tok_ptr, STRING_FIELD_SIZE - 1); record.split_memo_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { strncpy(record.split_action, tok_ptr, STRING_FIELD_SIZE - 1); record.split_action_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { record.split_reconcile = tok_ptr[0]; record.split_reconcile_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { string_to_gnc_numeric(tok_ptr, &(record.amount)); record.amount_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { string_to_gnc_numeric(tok_ptr, &(record.value)); record.value_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { record.date_reconciled = gnc_iso8601_to_timespec_gmt(tok_ptr); record.date_reconciled_present = TRUE; } if (strlen(tok_ptr = my_strtok(NULL, "\t")) != 0) { PERR("interpret_split_record(): Expected number of fields exceeded!"); } DEBUG("interpret_split_record(): End"); return record; }