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),
450 load_file(shellvar(
"GUITARIX_LOAD_FILE")),
451 style_dir(GX_STYLE_DIR),
452 factory_dir(GX_FACTORY_DIR),
453 pixmap_dir(GX_PIXMAPS_DIR),
461 rcset(shellvar(
"GUITARIX_RC_STYLE")),
471 sporadic_overload(0),
472 idle_thread_timeout(0),
473 convolver_watchdog(true),
474 xrun_watchdog(false),
479 dump_parameter(false),
486 preset_window_height(220),
488 skin_name(
"Guitarix"),
489 no_warn_latency(false),
490 system_order_rack_h(false),
491 system_show_value(false),
492 system_show_tooltips(true),
493 system_animations(true),
494 system_show_presets(false),
495 system_show_toolbar(false),
496 system_show_rack(false),
497 reload_lv2_presets(true) {
498 const char* home = getenv(
"HOME");
502 old_user_dir = string(home) +
"/.gx_head/";
503 plugin_dir = Glib::build_filename(
get_user_dir(),
"plugins");
504 preset_dir = Glib::build_filename(
get_user_dir(),
"banks");
505 pluginpreset_dir = Glib::build_filename(
get_user_dir(),
"pluginpresets");
506 lv2_preset_dir = Glib::build_filename(
get_user_dir(),
"pluginpresets/lv2");
508 temp_dir = Glib::build_filename(
get_user_dir(),
"temp");
509 const char *tmp = getenv(
"GUITARIX2JACK_OUTPUTS1");
511 jack_outputs.push_back(tmp);
513 tmp = getenv(
"GUITARIX2JACK_OUTPUTS2");
515 jack_outputs.push_back(tmp);
522 "All parameters are optional. Examples:\n" 524 "\tguitarix -r gx4-black -i system:capture_3\n" 525 "\tguitarix -c -o system:playback_1 -o system:playback_2");
528 Glib::OptionEntry opt_version;
529 opt_version.set_short_name(
'v');
530 opt_version.set_long_name(
"version");
531 opt_version.set_description(
"Print version string and exit");
532 Glib::OptionEntry opt_nogui;
533 opt_nogui.set_short_name(
'N');
534 opt_nogui.set_long_name(
"nogui");
535 opt_nogui.set_description(
"start without GUI");
536 Glib::OptionEntry opt_rpcport;
537 opt_rpcport.set_short_name(
'p');
538 opt_rpcport.set_long_name(
"rpcport");
539 opt_rpcport.set_description(
"start a JSON-RPC server listening on port PORT");
540 opt_rpcport.set_arg_description(
"PORT");
541 Glib::OptionEntry opt_rpchost;
542 opt_rpchost.set_short_name(
'H');
543 opt_rpchost.set_long_name(
"rpchost");
544 opt_rpchost.set_description(
"set hostname to connect to");
545 opt_rpchost.set_arg_description(
"HOSTNAME");
546 Glib::OptionEntry opt_onlygui;
547 opt_onlygui.set_short_name(
'G');
548 opt_onlygui.set_long_name(
"onlygui");
549 opt_onlygui.set_description(
"start only GUI");
550 Glib::OptionEntry opt_liveplaygui;
551 opt_liveplaygui.set_short_name(
'L');
552 opt_liveplaygui.set_long_name(
"liveplaygui");
553 opt_liveplaygui.set_description(
"start with Live Play GUI");
554 Glib::OptionEntry opt_mute;
555 opt_mute.set_short_name(
'M');
556 opt_mute.set_long_name(
"mute");
557 opt_mute.set_description(
"start with engine muted");
558 Glib::OptionEntry opt_bank;
559 opt_bank.set_short_name(
'b');
560 opt_bank.set_long_name(
"bank");
561 opt_bank.set_description(
"set bank and preset to load at startup");
562 opt_bank.set_arg_description(
"BANK:PRESET (A:0-Z:9)");
563 Glib::OptionEntry opt_tuner_tet;
564 opt_tuner_tet.set_short_name(
't');
565 opt_tuner_tet.set_long_name(
"tuner_tet");
566 opt_tuner_tet.set_description(
"set tuner temperament at startup");
567 opt_tuner_tet.set_arg_description(
"tuner temperament (12, 19, 24, 31, 53)");
568 Glib::OptionEntry opt_tuner_ref;
569 opt_tuner_ref.set_short_name(
'F');
570 opt_tuner_ref.set_long_name(
"reference_pitch");
571 opt_tuner_ref.set_description(
"set tuner reference pitch at startup");
572 opt_tuner_ref.set_arg_description(
"tuner reference pitch (225 - 453)");
573 main_group.add_entry(opt_version, version);
574 main_group.add_entry(opt_nogui, nogui);
575 main_group.add_entry(opt_rpcport, rpcport);
576 main_group.add_entry(opt_rpchost, rpcaddress);
577 main_group.add_entry(opt_onlygui, onlygui);
578 main_group.add_entry(opt_liveplaygui, liveplaygui);
579 main_group.add_entry(opt_mute, mute);
580 main_group.add_entry(opt_bank, setbank);
581 main_group.add_entry(opt_tuner_tet, tuner_tet);
582 main_group.add_entry(opt_tuner_ref, tuner_ref);
583 set_main_group(main_group);
586 Glib::OptionEntry opt_clear;
587 opt_clear.set_short_name(
'c');
588 opt_clear.set_long_name(
"clear");
589 opt_clear.set_description(
"Use 'default' GTK style");
590 Glib::OptionEntry opt_rcset;
591 opt_rcset.set_short_name(
'r');
592 opt_rcset.set_long_name(
"rcset");
593 opt_rcset.set_description(get_opskin());
594 opt_rcset.set_arg_description(
"STYLE");
595 optgroup_style.add_entry(opt_clear, clear);
596 optgroup_style.add_entry(opt_rcset, rcset);
599 Glib::OptionEntry opt_jack_input;
600 opt_jack_input.set_short_name(
'i');
601 opt_jack_input.set_long_name(
"jack-input");
602 opt_jack_input.set_description(
"Guitarix JACK input");
603 opt_jack_input.set_arg_description(
"PORT");
604 Glib::OptionEntry opt_jack_output;
605 opt_jack_output.set_short_name(
'o');
606 opt_jack_output.set_long_name(
"jack-output");
607 opt_jack_output.set_description(
"Guitarix JACK outputs");
608 opt_jack_output.set_arg_description(
"PORT");
609 Glib::OptionEntry opt_jack_midi;
610 opt_jack_midi.set_short_name(
'm');
611 opt_jack_midi.set_long_name(
"jack-midi");
612 opt_jack_midi.set_description(
"Guitarix JACK midi control");
613 opt_jack_midi.set_arg_description(
"PORT");
614 Glib::OptionEntry opt_jack_noconnect;
615 opt_jack_noconnect.set_short_name(
'J');
616 opt_jack_noconnect.set_long_name(
"jack-no-conect");
617 opt_jack_noconnect.set_description(
"dissable self-connect JACK ports");
618 Glib::OptionEntry opt_jack_instance;
619 opt_jack_instance.set_short_name(
'n');
620 opt_jack_instance.set_long_name(
"name");
621 opt_jack_instance.set_description(
"instance name (default gx_head)");
622 opt_jack_instance.set_arg_description(
"NAME");
623 Glib::OptionEntry opt_jack_uuid;
624 opt_jack_uuid.set_short_name(
'U');
625 opt_jack_uuid.set_long_name(
"jack-uuid");
626 opt_jack_uuid.set_description(
"JackSession ID");
627 opt_jack_uuid.set_arg_description(
"UUID");
628 Glib::OptionEntry opt_jack_uuid2;
629 opt_jack_uuid2.set_short_name(
'A');
630 opt_jack_uuid2.set_long_name(
"jack-uuid2");
631 opt_jack_uuid2.set_description(
"JackSession ID");
632 opt_jack_uuid2.set_arg_description(
"UUID2");
633 Glib::OptionEntry opt_jack_servername;
634 opt_jack_servername.set_short_name(
's');
635 opt_jack_servername.set_long_name(
"server-name");
636 opt_jack_servername.set_description(
"JACK server name to connect to");
637 opt_jack_servername.set_arg_description(
"NAME");
638 optgroup_jack.add_entry(opt_jack_input, jack_input);
639 optgroup_jack.add_entry(opt_jack_output, jack_outputs);
640 optgroup_jack.add_entry(opt_jack_midi, jack_midi);
641 optgroup_jack.add_entry(opt_jack_noconnect, jack_noconnect);
642 optgroup_jack.add_entry(opt_jack_instance, jack_instance);
643 optgroup_jack.add_entry(opt_jack_uuid, jack_uuid);
644 optgroup_jack.add_entry(opt_jack_uuid2, jack_uuid2);
645 optgroup_jack.add_entry(opt_jack_servername, jack_servername);
648 Glib::OptionEntry opt_watchdog_idle;
649 opt_watchdog_idle.set_short_name(
'I');
650 opt_watchdog_idle.set_long_name(
"idle-timeout");
651 opt_watchdog_idle.set_description(
652 "starved idle thread probe (default: disabled)");
653 opt_watchdog_idle.set_arg_description(
"SECONDS");
654 Glib::OptionEntry opt_watchdog_convolver;
655 opt_watchdog_convolver.set_short_name(
'C');
656 opt_watchdog_convolver.set_long_name(
"no-convolver-overload");
657 opt_watchdog_convolver.set_description(
658 "disable overload on convolver missed deadline");
659 opt_watchdog_convolver.set_flags(Glib::OptionEntry::FLAG_REVERSE);
660 Glib::OptionEntry opt_watchdog_xrun;
661 opt_watchdog_xrun.set_short_name(
'X');
662 opt_watchdog_xrun.set_long_name(
"xrun-overload");
663 opt_watchdog_xrun.set_description(
664 "JACK xrun (default: false)");
665 Glib::OptionEntry opt_sporadic_overload;
666 opt_sporadic_overload.set_short_name(
'S');
667 opt_sporadic_overload.set_long_name(
"sporadic");
668 opt_sporadic_overload.set_description(
669 "allow single overload events per interval (default: disabled)");
670 opt_sporadic_overload.set_arg_description(
"SECONDS");
671 optgroup_overload.add_entry(opt_watchdog_idle, idle_thread_timeout);
672 optgroup_overload.add_entry(opt_watchdog_convolver, convolver_watchdog);
673 optgroup_overload.add_entry(opt_watchdog_xrun, xrun_watchdog);
674 optgroup_overload.add_entry(opt_sporadic_overload, sporadic_overload);
677 Glib::OptionEntry opt_load_file;
678 opt_load_file.set_short_name(
'f');
679 opt_load_file.set_long_name(
"load-file");
680 opt_load_file.set_description(_(
"load state file on startup"));
681 opt_load_file.set_arg_description(
"FILE");
682 optgroup_file.add_entry_filename(opt_load_file, load_file);
683 Glib::OptionEntry opt_plugin_dir;
684 opt_plugin_dir.set_short_name(
'P');
685 opt_plugin_dir.set_long_name(
"plugin-dir");
686 opt_plugin_dir.set_description(_(
"directory with guitarix plugins (.so files)"));
687 opt_plugin_dir.set_arg_description(
"DIR");
688 optgroup_file.add_entry_filename(opt_plugin_dir, plugin_dir);
689 Glib::OptionEntry opt_save_on_exit;
690 opt_save_on_exit.set_short_name(
'K');
691 opt_save_on_exit.set_long_name(
"disable-save-on-exit");
692 opt_save_on_exit.set_description(_(
"disable auto save to state file when quit"));
693 optgroup_file.add_entry(opt_save_on_exit, a_save);
694 Glib::OptionEntry opt_auto_save;
695 opt_auto_save.set_short_name(
'a');
696 opt_auto_save.set_long_name(
"auto-save");
697 opt_auto_save.set_description(_(
"enable auto save (only in server mode)"));
698 optgroup_file.add_entry(opt_auto_save, auto_save);
701 Glib::OptionEntry opt_builder_dir;
702 opt_builder_dir.set_short_name(
'B');
703 opt_builder_dir.set_long_name(
"builder-dir");
704 opt_builder_dir.set_description(_(
"directory from which .glade files are loaded"));
705 opt_builder_dir.set_arg_description(
"DIR");
706 optgroup_debug.add_entry_filename(opt_builder_dir,
builder_dir);
707 Glib::OptionEntry opt_style_dir;
708 opt_style_dir.set_short_name(
'S');
709 opt_style_dir.set_long_name(
"style-dir");
710 opt_style_dir.set_description(_(
"directory with skin style definitions (.rc files)"));
711 opt_style_dir.set_arg_description(
"DIR");
712 optgroup_debug.add_entry_filename(opt_style_dir, style_dir);
713 Glib::OptionEntry opt_log_terminal;
714 opt_log_terminal.set_short_name(
't');
715 opt_log_terminal.set_long_name(
"log-terminal");
716 opt_log_terminal.set_description(_(
"print log on terminal"));
717 optgroup_debug.add_entry(opt_log_terminal, lterminal);
719 Glib::OptionEntry opt_dump_parameter;
720 opt_dump_parameter.set_short_name(
'd');
721 opt_dump_parameter.set_long_name(
"dump-parameter");
722 opt_dump_parameter.set_description(_(
"dump parameter table in json format"));
727 add_group(optgroup_style);
728 add_group(optgroup_jack);
729 add_group(optgroup_overload);
730 add_group(optgroup_file);
731 add_group(optgroup_debug);
738 void CmdlineOptions::read_ui_vars() {
739 ifstream i(Glib::build_filename(
get_user_dir(),
"ui_rc").c_str());
757 }
else if (jp.
current_value() ==
"system.mainwin_rack_height") {
760 }
else if (jp.
current_value() ==
"system.preset_window_height") {
803 void CmdlineOptions::write_ui_vars() {
804 ofstream o(Glib::build_filename(
get_user_dir(),
"ui_rc").c_str());
835 if (n >= jack_outputs.size()) {
838 return jack_outputs.at(n);
841 string CmdlineOptions::get_opskin() {
843 string opskin(
"Style to use");
851 vector<Glib::ustring>::iterator it;
854 opskin +=
", '" + *it +
"'";
859 static void log_terminal(
const string& msg,
GxLogger::MsgType tp,
bool plugged) {
865 default: t =
"?";
break;
868 cerr << t <<
" " << msg << endl;
873 path_to_program = Gio::File::create_for_path(argv[0])->get_path();
875 std::cout <<
"Guitarix version \033[1;32m" 876 << GX_VERSION << endl
877 <<
"\033[0m Copyright " <<
static_cast<char>(0x40) <<
" 2010 " 878 <<
"Hermman Meyer - James Warden - Andreas Degert" 885 string(
"unknown argument on command line: ")+argv[1]);
888 if (clear && !rcset.empty()) {
889 throw Glib::OptionError(
890 Glib::OptionError::BAD_VALUE,
891 _(
"-c and -r cannot be used together"));
893 if (nogui && liveplaygui) {
894 throw Glib::OptionError(
895 Glib::OptionError::BAD_VALUE,
896 _(
"-N and -L cannot be used together"));
898 if (onlygui && !setbank.empty()) {
899 throw Glib::OptionError(
900 Glib::OptionError::BAD_VALUE,
901 _(
"-G and -b cannot be used together"));
905 sigc::ptr_fun(log_terminal));
927 if (!rcset.empty()) {
931 throw Glib::OptionError(
932 Glib::OptionError::BAD_VALUE,
933 (boost::format(_(
"invalid style '%1%' on command line"))
937 if (jack_outputs.size() > 2) {
940 _(
"Warning --> provided more than 2 output ports, ignoring extra ports"));
956 str.append(
" 1>/dev/null 2>&1");
964 sigemptyset(&waitset);
965 sigaddset(&waitset, SIGCHLD);
966 sigprocmask(SIG_UNBLOCK, &waitset, NULL);
967 int rc = system(str.c_str());
968 sigprocmask(SIG_BLOCK, &waitset, NULL);
973 size_t n = s.find_first_not_of(
' ');
974 if (n == Glib::ustring::npos) {
981 s.erase(s.find_last_not_of(
' ')+1);
988 static inline bool check_char(
unsigned char c) {
989 static const char *badchars =
"/%?*<>\\:#&$'\"(){}[]~;`|.";
993 for (
const char *p = badchars; *p; p++) {
1003 res.reserve(s.size());
1004 for (
unsigned int i = 0; i < s.size(); i++) {
1005 unsigned char c = s[i];
1006 if (!check_char(c)) {
1008 static const unsigned char code[16] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'a',
'b',
'c',
'd',
'e',
'f'};
1009 res.append(1, code[c / 16]);
1010 res.append(1, code[c % 16]);
1018 static inline bool dct(
unsigned char c,
int &n) {
1038 res.reserve(s.size());
1039 for (
unsigned int i = 0; i < s.size(); i++) {
1040 unsigned char c = s[i];
1043 if (s.size() - i < 3 || !dct(s[i+1],n1) || !dct(s[i+2],n2)) {
1047 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)