diff --git a/libft/.gitmodules b/libft/.gitmodules new file mode 100644 index 00000000..8a985075 --- /dev/null +++ b/libft/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ft_printf"] + path = ft_printf + url = http://github.com/jzck/ft_printf diff --git a/libft/Makefile b/libft/Makefile index e4897b34..4e8fdb23 100644 --- a/libft/Makefile +++ b/libft/Makefile @@ -2,7 +2,7 @@ NAME = libft.a CC = gcc AR = ar -rc -D_SRC = . +D_SRC = src D_OBJ = obj O_FLAGS = @@ -11,17 +11,18 @@ DEBUG = MKDIR = mkdir -p RM = /bin/rm -rf -F_SRC := $(shell ls -1 $(D_SRC) | grep "\.c$$") -F_OBJ := $(F_SRC:.c=.o) -F_OBJ := $(addprefix $(D_OBJ)/, $(F_OBJ)) +D_INC = includes + +F_SRC := $(shell find $(D_SRC) -type f -regex ".*\.c$$") +F_OBJ := $(addprefix $(D_OBJ)/, $(notdir $(F_SRC:.c=.o))) .PHONY: all clean fclean re all: $(NAME) -$(D_OBJ)/%.o: $(D_SRC)/%.c +$(D_OBJ)/%.o: $(D_SRC)/*/%.c @$(MKDIR) $(D_OBJ) - @$(CC) $(W_FLAGS) -c $< -o $@ $(DEBUG) + @$(CC) -I$(D_INC) $(W_FLAGS) -c $< -o $@ $(DEBUG) @echo "(libft) Compiling "$<"..." $(NAME): $(F_OBJ) diff --git a/libft/auteur b/libft/auteur deleted file mode 100644 index b0e9923f..00000000 --- a/libft/auteur +++ /dev/null @@ -1 +0,0 @@ -jhalford diff --git a/libft/ft_diff.c b/libft/ft_diff.c deleted file mode 100644 index 137ade0c..00000000 --- a/libft/ft_diff.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "libft.h" - -int ft_diff(void *a, void *b) -{ - return (*(int *)a - *(int *)b); -} diff --git a/libft/ft_printf.pdf b/libft/ft_printf.pdf new file mode 100644 index 00000000..b4fd9669 Binary files /dev/null and b/libft/ft_printf.pdf differ diff --git a/libft/libft.h b/libft/includes/libft.h similarity index 100% rename from libft/libft.h rename to libft/includes/libft.h diff --git a/libft/includes/libftprintf.h b/libft/includes/libftprintf.h new file mode 100644 index 00000000..ab3a1d51 --- /dev/null +++ b/libft/includes/libftprintf.h @@ -0,0 +1,57 @@ +#ifndef LIBFTPRINTF_H +# define LIBFTPRINTF_H +# include "libft.h" +# include +# define ALL_FLAGS "#0- +" +# define ALL_CONVERSIONS "sSpdDioOuUxXcC" + +typedef struct s_fmt +{ + char flags[6]; + int width; + int precision; + char modifier[3]; + char conversion; + int valid; +} t_fmt; + +typedef char *(*t_converter)(t_fmt *fmt, va_list ap); + +typedef struct s_conv +{ + char id; + char base[20]; + t_converter converter; + char allowed_flags[6]; +} t_conv; + +extern t_conv g_convs[]; + +t_fmt *ft_fmt_init(void); +void ft_fmt_print(t_fmt *fmt); + +int ft_printf(const char *format, ...); +t_fmt *ft_parse(char **format); +char *ft_transform(t_fmt *fmt, va_list ap); + +void ft_fmt_error_conv(char conv); +void ft_fmt_error_mod_conv(char *mod, char conv); +void ft_fmt_error_flag_conv(char flag, char conv); +void ft_fmt_error_flag_flag(char flag1, char flag2); + +void ft_fmt_simplify(t_fmt *fmt); +int ft_fmt_validate_conversion(t_fmt *fmt); +void ft_fmt_validate_flags(t_fmt *fmt); +void ft_fmt_validate_mod(t_fmt *fmt); + +char *ft_signed_conversion(t_fmt *fmt, va_list ap); +char *ft_unsigned_conversion(t_fmt *fmt, va_list ap); +char *ft_str_conversion(t_fmt *fmt, va_list ap); +char *ft_char_conversion(t_fmt *fmt, va_list ap); + +void ft_pad_left(char *str, t_fmt *fmt); +void ft_pad_right(char *str, t_fmt *fmt); +void ft_pad_sharp_o(char *str); +void ft_pad_sharp_x(char *str, t_fmt *fmt); +void ft_pad_sharp(char *str, t_fmt *fmt); +#endif diff --git a/libft/ft_isalnum.c b/libft/src/char/ft_isalnum.c similarity index 100% rename from libft/ft_isalnum.c rename to libft/src/char/ft_isalnum.c diff --git a/libft/ft_isalpha.c b/libft/src/char/ft_isalpha.c similarity index 100% rename from libft/ft_isalpha.c rename to libft/src/char/ft_isalpha.c diff --git a/libft/ft_isascii.c b/libft/src/char/ft_isascii.c similarity index 100% rename from libft/ft_isascii.c rename to libft/src/char/ft_isascii.c diff --git a/libft/ft_isdigit.c b/libft/src/char/ft_isdigit.c similarity index 100% rename from libft/ft_isdigit.c rename to libft/src/char/ft_isdigit.c diff --git a/libft/ft_isprint.c b/libft/src/char/ft_isprint.c similarity index 100% rename from libft/ft_isprint.c rename to libft/src/char/ft_isprint.c diff --git a/libft/ft_tolower.c b/libft/src/char/ft_tolower.c similarity index 100% rename from libft/ft_tolower.c rename to libft/src/char/ft_tolower.c diff --git a/libft/ft_toupper.c b/libft/src/char/ft_toupper.c similarity index 100% rename from libft/ft_toupper.c rename to libft/src/char/ft_toupper.c diff --git a/libft/src/ft_printf/ft_conversion.c b/libft/src/ft_printf/ft_conversion.c new file mode 100644 index 00000000..fdd85648 --- /dev/null +++ b/libft/src/ft_printf/ft_conversion.c @@ -0,0 +1,55 @@ +#include "libftprintf.h" + +char *ft_signed_conversion(t_fmt *fmt, va_list ap) +{ + char base10[] = "0123456789"; + long long arg = va_arg(ap, int); + + (void)fmt; + return (ft_lltoa_base(arg, base10, fmt->flags)); +} + +char *ft_unsigned_conversion(t_fmt *fmt, va_list ap) +{ + unsigned int uiarg; + unsigned long long ullarg; + int i; + + i = 0; + while (fmt->conversion != g_convs[i].id) + i++; + if (!*fmt->modifier + || ft_strcmp(fmt->modifier, "hh") == 0 + || ft_strcmp(fmt->modifier, "h") == 0 + || ft_strcmp(fmt->modifier, "z") == 0) + { + uiarg = va_arg(ap, int); + return (ft_uitoa_base(uiarg, g_convs[i].base)); + } + ullarg = va_arg(ap, long long); + return (ft_ulltoa_base(ullarg, g_convs[i].base)); +} + +char *ft_char_conversion(t_fmt *fmt, va_list ap) +{ + char *ret; + + (void)fmt; + ret = (char *)malloc(sizeof(char) + 1); + /* if (ft_strcmp(fmt->modifier, "l") == 0) */ + /* va_arg(ap, wint_t); */ + ret[0] = (char)va_arg(ap, int); + ret[1] = '\0'; + return (ret); +} + +char *ft_str_conversion(t_fmt *fmt, va_list ap) +{ + char *ret; + + (void)fmt; + /* if (ft_strcmp(fmt->modifier, "l") == 0) */ + /* va_arg(ap, wchar_t *); */ + ret = ft_strdup(va_arg(ap, char *)); + return (ret); +} diff --git a/libft/src/ft_printf/ft_parse.c b/libft/src/ft_printf/ft_parse.c new file mode 100644 index 00000000..735f7fa4 --- /dev/null +++ b/libft/src/ft_printf/ft_parse.c @@ -0,0 +1,95 @@ +#include "libftprintf.h" + +void ft_parse_flags(t_fmt *fmt, char **format) +{ + int i; + char *str; + + + i = 0; + str = *format; + while (str[i]) + { + if (ft_strchr(ALL_FLAGS, (int)str[i])) + { + if (!ft_strchr(fmt->flags, (int)str[i])) + ft_strncat(fmt->flags, str + i, 1); + } + else + break ; + i++; + } + *format += i; + /* printf("\nparse_flags: %s\n", *format); */ + /* fflush(stdout); */ +} + +void ft_parse_nums(t_fmt *fmt, char **format) +{ + int i; + char buf[10]; + char *str; + + i = 0; + str = *format; + ft_strcpy(buf, "0"); + while (ft_isdigit((int)(str[i]))) + ft_strncat(buf, str + i++, 1); + fmt->width = ft_atoi(buf); + ft_strcpy(buf, "0"); + if (str[i] == '.') + { + i++; + while (ft_isdigit(str[i])) + ft_strncat(buf, str + i++, 1); + } + fmt->precision = ft_atoi(buf); + *format += i; + /* printf("\nparse_nums: %s\n", *format); */ + /* fflush(stdout); */ +} + +void ft_parse_modifiers(t_fmt *fmt, char **format) +{ + char *str; + + str = *format; + if (str[0] == 'h' && str[1] == 'h') + ft_strcpy(fmt->modifier, "hh"); + else if (str[0] == 'h' && str[1] != 'h') + ft_strcpy(fmt->modifier, "h"); + else if (str[0] == 'l' && str[1] == 'l') + ft_strcpy(fmt->modifier, "ll"); + else if (str[0] == 'l' && str[1] != 'l') + ft_strcpy(fmt->modifier, "l"); + else if (str[0] == 'j') + ft_strcpy(fmt->modifier, "j"); + else if (str[0] == 'z') + ft_strcpy(fmt->modifier, "z"); + else + ft_strcpy(fmt->modifier, ""); + *format += ft_strlen(fmt->modifier); + /* printf("\nparse_mods: %s\n", *format); */ + /* fflush(stdout); */ +} + + +t_fmt *ft_parse(char **format) +{ + t_fmt *fmt; + + fmt = ft_fmt_init(); + ft_parse_flags(fmt, format); + ft_parse_nums(fmt, format); + ft_parse_modifiers(fmt, format); + fmt->conversion = **format; + (*format)++; + + ft_fmt_validate_mod(fmt); + ft_fmt_validate_flags(fmt); + ft_fmt_simplify(fmt); + fmt->valid = ft_fmt_validate_conversion(fmt) ? 0 : 1; + + ft_fmt_print(fmt); + return (fmt); +} diff --git a/libft/src/ft_printf/ft_printf.c b/libft/src/ft_printf/ft_printf.c new file mode 100644 index 00000000..733338ee --- /dev/null +++ b/libft/src/ft_printf/ft_printf.c @@ -0,0 +1,42 @@ +#include "libftprintf.h" + +t_conv g_convs[] = +{ + {'d', "0123456789", ft_signed_conversion, "0- +"}, + {'i', "0123456789", ft_signed_conversion, "0- +"}, + {'u', "0123456789", ft_unsigned_conversion, "#0-"}, + {'o', "01234567", ft_unsigned_conversion, "#0-"}, + {'x', "0123456789abcdef", ft_unsigned_conversion, "#0-"}, + {'X', "0123456789ABCDEF", ft_unsigned_conversion, "#0-"}, + {'s', "", ft_str_conversion, "-"}, + {'c', "", ft_char_conversion, "-"}, +}; + +int ft_printf(const char *format, ...) +{ + va_list ap1; + char *str; + char final[1000]; + t_fmt *fmt; + + va_start(ap1, format); + str = ft_strdup(format); + ft_putendl(format); + while (*str) + { + if (*str == '%') + { + str++; + if (!(fmt = ft_parse(&str))) + return (1); + if (!fmt->valid) + ft_strncat(final, &fmt->conversion, 1); + else + ft_strcat(final, ft_transform(fmt, ap1)); + } + else + ft_strncat(final, str++, 1); + } + ft_putstr(final); + return (0); +} diff --git a/libft/src/ft_printf/ft_tranform.c b/libft/src/ft_printf/ft_tranform.c new file mode 100644 index 00000000..83c10f1a --- /dev/null +++ b/libft/src/ft_printf/ft_tranform.c @@ -0,0 +1,26 @@ +#include "libftprintf.h" + +char *ft_transform(t_fmt *fmt, va_list ap) +{ + char *buf; + char *ret; + int i; + + i = 0; + while (fmt->conversion != g_convs[i].id) + i++; + ret = (g_convs[i].converter)(fmt, ap); + if (fmt->width > (int)ft_strlen(ret)) + { + buf = ret; + ret = (char *)malloc(sizeof(char) * (fmt->width + 5)); + ft_strcpy(ret, buf); + } + /* printf("before padding: '%s'\n", ret); */ + /* fflush(stdout); */ + if (ft_strchr(fmt->flags, '-')) + ft_pad_right(ret, fmt); + else + ft_pad_left(ret, fmt); + return (ret); +} diff --git a/libft/src/ft_printf/lib_fmt.c b/libft/src/ft_printf/lib_fmt.c new file mode 100644 index 00000000..77a6197a --- /dev/null +++ b/libft/src/ft_printf/lib_fmt.c @@ -0,0 +1,33 @@ +#include "libftprintf.h" + +t_fmt *ft_fmt_init(void) +{ + t_fmt *fmt; + + fmt = (t_fmt *)malloc(sizeof(t_fmt) + 1); + ft_bzero(fmt->flags, 6); + /* fmt->flags.hash = 0; */ + /* fmt->flags.zero = 0; */ + /* fmt->flags.minus = 0; */ + /* fmt->flags.space = 0; */ + /* fmt->flags.plus = 0; */ + ft_bzero(fmt->modifier, 3); + fmt->conversion = '\0'; + fmt->width = 0; + fmt->precision = 0; + fmt->valid = 0; + return (fmt); +} + +void ft_fmt_print(t_fmt *fmt) +{ + printf("\n---\n"); + printf("valid: %i\n", fmt->valid); + printf("flags: %s\n", fmt->flags); + printf("width: %i\n", fmt->width); + printf("prec.: %i\n", fmt->precision); + printf("modif: %s\n", fmt->modifier); + printf("conv.: %c\n", fmt->conversion); + printf("---\n"); + fflush(stdout); +} diff --git a/libft/src/ft_printf/lib_fmt_error.c b/libft/src/ft_printf/lib_fmt_error.c new file mode 100644 index 00000000..9c1c7dba --- /dev/null +++ b/libft/src/ft_printf/lib_fmt_error.c @@ -0,0 +1,35 @@ +#include "libftprintf.h" + +void ft_fmt_error_conv(char conv) +{ + ft_putstr("Warning: invalid or unsupported conversion specifier '"); + ft_putchar(conv); + ft_putendl("'"); +} + +void ft_fmt_error_mod_conv(char *mod, char conv) +{ + ft_putstr("warning: length modifier '"); + ft_putstr(mod); + ft_putstr("' results in undefined behaviour or no effect with '"); + ft_putchar(conv); + ft_putendl("' conversion specifier"); +} + +void ft_fmt_error_flag_conv(char flag, char conv) +{ + ft_putstr("warning: flag '"); + ft_putchar(flag); + ft_putstr("' results in undefined behaviour with '"); + ft_putchar(conv); + ft_putendl("' conversion specifier"); +} + +void ft_fmt_error_flag_flag(char flag1, char flag2) +{ + ft_putstr("warning: flag '"); + ft_putchar(flag1); + ft_putstr("' is ignored when flag '"); + ft_putchar(flag2); + ft_putendl("' is present"); +} diff --git a/libft/src/ft_printf/lib_fmt_validate.c b/libft/src/ft_printf/lib_fmt_validate.c new file mode 100644 index 00000000..d58b2ba9 --- /dev/null +++ b/libft/src/ft_printf/lib_fmt_validate.c @@ -0,0 +1,71 @@ +#include "libftprintf.h" + +void ft_fmt_simplify(t_fmt *fmt) +{ + char hashtag; + + hashtag = '#'; + if (fmt->conversion == 'p') + { + fmt->conversion = 'x'; + if (!ft_strchr(fmt->flags, '#')) + ft_strncat(fmt->flags, &hashtag, 1); + } + if (ft_strchr("DOUCS", fmt->conversion)) + { + fmt->conversion += 32; + ft_strcpy(fmt->modifier, "l"); + } +} +int ft_fmt_validate_conversion(t_fmt *fmt) +{ + if (!ft_strchr(ALL_CONVERSIONS, fmt->conversion)) + { + if (fmt->conversion != '%') + ft_fmt_error_conv(fmt->conversion); + return (1); + } + return (0); +} + +void ft_fmt_validate_flags(t_fmt *fmt) +{ + char *flag_ptr; + char flag; + int i; + + i = 0; + while (fmt->conversion != g_convs[i].id) + i++; + flag_ptr = fmt->flags; + while (*flag_ptr) + { + flag = *flag_ptr; + if (!ft_strchr(g_convs[i].allowed_flags, flag)) + { + ft_fmt_error_flag_conv(flag, fmt->conversion); + if (flag == '#') + *flag_ptr = '.'; + } + flag_ptr++; + } + if (ft_strchr(fmt->flags, '+') && (flag_ptr = ft_strchr(fmt->flags, ' '))) + { + ft_fmt_error_flag_flag(' ', '+'); + *flag_ptr = '.'; + } + if (ft_strchr(fmt->flags, '-') && (flag_ptr = ft_strchr(fmt->flags, '0'))) + { + ft_fmt_error_flag_flag('0', '-'); + *flag_ptr = '.'; + } + if (fmt->precision && (flag_ptr = ft_strchr(fmt->flags, '0'))) + *flag_ptr = '.'; +} + +void ft_fmt_validate_mod(t_fmt *fmt) +{ + if (fmt->conversion == 's' || fmt->conversion == 'c') + if (fmt->modifier[0] && ft_strcmp(fmt->modifier, "l")) + ft_fmt_error_mod_conv(fmt->modifier, fmt->conversion); +} diff --git a/libft/src/ft_printf/lib_pad.c b/libft/src/ft_printf/lib_pad.c new file mode 100644 index 00000000..61f30f4a --- /dev/null +++ b/libft/src/ft_printf/lib_pad.c @@ -0,0 +1,39 @@ +#include "libftprintf.h" + +void ft_pad_right(char *str, t_fmt *fmt) +{ + ft_pad_sharp(str, fmt); + while ((int)ft_strlen(str) < fmt->width) + ft_strcat(str, " "); +} + +void ft_pad_left(char *str, t_fmt *fmt) +{ + char buf[100]; + char sign; + + sign = '\0'; + if (str[0] == '-' || str[0] == '+' || str[0] == ' ') + { + sign = str[0]; + str++; + } + if (ft_strchr(fmt->flags, '0')) + { + while ((int)ft_strlen(str) < fmt->width - (sign ? 1 : 0)) + { + ft_strcpy(buf, "0"); + ft_strcat(buf, str); + ft_strcpy(str, buf); + } + } + if (sign) + str--; + ft_pad_sharp(str, fmt); + while ((int)ft_strlen(str) < fmt->width) + { + ft_strcpy(buf, " "); + ft_strcat(buf, str); + ft_strcpy(str, buf); + } +} diff --git a/libft/src/ft_printf/lib_pad_sharp.c b/libft/src/ft_printf/lib_pad_sharp.c new file mode 100644 index 00000000..5174b6b1 --- /dev/null +++ b/libft/src/ft_printf/lib_pad_sharp.c @@ -0,0 +1,42 @@ +#include "libftprintf.h" + +void ft_pad_sharp_o(char *str) +{ + char buf[100]; + + if (str[0] != '0') + { + ft_strcpy(buf, "0"); + ft_strcat(buf, str); + ft_strcpy(str, buf); + } +} + +void ft_pad_sharp_x(char *str, t_fmt *fmt) +{ + char buf[100]; + + if (str[1] == '0') + str[1] = fmt->conversion; + else + { + ft_strcpy(buf, "0"); + if (str[0] == '0') + str[0] = fmt->conversion; + else + ft_strcat(buf, &fmt->conversion); + ft_strcat(buf, str); + ft_strcpy(str, buf); + } +} + +void ft_pad_sharp(char *str, t_fmt *fmt) +{ + if (ft_strchr(fmt->flags, '#')) + { + if (fmt->conversion == 'x' || fmt->conversion == 'X') + ft_pad_sharp_x(str, fmt); + if (fmt->conversion == 'o') + ft_pad_sharp_o(str); + } +} diff --git a/libft/ft_id.c b/libft/src/lst/ft_id.c similarity index 100% rename from libft/ft_id.c rename to libft/src/lst/ft_id.c diff --git a/libft/ft_lst_cfree.c b/libft/src/lst/ft_lst_cfree.c similarity index 100% rename from libft/ft_lst_cfree.c rename to libft/src/lst/ft_lst_cfree.c diff --git a/libft/ft_lst_delif.c b/libft/src/lst/ft_lst_delif.c similarity index 100% rename from libft/ft_lst_delif.c rename to libft/src/lst/ft_lst_delif.c diff --git a/libft/ft_lst_delsub.c b/libft/src/lst/ft_lst_delsub.c similarity index 100% rename from libft/ft_lst_delsub.c rename to libft/src/lst/ft_lst_delsub.c diff --git a/libft/ft_lst_filter.c b/libft/src/lst/ft_lst_filter.c similarity index 100% rename from libft/ft_lst_filter.c rename to libft/src/lst/ft_lst_filter.c diff --git a/libft/ft_lst_find.c b/libft/src/lst/ft_lst_find.c similarity index 100% rename from libft/ft_lst_find.c rename to libft/src/lst/ft_lst_find.c diff --git a/libft/ft_lst_order_delsub.c b/libft/src/lst/ft_lst_order_delsub.c similarity index 100% rename from libft/ft_lst_order_delsub.c rename to libft/src/lst/ft_lst_order_delsub.c diff --git a/libft/ft_lst_print.c b/libft/src/lst/ft_lst_print.c similarity index 100% rename from libft/ft_lst_print.c rename to libft/src/lst/ft_lst_print.c diff --git a/libft/ft_lst_print2.c b/libft/src/lst/ft_lst_print2.c similarity index 100% rename from libft/ft_lst_print2.c rename to libft/src/lst/ft_lst_print2.c diff --git a/libft/ft_lst_removeif.c b/libft/src/lst/ft_lst_removeif.c similarity index 100% rename from libft/ft_lst_removeif.c rename to libft/src/lst/ft_lst_removeif.c diff --git a/libft/ft_lst_size.c b/libft/src/lst/ft_lst_size.c similarity index 100% rename from libft/ft_lst_size.c rename to libft/src/lst/ft_lst_size.c diff --git a/libft/ft_lst_sort.c b/libft/src/lst/ft_lst_sort.c similarity index 100% rename from libft/ft_lst_sort.c rename to libft/src/lst/ft_lst_sort.c diff --git a/libft/ft_lst_sorted_insert.c b/libft/src/lst/ft_lst_sorted_insert.c similarity index 100% rename from libft/ft_lst_sorted_insert.c rename to libft/src/lst/ft_lst_sorted_insert.c diff --git a/libft/ft_lst_sorted_merge.c b/libft/src/lst/ft_lst_sorted_merge.c similarity index 100% rename from libft/ft_lst_sorted_merge.c rename to libft/src/lst/ft_lst_sorted_merge.c diff --git a/libft/ft_lstadd.c b/libft/src/lst/ft_lstadd.c similarity index 100% rename from libft/ft_lstadd.c rename to libft/src/lst/ft_lstadd.c diff --git a/libft/ft_lstdelone.c b/libft/src/lst/ft_lstdelone.c similarity index 100% rename from libft/ft_lstdelone.c rename to libft/src/lst/ft_lstdelone.c diff --git a/libft/ft_lsteadd.c b/libft/src/lst/ft_lsteadd.c similarity index 100% rename from libft/ft_lsteadd.c rename to libft/src/lst/ft_lsteadd.c diff --git a/libft/ft_lstiter.c b/libft/src/lst/ft_lstiter.c similarity index 100% rename from libft/ft_lstiter.c rename to libft/src/lst/ft_lstiter.c diff --git a/libft/ft_lstlast.c b/libft/src/lst/ft_lstlast.c similarity index 100% rename from libft/ft_lstlast.c rename to libft/src/lst/ft_lstlast.c diff --git a/libft/ft_lstmap.c b/libft/src/lst/ft_lstmap.c similarity index 100% rename from libft/ft_lstmap.c rename to libft/src/lst/ft_lstmap.c diff --git a/libft/ft_lstnadd.c b/libft/src/lst/ft_lstnadd.c similarity index 100% rename from libft/ft_lstnadd.c rename to libft/src/lst/ft_lstnadd.c diff --git a/libft/ft_lstnew.c b/libft/src/lst/ft_lstnew.c similarity index 100% rename from libft/ft_lstnew.c rename to libft/src/lst/ft_lstnew.c diff --git a/libft/ft_lstnew_range.c b/libft/src/lst/ft_lstnew_range.c similarity index 100% rename from libft/ft_lstnew_range.c rename to libft/src/lst/ft_lstnew_range.c diff --git a/libft/ft_lstpop.c b/libft/src/lst/ft_lstpop.c similarity index 100% rename from libft/ft_lstpop.c rename to libft/src/lst/ft_lstpop.c diff --git a/libft/ft_lstsort.c b/libft/src/lst/ft_lstsort.c similarity index 100% rename from libft/ft_lstsort.c rename to libft/src/lst/ft_lstsort.c diff --git a/libft/ft_itoa.c b/libft/src/math/ft_itoa.c similarity index 100% rename from libft/ft_itoa.c rename to libft/src/math/ft_itoa.c diff --git a/libft/ft_itoa_base.c b/libft/src/math/ft_itoa_base.c similarity index 100% rename from libft/ft_itoa_base.c rename to libft/src/math/ft_itoa_base.c diff --git a/libft/ft_lltoa_base.c b/libft/src/math/ft_lltoa_base.c similarity index 100% rename from libft/ft_lltoa_base.c rename to libft/src/math/ft_lltoa_base.c diff --git a/libft/ft_uitoa_base.c b/libft/src/math/ft_uitoa_base.c similarity index 100% rename from libft/ft_uitoa_base.c rename to libft/src/math/ft_uitoa_base.c diff --git a/libft/ft_ulltoa_base.c b/libft/src/math/ft_ulltoa_base.c similarity index 100% rename from libft/ft_ulltoa_base.c rename to libft/src/math/ft_ulltoa_base.c diff --git a/libft/ft_bzero.c b/libft/src/mem/ft_bzero.c similarity index 100% rename from libft/ft_bzero.c rename to libft/src/mem/ft_bzero.c diff --git a/libft/ft_memalloc.c b/libft/src/mem/ft_memalloc.c similarity index 100% rename from libft/ft_memalloc.c rename to libft/src/mem/ft_memalloc.c diff --git a/libft/ft_memccpy.c b/libft/src/mem/ft_memccpy.c similarity index 100% rename from libft/ft_memccpy.c rename to libft/src/mem/ft_memccpy.c diff --git a/libft/ft_memchr.c b/libft/src/mem/ft_memchr.c similarity index 100% rename from libft/ft_memchr.c rename to libft/src/mem/ft_memchr.c diff --git a/libft/ft_memcmp.c b/libft/src/mem/ft_memcmp.c similarity index 100% rename from libft/ft_memcmp.c rename to libft/src/mem/ft_memcmp.c diff --git a/libft/ft_memcpy.c b/libft/src/mem/ft_memcpy.c similarity index 100% rename from libft/ft_memcpy.c rename to libft/src/mem/ft_memcpy.c diff --git a/libft/ft_memdel.c b/libft/src/mem/ft_memdel.c similarity index 100% rename from libft/ft_memdel.c rename to libft/src/mem/ft_memdel.c diff --git a/libft/ft_memmove.c b/libft/src/mem/ft_memmove.c similarity index 100% rename from libft/ft_memmove.c rename to libft/src/mem/ft_memmove.c diff --git a/libft/ft_memset.c b/libft/src/mem/ft_memset.c similarity index 100% rename from libft/ft_memset.c rename to libft/src/mem/ft_memset.c diff --git a/libft/ft_debug.c b/libft/src/misc/ft_debug.c similarity index 100% rename from libft/ft_debug.c rename to libft/src/misc/ft_debug.c diff --git a/libft/ft_putchar.c b/libft/src/printing/ft_putchar.c similarity index 100% rename from libft/ft_putchar.c rename to libft/src/printing/ft_putchar.c diff --git a/libft/ft_putchar_fd.c b/libft/src/printing/ft_putchar_fd.c similarity index 100% rename from libft/ft_putchar_fd.c rename to libft/src/printing/ft_putchar_fd.c diff --git a/libft/ft_putendl.c b/libft/src/printing/ft_putendl.c similarity index 100% rename from libft/ft_putendl.c rename to libft/src/printing/ft_putendl.c diff --git a/libft/ft_putendl_fd.c b/libft/src/printing/ft_putendl_fd.c similarity index 100% rename from libft/ft_putendl_fd.c rename to libft/src/printing/ft_putendl_fd.c diff --git a/libft/ft_putnbr.c b/libft/src/printing/ft_putnbr.c similarity index 100% rename from libft/ft_putnbr.c rename to libft/src/printing/ft_putnbr.c diff --git a/libft/ft_putnbr_fd.c b/libft/src/printing/ft_putnbr_fd.c similarity index 100% rename from libft/ft_putnbr_fd.c rename to libft/src/printing/ft_putnbr_fd.c diff --git a/libft/ft_putstr.c b/libft/src/printing/ft_putstr.c similarity index 100% rename from libft/ft_putstr.c rename to libft/src/printing/ft_putstr.c diff --git a/libft/ft_putstr_fd.c b/libft/src/printing/ft_putstr_fd.c similarity index 100% rename from libft/ft_putstr_fd.c rename to libft/src/printing/ft_putstr_fd.c diff --git a/libft/ft_atoi.c b/libft/src/str/ft_atoi.c similarity index 100% rename from libft/ft_atoi.c rename to libft/src/str/ft_atoi.c diff --git a/libft/ft_strcat.c b/libft/src/str/ft_strcat.c similarity index 100% rename from libft/ft_strcat.c rename to libft/src/str/ft_strcat.c diff --git a/libft/ft_strchr.c b/libft/src/str/ft_strchr.c similarity index 100% rename from libft/ft_strchr.c rename to libft/src/str/ft_strchr.c diff --git a/libft/ft_strclr.c b/libft/src/str/ft_strclr.c similarity index 100% rename from libft/ft_strclr.c rename to libft/src/str/ft_strclr.c diff --git a/libft/ft_strcmp.c b/libft/src/str/ft_strcmp.c similarity index 100% rename from libft/ft_strcmp.c rename to libft/src/str/ft_strcmp.c diff --git a/libft/ft_strcpy.c b/libft/src/str/ft_strcpy.c similarity index 100% rename from libft/ft_strcpy.c rename to libft/src/str/ft_strcpy.c diff --git a/libft/ft_strdel.c b/libft/src/str/ft_strdel.c similarity index 100% rename from libft/ft_strdel.c rename to libft/src/str/ft_strdel.c diff --git a/libft/ft_strdup.c b/libft/src/str/ft_strdup.c similarity index 100% rename from libft/ft_strdup.c rename to libft/src/str/ft_strdup.c diff --git a/libft/ft_strequ.c b/libft/src/str/ft_strequ.c similarity index 100% rename from libft/ft_strequ.c rename to libft/src/str/ft_strequ.c diff --git a/libft/ft_striter.c b/libft/src/str/ft_striter.c similarity index 100% rename from libft/ft_striter.c rename to libft/src/str/ft_striter.c diff --git a/libft/ft_striteri.c b/libft/src/str/ft_striteri.c similarity index 100% rename from libft/ft_striteri.c rename to libft/src/str/ft_striteri.c diff --git a/libft/ft_strjoin.c b/libft/src/str/ft_strjoin.c similarity index 100% rename from libft/ft_strjoin.c rename to libft/src/str/ft_strjoin.c diff --git a/libft/ft_strlcat.c b/libft/src/str/ft_strlcat.c similarity index 100% rename from libft/ft_strlcat.c rename to libft/src/str/ft_strlcat.c diff --git a/libft/ft_strlen.c b/libft/src/str/ft_strlen.c similarity index 100% rename from libft/ft_strlen.c rename to libft/src/str/ft_strlen.c diff --git a/libft/ft_strmap.c b/libft/src/str/ft_strmap.c similarity index 100% rename from libft/ft_strmap.c rename to libft/src/str/ft_strmap.c diff --git a/libft/ft_strmapi.c b/libft/src/str/ft_strmapi.c similarity index 100% rename from libft/ft_strmapi.c rename to libft/src/str/ft_strmapi.c diff --git a/libft/ft_strncat.c b/libft/src/str/ft_strncat.c similarity index 100% rename from libft/ft_strncat.c rename to libft/src/str/ft_strncat.c diff --git a/libft/ft_strncmp.c b/libft/src/str/ft_strncmp.c similarity index 100% rename from libft/ft_strncmp.c rename to libft/src/str/ft_strncmp.c diff --git a/libft/ft_strncpy.c b/libft/src/str/ft_strncpy.c similarity index 100% rename from libft/ft_strncpy.c rename to libft/src/str/ft_strncpy.c diff --git a/libft/ft_strnequ.c b/libft/src/str/ft_strnequ.c similarity index 100% rename from libft/ft_strnequ.c rename to libft/src/str/ft_strnequ.c diff --git a/libft/ft_strnew.c b/libft/src/str/ft_strnew.c similarity index 100% rename from libft/ft_strnew.c rename to libft/src/str/ft_strnew.c diff --git a/libft/ft_strnstr.c b/libft/src/str/ft_strnstr.c similarity index 100% rename from libft/ft_strnstr.c rename to libft/src/str/ft_strnstr.c diff --git a/libft/ft_strrchr.c b/libft/src/str/ft_strrchr.c similarity index 100% rename from libft/ft_strrchr.c rename to libft/src/str/ft_strrchr.c diff --git a/libft/ft_strrev.c b/libft/src/str/ft_strrev.c similarity index 100% rename from libft/ft_strrev.c rename to libft/src/str/ft_strrev.c diff --git a/libft/ft_strsplit.c b/libft/src/str/ft_strsplit.c similarity index 100% rename from libft/ft_strsplit.c rename to libft/src/str/ft_strsplit.c diff --git a/libft/ft_strstr.c b/libft/src/str/ft_strstr.c similarity index 100% rename from libft/ft_strstr.c rename to libft/src/str/ft_strstr.c diff --git a/libft/ft_strsub.c b/libft/src/str/ft_strsub.c similarity index 100% rename from libft/ft_strsub.c rename to libft/src/str/ft_strsub.c diff --git a/libft/ft_strtrim.c b/libft/src/str/ft_strtrim.c similarity index 100% rename from libft/ft_strtrim.c rename to libft/src/str/ft_strtrim.c