sbenning: refactoring rl_<files>

This commit is contained in:
m4s 2016-12-12 13:15:47 +01:00
parent e578f0ef08
commit 323293a41d
48 changed files with 698 additions and 66 deletions

View file

@ -6,7 +6,7 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/08 19:03:22 by sbenning #+# #+# */ /* Created: 2016/12/08 19:03:22 by sbenning #+# #+# */
/* Updated: 2016/12/10 12:06:41 by sbenning ### ########.fr */ /* Updated: 2016/12/12 12:09:12 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -16,9 +16,9 @@ int rl_nl_function(t_line *line, long int input)
{ {
if (RL_IS(line->bitset, RL_SELECT)) if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT); RL_UNSET(line->bitset, RL_SELECT);
RL_SET(line->bitset, RL_STACK);
if (RL_NOT(line->bitset, RL_QUOTING)) if (RL_NOT(line->bitset, RL_QUOTING))
RL_SET(line->bitset, RL_FINISH); RL_SET(line->bitset, RL_FINISH);
RL_SET(line->bitset, RL_STACK);
return (0); return (0);
(void)input; (void)input;
} }

View file

@ -6,7 +6,7 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/09 02:05:22 by sbenning #+# #+# */ /* Created: 2016/12/09 02:05:22 by sbenning #+# #+# */
/* Updated: 2016/12/10 10:42:43 by sbenning ### ########.fr */ /* Updated: 2016/12/12 10:48:33 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -22,6 +22,7 @@
# define RL_INSERT_CODE 0x7e325b1b # define RL_INSERT_CODE 0x7e325b1b
# define RL_CLEAR_CODE 0xc # define RL_CLEAR_CODE 0xc
# define RL_NL_CODE 0xa # define RL_NL_CODE 0xa
# define RL_COMP_CODE 0x9
# define RL_LEFT_CODE 0x445b1b # define RL_LEFT_CODE 0x445b1b
# define RL_RIGHT_CODE 0x435b1b # define RL_RIGHT_CODE 0x435b1b
# define RL_WLEFT_CODE 0x44323b315b1b # define RL_WLEFT_CODE 0x44323b315b1b
@ -52,6 +53,7 @@
# define RL_INSERT_CODE 0x53323b315b1b # define RL_INSERT_CODE 0x53323b315b1b
# define RL_CLEAR_CODE 0xc # define RL_CLEAR_CODE 0xc
# define RL_NL_CODE 0xa # define RL_NL_CODE 0xa
# define RL_COMP_CODE 0x9
# define RL_LEFT_CODE 0x445b1b # define RL_LEFT_CODE 0x445b1b
# define RL_RIGHT_CODE 0x435b1b # define RL_RIGHT_CODE 0x435b1b
# define RL_WLEFT_CODE 0x44323b315b1b # define RL_WLEFT_CODE 0x44323b315b1b

View file

@ -6,7 +6,7 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/08 18:02:25 by sbenning #+# #+# */ /* Created: 2016/12/08 18:02:25 by sbenning #+# #+# */
/* Updated: 2016/12/10 12:20:20 by sbenning ### ########.fr */ /* Updated: 2016/12/12 12:50:39 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -30,6 +30,15 @@
# define RL_OFFSET 1024 # define RL_OFFSET 1024
/*
* Readline possible prompt
*/
# define RL_PROMPT_DEFAULT "$> "
# define RL_PROMPT_ESC "> "
# define RL_PROMPT_QUOTE "quote> "
# define RL_PROMPT_DQUOTE "double quote> "
/* /*
* Bitset manipulation : X is the bitset and Y is the bit to manipulate * Bitset manipulation : X is the bitset and Y is the bit to manipulate
* IS : Is Y set in X * IS : Is Y set in X
@ -65,6 +74,7 @@
# define RL_DQUOTE 0x40 # define RL_DQUOTE 0x40
# define RL_QUOTING (RL_ESC|RL_QUOTE|RL_DQUOTE) # define RL_QUOTING (RL_ESC|RL_QUOTE|RL_DQUOTE)
typedef struct s_data t_data;
typedef struct s_line t_line; typedef struct s_line t_line;
typedef struct s_input t_input; typedef struct s_input t_input;
typedef int (*t_input_function)(t_line *, long int); typedef int (*t_input_function)(t_line *, long int);
@ -112,6 +122,8 @@ struct s_input
t_input_function function; t_input_function function;
}; };
# include "minishell.h"
/* /*
* Readline setup/cleanup/teardown * Readline setup/cleanup/teardown
*/ */
@ -132,9 +144,14 @@ void input_remove(t_line *line, int size);
* Readline internal function * Readline internal function
*/ */
void rl_set_prompt(t_line *line);
void rl_put_prompt(t_line *line); void rl_put_prompt(t_line *line);
int rl_previous_word(t_line *line);
int rl_next_word(t_line *line);
int rl_clipboard_new(t_line *line); int rl_clipboard_new(t_line *line);
int rl_clipboard_new_cut(t_line *line); int rl_clipboard_new_cut(t_line *line);
void rl_toogle_bitset(t_line *line, int set);
int rl_finish(t_line *line);
int rl_stack_line(t_line *line); int rl_stack_line(t_line *line);
int rl_merge_line(t_line *line); int rl_merge_line(t_line *line);
@ -168,6 +185,7 @@ int rl_esc_function(t_line *line, long int input); /* Backslash */
int rl_quote_function(t_line *line, long int input); /* Simple quote */ int rl_quote_function(t_line *line, long int input); /* Simple quote */
int rl_dquote_function(t_line *line, long int input); /* Double quote */ int rl_dquote_function(t_line *line, long int input); /* Double quote */
int rl_nl_function(t_line *line, long int input); /* New line */ int rl_nl_function(t_line *line, long int input); /* New line */
int rl_comp_function(t_line *line, long int input); /* New line */
int rl_left_function(t_line *line, long int input); /* Left move */ int rl_left_function(t_line *line, long int input); /* Left move */
int rl_right_function(t_line *line, long int input); /* Right move */ int rl_right_function(t_line *line, long int input); /* Right move */
int rl_wleft_function(t_line *line, long int input); /* Word left move */ int rl_wleft_function(t_line *line, long int input); /* Word left move */

