101 |
return atoi(d2)*8*8 + atoi(d1)*8 + atoi(d0); |
return atoi(d2)*8*8 + atoi(d1)*8 + atoi(d0); |
102 |
} |
} |
103 |
|
|
|
int hexToNumber(char hex_digit) { |
|
|
switch (hex_digit) { |
|
|
case '0': return 0; |
|
|
case '1': return 1; |
|
|
case '2': return 2; |
|
|
case '3': return 3; |
|
|
case '4': return 4; |
|
|
case '5': return 5; |
|
|
case '6': return 6; |
|
|
case '7': return 7; |
|
|
case '8': return 8; |
|
|
case '9': return 9; |
|
|
// grammar rule 'digit_hex' already forced lower case |
|
|
case 'a': return 10; |
|
|
case 'b': return 11; |
|
|
case 'c': return 12; |
|
|
case 'd': return 13; |
|
|
case 'e': return 14; |
|
|
case 'f': return 15; |
|
|
default: return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
int hexsToNumber(char hex_digit0, char hex_digit1 = '0') { |
|
|
return hexToNumber(hex_digit1)*16 + hexToNumber(hex_digit0); |
|
|
} |
|
|
|
|
104 |
%} |
%} |
105 |
|
|
106 |
// reentrant parser |
// reentrant parser |
114 |
%type <Char> char char_base digit digit_oct digit_hex escape_seq escape_seq_octal escape_seq_hex |
%type <Char> char char_base digit digit_oct digit_hex escape_seq escape_seq_octal escape_seq_hex |
115 |
%type <Dotnum> dotnum volume_value boolean |
%type <Dotnum> dotnum volume_value boolean |
116 |
%type <Number> number sampler_channel instrument_index fx_send_id audio_channel_index device_index midi_input_channel_index midi_input_port_index midi_map midi_bank midi_prog midi_ctrl |
%type <Number> number sampler_channel instrument_index fx_send_id audio_channel_index device_index midi_input_channel_index midi_input_port_index midi_map midi_bank midi_prog midi_ctrl |
117 |
%type <String> string string_escaped text text_escaped raw_path_base stringval raw_path digits param_val_list param_val query_val filename db_path map_name entry_name fx_send_name engine_name command add_instruction create_instruction destroy_instruction get_instruction list_instruction load_instruction set_chan_instruction load_instr_args load_engine_args audio_output_type_name midi_input_type_name remove_instruction unmap_instruction set_instruction subscribe_event unsubscribe_event map_instruction reset_instruction clear_instruction find_instruction move_instruction copy_instruction scan_mode edit_instruction format_instruction |
%type <String> string string_escaped text text_escaped text_escaped_base stringval stringval_escaped digits param_val_list param_val query_val filename db_path map_name entry_name fx_send_name engine_name command add_instruction create_instruction destroy_instruction get_instruction list_instruction load_instruction set_chan_instruction load_instr_args load_engine_args audio_output_type_name midi_input_type_name remove_instruction unmap_instruction set_instruction subscribe_event unsubscribe_event map_instruction reset_instruction clear_instruction find_instruction move_instruction copy_instruction scan_mode edit_instruction format_instruction |
118 |
%type <FillResponse> buffer_size_type |
%type <FillResponse> buffer_size_type |
119 |
%type <KeyValList> key_val_list query_val_list |
%type <KeyValList> key_val_list query_val_list |
120 |
%type <LoadMode> instr_load_mode |
%type <LoadMode> instr_load_mode |
309 |
| FX_SEND SP AUDIO_OUTPUT_CHANNEL SP sampler_channel SP fx_send_id SP audio_channel_index SP audio_channel_index { $$ = LSCPSERVER->SetFxSendAudioOutputChannel($5,$7,$9,$11); } |
| FX_SEND SP AUDIO_OUTPUT_CHANNEL SP sampler_channel SP fx_send_id SP audio_channel_index SP audio_channel_index { $$ = LSCPSERVER->SetFxSendAudioOutputChannel($5,$7,$9,$11); } |
310 |
| FX_SEND SP MIDI_CONTROLLER SP sampler_channel SP fx_send_id SP midi_ctrl { $$ = LSCPSERVER->SetFxSendMidiController($5,$7,$9); } |
| FX_SEND SP MIDI_CONTROLLER SP sampler_channel SP fx_send_id SP midi_ctrl { $$ = LSCPSERVER->SetFxSendMidiController($5,$7,$9); } |
311 |
| FX_SEND SP LEVEL SP sampler_channel SP fx_send_id SP volume_value { $$ = LSCPSERVER->SetFxSendLevel($5,$7,$9); } |
| FX_SEND SP LEVEL SP sampler_channel SP fx_send_id SP volume_value { $$ = LSCPSERVER->SetFxSendLevel($5,$7,$9); } |
312 |
| DB_INSTRUMENT_DIRECTORY SP NAME SP db_path SP raw_path { $$ = LSCPSERVER->SetDbInstrumentDirectoryName($5,$7); } |
| DB_INSTRUMENT_DIRECTORY SP NAME SP db_path SP stringval_escaped { $$ = LSCPSERVER->SetDbInstrumentDirectoryName($5,$7); } |
313 |
| DB_INSTRUMENT_DIRECTORY SP DESCRIPTION SP db_path SP raw_path { $$ = LSCPSERVER->SetDbInstrumentDirectoryDescription($5,$7); } |
| DB_INSTRUMENT_DIRECTORY SP DESCRIPTION SP db_path SP stringval_escaped { $$ = LSCPSERVER->SetDbInstrumentDirectoryDescription($5,$7); } |
314 |
| DB_INSTRUMENT SP NAME SP db_path SP raw_path { $$ = LSCPSERVER->SetDbInstrumentName($5,$7); } |
| DB_INSTRUMENT SP NAME SP db_path SP stringval_escaped { $$ = LSCPSERVER->SetDbInstrumentName($5,$7); } |
315 |
| DB_INSTRUMENT SP DESCRIPTION SP db_path SP raw_path { $$ = LSCPSERVER->SetDbInstrumentDescription($5,$7); } |
| DB_INSTRUMENT SP DESCRIPTION SP db_path SP stringval_escaped { $$ = LSCPSERVER->SetDbInstrumentDescription($5,$7); } |
316 |
| ECHO SP boolean { $$ = LSCPSERVER->SetEcho((yyparse_param_t*) yyparse_param, $3); } |
| ECHO SP boolean { $$ = LSCPSERVER->SetEcho((yyparse_param_t*) yyparse_param, $3); } |
317 |
| VOLUME SP volume_value { $$ = LSCPSERVER->SetGlobalVolume($3); } |
| VOLUME SP volume_value { $$ = LSCPSERVER->SetGlobalVolume($3); } |
318 |
; |
; |
470 |
db_path : path { $$ = $1.toDbPath(); } |
db_path : path { $$ = $1.toDbPath(); } |
471 |
; |
; |
472 |
|
|
473 |
map_name : stringval |
map_name : stringval_escaped |
474 |
; |
; |
475 |
|
|
476 |
entry_name : raw_path |
entry_name : stringval_escaped |
477 |
; |
; |
478 |
|
|
479 |
fx_send_name : stringval |
fx_send_name : stringval_escaped |
480 |
; |
; |
481 |
|
|
482 |
param_val_list : param_val |
param_val_list : param_val |
494 |
| query_val_list SP string '=' query_val { $$ = $1; $$[$3] = $5; } |
| query_val_list SP string '=' query_val { $$ = $1; $$[$3] = $5; } |
495 |
; |
; |
496 |
|
|
497 |
query_val : raw_path_base |
query_val : text_escaped |
498 |
| raw_path |
| stringval_escaped |
499 |
; |
; |
500 |
|
|
501 |
scan_mode : RECURSIVE { $$ = "RECURSIVE"; } |
scan_mode : RECURSIVE { $$ = "RECURSIVE"; } |
584 |
| '\"' path_base '\"' { $$ = $2; } |
| '\"' path_base '\"' { $$ = $2; } |
585 |
; |
; |
586 |
|
|
587 |
path_base : '/' { $$ = Path(); } |
path_base : '/' { $$ = Path(); } |
588 |
| path_base '/' { $$ = $1; } |
| path_base '/' { $$ = $1; } |
589 |
| path_base text_escaped { Path p; p.appendNode($2); $$ = $1 + p; } |
| path_base text_escaped_base { Path p; p.appendNode($2); $$ = $1 + p; } |
590 |
; |
; |
591 |
|
|
592 |
stringval : '\'' text '\'' { $$ = $2; } |
stringval : '\'' text '\'' { $$ = $2; } |
593 |
| '\"' text '\"' { $$ = $2; } |
| '\"' text '\"' { $$ = $2; } |
594 |
; |
; |
595 |
|
|
596 |
raw_path : '\'' raw_path_base '\'' { $$ = $2; } |
stringval_escaped : '\'' text_escaped '\'' { $$ = $2; } |
597 |
| '\"' raw_path_base '\"' { $$ = $2; } |
| '\"' text_escaped '\"' { $$ = $2; } |
598 |
; |
; |
599 |
|
|
600 |
text : SP { $$ = " "; } |
text : SP { $$ = " "; } |
603 |
| text string { $$ = $1 + $2; } |
| text string { $$ = $1 + $2; } |
604 |
; |
; |
605 |
|
|
606 |
text_escaped : SP { $$ = " "; } |
// like text_escaped, but missing the slash ('/') character |
607 |
|
text_escaped_base : SP { $$ = " "; } |
608 |
| string_escaped |
| string_escaped |
609 |
| text_escaped SP { $$ = $1 + " "; } |
| text_escaped_base SP { $$ = $1 + " "; } |
610 |
| text_escaped string_escaped { $$ = $1 + $2; } |
| text_escaped_base string_escaped { $$ = $1 + $2; } |
611 |
; |
; |
612 |
|
|
613 |
raw_path_base : '/' { $$ = "/"; } |
text_escaped : '/' { $$ = "/"; } |
614 |
| text_escaped |
| text_escaped_base |
615 |
| raw_path_base '/' { $$ = $1 + "/"; } |
| text_escaped '/' { $$ = $1 + "/"; } |
616 |
| raw_path_base text_escaped { $$ = $1 + $2; } |
| text_escaped text_escaped_base { $$ = $1 + $2; } |
617 |
; |
; |
618 |
|
|
619 |
string : char { std::string s; s = $1; $$ = s; } |
string : char { std::string s; s = $1; $$ = s; } |