static int feature_node_lua_new(lua_State *L) { GtGenomeNode **gf; GtUword startpos, endpos; GtStrand strand; const char *seqid, *type, *strand_str; size_t length; GtStr *seqid_str; gt_assert(L); /* get/check parameters */ seqid = luaL_checkstring(L, 1); type = luaL_checkstring(L, 2); startpos = luaL_checklong(L, 3); endpos = luaL_checklong(L, 4); luaL_argcheck(L, startpos > 0, 3, "must be > 0"); luaL_argcheck(L, endpos > 0, 4, "must be > 0"); luaL_argcheck(L, startpos <= endpos, 3, "must be <= endpos"); strand_str = luaL_checklstring(L, 5, &length); luaL_argcheck(L, length == 1, 5, "strand string must have length 1"); luaL_argcheck(L, (strand = gt_strand_get(strand_str[0])) != GT_NUM_OF_STRAND_TYPES, 5, "invalid strand"); /* construct object */ gf = lua_newuserdata(L, sizeof (GtGenomeNode*)); seqid_str = gt_str_new_cstr(seqid); *gf = gt_feature_node_new(seqid_str, type, startpos, endpos, strand); gt_str_delete(seqid_str); gt_assert(*gf); luaL_getmetatable(L, GENOME_NODE_METATABLE); lua_setmetatable(L, -2); return 1; }
static int gt_ltrdigest_pdom_visitor_parse_query(GtLTRdigestPdomVisitor *lv, GtHMMERParseStatus *status, bool *end, FILE *instream, GtError *err) { int had_err = 0; char buf[GT_HMMER_BUF_LEN]; gt_assert(lv && instream && status); gt_error_check(err); had_err = pdom_parser_get_next_line(buf, instream, err); if (!had_err && strncmp("Query:", buf, (size_t) 6) != 0) { *end = true; } if (!had_err && !(*end)) { status->strand = gt_strand_get(buf[14]); buf[14] = '\0'; status->frame = (unsigned) atoi(buf+13); } if (!had_err && !(*end)) { had_err = gt_ltrdigest_pdom_visitor_parse_scores(lv, buf, instream, err); } if (!had_err && !(*end)) { had_err = gt_ltrdigest_pdom_visitor_parse_domainhits(lv, status, buf, instream, err); } if (!had_err && !(*end)) { had_err = gt_ltrdigest_pdom_visitor_parse_statistics(lv, buf, instream, err); } return had_err; }
static int process_gt_strand_arg(GtStr *gt_strand_char, GtStrand *strand, const char *optstr, GtError *err) { int had_err = 0; gt_error_check(err); if (gt_str_length(gt_strand_char)) { GtStrand tmpstrand = gt_strand_get(gt_str_get(gt_strand_char)[0]); if ((gt_str_length(gt_strand_char) > 1) || (tmpstrand == GT_NUM_OF_STRAND_TYPES)) { gt_error_set(err, "argument to option -%s must be one of '" GT_STRAND_CHARS"'", optstr); had_err = -1; } if (!had_err) *strand = tmpstrand; } return had_err; }
int gt_parse_strand(GtStrand *gt_strand_value, const char *strand, unsigned int line_number, const char *filename, GtError *err) { gt_assert(strand && filename); gt_error_check(err); if (strlen(strand) != 1) { gt_error_set(err, "strand '%s' not one character long on line %u in file " "'%s'", strand, line_number, filename); *gt_strand_value = GT_STRAND_UNKNOWN; return -1; } if (strspn(strand, GT_STRAND_CHARS) != 1) { gt_error_set(err, "strand '%s' on line %u in file '%s' not a valid " "character from the set '%s'", strand, line_number, filename, GT_STRAND_CHARS); *gt_strand_value = GT_STRAND_UNKNOWN; return -1; } *gt_strand_value = gt_strand_get(strand[0]); return 0; }