commit 8eea3162d575002fd23952d6c4bb8a04b98bbca2 Author: root Date: Mon Aug 25 20:07:37 2025 +0000 Firstcommit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..80de5a6 --- /dev/null +++ b/Makefile @@ -0,0 +1,46 @@ +CC = gcc +CFLAGS = -Wall -Wextra -Werror +NAME = cub3d + +SRCDIR = srcs +INCDIR = includes +LIBFT = libft/libft.a +GNL = gnl/gnl.a + +SRCS = $(SRCDIR)/main.c \ + $(SRCDIR)/parsing/parsing.c \ + $(SRCDIR)/parsing/check_file.c \ + $(SRCDIR)/parsing/init_parsing.c \ + $(SRCDIR)/parsing/get_map.c \ + $(SRCDIR)/parsing/line_detect.c \ + $(SRCDIR)/parsing/get_textures.c \ + $(SRCDIR)/parsing/check_colors.c \ + $(SRCDIR)/utils/utils.c \ + $(SRCDIR)/utils/init.c \ + $(SRCDIR)/utils/debug.c \ + +INCS = $(INCDIR)/parsing.h \ + $(INCDIR)/cub.h \ + $(INCDIR)/messages.h \ + +all: $(NAME) + +$(NAME): $(SRCS) $(INCS) + @$(MAKE) -s -C libft + @$(MAKE) -s -C gnl + $(CC) -g -I$(INCDIR) $(SRCS) -o $(NAME) $(LIBFT) $(GNL) + +clean: + rm -f $(NAME) + @make clean -s -C libft + @make clean -s -C gnl + +clean1: + rm -f $(NAME) + +fclean: clean1 + @make fclean -s -C libft + @make fclean -s -C gnl +re: fclean all + +.PHONY: all clean fclean re clean1 diff --git a/cub3d b/cub3d new file mode 100755 index 0000000..660c7d5 Binary files /dev/null and b/cub3d differ diff --git a/gnl/Makefile b/gnl/Makefile new file mode 100644 index 0000000..baedc93 --- /dev/null +++ b/gnl/Makefile @@ -0,0 +1,61 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: lfirmin lfirmim@student.42.fr> +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/08/12 07:07:31 by lfirmin #+# #+# # +# Updated: 2024/08/12 09:15:05 by lfirmin ### ########.fr # +# # +# **************************************************************************** # + +NAME = gnl.a +SRCS_DIR = srcs/ +INCS_DIR = includes/ +OBJ_DIR = obj/ + +SRC = get_next_line.c get_next_line_utils.c + +CC = cc +CFLAGS = -Wall -Wextra -Werror +INCLUDE = -I $(INCS_DIR) +SRCS = $(addprefix $(SRCS_DIR), $(SRC)) +OBJ = $(addprefix $(OBJ_DIR), $(SRC:.c=.o)) + +# Colors +GREEN = \033[0;32m +YELLOW = \033[0;33m +RESET = \033[0m +WHITE = \033[0;97m + +# Loading animation +LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ + +all: $(NAME) + +$(NAME): $(OBJ) + @printf "$(YELLOW)Compiling get_next_line, Please wait...$(RESET)" + @for char in $(LOADING_CHARS); do \ + printf "\r$(YELLOW)Compiling get_next_line, Please wait... $$char$(RESET)"; \ + sleep 0.1; \ + done + @ar rc $(NAME) $(OBJ) + @ranlib $(NAME) + @printf "\r$(GREEN)fine ! $(WHITE)get_next_line compiled successfully ! $(RESET)\n" + +$(OBJ_DIR)%.o: $(SRCS_DIR)%.c + @mkdir -p $(OBJ_DIR) + @$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + @rm -rf $(OBJ_DIR) + @printf "$(WHITE)Clean process completed for $(GREEN)get_next_line.$(RESET)\n" + +fclean: clean + @rm -f $(NAME) + @printf "$(WHITE)Full clean process completed for $(GREEN)get_next_line.$(RESET)\n" + +re: fclean all + +.PHONY: all clean fclean re diff --git a/gnl/gnl.a b/gnl/gnl.a new file mode 100644 index 0000000..a81d41a Binary files /dev/null and b/gnl/gnl.a differ diff --git a/gnl/include/get_next_line.h b/gnl/include/get_next_line.h new file mode 100644 index 0000000..9ffb3e2 --- /dev/null +++ b/gnl/include/get_next_line.h @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: abelghou +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/21 19:32:47 by abelghou #+# #+# */ +/* Updated: 2024/07/23 20:47:15 by abelghou ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_H +# define GET_NEXT_LINE_H + +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 1000 +# endif + +# include +# include +# include +# include + +char *ft_substr(char const *s, unsigned int start, size_t len); +int ft_strlen_g(const char *str); +char *ft_strchr_gnl(const char *s, int i); +char *ft_strdup_g(const char *s); +char *ft_strjoin(char const *s1, char const *s2); +char *get_next_line(int fd); + +#endif \ No newline at end of file diff --git a/gnl/obj/get_next_line.o b/gnl/obj/get_next_line.o new file mode 100644 index 0000000..f875ed0 Binary files /dev/null and b/gnl/obj/get_next_line.o differ diff --git a/gnl/obj/get_next_line_utils.o b/gnl/obj/get_next_line_utils.o new file mode 100644 index 0000000..ce5eb42 Binary files /dev/null and b/gnl/obj/get_next_line_utils.o differ diff --git a/gnl/readme.md b/gnl/readme.md new file mode 100644 index 0000000..8e0d256 --- /dev/null +++ b/gnl/readme.md @@ -0,0 +1,41 @@ +# get_next_line + +A function that reads a line from a file descriptor. + +## 💡 About +The get_next_line project is a programming function that reads a line ending with a newline character from a file descriptor. When calling the function in a loop, it will then allow you to read the text file pointed to by the file descriptor, one line at a time until the end of the file. + +## 🛠️ Function Prototype +```c +char *get_next_line(int fd); +``` +## 📋 Usage +```c +#include "get_next_line.h" +#include + +int main(void) +{ + int fd; + char *line; + + fd = open("test.txt", O_RDONLY); + while ((line = get_next_line(fd)) != NULL) + { + printf("%s", line); + free(line); + } + close(fd); + return (0); +} +``` + +## ⚠️ Return Value +* The line that was read when successful +* NULL if there is nothing else to read or if an error occurred + +## 📊 Expected Behavior +* Repeated calls to get_next_line() should let you read the text file pointed to by the file descriptor, one line at a time +* The function should return the line that was read +* If there is nothing else to read or if an error occurred, it should return NULL +* The returned line should include the terminating \n character, except if the end of file was reached and does not end with a \n character \ No newline at end of file diff --git a/gnl/srcs/get_next_line.c b/gnl/srcs/get_next_line.c new file mode 100644 index 0000000..24fb53f --- /dev/null +++ b/gnl/srcs/get_next_line.c @@ -0,0 +1,102 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: abelghou +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/17 21:31:24 by abelghou #+# #+# */ +/* Updated: 2024/07/24 18:17:55 by abelghou ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../include/get_next_line.h" + +static char *sort_and_store(int fd, char *buf, char *backup) +{ + int read_line; + char *char_temp; + + read_line = 1; + while (read_line != 0) + { + read_line = read(fd, buf, BUFFER_SIZE); + if (read_line == -1) + return (0); + else if (read_line == 0) + break ; + buf[read_line] = '\0'; + if (!backup) + backup = ft_strdup_g(""); + if (!backup) + return (NULL); + char_temp = backup; + backup = ft_strjoin(char_temp, buf); + free(char_temp); + char_temp = NULL; + if (ft_strchr_gnl (buf, '\n')) + break ; + } + return (backup); +} + +static char *extract(char *line) +{ + size_t count; + char *backup; + + count = 0; + while (line[count] != '\n' && line[count] != '\0') + count++; + if (line[count] == '\0' || line[1] == '\0') + return (0); + backup = ft_substr(line, count + 1, ft_strlen_g(line) - count); + if (!backup) + return (NULL); + if (*backup == '\0') + { + free (backup); + backup = NULL; + } + line[count + 1] = '\0'; + return (backup); +} + +char *get_next_line(int fd) +{ + char *line; + char *buf; + char *temp; + static char *backup; + + if (fd < 0 || BUFFER_SIZE <= 0) + return (free(backup), backup = NULL, NULL); + buf = (char *)malloc(sizeof(char) * (BUFFER_SIZE + 1)); + if (!buf) + return (free(backup), backup = NULL, NULL); + line = sort_and_store(fd, buf, backup); + free(buf); + buf = NULL; + if (!line) + return (free(backup), backup = NULL, NULL); + backup = extract(line); + temp = ft_strdup_g(line); + free(line); + if (!temp) + return (free(backup), backup = NULL, NULL); + return (temp); +} + +// int main() +// { +// int fd; +// char *line; +// fd = open("fd.txt", O_RDONLY); +// while((line = get_next_line(fd)) != NULL) +// { +// printf("%s", line); +// free(line); +// } +// line = get_next_line(fd); +// close(fd); +// } \ No newline at end of file diff --git a/gnl/srcs/get_next_line_utils.c b/gnl/srcs/get_next_line_utils.c new file mode 100644 index 0000000..5ba6d2d --- /dev/null +++ b/gnl/srcs/get_next_line_utils.c @@ -0,0 +1,106 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: abelghou +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/21 19:34:18 by abelghou #+# #+# */ +/* Updated: 2024/07/23 20:06:41 by abelghou ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../include/get_next_line.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + size_t i; + size_t j; + char *str; + + str = (char *)malloc(sizeof(*s) * (len + 1)); + if (str == 0) + return (NULL); + i = 0; + j = 0; + while (s[i]) + { + if (i >= start && j < len) + { + str[j] = s[i]; + j++; + } + i++; + } + str[j] = '\0'; + return (str); +} + +int ft_strlen_g(const char *str) +{ + int i; + + i = 0; + while (str[i]) + i++; + return (i); +} + +char *ft_strchr_gnl(const char *s, int i) +{ + while (*s) + { + if (*s == i) + return ((char *)s); + s++; + } + if (i == '\0') + return ((char *)s); + return (0); +} + +char *ft_strdup_g(const char *s) +{ + int i; + int j; + char *str; + + i = 0; + j = ft_strlen_g(s); + str = (char *)malloc(sizeof(*str) * (j + 1)); + if (!str) + return (NULL); + while (i < j) + { + str[i] = s[i]; + i++; + } + str[i] = '\0'; + return (str); +} + +char *ft_strjoin(char const *s1, char const *s2) +{ + int i; + int j; + char *str; + + i = 0; + j = 0; + str = (char *)malloc(sizeof(char) * (ft_strlen_g(s1) \ + + ft_strlen_g(s2) + 1)); + if (str == NULL) + return (NULL); + while (s1[i] != '\0') + { + str[i] = s1[i]; + i++; + } + while (s2[j] != '\0') + { + str[i + j] = s2[j]; + j++; + } + str[i + j] = '\0'; + return (str); +} diff --git a/includes/cub.h b/includes/cub.h new file mode 100644 index 0000000..9375c66 --- /dev/null +++ b/includes/cub.h @@ -0,0 +1,29 @@ + +#ifndef CUB_H +#define CUB_H + +#include "parsing.h" +#include "messages.h" +#include "../libft/include/libft.h" +#include "../gnl/include/get_next_line.h" + +typedef struct s_data +{ + char **map; + char *map_path; + t_textures *texture; + t_data_parsing parsing; +} t_data; + +//////utils///// +//utils +void ft_error(char *message); +void free_char_array(char **array); +//init +int init_data(t_data *data, char *path); +void free_data(t_data *data); + +/////debug +void print_char_array_debug(char **arr, char *name); + +#endif \ No newline at end of file diff --git a/includes/messages.h b/includes/messages.h new file mode 100644 index 0000000..97b4559 --- /dev/null +++ b/includes/messages.h @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* messages.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/22 15:00:45 by lfirmin #+# #+# */ +/* Updated: 2025/08/22 15:01:20 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#ifndef MESSAGE_H +#define MESSAGE_H + +#define ERROR_PREFIX "\033[1m[❌]\033[0m\033[1;31mError\033[0m: " +#define ERROR_EXT "Invalid file extension. Only .cub files are accepted." +#define ERROR_EMPT_PATH "Invalid map file path." +#define ERROR_INIT_DATA "Initialization of the data structure failed." +#define ERROR_INIT_TEX "Initialization of the textures structure failed." +#define ERROR_INIT_PARS "Initialization of the parsing structure failed." +#define ERROR_EMPTY "You have provided an empty file." +#define ERROR_COL "The RGB values provided are not valid." + +#define DEBUG "test" + +#endif \ No newline at end of file diff --git a/includes/parsing.h b/includes/parsing.h new file mode 100644 index 0000000..c1c46a6 --- /dev/null +++ b/includes/parsing.h @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parsing.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/22 14:08:04 by lfirmin #+# #+# */ +/* Updated: 2025/08/22 14:18:06 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef PARSING_H +#define PARSING_H + +#include +#include +#include +#include + +struct s_data; +typedef struct s_data t_data; + +typedef struct s_textures +{ + char *north; //Path to texture.xmp + char *south; //Path to texture.xmp + char *east; //Path to texture.xmp + char *west; //Path to texture.xmp + int floor[3]; //RGB: [0] = R, [1] = G, [2] = B + int ceiling[3]; //RGB: [0] = R, [1] = G, [2] = B +} t_textures; + +typedef struct s_data_parsing +{ + char **raw_map; + int fd_map; + int fd_map_dup; +} t_data_parsing; + +//parsing +int parsing(t_data *data); + +//check_file +int check_extension(char *map_path); +int check_file(char *map_path, t_data_parsing *parsing); + +//get_map +int get_map(t_data *data); +int line_counter(int fd); +int put_map_on_array(t_data *data); +char *clean_line(char *raw_line); + +//init_parsing +int init_parsing(t_data_parsing *parsing); +int init_textures(t_textures *textures); +int free_textures(t_textures *textures); + +//line_detect +int is_config_line(char *line); +int is_empty_line(char *line); +int is_texture_line(char *line); +int is_color_line(char *line); + +//get_textures +int get_texture_path(char *line, t_textures *texture); +int get_rgb_values(char *line, int rgb[3]); + +//check_colors +int check_colors(t_textures *texture); +int is_rgb(int color[3]); +#endif \ No newline at end of file diff --git a/libft/Makefile b/libft/Makefile new file mode 100644 index 0000000..dc17dcc --- /dev/null +++ b/libft/Makefile @@ -0,0 +1,68 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: lfirmin +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/05/19 12:59:31 by lfirmin #+# #+# # +# Updated: 2025/04/19 11:53:48 by lfirmin ### ########.fr # +# # +# **************************************************************************** # + +NAME = libft.a +HEADER = ./include +SRCS_DIR = ./srcs/ +SRC = ft_isalnum.c ft_isprint.c ft_memcmp.c ft_putchar_fd.c ft_split.c \ + ft_strlcat.c ft_strncmp.c ft_substr.c ft_atoi.c ft_isalpha.c \ + ft_itoa.c ft_memcpy.c ft_putendl_fd.c ft_strchr.c ft_strlcpy.c \ + ft_strnstr.c ft_tolower.c ft_bzero.c ft_isascii.c ft_strtrim.c \ + ft_memmove.c ft_putnbr_fd.c ft_strdup.c ft_strlen.c ft_strrchr.c \ + ft_toupper.c ft_calloc.c ft_isdigit.c ft_memchr.c ft_memset.c \ + ft_putstr_fd.c ft_strjoin.c ft_strmapi.c ft_striteri.c \ + ft_lstnew_bonus.c ft_lstadd_front_bonus.c ft_lstsize_bonus.c \ + ft_lstlast_bonus.c ft_lstadd_back_bonus.c ft_lstdelone_bonus.c \ + ft_lstclear_bonus.c ft_lstiter_bonus.c ft_lstmap_bonus.c ft_strcmp.c \ + ft_atoll.c ft_straddchar.c ft_strcpy.c + +SRCS = $(addprefix $(SRCS_DIR), $(SRC)) +CC = cc +CFLAGS = -Wall -Wextra -Werror -g3 +INCLUDE = -I $(HEADER) +OBJ_DIR = obj/ +OBJ = $(addprefix $(OBJ_DIR), $(SRC:.c=.o)) + +GREEN = \033[0;32m +YELLOW = \033[0;33m +RESET = \033[0m +WHITE = \033[0;97m + +LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ + +all: $(NAME) + +$(NAME): $(OBJ) + @printf "$(YELLOW)Compiling libft, Please wait...$(RESET)" + @for char in $(LOADING_CHARS); do \ + printf "\r$(YELLOW)Compiling libft, Please wait... $$char$(RESET)"; \ + sleep 0.1; \ + done + @ar rc $(NAME) $(OBJ) + @ranlib $(NAME) + @printf "\r$(GREEN)Great news ! $(WHITE)Libft compiled successfully ! $(RESET)\n" + +$(OBJ_DIR)%.o: $(SRCS_DIR)%.c + @mkdir -p $(OBJ_DIR) + @$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + @rm -rf $(OBJ_DIR) + @printf "$(WHITE)Clean process completed for $(GREEN)Libft.$(RESET)\n" + +fclean: clean + @rm -f $(NAME) + @printf "$(WHITE)Full clean process completed for $(GREEN)Libft.$(RESET)\n" + +re: fclean all + +.PHONY: all clean fclean re \ No newline at end of file diff --git a/libft/Readme.md b/libft/Readme.md new file mode 100644 index 0000000..ef5f375 --- /dev/null +++ b/libft/Readme.md @@ -0,0 +1,55 @@ +# Libft - 42 Project + +## Description +Libft is the first project at 42 school. The aim is to recreate various standard C library functions, as well as additional functions that will be useful throughout the cursus. This library will be used in most of the future 42 projects. + +## Functions + +### Libc Functions +`ft_isalpha` • `ft_isdigit` • `ft_isalnum` • `ft_isascii` • `ft_isprint` • `ft_strlen` • `ft_memset` • `ft_bzero` • `ft_memcpy` • `ft_memmove` • `ft_strlcpy` • `ft_strlcat` • `ft_toupper` • `ft_tolower` • `ft_strchr` • `ft_strrchr` • `ft_strncmp` • `ft_memchr` • `ft_memcmp` • `ft_strnstr` • `ft_atoi` • `ft_calloc` • `ft_strdup` + +### Additional Functions +`ft_substr` • `ft_strjoin` • `ft_strtrim` • `ft_split` • `ft_itoa` • `ft_strmapi` • `ft_striteri` • `ft_putchar_fd` • `ft_putstr_fd` • `ft_putendl_fd` • `ft_putnbr_fd` + +### Bonus Functions +`ft_lstnew` • `ft_lstadd_front` • `ft_lstsize` • `ft_lstlast` • `ft_lstadd_back` • `ft_lstdelone` • `ft_lstclear` • `ft_lstiter` • `ft_lstmap` + +## Getting Started + +### Prerequisites +- GCC compiler +- Make + +### Usage +1. Include the header in your source file: +```c +#include "libft.h" +``` + +### Compilation +1. Compilation: +```bash +make +``` + +## Cleaning +- Remove object files: +```bash +make clean +``` + +- Remove object files and library: +```bash +make fclean +``` + +- Recompile everything: +```bash +make re +``` + +## Testing +This project doesn't come with unit tests, but you can use external testers: +- [libft-unit-test](https://github.com/alelievr/libft-unit-test) +- [libft-war-machine](https://github.com/ska42/libft-war-machine) +- [Tripouille/libfTester](https://github.com/Tripouille/libftTester) diff --git a/libft/include/libft.h b/libft/include/libft.h new file mode 100644 index 0000000..caf9d9c --- /dev/null +++ b/libft/include/libft.h @@ -0,0 +1,92 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 11:19:08 by lfirmin #+# #+# */ +/* Updated: 2025/04/19 11:56:03 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H + +# include +# include +# include +# include +# include +# include + +typedef struct v +{ + char **array; + int i; + int j; + int start; + int end; +} t_split_struct; + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +int ft_isalnum(int c); +int ft_isalpha(int c); +int ft_isascii(int c); +int ft_isdigit(int c); +int ft_isprint(int c); +int ft_atoi(const char *str); +int ft_memcmp(const void *ptr1, const void *ptr2, size_t num); +int ft_strncmp(const char *s1, const char *s2, unsigned int n); +int ft_toupper(int c); +int ft_tolower(int c); +int ft_lstsize(t_list *lst); +int ft_strcmp(char *s1, char *s2); +long long ft_atoll(const char *str); + +size_t ft_strlen(const char *s); +size_t ft_strlcat(char *dst, const char *src, size_t size); +size_t ft_strlcpy(char *dst, const char *src, size_t dsts); + +void *ft_bzero(void *s, size_t n); +void *ft_calloc(size_t count, size_t n); +void *ft_memchr(const void *s, int c, size_t n); +void *ft_memcpy(void *dest, const void *src, size_t len); +void *ft_memset(void *b, int c, size_t len); +void *ft_memmove(void *s1, const void *s2, size_t len); +void *ft_memset(void *str, int c, size_t n); +void ft_putchar_fd(char c, int fd); +void ft_putstr_fd(char *s, int fd); +void ft_putendl_fd(char *s, int fd); +void ft_putnbr_fd(int n, int fd); +void ft_striteri(char *s, void (*f)(unsigned int, char*)); +void ft_lstadd_front(t_list **lst, t_list *new); +void ft_lstadd_back(t_list **lst, t_list *new); +void ft_lstdelone(t_list *lst, void (*del)(void*)); +void ft_lstclear(t_list **lst, void (*del)(void*)); +void ft_lstiter(t_list *lst, void (*f)(void *)); + +char *ft_strchr(char const *str, int c); +char *ft_strdup(const char *src); +char *ft_strjoin(const char *s1, const char *s2); +char *ft_strnstr(const char *hay, const char *need, size_t len); +char *ft_strrchr(const char *str, int c); +char *ft_strtrim(char const *s1, char const *set); +char *ft_substr(char const *s, unsigned int start, size_t len); +char **ft_split(char const *s, char c); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +char *ft_itoa(int n); +char *ft_straddchar(char *str, char c); +char *ft_strcpy(char *dest, char *src); + +t_list *ft_lstnew(void *content); +t_list *ft_lstlast(t_list *lst); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), \ + void (*del)(void *)); + +#endif \ No newline at end of file diff --git a/libft/libft.a b/libft/libft.a new file mode 100644 index 0000000..e187b83 Binary files /dev/null and b/libft/libft.a differ diff --git a/libft/obj/ft_atoi.o b/libft/obj/ft_atoi.o new file mode 100644 index 0000000..ca72c3c Binary files /dev/null and b/libft/obj/ft_atoi.o differ diff --git a/libft/obj/ft_atoll.o b/libft/obj/ft_atoll.o new file mode 100644 index 0000000..37c372c Binary files /dev/null and b/libft/obj/ft_atoll.o differ diff --git a/libft/obj/ft_bzero.o b/libft/obj/ft_bzero.o new file mode 100644 index 0000000..be086ff Binary files /dev/null and b/libft/obj/ft_bzero.o differ diff --git a/libft/obj/ft_calloc.o b/libft/obj/ft_calloc.o new file mode 100644 index 0000000..de633bf Binary files /dev/null and b/libft/obj/ft_calloc.o differ diff --git a/libft/obj/ft_isalnum.o b/libft/obj/ft_isalnum.o new file mode 100644 index 0000000..121d636 Binary files /dev/null and b/libft/obj/ft_isalnum.o differ diff --git a/libft/obj/ft_isalpha.o b/libft/obj/ft_isalpha.o new file mode 100644 index 0000000..ae2efe8 Binary files /dev/null and b/libft/obj/ft_isalpha.o differ diff --git a/libft/obj/ft_isascii.o b/libft/obj/ft_isascii.o new file mode 100644 index 0000000..6119c28 Binary files /dev/null and b/libft/obj/ft_isascii.o differ diff --git a/libft/obj/ft_isdigit.o b/libft/obj/ft_isdigit.o new file mode 100644 index 0000000..bf0722d Binary files /dev/null and b/libft/obj/ft_isdigit.o differ diff --git a/libft/obj/ft_isprint.o b/libft/obj/ft_isprint.o new file mode 100644 index 0000000..c72f58e Binary files /dev/null and b/libft/obj/ft_isprint.o differ diff --git a/libft/obj/ft_itoa.o b/libft/obj/ft_itoa.o new file mode 100644 index 0000000..8c24108 Binary files /dev/null and b/libft/obj/ft_itoa.o differ diff --git a/libft/obj/ft_lstadd_back_bonus.o b/libft/obj/ft_lstadd_back_bonus.o new file mode 100644 index 0000000..67c1f2e Binary files /dev/null and b/libft/obj/ft_lstadd_back_bonus.o differ diff --git a/libft/obj/ft_lstadd_front_bonus.o b/libft/obj/ft_lstadd_front_bonus.o new file mode 100644 index 0000000..30a9e4f Binary files /dev/null and b/libft/obj/ft_lstadd_front_bonus.o differ diff --git a/libft/obj/ft_lstclear_bonus.o b/libft/obj/ft_lstclear_bonus.o new file mode 100644 index 0000000..32ee2ef Binary files /dev/null and b/libft/obj/ft_lstclear_bonus.o differ diff --git a/libft/obj/ft_lstdelone_bonus.o b/libft/obj/ft_lstdelone_bonus.o new file mode 100644 index 0000000..953015a Binary files /dev/null and b/libft/obj/ft_lstdelone_bonus.o differ diff --git a/libft/obj/ft_lstiter_bonus.o b/libft/obj/ft_lstiter_bonus.o new file mode 100644 index 0000000..9933fd3 Binary files /dev/null and b/libft/obj/ft_lstiter_bonus.o differ diff --git a/libft/obj/ft_lstlast_bonus.o b/libft/obj/ft_lstlast_bonus.o new file mode 100644 index 0000000..e3f8e88 Binary files /dev/null and b/libft/obj/ft_lstlast_bonus.o differ diff --git a/libft/obj/ft_lstmap_bonus.o b/libft/obj/ft_lstmap_bonus.o new file mode 100644 index 0000000..5f758e0 Binary files /dev/null and b/libft/obj/ft_lstmap_bonus.o differ diff --git a/libft/obj/ft_lstnew_bonus.o b/libft/obj/ft_lstnew_bonus.o new file mode 100644 index 0000000..299d50d Binary files /dev/null and b/libft/obj/ft_lstnew_bonus.o differ diff --git a/libft/obj/ft_lstsize_bonus.o b/libft/obj/ft_lstsize_bonus.o new file mode 100644 index 0000000..5032c79 Binary files /dev/null and b/libft/obj/ft_lstsize_bonus.o differ diff --git a/libft/obj/ft_memchr.o b/libft/obj/ft_memchr.o new file mode 100644 index 0000000..c3f003f Binary files /dev/null and b/libft/obj/ft_memchr.o differ diff --git a/libft/obj/ft_memcmp.o b/libft/obj/ft_memcmp.o new file mode 100644 index 0000000..6275aad Binary files /dev/null and b/libft/obj/ft_memcmp.o differ diff --git a/libft/obj/ft_memcpy.o b/libft/obj/ft_memcpy.o new file mode 100644 index 0000000..795ca66 Binary files /dev/null and b/libft/obj/ft_memcpy.o differ diff --git a/libft/obj/ft_memmove.o b/libft/obj/ft_memmove.o new file mode 100644 index 0000000..f2a2d83 Binary files /dev/null and b/libft/obj/ft_memmove.o differ diff --git a/libft/obj/ft_memset.o b/libft/obj/ft_memset.o new file mode 100644 index 0000000..25fbb68 Binary files /dev/null and b/libft/obj/ft_memset.o differ diff --git a/libft/obj/ft_putchar_fd.o b/libft/obj/ft_putchar_fd.o new file mode 100644 index 0000000..7f16461 Binary files /dev/null and b/libft/obj/ft_putchar_fd.o differ diff --git a/libft/obj/ft_putendl_fd.o b/libft/obj/ft_putendl_fd.o new file mode 100644 index 0000000..45e092e Binary files /dev/null and b/libft/obj/ft_putendl_fd.o differ diff --git a/libft/obj/ft_putnbr_fd.o b/libft/obj/ft_putnbr_fd.o new file mode 100644 index 0000000..6dd260e Binary files /dev/null and b/libft/obj/ft_putnbr_fd.o differ diff --git a/libft/obj/ft_putstr_fd.o b/libft/obj/ft_putstr_fd.o new file mode 100644 index 0000000..70dfe77 Binary files /dev/null and b/libft/obj/ft_putstr_fd.o differ diff --git a/libft/obj/ft_split.o b/libft/obj/ft_split.o new file mode 100644 index 0000000..8bbdd52 Binary files /dev/null and b/libft/obj/ft_split.o differ diff --git a/libft/obj/ft_straddchar.o b/libft/obj/ft_straddchar.o new file mode 100644 index 0000000..457b929 Binary files /dev/null and b/libft/obj/ft_straddchar.o differ diff --git a/libft/obj/ft_strchr.o b/libft/obj/ft_strchr.o new file mode 100644 index 0000000..5c63d94 Binary files /dev/null and b/libft/obj/ft_strchr.o differ diff --git a/libft/obj/ft_strcmp.o b/libft/obj/ft_strcmp.o new file mode 100644 index 0000000..d23b9c1 Binary files /dev/null and b/libft/obj/ft_strcmp.o differ diff --git a/libft/obj/ft_strcpy.o b/libft/obj/ft_strcpy.o new file mode 100644 index 0000000..360c3a7 Binary files /dev/null and b/libft/obj/ft_strcpy.o differ diff --git a/libft/obj/ft_strdup.o b/libft/obj/ft_strdup.o new file mode 100644 index 0000000..f9669a9 Binary files /dev/null and b/libft/obj/ft_strdup.o differ diff --git a/libft/obj/ft_striteri.o b/libft/obj/ft_striteri.o new file mode 100644 index 0000000..1341711 Binary files /dev/null and b/libft/obj/ft_striteri.o differ diff --git a/libft/obj/ft_strjoin.o b/libft/obj/ft_strjoin.o new file mode 100644 index 0000000..f67b4ef Binary files /dev/null and b/libft/obj/ft_strjoin.o differ diff --git a/libft/obj/ft_strlcat.o b/libft/obj/ft_strlcat.o new file mode 100644 index 0000000..94339c9 Binary files /dev/null and b/libft/obj/ft_strlcat.o differ diff --git a/libft/obj/ft_strlcpy.o b/libft/obj/ft_strlcpy.o new file mode 100644 index 0000000..040be82 Binary files /dev/null and b/libft/obj/ft_strlcpy.o differ diff --git a/libft/obj/ft_strlen.o b/libft/obj/ft_strlen.o new file mode 100644 index 0000000..2b75faf Binary files /dev/null and b/libft/obj/ft_strlen.o differ diff --git a/libft/obj/ft_strmapi.o b/libft/obj/ft_strmapi.o new file mode 100644 index 0000000..87c09a4 Binary files /dev/null and b/libft/obj/ft_strmapi.o differ diff --git a/libft/obj/ft_strncmp.o b/libft/obj/ft_strncmp.o new file mode 100644 index 0000000..fb4b9f4 Binary files /dev/null and b/libft/obj/ft_strncmp.o differ diff --git a/libft/obj/ft_strnstr.o b/libft/obj/ft_strnstr.o new file mode 100644 index 0000000..b13c723 Binary files /dev/null and b/libft/obj/ft_strnstr.o differ diff --git a/libft/obj/ft_strrchr.o b/libft/obj/ft_strrchr.o new file mode 100644 index 0000000..482fbe3 Binary files /dev/null and b/libft/obj/ft_strrchr.o differ diff --git a/libft/obj/ft_strtrim.o b/libft/obj/ft_strtrim.o new file mode 100644 index 0000000..09ca38f Binary files /dev/null and b/libft/obj/ft_strtrim.o differ diff --git a/libft/obj/ft_substr.o b/libft/obj/ft_substr.o new file mode 100644 index 0000000..e8b22b9 Binary files /dev/null and b/libft/obj/ft_substr.o differ diff --git a/libft/obj/ft_tolower.o b/libft/obj/ft_tolower.o new file mode 100644 index 0000000..874f0c6 Binary files /dev/null and b/libft/obj/ft_tolower.o differ diff --git a/libft/obj/ft_toupper.o b/libft/obj/ft_toupper.o new file mode 100644 index 0000000..bdc406c Binary files /dev/null and b/libft/obj/ft_toupper.o differ diff --git a/libft/srcs/ft_atoi.c b/libft/srcs/ft_atoi.c new file mode 100644 index 0000000..a05a597 --- /dev/null +++ b/libft/srcs/ft_atoi.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 10:09:46 by lfirmin #+# #+# */ +/* Updated: 2024/06/03 21:02:02 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_atoi(const char *str) +{ + int i; + int s; + int m; + + i = 0; + s = 0; + m = 0; + while ((str[i] <= 13 && str[i] >= 9) || str[i] == 32) + i++; + while (str[i] == '-' || str[i] == '+') + { + s++; + if (s >= 2) + return (0); + if (str[i] == '-') + m++; + i++; + } + s = 0; + while (str[i] >= 48 && str[i] <= 57) + s = s * 10 + (str[i++] - 48); + if (m % 2 == 1) + s = s * -1; + return (s); +} diff --git a/libft/srcs/ft_atoll.c b/libft/srcs/ft_atoll.c new file mode 100644 index 0000000..34fd5a5 --- /dev/null +++ b/libft/srcs/ft_atoll.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoll.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/03 17:25:06 by lfirmin #+# #+# */ +/* Updated: 2024/11/03 17:25:33 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +long long ft_atoll(const char *str) +{ + long long result; + int sign; + + result = 0; + sign = 1; + while (*str == ' ' || (*str >= 9 && *str <= 13)) + str++; + if (*str == '-' || *str == '+') + { + if (*str == '-') + sign = -1; + str++; + } + while (*str >= '0' && *str <= '9') + { + if (result > INT_MAX || result < INT_MIN) + return (2147483648); + result = result * 10 + (*str - '0'); + str++; + } + return (result * sign); +} diff --git a/libft/srcs/ft_bzero.c b/libft/srcs/ft_bzero.c new file mode 100644 index 0000000..507f22d --- /dev/null +++ b/libft/srcs/ft_bzero.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 00:20:00 by lfirmin #+# #+# */ +/* Updated: 2024/05/30 19:49:23 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_bzero(void *b, size_t len) +{ + size_t i; + unsigned char *r; + + r = (unsigned char *)b; + i = 0; + while (i < len) + r[i++] = '\0'; + return (b); +} diff --git a/libft/srcs/ft_calloc.c b/libft/srcs/ft_calloc.c new file mode 100644 index 0000000..b42206a --- /dev/null +++ b/libft/srcs/ft_calloc.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 11:14:02 by lfirmin #+# #+# */ +/* Updated: 2024/06/03 18:15:05 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_calloc(size_t c, size_t s) +{ + void *ptr; + long long int tmp1; + long long int tmp2; + + tmp1 = (long long int)c; + tmp2 = (long long int)s; + if ((c > 4294967295 || s > 4294967295) && (tmp1 < 0 && tmp2 < 0)) + return (NULL); + if (tmp1 * tmp2 < 0) + return (NULL); + ptr = malloc(c * s); + if (!ptr) + return (NULL); + ft_bzero(ptr, c * s); + return (ptr); +} diff --git a/libft/srcs/ft_isalnum.c b/libft/srcs/ft_isalnum.c new file mode 100644 index 0000000..0fd48a2 --- /dev/null +++ b/libft/srcs/ft_isalnum.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/20 02:29:49 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isalnum(int c) +{ + if ((c >= 97 && c <= 122) || (c >= 48 && c <= 57) || (c >= 65 && c <= 90)) + return (1); + return (0); +} diff --git a/libft/srcs/ft_isalpha.c b/libft/srcs/ft_isalpha.c new file mode 100644 index 0000000..3382c40 --- /dev/null +++ b/libft/srcs/ft_isalpha.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/20 01:55:52 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isalpha(int c) +{ + if ((c >= 97 && c <= 122) || (c >= 65 && c <= 90)) + return (1); + return (0); +} diff --git a/libft/srcs/ft_isascii.c b/libft/srcs/ft_isascii.c new file mode 100644 index 0000000..c5d9e0b --- /dev/null +++ b/libft/srcs/ft_isascii.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/20 02:36:17 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isascii(int c) +{ + if (c >= 0 && c <= 127) + return (1); + return (0); +} diff --git a/libft/srcs/ft_isdigit.c b/libft/srcs/ft_isdigit.c new file mode 100644 index 0000000..78f90b9 --- /dev/null +++ b/libft/srcs/ft_isdigit.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/20 02:31:51 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isdigit(int c) +{ + if (c >= 48 && c <= 57) + return (1); + return (0); +} diff --git a/libft/srcs/ft_isprint.c b/libft/srcs/ft_isprint.c new file mode 100644 index 0000000..2a09bb2 --- /dev/null +++ b/libft/srcs/ft_isprint.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/20 02:38:24 by lfirmin #+# #+# */ +/* Updated: 2024/05/23 06:21:54 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isprint(int c) +{ + if (((c >= 0 && c <= 31) || c >= 127 || c == EOF)) + return (0); + return (1); +} diff --git a/libft/srcs/ft_itoa.c b/libft/srcs/ft_itoa.c new file mode 100644 index 0000000..eade559 --- /dev/null +++ b/libft/srcs/ft_itoa.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/24 12:59:00 by lfirmin #+# #+# */ +/* Updated: 2024/05/29 10:31:36 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +static size_t ft_count(long int n) +{ + size_t c; + + c = 0; + if (n <= 0) + c = 1; + while (n != 0) + { + n = n / 10; + c++; + } + return (c); +} + +char *ft_itoa(int n) +{ + char *str; + size_t size; + long int num; + + num = n; + size = ft_count(num); + str = (char *)malloc(size + 1); + if (!str) + return (NULL); + str[size] = '\0'; + if (num < 0) + num = -num; + while (size--) + { + str[size] = num % 10 + '0'; + num = num / 10; + if (n < 0 && size == 0) + str[size] = '-'; + } + return (str); +} diff --git a/libft/srcs/ft_lstadd_back_bonus.c b/libft/srcs/ft_lstadd_back_bonus.c new file mode 100644 index 0000000..2bfdfc7 --- /dev/null +++ b/libft/srcs/ft_lstadd_back_bonus.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/01 02:01:18 by lfirmin #+# #+# */ +/* Updated: 2024/06/03 15:59:33 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + t_list *last; + + if (!new) + return ; + if (!lst || !*lst) + { + *lst = new; + return ; + } + last = ft_lstlast(*lst); + last->next = new; +} diff --git a/libft/srcs/ft_lstadd_front_bonus.c b/libft/srcs/ft_lstadd_front_bonus.c new file mode 100644 index 0000000..b784622 --- /dev/null +++ b/libft/srcs/ft_lstadd_front_bonus.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/31 20:34:57 by lfirmin #+# #+# */ +/* Updated: 2024/05/31 20:41:34 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + if (lst && new) + { + new->next = *lst; + *lst = new; + } +} diff --git a/libft/srcs/ft_lstclear_bonus.c b/libft/srcs/ft_lstclear_bonus.c new file mode 100644 index 0000000..54479d1 --- /dev/null +++ b/libft/srcs/ft_lstclear_bonus.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/01 20:46:07 by lfirmin #+# #+# */ +/* Updated: 2024/06/01 20:51:07 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void*)) +{ + t_list *t; + + if (lst) + { + while (*lst) + { + t = (*lst)->next; + ft_lstdelone(*lst, del); + (*lst) = t; + } + (*lst) = NULL; + } +} diff --git a/libft/srcs/ft_lstdelone_bonus.c b/libft/srcs/ft_lstdelone_bonus.c new file mode 100644 index 0000000..94ae5ab --- /dev/null +++ b/libft/srcs/ft_lstdelone_bonus.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/01 20:32:56 by lfirmin #+# #+# */ +/* Updated: 2024/06/01 20:32:56 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void*)) +{ + if (!lst || !del) + return ; + del(lst->content); + free(lst); +} diff --git a/libft/srcs/ft_lstiter_bonus.c b/libft/srcs/ft_lstiter_bonus.c new file mode 100644 index 0000000..8870692 --- /dev/null +++ b/libft/srcs/ft_lstiter_bonus.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/01 21:05:12 by lfirmin #+# #+# */ +/* Updated: 2024/06/01 21:05:12 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + if (!lst || !f) + return ; + while (lst) + { + f(lst->content); + lst = lst->next; + } +} diff --git a/libft/srcs/ft_lstlast_bonus.c b/libft/srcs/ft_lstlast_bonus.c new file mode 100644 index 0000000..c00582b --- /dev/null +++ b/libft/srcs/ft_lstlast_bonus.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/01 01:52:09 by lfirmin #+# #+# */ +/* Updated: 2024/06/01 01:57:22 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + while (lst) + { + if (!lst->next) + return (lst); + lst = lst->next; + } + return (lst); +} diff --git a/libft/srcs/ft_lstmap_bonus.c b/libft/srcs/ft_lstmap_bonus.c new file mode 100644 index 0000000..7efc366 --- /dev/null +++ b/libft/srcs/ft_lstmap_bonus.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/02 18:21:09 by lfirmin #+# #+# */ +/* Updated: 2024/06/03 15:53:13 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new; + t_list *save; + + if (!lst || !del || !f) + return (NULL); + new = ft_lstnew(lst->content); + if (!new) + return (NULL); + new->content = f(new->content); + save = new; + lst = lst->next; + while (lst) + { + new->next = ft_lstnew(lst->content); + if (!new->next) + { + ft_lstclear(&save, del); + return (NULL); + } + new->next->content = f(new->next->content); + new = new->next; + lst = lst->next; + } + new->next = NULL; + return (save); +} diff --git a/libft/srcs/ft_lstnew_bonus.c b/libft/srcs/ft_lstnew_bonus.c new file mode 100644 index 0000000..d9a9ba7 --- /dev/null +++ b/libft/srcs/ft_lstnew_bonus.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/31 18:41:23 by lfirmin #+# #+# */ +/* Updated: 2024/05/31 20:33:26 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *new; + + new = (t_list *)malloc(sizeof(*new)); + if (!new) + return (NULL); + new->content = content; + new->next = NULL; + return (new); +} diff --git a/libft/srcs/ft_lstsize_bonus.c b/libft/srcs/ft_lstsize_bonus.c new file mode 100644 index 0000000..d68e15d --- /dev/null +++ b/libft/srcs/ft_lstsize_bonus.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/31 22:00:49 by lfirmin #+# #+# */ +/* Updated: 2024/05/31 22:12:17 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int i; + t_list *count; + + count = lst; + i = 0; + while (count) + { + count = count->next; + i++; + } + return (i); +} diff --git a/libft/srcs/ft_memchr.c b/libft/srcs/ft_memchr.c new file mode 100644 index 0000000..4272249 --- /dev/null +++ b/libft/srcs/ft_memchr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 07:40:39 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + unsigned char *str; + + str = (unsigned char *)s; + while (n--) + { + if (*str == (unsigned char)c) + return (str); + str++; + } + return (NULL); +} diff --git a/libft/srcs/ft_memcmp.c b/libft/srcs/ft_memcmp.c new file mode 100644 index 0000000..fc9d739 --- /dev/null +++ b/libft/srcs/ft_memcmp.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 07:57:58 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 11:34:35 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_memcmp(const void *ptr1, const void *ptr2, size_t num) +{ + unsigned char *pt1; + unsigned char *pt2; + size_t i; + + pt1 = (unsigned char *)ptr1; + pt2 = (unsigned char *)ptr2; + i = 0; + while (i < num) + { + if (pt1[i] != pt2[i]) + return (pt1[i] - pt2[i]); + i++; + } + return (0); +} diff --git a/libft/srcs/ft_memcpy.c b/libft/srcs/ft_memcpy.c new file mode 100644 index 0000000..7f3d5a2 --- /dev/null +++ b/libft/srcs/ft_memcpy.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tordner +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 01:08:31 by lfirmin #+# #+# */ +/* Updated: 2025/06/02 00:40:39 by tordner ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dest, const void *src, size_t len) +{ + size_t i; + unsigned char *r; + unsigned char *s; + + i = 0; + r = (unsigned char *)dest; + s = (unsigned char *)src; + if (dest == (void *)0 && src == (void *)0) + return (dest); + while (i < len) + { + r[i] = s[i]; + i++; + } + return (dest); +} diff --git a/libft/srcs/ft_memmove.c b/libft/srcs/ft_memmove.c new file mode 100644 index 0000000..8920c37 --- /dev/null +++ b/libft/srcs/ft_memmove.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmov.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 01:26:13 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_memmove(void *s1, const void *s2, size_t len) +{ + unsigned char *dest; + unsigned char *src; + unsigned int i; + + dest = (unsigned char *)s1; + src = (unsigned char *)s2; + i = 0; + if (dest == NULL && src == NULL) + return (NULL); + if (dest < src) + { + while (i < len) + { + dest[i] = src[i]; + i++; + } + } + else + { + while (0 < len--) + dest[len] = src[len]; + } + return (dest); +} diff --git a/libft/srcs/ft_memset.c b/libft/srcs/ft_memset.c new file mode 100644 index 0000000..d4ecdb0 --- /dev/null +++ b/libft/srcs/ft_memset.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/20 02:42:40 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void *ft_memset(void *b, int c, size_t len) +{ + size_t i; + unsigned char *r; + + i = 0; + r = (unsigned char *)b; + while (i < len) + r[i++] = (unsigned char)c; + return (b); +} diff --git a/libft/srcs/ft_putchar_fd.c b/libft/srcs/ft_putchar_fd.c new file mode 100644 index 0000000..8a930f9 --- /dev/null +++ b/libft/srcs/ft_putchar_fd.c @@ -0,0 +1,17 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/29 11:17:45 by lfirmin #+# #+# */ +/* Updated: 2024/05/29 11:20:42 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + write(fd, &c, 1); +} diff --git a/libft/srcs/ft_putendl_fd.c b/libft/srcs/ft_putendl_fd.c new file mode 100644 index 0000000..c2e3e97 --- /dev/null +++ b/libft/srcs/ft_putendl_fd.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/29 11:35:44 by lfirmin #+# #+# */ +/* Updated: 2024/05/29 11:38:36 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + ft_putstr_fd(s, fd); + ft_putchar_fd('\n', fd); +} diff --git a/libft/srcs/ft_putnbr_fd.c b/libft/srcs/ft_putnbr_fd.c new file mode 100644 index 0000000..0b02ab1 --- /dev/null +++ b/libft/srcs/ft_putnbr_fd.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/29 11:42:38 by lfirmin #+# #+# */ +/* Updated: 2024/05/29 11:56:04 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_putnbr_fd(int n, int fd) +{ + long int nb; + + nb = n; + if (nb < 0) + { + nb = -nb; + ft_putchar_fd('-', fd); + } + if (nb >= 10) + { + ft_putnbr_fd(nb / 10, fd); + ft_putnbr_fd(nb % 10, fd); + } + else + ft_putchar_fd(nb + '0', fd); +} diff --git a/libft/srcs/ft_putstr_fd.c b/libft/srcs/ft_putstr_fd.c new file mode 100644 index 0000000..ecdc0ef --- /dev/null +++ b/libft/srcs/ft_putstr_fd.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/29 11:27:05 by lfirmin #+# #+# */ +/* Updated: 2024/05/29 11:33:18 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + int i; + + i = 0; + while (s[i]) + { + ft_putchar_fd(s[i], fd); + i++; + } +} diff --git a/libft/srcs/ft_split.c b/libft/srcs/ft_split.c new file mode 100644 index 0000000..9650577 --- /dev/null +++ b/libft/srcs/ft_split.c @@ -0,0 +1,95 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/22 05:56:37 by lfirmin #+# #+# */ +/* Updated: 2024/06/04 12:08:51 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +static int ft_c(char const *s, char c) +{ + int i; + int count; + + count = 0; + i = 0; + while (s[i]) + { + if (s[i] != c && (i == 0 || s[i - 1] == c)) + count++; + i++; + } + return (count); +} + +void init_split_struct(t_split_struct *v, char const *s, char c) +{ + if (!s) + return ; + v->array = (char **)malloc((ft_c(s, c) + 1) * sizeof(char *)); + if (!s || !v->array) + return ; + v->i = 0; + v->j = 0; +} + +static char *ft_strncpy(char *dest, const char *src, unsigned int n) +{ + unsigned int i; + + i = 0; + while (src[i] != '\0' && i < n) + { + dest[i] = src[i]; + ++i; + } + while (i < n) + { + dest[i] = '\0'; + i++; + } + return (dest); +} + +char **free_split(char **array, size_t j) +{ + while (j > 0) + { + free(array[--j]); + } + free(array); + return (NULL); +} + +char **ft_split(char const *s, char c) +{ + t_split_struct v; + + init_split_struct(&v, s, c); + if (!s || !v.array) + return (NULL); + while (s[v.i]) + { + while (s[v.i] == c && s[v.i]) + v.i++; + v.start = v.i; + while (s[v.i] != c && s[v.i]) + v.i++; + if (v.i > v.start) + { + v.array[v.j] = (char *)malloc(v.i - v.start + 1); + if (!v.array[v.j]) + return (free_split(v.array, v.j)); + ft_strncpy(v.array[v.j], &s[v.start], v.i - v.start); + v.array[v.j][v.i - v.start] = '\0'; + v.j++; + } + } + v.array[v.j] = NULL; + return (v.array); +} diff --git a/libft/srcs/ft_straddchar.c b/libft/srcs/ft_straddchar.c new file mode 100644 index 0000000..bf83573 --- /dev/null +++ b/libft/srcs/ft_straddchar.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_straddchar.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/08 06:02:17 by lfirmin #+# #+# */ +/* Updated: 2024/11/08 06:02:17 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_straddchar(char *str, char c) +{ + int i; + char *res; + + if (!str) + return (NULL); + i = 0; + while (str[i]) + i++; + res = (char *)malloc(sizeof(char) * (i + 2)); + if (!res) + return (NULL); + i = 0; + while (str[i]) + { + res[i] = str[i]; + i++; + } + res[i] = c; + res[i + 1] = '\0'; + return (res); +} diff --git a/libft/srcs/ft_strchr.c b/libft/srcs/ft_strchr.c new file mode 100644 index 0000000..11f57be --- /dev/null +++ b/libft/srcs/ft_strchr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 06:46:40 by lfirmin #+# #+# */ +/* Updated: 2024/05/24 08:51:25 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strchr(char const *str, int c) +{ + while (*str) + { + if (*str == (char)c) + return ((char *)str); + str++; + } + if (*str == (char)c) + return ((char *)str); + else + return (NULL); +} diff --git a/libft/srcs/ft_strcmp.c b/libft/srcs/ft_strcmp.c new file mode 100644 index 0000000..e3d21ba --- /dev/null +++ b/libft/srcs/ft_strcmp.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/10/19 21:01:26 by lfirmin #+# #+# */ +/* Updated: 2024/10/19 21:01:26 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_strcmp(char *s1, char *s2) +{ + int i; + + i = 0; + while (s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0') + i++; + return (s1[i] - s2[i]); +} diff --git a/libft/srcs/ft_strcpy.c b/libft/srcs/ft_strcpy.c new file mode 100644 index 0000000..c72313d --- /dev/null +++ b/libft/srcs/ft_strcpy.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/19 11:53:24 by lfirmin #+# #+# */ +/* Updated: 2025/04/19 11:58:04 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcpy(char *dest, char *src) +{ + size_t i; + + i = 0; + while (src[i] != '\0') + { + dest[i] = src[i]; + i++; + } + dest[i] = '\0'; + return (dest); +} diff --git a/libft/srcs/ft_strdup.c b/libft/srcs/ft_strdup.c new file mode 100644 index 0000000..7df78c5 --- /dev/null +++ b/libft/srcs/ft_strdup.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 05:28:24 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strdup(const char *src) +{ + char *dest; + int i; + int size; + + size = 0; + while (src[size] != '\0') + size++; + dest = malloc(sizeof(char) * (size + 1)); + if (dest == NULL) + return (NULL); + i = 0; + while (i != size) + { + dest[i] = src[i]; + i++; + } + dest[i] = '\0'; + return (dest); +} diff --git a/libft/srcs/ft_striteri.c b/libft/srcs/ft_striteri.c new file mode 100644 index 0000000..bd32dda --- /dev/null +++ b/libft/srcs/ft_striteri.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/29 10:54:40 by lfirmin #+# #+# */ +/* Updated: 2024/05/29 11:12:05 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char*)) +{ + int i; + + i = 0; + if (s) + { + while (s[i]) + { + f(i, &s[i]); + ++i; + } + } +} diff --git a/libft/srcs/ft_strjoin.c b/libft/srcs/ft_strjoin.c new file mode 100644 index 0000000..aed8eb4 --- /dev/null +++ b/libft/srcs/ft_strjoin.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/22 01:00:14 by lfirmin #+# #+# */ +/* Updated: 2024/05/24 08:49:06 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strjoin(const char *s1, const char *s2) +{ + char *res; + int i; + int j; + + i = 0; + j = 0; + if (s1 == NULL && s2 == NULL) + return (NULL); + res = (char *) malloc((ft_strlen(s1) + ft_strlen(s2) + 1) * sizeof(char)); + if (!res) + return (NULL); + while (s1[i]) + res[j++] = s1[i++]; + i = 0; + while (s2[i]) + res[j++] = s2[i++]; + res[j] = 0; + return (res); +} diff --git a/libft/srcs/ft_strlcat.c b/libft/srcs/ft_strlcat.c new file mode 100644 index 0000000..b691378 --- /dev/null +++ b/libft/srcs/ft_strlcat.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 03:55:25 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + size_t i; + size_t r; + size_t s; + + i = 0; + r = ft_strlen(dst); + s = ft_strlen(src); + if (size <= r) + return (s + size); + while (r + i < size - 1 && src[i] != '\0') + { + dst[r + i] = src[i]; + i++; + } + dst[r + i] = '\0'; + return (r + s); +} diff --git a/libft/srcs/ft_strlcpy.c b/libft/srcs/ft_strlcpy.c new file mode 100644 index 0000000..9721995 --- /dev/null +++ b/libft/srcs/ft_strlcpy.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 02:18:17 by lfirmin #+# #+# */ +/* Updated: 2024/05/30 18:36:18 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +size_t ft_strlcpy(char *dst, const char *src, size_t dsts) +{ + size_t srcs; + size_t i; + + ft_strlen(src); + if (!src || !dst) + return (0); + srcs = ft_strlen(src); + i = 0; + if (dsts != 0) + { + while (src[i] != '\0' && i < (dsts - 1)) + { + dst[i] = src[i]; + i++; + } + dst[i] = '\0'; + } + return (srcs); +} diff --git a/libft/srcs/ft_strlen.c b/libft/srcs/ft_strlen.c new file mode 100644 index 0000000..c8a5c83 --- /dev/null +++ b/libft/srcs/ft_strlen.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/19 23:16:45 by lfirmin #+# #+# */ +/* Updated: 2024/05/23 07:36:59 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + int i; + + i = 0; + while (s[i]) + i++; + return ((size_t)i); +} diff --git a/libft/srcs/ft_strmapi.c b/libft/srcs/ft_strmapi.c new file mode 100644 index 0000000..9197596 --- /dev/null +++ b/libft/srcs/ft_strmapi.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/28 15:10:42 by lfirmin #+# #+# */ +/* Updated: 2024/05/28 17:00:27 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + char *str; + int i; + + if (!s) + return (NULL); + str = (char *)malloc(ft_strlen(s) + 1); + if (!str) + return (NULL); + i = 0; + while (s[i]) + { + str[i] = f(i, s[i]); + ++i; + } + str[i] = '\0'; + return (str); +} diff --git a/libft/srcs/ft_strncmp.c b/libft/srcs/ft_strncmp.c new file mode 100644 index 0000000..7fcfec4 --- /dev/null +++ b/libft/srcs/ft_strncmp.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 06:55:09 by lfirmin #+# #+# */ +/* Updated: 2024/05/24 08:47:59 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, unsigned int n) +{ + unsigned int i; + unsigned char c1; + unsigned char c2; + + i = 0; + if (n == 0) + return (0); + while (i < n) + { + c1 = (unsigned char)s1[i]; + c2 = (unsigned char)s2[i]; + if (c1 != c2 || c1 == '\0' || c2 == '\0') + return (c1 - c2); + i++; + } + return (0); +} diff --git a/libft/srcs/ft_strnstr.c b/libft/srcs/ft_strnstr.c new file mode 100644 index 0000000..4f5acca --- /dev/null +++ b/libft/srcs/ft_strnstr.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 08:22:59 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strnstr(const char *hay, const char *need, size_t len) +{ + size_t i; + size_t n; + + i = 0; + if (need[0] == '\0') + return ((char *)hay); + while (hay[i] != '\0') + { + n = 0; + while (hay[i + n] == need[n] && (i + n) < len) + { + if (hay[i + n] == '\0' && need[n] == '\0') + return ((char *)&hay[i]); + n++; + } + if (need[n] == '\0') + return ((char *)hay + i); + i++; + } + return (0); +} diff --git a/libft/srcs/ft_strrchr.c b/libft/srcs/ft_strrchr.c new file mode 100644 index 0000000..c7fc977 --- /dev/null +++ b/libft/srcs/ft_strrchr.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 06:42:38 by lfirmin #+# #+# */ +/* Updated: 2024/05/30 18:30:00 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strrchr(const char *str, int c) +{ + int i; + int last_occurrence; + + ft_strlen(str); + i = 0; + last_occurrence = -1; + if (str == NULL) + return (NULL); + while (str[i]) + { + if (str[i] == (char)c) + last_occurrence = i; + i++; + } + if ((char)c == '\0') + return ((char *)&str[i]); + if (last_occurrence != -1) + return ((char *)&str[last_occurrence]); + return (NULL); +} diff --git a/libft/srcs/ft_strtrim.c b/libft/srcs/ft_strtrim.c new file mode 100644 index 0000000..abbf77f --- /dev/null +++ b/libft/srcs/ft_strtrim.c @@ -0,0 +1,68 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/23 21:32:01 by lfirmin #+# #+# */ +/* Updated: 2024/05/31 02:04:11 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int is_in_set(char c, const char *set) +{ + while (*set) + { + if (c == *set) + { + return (1); + } + set++; + } + return (0); +} + +static char *ft_strncpy(char *dest, const char *src, unsigned int n) +{ + unsigned int i; + + i = 0; + while (src[i] != '\0' && i < n) + { + dest[i] = src[i]; + ++i; + } + while (i < n) + { + dest[i] = '\0'; + i++; + } + return (dest); +} + +char *ft_strtrim(const char *s1, const char *set) +{ + size_t s; + size_t e; + size_t len; + char *str; + + if (!s1 || !set) + return (NULL); + s = 0; + while (s1[s] && is_in_set(s1[s], set)) + s++; + e = ft_strlen(s1); + while (e > s && is_in_set(s1[e - 1], set)) + e--; + len = e - s; + str = (char *)malloc(sizeof(char) * (len + 1)); + if (!str) + return (NULL); + ft_strncpy(str, s1 + s, len); + str[len] = '\0'; + return (str); +} diff --git a/libft/srcs/ft_substr.c b/libft/srcs/ft_substr.c new file mode 100644 index 0000000..8e73142 --- /dev/null +++ b/libft/srcs/ft_substr.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/22 00:15:54 by lfirmin #+# #+# */ +/* Updated: 2024/05/24 08:28:01 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *sub; + size_t i; + + if ((ft_strlen(s) - start) < len) + len = ft_strlen(s) - start; + if (ft_strlen(s) < start) + return (ft_strdup("")); + i = 0; + sub = (char *) malloc(len + 1); + if (!sub) + return (NULL); + while (len > 0) + { + sub[i++] = s[start++]; + len--; + } + sub[i] = '\0'; + return (sub); +} diff --git a/libft/srcs/ft_tolower.c b/libft/srcs/ft_tolower.c new file mode 100644 index 0000000..288a27a --- /dev/null +++ b/libft/srcs/ft_tolower.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 04:50:40 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 11:09:36 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_tolower(int c) +{ + if (c >= 65 && c <= 90) + return (c + 32); + return (c); +} diff --git a/libft/srcs/ft_toupper.c b/libft/srcs/ft_toupper.c new file mode 100644 index 0000000..d563003 --- /dev/null +++ b/libft/srcs/ft_toupper.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/21 04:50:40 by lfirmin #+# #+# */ +/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_toupper(int c) +{ + if (c >= 97 && c <= 122) + return (c - 32); + return (c); +} diff --git a/srcs/main.c b/srcs/main.c new file mode 100644 index 0000000..e7b3e51 --- /dev/null +++ b/srcs/main.c @@ -0,0 +1,11 @@ +#include "cub.h" + +int main(int ac, char **av) +{ + t_data data; + init_data(&data, av[1]); + parsing(&data); + free_char_array(data.parsing.raw_map); + free_textures(data.texture); + free_data(&data); +} \ No newline at end of file diff --git a/srcs/parsing/check_colors.c b/srcs/parsing/check_colors.c new file mode 100644 index 0000000..415b45b --- /dev/null +++ b/srcs/parsing/check_colors.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* check_colors.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/25 18:41:26 by lfirmin #+# #+# */ +/* Updated: 2025/08/25 18:41:26 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "cub.h" + +int check_colors(t_textures *texture) +{ + if (is_rgb(texture->floor)) + return (ft_error(ERROR_COL), 1); + if (is_rgb(texture->ceiling)) + return (ft_error(ERROR_COL), 1); + return (0); +} + +int is_rgb(int color[3]) +{ + int i; + + i = 0; + while (i < 3) + { + if (color[i] > 255 || color[i] < 0) + return (1); + i++; + } + return (0); +} \ No newline at end of file diff --git a/srcs/parsing/check_file.c b/srcs/parsing/check_file.c new file mode 100644 index 0000000..8bc0a27 --- /dev/null +++ b/srcs/parsing/check_file.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* check_file.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/22 15:07:29 by lfirmin #+# #+# */ +/* Updated: 2025/08/22 15:07:33 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub.h" + +int check_file(char *map_path, t_data_parsing *parsing) +{ + if (!map_path) + return (ft_error(ERROR_EMPT_PATH), 1); + if (check_extension(map_path)) + return (1); + parsing->fd_map = open(map_path, O_RDONLY); + if (parsing->fd_map < 0) + return (perror("\033[1m[❌]\033[0m\033[1;31mError\033[0m"), 1); + parsing->fd_map_dup = open(map_path, O_RDONLY); + if (parsing->fd_map_dup < 0) + return (perror("\033[1m[❌]\033[0m\033[1;31mError\033[0m"), 1); + return (0); +} + +int check_extension(char *map_path) +{ + int len_map_path; + + len_map_path = ft_strlen(map_path); + if (len_map_path < 4) + return (ft_error(ERROR_EXT), 1); + if (ft_strcmp(map_path + len_map_path - 4, ".cub") != 0) + return (ft_error(ERROR_EXT), 1); + return (0); +} \ No newline at end of file diff --git a/srcs/parsing/get_map.c b/srcs/parsing/get_map.c new file mode 100644 index 0000000..df06099 --- /dev/null +++ b/srcs/parsing/get_map.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_map.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/23 13:29:28 by lfirmin #+# #+# */ +/* Updated: 2025/08/23 13:29:28 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub.h" + +int get_map(t_data *data) +{ + int nb_line; + + nb_line = line_counter(data->parsing.fd_map); + if (nb_line <= 0) + return (ft_error(ERROR_EMPTY), 1); + data->parsing.raw_map = ft_calloc(nb_line + 1, sizeof(char*)); + put_map_on_array(data); + //print_char_array_debug(data->parsing.raw_map, "debug"); + //printf("---deb_texture---\n%s\n%s\n%s\n%s\n", data->texture->north, data->texture->south, data->texture->west, data->texture->east); + // printf("---deb_colors_f---\n%d,%d,%d\n", data->texture->floor[0], data->texture->floor[1], data->texture->floor[2]); + // printf("---deb_colors_c---\n%d,%d,%d\n", data->texture->ceiling[0], data->texture->ceiling[1], data->texture->ceiling[2]); + return (0); +} + +int line_counter(int fd) +{ + int nb_line; + char *line; + + line = NULL; + nb_line = 0; + while ((line = get_next_line(fd)) != NULL) + { + nb_line++; + free(line); + } + free(line); + line = get_next_line(-1); // force cleanup + free(line); + return (nb_line); +} + +int put_map_on_array(t_data *data) +{ + char *line; + char *cleaned; + int i; + + i = 0; + while ((line = get_next_line(data->parsing.fd_map_dup)) != NULL) + { + if (is_config_line(line)) + { + cleaned = clean_line(line); + get_texture_path(cleaned, data->texture); + free(line); + free(cleaned); + } + else if (is_empty_line(line)) + free(line); + else + data->parsing.raw_map[i++] = line; + } + line = get_next_line(-1); + if (line) + free(line); + data->parsing.raw_map[i] = NULL; + return (0); +} + +char *clean_line(char *raw_line) +{ + char *cleaned; + if (!raw_line) + return (NULL); + + cleaned = ft_strtrim(raw_line, " \t\n\r"); + return (cleaned); +} \ No newline at end of file diff --git a/srcs/parsing/get_textures.c b/srcs/parsing/get_textures.c new file mode 100644 index 0000000..cfcea64 --- /dev/null +++ b/srcs/parsing/get_textures.c @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_textures.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/24 12:37:11 by lfirmin #+# #+# */ +/* Updated: 2025/08/24 12:37:11 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "cub.h" + +int get_texture_path(char *line, t_textures *texture) +{ + if (is_texture_line(line) == 1) + texture->north = ft_strtrim(line + 2, " \t\n\r"); + else if (is_texture_line(line) == 2) + texture->south = ft_strtrim(line + 2, " \t\n\r"); + else if (is_texture_line(line) == 3) + texture->west = ft_strtrim(line + 2, " \t\n\r"); + else if (is_texture_line(line) == 4) + texture->east = ft_strtrim(line + 2, " \t\n\r"); + else if (is_color_line(line) == 1) // F + get_rgb_values(line, texture->floor); + else if (is_color_line(line) == 2) // C + get_rgb_values(line, texture->ceiling); + return (0); +} + +int get_rgb_values(char *line, int rgb[3]) +{ + char *start; + char **parts; + int i; + + if (!line || !rgb) + return (1); + start = ft_strchr(line, ' '); + if (!start) + return (1); + parts = ft_split(start + 1, ','); + if (!parts) + return (1); + i = 0; + while (parts[i] && i < 3) + { + rgb[i] = ft_atoi(parts[i]); + i++; + } + free_char_array(parts); + return (i == 3 ? 0 : 1); +} \ No newline at end of file diff --git a/srcs/parsing/init_parsing.c b/srcs/parsing/init_parsing.c new file mode 100644 index 0000000..2bc89c8 --- /dev/null +++ b/srcs/parsing/init_parsing.c @@ -0,0 +1,50 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* init_parsing.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/23 13:33:00 by lfirmin #+# #+# */ +/* Updated: 2025/08/23 13:33:00 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "cub.h" + +int init_parsing(t_data_parsing *parsing) +{ + if (!parsing) + return (ft_error(ERROR_INIT_PARS), 1); + parsing->fd_map = 0; + parsing->raw_map = NULL; + return (0); +} + +int init_textures(t_textures *textures) +{ + int i; + + if (!textures) + return (ft_error(ERROR_INIT_TEX), 1); + textures->north = NULL; + textures->south = NULL; + textures->east = NULL; + textures->west = NULL; + i = 0; + while (i < 3) + { + textures->floor[i] = -1; + textures->ceiling[i] = -1; + i++; + } + return (0); +} + +int free_textures(t_textures *textures) +{ + free(textures->north); + free(textures->south); + free(textures->east); + free(textures->west); + return (0); +} \ No newline at end of file diff --git a/srcs/parsing/line_detect.c b/srcs/parsing/line_detect.c new file mode 100644 index 0000000..3380ac3 --- /dev/null +++ b/srcs/parsing/line_detect.c @@ -0,0 +1,94 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* line_detect.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/24 11:58:39 by lfirmin #+# #+# */ +/* Updated: 2025/08/24 11:58:39 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub.h" + +int is_config_line(char *line) +{ + char *trimmed; + int result; + + result = 0; + if (!line) + return (0); + trimmed = ft_strtrim(line, " \t\n\r"); + if (!trimmed) + return (0); + if (ft_strncmp(trimmed, "NO ", 3) == 0 || + ft_strncmp(trimmed, "SO ", 3) == 0 || + ft_strncmp(trimmed, "WE ", 3) == 0 || + ft_strncmp(trimmed, "EA ", 3) == 0 || + ft_strncmp(trimmed, "F ", 2) == 0 || + ft_strncmp(trimmed, "C ", 2) == 0) + result = 1; + free(trimmed); + return (result); +} + +int is_empty_line(char *line) +{ + int i; + + i = 0; + if (!line) + return (1); // NULL = vide + while (line[i]) + { + if (line[i] != ' ' && line[i] != '\t' && + line[i] != '\n' && line[i] != '\r') + return (0); + i++; + } + return (1); // Que des whitespaces +} + +int is_color_line(char *line) +{ + char *trimmed; + int result; + + result = 0; + if (!line) + return (0); + trimmed = ft_strtrim(line, " \t\n\r"); + if (!trimmed) + return (0); + if (ft_strncmp(trimmed, "F ", 2) == 0) + result = 1; + else if (ft_strncmp(trimmed, "C ", 2) == 0) + result = 2; + free(trimmed); + return (result); +} + +int is_texture_line(char *line) +{ + char *trimmed; + int result; + + result = 0; + if (!line) + return (0); + trimmed = ft_strtrim(line, " \t\n\r"); + if (!trimmed) + return (0); + if (ft_strncmp(trimmed, "NO ", 3) == 0) + result = 1; + else if (ft_strncmp(trimmed, "SO ", 3) == 0) + result = 2; + else if (ft_strncmp(trimmed, "WE ", 3) == 0) + result = 3; + else if (ft_strncmp(trimmed, "EA ", 3) == 0) + result = 4; + free(trimmed); + return (result); +} \ No newline at end of file diff --git a/srcs/parsing/parsing.c b/srcs/parsing/parsing.c new file mode 100644 index 0000000..65ebb8f --- /dev/null +++ b/srcs/parsing/parsing.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parsing.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/22 14:17:58 by lfirmin #+# #+# */ +/* Updated: 2025/08/22 14:17:58 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "cub.h" + +int parsing(t_data *data) +{ + if (check_file(data->map_path, &data->parsing) == 1) + return (1); + get_map(data); + close(data->parsing.fd_map); + close(data->parsing.fd_map_dup); + if (check_colors(data->texture) == 1) + return (1); + return (0); +} \ No newline at end of file diff --git a/srcs/utils/debug.c b/srcs/utils/debug.c new file mode 100644 index 0000000..71c638f --- /dev/null +++ b/srcs/utils/debug.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* debug.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/23 13:23:51 by lfirmin #+# #+# */ +/* Updated: 2025/08/23 13:23:51 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub.h" + +void print_char_array_debug(char **arr, char *name) +{ + int i = 0; + + printf("=== %s ===\n", name ? name : "CHAR ARRAY"); + + if (!arr) + { + printf("Array is NULL\n"); + return; + } + + while (arr[i]) + { + printf("[%d] (%zu chars): '%s'\n", i, strlen(arr[i]), arr[i]); + i++; + } + printf("Total lines: %d\n", i); + printf("==============\n"); +} diff --git a/srcs/utils/init.c b/srcs/utils/init.c new file mode 100644 index 0000000..5316358 --- /dev/null +++ b/srcs/utils/init.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* init.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/22 18:57:21 by lfirmin #+# #+# */ +/* Updated: 2025/08/22 18:57:21 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "cub.h" + +int init_data(t_data *data, char *path) +{ + if (!data) + return (ft_error(ERROR_INIT_DATA), 1); + data->texture = malloc(sizeof(t_textures)); + if (!data->texture) + return (ft_error(ERROR_INIT_TEX), 1); + init_parsing(&data->parsing); + init_textures(data->texture); + data->map = NULL; + data->map_path = path; + return (0); +} + +void free_data(t_data *data) +{ + if (!data) + return; + if (data->texture) + free(data->texture); +} + diff --git a/srcs/utils/utils.c b/srcs/utils/utils.c new file mode 100644 index 0000000..5f30607 --- /dev/null +++ b/srcs/utils/utils.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lfirmin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/22 14:56:25 by lfirmin #+# #+# */ +/* Updated: 2025/08/22 14:56:25 by lfirmin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub.h" + +void ft_error(char *message) +{ + int len; + + len = 0; + while (message[len]) + len++; + write(2, ERROR_PREFIX, 31); + write(2, message, len); + write(2, "\n", 1); +} + +void free_char_array(char **array) +{ + int i; + + if (!array) + return; + i = 0; + while (array[i]) + free(array[i++]); + free(array); +} \ No newline at end of file diff --git a/test.cub b/test.cub new file mode 100644 index 0000000..71edc13 --- /dev/null +++ b/test.cub @@ -0,0 +1,33 @@ + + + + + + + + +NO textures/test/north.xpm + + + + EA textures/test/east.xpm + + + + + WE textures/test/west.xpm + +C 200,200,200 + 11111 +10001 +10S01 +10001 +10001 +10001 +11001 +10001 +10001 +10001 +10001 +10001 +11111