3#ifndef PRINTLINES_ALLOWED
4#define PRINTLINES_ALLOWED 1
7static const char *FNAME =
"kest_dict_extract.c";
17 if (!param)
return NULL;
24 goto parameter_extract_abort;
39 goto parameter_extract_abort;
48 goto parameter_extract_abort;
56 goto parameter_extract_abort;
66 goto parameter_extract_abort;
76 goto parameter_extract_abort;
81 if (strcmp(str,
"linear") == 0 || strcmp(str,
"flat") == 0)
85 else if (strcmp(str,
"log") == 0 || strcmp(str,
"logarithmic") == 0
86 || strcmp(str,
"exp") == 0 || strcmp(str,
"exponential") == 0
87 || strcmp(str,
"freq") == 0 || strcmp(str,
"octave") == 0)
107 goto parameter_extract_abort;
115 if (strcmp(str,
"dial") == 0 || strcmp(str,
"potentiometer") == 0)
119 else if (strcmp(str,
"slider" ) == 0 || strcmp(str,
"slider_horizontal") == 0
120 || strcmp(str,
"hslider") == 0)
124 else if (strcmp(str,
"slider_vertical") == 0
125 || strcmp(str,
"vslider") == 0)
129 else if (strcmp(str,
"slider_tall_vertical") == 0 || strcmp(str,
"slider_vertical_tall") == 0
130 || strcmp(str,
"vslider_tall") == 0)
145 goto parameter_extract_abort;
164parameter_extract_abort:
176 if (!dict || !setting)
187 if (!dict || !setting)
198 if (strcmp(str,
"true") == 0)
202 else if (strcmp(str,
"false") != 0)
217 if (!dict || !setting)
288 if (!setting)
return NULL;
295 goto setting_extract_abort;
305 goto setting_extract_abort;
311 KEST_PRINTF(
"Obtained setting type; \"%s\"\n", str);
313 if (strcmp(str,
"enum") == 0)
317 else if (strcmp(str,
"bool") == 0)
321 else if (strcmp(str,
"int") == 0)
333 goto setting_extract_abort;
336 switch (setting->
type)
342 goto setting_extract_abort;
349 goto setting_extract_abort;
356 goto setting_extract_abort;
367 KEST_PRINTF(
"Obtained setting page; \"%s\"\n", str);
369 if (strcmp(str,
"main") == 0)
371 else if (strcmp(str,
"settings") == 0)
382 goto setting_extract_abort;
395setting_extract_abort:
480 KEST_PRINTF(
"Extracting coefficients for filter \"%s\"...\n", res->
name);
487 kest_dictionary_entry_list *coefs = NULL;
499 KEST_PRINTF(
"%d entries. begin traversal\n", coefs->count);
504 for (
int i = 0; i < coefs->count; i++)
525 kest_parser_error_at_node(ps, dict_node,
"Filter coefficients must be expressions, but coefficient %d of filter \"%s\" is a %s (%d).",
530 kest_expression_ptr_list_append(&filter->
coefs, coefs->entries[i].value.val_expr);
546 res->
data = (
void*)filter;
556 kest_expression_ptr_list *coefs = &filter->
coefs;
560 kest_parser_error_at_node(ps, dict_node,
"Filter \"%s\" is declared to be a biquad, but supplies %d coefficients, not 5.", res->
name, coefs->count);
566 for (
int i = 0; i < coefs->count; i++)
584 res->
data = (
void*)filter;
607 kest_parser_error_at_node(ps, dict_node,
"Filter \"%s\" has feed-back degree %d, which is higher than its coefficient count %d!",
622 kest_expression_ptr_list *coefs = &filter->
coefs;
624 for (
int i = 0; i < coefs->count; i++)
639 char *type_str = NULL;
642 if (!res)
return NULL;
649 goto resource_extract_abort;
653 if (ret_val !=
NO_ERROR || !type_str)
656 goto resource_extract_abort;
664 goto resource_extract_abort;
676 if (strcmp(type_str,
"biquad") == 0)
684resource_extract_abort:
void kest_free(void *ptr)
void * kest_alloc(size_t size)
char * kest_strndup(const char *str, size_t n)
int kest_dictionary_lookup_list(kest_dictionary *dict, const char *name, kest_dictionary_entry_list **result)
kest_string * kest_dict_entry_to_string(kest_dictionary_entry *entry)
int kest_dictionary_lookup_str(kest_dictionary *dict, const char *name, const char **result)
int kest_dictionary_lookup_expr(kest_dictionary *dict, const char *name, kest_expression **result)
const char * kest_dict_entry_type_to_string_nice(int type)
#define DICT_ENTRY_TYPE_EXPR
void kest_parser_warn_at_node(kest_eff_parsing_state *ps, kest_ast_node *node, const char *msg,...)
void kest_parser_error_at_node(kest_eff_parsing_state *ps, kest_ast_node *node, const char *msg,...)
int kest_expression_is_constant(kest_expression *expr)
char * kest_expression_type_to_str(int type)
const char * kest_expression_to_string(kest_expression *expr)
float kest_expression_evaluate(kest_expression *expr, kest_expr_scope *scope)
int init_parameter_str(kest_parameter *param)
void gut_setting(kest_setting *setting)
int init_setting_str(kest_setting *setting)
void gut_parameter(kest_parameter *param)
#define PARAMETER_SCALE_LINEAR
#define PARAMETER_SCALE_LOGARITHMIC
#define TRANSFORMER_SETTING_BOOL
#define TRANSFORMER_SETTING_ENUM
#define TRANSFORMER_SETTING_PAGE_SETTINGS
#define TRANSFORMER_SETTING_PAGE_MAIN
#define TRANSFORMER_SETTING_INT
int kest_init_dsp_resource(kest_dsp_resource *res)
kest_filter * kest_filter_create(kest_allocator *alloc)
int string_to_resource_type(const char *type_str)
#define KEST_DSP_RESOURCE_MEM
#define KEST_DSP_RESOURCE_FILTER
#define KEST_DSP_RESOURCE_NOTHING
#define KEST_DSP_RESOURCE_DELAY
char * kest_string_to_native(kest_string *string)
int kest_string_destroy(kest_string *string)
struct kest_expression * size
struct kest_expression * delay
struct kest_expression_ptr_list coefs
struct kest_expression * min_expr
const char * name_internal
struct kest_expression * max_expr
const char * name_internal