diff --git a/src/mad_select.c b/src/mad_select.c index 3f8f7b28c..a8f902646 100644 --- a/src/mad_select.c +++ b/src/mad_select.c @@ -109,7 +109,7 @@ pass_select(const char* name, struct command* sc) /* Don't use for selecting elements. It may not find all elements. */ { struct element* el = find_element(strip(name), element_list); - return el ? pass_select_el(el, sc) : pass_select_str(name, sc); + return el ? pass_select_el(el, sc) : pass_select_str(name, NULL, sc); } int @@ -126,14 +126,14 @@ pass_select_el(struct element* el, struct command* sc) return _pass_select_pat(el->name, sc); } -int pass_select_str(const char* name, struct command* sc) +int pass_select_str(const char* name, const char* class, struct command* sc) { /* checks name against pattern that may (but need not) be contained in command sc; - considers only SELECT commands *without CLASS*! + considers only SELECT commands with the given class! 0: does not pass, 1: passes */ - // if the command has CLASS attribute, it is supposed to match elements: - if (par_present("class", sc)) /* parameter has been read */ + char* selected_class = command_par_string_user("class", sc); + if (selected_class && class && strcmp(selected_class, class) != 0) return 0; return _pass_select_pat(name, sc); } @@ -146,12 +146,12 @@ int _pass_select_pat(const char* name, struct command* sc) } int -pass_select_list_str(const char* name, struct command_list* cl) +pass_select_list_str(const char* name, const char* class, struct command_list* cl) /* returns 0 (does not pass) or 1 (passes) for a list of selects */ /* Don't use for selecting elements! It may not find all elements. */ { for (int i = 0; i < cl->curr; i++) { - if (pass_select_str(name, cl->commands[i])) + if (pass_select_str(name, class, cl->commands[i])) return 1; } return cl->curr == 0; diff --git a/src/mad_select.h b/src/mad_select.h index 492cfcf3f..c0c856666 100644 --- a/src/mad_select.h +++ b/src/mad_select.h @@ -19,9 +19,9 @@ struct element; void store_select(struct in_cmd*); void store_deselect(struct in_cmd*); int pass_select(const char* name, struct command*); // deprecated -int pass_select_str(const char* name, struct command*); // not for elements! +int pass_select_str(const char* name, const char* class_, struct command*); // not for elements! int pass_select_el(struct element* el, struct command*); -int pass_select_list_str(const char* name, struct command_list*); // not for elements! +int pass_select_list_str(const char* name, const char* class_, struct command_list*); // not for elements! int pass_select_list_el(struct element* el, struct command_list*); void get_select_t_ranges(struct command_list* select, struct command_list* deselect, struct table*); int get_select_ranges(struct sequence* sequ, struct command_list* select, struct node_list* s_ranges); diff --git a/src/mad_seq.c b/src/mad_seq.c index e15e17b49..8cea625c4 100644 --- a/src/mad_seq.c +++ b/src/mad_seq.c @@ -750,7 +750,7 @@ export_sequ_8(struct sequence* sequ, struct command_list* cl, FILE* file) seqref = sequ->ref_flag; /* uncomment line to get entry or exit */ - if (pass_select_list_str(sequ->name, cl) == 0) return; + if (pass_select_list_str(sequ->name, "sequence", cl) == 0) return; *c_dum->c = '\0'; strcat(c_dum->c, sequ->export_name); @@ -816,7 +816,7 @@ write_sequs(struct sequence_list* sql,struct command_list* cl, FILE* file, int n for (i = 0; i < sql->curr; i++) if(sql->sequs[i]->nested == j) { - if (pass_select_list_str(sql->sequs[i]->name, cl)) + if (pass_select_list_str(sql->sequs[i]->name, "sequence", cl)) export_sequence(sql->sequs[i], file, noexpr); } } diff --git a/src/mad_var.c b/src/mad_var.c index 400b49474..48db37411 100644 --- a/src/mad_var.c +++ b/src/mad_var.c @@ -253,7 +253,8 @@ void write_vars(struct var_list* varl, struct command_list* cl, FILE* file, int noexpr) { for (int i = 0; i < varl->curr; i++) { - if (predef_var(varl->vars[i]) == 0 && pass_select_list_str(varl->vars[i]->name, cl)) + if (predef_var(varl->vars[i]) == 0 && + pass_select_list_str(varl->vars[i]->name, "variable", cl)) export_variable(varl->vars[i], file, noexpr); } } @@ -265,7 +266,7 @@ write_vars_8(struct var_list* varl, struct command_list* cl, FILE* file) for (i = 0; i < varl->curr; i++) { if (predef_var(varl->vars[i]) == 0 - && pass_select_list_str(varl->vars[i]->name, cl)) + && pass_select_list_str(varl->vars[i]->name, "variable", cl)) export_var_8(varl->vars[i], file); } }