51 streamsize prec = cout.precision();
52 ios_base::fmtflags flags = cout.flags();
53 cout << prefix <<
"mean: " << fixed << setprecision(4) <<
ns2ms(accum.
mean());
55 cout <<
" (" << setprecision(2) << 100.0*accum.
mean()/
static_cast<float>(total) <<
"%)";
57 cout <<
", min: " << setprecision(4) <<
ns2ms(accum.
minimum())
60 cout <<
" (" << setprecision(2) << 100.0*accum.
maximum()/
static_cast<float>(total) <<
"%)";
63 cout <<
", stddev: " << setprecision(4) <<
ns2ms(accum.
stddev())
64 <<
", n: " << accum.
count();
71 static void print_status(
const char *title,
unsigned int status) {
77 if (status & FE_INVALID) {
84 if (status & FE_DENORM) {
91 if (status & FE_DIVBYZERO) {
97 if (status & FE_OVERFLOW) {
103 if (status & FE_UNDERFLOW) {
110 cout << title << s << endl;
128 : m(), pmeasure(m), t1s(), t1e(), t2s(), t1old(), FPUStatus(), MXStatus() {
147 char *p = getenv(
"GUITARIX_MEASURE");
151 bool verbose =
false;
152 if (strcmp(p,
"1") == 0) {
155 Glib::signal_timeout().connect(
174 d = opendir(style_dir.c_str());
181 while ((de = readdir(d)) != 0) {
182 char *p = de->d_name;
183 if (strncmp(p,
"gx_head_", 8) != 0) {
186 if (strncmp(p,
"gx_head_gx", 10) == 0) {
190 int n = strlen(p) - 3;
191 if (strcmp(p+n,
".rc") != 0) {
194 skin_list.push_back(
string(p, n));
197 sort(skin_list.begin(), skin_list.end());
201 return index(name) < skin_list.size();
206 for (; i < skin_list.size(); ++i) {
207 if (skin_list[i] == name) {
215 if (idx < skin_list.size()) {
216 return skin_list[idx];
231 const char *p = getenv(env_name);
236 const char *q = strchr(p,
':');
240 add(std::string(p, n));
253 Glib::RefPtr<Gio::File> f = Gio::File::create_for_path(d);
254 for (pathlist::const_iterator i = dirs.begin();
255 i != dirs.end(); ++i) {
265 for (pathlist::const_iterator i = dirs.begin();
266 i != dirs.end(); ++i) {
267 string p = (*i)->get_path();
268 string fn = Glib::build_filename(p, filename);
269 if (access(fn.c_str(), R_OK) == 0) {
284 dirs[s] = (d[d.size()-1] ==
'/' ? d.substr(0,d.size()-1) : d);
288 if (dir.size() < 2 || dir[0] !=
'%') {
291 symbol_path_map::const_iterator i = dirs.find(dir[1]);
292 if (i != dirs.end()) {
293 return Glib::build_filename(i->second, dir.substr(2));
295 if (dir.compare(0, 2,
"%%")) {
296 return dir.substr(1);
302 for (symbol_path_map::const_iterator i = dirs.begin(); i != dirs.end(); ++i) {
303 size_t n = i->second.size();
304 if (dir.compare(0, n, i->second) == 0) {
305 std::string tail = dir.substr(n);
306 if (Glib::build_filename(i->second, tail) == dir) {
307 std::string sym =
"%";
308 sym.push_back(i->first);
313 if (dir.size() < 2 || dir[0] !=
'%') {
325 Glib::RefPtr<Gio::File> file = Gio::File::create_for_path(path);
326 if (file->query_exists()) {
327 Glib::RefPtr<Gio::FileEnumerator> child_enumeration =
328 file->enumerate_children(G_FILE_ATTRIBUTE_STANDARD_NAME
329 "," G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME
330 "," G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE);
331 Glib::RefPtr<Gio::FileInfo> file_info;
332 while ((file_info = child_enumeration->next_file())) {
334 if ((file_info->get_attribute_string(G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE) ==
"audio/x-wav") ||
335 (file_info->get_attribute_string(G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE) ==
"audio/x-aiff")){
338 file_info->get_attribute_byte_string(G_FILE_ATTRIBUTE_STANDARD_NAME),
339 file_info->get_attribute_string(G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME)));
345 boost::format(_(
"Error reading file path %1%")) % path);
349 static void list_subdirs(
const Glib::RefPtr<Gio::File>& file, std::vector<FileName>& dirs,
const Glib::ustring& prefix) {
350 Glib::RefPtr<Gio::FileEnumerator> child_enumeration =
351 file->enumerate_children(G_FILE_ATTRIBUTE_STANDARD_NAME
352 "," G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME);
353 Glib::RefPtr<Gio::FileInfo> file_info;
354 while ((file_info = child_enumeration->next_file())) {
355 if (file_info->get_file_type() == Gio::FILE_TYPE_DIRECTORY) {
356 Glib::RefPtr<Gio::File> child = file->get_child(
357 file_info->get_attribute_byte_string(G_FILE_ATTRIBUTE_STANDARD_NAME));
361 prefix+file_info->get_attribute_string(G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME)));
369 std::string fn = (*i)->get_path();
385 sys_IR_dir(GX_SOUND_DIR),
388 builder_dir(GX_BUILDER_DIR) {
389 user_dir = Glib::build_filename(Glib::get_user_config_dir(),
"guitarix");
390 user_IR_dir = Glib::build_filename(user_dir,
"IR");
413 if (dirpath.empty()) {
416 if (dirpath[dirpath.size()-1] !=
'/') {
426 static inline const char *shellvar(
const char *name) {
427 const char *p = getenv(name);
431 #define TCLR(s) "\033[1;32m" s "\033[0m" // light green 432 #define TCLR2(s) TCLR(s), s 437 optgroup_style(
"style",
TCLR2(
"GTK style configuration options")),
438 optgroup_jack(
"jack",
TCLR2(
"JACK configuration options")),
439 optgroup_overload(
"overload",
TCLR2(
"Switch to bypass mode on overload condition")),
440 optgroup_file(
"file",
TCLR2(
"File options")),
441 optgroup_debug(
"debug",
TCLR2(
"Debug options")),
442 version(false), clear(false),
443 jack_input(shellvar(
"GUITARIX2JACK_INPUTS")),
444 jack_midi(shellvar(
"GUITARIX2JACK_MIDI")),
448 jack_noconnect(false),
451 load_file(shellvar(
"GUITARIX_LOAD_FILE")),
452 style_dir(GX_STYLE_DIR),
453 factory_dir(GX_FACTORY_DIR),
454 pixmap_dir(GX_PIXMAPS_DIR),
462 rcset(shellvar(
"GUITARIX_RC_STYLE")),
473 sporadic_overload(0),
474 idle_thread_timeout(0),
475 convolver_watchdog(true),
476 xrun_watchdog(false),
481 dump_parameter(false),
488 preset_window_height(220),
490 skin_name(
"Guitarix"),
491 no_warn_latency(false),
492 system_order_rack_h(false),
493 system_show_value(false),
494 system_show_tooltips(true),
495 system_animations(true),
496 system_show_presets(false),
497 system_show_toolbar(false),
498 system_show_rack(false),
499 reload_lv2_presets(true) {
500 const char* home = getenv(
"HOME");
504 old_user_dir = string(home) +
"/.gx_head/";
505 plugin_dir = Glib::build_filename(
get_user_dir(),
"plugins");
506 preset_dir = Glib::build_filename(
get_user_dir(),
"banks");
507 pluginpreset_dir = Glib::build_filename(
get_user_dir(),
"pluginpresets");
508 lv2_preset_dir = Glib::build_filename(
get_user_dir(),
"pluginpresets/lv2");
510 temp_dir = Glib::build_filename(
get_user_dir(),
"temp");
511 const char *tmp = getenv(
"GUITARIX2JACK_OUTPUTS1");
513 jack_outputs.push_back(tmp);
515 tmp = getenv(
"GUITARIX2JACK_OUTPUTS2");
517 jack_outputs.push_back(tmp);
524 "All parameters are optional. Examples:\n" 526 "\tguitarix -r gx4-black -i system:capture_3\n" 527 "\tguitarix -c -o system:playback_1 -o system:playback_2");
530 Glib::OptionEntry opt_version;
531 opt_version.set_short_name(
'v');
532 opt_version.set_long_name(
"version");
533 opt_version.set_description(
"Print version string and exit");
534 Glib::OptionEntry opt_nogui;
535 opt_nogui.set_short_name(
'N');
536 opt_nogui.set_long_name(
"nogui");
537 opt_nogui.set_description(
"start without GUI");
538 Glib::OptionEntry opt_rpcport;
539 opt_rpcport.set_short_name(
'p');
540 opt_rpcport.set_long_name(
"rpcport");
541 opt_rpcport.set_description(
"start a JSON-RPC server listening on port PORT");
542 opt_rpcport.set_arg_description(
"PORT");
543 Glib::OptionEntry opt_rpchost;
544 opt_rpchost.set_short_name(
'H');
545 opt_rpchost.set_long_name(
"rpchost");
546 opt_rpchost.set_description(
"set hostname to connect to");
547 opt_rpchost.set_arg_description(
"HOSTNAME");
548 Glib::OptionEntry opt_onlygui;
549 opt_onlygui.set_short_name(
'G');
550 opt_onlygui.set_long_name(
"onlygui");
551 opt_onlygui.set_description(
"start only GUI");
552 Glib::OptionEntry opt_liveplaygui;
553 opt_liveplaygui.set_short_name(
'L');
554 opt_liveplaygui.set_long_name(
"liveplaygui");
555 opt_liveplaygui.set_description(
"start with Live Play GUI");
556 Glib::OptionEntry opt_hideonquit;
557 opt_hideonquit.set_short_name(
'E');
558 opt_hideonquit.set_long_name(
"hideonquit");
559 opt_hideonquit.set_description(
"only hide GUI instead quit engine");
560 Glib::OptionEntry opt_mute;
561 opt_mute.set_short_name(
'M');
562 opt_mute.set_long_name(
"mute");
563 opt_mute.set_description(
"start with engine muted");
564 Glib::OptionEntry opt_bank;
565 opt_bank.set_short_name(
'b');
566 opt_bank.set_long_name(
"bank");
567 opt_bank.set_description(
"set bank and preset to load at startup");
568 opt_bank.set_arg_description(
"BANK:PRESET (A:0-Z:9)");
569 Glib::OptionEntry opt_tuner_tet;
570 opt_tuner_tet.set_short_name(
't');
571 opt_tuner_tet.set_long_name(
"tuner_tet");
572 opt_tuner_tet.set_description(
"set tuner temperament at startup");
573 opt_tuner_tet.set_arg_description(
"tuner temperament (12, 19, 24, 31, 53)");
574 Glib::OptionEntry opt_tuner_ref;
575 opt_tuner_ref.set_short_name(
'F');
576 opt_tuner_ref.set_long_name(
"reference_pitch");
577 opt_tuner_ref.set_description(
"set tuner reference pitch at startup");
578 opt_tuner_ref.set_arg_description(
"tuner reference pitch (225 - 453)");
579 main_group.add_entry(opt_version, version);
580 main_group.add_entry(opt_nogui, nogui);
581 main_group.add_entry(opt_rpcport, rpcport);
582 main_group.add_entry(opt_rpchost, rpcaddress);
583 main_group.add_entry(opt_onlygui, onlygui);
584 main_group.add_entry(opt_liveplaygui, liveplaygui);
585 main_group.add_entry(opt_hideonquit, hideonquit);
586 main_group.add_entry(opt_mute, mute);
587 main_group.add_entry(opt_bank, setbank);
588 main_group.add_entry(opt_tuner_tet, tuner_tet);
589 main_group.add_entry(opt_tuner_ref, tuner_ref);
590 set_main_group(main_group);
593 Glib::OptionEntry opt_clear;
594 opt_clear.set_short_name(
'c');
595 opt_clear.set_long_name(
"clear");
596 opt_clear.set_description(
"Use 'default' GTK style");
597 Glib::OptionEntry opt_rcset;
598 opt_rcset.set_short_name(
'r');
599 opt_rcset.set_long_name(
"rcset");
600 opt_rcset.set_description(get_opskin());
601 opt_rcset.set_arg_description(
"STYLE");
602 optgroup_style.add_entry(opt_clear, clear);
603 optgroup_style.add_entry(opt_rcset, rcset);
606 Glib::OptionEntry opt_jack_input;
607 opt_jack_input.set_short_name(
'i');
608 opt_jack_input.set_long_name(
"jack-input");
609 opt_jack_input.set_description(
"Guitarix JACK input");
610 opt_jack_input.set_arg_description(
"PORT");
611 Glib::OptionEntry opt_jack_output;
612 opt_jack_output.set_short_name(
'o');
613 opt_jack_output.set_long_name(
"jack-output");
614 opt_jack_output.set_description(
"Guitarix JACK outputs");
615 opt_jack_output.set_arg_description(
"PORT");
616 Glib::OptionEntry opt_jack_midi;
617 opt_jack_midi.set_short_name(
'm');
618 opt_jack_midi.set_long_name(
"jack-midi");
619 opt_jack_midi.set_description(
"Guitarix JACK midi control");
620 opt_jack_midi.set_arg_description(
"PORT");
621 Glib::OptionEntry opt_jack_noconnect;
622 opt_jack_noconnect.set_short_name(
'J');
623 opt_jack_noconnect.set_long_name(
"jack-no-conect");
624 opt_jack_noconnect.set_description(
"dissable self-connect JACK ports");
625 Glib::OptionEntry opt_jack_instance;
626 opt_jack_instance.set_short_name(
'n');
627 opt_jack_instance.set_long_name(
"name");
628 opt_jack_instance.set_description(
"instance name (default gx_head)");
629 opt_jack_instance.set_arg_description(
"NAME");
630 Glib::OptionEntry opt_jack_single;
631 opt_jack_single.set_short_name(
'D');
632 opt_jack_single.set_long_name(
"disable-multi-client");
633 opt_jack_single.set_description(
"run guitarix as single client");
634 Glib::OptionEntry opt_jack_uuid;
635 opt_jack_uuid.set_short_name(
'U');
636 opt_jack_uuid.set_long_name(
"jack-uuid");
637 opt_jack_uuid.set_description(
"JackSession ID");
638 opt_jack_uuid.set_arg_description(
"UUID");
639 Glib::OptionEntry opt_jack_uuid2;
640 opt_jack_uuid2.set_short_name(
'A');
641 opt_jack_uuid2.set_long_name(
"jack-uuid2");
642 opt_jack_uuid2.set_description(
"JackSession ID");
643 opt_jack_uuid2.set_arg_description(
"UUID2");
644 Glib::OptionEntry opt_jack_servername;
645 opt_jack_servername.set_short_name(
's');
646 opt_jack_servername.set_long_name(
"server-name");
647 opt_jack_servername.set_description(
"JACK server name to connect to");
648 opt_jack_servername.set_arg_description(
"NAME");
649 optgroup_jack.add_entry(opt_jack_input, jack_input);
650 optgroup_jack.add_entry(opt_jack_output, jack_outputs);
651 optgroup_jack.add_entry(opt_jack_midi, jack_midi);
652 optgroup_jack.add_entry(opt_jack_noconnect, jack_noconnect);
653 optgroup_jack.add_entry(opt_jack_instance, jack_instance);
654 optgroup_jack.add_entry(opt_jack_single, jack_single);
655 optgroup_jack.add_entry(opt_jack_uuid, jack_uuid);
656 optgroup_jack.add_entry(opt_jack_uuid2, jack_uuid2);
657 optgroup_jack.add_entry(opt_jack_servername, jack_servername);
660 Glib::OptionEntry opt_watchdog_idle;
661 opt_watchdog_idle.set_short_name(
'I');
662 opt_watchdog_idle.set_long_name(
"idle-timeout");
663 opt_watchdog_idle.set_description(
664 "starved idle thread probe (default: disabled)");
665 opt_watchdog_idle.set_arg_description(
"SECONDS");
666 Glib::OptionEntry opt_watchdog_convolver;
667 opt_watchdog_convolver.set_short_name(
'C');
668 opt_watchdog_convolver.set_long_name(
"no-convolver-overload");
669 opt_watchdog_convolver.set_description(
670 "disable overload on convolver missed deadline");
671 opt_watchdog_convolver.set_flags(Glib::OptionEntry::FLAG_REVERSE);
672 Glib::OptionEntry opt_watchdog_xrun;
673 opt_watchdog_xrun.set_short_name(
'X');
674 opt_watchdog_xrun.set_long_name(
"xrun-overload");
675 opt_watchdog_xrun.set_description(
676 "JACK xrun (default: false)");
677 Glib::OptionEntry opt_sporadic_overload;
678 opt_sporadic_overload.set_short_name(
'S');
679 opt_sporadic_overload.set_long_name(
"sporadic");
680 opt_sporadic_overload.set_description(
681 "allow single overload events per interval (default: disabled)");
682 opt_sporadic_overload.set_arg_description(
"SECONDS");
683 optgroup_overload.add_entry(opt_watchdog_idle, idle_thread_timeout);
684 optgroup_overload.add_entry(opt_watchdog_convolver, convolver_watchdog);
685 optgroup_overload.add_entry(opt_watchdog_xrun, xrun_watchdog);
686 optgroup_overload.add_entry(opt_sporadic_overload, sporadic_overload);
689 Glib::OptionEntry opt_load_file;
690 opt_load_file.set_short_name(
'f');
691 opt_load_file.set_long_name(
"load-file");
692 opt_load_file.set_description(_(
"load state file on startup"));
693 opt_load_file.set_arg_description(
"FILE");
694 optgroup_file.add_entry_filename(opt_load_file, load_file);
695 Glib::OptionEntry opt_plugin_dir;
696 opt_plugin_dir.set_short_name(
'P');
697 opt_plugin_dir.set_long_name(
"plugin-dir");
698 opt_plugin_dir.set_description(_(
"directory with guitarix plugins (.so files)"));
699 opt_plugin_dir.set_arg_description(
"DIR");
700 optgroup_file.add_entry_filename(opt_plugin_dir, plugin_dir);
701 Glib::OptionEntry opt_save_on_exit;
702 opt_save_on_exit.set_short_name(
'K');
703 opt_save_on_exit.set_long_name(
"disable-save-on-exit");
704 opt_save_on_exit.set_description(_(
"disable auto save to state file when quit"));
705 optgroup_file.add_entry(opt_save_on_exit, a_save);
706 Glib::OptionEntry opt_auto_save;
707 opt_auto_save.set_short_name(
'a');
708 opt_auto_save.set_long_name(
"auto-save");
709 opt_auto_save.set_description(_(
"enable auto save (only in server mode)"));
710 optgroup_file.add_entry(opt_auto_save, auto_save);
713 Glib::OptionEntry opt_builder_dir;
714 opt_builder_dir.set_short_name(
'B');
715 opt_builder_dir.set_long_name(
"builder-dir");
716 opt_builder_dir.set_description(_(
"directory from which .glade files are loaded"));
717 opt_builder_dir.set_arg_description(
"DIR");
718 optgroup_debug.add_entry_filename(opt_builder_dir,
builder_dir);
719 Glib::OptionEntry opt_style_dir;
720 opt_style_dir.set_short_name(
'S');
721 opt_style_dir.set_long_name(
"style-dir");
722 opt_style_dir.set_description(_(
"directory with skin style definitions (.rc files)"));
723 opt_style_dir.set_arg_description(
"DIR");
724 optgroup_debug.add_entry_filename(opt_style_dir, style_dir);
725 Glib::OptionEntry opt_log_terminal;
726 opt_log_terminal.set_short_name(
't');
727 opt_log_terminal.set_long_name(
"log-terminal");
728 opt_log_terminal.set_description(_(
"print log on terminal"));
729 optgroup_debug.add_entry(opt_log_terminal, lterminal);
731 Glib::OptionEntry opt_dump_parameter;
732 opt_dump_parameter.set_short_name(
'd');
733 opt_dump_parameter.set_long_name(
"dump-parameter");
734 opt_dump_parameter.set_description(_(
"dump parameter table in json format"));
739 add_group(optgroup_style);
740 add_group(optgroup_jack);
741 add_group(optgroup_overload);
742 add_group(optgroup_file);
743 add_group(optgroup_debug);
750 void CmdlineOptions::read_ui_vars() {
751 ifstream i(Glib::build_filename(
get_user_dir(),
"ui_rc").c_str());
769 }
else if (jp.
current_value() ==
"system.mainwin_rack_height") {
772 }
else if (jp.
current_value() ==
"system.preset_window_height") {
815 void CmdlineOptions::write_ui_vars() {
816 ofstream o(Glib::build_filename(
get_user_dir(),
"ui_rc").c_str());
847 if (n >= jack_outputs.size()) {
850 return jack_outputs.at(n);
853 string CmdlineOptions::get_opskin() {
855 string opskin(
"Style to use");
863 vector<Glib::ustring>::iterator it;
866 opskin +=
", '" + *it +
"'";
871 static void log_terminal(
const string& msg,
GxLogger::MsgType tp,
bool plugged) {
877 default: t =
"?";
break;
880 cerr << t <<
" " << msg << endl;
885 path_to_program = Gio::File::create_for_path(argv[0])->get_path();
887 std::cout <<
"Guitarix version \033[1;32m" 888 << GX_VERSION << endl
889 <<
"\033[0m Copyright " <<
static_cast<char>(0x40) <<
" 2010 " 890 <<
"Hermman Meyer - James Warden - Andreas Degert" 897 string(
"unknown argument on command line: ")+argv[1]);
900 if (clear && !rcset.empty()) {
901 throw Glib::OptionError(
902 Glib::OptionError::BAD_VALUE,
903 _(
"-c and -r cannot be used together"));
905 if (nogui && liveplaygui) {
906 throw Glib::OptionError(
907 Glib::OptionError::BAD_VALUE,
908 _(
"-N and -L cannot be used together"));
910 if (onlygui && !setbank.empty()) {
911 throw Glib::OptionError(
912 Glib::OptionError::BAD_VALUE,
913 _(
"-G and -b cannot be used together"));
917 sigc::ptr_fun(log_terminal));
939 if (!rcset.empty()) {
943 throw Glib::OptionError(
944 Glib::OptionError::BAD_VALUE,
945 (boost::format(_(
"invalid style '%1%' on command line"))
949 if (jack_outputs.size() > 2) {
952 _(
"Warning --> provided more than 2 output ports, ignoring extra ports"));
968 str.append(
" 1>/dev/null 2>&1");
976 sigemptyset(&waitset);
977 sigaddset(&waitset, SIGCHLD);
978 sigprocmask(SIG_UNBLOCK, &waitset, NULL);
979 int rc = system(str.c_str());
980 sigprocmask(SIG_BLOCK, &waitset, NULL);
985 size_t n = s.find_first_not_of(
' ');
986 if (n == Glib::ustring::npos) {
993 s.erase(s.find_last_not_of(
' ')+1);
1000 static inline bool check_char(
unsigned char c) {
1001 static const char *badchars =
"/%?*<>\\:#&$'\"(){}[]~;`|.";
1005 for (
const char *p = badchars; *p; p++) {
1015 res.reserve(s.size());
1016 for (
unsigned int i = 0; i < s.size(); i++) {
1017 unsigned char c = s[i];
1018 if (!check_char(c)) {
1020 static const unsigned char code[16] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'a',
'b',
'c',
'd',
'e',
'f'};
1021 res.append(1, code[c / 16]);
1022 res.append(1, code[c % 16]);
1030 static inline bool dct(
unsigned char c,
int &n) {
1050 res.reserve(s.size());
1051 for (
unsigned int i = 0; i < s.size(); i++) {
1052 unsigned char c = s[i];
1055 if (s.size() - i < 3 || !dct(s[i+1],n1) || !dct(s[i+2],n2)) {
1059 res.push_back(n1*16 + n2);
PathList(const char *env_name=0)
void write_kv(const char *key, float v)
static void make_ending_slash(std::string &dirpath)
std::list< Glib::RefPtr< Gio::File > >::const_iterator iterator
const Glib::ustring & operator[](unsigned int idx)
bool is_in_list(const std::string &name)
const std::string & get_sys_IR_dir() const
MeasureThreadsafe measure
void list_subdirs(PathList pl, std::vector< FileName > &dirs)
int gx_system_call(const std::string &, bool devnull=false, bool escape=false)
bool system_show_tooltips
void print(bool verbose) const
IRFileListing(const std::string &path)
std::string decode_filename(const std::string &s)
void gx_print_fatal(const char *, const std::string &)
void add(const std::string &d)
void set_styledir(const std::string &styledir)
void gx_print_error(const char *, const std::string &)
static GxLogger & get_logger()
bool find_dir(std::string *d, const std::string &filename) const
bool contains(const std::string &d) const
void process(int argc, char **argv)
void begin_object(bool nl=false)
const std::string & get_pluginpreset_dir() const
Glib::ustring get_jack_output(unsigned int n) const
msg_signal & signal_message()
void print(bool verbose=false)
void gx_print_warning(const char *, const std::string &)
void add(char s, const std::string &d)
void strip(Glib::ustring &s)
void print_accum(const Accum &accum, const char *prefix, bool verbose, int total=0) const
void atomic_set(volatile int *p, int v)
std::string replace_symbol(const std::string &dir) const
string current_value() const
unsigned int index(const Glib::ustring &name)
const std::string & get_user_dir() const
token next(token expect=no_token)
void add_time_measurement()
std::string replace_path(const std::string &dir) const
void end_object(bool nl=false)
std::vector< Glib::ustring > skin_list
const std::string & get_user_IR_dir() const
std::string encode_filename(const std::string &s)