/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_get_sprite.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:28:51 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:28:51 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include static int8_t ft_get_sprite_id(char *word) { int8_t ret; char ref[8][3]; ft_sprintf(ref[0], "S"); ft_sprintf(ref[1], "S3"); ft_sprintf(ref[2], "S4"); ft_sprintf(ref[3], "S5"); ft_sprintf(ref[4], "S6"); ft_sprintf(ref[5], "S7"); ft_sprintf(ref[6], "S8"); ft_sprintf(ref[7], "S9"); ret = 0; while (ft_strncmp(word, ref[ret], 3) && ref[ret][0]) ret++; return (ret); } static int8_t ft_check_sprite_amount(int8_t id, t_cub *clist) { int8_t i; i = 0; while (i < id) { if (!clist->mlist.sprite_path[i][0]) return (-1); i++; } if (i + 2 > clist->mlist.topsp) clist->mlist.topsp = i + 2; return (0); } static int8_t ft_get_sprite_norme(int8_t id, char **words, t_cub *clist) { ft_memdel((void*)&clist->mlist.sprite_path[id]); if (!(clist->mlist.sprite_path[id] = ft_strdup(*(words + 1)))) { ft_sprintf(clist->errmsg, FT_ERR_ALLOCATE); return (-1); } if (ft_check_not_found(clist->mlist.sprite_path[id]) < 0) { ft_sprintf(clist->errmsg, FT_ERR_RD_SP); return (-1); } clist->mlist.sprite_var++; return (0); } int8_t ft_get_sprite(char **words, t_cub *clist) { int8_t id; if (!(*words) || !words[1] || words[2]) { ft_sprintf(clist->errmsg, FT_ERR_ARGS); return (-1); } if (ft_check_ext(*(words + 1), ".xpm") < 0) { ft_sprintf(clist->errmsg, FT_ERR_NOT_A_XPM); return (-1); } id = ft_get_sprite_id(words[0]); if (ft_check_sprite_amount(id, clist) < 0) { ft_sprintf(clist->errmsg, FT_ERR_SPRITE_DUMB); return (-1); } return (ft_get_sprite_norme(id, words, clist)); }