Example #1
0
void		ft_processing(t_data *d, char *str)
{
	t_lexer		*lex;
	t_parser	*parser;

	parser = NULL;
	lex = NULL;
	d->pipe = 0;
	if (!str)
		return ;
	ft_backup_termcap(d);
	ft_lexer(&lex, str);
	if (lex)
	{
		ft_parser(&parser, lex, 1);
		ft_free_lex(&lex);
		ft_process_tree(parser, d);
		ft_free_pars(&parser);
	}
	else
		ft_process(d, str);
	ft_reset_termcap(d);
	if (d->first)
		ft_free_list(d->first);
}
Example #2
0
File: main.c Project: sbenning42/42
int			main(int ac, char **av, char **ep)
{
	char	*line;
	char	*prompt;
	t_lxem	*lex;

	prompt = (ac < 2 ? "" : av[1]);
	g_ftenviron = ep;
	while (42)
	{
		line = ft_readline(prompt, (RL_GECHO | RL_GHISTORY | RL_GSAVE | RL_GLOAD), ft_getenv(ep, "TERM"));
		if (line)
		{
			if (!ft_strcmp(line, "exit"))
			{
				ft_memdel((void **)&line);
				break ;
			}
			if ((lex = ft_lexer(line)))
				lx_del(&lex);
			ft_memdel((void **)&line);
		}
	}
	ft_atexit(EXIT_SUCCESS, av[0], "main: Success");
	return (0);
}
Example #3
0
void	ft_build_env(t_seq *seq)
{
	char	*tmp_args;
	char	**environ;
	char	**tab;
	t_seq	*tmp;
	int		index[2];

	tab = ft_strsplit(seq->args, ' ');
	index[0] = 0;
	while (ft_strstr(tab[index[0] + 1], "="))
		(index[0])++;
	if (index[0] > 0 && (index[1] = -1))
	{
		if ((environ = (char **)ft_malloc(sizeof(char *) * (index[0] + 1))))
		{
			while (++(index[1]) < index[0])
				environ[index[1]] = tab[index[1] + 1];
			environ[index[1]] = NULL;
		}
	}
	else
		environ = NULL;
	tmp_args = ft_strstr(seq->args, tab[index[0] + 1]);
	tmp = ft_lexer(tmp_args);
	ft_launch(1, tmp, environ);
	ft_lib_env(tab, tmp, environ);
}
Example #4
0
void	link_files(t_env *env, char *line)
{
	t_data data;

	ft_bzero(&data, sizeof(t_data));
	data.env = E_EN;
	data.old_pwd = find_var_val(env, "OLDPWD");
	data.pwd = find_var_val(env, "PWD");
	data.path = find_var_val(env, "PATH");
	ft_lexer(line, &data);
}
Example #5
0
static void			ft_other(t_lexer **root, char *str, int i, int j)
{
	ft_add_lexer(root, ft_strndup(str, i), 0, 5);
	if (str[i] && str[i + 1] && str[i] == str[i + 1] && g_t[j].type <= 7)
	{
		j++;
		ft_add_lexer(root, ft_strndup(str + i++, 2), g_t[j].type, g_t[j].rank);
	}
	else if (str[i] && g_t[j].type > 0)
		ft_add_lexer(root, ft_strndup(str + i, 1), g_t[j].type, g_t[j].rank);
	if (str[i] && *(str + i + 1))
		ft_lexer(root, str + i + 1);
}
Example #6
0
int					ft_is_valid(char *line)
{
	t_dlist			*dlist;

	dlist = NULL;
	ft_putchar('\n');
	if (ft_has_char(line))
	{
		ft_lexer(line, &dlist);
		return (OK == ft_lexer_check_err(dlist));
	}
	return (TRUE);
}
Example #7
0
static void			ft_redirection(t_lexer **root, char *str, int i, int j)
{
	ft_add_lexer(root, ft_search_word(&str, i, g_t[j].c), 0, 5);
	if (str[i] && str[i + 1] && str[i] == str[i + 1])
	{
		j++;
		ft_add_lexer(root, ft_strndup(str + i++, 2), g_t[j].type, g_t[j].rank);
		str[i - 1] = ' ';
		str[i] = ' ';
	}
	else if (str[i])
	{
		ft_add_lexer(root, ft_strndup(str + i, 1), g_t[j].type, g_t[j].rank);
		str[i] = ' ';
	}
	if (str[i])
		ft_lexer(root, str);
}
Example #8
0
static int		after_while(t_env **ev, t_data *en, t_edit **lst, t_hist **hst)
{
	if (ft_sigleton(0) == 3)
	{
		ft_sigleton(-1);
		ft_putchar('\n');
		ft_read(ev, en);
	}
	else
	{
		if (*lst)
			ft_jumprint(lst);
		ft_putchar('\n');
		if ((ft_write_on_file(lst, en->env)) == 0)
			ft_lexer(ft_creat_string(*lst), en);
		clean_all(lst, hst);
		ft_read(ev, en);
		return (1);
	}
	return (0);
}