93
94
ECA_LOG_MSG(ECA_LOGGER::system_objects, "ECA_CONTROL destructor");
96
void ECA_CONTROL::command(const string& cmd)
97
void ECA_CONTROL::command(const string& cmd_and_args)
98
99
clear_last_values();
99
100
clear_action_arguments();
101
ECA_LOG_MSG(ECA_LOGGER::user_objects, "command: " + cmd);
103
vector<string> cmds = kvu_string_to_tokens_quoted(cmd);
104
vector<string>::iterator p = cmds.begin();
105
if (p != cmds.end()) {
102
ECA_LOG_MSG(ECA_LOGGER::user_objects, "processing cmd and arg: " + cmd_and_args);
104
vector<string> tokens = kvu_string_to_tokens_quoted(cmd_and_args);
105
vector<string>::iterator cmd = tokens.begin();
106
if (cmd != tokens.end()) {
107
107
const std::map<std::string,int>& cmdmap = ECA_IAMODE_PARSER::registered_commands();
108
if (cmdmap.find(*p) == cmdmap.end()) {
108
if (cmdmap.find(*cmd) == cmdmap.end()) {
110
110
// *p is not recognized as a iamode command
112
if (p->size() > 0 && (*p)[0] == '-') {
112
if (cmd->size() > 0 && (*cmd)[0] == '-') {
113
113
// std::cerr << "Note! Direct use of EOS-options (-prefix:arg1,...,argN)" << " as iactive-mode commands is considered deprecated. " << "\tUse the notation 'cs-option -prefix:a,b,x' instead." << std::endl;
115
115
ECA_LOG_MSG(ECA_LOGGER::info,
116
116
"WARNING: syntax variant '-i file.ext' not supported, please use 'ai-add file.ext' instead.");
117
else if (*cmd == "-o")
118
118
ECA_LOG_MSG(ECA_LOGGER::info,
119
119
"WARNING: syntax variant '-o file.ext' not supported, please use 'ai-add file.ext' instead.");
121
chainsetup_option(cmd);
121
ECA_LOG_MSG(ECA_LOGGER::user_objects, "passiong to cs-option: " + cmd_and_args);
122
chainsetup_option(cmd_and_args);
124
126
set_last_error("Unknown command!");
128
int action_id = ECA_IAMODE_PARSER::command_to_action_id(*p);
130
int action_id = ECA_IAMODE_PARSER::command_to_action_id(*cmd);
129
131
if (action_id == ec_help) {
130
132
show_controller_help();
135
if (p != cmds.end()) {
136
set_action_argument(kvu_vector_to_string(vector<string> (p, cmds.end()), " "));
135
vector<string>::iterator args = cmd + 1;
136
if (args != tokens.end()) {
137
set_action_argument(vector<string> (args, tokens.end()));
138
139
action(action_id);
144
145
void ECA_CONTROL::set_action_argument(const string& s)
147
action_args_rep.resize(0);
148
action_args_rep.push_back(s);
149
action_arg_f_set_rep = false;
152
void ECA_CONTROL::set_action_argument(const std::vector<std::string>& s)
146
154
action_args_rep = s;
147
155
action_arg_f_set_rep = false;
169
177
if (action_arg_f_set_rep == true)
170
178
return action_arg_f_rep;
172
return atof(action_args_rep.c_str());
180
if (action_args_rep.size() == 0)
183
return atof(action_args_rep[0].c_str());
186
string ECA_CONTROL::first_action_argument_as_string(void) const
188
if (action_args_rep.size() == 0)
189
return std::string();
191
return action_args_rep[0];
194
const vector<string>& ECA_CONTROL::action_arguments_as_vector(void) const
196
return action_args_rep;
199
int ECA_CONTROL::first_action_argument_as_int(void) const
201
if (action_args_rep.size() == 0)
204
return atoi(action_args_rep[0].c_str());
175
207
long int ECA_CONTROL::first_action_argument_as_long_int(void) const
177
return atol(action_args_rep.c_str());
209
if (action_args_rep.size() == 0)
212
return atol(action_args_rep[0].c_str());
180
215
SAMPLE_SPECS::sample_pos_t ECA_CONTROL::first_action_argument_as_samples(void) const
217
if (action_args_rep.size() == 0)
182
220
#ifdef HAVE_ATOLL
183
return atoll(action_args_rep.c_str());
221
return atoll(action_args_rep[0].c_str());
185
return atol(action_args_rep.c_str());
223
return atol(action_args_rep[0].c_str());
240
278
/* case 1: action requiring arguments, but not arguments available */
241
279
if (action_arg_f_set_rep == false &&
242
action_args_rep.size() == 0 &&
280
first_action_argument_as_string().size() == 0 &&
243
281
action_requires_params(action_id)) {
244
282
set_last_error("Can't perform requested action; argument omitted.");
245
283
action_ok = false;
348
int level = atoi(action_args_rep.c_str());
386
int level = first_action_argument_as_int();
349
387
ECA_LOGGER::instance().set_log_level_bitmask(level);
350
388
set_last_string("Debug level set to " + kvu_numtostr(level) + ".");
353
391
case ec_resource_file:
355
session_repp->interpret_general_option(string("-R:") + action_args_rep);
393
session_repp->interpret_general_option(string("-R:") +
394
first_action_argument_as_string());
364
add_chainsetup(action_args_rep);
403
add_chainsetup(first_action_argument_as_string());
367
406
case ec_cs_remove: { remove_chainsetup(); break; }
368
407
case ec_cs_list: { set_last_string_list(chainsetup_names()); break; }
369
case ec_cs_select: { select_chainsetup(action_args_rep); break; }
408
case ec_cs_select: { select_chainsetup(first_action_argument_as_string()); break; }
370
409
case ec_cs_selected: { set_last_string(selected_chainsetup()); break; }
371
410
case ec_cs_index_select: {
372
if (action_args_rep.size() > 0) {
373
select_chainsetup_by_index(atoi(action_args_rep.c_str()));
411
if (first_action_argument_as_string().size() > 0) {
412
select_chainsetup_by_index(first_action_argument_as_int());
377
416
case ec_cs_edit: { edit_chainsetup(); break; }
378
case ec_cs_load: { load_chainsetup(action_args_rep); break; }
417
case ec_cs_load: { load_chainsetup(first_action_argument_as_string()); break; }
379
418
case ec_cs_save: { save_chainsetup(""); break; }
380
case ec_cs_save_as: { save_chainsetup(action_args_rep); break; }
419
case ec_cs_save_as: { save_chainsetup(first_action_argument_as_string()); break; }
381
420
case ec_cs_is_valid: {
382
421
if (is_valid() == true)
383
422
set_last_integer(1);
398
437
case ec_cs_connected: { set_last_string(connected_chainsetup()); break; }
399
438
case ec_cs_disconnect: { disconnect_chainsetup(); break; }
400
case ec_cs_set_param: { set_chainsetup_parameter(action_args_rep); break; }
401
case ec_cs_set_audio_format: { set_chainsetup_sample_format(action_args_rep); break; }
439
case ec_cs_set_param: { set_chainsetup_parameter(first_action_argument_as_string()); break; }
440
case ec_cs_set_audio_format: { set_chainsetup_sample_format(first_action_argument_as_string()); break; }
402
441
case ec_cs_status: {
403
442
set_last_string(chainsetup_status());
424
463
case ec_cs_toggle_loop: { toggle_chainsetup_looping(); break; }
425
464
case ec_cs_option:
427
vector<string> temp = kvu_string_to_tokens_quoted(action_args_rep);
428
selected_chainsetup_repp->interpret_options(temp);
466
selected_chainsetup_repp->interpret_options(action_arguments_as_vector());
429
467
if (selected_chainsetup_repp->interpret_result() != true) {
430
468
set_last_error(selected_chainsetup_repp->interpret_result_verbose());
438
case ec_c_add: { add_chains(kvu_string_to_vector(action_args_rep, ',')); break; }
476
case ec_c_add: { add_chains(kvu_string_to_vector(first_action_argument_as_string(), ',')); break; }
439
477
case ec_c_remove: { remove_chains(); break; }
440
478
case ec_c_list: { set_last_string_list(chain_names()); break; }
441
case ec_c_select: { select_chains(kvu_string_to_vector(action_args_rep, ',')); break; }
479
case ec_c_select: { select_chains(kvu_string_to_vector(first_action_argument_as_string(), ',')); break; }
442
480
case ec_c_selected: { set_last_string_list(selected_chains()); break; }
443
case ec_c_index_select: { select_chains_by_index(kvu_string_to_int_vector(action_args_rep, ',')); break; }
444
case ec_c_deselect: { deselect_chains(kvu_string_to_vector(action_args_rep, ',')); break; }
481
case ec_c_index_select: { select_chains_by_index(kvu_string_to_int_vector(first_action_argument_as_string(), ',')); break; }
482
case ec_c_deselect: { deselect_chains(kvu_string_to_vector(first_action_argument_as_string(), ',')); break; }
445
483
case ec_c_select_add:
447
select_chains(kvu_string_to_vector(action_args_rep + "," +
485
select_chains(kvu_string_to_vector(first_action_argument_as_string() + "," +
448
486
kvu_vector_to_string(selected_chains(), ","), ','));
484
522
// Audio input objects
486
case ec_ai_add: { add_audio_input(action_args_rep); break; }
524
case ec_ai_add: { add_audio_input(first_action_argument_as_string()); break; }
487
525
case ec_ai_describe: { set_last_string(ECA_OBJECT_FACTORY::audio_object_to_eos(selected_audio_input_repp, "i")); break; }
488
526
case ec_ai_remove: { remove_audio_input(); break; }
489
527
case ec_ai_list: { set_last_string_list(audio_input_names()); break; }
490
case ec_ai_select: { select_audio_input(action_args_rep); break; }
528
case ec_ai_select: { select_audio_input(first_action_argument_as_string()); break; }
491
529
case ec_ai_selected: { set_last_string(get_audio_input()->label()); break; }
492
530
case ec_ai_index_select: {
493
if (action_args_rep.size() > 0) {
494
select_audio_input_by_index(atoi(action_args_rep.c_str()));
531
if (first_action_argument_as_string().size() > 0) {
532
select_audio_input_by_index(first_action_argument_as_int());
528
566
// Audio output objects
530
case ec_ao_add: { if (action_args_rep.size() == 0) add_default_output(); else add_audio_output(action_args_rep); break; }
568
case ec_ao_add: { if (first_action_argument_as_string().size() == 0) add_default_output(); else add_audio_output(first_action_argument_as_string()); break; }
531
569
case ec_ao_add_default: { add_default_output(); break; }
532
570
case ec_ao_describe: { set_last_string(ECA_OBJECT_FACTORY::audio_object_to_eos(selected_audio_output_repp, "o")); break; }
533
571
case ec_ao_remove: { remove_audio_output(); break; }
534
572
case ec_ao_list: { set_last_string_list(audio_output_names()); break; }
535
case ec_ao_select: { select_audio_output(action_args_rep); break; }
573
case ec_ao_select: { select_audio_output(first_action_argument_as_string()); break; }
536
574
case ec_ao_selected: { set_last_string(get_audio_output()->label()); break; }
537
575
case ec_ao_index_select: {
538
if (action_args_rep.size() > 0) {
539
select_audio_output_by_index(atoi(action_args_rep.c_str()));
576
select_audio_output_by_index(first_action_argument_as_int());
543
579
case ec_ao_attach: { attach_audio_output(); break; }
580
616
case ec_cop_remove: { remove_chain_operator(); break; }
581
617
case ec_cop_list: { set_last_string_list(chain_operator_names()); break; }
582
case ec_cop_select: { select_chain_operator(atoi((action_args_rep).c_str())); break; }
618
case ec_cop_select: { select_chain_operator(first_action_argument_as_int()); break; }
583
619
case ec_cop_selected: { set_last_integer(selected_chain_operator()); break; }
586
vector<string> a = kvu_string_to_vector(action_args_rep, ',');
622
vector<string> a = kvu_string_to_vector(first_action_argument_as_string(), ',');
587
623
if (a.size() < 3) {
588
624
set_last_error("Not enough parameters!");
611
647
// Chain operator parameters
613
649
case ec_copp_list: { set_last_string_list(chain_operator_parameter_names()); break; }
614
case ec_copp_select: { select_chain_operator_parameter(atoi((action_args_rep).c_str())); break; }
650
case ec_copp_select: { select_chain_operator_parameter(first_action_argument_as_int()); break; }
615
651
case ec_copp_selected: { set_last_integer(selected_chain_operator_parameter()); break; }
616
652
case ec_copp_set: { set_chain_operator_parameter(first_action_argument_as_float()); break; }
617
653
case ec_copp_get: { set_last_float(get_chain_operator_parameter()); break; }
629
665
case ec_ctrl_remove: { remove_controller(); break; }
630
666
case ec_ctrl_list: { set_last_string_list(controller_names()); break; }
631
case ec_ctrl_select: { select_controller(atoi((action_args_rep).c_str())); break; }
667
case ec_ctrl_select: { select_controller(first_action_argument_as_int()); break; }
632
668
case ec_ctrl_selected: { set_last_integer(selected_controller()); break; }
633
669
case ec_ctrl_status:
641
677
// Controller parameters
643
679
case ec_ctrlp_list: { set_last_string_list(controller_parameter_names()); break; }
644
case ec_ctrlp_select: { select_controller_parameter(atoi((action_args_rep).c_str())); break; }
680
case ec_ctrlp_select: { select_controller_parameter(first_action_argument_as_int()); break; }
645
681
case ec_ctrlp_selected: { set_last_integer(selected_controller_parameter()); break; }
646
682
case ec_ctrlp_get: { set_last_float(get_controller_parameter()); break; }
647
683
case ec_ctrlp_set: { set_controller_parameter(first_action_argument_as_float()); break; }
674
710
wellformed_mode_rep = true;
677
case ec_int_set_float_to_string_precision: { set_float_to_string_precision(atoi(action_args_rep.c_str())); break; }
678
case ec_int_set_log_history_length: { ECA_LOGGER::instance().set_log_history_length(atoi(action_args_rep.c_str())); break; }
713
case ec_int_set_float_to_string_precision: { set_float_to_string_precision(first_action_argument_as_int()); break; }
714
case ec_int_set_log_history_length: { ECA_LOGGER::instance().set_log_history_length(first_action_argument_as_int()); break; }
679
715
case ec_int_version_string: { set_last_string(ecasound_library_version); break; }
680
716
case ec_int_version_lib_current: { set_last_integer(ecasound_library_version_current); break; }
681
717
case ec_int_version_lib_revision: { set_last_integer(ecasound_library_version_revision); break; }
687
case ec_dump_target: { ctrl_dump_rep.set_dump_target(action_args_rep); break; }
723
case ec_dump_target: { ctrl_dump_rep.set_dump_target(first_action_argument_as_string()); break; }
688
724
case ec_dump_status: { ctrl_dump_rep.dump_status(); break; }
689
725
case ec_dump_position: { ctrl_dump_rep.dump_position(); break; }
690
726
case ec_dump_length: { ctrl_dump_rep.dump_length(); break; }
700
736
case ec_dump_ao_open_state: { ctrl_dump_rep.dump_audio_output_open_state(); break; }
701
737
case ec_dump_cop_value:
703
vector<string> temp = kvu_string_to_tokens_quoted(action_args_rep);
739
vector<string> temp = kvu_string_to_vector(first_action_argument_as_string(), ',');
704
740
if (temp.size() > 1) {
705
741
ctrl_dump_rep.dump_chain_operator_value(atoi(temp[0].c_str()),
706
742
atoi(temp[1].c_str()));
748
// Commands with external dependencies
751
case ec_jack_connect:
753
const vector<string>& params = action_arguments_as_vector();
754
if (params.size() >= 2)
755
JACK_CONNECTIONS::connect(params[0].c_str(), params[1].c_str());
758
case ec_jack_disconnect:
760
const vector<string>& params = action_arguments_as_vector();
761
if (params.size() >= 2)
762
JACK_CONNECTIONS::disconnect(params[0].c_str(), params[1].c_str());
765
case ec_jack_list_connections:
768
if (JACK_CONNECTIONS::list_connections(&foo) == true)
769
set_last_string(foo);
771
set_last_error("Unable to a list of JACK connections.");
710
776
} // <-- switch-case
712
779
if (action_reconnect == true) {
713
780
if (is_selected() == false ||
714
781
is_valid() == false) {
780
847
vector<CHAIN*>::const_iterator chain_citer;
782
result += "\n -> Objects: " + kvu_numtostr(cs->inputs.size());
849
result += "\n -> Objects..: " + kvu_numtostr(cs->inputs.size());
783
850
result += " inputs, " + kvu_numtostr(cs->outputs.size());
784
851
result += " outputs, " + kvu_numtostr(cs->chains.size());
785
852
result += " chains";
787
854
// FIXME: add explanations on why the chainsetup cannot be
857
result += "\n -> State....: ";
790
859
if (cs->is_locked()) {
791
result += "\n -> State: connected to engine (engine status: ";
860
result += "connected to engine (engine status: ";
792
861
result += engine_status() + ")";
794
863
else if (cs->is_enabled() && is_engine_started() == true) {
795
result += "\n -> State: connected (engine status: ";
864
result += "connected (engine status: ";
796
865
result += engine_status() + ")";
798
867
else if (cs->is_enabled())
799
result += "\n -> State: connected (engine not yet running)";
868
result += "connected (engine not yet running)";
800
869
else if (cs->is_valid())
801
result += "\n -> State: valid (can be connected)";
870
result += "valid (can be connected)";
803
result += "\n -> State: not valid (cannot be connected)";
872
result += "not valid (cannot be connected)";
805
result += "\n -> Position: ";
874
result += "\n -> Position.: ";
806
875
result += kvu_numtostr(cs->position_in_seconds_exact(), 3);
808
877
if (cs->length_set())