View file

@ -6,7 +6,7 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/08 18:03:48 by sbenning #+# #+# */ /* Created: 2016/12/08 18:03:48 by sbenning #+# #+# */
/* Updated: 2016/12/10 11:50:51 by sbenning ### ########.fr */ /* Updated: 2016/12/12 10:48:50 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,6 +14,7 @@
static t_input g_input[] = {\ static t_input g_input[] = {\
{RL_NL_CODE, rl_nl_function},\ {RL_NL_CODE, rl_nl_function},\
{RL_COMP_CODE, rl_comp_function},\
{RL_INSERT_CODE, rl_insert_function},\ {RL_INSERT_CODE, rl_insert_function},\
{RL_CLEAR_CODE, rl_clear_function},\ {RL_CLEAR_CODE, rl_clear_function},\
{RL_RETARR_CODE, rl_retarr_function},\ {RL_RETARR_CODE, rl_retarr_function},\
@ -43,50 +44,6 @@ static t_input g_input[] = {\
{0x0, rl_default_function}\ {0x0, rl_default_function}\
}; };
static void rl_toogle_bitset(t_line *line, int set)
{
static int esc;
static int select;
if (!set)
{
esc = RL_IS(line->bitset, RL_ESC);
select = RL_IS(line->bitset, RL_SELECT);
}
else
{
if (esc)
{
RL_UNSET(line->bitset, RL_ESC);
esc = 0;
}
if ((select && RL_NOT(line->bitset, RL_SELECT)) || (!select && RL_IS(line->bitset, RL_SELECT)))
{
rl_reset_display(line);
}
}
}
static int rl_finish(t_line *line)
{
if (RL_IS(line->bitset, RL_STACK))
{
rl_end_function(line, 0);
write(1, "\n", 1);
if (rl_stack_line(line) < 0)
return (-1);
if (RL_NOT(line->bitset, RL_FINISH))
{
if (curs_coo_setup(&line->curs) < 0)
return (-1);
line->prompt = (RL_IS(line->bitset, RL_ESC) ? "> " : "quote> ");
rl_put_prompt(line);
}
RL_UNSET(line->bitset, RL_STACK);
}
return (RL_IS(line->bitset, RL_FINISH));
}
static t_input_function rl_get_function(long int input) static t_input_function rl_get_function(long int input)
{ {
int i; int i;

View file

@ -0,0 +1,72 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_bitset.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 10:31:34 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:24:16 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
static void rl_toogle_esc(t_line *line, int set)
{
static int esc;
if (!set)
esc = RL_IS(line->bitset, RL_ESC);
else if (set && esc)
{
RL_UNSET(line->bitset, RL_ESC);
esc = 0;
}
}
static void rl_toogle_select(t_line *line, int set)
{
static int select;
if (!set)
select = RL_IS(line->bitset, RL_SELECT);
else if (set &&\
((select && RL_NOT(line->bitset, RL_SELECT)) ||\
(!select && RL_IS(line->bitset, RL_SELECT))))
rl_reset_display(line);
}
void rl_toogle_bitset(t_line *line, int set)
{
rl_toogle_esc(line, set);
rl_toogle_select(line, set);
}
int rl_finish(t_line *line)
{
int finish;
int stack;
stack = RL_IS(line->bitset, RL_STACK);
finish = RL_IS(line->bitset, RL_FINISH);
if (!stack && !finish)
return (0);
rl_end_function(line, 0);
write(1, "\n", 1);
if (stack)
{
RL_UNSET(line->bitset, RL_STACK);
if (rl_stack_line(line) < 0)
return (-1);
}
if (finish)
return (1);
if (curs_coo_setup(&line->curs) < 0)
return (-1);
line->prompt = (RL_IS(line->bitset, RL_ESC) ? "> " : "quote> ");
rl_set_prompt(line);
rl_put_prompt(line);
return (0);
}

View file

@ -0,0 +1,62 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_clipboard_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 12:32:11 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:34:12 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_copy_function(t_line *line, long int input)
{
if (line->clipboard)
ft_memdel((void **)&line->clipboard);
if (rl_clipboard_new(line) < 0)
return (-1);
return (0);
(void)input;
}
int rl_cut_function(t_line *line, long int input)
{
if (line->clipboard)
ft_memdel((void **)&line->clipboard);
if (rl_clipboard_new_cut(line) < 0)
return (-1);
rl_reset_display_post(line);
return (0);
(void)input;
}
int rl_paste_function(t_line *line, long int input)
{
int len;
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (!line->clipboard)
return (0);
len = ft_strlen(line->clipboard);
if (!len)
return (0);
if (RL_IS(line->bitset, RL_INSERT))
{
if (input_move(line, line->clipboard, len) < 0)
return (-1);
}
else
{
if (input_maj(line, line->clipboard, len) < 0)
return (-1);
}
rl_reset_display_post(line);
curs_forward(&line->curs, len);
line->pos += len;
return (0);
(void)input;
}

View file

@ -0,0 +1,40 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_comp_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 10:49:03 by sbenning #+# #+# */
/* Updated: 2016/12/12 11:01:45 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
static int ft_autocomp(t_data *data)
{
return (0);
int li;
int co;
li = data->line.curs.li;
co = data->line.curs.co;
ft_putstr("\nTeeeeeeest");
data->line.input = ft_strjoin(data->line.input, " JOIN ");
curs_goto(&data->line.curs, li, co + 6);
return (0);
}
int rl_comp_function(t_line *line, long int input)
{
t_data *data;
data = *data_singleton();
if (ft_autocomp(data) < 0)
return (-1);
line->size = ft_strlen(line->input);
line->used = line->size;
curs_reset(0);
return (0);
}

View file

@ -6,7 +6,7 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/08 18:30:38 by sbenning #+# #+# */ /* Created: 2016/12/08 18:30:38 by sbenning #+# #+# */
/* Updated: 2016/12/09 12:04:50 by sbenning ### ########.fr */ /* Updated: 2016/12/12 11:50:26 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -28,8 +28,11 @@ int rl_default_function(t_line *line, long int input)
if (input_maj(line, (char *)&input, sizeof(char)) < 0) if (input_maj(line, (char *)&input, sizeof(char)) < 0)
return (-1); return (-1);
} }
curs_write(&line->curs, (char *)&input, sizeof(char)); rl_reset_display_post(line);
curs_forward(&line->curs, sizeof(char));
line->pos += 1;
/* curs_write(&line->curs, (char *)&input, sizeof(char));
line->pos += 1; line->pos += 1;
rl_reset_display_post(line); rl_reset_display_post(line);
return (0); */ return (0);
} }

