bool gt_script_filter_validate(GtScriptFilter *script_filter, GtError *err) { const char *result; #ifndef NDEBUG GT_UNUSED int stack_size; #endif gt_assert(script_filter); gt_error_check(err); #ifndef NDEBUG stack_size = lua_gettop(script_filter->L); #endif result = gt_script_filter_get_name(script_filter, err); if (result == gt_symbol("undefined")) { gt_error_set(err, "metadata 'name' not found"); return false; } result = gt_script_filter_get_description(script_filter, err); if (result == gt_symbol("undefined")) { gt_error_set(err, "metadata 'description' not found"); return false; } result = gt_script_filter_get_short_description(script_filter, err); if (result == gt_symbol("undefined")) { gt_error_set(err, "metadata 'short_descr' not found"); return false; } result = gt_script_filter_get_author(script_filter, err); if (result == gt_symbol("undefined")) { gt_error_set(err, "metadata 'author' not found"); return false; } result = gt_script_filter_get_email(script_filter, err); if (result == gt_symbol("undefined")) { gt_error_set(err, "metadata 'email' not found"); return false; } result = gt_script_filter_get_version(script_filter, err); if (result == gt_symbol("undefined")) { gt_error_set(err, "metadata 'version' not found"); return false; } lua_getglobal(script_filter->L, "filter"); if (lua_isnil(script_filter->L, -1)) { gt_error_set(err, "function 'filter' is not defined"); lua_pop(script_filter->L, 1); return false; } return true; }
static int gt_script_filter_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GT_UNUSED GtError *err) { GtScriptFilterArguments *arguments = tool_arguments; int had_err = 0; GtUword i; gt_error_check(err); gt_assert(arguments); for (i = parsed_args; !had_err && i < argc; i++) { GtScriptFilter *sf = NULL; sf = gt_script_filter_new(argv[i], err); if (!sf) { had_err = -1; break; } else { if (arguments->showinfo) { if (arguments->oneline) { const char *name, *version, *author; if (!(name = gt_script_filter_get_name(sf, err))) had_err = -1; if (!had_err) { if (!(version = gt_script_filter_get_version(sf, err))) had_err = -1; } if (!had_err) { if (!(author = gt_script_filter_get_author(sf, err))) had_err = -1; } if (!had_err) { printf("%s v%s (by %s)\n", name, version, author); } } else { const char *out; if (arguments->scriptname) printf("script name:\t%s\n", argv[i]); out = gt_script_filter_get_name(sf, err); if (out) printf("filter name:\t%s\n", out); else had_err = -1; if (!had_err) { out = gt_script_filter_get_version(sf, err); if (out) printf("version:\t%s\n", out); else had_err = -1; } if (!had_err) { out = gt_script_filter_get_author(sf, err); if (out) printf("author:\t\t%s\n", out); else had_err = -1; } if (!had_err) { out = gt_script_filter_get_email(sf, err); if (out) printf("email:\t\t%s\n", out); else had_err = -1; } if (!had_err) { out = gt_script_filter_get_description(sf, err); if (out) printf("description:\t%s\n", out); else had_err = -1; } if (i != argc-1) printf("\n"); } } if (arguments->validate) { GT_UNUSED bool select; GtStr *seqid = gt_str_new_cstr("foo"); GtFeatureNode *fn = (GtFeatureNode*) gt_feature_node_new(seqid, "gene", 23, 42, GT_STRAND_FORWARD); had_err = gt_script_filter_run(sf, fn, &select, err); gt_genome_node_delete((GtGenomeNode*) fn); gt_str_delete(seqid); } gt_script_filter_delete(sf); } } return had_err; }