bool ProcessingChainBase::wait_rt_finished() { if (stopped) { return true; } timespec ts; clock_gettime(CLOCK_REALTIME, &ts); const long ns_in_sec = 1000000000; ts.tv_nsec += ns_in_sec / 10; if (ts.tv_nsec >= ns_in_sec) { ts.tv_nsec -= ns_in_sec; ts.tv_sec += 1; } while (sem_timedwait(&sync_sem, &ts) == -1) { if (errno == EINTR) { continue; } if (errno == ETIMEDOUT) { gx_print_warning("sem_timedwait", "timeout"); return false; } gx_print_error("sem_timedwait", "unknown error"); break; } return true; }
// ---- OS signal handler ----- void gx_signal_handler(int sig) { // print out a warning string msg = string("signal ") + gx_i2a(sig) + " received, exiting ..."; gx_print_warning("signal_handler", msg); gx_clean_exit(NULL, NULL); }
void PosixSignals::gx_ladi_handler() { gx_print_warning( _("signal_handler"), _("signal USR1 received, save settings")); if (gx_preset::GxSettings::instance) { bool cur_state = gx_preset::GxSettings::instance->get_auto_save_state(); gx_preset::GxSettings::instance->disable_autosave(false); gx_preset::GxSettings::instance->auto_save_state(); gx_preset::GxSettings::instance->disable_autosave(cur_state); } }
// ---- popup warning int gx_message_popup(const char* msg) { // check msg validity if (!msg) { gx_print_warning("Message Popup", string(_("warning message does not exist"))); return -1; } // build popup window GtkWidget *about; GtkWidget *label; GtkWidget *ok_button; about = gtk_dialog_new(); ok_button = gtk_button_new_from_stock(GTK_STOCK_OK); label = gtk_label_new(msg); GtkStyle *style = gtk_widget_get_style(label); pango_font_description_set_size(style->font_desc, 10*PANGO_SCALE); pango_font_description_set_weight(style->font_desc, PANGO_WEIGHT_BOLD); gtk_widget_modify_font(label, style->font_desc); gtk_label_set_selectable(GTK_LABEL(label), TRUE); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(about)->vbox), label); GTK_BOX(GTK_DIALOG(about)->action_area)->spacing = 3; gtk_container_add(GTK_CONTAINER(GTK_DIALOG(about)->action_area), ok_button); g_signal_connect_swapped(ok_button, "clicked", G_CALLBACK(gtk_widget_destroy), about); g_signal_connect(GTK_DIALOG(about)->vbox, "expose-event", G_CALLBACK(gx_cairo::start_box_expose), NULL); gtk_widget_set_redraw_on_allocate(GTK_WIDGET(GTK_DIALOG(about)->vbox),true); gtk_widget_show(ok_button); gtk_widget_show(label); return gtk_dialog_run (GTK_DIALOG(about)); }
// ---- command line options void gx_process_cmdline_options(int& argc, char**& argv, string* optvar) { // store shell variable content for (int i = 0; i < NUM_SHELL_VAR; i++) gx_assign_shell_var(shell_var_name[i], optvar[i]); // ---- parse command line arguments try { gboolean version = FALSE; GOptionEntry opt_entries[] = { { "version", 'v', 0, G_OPTION_ARG_NONE, &version, "Print version string and exit", NULL }, { NULL } }; GError* error = NULL; GOptionContext* opt_context = NULL; opt_context = g_option_context_new(NULL); g_option_context_set_summary(opt_context, "All parameters are optional. Examples:\n" "\tjc_gui\n" "\tjc_gui -i system:capture_3 -i system:capture_2\n" "\tjc_gui -o system:playback_1 -o system:playback_2"); g_option_context_add_main_entries(opt_context, opt_entries, NULL); // JACK options: input and output ports gchar** jack_input = NULL; gchar** jack_outputs = NULL; GOptionGroup* optgroup_jack = g_option_group_new("jack", "\033[1;32mJACK configuration options\033[0m", "\033[1;32mJACK configuration options\033[0m", NULL, NULL); GOptionEntry opt_entries_jack[] = { { "jack-input", 'i', 0, G_OPTION_ARG_STRING_ARRAY, &jack_input, "Jc_Gui JACK input", "PORT" }, {"jack-output", 'o', 0, G_OPTION_ARG_STRING_ARRAY, &jack_outputs, "Jc_Gui JACK outputs", "PORT" }, { NULL } }; g_option_group_add_entries(optgroup_jack, opt_entries_jack); // collecting all option groups g_option_context_add_group(opt_context, optgroup_jack); // parsing command options if (!g_option_context_parse(opt_context, &argc, &argv, &error)) { throw string(error->message); } g_option_context_free(opt_context); // ----------- processing user options ----------- // *** display version if requested if (version) { cout << "Jc_Gui version \033[1;32m" << GX_VERSION << endl << "\033[0m Copyright " << (char)0x40 << " 2009 " << "Hermman Meyer - James Warden" << endl; exit(0); } // *** process jack outputs if (jack_input != NULL) { int idx = JACK_INP1; unsigned int i = 0; while (jack_input[i] != NULL) { if (i >= 2) { gx_print_warning("main", "Warning --> provided more than 2 input ports, ignoring extra ports"); break; } optvar[idx] = string(jack_input[i]); i++; idx++; } g_strfreev(jack_input); } else { if (!gx_shellvar_exists(optvar[JACK_INP1])) optvar[JACK_INP1] = ""; if (!gx_shellvar_exists(optvar[JACK_INP2])) optvar[JACK_INP2] = ""; } // *** process jack outputs if (jack_outputs != NULL) { int idx = JACK_OUT1; unsigned int i = 0; while (jack_outputs[i] != NULL) { if (i >= 2) { gx_print_warning("main", "Warning --> provided more than 2 output ports, ignoring extra ports"); break; } optvar[idx] = string(jack_outputs[i]); i++; idx++; } g_strfreev(jack_outputs); } else { if (!gx_shellvar_exists(optvar[JACK_OUT1])) optvar[JACK_OUT1] = ""; if (!gx_shellvar_exists(optvar[JACK_OUT2])) optvar[JACK_OUT2] = ""; } } // ---- catch exceptions that occured during user option parsing catch (string& e) { string msg = string("Error in user options! try -? ") + e; gx_print_error("main", msg); exit(1); } }
//----abort Jc_Gui void gx_abort(void* arg) { gx_print_warning("gx_abort", "Aborting Jc_Gui, ciao!"); exit(1); }