View file

@ -6,18 +6,19 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/08 18:42:31 by sbenning #+# #+# */ /* Created: 2016/12/08 18:42:31 by sbenning #+# #+# */
/* Updated: 2016/12/09 16:30:35 by sbenning ### ########.fr */ /* Updated: 2016/12/12 10:28:59 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ft_readline.h" #include "ft_readline.h"
int input_extend(t_line *line, int size) int input_extend(t_line *line, int size)
{ {
char *tmp; char *tmp;
size = (RL_OFFSET > size ? RL_OFFSET : size); size = (RL_OFFSET > size ? RL_OFFSET : size) + line->size;
if ((tmp = ft_strnew(line->size + size)) == NULL) if ((tmp = ft_strnew(size)) == NULL)
return (-1); return (-1);
if (line->input) if (line->input)
{ {
@ -25,15 +26,20 @@ int input_extend(t_line *line, int size)
free(line->input); free(line->input);
} }
line->input = tmp; line->input = tmp;
line->size += size; line->size = size;
return (0); return (0);
} }
int rl_dynamic_buffer_extend(t_line *line, int size)
{
return (input_extend(line, size));
}
int input_maj(t_line *line, char *str, int size) int input_maj(t_line *line, char *str, int size)
{ {
if (line->used + size >= line->size) if (line->used + size >= line->size)
{ {
if (input_extend(line, size) < 0) if (rl_dynamic_buffer_extend(line, size) < 0)
return (-1); return (-1);
} }
ft_memcpy(line->input + line->pos, str, size); ft_memcpy(line->input + line->pos, str, size);
@ -48,7 +54,7 @@ int input_move(t_line *line, char *str, int size)
if (line->used + size >= line->size) if (line->used + size >= line->size)
{ {
if (input_extend(line, size) < 0) if (rl_dynamic_buffer_extend(line, size) < 0)
return (-1); return (-1);
} }
if ((dup = ft_strdup(line->input + line->pos)) == NULL) if ((dup = ft_strdup(line->input + line->pos)) == NULL)
@ -75,3 +81,19 @@ void input_remove(t_line *line, int size)
line->used -= size; line->used -= size;
ft_bzero(line->input + line->used, line->size - line->used); ft_bzero(line->input + line->used, line->size - line->used);
} }
int rl_dynamic_buffer_replace(t_line *line, char *str, int size)
{
return (input_maj(line, str, size));
}
int rl_dynamic_buffer_insert(t_line *line, char *str, int size)
{
return (input_move(line, str, size));
}
void rl_dynamic_buffer_remove(t_line *line, int size)
{
input_remove(line, size);
}

View file

@ -0,0 +1,65 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_long_move_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 12:55:48 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:57:16 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_home_function(t_line *line, long int input)
{
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (!line->pos)
return (0);
curs_backward(&line->curs, line->pos);
line->pos = 0;
return (0);
(void)input;
}
int rl_end_function(t_line *line, long int input)
{
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (line->pos == line->used)
return (0);
curs_forward(&line->curs, line->used - line->pos);
line->pos = line->used;
return (0);
(void)input;
}
int rl_select_home_function(t_line *line, long int input)
{
int ret;
if (!line->pos)
return (0);
if (RL_NOT(line->bitset, RL_SELECT))
line->select = line->pos;
ret = rl_home_function(line, input);
RL_SET(line->bitset, RL_SELECT);
rl_reset_display_post(line);
return (ret);
}
int rl_select_end_function(t_line *line, long int input)
{
int ret;
if (line->pos == line->used)
return (0);
if (RL_NOT(line->bitset, RL_SELECT))
line->select = line->pos;
ret = rl_end_function(line, input);
RL_SET(line->bitset, RL_SELECT);
rl_reset_display_ante(line);
return (ret);
}

View file

@ -6,7 +6,7 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/09 01:25:03 by sbenning #+# #+# */ /* Created: 2016/12/09 01:25:03 by sbenning #+# #+# */
/* Updated: 2016/12/09 01:58:15 by sbenning ### ########.fr */ /* Updated: 2016/12/12 11:34:02 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -22,17 +22,17 @@ int rl_merge_line(t_line *line)
{ {
next = line->stack->next; next = line->stack->next;
chunk = (char *)line->stack->content; chunk = (char *)line->stack->content;
size = line->stack->content_size; size = line->stack->content_size - 1;
if (input_maj(line, chunk, size) < 0) if (input_maj(line, chunk, size) < 0)
return (-1); return (-1);
line->pos += size; line->pos += size;
if (next) /* if (next)
{ {
if (input_maj(line, "\n", 1) < 0) if (input_maj(line, "\n", 1) < 0)
return (-1); return (-1);
line->pos += 1; line->pos += 1;
} }
free(chunk); */ free(chunk);
free(line->stack); free(line->stack);
line->stack = next; line->stack = next;
} }

