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()) != 0) {
333 if (file_info->get_attribute_string(G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE) ==
"audio/x-wav") {
336 file_info->get_attribute_byte_string(G_FILE_ATTRIBUTE_STANDARD_NAME),
337 file_info->get_attribute_string(G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME)));
343 boost::format(_(
"Error reading file path %1%")) % path);
347 static void list_subdirs(
const Glib::RefPtr<Gio::File>& file, std::vector<FileName>& dirs,
const Glib::ustring& prefix) {
348 Glib::RefPtr<Gio::FileEnumerator> child_enumeration =
349 file->enumerate_children(G_FILE_ATTRIBUTE_STANDARD_NAME
350 "," G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME);
351 Glib::RefPtr<Gio::FileInfo> file_info;
352 while ((file_info = child_enumeration->next_file()) != 0) {
353 if (file_info->get_file_type() == Gio::FILE_TYPE_DIRECTORY) {
354 Glib::RefPtr<Gio::File> child = file->get_child(
355 file_info->get_attribute_byte_string(G_FILE_ATTRIBUTE_STANDARD_NAME));
359 prefix+file_info->get_attribute_string(G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME)));
367 std::string fn = (*i)->get_path();
383 sys_IR_dir(GX_SOUND_DIR),
386 builder_dir(GX_BUILDER_DIR) {
387 user_dir = Glib::build_filename(Glib::get_user_config_dir(),
"guitarix");
388 user_IR_dir = Glib::build_filename(user_dir,
"IR");
411 if (dirpath.empty()) {
414 if (dirpath[dirpath.size()-1] !=
'/') {
424 static inline const char *shellvar(
const char *name) {
425 const char *p = getenv(name);
429 #define TCLR(s) "\033[1;32m" s "\033[0m" // light green 430 #define TCLR2(s) TCLR(s), s 435 optgroup_style(
"style",
TCLR2(
"GTK style configuration options")),
436 optgroup_jack(
"jack",
TCLR2(
"JACK configuration options")),
437 optgroup_overload(
"overload",
TCLR2(
"Switch to bypass mode on overload condition")),
438 optgroup_file(
"file",
TCLR2(
"File options")),
439 optgroup_debug(
"debug",
TCLR2(
"Debug options")),
440 version(false), clear(false),
441 jack_input(shellvar(
"GUITARIX2JACK_INPUTS")),
442 jack_midi(shellvar(
"GUITARIX2JACK_MIDI")),
446 jack_noconnect(false),
448 load_file(shellvar(
"GUITARIX_LOAD_FILE")),
449 style_dir(GX_STYLE_DIR),
450 factory_dir(GX_FACTORY_DIR),
451 pixmap_dir(GX_PIXMAPS_DIR),
459 rcset(shellvar(
"GUITARIX_RC_STYLE")),
469 sporadic_overload(0),
470 idle_thread_timeout(0),
471 convolver_watchdog(true),
472 xrun_watchdog(false),
477 dump_parameter(false),
484 preset_window_height(220),
486 skin_name(
"Guitarix"),
487 no_warn_latency(false),
488 system_order_rack_h(false),
489 system_show_value(false),
490 system_show_tooltips(true),
491 system_animations(true),
492 system_show_presets(false),
493 system_show_toolbar(false),
494 system_show_rack(false),
495 reload_lv2_presets(true) {
496 const char* home = getenv(
"HOME");
500 old_user_dir = string(home) +
"/.gx_head/";
501 plugin_dir = Glib::build_filename(
get_user_dir(),
"plugins");
502 preset_dir = Glib::build_filename(
get_user_dir(),
"banks");
503 pluginpreset_dir = Glib::build_filename(
get_user_dir(),
"pluginpresets");
504 lv2_preset_dir = Glib::build_filename(
get_user_dir(),
"pluginpresets/lv2");
506 temp_dir = Glib::build_filename(
get_user_dir(),
"temp");
507 const char *tmp = getenv(
"GUITARIX2JACK_OUTPUTS1");
509 jack_outputs.push_back(tmp);
511 tmp = getenv(
"GUITARIX2JACK_OUTPUTS2");
513 jack_outputs.push_back(tmp);
520 "All parameters are optional. Examples:\n" 522 "\tguitarix -r gx4-black -i system:capture_3\n" 523 "\tguitarix -c -o system:playback_1 -o system:playback_2");
526 Glib::OptionEntry opt_version;
527 opt_version.set_short_name(
'v');
528 opt_version.set_long_name(
"version");
529 opt_version.set_description(
"Print version string and exit");
530 Glib::OptionEntry opt_nogui;
531 opt_nogui.set_short_name(
'N');
532 opt_nogui.set_long_name(
"nogui");
533 opt_nogui.set_description(
"start without GUI");
534 Glib::OptionEntry opt_rpcport;
535 opt_rpcport.set_short_name(
'p');
536 opt_rpcport.set_long_name(
"rpcport");
537 opt_rpcport.set_description(
"start a JSON-RPC server listening on port PORT");
538 opt_rpcport.set_arg_description(
"PORT");
539 Glib::OptionEntry opt_rpchost;
540 opt_rpchost.set_short_name(
'H');
541 opt_rpchost.set_long_name(
"rpchost");
542 opt_rpchost.set_description(
"set hostname to connect to");
543 opt_rpchost.set_arg_description(
"HOSTNAME");
544 Glib::OptionEntry opt_onlygui;
545 opt_onlygui.set_short_name(
'G');
546 opt_onlygui.set_long_name(
"onlygui");
547 opt_onlygui.set_description(
"start only GUI");
548 Glib::OptionEntry opt_liveplaygui;
549 opt_liveplaygui.set_short_name(
'L');
550 opt_liveplaygui.set_long_name(
"liveplaygui");
551 opt_liveplaygui.set_description(
"start with Live Play GUI");
552 Glib::OptionEntry opt_mute;
553 opt_mute.set_short_name(
'M');
554 opt_mute.set_long_name(
"mute");
555 opt_mute.set_description(
"start with engine muted");
556 Glib::OptionEntry opt_bank;
557 opt_bank.set_short_name(
'b');
558 opt_bank.set_long_name(
"bank");
559 opt_bank.set_description(
"set bank and preset to load at startup");
560 opt_bank.set_arg_description(
"BANK:PRESET (A:0-Z:9)");
561 Glib::OptionEntry opt_tuner_tet;
562 opt_tuner_tet.set_short_name(
't');
563 opt_tuner_tet.set_long_name(
"tuner_tet");
564 opt_tuner_tet.set_description(
"set tuner temperament at startup");
565 opt_tuner_tet.set_arg_description(
"tuner temperament (12, 19, 24, 31, 53)");
566 Glib::OptionEntry opt_tuner_ref;
567 opt_tuner_ref.set_short_name(
'F');
568 opt_tuner_ref.set_long_name(
"reference_pitch");
569 opt_tuner_ref.set_description(
"set tuner reference pitch at startup");
570 opt_tuner_ref.set_arg_description(
"tuner reference pitch (225 - 453)");
571 main_group.add_entry(opt_version, version);
572 main_group.add_entry(opt_nogui, nogui);
573 main_group.add_entry(opt_rpcport, rpcport);
574 main_group.add_entry(opt_rpchost, rpcaddress);
575 main_group.add_entry(opt_onlygui, onlygui);
576 main_group.add_entry(opt_liveplaygui, liveplaygui);
577 main_group.add_entry(opt_mute, mute);
578 main_group.add_entry(opt_bank, setbank);
579 main_group.add_entry(opt_tuner_tet, tuner_tet);
580 main_group.add_entry(opt_tuner_ref, tuner_ref);
581 set_main_group(main_group);
584 Glib::OptionEntry opt_clear;
585 opt_clear.set_short_name(
'c');
586 opt_clear.set_long_name(
"clear");
587 opt_clear.set_description(
"Use 'default' GTK style");
588 Glib::OptionEntry opt_rcset;
589 opt_rcset.set_short_name(
'r');
590 opt_rcset.set_long_name(
"rcset");
591 opt_rcset.set_description(get_opskin());
592 opt_rcset.set_arg_description(
"STYLE");
593 optgroup_style.add_entry(opt_clear, clear);
594 optgroup_style.add_entry(opt_rcset, rcset);
597 Glib::OptionEntry opt_jack_input;
598 opt_jack_input.set_short_name(
'i');
599 opt_jack_input.set_long_name(
"jack-input");
600 opt_jack_input.set_description(
"Guitarix JACK input");
601 opt_jack_input.set_arg_description(
"PORT");
602 Glib::OptionEntry opt_jack_output;
603 opt_jack_output.set_short_name(
'o');
604 opt_jack_output.set_long_name(
"jack-output");
605 opt_jack_output.set_description(
"Guitarix JACK outputs");
606 opt_jack_output.set_arg_description(
"PORT");
607 Glib::OptionEntry opt_jack_midi;
608 opt_jack_midi.set_short_name(
'm');
609 opt_jack_midi.set_long_name(
"jack-midi");
610 opt_jack_midi.set_description(
"Guitarix JACK midi control");
611 opt_jack_midi.set_arg_description(
"PORT");
612 Glib::OptionEntry opt_jack_noconnect;
613 opt_jack_noconnect.set_short_name(
'J');
614 opt_jack_noconnect.set_long_name(
"jack-no-conect");
615 opt_jack_noconnect.set_description(
"dissable self-connect JACK ports");
616 Glib::OptionEntry opt_jack_instance;
617 opt_jack_instance.set_short_name(
'n');
618 opt_jack_instance.set_long_name(
"name");
619 opt_jack_instance.set_description(
"instance name (default gx_head)");
620 opt_jack_instance.set_arg_description(
"NAME");
621 Glib::OptionEntry opt_jack_uuid;
622 opt_jack_uuid.set_short_name(
'U');
623 opt_jack_uuid.set_long_name(
"jack-uuid");
624 opt_jack_uuid.set_description(
"JackSession ID");
625 opt_jack_uuid.set_arg_description(
"UUID");
626 Glib::OptionEntry opt_jack_uuid2;
627 opt_jack_uuid2.set_short_name(
'A');
628 opt_jack_uuid2.set_long_name(
"jack-uuid2");
629 opt_jack_uuid2.set_description(
"JackSession ID");
630 opt_jack_uuid2.set_arg_description(
"UUID2");
631 Glib::OptionEntry opt_jack_servername;
632 opt_jack_servername.set_short_name(
's');
633 opt_jack_servername.set_long_name(
"server-name");
634 opt_jack_servername.set_description(
"JACK server name to connect to");
635 opt_jack_servername.set_arg_description(
"NAME");
636 optgroup_jack.add_entry(opt_jack_input, jack_input);
637 optgroup_jack.add_entry(opt_jack_output, jack_outputs);
638 optgroup_jack.add_entry(opt_jack_midi, jack_midi);
639 optgroup_jack.add_entry(opt_jack_noconnect, jack_noconnect);
640 optgroup_jack.add_entry(opt_jack_instance, jack_instance);
641 optgroup_jack.add_entry(opt_jack_uuid, jack_uuid);
642 optgroup_jack.add_entry(opt_jack_uuid2, jack_uuid2);
643 optgroup_jack.add_entry(opt_jack_servername, jack_servername);
646 Glib::OptionEntry opt_watchdog_idle;
647 opt_watchdog_idle.set_short_name(
'I');
648 opt_watchdog_idle.set_long_name(
"idle-timeout");
649 opt_watchdog_idle.set_description(
650 "starved idle thread probe (default: disabled)");
651 opt_watchdog_idle.set_arg_description(
"SECONDS");
652 Glib::OptionEntry opt_watchdog_convolver;
653 opt_watchdog_convolver.set_short_name(
'C');
654 opt_watchdog_convolver.set_long_name(
"no-convolver-overload");
655 opt_watchdog_convolver.set_description(
656 "disable overload on convolver missed deadline");
657 opt_watchdog_convolver.set_flags(Glib::OptionEntry::FLAG_REVERSE);
658 Glib::OptionEntry opt_watchdog_xrun;
659 opt_watchdog_xrun.set_short_name(
'X');
660 opt_watchdog_xrun.set_long_name(
"xrun-overload");
661 opt_watchdog_xrun.set_description(
662 "JACK xrun (default: false)");
663 Glib::OptionEntry opt_sporadic_overload;
664 opt_sporadic_overload.set_short_name(
'S');
665 opt_sporadic_overload.set_long_name(
"sporadic");
666 opt_sporadic_overload.set_description(
667 "allow single overload events per interval (default: disabled)");
668 opt_sporadic_overload.set_arg_description(
"SECONDS");
669 optgroup_overload.add_entry(opt_watchdog_idle, idle_thread_timeout);
670 optgroup_overload.add_entry(opt_watchdog_convolver, convolver_watchdog);
671 optgroup_overload.add_entry(opt_watchdog_xrun, xrun_watchdog);
672 optgroup_overload.add_entry(opt_sporadic_overload, sporadic_overload);
675 Glib::OptionEntry opt_load_file;
676 opt_load_file.set_short_name(
'f');
677 opt_load_file.set_long_name(
"load-file");
678 opt_load_file.set_description(_(
"load state file on startup"));
679 opt_load_file.set_arg_description(
"FILE");
680 optgroup_file.add_entry_filename(opt_load_file, load_file);
681 Glib::OptionEntry opt_plugin_dir;
682 opt_plugin_dir.set_short_name(
'P');
683 opt_plugin_dir.set_long_name(
"plugin-dir");
684 opt_plugin_dir.set_description(_(
"directory with guitarix plugins (.so files)"));
685 opt_plugin_dir.set_arg_description(
"DIR");
686 optgroup_file.add_entry_filename(opt_plugin_dir, plugin_dir);
687 Glib::OptionEntry opt_save_on_exit;
688 opt_save_on_exit.set_short_name(
'K');
689 opt_save_on_exit.set_long_name(
"disable-save-on-exit");
690 opt_save_on_exit.set_description(_(
"disable auto save to state file when quit"));
691 optgroup_file.add_entry(opt_save_on_exit, a_save);
692 Glib::OptionEntry opt_auto_save;
693 opt_auto_save.set_short_name(
'a');
694 opt_auto_save.set_long_name(
"auto-save");
695 opt_auto_save.set_description(_(
"enable auto save (only in server mode)"));
696 optgroup_file.add_entry(opt_auto_save, auto_save);
699 Glib::OptionEntry opt_builder_dir;
700 opt_builder_dir.set_short_name(
'B');
701 opt_builder_dir.set_long_name(
"builder-dir");
702 opt_builder_dir.set_description(_(
"directory from which .glade files are loaded"));
703 opt_builder_dir.set_arg_description(
"DIR");
704 optgroup_debug.add_entry_filename(opt_builder_dir,
builder_dir);
705 Glib::OptionEntry opt_style_dir;
706 opt_style_dir.set_short_name(
'S');
707 opt_style_dir.set_long_name(
"style-dir");
708 opt_style_dir.set_description(_(
"directory with skin style definitions (.rc files)"));
709 opt_style_dir.set_arg_description(
"DIR");
710 optgroup_debug.add_entry_filename(opt_style_dir, style_dir);
711 Glib::OptionEntry opt_log_terminal;
712 opt_log_terminal.set_short_name(
't');
713 opt_log_terminal.set_long_name(
"log-terminal");
714 opt_log_terminal.set_description(_(
"print log on terminal"));
715 optgroup_debug.add_entry(opt_log_terminal, lterminal);
717 Glib::OptionEntry opt_dump_parameter;
718 opt_dump_parameter.set_short_name(
'd');
719 opt_dump_parameter.set_long_name(
"dump-parameter");
720 opt_dump_parameter.set_description(_(
"dump parameter table in json format"));
725 add_group(optgroup_style);
726 add_group(optgroup_jack);
727 add_group(optgroup_overload);
728 add_group(optgroup_file);
729 add_group(optgroup_debug);
736 void CmdlineOptions::read_ui_vars() {
737 ifstream i(Glib::build_filename(
get_user_dir(),
"ui_rc").c_str());
755 }
else if (jp.
current_value() ==
"system.mainwin_rack_height") {
758 }
else if (jp.
current_value() ==
"system.preset_window_height") {
801 void CmdlineOptions::write_ui_vars() {
802 ofstream o(Glib::build_filename(
get_user_dir(),
"ui_rc").c_str());
833 if (n >= jack_outputs.size()) {
836 return jack_outputs.at(n);
839 string CmdlineOptions::get_opskin() {
841 string opskin(
"Style to use");
849 vector<Glib::ustring>::iterator it;
852 opskin +=
", '" + *it +
"'";
857 static void log_terminal(
const string& msg,
GxLogger::MsgType tp,
bool plugged) {
863 default: t =
"?";
break;
866 cerr << t <<
" " << msg << endl;
871 path_to_program = Gio::File::create_for_path(argv[0])->get_path();
873 std::cout <<
"Guitarix version \033[1;32m" 874 << GX_VERSION << endl
875 <<
"\033[0m Copyright " <<
static_cast<char>(0x40) <<
" 2010 " 876 <<
"Hermman Meyer - James Warden - Andreas Degert" 883 string(
"unknown argument on command line: ")+argv[1]);
886 if (clear && !rcset.empty()) {
887 throw Glib::OptionError(
888 Glib::OptionError::BAD_VALUE,
889 _(
"-c and -r cannot be used together"));
891 if (nogui && liveplaygui) {
892 throw Glib::OptionError(
893 Glib::OptionError::BAD_VALUE,
894 _(
"-N and -L cannot be used together"));
896 if (onlygui && !setbank.empty()) {
897 throw Glib::OptionError(
898 Glib::OptionError::BAD_VALUE,
899 _(
"-G and -b cannot be used together"));
903 sigc::ptr_fun(log_terminal));
925 if (!rcset.empty()) {
929 throw Glib::OptionError(
930 Glib::OptionError::BAD_VALUE,
931 (boost::format(_(
"invalid style '%1%' on command line"))
935 if (jack_outputs.size() > 2) {
938 _(
"Warning --> provided more than 2 output ports, ignoring extra ports"));
954 str.append(
" 1>/dev/null 2>&1");
962 sigemptyset(&waitset);
963 sigaddset(&waitset, SIGCHLD);
964 sigprocmask(SIG_UNBLOCK, &waitset, NULL);
965 int rc = system(str.c_str());
966 sigprocmask(SIG_BLOCK, &waitset, NULL);
971 size_t n = s.find_first_not_of(
' ');
972 if (n == Glib::ustring::npos) {
979 s.erase(s.find_last_not_of(
' ')+1);
986 static inline bool check_char(
unsigned char c) {
987 static const char *badchars =
"/%?*<>\\:#&$'\"(){}[]~;`|.";
991 for (
const char *p = badchars; *p; p++) {
1001 res.reserve(s.size());
1002 for (
unsigned int i = 0; i < s.size(); i++) {
1003 unsigned char c = s[i];
1004 if (!check_char(c)) {
1006 static const unsigned char code[16] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'a',
'b',
'c',
'd',
'e',
'f'};
1007 res.append(1, code[c / 16]);
1008 res.append(1, code[c % 16]);
1016 static inline bool dct(
unsigned char c,
int &n) {
1036 res.reserve(s.size());
1037 for (
unsigned int i = 0; i < s.size(); i++) {
1038 unsigned char c = s[i];
1041 if (s.size() - i < 3 || !dct(s[i+1],n1) || !dct(s[i+2],n2)) {
1045 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)
const std::string & get_user_IR_dir() const
std::list< Glib::RefPtr< Gio::File > >::const_iterator iterator
bool contains(const std::string &d) const
const Glib::ustring & operator[](unsigned int idx)
bool is_in_list(const std::string &name)
void print_accum(const Accum &accum, const char *prefix, bool verbose, int total=0) 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
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)
bool find_dir(std::string *d, const std::string &filename) const
void gx_print_error(const char *, const std::string &)
static GxLogger & get_logger()
void process(int argc, char **argv)
const std::string & get_pluginpreset_dir() const
void begin_object(bool nl=false)
std::string replace_symbol(const std::string &dir) 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 atomic_set(volatile int *p, int v)
Glib::ustring get_jack_output(unsigned int n) const
unsigned int index(const Glib::ustring &name)
void print(bool verbose) const
const std::string & get_user_dir() const
string current_value() const
token next(token expect=no_token)
const std::string & get_sys_IR_dir() const
void add_time_measurement()
void end_object(bool nl=false)
std::string replace_path(const std::string &dir) const
std::vector< Glib::ustring > skin_list
std::string encode_filename(const std::string &s)