Example #1
0
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);
}
Example #2
0
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);
}
Example #3
0
// 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;
}
Example #4
0
/**
 * 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;
}
Example #5
0
/* 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--;
}