/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   main.c                                             :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: lperrey <lperrey@student.42.fr>            +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/10/04 05:59:26 by lperrey           #+#    #+#             */
/*   Updated: 2021/10/10 15:13:26 by hulamy           ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "minishell.h"

void	shell_loop(t_all *c)
{
	char	*line_input;

	line_input = NULL;
	while (1)
	{
		if (line_input)
			free(line_input);
		line_input = readline(c->prompt);
		if (line_input && *line_input)
		{
			if (!ft_strncmp(line_input, "env", 4)) // temp placeholder
				builtin_env(0, NULL, c);
			else if (!ft_strncmp(line_input, "exit", 5)) // temp placeholder
				builtin_exit(0, NULL, c);
			else
				printf("echo: %s\n", line_input);
		}
	}
}

void	wip_test()
{
	char	term_desc[2048];
	char	*term_type;
	int		term_width;
	int		term_height;
	int		ret;
	
	term_type = getenv("TERM");
	if (term_type == 0)
		ft_putstr_fd("Specify a terminal type with `setenv TERM <yourtype>'.\n", 2);
	ret = tgetent(term_desc, term_type);
  	if (ret < 0)
    	ft_putstr_fd("Could not access the termcap data base.\n", 2);
	if (ret == 0)
    	ft_putstr_fd("Terminal type `%s' is not defined.\n", 2);
	term_height = tgetnum ("li");
  	term_width = tgetnum ("co");
	  /* Extract information that termcap functions use.  */
/* 	temp = tgetstr ("pc", BUFFADDR);
	PC = temp ? *temp : 0;
	BC = tgetstr ("le", BUFFADDR);
	UP = tgetstr ("up", BUFFADDR); */
}

int	main(int argc, char *argv[], char *envp[])
{
	t_all	c;

	(void)argc;
	(void)argv;
	if (!init(&c, envp))
		exit(EXIT_FAILURE);
	shell_loop(&c);
	return (0);
}


/*
** idea about malloc protection :
** have them(mallocand similar) done in a specific function that would check their return and accordingly exit the program or continue
** -> so that it can be done in one line
**    void	calloc_or_exit(int num, int size);
** and possibly give it a pointer to a function that will clean before exit
**    void	calloc_or_exit(int num, int size, void (*f)(void *ptr), void *ptr);
*/
