/*! \brief Get the action position. * \par Function Description * Retrieves the current action position and stores it in \a x and \a * y, optionally snapping it to the grid if \a snap is true. This * should be interpreted as the position that the user was pointing * with the mouse pointer when the current action was invoked. If * there is no valid world position for the current action, returns * FALSE without modifying the output variables. * * This should be used by actions implemented in C to figure out where * on the schematic the user wants them to apply the action. * * See also the (gschem action) Scheme module. * * \param w_current Current gschem toplevel structure. * \param x Location to store x coordinate. * \param y Location to store y coordinate. * * \return TRUE if current action position is set, FALSE otherwise. */ gboolean g_action_get_position (gboolean snap, int *x, int *y) { SCM s_action_position_proc; SCM s_point; GschemToplevel *w_current = g_current_window (); g_assert (w_current); /* Get the action-position procedure */ s_action_position_proc = scm_variable_ref (scm_c_module_lookup (scm_c_resolve_module ("gschem action"), "action-position")); /* Retrieve the action position */ s_point = scm_call_0 (s_action_position_proc); if (scm_is_false (s_point)) return FALSE; if (x) { *x = scm_to_int (scm_car (s_point)); if (snap) { *x = snap_grid (w_current, *x); } } if (y) { *y = scm_to_int (scm_cdr (s_point)); if (snap) { *y = snap_grid (w_current, *y); } } return TRUE; }
SCM gnc_scm_lookup(const char *module, const char *symbol) { SCM scm_module = scm_c_resolve_module(module); SCM value = scm_c_module_lookup(scm_module, symbol); return value; }
/*! \brief Evaluate a gschem action by name. * \par Function Description * Evaluates the action named \a action_name, which should be a UTF-8 * string naming a symbol in the user module. If evaluating the * action fails, prints a message to the log and returns FALSE; * otherwise, returns TRUE. * * \param w_current Current gschem toplevel structure. * \param action_name Name of action to evaluate. * * \return TRUE on success, FALSE on failure. */ gboolean g_action_eval_by_name (GschemToplevel *w_current, const gchar *action_name) { SCM s_eval_action_proc; SCM s_expr; SCM s_result; gboolean result; g_assert (w_current); g_assert (action_name); scm_dynwind_begin (0); g_dynwind_window (w_current); /* Get the eval-action procedure */ s_eval_action_proc = scm_variable_ref (scm_c_module_lookup (scm_c_resolve_module ("gschem action"), "eval-action!")); /* Build expression to evaluate */ /* FIXME use SCM_SYMBOL for quote */ s_expr = scm_list_2 (s_eval_action_proc, scm_list_2 (scm_from_utf8_symbol ("quote"), scm_from_utf8_symbol (action_name))); /* Evaluate and get return value */ s_result = g_scm_eval_protected (s_expr, SCM_UNDEFINED); result = scm_is_true (s_result); scm_dynwind_end (); return result; }
static void inner_main_add_price_quotes(void *closure, int argc, char **argv) { SCM mod, add_quotes, scm_book, scm_result = SCM_BOOL_F; QofSession *session = NULL; scm_c_eval_string("(debug-set! stack 200000)"); mod = scm_c_resolve_module("gnucash price-quotes"); scm_set_current_module(mod); load_gnucash_modules(); qof_event_suspend(); scm_c_eval_string("(gnc:price-quotes-install-sources)"); if (!gnc_quote_source_fq_installed()) { g_print("%s", _("No quotes retrieved. Finance::Quote isn't " "installed properly.\n")); goto fail; } add_quotes = scm_c_eval_string("gnc:book-add-quotes"); session = gnc_get_current_session(); if (!session) goto fail; qof_session_begin(session, add_quotes_file, FALSE, FALSE); if (qof_session_get_error(session) != ERR_BACKEND_NO_ERR) goto fail; qof_session_load(session, NULL); if (qof_session_get_error(session) != ERR_BACKEND_NO_ERR) goto fail; scm_book = gnc_book_to_scm(qof_session_get_book(session)); scm_result = scm_call_2(add_quotes, SCM_BOOL_F, scm_book); qof_session_save(session, NULL); if (qof_session_get_error(session) != ERR_BACKEND_NO_ERR) goto fail; qof_session_destroy(session); if (!scm_is_true(scm_result)) { g_warning("Failed to add quotes to %s.", add_quotes_file); goto fail; } qof_event_resume(); gnc_shutdown(0); return; fail: if (session && qof_session_get_error(session) != ERR_BACKEND_NO_ERR) g_warning("Session Error: %s", qof_session_get_error_message(session)); qof_event_resume(); gnc_shutdown(1); }
SWIGINTERN SCM SWIG_Guile_Init () { static SCM swig_module; if (swig_initialized) return swig_module; swig_initialized = 1; swig_module = scm_c_resolve_module("Swig swigrun"); if (ensure_smob_tag(swig_module, &swig_tag, "swig-pointer", "swig-pointer-tag")) { scm_set_smob_print(swig_tag, print_swig); scm_set_smob_equalp(swig_tag, equalp_swig); } if (ensure_smob_tag(swig_module, &swig_collectable_tag, "collectable-swig-pointer", "collectable-swig-pointer-tag")) { scm_set_smob_print(swig_collectable_tag, print_collectable_swig); scm_set_smob_equalp(swig_collectable_tag, equalp_swig); scm_set_smob_free(swig_collectable_tag, free_swig); } if (ensure_smob_tag(swig_module, &swig_destroyed_tag, "destroyed-swig-pointer", "destroyed-swig-pointer-tag")) { scm_set_smob_print(swig_destroyed_tag, print_destroyed_swig); scm_set_smob_equalp(swig_destroyed_tag, equalp_swig); } if (ensure_smob_tag(swig_module, &swig_member_function_tag, "swig-member-function-pointer", "swig-member-function-pointer-tag")) { scm_set_smob_print(swig_member_function_tag, print_member_function_swig); scm_set_smob_free(swig_member_function_tag, free_swig_member_function); } swig_make_func = scm_permanent_object( scm_variable_ref(scm_c_module_lookup(scm_c_resolve_module("oop goops"), "make"))); swig_keyword = scm_permanent_object(scm_from_locale_keyword((char*) "init-smob")); swig_symbol = scm_permanent_object(scm_from_locale_symbol("swig-smob")); #ifdef SWIG_INIT_RUNTIME_MODULE SWIG_INIT_RUNTIME_MODULE #endif return swig_module; }
/* Start the LazyCat main procedure. */ static void inner_main (void* closure, int argc, char** argv) { SCM main; SCM args; SCM module; scm_c_define_module ("lazycat prctl", init_prctl_module, NULL); module = scm_c_resolve_module ("lazycat daemon lazycatd"); scm_set_current_module (module); scm_c_define_gsubr ("c-set-lazycat-signals", 0, 0, 0, set_lazycat_signals); scm_c_export ("c-set-lazycat-signals", NULL); main = scm_c_module_lookup (module, "main"); args = scm_program_arguments (); scm_call_1 (scm_variable_ref (main), args); }
SCM gnc_scm_lookup(const char *module, const char *symbol) { #if defined(SCM_GUILE_MAJOR_VERSION) && \ (SCM_GUILE_MAJOR_VERSION > 0) && (SCM_GUILE_MINOR_VERSION > 4) SCM scm_module = scm_c_resolve_module(module); SCM value = scm_c_module_lookup(scm_module, symbol); return value; #else gchar *in_guard_str; gchar *thunk_str; SCM in_guard; SCM thunk; SCM out_guard; SCM result; in_guard_str = g_strdup_printf("(lambda () (set-current-module (resolve-module (%s))))", module); thunk_str = g_strdup_printf("(lambda () (eval '%s))", symbol); in_guard = scm_c_eval_string(in_guard_str); thunk = scm_c_eval_string(thunk_str); out_guard = scm_c_eval_string("(let ((cm (current-module)))" " (lambda () (set-current-module cm)))"); result = scm_dynamic_wind(in_guard, thunk, out_guard); g_free(in_guard_str); g_free(thunk_str); return result; #endif }
static SCM _xscm_c_resolve_module_safe_body (void *data) { return scm_c_resolve_module ((const char *) data); }
static void inner_main (void *closure, int argc, char **argv) { SCM main_mod; char* fn; GError *error = NULL; scm_c_eval_string("(debug-set! stack 200000)"); main_mod = scm_c_resolve_module("gnucash main"); scm_set_current_module(main_mod); load_gnucash_modules(); /* Load the config before starting up the gui. This insures that * custom reports have been read into memory before the Reports * menu is created. */ load_system_config(); load_user_config(); /* Setting-up the report menu must come after the module loading but before the gui initialization. */ scm_c_use_module("gnucash report report-gnome"); scm_c_eval_string("(gnc:report-menu-setup)"); /* TODO: After some more guile-extraction, this should happen even before booting guile. */ gnc_main_gui_init(); gnc_hook_add_dangler(HOOK_UI_SHUTDOWN, (GFunc)gnc_file_quit, NULL); scm_c_eval_string("(gnc:main)"); /* Install Price Quote Sources */ gnc_update_splash_screen(_("Checking Finance::Quote..."), GNC_SPLASH_PERCENTAGE_UNKNOWN); scm_c_use_module("gnucash price-quotes"); scm_c_eval_string("(gnc:price-quotes-install-sources)"); gnc_hook_run(HOOK_STARTUP, NULL); if (!nofile && (fn = get_file_to_load())) { gnc_update_splash_screen(_("Loading data..."), GNC_SPLASH_PERCENTAGE_UNKNOWN); gnc_file_open_file(fn); g_free(fn); } else if (gnc_gconf_get_bool("dialogs/new_user", "first_startup", &error) && !error) { gnc_destroy_splash_screen(); gnc_ui_new_user_dialog(); } gnc_destroy_splash_screen(); gnc_main_window_show_all_windows(); gnc_hook_run(HOOK_UI_POST_STARTUP, NULL); gnc_ui_start_event_loop(); gnc_hook_remove_dangler(HOOK_UI_SHUTDOWN, (GFunc)gnc_file_quit); gnc_shutdown(0); return; }