View file

@ -0,0 +1,72 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_page_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 12:39:57 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:42:37 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_pagedown_function(t_line *line, long int input)
{
int len;
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (line->pos == line->used)
return (0);
len = line->used - line->pos;
len = (line->curs.win_co > len ? len : line->curs.win_co);
curs_forward(&line->curs, len);
line->pos += len;
return (0);
(void)input;
}
int rl_pageup_function(t_line *line, long int input)
{
int len;
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (!line->pos)
return (0);
len = (line->curs.win_co > line->pos ? line->pos : line->curs.win_co);
curs_backward(&line->curs, len);
line->pos -= len;
return (0);
(void)input;
}
int rl_select_pagedown_function(t_line *line, long int input)
{
int ret;
if (line->pos == line->used)
return (0);
if (RL_NOT(line->bitset, RL_SELECT))
line->select = line->pos;
ret = rl_pagedown_function(line, input);
RL_SET(line->bitset, RL_SELECT);
rl_reset_display_ante(line);
return (ret);
}
int rl_select_pageup_function(t_line *line, long int input)
{
int ret;
if (!line->pos)
return (0);
if (RL_NOT(line->bitset, RL_SELECT))
line->select = line->pos;
ret = rl_pageup_function(line, input);
RL_SET(line->bitset, RL_SELECT);
rl_reset_display_post(line);
return (ret);
}

