sl_take_inf.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /* ************************************************************************** */
  2. /* */
  3. /* ::: :::::::: */
  4. /* sl_take_inf.c :+: :+: :+: */
  5. /* +:+ +:+ +:+ */
  6. /* By: bchanot <bchanot@students.42.fr> +#+ +:+ +#+ */
  7. /* +#+#+#+#+#+ +#+ */
  8. /* Created: 2016/11/02 19:06:15 by bchanot #+# #+# */
  9. /* Updated: 2016/11/16 22:25:33 by bchanot ### ########.fr */
  10. /* */
  11. /* ************************************************************************** */
  12. #include "ft_select.h"
  13. #include <term.h>
  14. #include <stdlib.h>
  15. t_inf *sl_set_inf(t_inf *inf)
  16. {
  17. static t_inf *env = NULL;
  18. if (inf)
  19. env = inf;
  20. return (env);
  21. }
  22. void sl_exit(char *str, t_inf *inf, int bool)
  23. {
  24. if (bool)
  25. {
  26. inf->term.c_lflag |= (ICANON | ECHO);
  27. tcsetattr(0, 0, &inf->term);
  28. }
  29. ft_memdel2((void ***)&inf->args);
  30. ft_memdel((void **)&inf->selected);
  31. if (str)
  32. ft_putstr_fd(str, 2);
  33. exit(0);
  34. }
  35. void sl_init_term(t_inf *inf)
  36. {
  37. char *name;
  38. if (!(name = getenv("TERM")))
  39. sl_exit("Failed getting TERM environnement\n", inf, 0);
  40. if (tgetent(NULL, name) <= 0)
  41. sl_exit("Failed getting TERM environnement\n", inf, 0);
  42. tcgetattr(0, &inf->term);
  43. inf->term.c_lflag &= ~(ICANON);
  44. inf->term.c_lflag &= ~(ECHO);
  45. inf->term.c_cc[VMIN] = 1;
  46. inf->term.c_cc[VTIME] = 0;
  47. if (tcsetattr(0, TCSADRAIN, &inf->term) == -1)
  48. sl_exit("Failed to set termios\n", inf, 1);
  49. ft_putstr_fd(tgetstr("ti", NULL), 0);
  50. ft_putstr_fd(tgetstr("vi", NULL), 0);
  51. }
  52. void sl_init_inf(int ac, char **av, t_inf *inf)
  53. {
  54. int cpt;
  55. int cpt2;
  56. cpt = 0;
  57. cpt2 = 0;
  58. inf->args = (char **)ft_memalloc(sizeof(char *) * (ac));
  59. inf->args[ac - 1] = 0;
  60. while (++cpt < ac)
  61. {
  62. inf->args[cpt2] = ft_strdup(av[cpt]);
  63. cpt2++;
  64. }
  65. inf->nb = ac - 1;
  66. inf->selected = (int *)ft_memalloc(sizeof(int) * (ac - 1));
  67. ft_bzero(inf->selected, (sizeof(int) * (ac - 1)));
  68. inf->cur = 0;
  69. sl_init_term(inf);
  70. }