1 // ------------------------------------------------------------------------
2 // eca-iamode-parser.cpp: Class that handles registering and querying
3 // interactive mode commands.
4 // Copyright (C) 1999-2005,2008,2012 Kai Vehmanen
5 // Copyright (C) 2005 Stuart Allie
6 //
7 // Attributes:
8 // eca-style-version: 3 (see Ecasound Programmer's Guide)
9 //
10 // This program is free software; you can redistribute it and/or modify
11 // it under the terms of the GNU General Public License as published by
12 // the Free Software Foundation; either version 2 of the License, or
13 // (at your option) any later version.
14 //
15 // This program is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with this program; if not, write to the Free Software
22 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 // ------------------------------------------------------------------------
24
25 #ifdef HAVE_CONFIG_H
26 #include <config.h>
27 #endif
28
29 #include <map>
30 #include <vector>
31 #include <string>
32 #include <pthread.h>
33
34 #include "kvu_message_item.h"
35 #include "kvu_locks.h"
36
37 #include "eca-iamode-parser.h"
38 #include "eca-logger.h"
39
40 using namespace std;
41
42 map<string,int>* ECA_IAMODE_PARSER::cmd_map_repp = 0;
43 pthread_mutex_t ECA_IAMODE_PARSER::lock_rep = PTHREAD_MUTEX_INITIALIZER;
44
ECA_IAMODE_PARSER(void)45 ECA_IAMODE_PARSER::ECA_IAMODE_PARSER(void)
46 {
47 }
48
~ECA_IAMODE_PARSER(void)49 ECA_IAMODE_PARSER::~ECA_IAMODE_PARSER(void)
50 {
51 }
52
registered_commands(void)53 const map<string,int>& ECA_IAMODE_PARSER::registered_commands(void)
54 {
55 //
56 // Note! Below we use the Double-Checked Locking Pattern
57 // to protect against concurrent access
58
59 if (cmd_map_repp == 0) {
60 KVU_GUARD_LOCK guard(&ECA_IAMODE_PARSER::lock_rep);
61 if (cmd_map_repp == 0) {
62 cmd_map_repp = new map<string,int>;
63 register_commands_misc();
64 register_commands_cs();
65 register_commands_c();
66 register_commands_aio();
67 register_commands_ai();
68 register_commands_ao();
69 register_commands_cop();
70 register_commands_copp();
71 register_commands_ctrl();
72 register_commands_ctrlp();
73 register_commands_dump();
74 register_commands_external();
75 }
76 }
77 return *cmd_map_repp;
78 }
79
registered_commands_list(void)80 vector<string> ECA_IAMODE_PARSER::registered_commands_list(void)
81 {
82 vector<string> cmdlist;
83 const map<string,int>& map_ref = ECA_IAMODE_PARSER::registered_commands();
84 map<string,int>::const_iterator p = map_ref.begin();
85 while (p != map_ref.end()) {
86 cmdlist.push_back(p->first);
87 ++p;
88 }
89 return cmdlist;
90 }
91
register_commands_misc(void)92 void ECA_IAMODE_PARSER::register_commands_misc(void)
93 {
94 (*cmd_map_repp)["help"] = ec_help;
95 (*cmd_map_repp)["?"] = ec_help;
96 (*cmd_map_repp)["h"] = ec_help;
97
98 (*cmd_map_repp)["quit"] = ec_exit;
99 (*cmd_map_repp)["q"] = ec_exit;
100
101 (*cmd_map_repp)["start"] = ec_start;
102 (*cmd_map_repp)["t"] = ec_start;
103 (*cmd_map_repp)["stop"] = ec_stop;
104 (*cmd_map_repp)["s"] = ec_stop;
105 (*cmd_map_repp)["stop-sync"] = ec_stop_sync;
106 (*cmd_map_repp)["run"] = ec_run;
107
108 (*cmd_map_repp)["debug"] = ec_debug;
109 (*cmd_map_repp)["resource-file"] = ec_resource_file;
110
111 (*cmd_map_repp)["engine-launch"] = ec_engine_launch;
112 (*cmd_map_repp)["engine-halt"] = ec_engine_halt;
113 (*cmd_map_repp)["engine-status"] = ec_engine_status;
114
115 (*cmd_map_repp)["status"] = ec_cs_status;
116 (*cmd_map_repp)["st"] = ec_cs_status;
117 (*cmd_map_repp)["cs"] = ec_c_status;
118 (*cmd_map_repp)["es"] = ec_cop_status;
119 (*cmd_map_repp)["fs"] = ec_aio_status;
120
121 (*cmd_map_repp)["int-cmd-list"] = ec_int_cmd_list;
122 (*cmd_map_repp)["int-log-history"] = ec_int_log_history;
123 (*cmd_map_repp)["int-output-mode-wellformed"] = ec_int_output_mode_wellformed;
124 (*cmd_map_repp)["int-set-float-to-string-precision"] = ec_int_set_float_to_string_precision;
125 (*cmd_map_repp)["int-set-log-history-length"] = ec_int_set_log_history_length;
126
127 (*cmd_map_repp)["int-version-string"] = ec_int_version_string;
128 (*cmd_map_repp)["int-version-lib-current"] = ec_int_version_lib_current;
129 (*cmd_map_repp)["int-version-lib-revision"] = ec_int_version_lib_revision;
130 (*cmd_map_repp)["int-version-lib-age"] = ec_int_version_lib_age;
131
132 (*cmd_map_repp)["preset-register"] = ec_preset_register;
133 (*cmd_map_repp)["ladspa-register"] = ec_ladspa_register;
134 (*cmd_map_repp)["lv2-register"] = ec_lv2_register;
135
136 (*cmd_map_repp)["map-cop-list"] = ec_map_cop_list;
137 (*cmd_map_repp)["map-preset-list"] = ec_map_preset_list;
138 (*cmd_map_repp)["map-ladspa-list"] = ec_map_ladspa_list;
139 (*cmd_map_repp)["map-ladspa-id-list"] = ec_map_ladspa_id_list;
140 (*cmd_map_repp)["map-lv2-list"] = ec_map_lv2_list;
141 (*cmd_map_repp)["map-ctrl-list"] = ec_map_ctrl_list;
142 }
143
register_commands_cs(void)144 void ECA_IAMODE_PARSER::register_commands_cs(void)
145 {
146 (*cmd_map_repp)["cs-add"] = ec_cs_add;
147 (*cmd_map_repp)["cs-remove"] = ec_cs_remove;
148 (*cmd_map_repp)["cs-list"] = ec_cs_list;
149 (*cmd_map_repp)["cs-select"] = ec_cs_select;
150 (*cmd_map_repp)["cs-selected"] = ec_cs_selected;
151 (*cmd_map_repp)["cs-index-select"] = ec_cs_index_select;
152 (*cmd_map_repp)["cs-iselect"] = ec_cs_index_select;
153 (*cmd_map_repp)["cs-load"] = ec_cs_load;
154 (*cmd_map_repp)["cs-save"] = ec_cs_save;
155 (*cmd_map_repp)["cs-save-as"] = ec_cs_save_as;
156 (*cmd_map_repp)["cs-edit"] = ec_cs_edit;
157 (*cmd_map_repp)["cs-is-valid"] = ec_cs_is_valid;
158 (*cmd_map_repp)["cs-connect"] = ec_cs_connect;
159 (*cmd_map_repp)["cs-connected"] = ec_cs_connected;
160 (*cmd_map_repp)["cs-disconnect"] = ec_cs_disconnect;
161 (*cmd_map_repp)["cs-set-param"] = ec_cs_set_param;
162 (*cmd_map_repp)["cs-set-audio-format"] = ec_cs_set_audio_format;
163 (*cmd_map_repp)["cs-status"] = ec_cs_status;
164 (*cmd_map_repp)["cs-rewind"] = ec_cs_rewind;
165 (*cmd_map_repp)["rewind"] = ec_cs_rewind;
166 (*cmd_map_repp)["rw"] = ec_cs_rewind;
167 (*cmd_map_repp)["cs-forward"] = ec_cs_forward;
168 (*cmd_map_repp)["forward"] = ec_cs_forward;
169 (*cmd_map_repp)["fw"] = ec_cs_forward;
170 (*cmd_map_repp)["cs-setpos"] = ec_cs_set_position;
171 (*cmd_map_repp)["cs-set-position"] = ec_cs_set_position;
172 (*cmd_map_repp)["cs-set-position-samples"] = ec_cs_set_position_samples;
173 (*cmd_map_repp)["setpos"] = ec_cs_set_position;
174 (*cmd_map_repp)["set-position"] = ec_cs_set_position;
175 (*cmd_map_repp)["cs-getpos"] = ec_cs_get_position;
176 (*cmd_map_repp)["cs-get-position"] = ec_cs_get_position;
177 (*cmd_map_repp)["cs-get-position-samples"] = ec_cs_get_position_samples;
178 (*cmd_map_repp)["getpos"] = ec_cs_get_position;
179 (*cmd_map_repp)["get-position"] = ec_cs_get_position;
180 (*cmd_map_repp)["cs-get-length"] = ec_cs_get_length;
181 (*cmd_map_repp)["cs-get-length-samples"] = ec_cs_get_length_samples;
182 (*cmd_map_repp)["get-length"] = ec_cs_get_length;
183 (*cmd_map_repp)["cs-set-length"] = ec_cs_set_length;
184 (*cmd_map_repp)["cs-set-length-samples"] = ec_cs_set_length_samples;
185 (*cmd_map_repp)["cs-toggle-loop"] = ec_cs_toggle_loop;
186 (*cmd_map_repp)["cs-option"] = ec_cs_option;
187 }
188
register_commands_c(void)189 void ECA_IAMODE_PARSER::register_commands_c(void)
190 {
191 (*cmd_map_repp)["c-add"] = ec_c_add;
192 (*cmd_map_repp)["c-remove"] = ec_c_remove;
193 (*cmd_map_repp)["c-list"] = ec_c_list;
194 (*cmd_map_repp)["c-select"] = ec_c_select;
195 (*cmd_map_repp)["c-selected"] = ec_c_selected;
196 (*cmd_map_repp)["c-index-select"] = ec_c_index_select;
197 (*cmd_map_repp)["c-iselect"] = ec_c_index_select;
198 (*cmd_map_repp)["c-deselect"] = ec_c_deselect;
199 (*cmd_map_repp)["c-selected"] = ec_c_selected;
200 (*cmd_map_repp)["c-select-all"] = ec_c_select_all;
201 (*cmd_map_repp)["c-select-add"] = ec_c_select_add;
202 (*cmd_map_repp)["c-clear"] = ec_c_clear;
203 (*cmd_map_repp)["c-rename"] = ec_c_rename;
204 (*cmd_map_repp)["c-muting"] = ec_c_muting;
205 (*cmd_map_repp)["c-mute"] = ec_c_muting;
206 (*cmd_map_repp)["c-bypass"] = ec_c_bypass;
207 (*cmd_map_repp)["c-status"] = ec_c_status;
208 (*cmd_map_repp)["c-is-muted"] = ec_c_is_muted;
209 (*cmd_map_repp)["c-is-bypassed"] = ec_c_is_bypassed;
210 }
211
register_commands_aio(void)212 void ECA_IAMODE_PARSER::register_commands_aio(void)
213 {
214 (*cmd_map_repp)["aio-register"] = ec_aio_register;
215 (*cmd_map_repp)["aio-status"] = ec_aio_status;
216 }
217
register_commands_ai(void)218 void ECA_IAMODE_PARSER::register_commands_ai(void)
219 {
220 (*cmd_map_repp)["ai-add"] = ec_ai_add;
221 (*cmd_map_repp)["ai-describe"] = ec_ai_describe;
222 (*cmd_map_repp)["ai-remove"] = ec_ai_remove;
223 (*cmd_map_repp)["ai-list"] = ec_ai_list;
224 (*cmd_map_repp)["ai-select"] = ec_ai_select;
225 (*cmd_map_repp)["ai-index-select"] = ec_ai_index_select;
226 (*cmd_map_repp)["ai-iselect"] = ec_ai_index_select;
227 (*cmd_map_repp)["ai-selected"] = ec_ai_selected;
228 (*cmd_map_repp)["ai-attach"] = ec_ai_attach;
229 (*cmd_map_repp)["ai-status"] = ec_ai_status;
230 (*cmd_map_repp)["ai-forward"] = ec_ai_forward;
231 (*cmd_map_repp)["ai-rewind"] = ec_ai_rewind;
232 (*cmd_map_repp)["ai-setpos"] = ec_ai_set_position;
233 (*cmd_map_repp)["ai-set-position"] = ec_ai_set_position;
234 (*cmd_map_repp)["ai-set-position-samples"] = ec_ai_set_position_samples;
235 (*cmd_map_repp)["ai-getpos"] = ec_ai_get_position;
236 (*cmd_map_repp)["ai-get-position"] = ec_ai_get_position;
237 (*cmd_map_repp)["ai-get-position-samples"] = ec_ai_get_position_samples;
238 (*cmd_map_repp)["ai-get-length"] = ec_ai_get_length;
239 (*cmd_map_repp)["ai-get-length-samples"] = ec_ai_get_length_samples;
240 (*cmd_map_repp)["ai-get-format"] = ec_ai_get_format;
241 (*cmd_map_repp)["ai-wave-edit"] = ec_ai_wave_edit;
242 }
243
register_commands_ao(void)244 void ECA_IAMODE_PARSER::register_commands_ao(void)
245 {
246 (*cmd_map_repp)["ao-add"] = ec_ao_add;
247 (*cmd_map_repp)["ao-add-default"] = ec_ao_add_default;
248 (*cmd_map_repp)["ao-describe"] = ec_ao_describe;
249 (*cmd_map_repp)["ao-list"] = ec_ao_list;
250 (*cmd_map_repp)["ao-select"] = ec_ao_select;
251 (*cmd_map_repp)["ao-index-select"] = ec_ao_index_select;
252 (*cmd_map_repp)["ao-iselect"] = ec_ao_index_select;
253 (*cmd_map_repp)["ao-selected"] = ec_ao_selected;
254 (*cmd_map_repp)["ao-attach"] = ec_ao_attach;
255 (*cmd_map_repp)["ao-remove"] = ec_ao_remove;
256 (*cmd_map_repp)["ao-status"] = ec_ao_status;
257 (*cmd_map_repp)["ao-forward"] = ec_ao_forward;
258 (*cmd_map_repp)["ao-rewind"] = ec_ao_rewind;
259 (*cmd_map_repp)["ao-setpos"] = ec_ao_set_position;
260 (*cmd_map_repp)["ao-set-position"] = ec_ao_set_position;
261 (*cmd_map_repp)["ao-set-position-samples"] = ec_ao_set_position_samples;
262 (*cmd_map_repp)["ao-getpos"] = ec_ao_get_position;
263 (*cmd_map_repp)["ao-get-position"] = ec_ao_get_position;
264 (*cmd_map_repp)["ao-get-position-samples"] = ec_ao_get_position_samples;
265 (*cmd_map_repp)["ao-get-length"] = ec_ao_get_length;
266 (*cmd_map_repp)["ao-get-length-samples"] = ec_ao_get_length_samples;
267 (*cmd_map_repp)["ao-get-format"] = ec_ao_get_format;
268 (*cmd_map_repp)["ao-wave-edit"] = ec_ao_wave_edit;
269 }
270
register_commands_cop(void)271 void ECA_IAMODE_PARSER::register_commands_cop(void)
272 {
273 (*cmd_map_repp)["cop-add"] = ec_cop_add;
274 (*cmd_map_repp)["cop-bypass"] = ec_cop_bypass;
275 (*cmd_map_repp)["cop-describe"] = ec_cop_describe;
276 (*cmd_map_repp)["cop-remove"] = ec_cop_remove;
277 (*cmd_map_repp)["cop-list"] = ec_cop_list;
278 (*cmd_map_repp)["cop-select"] = ec_cop_select;
279 (*cmd_map_repp)["cop-index-select"] = ec_cop_select;
280 (*cmd_map_repp)["cop-iselect"] = ec_cop_select;
281 (*cmd_map_repp)["cop-is-bypassed"] = ec_cop_is_bypassed;
282 (*cmd_map_repp)["cop-register"] = ec_cop_register;
283 (*cmd_map_repp)["cop-selected"] = ec_cop_selected;
284 (*cmd_map_repp)["cop-set"] = ec_cop_set;
285 (*cmd_map_repp)["cop-get"] = ec_cop_get;
286 (*cmd_map_repp)["cop-status"] = ec_cop_status;
287 }
288
register_commands_copp(void)289 void ECA_IAMODE_PARSER::register_commands_copp(void)
290 {
291 (*cmd_map_repp)["copp-list"] = ec_copp_list;
292 (*cmd_map_repp)["copp-select"] = ec_copp_select;
293 (*cmd_map_repp)["copp-index-select"] = ec_copp_select;
294 (*cmd_map_repp)["copp-iselect"] = ec_copp_select;
295 (*cmd_map_repp)["copp-selected"] = ec_copp_selected;
296 (*cmd_map_repp)["copp-set"] = ec_copp_set;
297 (*cmd_map_repp)["copp-get"] = ec_copp_get;
298 }
299
register_commands_ctrl(void)300 void ECA_IAMODE_PARSER::register_commands_ctrl(void)
301 {
302 (*cmd_map_repp)["ctrl-add"] = ec_ctrl_add;
303 (*cmd_map_repp)["ctrl-describe"] = ec_ctrl_describe;
304 (*cmd_map_repp)["ctrl-remove"] = ec_ctrl_remove;
305 (*cmd_map_repp)["ctrl-list"] = ec_ctrl_list;
306 (*cmd_map_repp)["ctrl-select"] = ec_ctrl_select;
307 (*cmd_map_repp)["ctrl-index-select"] = ec_ctrl_select;
308 (*cmd_map_repp)["ctrl-iselect"] = ec_ctrl_select;
309 (*cmd_map_repp)["ctrl-register"] = ec_ctrl_register;
310 (*cmd_map_repp)["ctrl-selected"] = ec_ctrl_selected;
311 (*cmd_map_repp)["ctrl-status"] = ec_ctrl_status;
312 (*cmd_map_repp)["ctrl-get-target"] = ec_ctrl_get_target;
313 }
314
register_commands_ctrlp(void)315 void ECA_IAMODE_PARSER::register_commands_ctrlp(void)
316 {
317 (*cmd_map_repp)["ctrlp-list"] = ec_ctrlp_list;
318 (*cmd_map_repp)["ctrlp-select"] = ec_ctrlp_select;
319 (*cmd_map_repp)["ctrlp-selected"] = ec_ctrlp_selected;
320 (*cmd_map_repp)["ctrlp-get"] = ec_ctrlp_get;
321 (*cmd_map_repp)["ctrlp-set"] = ec_ctrlp_set;
322 }
323
register_commands_dump(void)324 void ECA_IAMODE_PARSER::register_commands_dump(void)
325 {
326 (*cmd_map_repp)["dump-target"] = ec_dump_target;
327 (*cmd_map_repp)["dump-status"] = ec_dump_status;
328 (*cmd_map_repp)["dump-position"] = ec_dump_position;
329 (*cmd_map_repp)["dump-length"] = ec_dump_length;
330 (*cmd_map_repp)["dump-cs-status"] = ec_dump_cs_status;
331 (*cmd_map_repp)["dump-c-selected"] = ec_dump_c_selected;
332 (*cmd_map_repp)["dump-ai-selected"] = ec_dump_ai_selected;
333 (*cmd_map_repp)["dump-ai-position"] = ec_dump_ai_position;
334 (*cmd_map_repp)["dump-ai-length"] = ec_dump_ai_length;
335 (*cmd_map_repp)["dump-ai-open-state"] = ec_dump_ai_open_state;
336 (*cmd_map_repp)["dump-ao-selected"] = ec_dump_ao_selected;
337 (*cmd_map_repp)["dump-ao-position"] = ec_dump_ao_position;
338 (*cmd_map_repp)["dump-ao-length"] = ec_dump_ao_length;
339 (*cmd_map_repp)["dump-ao-open-state"] = ec_dump_ao_open_state;
340 (*cmd_map_repp)["dump-cop-value"] = ec_dump_cop_value;
341 }
342
register_commands_external(void)343 void ECA_IAMODE_PARSER::register_commands_external(void)
344 {
345 #if ECA_COMPILE_JACK
346 (*cmd_map_repp)["jack-connect"] = ec_jack_connect;
347 (*cmd_map_repp)["jack-disconnect"] = ec_jack_disconnect;
348 (*cmd_map_repp)["jack-list-connections"] = ec_jack_list_connections;
349 #endif
350 }
351
command_to_action_id(const std::string & cmdstring)352 int ECA_IAMODE_PARSER::command_to_action_id(const std::string& cmdstring)
353 {
354 return (*cmd_map_repp)[cmdstring];
355 }
356
action_requires_params(int id)357 bool ECA_IAMODE_PARSER::action_requires_params(int id)
358 {
359 switch(id) {
360 case ec_debug:
361
362 case ec_cs_add:
363 case ec_cs_select:
364 case ec_cs_index_select:
365 case ec_cs_load:
366 case ec_cs_save_as:
367 case ec_cs_set_param:
368 case ec_cs_set_audio_format:
369 case ec_cs_set_length:
370 case ec_cs_set_length_samples:
371 case ec_cs_rewind:
372 case ec_cs_forward:
373 case ec_cs_set_position:
374 case ec_cs_option:
375
376 case ec_c_add:
377 case ec_c_select:
378 case ec_c_index_select:
379 case ec_c_deselect:
380 case ec_c_select_add:
381 case ec_c_rename:
382
383 case ec_ai_add:
384 case ec_ai_select:
385 case ec_ai_index_select:
386 case ec_ai_forward:
387 case ec_ai_rewind:
388 case ec_ai_set_position:
389 case ec_ai_set_position_samples:
390
391 case ec_ao_add:
392 case ec_ao_select:
393 case ec_ao_index_select:
394 case ec_ao_forward:
395 case ec_ao_rewind:
396 case ec_ao_set_position:
397 case ec_ao_set_position_samples:
398
399 case ec_cop_add:
400 case ec_cop_select:
401 case ec_cop_set:
402 case ec_cop_get:
403
404 case ec_copp_select:
405 case ec_copp_set:
406
407 case ec_ctrl_add:
408 case ec_ctrl_select:
409
410 case ec_int_set_float_to_string_precision:
411
412 case ec_dump_target:
413 case ec_dump_cop_value:
414
415 case ec_jack_connect:
416 case ec_jack_disconnect:
417
418 return true;
419
420 default:
421 break;
422 }
423 return false;
424 }
425
action_requires_connected(int id)426 bool ECA_IAMODE_PARSER::action_requires_connected(int id)
427 {
428 switch(id) {
429 case ec_engine_launch:
430 case ec_engine_halt:
431 case ec_start:
432 case ec_run:
433
434 case ec_cs_disconnect:
435 case ec_cs_set_position:
436 case ec_cs_set_position_samples:
437 return true;
438
439 default:
440 break;
441 }
442 return false;
443 }
444
action_requires_selected(int id)445 bool ECA_IAMODE_PARSER::action_requires_selected(int id)
446 {
447 switch(id) {
448
449 case ec_cs_remove:
450 case ec_cs_edit:
451 case ec_cs_is_valid:
452 case ec_cs_save:
453 case ec_cs_save_as:
454 case ec_cs_connect:
455 case ec_cs_set_param:
456 case ec_cs_rewind:
457 case ec_cs_forward:
458 case ec_cs_set_position:
459 case ec_cs_set_position_samples:
460 case ec_cs_get_position:
461 case ec_cs_get_position_samples:
462 case ec_cs_get_length:
463 case ec_cs_get_length_samples:
464 case ec_cs_set_length:
465 case ec_cs_set_length_samples:
466 case ec_cs_toggle_loop:
467 case ec_cs_option:
468
469 case ec_c_remove:
470 case ec_c_clear:
471 case ec_c_rename:
472 case ec_c_muting:
473 case ec_c_bypass:
474 case ec_c_status:
475 case ec_c_list:
476 case ec_c_select:
477 case ec_c_selected:
478
479 case ec_aio_status:
480
481 case ec_ai_add:
482 case ec_ai_select:
483 case ec_ai_selected:
484 case ec_ai_index_select:
485 case ec_ai_remove:
486 case ec_ai_attach:
487 case ec_ai_status:
488 case ec_ai_forward:
489 case ec_ai_rewind:
490 case ec_ai_set_position:
491 case ec_ai_set_position_samples:
492 case ec_ai_get_position:
493 case ec_ai_get_position_samples:
494 case ec_ai_get_length:
495 case ec_ai_get_length_samples:
496 case ec_ai_get_format:
497 case ec_ai_wave_edit:
498
499 case ec_ao_add:
500 case ec_ao_add_default:
501 case ec_ao_select:
502 case ec_ao_selected:
503 case ec_ao_index_select:
504 case ec_ao_remove:
505 case ec_ao_attach:
506 case ec_ao_status:
507 case ec_ao_forward:
508 case ec_ao_rewind:
509 case ec_ao_set_position:
510 case ec_ao_set_position_samples:
511 case ec_ao_get_position:
512 case ec_ao_get_position_samples:
513 case ec_ao_get_length:
514 case ec_ao_get_length_samples:
515 case ec_ao_get_format:
516 case ec_ao_wave_edit:
517
518 case ec_cop_add:
519 case ec_cop_bypass:
520 case ec_cop_is_bypassed:
521 case ec_cop_list:
522 case ec_cop_select:
523 case ec_cop_selected:
524 case ec_cop_set:
525 case ec_cop_get:
526 case ec_cop_status:
527
528 case ec_copp_list:
529 case ec_copp_select:
530 case ec_copp_selected:
531 case ec_copp_set:
532
533 case ec_ctrl_add:
534 case ec_ctrl_select:
535 case ec_ctrl_selected:
536 case ec_ctrl_status:
537
538 return true;
539
540 default: break;
541 }
542
543 return false;
544 }
545
action_requires_selected_not_connected(int id)546 bool ECA_IAMODE_PARSER::action_requires_selected_not_connected(int id)
547 {
548 switch(id) {
549 case ec_cs_remove:
550 case ec_cs_set_length:
551 case ec_cs_set_length_samples:
552 case ec_cs_toggle_loop:
553 case ec_cs_set_param:
554 case ec_cs_option:
555
556 case ec_c_add:
557 case ec_c_remove:
558 case ec_c_rename:
559 case ec_c_clear:
560
561 case ec_cop_remove:
562 case ec_ctrl_remove:
563
564 case ec_ai_add:
565 case ec_ai_remove:
566 case ec_ai_attach:
567 case ec_ai_forward:
568 case ec_ai_rewind:
569 case ec_ai_set_position:
570 case ec_ai_set_position_samples:
571 case ec_ai_wave_edit:
572
573 case ec_ao_add:
574 case ec_ao_add_default:
575 case ec_ao_remove:
576 case ec_ao_attach:
577 case ec_ao_forward:
578 case ec_ao_rewind:
579 case ec_ao_set_position:
580 case ec_ao_set_position_samples:
581 case ec_ao_wave_edit:
582
583 return true;
584
585 default:
586 break;
587 }
588 return false;
589
590 }
591
action_requires_selected_audio_input(int id)592 bool ECA_IAMODE_PARSER::action_requires_selected_audio_input(int id)
593 {
594 switch(id) {
595 case ec_ai_describe:
596 case ec_ai_remove:
597 case ec_ai_attach:
598 case ec_ai_forward:
599 case ec_ai_rewind:
600 case ec_ai_set_position:
601 case ec_ai_set_position_samples:
602 case ec_ai_get_position:
603 case ec_ai_get_position_samples:
604 case ec_ai_selected:
605 case ec_ai_get_length:
606 case ec_ai_get_length_samples:
607 case ec_ai_get_format:
608 case ec_ai_wave_edit:
609 return true;
610
611 default:
612 break;
613 }
614 return false;
615
616 }
617
action_requires_selected_audio_output(int id)618 bool ECA_IAMODE_PARSER::action_requires_selected_audio_output(int id)
619 {
620 switch(id) {
621 case ec_ao_describe:
622 case ec_ao_remove:
623 case ec_ao_attach:
624 case ec_ao_forward:
625 case ec_ao_rewind:
626 case ec_ao_set_position:
627 case ec_ao_set_position_samples:
628 case ec_ao_get_position:
629 case ec_ao_get_position_samples:
630 case ec_ao_selected:
631 case ec_ao_get_length:
632 case ec_ao_get_length_samples:
633 case ec_ao_get_format:
634 case ec_ao_wave_edit:
635 return true;
636
637 default:
638 break;
639 }
640 return false;
641
642 }
643
show_controller_help(void)644 void show_controller_help(void)
645 {
646 MESSAGE_ITEM mitem;
647
648 mitem << "\n-------------------------------------------------------------------";
649 mitem << "\n ecasound interactive-mode - command reference";
650 mitem << "\n-------------------------------------------------------------------";
651
652 mitem << "\n'q' - Quits ecasound";
653 mitem << "\n'start', 't' - Processing is started (play)";
654 mitem << "\n'stop', 's' - Stops processing";
655 mitem << "\n'rewind time-in-seconds', 'rw time-in-seconds' - Rewind";
656 mitem << "\n'forward time-in-seconds', 'fw time-in-seconds' - Forward";
657 mitem << "\n'setpos time-in-seconds' - Sets the current position to 'time-in-seconds' seconds from the beginning.";
658 mitem << "\n'engine-launch' - Initialize and start engine";
659 mitem << "\n'engine-status' - Engine status";
660 mitem << "\n'cs-status', 'st' - Chainsetup status";
661 mitem << "\n'c-status', 'cs' - Chain status";
662 mitem << "\n'cop-status', 'es' - Chain operator status";
663 mitem << "\n'ctrl-status' - Controller status";
664 mitem << "\n'aio-status', 'fs' - Audio input/output status";
665
666 mitem << "\n--- see ecasound-iam(1) manual page for more info -----------------\n";
667 // mitem << "\n'chain chainname', 'c chainname' - Enable/disable the the chain 'chainname'";
668
669 ECA_LOG_MSG(ECA_LOGGER::info, mitem.to_string());
670 }
671