View file

@ -6,12 +6,24 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/09 01:45:09 by sbenning #+# #+# */ /* Created: 2016/12/09 01:45:09 by sbenning #+# #+# */
/* Updated: 2016/12/09 13:38:07 by sbenning ### ########.fr */ /* Updated: 2016/12/12 12:20:55 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ft_readline.h" #include "ft_readline.h"
void rl_set_prompt(t_line *line)
{
if (RL_IS(line->bitset, RL_ESC))
line->prompt = RL_PROMPT_ESC;
else if (RL_IS(line->bitset, RL_QUOTE))
line->prompt = RL_PROMPT_QUOTE;
else if (RL_IS(line->bitset, RL_DQUOTE))
line->prompt = RL_PROMPT_DQUOTE;
else
line->prompt = RL_PROMPT_DEFAULT;
}
void rl_put_prompt(t_line *line) void rl_put_prompt(t_line *line)
{ {
curs_write(&line->curs, line->prompt, ft_strlen(line->prompt)); curs_write(&line->curs, line->prompt, ft_strlen(line->prompt));

View file

@ -0,0 +1,44 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_quoting_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 12:35:25 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:36:41 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_esc_function(t_line *line, long int input)
{
if (RL_NOT(line->bitset, RL_ESC))
RL_SET(line->bitset, RL_ESC);
return (rl_default_function(line, input));
}
int rl_quote_function(t_line *line, long int input)
{
if (RL_NOT(line->bitset, RL_ESC))
{
if (RL_IS(line->bitset, RL_QUOTE))
RL_UNSET(line->bitset, RL_QUOTE);
else
RL_SET(line->bitset, RL_QUOTE);
}
return (rl_default_function(line, input));
}
int rl_dquote_function(t_line *line, long int input)
{
if (RL_NOT(line->bitset, RL_ESC))
{
if (RL_IS(line->bitset, RL_DQUOTE))
RL_UNSET(line->bitset, RL_DQUOTE);
else
RL_SET(line->bitset, RL_DQUOTE);
}
return (rl_default_function(line, input));
}

View file

@ -0,0 +1,39 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_remove_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 12:45:08 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:46:39 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_retarr_function(t_line *line, long int input)
{
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (!line->pos)
return (0);
input_remove(line, 1);
curs_backward(&line->curs, 1);
line->pos -= 1;
rl_reset_display_post(line);
return (0);
(void)input;
}
int rl_suppr_function(t_line *line, long int input)
{
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (line->pos == line->used)
return (0);
input_remove(line, -1);
rl_reset_display_post(line);
return (0);
(void)input;
}

View file

@ -6,7 +6,7 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/08 18:07:47 by sbenning #+# #+# */ /* Created: 2016/12/08 18:07:47 by sbenning #+# #+# */
/* Updated: 2016/12/09 13:39:22 by sbenning ### ########.fr */ /* Updated: 2016/12/12 12:20:55 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -19,6 +19,7 @@ int rl_setup(t_line *line)
return (-1); return (-1);
RL_SET(line->bitset, RL_INSERT); RL_SET(line->bitset, RL_INSERT);
line->prompt = "$> "; line->prompt = "$> ";
rl_set_prompt(line);
return (0); return (0);
} }

View file

@ -0,0 +1,65 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_move_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 12:53:18 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:54:52 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_left_function(t_line *line, long int input)
{
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (!line->pos)
return (0);
curs_backward(&line->curs, 1);
line->pos -= 1;
return (0);
(void)input;
}
int rl_right_function(t_line *line, long int input)
{
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
if (line->pos == line->used)
return (0);
curs_forward(&line->curs, 1);
line->pos += 1;
return (0);
(void)input;
}
int rl_select_left_function(t_line *line, long int input)
{
int ret;
if (!line->pos)
return (0);
if (RL_NOT(line->bitset, RL_SELECT))
line->select = line->pos;
ret = rl_left_function(line, input);
RL_SET(line->bitset, RL_SELECT);
rl_reset_display_post(line);
return (ret);
}
int rl_select_right_function(t_line *line, long int input)
{
int ret;
if (line->pos == line->used)
return (0);
if (!RL_IS(line->bitset, RL_SELECT))
line->select = line->pos;
ret = rl_right_function(line, input);
RL_SET(line->bitset, RL_SELECT);
rl_reset_display_ante(line);
return (ret);
}

View file

@ -6,7 +6,7 @@
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */ /* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/09 01:06:54 by sbenning #+# #+# */ /* Created: 2016/12/09 01:06:54 by sbenning #+# #+# */
/* Updated: 2016/12/10 09:54:10 by sbenning ### ########.fr */ /* Updated: 2016/12/12 11:33:28 by sbenning ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -16,7 +16,7 @@ int rl_stack_line(t_line *line)
{ {
t_list *elem; t_list *elem;
elem = ft_lstnew(line->input, line->used); elem = ft_lstnew(line->input, line->used + 1);
if (elem == NULL) if (elem == NULL)
return (-1); return (-1);
ft_lsteadd(&line->stack, elem); ft_lsteadd(&line->stack, elem);
@ -24,5 +24,11 @@ int rl_stack_line(t_line *line)
line->pos = 0; line->pos = 0;
line->size = 0; line->size = 0;
line->used = 0; line->used = 0;
if (RL_NOT(line->bitset, RL_ESC))
return (0);
elem = ft_lstnew("\n", 2);
if (elem == NULL)
return (-1);
ft_lsteadd(&line->stack, elem);
return (0); return (0);
} }

View file

@ -0,0 +1,34 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_state_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 13:00:59 by sbenning #+# #+# */
/* Updated: 2016/12/12 13:01:51 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_insert_function(t_line *line, long int input)
{
if (RL_IS(line->bitset, RL_INSERT))
RL_UNSET(line->bitset, RL_INSERT);
else
RL_SET(line->bitset, RL_INSERT);
return (0);
(void)input;
}
int rl_nl_function(t_line *line, long int input)
{
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
RL_SET(line->bitset, RL_STACK);
if (RL_NOT(line->bitset, RL_QUOTING))
RL_SET(line->bitset, RL_FINISH);
return (0);
(void)input;
}

View file

@ -0,0 +1,67 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_word_function.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 12:47:31 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:51:53 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_wleft_function(t_line *line, long int input)
{
size_t len;
if (!line->pos)
return (0);
len = rl_previous_word(line);
curs_backward(&line->curs, len);
line->pos -= len;
return (0);
(void)input;
}
int rl_wright_function(t_line *line, long int input)
{
size_t len;
if (line->pos == line->used)
return (0);
len = rl_next_word(line);
curs_forward(&line->curs, len);
line->pos += len;
return (0);
(void)input;
}
int rl_select_wleft_function(t_line *line, long int input)
{
int ret;
if (!line->pos)
return (0);
if (RL_NOT(line->bitset, RL_SELECT))
line->select = line->pos;
ret = rl_wleft_function(line, input);
RL_SET(line->bitset, RL_SELECT);
rl_reset_display_post(line);
return (ret);
}
int rl_select_wright_function(t_line *line, long int input)
{
int ret;
if (line->pos == line->used)
return (0);
if (RL_NOT(line->bitset, RL_SELECT))
line->select = line->pos;
ret = rl_wright_function(line, input);
RL_SET(line->bitset, RL_SELECT);
rl_reset_display_ante(line);
return (ret);
}

View file

@ -0,0 +1,51 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rl_word_utility.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/12 12:48:07 by sbenning #+# #+# */
/* Updated: 2016/12/12 12:50:44 by sbenning ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_readline.h"
int rl_previous_word(t_line *line)
{
int i;
int len;
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
i = 0;
while (line->input[i] && i < line->pos)
{
if (!i && line->input[i] != ' ')
len = i;
if (i && line->input[i - 1] == ' ' && line->input[i] != ' ')
len = i;
i++;
}
return (line->pos - len);
}
int rl_next_word(t_line *line)
{
int i;
int flag;
if (RL_IS(line->bitset, RL_SELECT))
RL_UNSET(line->bitset, RL_SELECT);
i = line->pos;
flag = 0;
while (line->input[i] && (line->input[i] == ' ' || !flag))
{
if (line->input[i] == ' ')
flag = 1;
i++;
}
return (i - line->pos);
}