R_API int r_search_pattern(RSearch *s, ut64 from, ut64 to) { ut8 block[BSIZE+MAX_PATLEN], sblk[MAX_PATLEN+1]; int nr,i, moar=0, pcnt, cnt=0, k=0; int patlen = s->pattern_size; fnditem* root; ut64 addr, bact, bytes, intaddr, rb, bproc = 0; if (patlen < 1 || patlen > MAX_PATLEN) { eprintf ("Invalid pattern length (must be > 1 and < %d)\n", MAX_PATLEN); return R_FALSE; } bact = from; bytes = to; bytes += bact; root = init_fi (); pcnt = -1; while (bact < bytes) { addr = bact; bproc = bact + patlen ; // read ( fd, sblk, patlen ); //XXX bytepattern should be used with a read callback //XXX radare_read_at(bact, sblk, patlen); sblk[patlen]=0; intaddr = bact; cnt = 0; while (bproc < bytes) { nr = ((bytes-bproc) < BSIZE)?(bytes-bproc):BSIZE; nr += (patlen - (nr % patlen)); // tamany de bloc llegit multiple superior de tamany busqueda //rb = nr; rb = s->iob.read_at (s->iob.io, addr, block, nr); addr += nr; moar = 0; for (i=0; i<nr; i++) { if (!memcmp (&block[i], sblk, patlen) && !is_fi_present (root, sblk, patlen)){ if (cnt == 0) { add_fi (root, sblk, patlen); pcnt++; eprintf ("\nbytes: %d: ", pcnt); for (k = 0; k<patlen; k++) eprintf ("%02x", sblk[k]); eprintf ("\nfound: %d: 0x%08"PFMT64x" ", pcnt, intaddr); } moar++; cnt++; eprintf ("0x%08"PFMT64x" ", bproc+i); } } if (moar>0) eprintf ("\ncount: %d: %d\n", pcnt, moar+1); bproc += rb; } bact += (moar>0)?patlen:1; } eprintf ("\n"); fini_fi (root); return 0; }
void gnc_ui_fincalc_dialog_create(GtkWindow *parent) { FinCalcDialog *fcd; GtkWidget *button; GtkWidget *combo; GtkWidget *edit; GtkWidget *hbox; GtkBuilder *builder; if (gnc_forall_gui_components (DIALOG_FINCALC_CM_CLASS, show_handler, NULL)) return; fcd = g_new0(FinCalcDialog, 1); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-fincalc.glade", "liststore1"); gnc_builder_add_from_file (builder, "dialog-fincalc.glade", "liststore2"); gnc_builder_add_from_file (builder, "dialog-fincalc.glade", "financial_calculator_dialog"); fcd->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "financial_calculator_dialog")); // Set the style context for this dialog so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(fcd->dialog), "GncFinCalcDialog"); /* parent */ if (parent != NULL) gtk_window_set_transient_for (GTK_WINDOW(fcd->dialog), GTK_WINDOW(parent)); gnc_register_gui_component (DIALOG_FINCALC_CM_CLASS, NULL, close_handler, fcd); g_signal_connect (G_OBJECT (fcd->dialog), "destroy", G_CALLBACK (fincalc_dialog_destroy), fcd); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "payment_periods_hbox")); edit = gnc_amount_edit_new(); fincalc_init_gae (GNC_AMOUNT_EDIT (edit), 0, 0, 1); fcd->amounts[PAYMENT_PERIODS] = edit; gtk_box_pack_end(GTK_BOX(hbox), edit, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(edit), "changed", G_CALLBACK (fincalc_update_calc_button_cb), fcd); button = GTK_WIDGET(gtk_builder_get_object (builder, "payment_periods_clear_button")); g_object_set_data(G_OBJECT(button), "edit", edit); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "interest_rate_hbox")); edit = gnc_amount_edit_new(); fincalc_init_gae (GNC_AMOUNT_EDIT (edit), 2, 5, 100000); fcd->amounts[INTEREST_RATE] = edit; gtk_box_pack_end(GTK_BOX(hbox), edit, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(edit), "changed", G_CALLBACK (fincalc_update_calc_button_cb), fcd); button = GTK_WIDGET(gtk_builder_get_object (builder, "interest_rate_clear_button")); g_object_set_data(G_OBJECT(button), "edit", edit); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "present_value_hbox")); edit = gnc_amount_edit_new(); fincalc_init_commodity_gae (GNC_AMOUNT_EDIT (edit)); fcd->amounts[PRESENT_VALUE] = edit; gtk_box_pack_end(GTK_BOX(hbox), edit, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(edit), "changed", G_CALLBACK (fincalc_update_calc_button_cb), fcd); button = GTK_WIDGET(gtk_builder_get_object (builder, "present_value_clear_button")); g_object_set_data(G_OBJECT(button), "edit", edit); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "periodic_payment_hbox")); edit = gnc_amount_edit_new(); fincalc_init_commodity_gae (GNC_AMOUNT_EDIT (edit)); fcd->amounts[PERIODIC_PAYMENT] = edit; gtk_box_pack_end(GTK_BOX(hbox), edit, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(edit), "changed", G_CALLBACK (fincalc_update_calc_button_cb), fcd); button = GTK_WIDGET(gtk_builder_get_object (builder, "periodic_payment_clear_button")); g_object_set_data(G_OBJECT(button), "edit", edit); hbox = GTK_WIDGET(gtk_builder_get_object (builder, "future_value_hbox")); edit = gnc_amount_edit_new(); fincalc_init_commodity_gae (GNC_AMOUNT_EDIT (edit)); fcd->amounts[FUTURE_VALUE] = edit; gtk_box_pack_end(GTK_BOX(hbox), edit, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(edit), "changed", G_CALLBACK (fincalc_update_calc_button_cb), fcd); button = GTK_WIDGET(gtk_builder_get_object (builder, "future_value_clear_button")); g_object_set_data(G_OBJECT(button), "edit", edit); fcd->calc_button = GTK_WIDGET(gtk_builder_get_object (builder, "calc_button")); combo = GTK_WIDGET(gtk_builder_get_object (builder, "compounding_combo")); fcd->compounding_combo = combo; g_signal_connect(fcd->compounding_combo, "changed", G_CALLBACK (fincalc_update_calc_button_cb), fcd); combo = GTK_WIDGET(gtk_builder_get_object (builder, "payment_combo")); fcd->payment_combo = combo; g_signal_connect(fcd->compounding_combo, "changed", G_CALLBACK (fincalc_update_calc_button_cb), fcd); button = GTK_WIDGET(gtk_builder_get_object (builder, "period_payment_radio")); fcd->end_of_period_radio = button; button = GTK_WIDGET(gtk_builder_get_object (builder, "discrete_compounding_radio")); fcd->discrete_compounding_radio = button; fcd->payment_total_label = GTK_WIDGET(gtk_builder_get_object (builder, "payment_total_label")); button = GTK_WIDGET(gtk_builder_get_object (builder, "schedule_button")); gtk_widget_hide (button); init_fi(fcd); fi_to_gui(fcd); gtk_widget_grab_focus(fcd->amounts[PAYMENT_PERIODS]); /* Connect all signals specified in glade. */ gtk_builder_connect_signals(builder, fcd); g_object_unref(G_OBJECT(builder)); gnc_restore_window_size(GNC_PREFS_GROUP, GTK_WINDOW(fcd->dialog)); gtk_widget_show(fcd->dialog); }