示例#1
0
static void	ft_splitcmd(t_conf *config, char *cmdline)
{
	char	**split;
	char	**splitbuf;

	if ((split = ft_strsplit(cmdline, ';')))
	{
		splitbuf = split;
		while (split && *split)
		{
			ft_checkcmd(*split, config);
			split++;
		}
		ft_free_split(splitbuf);
		free(splitbuf);
	}
}
示例#2
0
static void	ft_open_redirection(char c, t_seq *cmd, char *str, int two)
{
	char	**tab;

	tab = ft_strsplit(str, ' ');
	if (c == '<')
		ft_open_infile(cmd, tab[0], two);
	else
		ft_open_outfile(cmd, tab[0], two);
	while (*str == ' ' || *str == '\t')
		str++;
	while (*str && *str != ' ' && *str != '\t' && *str != '<' && *str != '>')
	{
		*str = ' ';
		str++;
	}
	ft_free_split(tab);
}
示例#3
0
void			get_material_attributes(t_env *e, int fd)
{
	t_split_string	attr;
	char			*temp_line;

	attr.words = 0;
	e->material[e->materials] = (t_material *)malloc(sizeof(t_material));
	init_material(e->material[e->materials]);
	while (ft_gnl(fd, &temp_line))
	{
		if (temp_line[0] == '\0')
			break ;
		attr = ft_nstrsplit(temp_line, '\t');
		ft_strdel(&temp_line);
		if (attr.words < 2)
			err(FILE_FORMAT_ERROR, "Material attributes", e);
		set_material_values(e, attr.strings[0], attr.strings[1]);
		ft_free_split(&attr);
	}
	ft_strdel(&temp_line);
	++e->materials;
}
示例#4
0
static void	ft_checkcmd(char *cmdline, t_conf *config)
{
	char		**cmdline_split;
	static void	(*tabf[5])(t_conf *, char **) = {&ft_cd, &ft_exit,
		&ft_unsetenv, &ft_env, &ft_setenv};
	int			builtin;
	t_bin		*cmd;

	cmd = NULL;
	if (!cmdline || !*cmdline || !(cmdline_split = ft_strsplit(cmdline, ' ')))
		return ;
	if ((builtin = ft_findbuiltin(*cmdline_split)) != -1)
		(tabf[builtin])(config, cmdline_split);
	else if (*cmdline_split[0] == '/' ||
			*cmdline_split[0] == '.' ||
			(cmd = ft_findcmd(*cmdline_split, ft_hashsearch(config,
															*cmdline_split))))
		ft_execcmd(cmd, cmdline_split, config);
	else
		ft_error(*cmdline_split, CMD_NOTFOUND, KEEP);
	ft_free_split(cmdline_split);
	free(cmdline_split);
}
示例#5
0
static void		set_material_values(t_env *e, char *pt1, char *pt2)
{
	t_split_string	values;

	values = ft_nstrsplit(pt2, ' ');
	if (!ft_strcmp(pt1, "NAME"))
	{
		ft_strdel(&e->material[e->materials]->name);
		e->material[e->materials]->name = ft_strdup(values.strings[0]);
	}
	else if (!ft_strcmp(pt1, "DIFFUSE"))
		e->material[e->materials]->diff = get_colour(e, values);
	else if (!ft_strcmp(pt1, "SPECULAR"))
		e->material[e->materials]->spec = get_colour(e, values);
	else if (!ft_strcmp(pt1, "REFLECT"))
		e->material[e->materials]->reflect =
			to_range(ft_atod(values.strings[0]), 0.0, 1.0);
	else if (!ft_strcmp(pt1, "REFRACT"))
		e->material[e->materials]->refract =
			to_range(ft_atod(values.strings[0]), 0.0, 1.0);
	else if (!ft_strcmp(pt1, "IOR"))
		e->material[e->materials]->ior = ft_atod(values.strings[0]);
	ft_free_split(&values);
}
示例#6
0
void	ft_lib_env(char **t1, t_seq *tmp, char **environ)
{
	ft_free_split(t1);
	ft_clean_seq(tmp);
	ft_free(environ);
}