/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_get_colors.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: joelecle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:28:47 by joelecle #+# #+# */ /* Updated: 2020/02/14 17:28:47 by joelecle ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include static int8_t ft_check_color_digits(char **num, t_cub *clist) { size_t i; uint8_t j; i = 0; j = 0; while (j < 3) { while (ft_isdigit(num[j][i])) i++; if (i != ft_strlen(num[j])) { ft_free_words(num); ft_sprintf(clist->errmsg, FT_ERR_COLOR_ALPHA); return (-1); } i = 0; j++; } return (0); } static int8_t ft_check_max_int(char **num, t_cub *clist) { if (ft_atoi(num[0]) > 255 || ft_atoi(num[1]) > 255 || ft_atoi(num[2]) > 255) { ft_sprintf(clist->errmsg, FT_ERR_COLOR_MAX); ft_free_words(num); return (-1); } return (0); } static int8_t ft_check_nums_amount(char **num, t_cub *clist) { if (!num[0] || !num[1] || !num[2] || num[3]) { ft_sprintf(clist->errmsg, FT_ERR_COLOR_ARGS); ft_free_words(num); return (-1); } return (0); } int8_t ft_get_f_color(char **words, t_cub *clist) { char **num; if (!(*words) || !words[1] || words[2]) { ft_sprintf(clist->errmsg, FT_ERR_ARGS); return (-1); } if (!ft_check_ext(words[1], ".xpm")) return (ft_get_f_tex(words, clist)); if (!(num = ft_split(words[1], ','))) { ft_sprintf(clist->errmsg, FT_ERR_ALLOCATE); return (-1); } if (ft_check_nums_amount(num, clist) < 0) return (-1); if (ft_check_color_digits(num, clist) < 0) return (-1); if (ft_check_max_int(num, clist) < 0) return (-1); clist->f_rgb.r = ft_atoi(num[0]); clist->f_rgb.g = ft_atoi(num[1]); clist->f_rgb.b = ft_atoi(num[2]); ft_free_words(num); return (0); } int8_t ft_get_c_color(char **words, t_cub *clist) { char **num; if (!(*words) || !words[1] || words[2]) { ft_sprintf(clist->errmsg, FT_ERR_ARGS); return (-1); } if (!ft_check_ext(words[1], ".xpm")) return (ft_get_c_tex(words, clist)); if (!(num = ft_split(words[1], ','))) { ft_sprintf(clist->errmsg, FT_ERR_ALLOCATE); return (-1); } if (ft_check_nums_amount(num, clist) < 0) return (-1); if (ft_check_color_digits(num, clist) < 0) return (-1); if (ft_check_max_int(num, clist) < 0) return (-1); clist->c_rgb.r = ft_atoi(num[0]); clist->c_rgb.g = ft_atoi(num[1]); clist->c_rgb.b = ft_atoi(num[2]); ft_free_words(num); return (0); }