static void back_clicked (G_GNUC_UNUSED GtkWidget *widget, StfDialogData *data) { StfDialogPage newpos; switch (gtk_notebook_get_current_page (data->notebook)) { case DPG_FORMAT: stf_preview_set_lines (data->format.renderdata, NULL, NULL); if (data->parseoptions->parsetype == PARSE_TYPE_CSV) newpos = DPG_CSV; else newpos = DPG_FIXED; break; case DPG_FIXED: stf_preview_set_lines (data->fixed.renderdata, NULL, NULL); newpos = DPG_MAIN; break; case DPG_CSV: stf_preview_set_lines (data->csv.renderdata, NULL, NULL); newpos = DPG_MAIN; break; default: g_assert_not_reached (); return; } gtk_notebook_set_current_page (data->notebook, newpos); prepare_page (data); frob_buttons (data); stf_dialog_set_initial_keyboard_focus (data); }
static void next_clicked (G_GNUC_UNUSED GtkWidget *widget, StfDialogData *data) { StfDialogPage newpos; switch (gtk_notebook_get_current_page (data->notebook)) { case DPG_MAIN: stf_preview_set_lines (data->main.renderdata, NULL, NULL); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->main.main_separated))) { newpos = DPG_CSV; } else { newpos = DPG_FIXED; } break; case DPG_CSV: stf_preview_set_lines (data->csv.renderdata, NULL, NULL); newpos = DPG_FORMAT; break; case DPG_FIXED: stf_preview_set_lines (data->fixed.renderdata, NULL, NULL); newpos = DPG_FORMAT; break; default: g_assert_not_reached (); return; } gtk_notebook_set_current_page (data->notebook, newpos); prepare_page (data); frob_buttons (data); stf_dialog_set_initial_keyboard_focus (data); }
// Called when data has been received. Checks for HTTP requests. static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) { int i; char *data; struct http_state *hs; CYG_TEST_INFO("Received data"); hs = arg; if (err == ERR_OK && p != NULL) { // Inform TCP that we have taken the data tcp_recved(pcb, p->tot_len); // Check for HTTP requests if (hs->file == NULL) { data = p->payload; if (*data == 'G') { for (i = 0; i < 40; i++) { if (((char *) data + 4)[i] == ' ' || ((char *) data + 4)[i] == '\r' || ((char *) data + 4)[i] == '\n') { ((char *)data + 4)[i] = 0; } } prepare_page(hs); pbuf_free(p); send_data(pcb, hs); // Tell TCP that we wish be to informed of data that has been // successfully sent by a call to the http_sent() function. tcp_sent(pcb, http_sent); } else { pbuf_free(p); close_conn(pcb, hs); } } else { pbuf_free(p); } } if (err == ERR_OK && p == NULL) { close_conn(pcb, hs); } return ERR_OK; }
/** * stf_dialog * @wbcg: a Commandcontext (can be NULL) * @source: name of the file we are importing (or data) in UTF-8 * @data: the data itself * * This will start the import. * (NOTE: you have to free the DialogStfResult_t that this function returns yourself) * * returns: A DialogStfResult_t struct on success, NULL otherwise. **/ DialogStfResult_t* stf_dialog (WBCGtk *wbcg, const char *opt_encoding, gboolean fixed_encoding, const char *opt_locale, gboolean fixed_locale, const char *source, const char *data, int data_len) { GladeXML *gui; DialogStfResult_t *dialogresult; StfDialogData pagedata; GtkResponseType resp; g_return_val_if_fail (opt_encoding != NULL || !fixed_encoding, NULL); g_return_val_if_fail (opt_locale != NULL || !fixed_locale, NULL); g_return_val_if_fail (source != NULL, NULL); g_return_val_if_fail (data != NULL, NULL); gui = gnm_glade_xml_new (GO_CMD_CONTEXT (wbcg), "dialog-stf.glade", NULL, NULL); if (gui == NULL) return NULL; pagedata.encoding = g_strdup (opt_encoding); pagedata.fixed_encoding = fixed_encoding; pagedata.locale = g_strdup (opt_locale); pagedata.fixed_locale = fixed_locale; pagedata.wbcg = wbcg; pagedata.source = source; pagedata.raw_data = data; pagedata.raw_data_len = data_len < 0 ? (int)strlen (data) : data_len; pagedata.utf8_data = NULL; pagedata.cur = NULL; pagedata.dialog = GTK_DIALOG (glade_xml_get_widget (gui, "stf_dialog")); pagedata.notebook = GTK_NOTEBOOK (glade_xml_get_widget (gui, "stf_notebook")); pagedata.next_button = glade_xml_get_widget (gui, "forward_button"); pagedata.back_button = glade_xml_get_widget (gui, "back_button"); pagedata.cancel_button = glade_xml_get_widget (gui, "cancel_button"); pagedata.help_button = glade_xml_get_widget (gui, "help_button"); pagedata.finish_button = glade_xml_get_widget (gui, "finish_button"); pagedata.parseoptions = NULL; stf_dialog_main_page_init (gui, &pagedata); stf_dialog_csv_page_init (gui, &pagedata); stf_dialog_fixed_page_init (gui, &pagedata); stf_dialog_format_page_init (gui, &pagedata); stf_dialog_attach_page_signals (gui, &pagedata); stf_dialog_editables_enter (&pagedata); stf_dialog_set_initial_keyboard_focus (&pagedata); prepare_page (&pagedata); frob_buttons (&pagedata); resp = go_gtk_dialog_run (pagedata.dialog, wbcg_toplevel (wbcg)); if (resp == GTK_RESPONSE_OK) { dialogresult = g_new (DialogStfResult_t, 1); dialogresult->text = pagedata.utf8_data; *((char *)pagedata.cur_end) = 0; if (dialogresult->text != pagedata.cur) strcpy (dialogresult->text, pagedata.cur); pagedata.cur = pagedata.utf8_data = NULL; dialogresult->encoding = pagedata.encoding; pagedata.encoding = NULL; dialogresult->colcount = pagedata.format.col_import_count; dialogresult->rowcount = pagedata.rowcount; dialogresult->parseoptions = pagedata.parseoptions; pagedata.parseoptions = NULL; g_free (dialogresult->parseoptions->locale); dialogresult->parseoptions->locale = pagedata.locale; pagedata.locale = NULL; dialogresult->parseoptions->formats = pagedata.format.formats; pagedata.format.formats = NULL; dialogresult->parseoptions->col_import_array = pagedata.format.col_import_array; dialogresult->parseoptions->col_import_array_len = pagedata.format.col_import_array_len; pagedata.format.col_import_array = NULL; pagedata.format.col_import_count = 0; pagedata.format.col_import_array_len = 0; } else { dialogresult = NULL; } stf_dialog_main_page_cleanup (&pagedata); stf_dialog_csv_page_cleanup (&pagedata); stf_dialog_fixed_page_cleanup (&pagedata); stf_dialog_format_page_cleanup (&pagedata); g_object_unref (gui); g_free (pagedata.encoding); g_free (pagedata.locale); g_free (pagedata.utf8_data); if (pagedata.parseoptions) stf_parse_options_free (pagedata.parseoptions); return dialogresult; }
/* 1. Redistribute the records in splited_page to itself and its split. 2. If splited_page has overflow page(s), also do redistribution for it(them). 3. If split_page is full, add overflow page cascading it and continue redistribution by using the overflow page. */ void redistribute (struct page *splited_page, struct page *split_page, FILE *out_stream) { struct page *p_ovp = splited_page, *s_ovp = split_page; bool finished, overflow; unsigned int target_pid; int ovp_pid; int tmp_pos, ovp_fnum; char s_key[20]; char tmp[DEPOT_SIZE]; splited_page->pin_cnt++; split_page->pin_cnt++; do { prepare_page (p_ovp, tmp); tmp_pos = 0; finished = false; overflow = false; while (!finished) // temp hasn't been used up { get_search_key (s_key, tmp, tmp_pos); target_pid = *index (hash_func (s_key), out_stream); if (target_pid == splited_page->pid) { s_ovp->pin_cnt++; insert_record (p_ovp, tmp, &tmp_pos, &finished, &overflow, out_stream, true); // sth wrong here. p_ovp contains incomplete record!!! s_ovp->pin_cnt--; } else if (target_pid == split_page->pid) { p_ovp->pin_cnt++; insert_record (s_ovp, tmp, &tmp_pos, &finished, &overflow, out_stream); p_ovp->pin_cnt--; } else { printf ("Page number panic!\n"); exit (2); } if (overflow) { p_ovp->pin_cnt++; s_ovp = add_overflow_page (s_ovp->pid, out_stream); p_ovp->pin_cnt--; overflow = false; } } // while (!finished) if ((ovp_pid = p_ovp->opid) != -1) { s_ovp->pin_cnt++; ovp_fnum = find_target_frame (ovp_pid, out_stream); p_ovp = &buffer[ovp_fnum]; s_ovp->pin_cnt--; } } while (ovp_pid != -1); splited_page->pin_cnt--; split_page->pin_cnt--; }