From bae4da63eb8cb92ba697a862195ea776092bbf01 Mon Sep 17 00:00:00 2001 From: Gregory Date: Mon, 30 Jan 2017 23:37:54 +0200 Subject: [PATCH] init commit --- Makefile | 81 ++ author | 1 + libft/Makefile | 102 ++ libft/author | 1 + libft/ft_atoi.c | 35 + libft/ft_bzero.c | 18 + libft/ft_isalnum.c | 20 + libft/ft_isalpha.c | 21 + libft/ft_isascii.c | 20 + libft/ft_isdigit.c | 20 + libft/ft_isprint.c | 20 + libft/ft_itoa.c | 73 ++ libft/ft_lst_at.c | 20 + libft/ft_lstadd.c | 22 + libft/ft_lstadd_back.c | 27 + libft/ft_lstdel.c | 31 + libft/ft_lstdelone.c | 23 + libft/ft_lstfind.c | 24 + libft/ft_lstiter.c | 22 + libft/ft_lstmap.c | 26 + libft/ft_lstnew.c | 40 + libft/ft_lststrsplit.c | 38 + libft/ft_memalloc.c | 23 + libft/ft_memccpy.c | 28 + libft/ft_memchr.c | 24 + libft/ft_memcmp.c | 25 + libft/ft_memcpy.c | 26 + libft/ft_memdel.c | 22 + libft/ft_memmove.c | 33 + libft/ft_memset.c | 23 + libft/ft_putchar.c | 18 + libft/ft_putchar_fd.c | 18 + libft/ft_putendl.c | 21 + libft/ft_putendl_fd.c | 21 + libft/ft_putnbr.c | 58 + libft/ft_putnbr_fd.c | 58 + libft/ft_putstr.c | 20 + libft/ft_putstr_fd.c | 20 + libft/ft_read_file.c | 31 + libft/ft_realloc.c | 32 + libft/ft_strcat.c | 26 + libft/ft_strchr.c | 22 + libft/ft_strclr.c | 19 + libft/ft_strcmp.c | 25 + libft/ft_strcpy.c | 24 + libft/ft_strdel.c | 18 + libft/ft_strdup.c | 26 + libft/ft_strequ.c | 28 + libft/ft_striter.c | 20 + libft/ft_striteri.c | 23 + libft/ft_strjoin.c | 32 + libft/ft_strlcat.c | 32 + libft/ft_strlen.c | 24 + libft/ft_strmap.c | 30 + libft/ft_strmapi.c | 30 + libft/ft_strncat.c | 28 + libft/ft_strncmp.c | 29 + libft/ft_strncpy.c | 30 + libft/ft_strnequ.c | 22 + libft/ft_strnew.c | 25 + libft/ft_strnstr.c | 33 + libft/ft_strrchr.c | 27 + libft/ft_strsplit.c | 85 ++ libft/ft_strstr.c | 29 + libft/ft_strsub.c | 27 + libft/ft_strtrim.c | 40 + libft/ft_tolower.c | 20 + libft/ft_toupper.c | 20 + libft/includes/libft.h | 101 ++ minilibx/=README= | 41 + minilibx/Makefile | 22 + minilibx/Makefile.gen | 47 + minilibx/Makefile.mk | 47 + minilibx/configure | 94 ++ minilibx/libmlx_Linux.a | Bin 0 -> 102600 bytes minilibx/libmlx_OpenBSD.a | Bin 0 -> 95896 bytes minilibx/libmlx_intel-mac.a | Bin 0 -> 82744 bytes minilibx/man/man1 | 1 + minilibx/man/man3/mlx.1 | 93 ++ minilibx/man/man3/mlx_loop.1 | 141 +++ minilibx/man/man3/mlx_new_image.1 | 192 ++++ minilibx/man/man3/mlx_new_window.1 | 79 ++ minilibx/man/man3/mlx_pixel_put.1 | 81 ++ minilibx/mlx.h | 129 +++ minilibx/mlx_clear_window.c | 21 + minilibx/mlx_destroy_image.c | 31 + minilibx/mlx_destroy_window.c | 38 + minilibx/mlx_expose_hook.c | 22 + minilibx/mlx_flush_event.c | 25 + minilibx/mlx_get_color_value.c | 33 + minilibx/mlx_get_data_addr.c | 23 + minilibx/mlx_hook.c | 40 + minilibx/mlx_init.c | 91 ++ minilibx/mlx_int.h | 125 +++ minilibx/mlx_int_anti_resize_win.c | 28 + minilibx/mlx_int_do_nothing.c | 16 + minilibx/mlx_int_get_visual.c | 39 + minilibx/mlx_int_param_event.c | 100 ++ minilibx/mlx_int_set_win_event_mask.c | 34 + minilibx/mlx_int_str_to_wordtab.c | 113 ++ minilibx/mlx_int_wait_first_expose.c | 23 + minilibx/mlx_key_hook.c | 22 + minilibx/mlx_lib_xpm.c | 96 ++ minilibx/mlx_loop.c | 38 + minilibx/mlx_loop_hook.c | 21 + minilibx/mlx_mouse_hook.c | 22 + minilibx/mlx_new_image.c | 155 +++ minilibx/mlx_new_window.c | 61 ++ minilibx/mlx_pixel_put.c | 26 + minilibx/mlx_put_image_to_window.c | 37 + minilibx/mlx_rgb.c | 764 +++++++++++++ minilibx/mlx_string_put.c | 26 + minilibx/mlx_xpm.c | 317 ++++++ minilibx/mlx_xpm.c.ok | 310 ++++++ minilibx/rgb2c.pl | 38 + minilibx/test/Makefile.gen | 26 + minilibx/test/Makefile.mk | 24 + minilibx/test/main.c | 284 +++++ minilibx/test/new_win.c | 31 + minilibx/test/open.xpm | 1439 +++++++++++++++++++++++++ minilibx/test/open24.xpm | 230 ++++ minilibx/test/open30.xpm | 1439 +++++++++++++++++++++++++ obj/.gitkeep | 0 src/main.c | 62 ++ 124 files changed, 9318 insertions(+) create mode 100644 Makefile create mode 100644 author create mode 100644 libft/Makefile create mode 100644 libft/author create mode 100644 libft/ft_atoi.c create mode 100644 libft/ft_bzero.c create mode 100644 libft/ft_isalnum.c create mode 100644 libft/ft_isalpha.c create mode 100644 libft/ft_isascii.c create mode 100644 libft/ft_isdigit.c create mode 100644 libft/ft_isprint.c create mode 100644 libft/ft_itoa.c create mode 100644 libft/ft_lst_at.c create mode 100644 libft/ft_lstadd.c create mode 100644 libft/ft_lstadd_back.c create mode 100644 libft/ft_lstdel.c create mode 100644 libft/ft_lstdelone.c create mode 100644 libft/ft_lstfind.c create mode 100644 libft/ft_lstiter.c create mode 100644 libft/ft_lstmap.c create mode 100644 libft/ft_lstnew.c create mode 100644 libft/ft_lststrsplit.c create mode 100644 libft/ft_memalloc.c create mode 100644 libft/ft_memccpy.c create mode 100644 libft/ft_memchr.c create mode 100644 libft/ft_memcmp.c create mode 100644 libft/ft_memcpy.c create mode 100644 libft/ft_memdel.c create mode 100644 libft/ft_memmove.c create mode 100644 libft/ft_memset.c create mode 100644 libft/ft_putchar.c create mode 100644 libft/ft_putchar_fd.c create mode 100644 libft/ft_putendl.c create mode 100644 libft/ft_putendl_fd.c create mode 100644 libft/ft_putnbr.c create mode 100644 libft/ft_putnbr_fd.c create mode 100644 libft/ft_putstr.c create mode 100644 libft/ft_putstr_fd.c create mode 100644 libft/ft_read_file.c create mode 100644 libft/ft_realloc.c create mode 100644 libft/ft_strcat.c create mode 100644 libft/ft_strchr.c create mode 100644 libft/ft_strclr.c create mode 100644 libft/ft_strcmp.c create mode 100644 libft/ft_strcpy.c create mode 100644 libft/ft_strdel.c create mode 100644 libft/ft_strdup.c create mode 100644 libft/ft_strequ.c create mode 100644 libft/ft_striter.c create mode 100644 libft/ft_striteri.c create mode 100644 libft/ft_strjoin.c create mode 100644 libft/ft_strlcat.c create mode 100644 libft/ft_strlen.c create mode 100644 libft/ft_strmap.c create mode 100644 libft/ft_strmapi.c create mode 100644 libft/ft_strncat.c create mode 100644 libft/ft_strncmp.c create mode 100644 libft/ft_strncpy.c create mode 100644 libft/ft_strnequ.c create mode 100644 libft/ft_strnew.c create mode 100644 libft/ft_strnstr.c create mode 100644 libft/ft_strrchr.c create mode 100644 libft/ft_strsplit.c create mode 100644 libft/ft_strstr.c create mode 100644 libft/ft_strsub.c create mode 100644 libft/ft_strtrim.c create mode 100644 libft/ft_tolower.c create mode 100644 libft/ft_toupper.c create mode 100644 libft/includes/libft.h create mode 100644 minilibx/=README= create mode 100644 minilibx/Makefile create mode 100644 minilibx/Makefile.gen create mode 100644 minilibx/Makefile.mk create mode 100755 minilibx/configure create mode 100644 minilibx/libmlx_Linux.a create mode 100644 minilibx/libmlx_OpenBSD.a create mode 100644 minilibx/libmlx_intel-mac.a create mode 120000 minilibx/man/man1 create mode 100644 minilibx/man/man3/mlx.1 create mode 100644 minilibx/man/man3/mlx_loop.1 create mode 100644 minilibx/man/man3/mlx_new_image.1 create mode 100644 minilibx/man/man3/mlx_new_window.1 create mode 100644 minilibx/man/man3/mlx_pixel_put.1 create mode 100644 minilibx/mlx.h create mode 100644 minilibx/mlx_clear_window.c create mode 100644 minilibx/mlx_destroy_image.c create mode 100644 minilibx/mlx_destroy_window.c create mode 100644 minilibx/mlx_expose_hook.c create mode 100644 minilibx/mlx_flush_event.c create mode 100644 minilibx/mlx_get_color_value.c create mode 100644 minilibx/mlx_get_data_addr.c create mode 100644 minilibx/mlx_hook.c create mode 100644 minilibx/mlx_init.c create mode 100644 minilibx/mlx_int.h create mode 100644 minilibx/mlx_int_anti_resize_win.c create mode 100644 minilibx/mlx_int_do_nothing.c create mode 100644 minilibx/mlx_int_get_visual.c create mode 100644 minilibx/mlx_int_param_event.c create mode 100644 minilibx/mlx_int_set_win_event_mask.c create mode 100644 minilibx/mlx_int_str_to_wordtab.c create mode 100644 minilibx/mlx_int_wait_first_expose.c create mode 100644 minilibx/mlx_key_hook.c create mode 100644 minilibx/mlx_lib_xpm.c create mode 100644 minilibx/mlx_loop.c create mode 100644 minilibx/mlx_loop_hook.c create mode 100644 minilibx/mlx_mouse_hook.c create mode 100644 minilibx/mlx_new_image.c create mode 100644 minilibx/mlx_new_window.c create mode 100644 minilibx/mlx_pixel_put.c create mode 100644 minilibx/mlx_put_image_to_window.c create mode 100644 minilibx/mlx_rgb.c create mode 100644 minilibx/mlx_string_put.c create mode 100644 minilibx/mlx_xpm.c create mode 100644 minilibx/mlx_xpm.c.ok create mode 100755 minilibx/rgb2c.pl create mode 100644 minilibx/test/Makefile.gen create mode 100644 minilibx/test/Makefile.mk create mode 100644 minilibx/test/main.c create mode 100644 minilibx/test/new_win.c create mode 100644 minilibx/test/open.xpm create mode 100644 minilibx/test/open24.xpm create mode 100644 minilibx/test/open30.xpm create mode 100644 obj/.gitkeep create mode 100644 src/main.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2f327bb --- /dev/null +++ b/Makefile @@ -0,0 +1,81 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: gtertysh +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2016/12/14 16:54:48 by gtertysh #+# #+# # +# Updated: 2016/12/23 19:59:53 by gtertysh ### ########.fr # +# # +# **************************************************************************** # + +NAME = fdf + + +SRCDIR = ./src/ + +OBJDIR = ./obj/ + + +SRC_FILES = main.c + +OBJ_FILES = $(SRC_FILES:.c=.o) + + +SRC = $(addprefix $(SRCDIR), $(SRC_FILES)) + +OBJ = $(addprefix $(OBJDIR), $(OBJ_FILES)) + + +INC = -I ./inc -I $(LIBFT_FOLDER) -I $(MLX_FOLDER) + + +LIBFT = libft.a + +MLX = libmlx.a + + +LIBFT_FLAGS = -lft -L $(LIBFT_FOLDER) + +MLX_FLAGS = -lmlx -lXext -lX11 -L $(MLX_FOLDER) + + +LIBFT_FOLDER = ./libft/ + +MLX_FOLDER = ./minilibx/ + + +FLAGS = -Werror -Wextra -Wall + +CC = clang + + +all: $(NAME) + +$(NAME): $(OBJ) $(LIBFT_FOLDER)$(LIBFT) $(MLX_FOLDER)$(MLX) + $(CC) $(FLAGS) $(OBJ) $(LIBFT_FLAGS) $(MLX_FLAGS) -o $(NAME) + +$(OBJDIR)%.o : $(SRCDIR)%.c + $(CC) $(FLAGS) $(INC) -c $< -o $@ + +$(LIBFOLDER)$(LIB): + make -C $(LIBFT_FOLDER) + +$(MLX_FOLDER)$(MLX): + make -C $(MLX_FOLDER) + +clean: + rm -rf $(OBJ) + +fclean: clean + rm -rf $(NAME) + +libclean: + make clean -C $(LIBFT_FOLDER) + make clean -C $(MLX_FOLDER) + +libfclean: + make fclean -C $(LIBFT_FOLDER) + +re: fclean libfclean all diff --git a/author b/author new file mode 100644 index 0000000..913d4c1 --- /dev/null +++ b/author @@ -0,0 +1 @@ +gtertysh diff --git a/libft/Makefile b/libft/Makefile new file mode 100644 index 0000000..ec81d1e --- /dev/null +++ b/libft/Makefile @@ -0,0 +1,102 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: gtertysh +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2016/11/28 11:42:56 by gtertysh #+# #+# # +# Updated: 2017/01/21 16:03:50 by gtertysh ### ########.fr # +# # +# **************************************************************************** # + +NAME = libft.a +SRC = ft_memset.c \ + ft_bzero.c \ + ft_memcpy.c \ + ft_memccpy.c \ + ft_memmove.c \ + ft_memchr.c \ + ft_memcmp.c \ + ft_strlen.c \ + ft_strdup.c \ + ft_strcpy.c \ + ft_strncpy.c \ + ft_strcat.c \ + ft_strncat.c \ + ft_strlcat.c \ + ft_strchr.c \ + ft_strrchr.c \ + ft_strstr.c \ + ft_strnstr.c \ + ft_strcmp.c \ + ft_strncmp.c \ + ft_atoi.c \ + ft_isalpha.c \ + ft_isdigit.c \ + ft_isalnum.c \ + ft_isascii.c \ + ft_isprint.c \ + ft_toupper.c \ + ft_tolower.c \ + \ + ft_memalloc.c \ + ft_memdel.c \ + ft_strnew.c \ + ft_strdel.c \ + ft_strclr.c \ + ft_striter.c \ + ft_striteri.c \ + ft_strmap.c \ + ft_strmap.c \ + ft_strmapi.c \ + ft_strequ.c \ + ft_strnequ.c \ + ft_strsub.c \ + ft_strjoin.c \ + ft_strtrim.c \ + ft_strsplit.c \ + ft_itoa.c \ + ft_putchar.c \ + ft_putstr.c \ + ft_putendl.c \ + ft_putnbr.c \ + ft_putchar_fd.c \ + ft_putstr_fd.c \ + ft_putendl_fd.c \ + ft_putnbr_fd.c \ + \ + ft_lstnew.c \ + ft_lstdelone.c \ + ft_lstdel.c \ + ft_lstadd.c \ + ft_lstiter.c \ + ft_lstmap.c \ + ft_lststrsplit.c \ + ft_lstfind.c \ + ft_lst_at.c \ + ft_lstadd_back.c \ + \ + ft_realloc.c \ + ft_read_file.c + +OBJ = $(SRC:.c=.o) +INC = -I ./includes/ +CC = clang +FLAGS = -Werror -Wextra -Wall + +all: $(NAME) + +$(NAME): $(OBJ) + ar rcs $(NAME) $(OBJ) + +%.o: %.c ./includes/libft.h + $(CC) $(FLAGS) $(INC) -c $< -o $@ + +clean: + rm -rf $(OBJ) + +fclean: clean + rm -rf $(NAME) + +re: clean all diff --git a/libft/author b/libft/author new file mode 100644 index 0000000..913d4c1 --- /dev/null +++ b/libft/author @@ -0,0 +1 @@ +gtertysh diff --git a/libft/ft_atoi.c b/libft/ft_atoi.c new file mode 100644 index 0000000..4a3c0ae --- /dev/null +++ b/libft/ft_atoi.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/10/31 10:27:11 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 19:51:54 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_atoi(const char *str) +{ + int numb; + int is_negative; + + numb = 0; + is_negative = 0; + while (*str == ' ' || *str == '\n' || *str == '\t' || + *str == '\r' || *str == '\f' || *str == '\v') + str++; + if (*str == '-' && str++) + is_negative = 1; + else if (*str == '+') + str++; + while (*str >= '0' && *str <= '9' && *str != '\0') + { + numb = numb * 10 + *str - '0'; + str++; + } + if (is_negative) + return (-numb); + return (numb); +} diff --git a/libft/ft_bzero.c b/libft/ft_bzero.c new file mode 100644 index 0000000..5241350 --- /dev/null +++ b/libft/ft_bzero.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 16:19:32 by gtertysh #+# #+# */ +/* Updated: 2016/11/28 16:39:45 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + ft_memset(s, 0, n); +} diff --git a/libft/ft_isalnum.c b/libft/ft_isalnum.c new file mode 100644 index 0000000..0cb1c1c --- /dev/null +++ b/libft/ft_isalnum.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 15:11:05 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 15:17:24 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + if (ft_isalpha(c) || ft_isdigit(c)) + return (1); + return (0); +} diff --git a/libft/ft_isalpha.c b/libft/ft_isalpha.c new file mode 100644 index 0000000..eb57722 --- /dev/null +++ b/libft/ft_isalpha.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 14:58:04 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 15:05:30 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalpha(int c) +{ + if ((c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z')) + return (1); + return (0); +} diff --git a/libft/ft_isascii.c b/libft/ft_isascii.c new file mode 100644 index 0000000..c303ae8 --- /dev/null +++ b/libft/ft_isascii.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 15:18:01 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 15:21:12 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isascii(int c) +{ + if (c >= 0 && c <= 127) + return (1); + return (0); +} diff --git a/libft/ft_isdigit.c b/libft/ft_isdigit.c new file mode 100644 index 0000000..4e221d9 --- /dev/null +++ b/libft/ft_isdigit.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 15:08:32 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 15:09:31 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isdigit(int c) +{ + if (c >= '0' && c <= '9') + return (1); + return (0); +} diff --git a/libft/ft_isprint.c b/libft/ft_isprint.c new file mode 100644 index 0000000..4ea94b2 --- /dev/null +++ b/libft/ft_isprint.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 15:22:01 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 15:24:46 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isprint(int c) +{ + if (c >= 32 && c <= 126) + return (1); + return (0); +} diff --git a/libft/ft_itoa.c b/libft/ft_itoa.c new file mode 100644 index 0000000..78a580d --- /dev/null +++ b/libft/ft_itoa.c @@ -0,0 +1,73 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/02 19:59:03 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:12:59 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static void help_help(int *n, char *ret, int *i) +{ + if (*n < 0) + { + ret[0] = '-'; + *i = *i + 1; + *n = -(*n); + } + if (*n == 0) + ret[0] = '0'; +} + +static char *help(int n, long *div) +{ + int len; + char *ret; + + ret = NULL; + len = 0; + while (n) + { + n /= 10; + *div = *div * 10; + len++; + } + if (n < 0 || n == 0) + len++; + ret = ft_strnew(len); + return (ret); +} + +char *ft_itoa(int n) +{ + char *ret; + long div; + int i; + int exception; + + exception = 0; + div = 1; + i = 0; + if (n == -2147483648) + { + n = n / 10; + exception = 1; + } + if (!(ret = help(n, &div))) + return (NULL); + help_help(&n, ret, &i); + while (div > 1) + { + div /= 10; + ret[i++] = n / div + '0'; + n = n % div; + } + if (exception) + ret[i] = '8'; + return (ret); +} diff --git a/libft/ft_lst_at.c b/libft/ft_lst_at.c new file mode 100644 index 0000000..126a9ed --- /dev/null +++ b/libft/ft_lst_at.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_at.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 17:17:21 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 19:49:09 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_at(t_list *l, unsigned int at) +{ + while (at-- && l) + l = l->next; + return (l); +} diff --git a/libft/ft_lstadd.c b/libft/ft_lstadd.c new file mode 100644 index 0000000..f059109 --- /dev/null +++ b/libft/ft_lstadd.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 19:01:42 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 19:12:10 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd(t_list **alst, t_list *new) +{ + if (alst) + { + new->next = *alst; + *alst = new; + } +} diff --git a/libft/ft_lstadd_back.c b/libft/ft_lstadd_back.c new file mode 100644 index 0000000..c8bfb60 --- /dev/null +++ b/libft/ft_lstadd_back.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 17:45:28 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 20:06:23 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_back(t_list **l, void *content, size_t size) +{ + if (!l) + return ; + if (*l == NULL) + (*l) = ft_lstnew(content, size); + else + { + while ((*l)->next) + l = &(*l)->next; + (*l)->next = ft_lstnew(content, size); + } +} diff --git a/libft/ft_lstdel.c b/libft/ft_lstdel.c new file mode 100644 index 0000000..49903f0 --- /dev/null +++ b/libft/ft_lstdel.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 18:48:08 by gtertysh #+# #+# */ +/* Updated: 2016/12/05 18:50:39 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstdel(t_list **alst, void (*del)(void *, size_t)) +{ + t_list *tmp; + + tmp = NULL; + if (alst) + { + while (*alst) + { + tmp = (*alst)->next; + del((*alst)->content, (*alst)->content_size); + free(*alst); + *alst = tmp; + } + *alst = NULL; + } +} diff --git a/libft/ft_lstdelone.c b/libft/ft_lstdelone.c new file mode 100644 index 0000000..371c65d --- /dev/null +++ b/libft/ft_lstdelone.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 18:30:18 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 19:46:45 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstdelone(t_list **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + del((*alst)->content, (*alst)->content_size); + free(*alst); + *alst = NULL; + } +} diff --git a/libft/ft_lstfind.c b/libft/ft_lstfind.c new file mode 100644 index 0000000..21c42be --- /dev/null +++ b/libft/ft_lstfind.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstfind.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 16:56:43 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 19:47:14 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstfind(t_list *lst, void *data, size_t size) +{ + while (lst) + { + if ((ft_memcmp(lst->content, data, size) == 0)) + return (lst); + lst = lst->next; + } + return (0); +} diff --git a/libft/ft_lstiter.c b/libft/ft_lstiter.c new file mode 100644 index 0000000..148fc0f --- /dev/null +++ b/libft/ft_lstiter.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 19:13:25 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 19:47:50 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(t_list *elem)) +{ + while (lst && f) + { + f(lst); + lst = lst->next; + } +} diff --git a/libft/ft_lstmap.c b/libft/ft_lstmap.c new file mode 100644 index 0000000..ca591fb --- /dev/null +++ b/libft/ft_lstmap.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 19:18:15 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 18:08:53 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, t_list *(*f)(t_list *elem)) +{ + t_list *new; + + new = NULL; + if (lst && f) + { + new = f(lst); + new->next = ft_lstmap(lst->next, f); + } + return (new); +} diff --git a/libft/ft_lstnew.c b/libft/ft_lstnew.c new file mode 100644 index 0000000..2514624 --- /dev/null +++ b/libft/ft_lstnew.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 15:59:21 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 19:45:44 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstnew(void const *content, size_t content_size) +{ + t_list *new; + + new = NULL; + if ((new = (t_list *)malloc(sizeof(t_list)))) + { + if (!content) + { + new->content = NULL; + new->content_size = 0; + } + else + { + if (!(new->content = (char *)malloc(content_size))) + { + free(new); + return (NULL); + } + ft_memcpy(new->content, content, content_size); + new->content_size = content_size; + } + new->next = NULL; + } + return (new); +} diff --git a/libft/ft_lststrsplit.c b/libft/ft_lststrsplit.c new file mode 100644 index 0000000..4960770 --- /dev/null +++ b/libft/ft_lststrsplit.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lststrsplit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 15:32:39 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 20:07:14 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lststrsplit(const char *s, char c) +{ + char **arr_table; + t_list *lst_table; + t_list *tmp; + int i; + + i = 0; + lst_table = NULL; + arr_table = ft_strsplit(s, c); + if (arr_table[i]) + { + lst_table = ft_lstnew(arr_table[i], ft_strlen(arr_table[i]) + 1); + tmp = lst_table; + i++; + while (arr_table[i]) + { + tmp->next = ft_lstnew(arr_table[i], ft_strlen(arr_table[i]) + 1); + tmp = tmp->next; + i++; + } + } + return (lst_table); +} diff --git a/libft/ft_memalloc.c b/libft/ft_memalloc.c new file mode 100644 index 0000000..9364e94 --- /dev/null +++ b/libft/ft_memalloc.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memalloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 16:07:55 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 16:49:22 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memalloc(size_t size) +{ + void *ret; + + ret = NULL; + if ((ret = malloc(size))) + ft_bzero(ret, size); + return (ret); +} diff --git a/libft/ft_memccpy.c b/libft/ft_memccpy.c new file mode 100644 index 0000000..4e71b3f --- /dev/null +++ b/libft/ft_memccpy.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memccpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/29 13:35:32 by gtertysh #+# #+# */ +/* Updated: 2016/12/05 13:12:20 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memccpy(void *dst, const void *src, int c, size_t n) +{ + size_t i; + + i = 0; + while (i < n) + { + *((char *)dst + i) = *((const char *)src + i); + if (*((unsigned char *)src + i) == (unsigned char)c) + return ((dst + i + 1)); + i++; + } + return (NULL); +} diff --git a/libft/ft_memchr.c b/libft/ft_memchr.c new file mode 100644 index 0000000..eb05917 --- /dev/null +++ b/libft/ft_memchr.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/29 15:55:30 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 18:51:40 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + while (n--) + { + if (*(unsigned char *)s == (unsigned char)c) + return ((unsigned char *)s); + s++; + } + return (NULL); +} diff --git a/libft/ft_memcmp.c b/libft/ft_memcmp.c new file mode 100644 index 0000000..6b92874 --- /dev/null +++ b/libft/ft_memcmp.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/29 16:31:56 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 14:07:47 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + while ((int)n--) + { + if ((*(unsigned char *)s1 != *(unsigned char *)s2)) + return (*(unsigned char *)s1 - *(unsigned char *)s2); + s1++; + s2++; + } + return (0); +} diff --git a/libft/ft_memcpy.c b/libft/ft_memcpy.c new file mode 100644 index 0000000..52df83c --- /dev/null +++ b/libft/ft_memcpy.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 17:19:13 by gtertysh #+# #+# */ +/* Updated: 2016/11/29 14:52:27 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dst, const void *src, size_t len) +{ + size_t i; + + i = 0; + while (i < len) + { + *((char *)dst + i) = *((const char *)src + i); + i++; + } + return (dst); +} diff --git a/libft/ft_memdel.c b/libft/ft_memdel.c new file mode 100644 index 0000000..e1ba7a0 --- /dev/null +++ b/libft/ft_memdel.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 16:50:09 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 17:18:12 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_memdel(void **ap) +{ + if (ap) + { + free(*ap); + *ap = NULL; + } +} diff --git a/libft/ft_memmove.c b/libft/ft_memmove.c new file mode 100644 index 0000000..d0a749e --- /dev/null +++ b/libft/ft_memmove.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/29 14:55:05 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 16:38:06 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memmove(void *dst, const void *src, size_t len) +{ + unsigned char *tmp; + + tmp = dst; + if (src < dst) + { + src += len; + dst += len; + while (len--) + *((char *)--dst) = *((const char *)--src); + } + else + { + while (len--) + *(char *)dst++ = *(const char *)src++; + } + return (tmp); +} diff --git a/libft/ft_memset.c b/libft/ft_memset.c new file mode 100644 index 0000000..ac837d1 --- /dev/null +++ b/libft/ft_memset.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 12:06:20 by gtertysh #+# #+# */ +/* Updated: 2016/11/28 16:47:35 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memset(void *b, int c, size_t len) +{ + unsigned char *s; + + s = (unsigned char *)b; + while (len--) + *s++ = (unsigned char)c; + return (b); +} diff --git a/libft/ft_putchar.c b/libft/ft_putchar.c new file mode 100644 index 0000000..daac03e --- /dev/null +++ b/libft/ft_putchar.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 14:29:56 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:04:42 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putchar(char c) +{ + write(1, &c, 1); +} diff --git a/libft/ft_putchar_fd.c b/libft/ft_putchar_fd.c new file mode 100644 index 0000000..2349170 --- /dev/null +++ b/libft/ft_putchar_fd.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 15:03:56 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:04:30 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + write(fd, &c, 1); +} diff --git a/libft/ft_putendl.c b/libft/ft_putendl.c new file mode 100644 index 0000000..e9d9f3d --- /dev/null +++ b/libft/ft_putendl.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 14:57:59 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:24:37 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putendl(char const *s) +{ + if (s) + while (*s) + write(1, s++, 1); + write(1, "\n", 1); +} diff --git a/libft/ft_putendl_fd.c b/libft/ft_putendl_fd.c new file mode 100644 index 0000000..45c78a7 --- /dev/null +++ b/libft/ft_putendl_fd.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 15:17:18 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:24:55 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putendl_fd(char const *s, int fd) +{ + if (s) + while (*s) + write(fd, s++, 1); + write(fd, "\n", 1); +} diff --git a/libft/ft_putnbr.c b/libft/ft_putnbr.c new file mode 100644 index 0000000..0a59078 --- /dev/null +++ b/libft/ft_putnbr.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/10/31 09:45:39 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:26:28 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static void ft_putnbr_print(int nb, long div, int exeption) +{ + if (nb < 0) + { + nb = -nb; + ft_putchar('-'); + } + if (div == 1) + ft_putchar('0'); + else + { + while (div > 1) + { + div = div / 10; + ft_putchar(nb / div + '0'); + nb = nb % div; + } + } + if (exeption) + ft_putchar('8'); +} + +void ft_putnbr(int nb) +{ + int temp; + long div; + int exeption; + + div = 1; + exeption = 0; + temp = nb; + if (nb == -2147483648) + { + nb = nb / 10; + temp = temp / 10; + exeption = 1; + } + while (temp) + { + temp = temp / 10; + div = div * 10; + } + ft_putnbr_print(nb, div, exeption); +} diff --git a/libft/ft_putnbr_fd.c b/libft/ft_putnbr_fd.c new file mode 100644 index 0000000..7c1ad10 --- /dev/null +++ b/libft/ft_putnbr_fd.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 15:19:18 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:25:42 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static void ft_putnbr_print(int nb, long div, int exeption, int fd) +{ + if (nb < 0) + { + nb = -nb; + ft_putchar_fd('-', fd); + } + if (div == 1) + ft_putchar_fd('0', fd); + else + { + while (div > 1) + { + div = div / 10; + ft_putchar_fd(nb / div + '0', fd); + nb = nb % div; + } + } + if (exeption) + ft_putchar_fd('8', fd); +} + +void ft_putnbr_fd(int nb, int fd) +{ + int temp; + long div; + int exeption; + + div = 1; + exeption = 0; + temp = nb; + if (nb == -2147483648) + { + nb = nb / 10; + temp = temp / 10; + exeption = 1; + } + while (temp) + { + temp = temp / 10; + div = div * 10; + } + ft_putnbr_print(nb, div, exeption, fd); +} diff --git a/libft/ft_putstr.c b/libft/ft_putstr.c new file mode 100644 index 0000000..bbe80cb --- /dev/null +++ b/libft/ft_putstr.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 14:55:00 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:25:12 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putstr(char const *s) +{ + if (s) + while (*s) + write(1, s++, 1); +} diff --git a/libft/ft_putstr_fd.c b/libft/ft_putstr_fd.c new file mode 100644 index 0000000..7f7f74f --- /dev/null +++ b/libft/ft_putstr_fd.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/04 15:14:02 by gtertysh #+# #+# */ +/* Updated: 2016/12/04 15:26:07 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putstr_fd(char const *s, int fd) +{ + if (s) + while (*s) + write(fd, s++, 1); +} diff --git a/libft/ft_read_file.c b/libft/ft_read_file.c new file mode 100644 index 0000000..2674bb4 --- /dev/null +++ b/libft/ft_read_file.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_read_file.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/27 17:59:03 by gtertysh #+# #+# */ +/* Updated: 2016/12/27 18:01:33 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *read_file(const int fd) +{ + long readed; + long old_size; + char buf[BUF_S + 1]; + char *string; + + string = ft_memalloc(sizeof(char) * BUF_S); + while ((readed = read(fd, buf, BUF_S))) + { + buf[readed] = '\0'; + old_size = ft_strlen(string); + string = ft_realloc(string, old_size + readed, old_size); + ft_strcat(string, buf); + } + return (string); +} diff --git a/libft/ft_realloc.c b/libft/ft_realloc.c new file mode 100644 index 0000000..d18c6d5 --- /dev/null +++ b/libft/ft_realloc.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_realloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 18:57:55 by gtertysh #+# #+# */ +/* Updated: 2016/12/07 17:16:48 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_realloc(void *old, unsigned int new_size, unsigned int old_size) +{ + void *new; + + new = NULL; + if ((new = ft_memalloc(new_size))) + { + if (old) + { + if (old_size) + ft_memcpy(new, old, old_size); + free(old); + old = NULL; + } + return (new); + } + return (old); +} diff --git a/libft/ft_strcat.c b/libft/ft_strcat.c new file mode 100644 index 0000000..ebe3ef6 --- /dev/null +++ b/libft/ft_strcat.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 14:58:16 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 15:02:50 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcat(char *s1, const char *s2) +{ + char *s; + + s = s1; + while (*s1) + s1++; + while (*s2) + *s1++ = *s2++; + *s1 = '\0'; + return (s); +} diff --git a/libft/ft_strchr.c b/libft/ft_strchr.c new file mode 100644 index 0000000..7b48bf9 --- /dev/null +++ b/libft/ft_strchr.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 18:14:04 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 18:29:27 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + while (*s && *s != (char)c) + s++; + if (*s == (char)c) + return ((char *)s); + return (NULL); +} diff --git a/libft/ft_strclr.c b/libft/ft_strclr.c new file mode 100644 index 0000000..f03da5a --- /dev/null +++ b/libft/ft_strclr.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strclr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 17:21:04 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 17:30:26 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_strclr(char *s) +{ + if (s) + ft_bzero(s, ft_strlen(s)); +} diff --git a/libft/ft_strcmp.c b/libft/ft_strcmp.c new file mode 100644 index 0000000..a8d73ee --- /dev/null +++ b/libft/ft_strcmp.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 13:40:16 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 19:52:50 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strcmp(const char *s1, const char *s2) +{ + while (*s1 && *s2 && *(unsigned char *)s1 == *(unsigned char *)s2) + { + s1++; + s2++; + } + if (*(unsigned char *)s1 != *(unsigned char *)s2) + return (*(unsigned char *)s1 - *(unsigned char *)s2); + return (0); +} diff --git a/libft/ft_strcpy.c b/libft/ft_strcpy.c new file mode 100644 index 0000000..9b09b72 --- /dev/null +++ b/libft/ft_strcpy.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 13:03:43 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 13:09:52 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcpy(char *dst, const char *src) +{ + size_t i; + + i = 0; + while (*src) + *(dst + i++) = *src++; + *(dst + i) = '\0'; + return (dst); +} diff --git a/libft/ft_strdel.c b/libft/ft_strdel.c new file mode 100644 index 0000000..ecb0905 --- /dev/null +++ b/libft/ft_strdel.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 17:15:34 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 17:17:50 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_strdel(char **as) +{ + ft_memdel((void **)as); +} diff --git a/libft/ft_strdup.c b/libft/ft_strdup.c new file mode 100644 index 0000000..3a8468f --- /dev/null +++ b/libft/ft_strdup.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 12:51:34 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 18:31:11 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdup(const char *s1) +{ + char *new; + size_t size; + + size = ft_strlen(s1); + if (!(new = (char *)malloc(sizeof(char) * (size + 1)))) + return (0); + ft_memcpy(new, s1, size); + *(new + size) = '\0'; + return (new); +} diff --git a/libft/ft_strequ.c b/libft/ft_strequ.c new file mode 100644 index 0000000..f257cd9 --- /dev/null +++ b/libft/ft_strequ.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strequ.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 18:51:03 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 19:00:02 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strequ(char const *s1, char const *s2) +{ + if (s1 && s2) + { + while (*s1 && *s2 && *s1 == *s2) + { + s1++; + s2++; + } + if (*s1 != *s2) + return (0); + } + return (1); +} diff --git a/libft/ft_striter.c b/libft/ft_striter.c new file mode 100644 index 0000000..1ab2c28 --- /dev/null +++ b/libft/ft_striter.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 17:36:39 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 17:37:33 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striter(char *s, void (*f)(char *)) +{ + if (s && f) + while (*s) + f(s++); +} diff --git a/libft/ft_striteri.c b/libft/ft_striteri.c new file mode 100644 index 0000000..0aacc9b --- /dev/null +++ b/libft/ft_striteri.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 17:31:23 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 17:38:48 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char *)) +{ + unsigned int i; + + i = 0; + if (s && f) + while (*s) + f(i++, s++); +} diff --git a/libft/ft_strjoin.c b/libft/ft_strjoin.c new file mode 100644 index 0000000..378e595 --- /dev/null +++ b/libft/ft_strjoin.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 19:53:30 by gtertysh #+# #+# */ +/* Updated: 2016/12/02 16:18:10 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *ret; + char *tmp; + + ret = NULL; + if (s1 && + s2 && + (ret = ft_strnew(ft_strlen(s1) + ft_strlen(s2))) && + (tmp = ret)) + { + while (*s1) + *tmp++ = *s1++; + while (*s2) + *tmp++ = *s2++; + } + return (ret); +} diff --git a/libft/ft_strlcat.c b/libft/ft_strlcat.c new file mode 100644 index 0000000..e613c1b --- /dev/null +++ b/libft/ft_strlcat.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 15:16:55 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 18:13:07 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + size_t dst_size; + size_t src_size; + + dst_size = ft_strlen(dst); + src_size = ft_strlen(src); + while (*dst) + dst++; + if (size > dst_size) + { + while (*src && (size-- - dst_size - 1)) + *dst++ = *src++; + *dst = '\0'; + return (src_size + dst_size); + } + return (src_size + size); +} diff --git a/libft/ft_strlen.c b/libft/ft_strlen.c new file mode 100644 index 0000000..9c0f86d --- /dev/null +++ b/libft/ft_strlen.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 12:37:23 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 12:48:50 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + size_t len; + + len = 0; + if (s) + while (*(unsigned char *)s++) + len++; + return (len); +} diff --git a/libft/ft_strmap.c b/libft/ft_strmap.c new file mode 100644 index 0000000..a8b2b57 --- /dev/null +++ b/libft/ft_strmap.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 17:39:51 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 19:53:31 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmap(char const *s, char (*f)(char)) +{ + char *ret; + size_t i; + + i = 0; + ret = NULL; + if (s) + if ((ret = (char *)ft_strnew(ft_strlen(s)))) + while (*(s + i)) + { + *(ret + i) = f(*(s + i)); + i++; + } + return (ret); +} diff --git a/libft/ft_strmapi.c b/libft/ft_strmapi.c new file mode 100644 index 0000000..d532b4e --- /dev/null +++ b/libft/ft_strmapi.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 18:47:40 by gtertysh #+# #+# */ +/* Updated: 2016/12/02 16:18:37 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + char *ret; + unsigned int i; + + i = 0; + ret = NULL; + if (s) + if ((ret = (char *)ft_strnew(ft_strlen(s)))) + while (*(s + i)) + { + *(ret + i) = f(i, *(s + i)); + i++; + } + return (ret); +} diff --git a/libft/ft_strncat.c b/libft/ft_strncat.c new file mode 100644 index 0000000..881fa8a --- /dev/null +++ b/libft/ft_strncat.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 15:03:18 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 15:11:23 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strncat(char *s1, const char *s2, size_t n) +{ + char *s; + size_t s1_size; + + s = s1; + s1_size = sizeof(s1); + while (*s1) + s1++; + while (*s2 && s1_size - 1 && n--) + *s1++ = *s2++; + *s1 = '\0'; + return (s); +} diff --git a/libft/ft_strncmp.c b/libft/ft_strncmp.c new file mode 100644 index 0000000..7976e67 --- /dev/null +++ b/libft/ft_strncmp.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 14:33:11 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 14:23:45 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t i; + + i = 0; + while (i < n && (*s1 || *s2)) + { + if (*(unsigned char *)s1 != *(unsigned char *)s2) + return (*(unsigned char *)s1 - *(unsigned char *)s2); + s1++; + s2++; + i++; + } + return (0); +} diff --git a/libft/ft_strncpy.c b/libft/ft_strncpy.c new file mode 100644 index 0000000..f88f84e --- /dev/null +++ b/libft/ft_strncpy.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 13:12:41 by gtertysh #+# #+# */ +/* Updated: 2016/11/30 14:39:28 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strncpy(char *dst, const char *src, size_t len) +{ + char *new_dest; + + new_dest = dst; + while (len && *src) + { + *new_dest++ = *src++; + if (!len) + return (dst); + len--; + } + while (len-- > 0) + *(new_dest++) = '\0'; + return (dst); +} diff --git a/libft/ft_strnequ.c b/libft/ft_strnequ.c new file mode 100644 index 0000000..21219fc --- /dev/null +++ b/libft/ft_strnequ.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnequ.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 19:00:40 by gtertysh #+# #+# */ +/* Updated: 2016/12/02 19:00:55 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strnequ(char const *s1, char const *s2, size_t n) +{ + if (s1 && s2) + while (n--) + if (ft_tolower(*s1++) != ft_tolower(*s2++)) + return (0); + return (1); +} diff --git a/libft/ft_strnew.c b/libft/ft_strnew.c new file mode 100644 index 0000000..699a6f5 --- /dev/null +++ b/libft/ft_strnew.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 17:09:46 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 17:14:53 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnew(size_t size) +{ + char *ret; + + ret = NULL; + if ((ret = (char *)malloc(size + 1))) + { + ft_bzero(ret, size + 1); + } + return (ret); +} diff --git a/libft/ft_strnstr.c b/libft/ft_strnstr.c new file mode 100644 index 0000000..52cbca2 --- /dev/null +++ b/libft/ft_strnstr.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 20:26:05 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 13:22:59 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t l; + size_t b; + + l = ft_strlen(little); + b = ft_strlen(big); + if (*little == '\0') + return ((char *)big); + while (len >= l && b) + { + if (ft_memcmp(big, little, l) == 0) + return ((char *)big); + big++; + len--; + b--; + } + return (NULL); +} diff --git a/libft/ft_strrchr.c b/libft/ft_strrchr.c new file mode 100644 index 0000000..bed8e70 --- /dev/null +++ b/libft/ft_strrchr.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchar.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 18:32:21 by gtertysh #+# #+# */ +/* Updated: 2016/12/02 16:19:20 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + const char *str; + + str = s; + while (*s) + s++; + while (s != str && *s != (char)c) + s--; + if (*s == (char)c) + return ((char *)s); + return (NULL); +} diff --git a/libft/ft_strsplit.c b/libft/ft_strsplit.c new file mode 100644 index 0000000..a5d83ed --- /dev/null +++ b/libft/ft_strsplit.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsplit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/02 17:36:40 by gtertysh #+# #+# */ +/* Updated: 2016/12/07 17:24:37 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +static int count_words(char const *str, char c) +{ + int words; + int has_word; + + words = 0; + has_word = 0; + while (*str) + { + while (*str == c) + str++; + while (*str != c && *str) + { + str++; + has_word = 1; + } + if (has_word) + words++; + has_word = 0; + } + return (words); +} + +static int fill_table(char const *str, char **table, char c) +{ + int chars; + int char_position; + int word_position; + + word_position = 0; + while (*str) + { + chars = 0; + char_position = 0; + while (*str == c) + str++; + while (*str != c && *str && ++chars) + str++; + if (chars != 0) + { + if (!(table[word_position] = malloc(sizeof(char) * (chars + 1)))) + return (1); + while (chars) + table[word_position][char_position++] = *(str - chars--); + table[word_position++][char_position] = '\0'; + } + } + table[word_position] = 0; + return (0); +} + +char **ft_strsplit(char const *s, char c) +{ + char **table; + int words; + + table = NULL; + if (!s) + return (NULL); + words = count_words(s, c); + if (!words) + { + if (!(table = (char **)malloc(sizeof(char *)))) + return (NULL); + } + else if (!(table = (char **)malloc(sizeof(char *) * (words + 1)))) + return (NULL); + if (fill_table(s, table, c)) + return (table); + return (table); +} diff --git a/libft/ft_strstr.c b/libft/ft_strstr.c new file mode 100644 index 0000000..1dc9ce3 --- /dev/null +++ b/libft/ft_strstr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/30 19:32:43 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 14:23:54 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strstr(const char *big, const char *little) +{ + size_t l; + + l = ft_strlen(little); + if (!*little) + return ((char *)big); + while (*big) + { + if (!(ft_memcmp(big, little, l))) + return ((char *)big); + big++; + } + return (NULL); +} diff --git a/libft/ft_strsub.c b/libft/ft_strsub.c new file mode 100644 index 0000000..5c01d12 --- /dev/null +++ b/libft/ft_strsub.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 19:02:56 by gtertysh #+# #+# */ +/* Updated: 2016/12/02 16:21:00 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strsub(char const *s, unsigned int start, size_t len) +{ + char *ret; + char *tmp; + + ret = NULL; + if (s) + if ((ret = ft_strnew(len)) && + (tmp = ret)) + while (len--) + *tmp++ = *(s++ + start); + return (ret); +} diff --git a/libft/ft_strtrim.c b/libft/ft_strtrim.c new file mode 100644 index 0000000..948e1db --- /dev/null +++ b/libft/ft_strtrim.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 20:25:11 by gtertysh #+# #+# */ +/* Updated: 2016/12/06 14:24:05 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtrim(char const *s) +{ + char *ret; + char *tmp; + const char *start; + const char *end; + + ret = NULL; + if (s) + { + while (*s == ' ' || *s == '\n' || *s == '\t') + s++; + start = s; + while (*s && *(s + 1)) + s++; + while (*s == ' ' || *s == '\n' || *s == '\t') + s--; + end = s; + if (!(ret = ft_strnew(end - start + 1))) + return (ret); + tmp = ret; + while (start <= end) + *tmp++ = *start++; + } + return (ret); +} diff --git a/libft/ft_tolower.c b/libft/ft_tolower.c new file mode 100644 index 0000000..9c823bb --- /dev/null +++ b/libft/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 15:58:52 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 15:59:14 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if (c >= 'A' && c <= 'Z') + return (c + 32); + return (c); +} diff --git a/libft/ft_toupper.c b/libft/ft_toupper.c new file mode 100644 index 0000000..b9fc06f --- /dev/null +++ b/libft/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 15:26:03 by gtertysh #+# #+# */ +/* Updated: 2016/12/01 15:58:00 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if (c >= 'a' && c <= 'z') + return (c - 32); + return (c); +} diff --git a/libft/includes/libft.h b/libft/includes/libft.h new file mode 100644 index 0000000..0f062e7 --- /dev/null +++ b/libft/includes/libft.h @@ -0,0 +1,101 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gtertysh +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 12:21:43 by gtertysh #+# #+# */ +/* Updated: 2016/12/27 18:02:00 by gtertysh ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H + +# include +# include +# include + +# define BUF_S 1024 + +typedef struct s_list +{ + void *content; + size_t content_size; + struct s_list *next; +} t_list; + +void *ft_memset(void *b, int c, size_t len); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dst, const void *src, size_t len); +void *ft_memccpy(void *dst, const void *src, int c, size_t n); +void *ft_memmove(void *dst, const void *src, size_t len); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +size_t ft_strlen(const char *s); +char *ft_strdup(const char *s1); +char *ft_strcpy(char *dst, const char *src); +char *ft_strncpy(char *dst, const char *src, size_t len); +char *ft_strcat(char *s1, const char *s2); +char *ft_strncat(char *s1, const char *s2, size_t n); +size_t ft_strlcat(char *dst, const char *src, size_t size); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +char *ft_strstr(const char *big, const char *little); +char *ft_strnstr(const char *big, const char *little, + size_t len); +int ft_strcmp(const char *s1, const char *s2); +int ft_strncmp(const char *s1, const char *s2, size_t n); +int ft_atoi(const char *str); +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalpha(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +int ft_tolower(int c); +int ft_toupper(int c); + +void *ft_memalloc(size_t size); +void ft_memdel(void **ap); +char *ft_strnew(size_t size); +void ft_strdel(char **as); +void ft_strclr(char *s); +void ft_striter(char *s, void (*f)(char *)); +void ft_striteri(char *s, void (*f)(unsigned int, char *)); +char *ft_strmap(char const *s, char (*f)(char)); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +int ft_strequ(char const *s1, char const *s2); +int ft_strnequ(char const *s1, char const *s2, size_t n); +char *ft_strsub(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s); +char **ft_strsplit(char const *s, char c); +char *ft_itoa(int c); +void ft_putchar(char c); +void ft_putstr(char const *s); +void ft_putendl(char const *s); +void ft_putnbr(int n); +void ft_putchar_fd(char c, int fd); +void ft_putstr_fd(char const *s, int fd); +void ft_putendl_fd(char const *s, int fd); +void ft_putnbr_fd(int n, int fd); + +t_list *ft_lstnew(void const *content, size_t content_size); +void ft_lstdelone(t_list **alst, void (*del)(void *, size_t)); +void ft_lstdel(t_list **alst, void (*del)(void *, size_t)); +void ft_lstadd(t_list **alst, t_list *new); +void ft_lstiter(t_list *lst, void (*f)(t_list *elem)); +t_list *ft_lstmap(t_list *lst, t_list *(*f)(t_list *elem)); + +t_list *ft_lststrsplit(const char *s, char c); +t_list *ft_lstfind(t_list *lst, void *data, size_t size); +t_list *ft_lst_at(t_list *l, unsigned int at); +void ft_lstadd_back(t_list **l, void *data, size_t size); +void *ft_realloc(void *old, unsigned int new_size, + unsigned int old_size); + +char *ft_read_file(const int fd); + +#endif diff --git a/minilibx/=README= b/minilibx/=README= new file mode 100644 index 0000000..65d5429 --- /dev/null +++ b/minilibx/=README= @@ -0,0 +1,41 @@ + +This is the MinilibX, a simple X-Window (X11R6) programming API +in C, designed for students, suitable for X-beginners. + + +Contents + + - source code in C to create the mlx library + - man pages (in man/ directory) + - a test program (in test/ directory) is built + with the library + - a public include file mlx.h + - a tiny configure script to generate an appropriate Makefile.gen + + +Requirements + + - MinilibX only support TrueColor visual type (8,15,16,24 or 32 bits depth) + - gcc + - X11 include files + - XShm extension must be present + + +Compile MinilibX + + - run ./configure or make + both will make a few tests, create Makefile.gen + and then automatically run make on this generated Makefile.gen . + libmlx.a and libmlx_$(HOSTTYPE).a are created. + test/mlx-test binary is also created. + + +Install MinilibX + + - no installation script is provided. You may want to install + - libmlx.a and/or libmlx_$(HOSTTYPE).a in /usr/X11/lib or /usr/local/lib + - mlx.h in /usr/X11/include or /usr/local/include + - man/man3/mlx*.1 in /usr/X11/man/man3 or /usr/local/man/man3 + + + Olivier CROUZET - 2014-01-06 - diff --git a/minilibx/Makefile b/minilibx/Makefile new file mode 100644 index 0000000..5c418c5 --- /dev/null +++ b/minilibx/Makefile @@ -0,0 +1,22 @@ +## +## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx +## +## Made by Olivier Crouzet +## Login +## +## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet +## Last update Tue May 15 15:44:41 2007 Olivier Crouzet +## + +## Please use configure script + + +all : do_configure + +do_configure : + ./configure + +clean : + ./configure clean + +re : clean all diff --git a/minilibx/Makefile.gen b/minilibx/Makefile.gen new file mode 100644 index 0000000..58ce77e --- /dev/null +++ b/minilibx/Makefile.gen @@ -0,0 +1,47 @@ +INC=/usr/include +HT=Linux +DOCP=do_cp +## +## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx +## +## Made by Olivier Crouzet +## Login +## +## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet +## Last update Tue May 15 15:41:20 2007 Olivier Crouzet +## + +## Please use configure script + + + +CC = gcc + +NAME = libmlx.a + +SRC = mlx_init.c mlx_new_window.c mlx_pixel_put.c mlx_loop.c \ + mlx_mouse_hook.c mlx_key_hook.c mlx_expose_hook.c mlx_loop_hook.c \ + mlx_int_anti_resize_win.c mlx_int_do_nothing.c \ + mlx_int_wait_first_expose.c mlx_int_get_visual.c \ + mlx_flush_event.c mlx_string_put.c \ + mlx_new_image.c mlx_get_data_addr.c \ + mlx_put_image_to_window.c mlx_get_color_value.c mlx_clear_window.c \ + mlx_xpm.c mlx_int_str_to_wordtab.c mlx_destroy_window.c \ + mlx_int_param_event.c mlx_int_set_win_event_mask.c mlx_hook.c \ + mlx_rgb.c mlx_destroy_image.c + +OBJ =$(SRC:.c=.o) +CFLAGS = -O3 -I$(INC) + +all : $(NAME) $(DOCP) + +$(NAME) : $(OBJ) + ar -r $(NAME) $(OBJ) + ranlib $(NAME) + +do_cp : + cp $(NAME) libmlx_$(HT).a + + +clean : + rm -f $(OBJ) $(NAME) *~ core *.core diff --git a/minilibx/Makefile.mk b/minilibx/Makefile.mk new file mode 100644 index 0000000..f05fd6c --- /dev/null +++ b/minilibx/Makefile.mk @@ -0,0 +1,47 @@ +## +## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx +## +## Made by Olivier Crouzet +## Login +## +## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet +## Last update Tue May 15 15:41:20 2007 Olivier Crouzet +## + +## Please use configure script + + +INC =%%%% +HT =%%%% +DOCP =%%%% + +CC = gcc + +NAME = libmlx.a + +SRC = mlx_init.c mlx_new_window.c mlx_pixel_put.c mlx_loop.c \ + mlx_mouse_hook.c mlx_key_hook.c mlx_expose_hook.c mlx_loop_hook.c \ + mlx_int_anti_resize_win.c mlx_int_do_nothing.c \ + mlx_int_wait_first_expose.c mlx_int_get_visual.c \ + mlx_flush_event.c mlx_string_put.c \ + mlx_new_image.c mlx_get_data_addr.c \ + mlx_put_image_to_window.c mlx_get_color_value.c mlx_clear_window.c \ + mlx_xpm.c mlx_int_str_to_wordtab.c mlx_destroy_window.c \ + mlx_int_param_event.c mlx_int_set_win_event_mask.c mlx_hook.c \ + mlx_rgb.c mlx_destroy_image.c + +OBJ =$(SRC:.c=.o) +CFLAGS = -O3 -I$(INC) + +all : $(NAME) $(DOCP) + +$(NAME) : $(OBJ) + ar -r $(NAME) $(OBJ) + ranlib $(NAME) + +do_cp : + cp $(NAME) libmlx_$(HT).a + + +clean : + rm -f $(OBJ) $(NAME) *~ core *.core diff --git a/minilibx/configure b/minilibx/configure new file mode 100755 index 0000000..2f9b0be --- /dev/null +++ b/minilibx/configure @@ -0,0 +1,94 @@ +#!/bin/sh + + +if [ -n "$1" -a "$1" = "--help" ] ; then + echo "Usage : $0\n Auto-configure and make MinilibX" + exit +fi + + +conf_inc=NO + +for inc in \ + /usr/X11/include \ + /usr/X11R6/include \ + /usr/X11R5/include \ + /usr/X11R4/include \ + \ + /usr/include/X11 \ + /usr/include/X11R6 \ + /usr/include/X11R5 \ + /usr/include/X11R4 \ + \ + /usr/local/X11/include \ + /usr/local/X11R6/include \ + /usr/local/X11R5/include \ + /usr/local/X11R4/include \ + \ + /usr/local/include/X11 \ + /usr/local/include/X11R6 \ + /usr/local/include/X11R5 \ + /usr/local/include/X11R4 \ + \ + /usr/X386/include \ + /usr/x386/include \ + /usr/XFree86/include/X11 \ + \ + /usr/include \ + /usr/local/include \ + /usr/athena/include \ + /usr/local/x11r5/include \ + /usr/lpp/Xamples/include \ + \ + /usr/openwin/include \ + /usr/openwin/share/include + do + if [ -f "$inc/X11/Xlib.h" -a -f "$inc/X11/extensions/XShm.h" ]; then + conf_inc=$inc + break + fi + done + + +if [ "$conf_inc" = "NO" ]; then + echo "Can't find a suitable X11 include directory." + exit +else + echo "X11 include dir : $conf_inc" +fi + +if [ -z "$HOSTTYPE" ]; then + conf_ht=`uname -s` +else + conf_ht=$HOSTTYPE +fi + +if [ -z "$conf_ht" ]; then + conf_docp="" +else + conf_docp="do_cp" + echo "lib_$conf_ht generation" +fi + + +/bin/echo "INC=$conf_inc" > Makefile.gen +/bin/echo "HT=$conf_ht" >> Makefile.gen +/bin/echo "DOCP=$conf_docp" >> Makefile.gen +cat Makefile.mk | grep -v %%%% >> Makefile.gen + +/bin/echo "INC=$conf_inc" > test/Makefile.gen +/bin/echo "HT=$conf_ht" >> test/Makefile.gen +/bin/echo "DOCP=$conf_docp" >> test/Makefile.gen +cat test/Makefile.mk | grep -v %%%% >> test/Makefile.gen + + +if [ -n "$1" -a "$1" = "clean" ] ; then + echo "Now make it clean." + make -f Makefile.gen clean + (cd test ; make -f Makefile.gen clean) + exit +fi + +echo "Now make it." +make -f Makefile.gen all +(cd test ; make -f Makefile.gen all ) diff --git a/minilibx/libmlx_Linux.a b/minilibx/libmlx_Linux.a new file mode 100644 index 0000000000000000000000000000000000000000..0c8e5698d3dab9d6b8f96482efb734ce36436951 GIT binary patch literal 102600 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 j=KYs^kA2tXpB$qYWKv2|Z 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

q7(o2 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 E2uf-Kn*aa+ literal 0 HcmV?d00001 diff --git a/minilibx/libmlx_intel-mac.a b/minilibx/libmlx_intel-mac.a new file mode 100644 index 0000000000000000000000000000000000000000..8ee82711cce7828e81d80b5d190cd6d3c76733a3 GIT binary patch literal 82744 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


J{U3V#iY;L|Vy`Bq|H0elL2@K7=zz|weZ`p z8ur0b_$^ojZ-Ei`O;`YLh93L|9Okyso8Tb)Ivjw!%QG(pzXto^4X_Vh4}0NtFb=;8 zWAH1m7JeC4!(LbluZ2bMOE3a^U;(@adN2uxr+D7ga1in>&b$G*2BzRuupeFt`(QWh zg{xs4cEK3D0@lLIVKt1yQg|6Gf|tSwyaX1&i=hWEg2SKkybIwVTm=WLs<=)t9MnA>{42nS&k9Dt251((2n zxES`q2G|Q1!8ojkF}M)c!a7(DYhfv@fkkiujKKM@0GS4#M-`0GtO? z@Lbpr&w+jLY}gCu!ZBc944w*WVHvE3rLYv90*m0uFal441#l+x;E8bfP|rI7 z4#F9508WP~cs%Tf$H6{$EbN8TU>r_`F<1g?VKJ9%Fair<0XzzN@JKj3 ziSG@=L3jilfKy-!ehT)(!(ksh4EDmwFb)reF*pg2wh54`u=D`Tu z9~Qv9p? zG59L1g@1(Aa1fTlKfof$H)!)B@b|C)@_n2<555G4C({4JLHHsZfSX_n{ucH_zFC{s z2Y&;5A>YoizV)0p{BiS*iM&Dhb@Twd5vJhRU_ZP8_QC66FT4)M;a6b{eg)RTFT-ls z3rpd(un2w$Mqm#tfY(3|CgJb|`hPeG6L0{ofhl+u?1xvvKG+R=;c6I%T`&f(fVJ>) zSPkQ_6kZ04;H5AEFM$Q{V(7t(;4qH`T?hx^DmVaF!W3Kq`{8of2RmUe?0|9D4r8zl z*1`*5HH^Vh*b0ka3yi>JumCng4=#nnAEp0?gRlt>z($yYOJF}-4EtaM?1hV99M;1a zTnKAn9ju16uoTw7BDerX;CxsB&xaoT0v!Gb{XZOp=fMFu52oO`upgcS`{3EI7tV!o zcovMoGhr?K9IS@buoRvFi{R-n0_VU2SOq=!SvbsNTc3f0uo4cyC``fGupgcV`(Op^ zh2<~~XTcae71qKsSPe^IDLe%h!INPGo&*cvOz6QA;qZs)|KT8<0SDl8n1aW{es~=0 zgU7;NI1R?(R2YLLuof1>YFGqI;W4lX9t|U~5Ej6rpa+kH!#vjZX*dXvfCF#}OuZigxO7VL-HU?2Q9?1le=arjRdgKxrG_zzeOhhZuFJ1l}*VFdmS7Qi>4 z2Z!Kr9{oQYgj?VM+zeCjFR&lJ4*TG1uowOr#^Ik}4896$;U8f&9E7Ft53mTn0weJE zumHXc`RBa^hxe!dhlB7%H~=@n6#OmhhcCcB_#4;@pNDby9E`zdVJ&
J{U3V#iY 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 EH*|+VNB{r; literal 0 HcmV?d00001 diff --git a/minilibx/man/man1 b/minilibx/man/man1 new file mode 120000 index 0000000..66d2fda --- /dev/null +++ b/minilibx/man/man1 @@ -0,0 +1 @@ +man3 \ No newline at end of file diff --git a/minilibx/man/man3/mlx.1 b/minilibx/man/man3/mlx.1 new file mode 100644 index 0000000..9ad0ac1 --- /dev/null +++ b/minilibx/man/man3/mlx.1 @@ -0,0 +1,93 @@ +.TH MiniLibX 3 "September 19, 2002" +.SH NAME +MiniLibX - Simple X-Window Interface Library for students +.SH SYNOPSYS +#include + +.nf +.I void * +.fi +.B mlx_init +(); + +.SH DESCRIPTION +MiniLibX is an easy way to create graphical software, +without any X-Window programming knowledge. It provides +simple window creation, a drawing tool, image and basic events +management. + +.SH X-WINDOW CONCEPT + +X-Window is a network-oriented graphical system for Unix. +It is based on two main parts: +.br +On one side, your software wants to draw something on the screen and/or +get keyboard & mouse entries. +.br +On the other side, the X-Server manages the screen, keyboard and mouse +(It is often refered to as a "display"). +.br +A network connection must be established between these two entities to send +drawing orders (from the software to the X-Server), and keyboard/mouse +events (from the X-Server to the software). + +.SH INCLUDE FILE +.B mlx.h +should be included for a correct use of the MiniLibX API. +It only contains function prototypes, no structure is needed. + +.SH LIBRARY FUNCTIONS +.P +First of all, you need to initialize the connection +between your software and the display. +Once this connection is established, you'll be able to +use other MiniLibX functions to send the X-Server messages, +like "I want to draw a yellow pixel in this window" or "did the +user hit a key?". +.P +The +.B mlx_init +function will create this connection. No parameters are needed, ant it will +return a +.I "void *" +identifier, used for further calls to the library routines. +.P +All other MiniLibX functions are described in the following man pages: + +.TP 20 +.B mlx_new_window +: manage windows +.TP 20 +.B mlx_pixel_put +: draw inside window +.TP 20 +.B mlx_new_image +: manipulate images +.TP 20 +.B mlx_loop +: handle keyboard or mouse events + +.SH LINKING MiniLibX +To use MiniLibX functions, you'll need to link +your software with several libraries, including the MiniLibX library itself. +To do this, simply add the following arguments at linking time: + +.B -lmlx -lXext -lX11 + +You may also need to specify the path to these libraries, using +the +.B -L +flag. + + +.SH RETURN VALUES +If +.B mlx_init() +fails to set up the connection to the X server, it will return NULL, otherwise +a non-null pointer is returned as a connection identifier. + +.SH SEE ALSO +mlx_new_window(3), mlx_pixel_put(3), mlx_new_image(3), mlx_loop(3) + +.SH AUTHOR +Copyright ol@ - 2002-2014 - Olivier Crouzet diff --git a/minilibx/man/man3/mlx_loop.1 b/minilibx/man/man3/mlx_loop.1 new file mode 100644 index 0000000..3397ce2 --- /dev/null +++ b/minilibx/man/man3/mlx_loop.1 @@ -0,0 +1,141 @@ +.TH MiniLibX 3 "September 19, 2002" +.SH NAME +MiniLibX - Handle events +.SH SYNOPSYS + +.nf +.I int +.fi +.B mlx_loop +( +.I void *mlx_ptr +); + +.nf +.I int +.fi +.B mlx_key_hook +( +.I void *win_ptr, int (*funct_ptr)(), void *param +); + +.nf +.I int +.fi +.B mlx_mouse_hook +( +.I void *win_ptr, int (*funct_ptr)(), void *param +); + +.nf +.I int +.fi +.B mlx_expose_hook +( +.I void *win_ptr, int (*funct_ptr)(), void *param +); + +.nf +.I int +.fi +.B mlx_loop_hook +( +.I void *mlx_ptr, int (*funct_ptr)(), void *param +); + +.SH X-WINDOW EVENTS + +The X-Window system is bi-directionnal. On one hand, the program sends orders to +the screen to display pixels, images, and so on. On the other hand, +it can get information from the keyboard and mouse associated to +the screen. To do so, the program receives "events" from the keyboard or the +mouse. + +.SH DESCRIPTION + +To receive events, you must use +.B mlx_loop +(). This function never returns. It is an infinite loop that waits for +an event, and then calls a user-defined function associated with this event. +A single parameter is needed, the connection identifier +.I mlx_ptr +(see the +.B mlx manual). + +You can assign different functions to the three following events: +.br +- A key is pressed +.br +- The mouse button is pressed +.br +- A part of the window should be re-drawn +(this is called an "expose" event, and it is your program's job to handle it). +.br + +Each window can define a different function for the same event. + +The three functions +.B mlx_key_hook +(), +.B mlx_mouse_hook +() and +.B mlx_expose_hook +() work exactly the same way. +.I funct_ptr +is a pointer to the function you want to be called +when an event occurs. This assignment is specific to the window defined by the +.I win_ptr +identifier. The +.I param +adress will be passed to the function everytime it is called, and should be +used to store the parameters it might need. + +The syntax for the +.B mlx_loop_hook +() function is identical to the previous ones, but the given function will be +called when no event occurs. + +When it catches an event, the MiniLibX calls the corresponding function +with fixed parameters: +.nf + + expose_hook(void *param); + key_hook(int keycode,void *param); + mouse_hook(int button,int x,int y,void *param); + loop_hook(void *param); + +.fi +These function names are arbitrary. They here are used to distinguish +parameters according to the event. These functions are NOT part of the +MiniLibX. + +.I param +is the address specified in the mlx_*_hook calls. This address is never +used nor modified by the MiniLibX. On key and mouse events, additional +information is passed: +.I keycode +tells you which key is pressed (look for the X11 include file "keysymdef.h"), +( +.I x +, +.I y +) are the coordinates of the mouse click in the window, and +.I button +tells you which mouse button was pressed. + +.SH GOING FURTHER WITH EVENTS +The MiniLibX provides a much generic access to all X-Window events. The +.I mlx.h +include define +.B mlx_hook() +in the same manner mlx_*_hook functions work. The event and mask values +will be taken from the X11 include file "X.h". + +See source code of mlx_int_param_event.c to find out how the MiniLibX will +call your own function for a specific event. + +.SH SEE ALSO +mlx(3), mlx_new_window(3), mlx_pixel_put(3), mlx_new_image(3) + +.SH AUTHOR +Copyright ol@ - 2002-2014 - Olivier Crouzet diff --git a/minilibx/man/man3/mlx_new_image.1 b/minilibx/man/man3/mlx_new_image.1 new file mode 100644 index 0000000..f2160a2 --- /dev/null +++ b/minilibx/man/man3/mlx_new_image.1 @@ -0,0 +1,192 @@ +.TH MiniLibX 3 "September 19, 2002" +.SH NAME +MiniLibX - Manipulating images +.SH SYNOPSYS + +.nf +.I void * +.fi +.B mlx_new_image +( +.I void *mlx_ptr, int width, int height +); + +.nf +.I char * +.fi +.B mlx_get_data_addr +( +.I void *img_ptr, int *bits_per_pixel, int *size_line, int *endian +); + +.nf +.I int +.fi +.B mlx_put_image_to_window +( +.I void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y +); + +.nf +.I unsigned int +.fi +.B mlx_get_color_value +( +.I void *mlx_ptr, int color +); + +.nf +.I void * +.fi +.B mlx_xpm_to_image +( +.I void *mlx_ptr, char **xpm_data, int *width, int *height +); + +.nf +.I void * +.fi +.B mlx_xpm_file_to_image +( +.I void *mlx_ptr, char *filename, int *width, int *height +); + +.nf +.I int +.fi +.B mlx_destroy_image +( +.I void *mlx_ptr, void *img_ptr +); + + +.SH DESCRIPTION + +.B mlx_new_image +() creates a new image in memory. It returns a +.I void * +identifier needed to manipulate this image later. It only needs +the size of the image to be created, using the +.I width +and +.I height +parameters, and the +.I mlx_ptr +connection identifier (see the +.B mlx +manual). + +The user can draw inside the image (see below), and +can dump the image inside a specified window at any time to +display it on the screen. This is done using +.B mlx_put_image_to_window +(). Three identifiers are needed here, for the connection to the +display, the window to use, and the image (respectively +.I mlx_ptr +, +.I win_ptr +and +.I img_ptr +). The ( +.I x +, +.I y +) coordinates define where the image should be placed in the window. + +.B mlx_get_data_addr +() returns information about the created image, allowing a user +to modify it later. The +.I img_ptr +parameter specifies the image to use. The three next parameters should +be the addresses of three different valid integers. +.I bits_per_pixel +will be filled with the number of bits needed to represent a pixel color +(also called the depth of the image). +.I size_line +is the number of bytes used to store one line of the image in memory. +This information is needed to move from one line to another in the image. +.I endian +tells you wether the pixel color in the image needs to be stored in +little endian ( +.I endian +== 0), or big endian ( +.I endian +== 1). + +.B mlx_get_data_addr +returns a +.I char * +address that represents the begining of the memory area where the image +is stored. From this adress, the first +.I bits_per_pixel +bits represent the color of the first pixel in the first line of +the image. The second group of +.I bits_per_pixel +bits represent the second pixel of the first line, and so on. +Add +.I size_line +to the adress to get the begining of the second line. You can reach any +pixels of the image that way. + +.B mlx_destroy_image +destroys the given image ( +.I img_ptr +). + +.SH STORING COLOR INSIDE IMAGES + +Depending on the display, the number of bits used to store a pixel color +can change. The user usually represents a color in RGB mode, using +one byte for each component (see +.B mlx_pixel_put +manual). This must be translated to fit the +.I bits_per_pixel +requirement of the image, and make the color understandable to the X-Server. +That is the purpose of the +.B mlx_get_color_value +() function. It takes a standard RGB +.I color +parameter, and returns an +.I unsigned int +value. +The +.I bits_per_pixel +least significant bits of this value can be stored in the image. + +Keep in mind that the least significant bits position depends on the local +computer's endian. If the endian of the image (in fact the endian of +the X-Server's computer) differs from the local endian, then the value should +be transformed before being used. + +.SH XPM IMAGES + +The +.B mlx_xpm_to_image +() and +.B mlx_xpm_file_to_image +() functions will create a new image the same way. +They will fill it using the specified +.I xpm_data +or +.I filename +, depending on which function is used. +Note that MiniLibX does not use the standard +Xpm library to deal with xpm images. You may not be able to +read all types of xpm images. It however handles transparency. + +.SH RETURN VALUES +The three functions that create images, +.B mlx_new_image() +, +.B mlx_xpm_to_image() +and +.B mlx_xpm_file_to_image() +, will return NULL if an error occurs. Otherwise they return a non-null pointer +as an image identifier. + + +.SH SEE ALSO +mlx(3), mlx_new_window(3), mlx_pixel_put(3), mlx_loop(3) + +.SH AUTHOR +Copyright ol@ - 2002-2014 - Olivier Crouzet diff --git a/minilibx/man/man3/mlx_new_window.1 b/minilibx/man/man3/mlx_new_window.1 new file mode 100644 index 0000000..90f6d47 --- /dev/null +++ b/minilibx/man/man3/mlx_new_window.1 @@ -0,0 +1,79 @@ +.TH MiniLibX 3 "September 19, 2002" +.SH NAME +MiniLibX - Managing windows +.SH SYNOPSYS + +.nf +.I void * +.fi +.B mlx_new_window +( +.I void *mlx_ptr, int size_x, int size_y, char *title +); + +.nf +.I int +.fi +.B mlx_clear_window +( +.I void *mlx_ptr, void *win_ptr +); + +.nf +.I int +.fi +.B mlx_destroy_window +( +.I void *mlx_ptr, void *win_ptr +); + + +.SH DESCRIPTION +The +.B mlx_new_window +() function creates a new window on the screen, using the +.I size_x +and +.I size_y +parameters to determine its size, and +.I title +as the text that should be displayed in the window's title bar. +The +.I mlx_ptr +parameter is the connection identifier returned by +.B mlx_init +() (see the +.B mlx +man page). +.B mlx_new_window +() returns a +.I void * +window identifier that can be used by other MiniLibX calls. +Note that the MiniLibX +can handle an arbitrary number of separate windows. + +.B mlx_clear_window +() and +.B mlx_destroy_window +() respectively clear (in black) and destroy the given window. They both have +the same parameters: +.I mlx_ptr +is the screen connection identifier, and +.I win_ptr +is a window identifier. + +.SH RETURN VALUES +If +.B mlx_new_window() +fails to create a new window (for wathever reason), it will return NULL, +otherwise a non-null pointer is returned as a window identifier. +.B mlx_clear_window +and +.B mlx_destroy_window +right now return nothing. + +.SH SEE ALSO +mlx(3), mlx_pixel_put(3), mlx_new_image(3), mlx_loop(3) + +.SH AUTHOR +Copyright ol@ - 2002-2014 - Olivier Crouzet diff --git a/minilibx/man/man3/mlx_pixel_put.1 b/minilibx/man/man3/mlx_pixel_put.1 new file mode 100644 index 0000000..f4d131e --- /dev/null +++ b/minilibx/man/man3/mlx_pixel_put.1 @@ -0,0 +1,81 @@ +.TH MiniLibX 3 "September 19, 2002" +.SH NAME +MiniLibX - Drawing inside windows +.SH SYNOPSYS + +.nf +.I int +.fi +.B mlx_pixel_put +( +.I void *mlx_ptr, void *win_ptr, int x, int y, int color +); + +.nf +.I int +.fi +.B mlx_string_put +( +.I void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string +); + + +.SH DESCRIPTION +The +.B mlx_pixel_put +() function draws a defined pixel in the window +.I win_ptr +using the ( +.I x +, +.I y +) coordinates, and the specified +.I color +\&. The origin (0,0) is the upper left corner of the window, the x and y axis +respectively pointing right and down. The connection +identifier, +.I mlx_ptr +, is needed (see the +.B mlx +man page). + +Parameters for +.B mlx_string_put +() have the same meaning. Instead of a simple pixel, the specified +.I string +will be displayed at ( +.I x +, +.I y +). + +In both functions, it is impossible to display anything outside the +specified window, nor display in another window in front of the selected one. + +.SH COLOR MANAGEMENT +The +.I color +parameter has an integer type. The displayed color needs to be encoded +in this integer, following a defined scheme. All displayable colors +can be split in 3 basic colors: red, green and blue. Three associated +values, in the 0-255 range, represent how much of each color is mixed up +to create the original color. Theses three values must be set inside the +integer to display the right color. The three least significant bytes of +this integer are filled as shown in the picture below: + +.nf + | 0 | R | G | B | color integer + +---+---+---+---+ +.fi + + +While filling the integer, make sure you avoid endian problems. Remember +that the "blue" byte should always be the least significant one. + + +.SH SEE ALSO +mlx(3), mlx_new_window(3), mlx_new_image(3), mlx_loop(3) + + +.SH AUTHOR +Copyright ol@ - 2002-2014 - Olivier Crouzet diff --git a/minilibx/mlx.h b/minilibx/mlx.h new file mode 100644 index 0000000..25991a1 --- /dev/null +++ b/minilibx/mlx.h @@ -0,0 +1,129 @@ +/* +** mlx.h for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Mon Jul 31 16:37:50 2000 Charlie Root +** Last update Tue May 15 16:23:28 2007 Olivier Crouzet +*/ + +/* +** MinilibX - Please report bugs +*/ + + +/* +** FR msg - FR msg - FR msg +** +** La MinilibX utilise 2 librairies supplementaires qu'il +** est necessaire de rajouter a la compilation : +** -lmlx -lXext -lX11 +** +** La MinilibX permet le chargement des images de type Xpm. +** Notez que cette implementation est incomplete. +** Merci de communiquer tout probleme de chargement d'image +** de ce type. +*/ + + +#ifndef MLX_H + +#define MLX_H + + +void *mlx_init(); +/* +** needed before everything else. +** return (void *)0 if failed +*/ + + +/* +** Basic actions +*/ + +void *mlx_new_window(void *mlx_ptr, int size_x, int size_y, char *title); +/* +** return void *0 if failed +*/ +int mlx_clear_window(void *mlx_ptr, void *win_ptr); +int mlx_pixel_put(void *mlx_ptr, void *win_ptr, int x, int y, int color); +/* +** origin for x & y is top left corner of the window +** y down is positive +** color is 0x00RRGGBB +*/ + + +/* +** Image stuff +*/ + +void *mlx_new_image(void *mlx_ptr,int width,int height); +/* +** return void *0 if failed +** obsolete : image2 data is stored using bit planes +** void *mlx_new_image2(void *mlx_ptr,int width,int height); +*/ +char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel, + int *size_line, int *endian); +/* +** endian : 0 = sever X is little endian, 1 = big endian +** for mlx_new_image2, 2nd arg of mlx_get_data_addr is number_of_planes +*/ +int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr, + int x, int y); +unsigned int mlx_get_color_value(void *mlx_ptr, int color); + + +/* +** dealing with Events +*/ + +int mlx_mouse_hook (void *win_ptr, int (*funct_ptr)(), void *param); +int mlx_key_hook (void *win_ptr, int (*funct_ptr)(), void *param); +int mlx_expose_hook (void *win_ptr, int (*funct_ptr)(), void *param); + +int mlx_loop_hook (void *mlx_ptr, int (*funct_ptr)(), void *param); +int mlx_loop (void *mlx_ptr); + + +/* +** hook funct are called as follow : +** +** expose_hook(void *param); +** key_hook(int keycode, void *param); +** mouse_hook(int button, int x,int y, void *param); +** loop_hook(void *param); +** +*/ + + +/* +** Usually asked... +*/ + +int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color, + char *string); +void *mlx_xpm_to_image(void *mlx_ptr, char **xpm_data, + int *width, int *height); +void *mlx_xpm_file_to_image(void *mlx_ptr, char *filename, + int *width, int *height); +int mlx_destroy_window(void *mlx_ptr, void *win_ptr); + +int mlx_destroy_image(void *mlx_ptr, void *img_ptr); + +/* +** generic hook system for all events, and minilibX functions that +** can be hooked. Some macro and defines from X11/X.h are needed here. +*/ + +int mlx_hook(void *win_ptr, int x_event, int x_mask, + int (*funct)(), void *param); + +int mlx_do_key_autorepeatoff(void *mlx_ptr); +int mlx_do_key_autorepeaton(void *mlx_ptr); +int mlx_do_sync(void *mlx_ptr); + +#endif /* MLX_H */ diff --git a/minilibx/mlx_clear_window.c b/minilibx/mlx_clear_window.c new file mode 100644 index 0000000..f621090 --- /dev/null +++ b/minilibx/mlx_clear_window.c @@ -0,0 +1,21 @@ +/* +** mlx_clear_window.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Thu Sep 7 19:46:15 2000 Charlie Root +** Last update Tue Sep 25 17:11:19 2001 Charlie Root +*/ + + + +#include "mlx_int.h" + + +int mlx_clear_window(t_xvar *xvar,t_win_list *win) +{ + XClearWindow(xvar->display,win->window); + if (xvar->do_flush) + XFlush(xvar->display); +} diff --git a/minilibx/mlx_destroy_image.c b/minilibx/mlx_destroy_image.c new file mode 100644 index 0000000..afd4d1a --- /dev/null +++ b/minilibx/mlx_destroy_image.c @@ -0,0 +1,31 @@ +/* +** mlx_destroy_image.c for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Tue Mar 12 10:25:15 2002 Charlie Root +** Last update Tue May 15 16:45:54 2007 Olivier Crouzet +*/ + + +#include "mlx_int.h" + + +int mlx_destroy_image(t_xvar *xvar, t_img *img) +{ + if (img->type == MLX_TYPE_SHM_PIXMAP || + img->type == MLX_TYPE_SHM) + { + XShmDetach(xvar->display, &(img->shm)); + shmdt(img->shm.shmaddr); + /* shmctl IPC_RMID already done */ + } + XDestroyImage(img->image); /* For image & shm-image. Also free img->data */ + XFreePixmap(xvar->display, img->pix); + if (img->gc) + XFreeGC(xvar->display, img->gc); + free(img); + if (xvar->do_flush) + XFlush(xvar->display); +} diff --git a/minilibx/mlx_destroy_window.c b/minilibx/mlx_destroy_window.c new file mode 100644 index 0000000..464790c --- /dev/null +++ b/minilibx/mlx_destroy_window.c @@ -0,0 +1,38 @@ +/* +** mlx_destroy_window.c for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Tue Mar 12 10:25:15 2002 Charlie Root +** Last update Tue May 15 16:46:08 2007 Olivier Crouzet +*/ + + +#include "mlx_int.h" + + +int mlx_destroy_window(t_xvar *xvar,t_win_list *win) +{ + t_win_list *w; + t_win_list *prev; + t_win_list first; + + first.next = xvar->win_list; + prev = &first; + w = prev->next; + while (w) + { + if (w==win) + prev->next = w->next; + else + prev = w; + w = w->next; + } + xvar->win_list = first.next; + XDestroyWindow(xvar->display,win->window); + XFreeGC(xvar->display,win->gc); + free(win); + if (xvar->do_flush) + XFlush(xvar->display); +} diff --git a/minilibx/mlx_expose_hook.c b/minilibx/mlx_expose_hook.c new file mode 100644 index 0000000..b00b675 --- /dev/null +++ b/minilibx/mlx_expose_hook.c @@ -0,0 +1,22 @@ +/* +** mlx_expose_hook.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Thu Aug 3 11:49:06 2000 Charlie Root +** Last update Fri Feb 23 17:07:42 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + + + +int mlx_expose_hook(t_win_list *win,int (*funct)(),void *param) +{ + win->hooks[Expose].hook = funct; + win->hooks[Expose].param = param; + win->hooks[Expose].mask = ExposureMask; +} diff --git a/minilibx/mlx_flush_event.c b/minilibx/mlx_flush_event.c new file mode 100644 index 0000000..1e586ad --- /dev/null +++ b/minilibx/mlx_flush_event.c @@ -0,0 +1,25 @@ +/* +** mlx_flush_event.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Wed Aug 2 18:58:11 2000 Charlie Root +** Last update Fri Feb 23 17:08:48 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + + + +int mlx_flush_event(t_xvar *xvar) +{ + XEvent ev; + + while (XPending(xvar->display)) + { + XNextEvent(xvar->display,&ev); + } +} diff --git a/minilibx/mlx_get_color_value.c b/minilibx/mlx_get_color_value.c new file mode 100644 index 0000000..b620970 --- /dev/null +++ b/minilibx/mlx_get_color_value.c @@ -0,0 +1,33 @@ +/* +** mlx_get_color_value.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Mon Jul 31 19:01:33 2000 Charlie Root +** Last update Thu Oct 4 15:04:13 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + +int mlx_get_color_value(t_xvar *xvar,int color) +{ + return(mlx_int_get_good_color(xvar,color)); +} + +int mlx_int_get_good_color(t_xvar *xvar,int color) +{ + XColor xc; + + if (xvar->depth>=24) + return (color); + xc.red = (color>>8)&0xFF00; + xc.green = color&0xFF00; + xc.blue = (color<<8)&0xFF00; + xc.pixel = ((xc.red>>(16-xvar->decrgb[1]))<decrgb[0])+ + ((xc.green>>(16-xvar->decrgb[3]))<decrgb[2])+ + ((xc.blue>>(16-xvar->decrgb[5]))<decrgb[4]); + return (xc.pixel); +} diff --git a/minilibx/mlx_get_data_addr.c b/minilibx/mlx_get_data_addr.c new file mode 100644 index 0000000..45e7a85 --- /dev/null +++ b/minilibx/mlx_get_data_addr.c @@ -0,0 +1,23 @@ +/* +** mlx_get_data_addr.c for MiniLibX in raytraceur +** +** Made by Charlie Root +** Login +** +** Started on Mon Aug 14 15:45:57 2000 Charlie Root +** Last update Thu Sep 27 19:05:25 2001 Charlie Root +*/ + + + +#include "mlx_int.h" + + +char *mlx_get_data_addr(t_img *img,int *bits_per_pixel, + int *size_line,int *endian) +{ + *bits_per_pixel = img->bpp; + *size_line = img->size_line; + *endian = img->image->byte_order; + return (img->data); +} diff --git a/minilibx/mlx_hook.c b/minilibx/mlx_hook.c new file mode 100644 index 0000000..98e509a --- /dev/null +++ b/minilibx/mlx_hook.c @@ -0,0 +1,40 @@ +/* +** mlx_hook.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Thu Aug 3 11:49:06 2000 Charlie Root +** Last update Fri Jan 28 17:05:28 2005 Olivier Crouzet +*/ + + +#include "mlx_int.h" + + + + +int mlx_hook(t_win_list *win, int x_event, int x_mask, + int (*funct)(),void *param) +{ + win->hooks[x_event].hook = funct; + win->hooks[x_event].param = param; + win->hooks[x_event].mask = x_mask; +} + + +int mlx_do_key_autorepeatoff(t_xvar *xvar) +{ + XAutoRepeatOff(xvar->display); +} + +int mlx_do_key_autorepeaton(t_xvar *xvar) +{ + XAutoRepeatOn(xvar->display); +} + + +int mlx_do_sync(t_xvar *xvar) +{ + XSync(xvar->display, False); +} diff --git a/minilibx/mlx_init.c b/minilibx/mlx_init.c new file mode 100644 index 0000000..7a8db8f --- /dev/null +++ b/minilibx/mlx_init.c @@ -0,0 +1,91 @@ +/* +** mlx_init.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Mon Jul 31 16:52:42 2000 Charlie Root +** Last update Fri Jan 28 17:05:09 2005 Olivier Crouzet +*/ + + +#include "mlx_int.h" + + + +void *mlx_init() +{ + t_xvar *xvar; + + if (!(xvar = malloc(sizeof(*xvar))) || (xvar->display = XOpenDisplay(""))==0) + return ((void *)0); + xvar->screen = DefaultScreen(xvar->display); + xvar->root = DefaultRootWindow(xvar->display); + xvar->cmap = DefaultColormap(xvar->display,xvar->screen); + xvar->depth = DefaultDepth(xvar->display,xvar->screen); + if (mlx_int_get_visual(xvar)==-1) + { + printf(ERR_NO_TRUECOLOR); + exit(1); + } + xvar->win_list = 0; + xvar->loop_hook = 0; + xvar->loop_param = (void *)0; + xvar->do_flush = 1; + mlx_int_deal_shm(xvar); + if (xvar->private_cmap) + xvar->cmap = XCreateColormap(xvar->display,xvar->root, + xvar->visual,AllocNone); + mlx_int_rgb_conversion(xvar); + return (xvar); +} + + +/* +** pshm_format of -1 : Not XYBitmap|XYPixmap|ZPixmap +** alpha libX need a check of the DISPLAY env var, or shm is allowed +** in remote Xserver connections. +*/ + +int mlx_int_deal_shm(t_xvar *xvar) +{ + int use_pshm; + int bidon; + char *dpy; + char buff[33]; + + xvar->use_xshm = XShmQueryVersion(xvar->display,&bidon,&bidon,&(use_pshm)); + if (xvar->use_xshm && use_pshm) + xvar->pshm_format = XShmPixmapFormat(xvar->display); + else + xvar->pshm_format = -1; + gethostname(buff,32); + dpy = getenv(ENV_DISPLAY); + if (dpy && strlen(dpy) && *dpy!=':' && strncmp(dpy,buff,strlen(buff)) && + strncmp(dpy,LOCALHOST,strlen(LOCALHOST)) ) + { + xvar->pshm_format = -1; + xvar->use_xshm = 0; + } +} + +/* +** TrueColor Visual is needed to have *_mask correctly set +*/ + +int mlx_int_rgb_conversion(t_xvar *xvar) +{ + bzero(xvar->decrgb,sizeof(int)*6); + while (!(xvar->visual->red_mask&1)) + { xvar->visual->red_mask >>= 1; xvar->decrgb[0] ++; } + while (xvar->visual->red_mask&1) + { xvar->visual->red_mask >>= 1; xvar->decrgb[1] ++; } + while (!(xvar->visual->green_mask&1)) + { xvar->visual->green_mask >>= 1; xvar->decrgb[2] ++; } + while (xvar->visual->green_mask&1) + { xvar->visual->green_mask >>= 1; xvar->decrgb[3] ++; } + while (!(xvar->visual->blue_mask&1)) + { xvar->visual->blue_mask >>= 1; xvar->decrgb[4] ++; } + while (xvar->visual->blue_mask&1) + { xvar->visual->blue_mask >>= 1; xvar->decrgb[5] ++; } +} diff --git a/minilibx/mlx_int.h b/minilibx/mlx_int.h new file mode 100644 index 0000000..8e712b5 --- /dev/null +++ b/minilibx/mlx_int.h @@ -0,0 +1,125 @@ +/* +** mlx_int.h for mlx in +** +** Made by Charlie Root +** Login +** +** Started on Mon Jul 31 16:45:48 2000 Charlie Root +** Last update Wed May 25 16:44:16 2011 Olivier Crouzet +*/ + + + +/* +** Internal settings for MiniLibX +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/* #include */ +#include + +#define MLX_TYPE_SHM_PIXMAP 3 +#define MLX_TYPE_SHM 2 +#define MLX_TYPE_XIMAGE 1 + +#define MLX_MAX_EVENT LASTEvent + + +#define ENV_DISPLAY "DISPLAY" +#define LOCALHOST "localhost" +#define ERR_NO_TRUECOLOR "MinilibX Error : No TrueColor Visual available.\n" +#define WARN_SHM_ATTACH "MinilibX Warning : X server can't attach shared memory.\n" + + +typedef struct s_xpm_col +{ + int name; + int col; +} t_xpm_col; + + +struct s_col_name +{ + char *name; + int color; +}; + +typedef struct s_event_list +{ + int mask; + int (*hook)(); + void *param; +} t_event_list; + + +typedef struct s_win_list +{ + Window window; + GC gc; + struct s_win_list *next; + int (*mouse_hook)(); + int (*key_hook)(); + int (*expose_hook)(); + void *mouse_param; + void *key_param; + void *expose_param; + t_event_list hooks[MLX_MAX_EVENT]; +} t_win_list; + + +typedef struct s_img +{ + XImage *image; + Pixmap pix; + GC gc; + int size_line; + int bpp; + int width; + int height; + int type; + int format; + char *data; + XShmSegmentInfo shm; +} t_img; + +typedef struct s_xvar +{ + Display *display; + Window root; + int screen; + int depth; + Visual *visual; + Colormap cmap; + int private_cmap; + t_win_list *win_list; + int (*loop_hook)(); + void *loop_param; + int use_xshm; + int pshm_format; + int do_flush; + int decrgb[6]; +} t_xvar; + + +int mlx_int_do_nothing(); +int mlx_int_get_good_color(); +int mlx_int_find_in_pcm(); +int mlx_int_anti_resize_win(); +int mlx_int_wait_first_expose(); +int mlx_int_rgb_conversion(); +int mlx_int_deal_shm(); +void *mlx_int_new_xshm_image(); +char **mlx_int_str_to_wordtab(); +void *mlx_new_image(); +int shm_att_pb(); diff --git a/minilibx/mlx_int_anti_resize_win.c b/minilibx/mlx_int_anti_resize_win.c new file mode 100644 index 0000000..2f20b44 --- /dev/null +++ b/minilibx/mlx_int_anti_resize_win.c @@ -0,0 +1,28 @@ +/* +** mlx_int_anti_resize_win.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Tue Aug 8 14:31:05 2000 Charlie Root +** Last update Tue Sep 25 15:56:58 2001 Charlie Root +*/ + +#include "mlx_int.h" + + +int mlx_int_anti_resize_win(t_xvar *xvar,Window win,int w,int h) +{ + XSizeHints hints; + long toto; + + XGetWMNormalHints(xvar->display,win,&hints,&toto); + hints.width = w; + hints.height = h; + hints.min_width = w; + hints.min_height = h; + hints.max_width = w; + hints.max_height = h; + hints.flags = PPosition | PSize | PMinSize | PMaxSize; + XSetWMNormalHints(xvar->display,win,&hints); +} diff --git a/minilibx/mlx_int_do_nothing.c b/minilibx/mlx_int_do_nothing.c new file mode 100644 index 0000000..49524e4 --- /dev/null +++ b/minilibx/mlx_int_do_nothing.c @@ -0,0 +1,16 @@ +/* +** mlx_int_do_nothing.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Tue Aug 8 12:58:24 2000 Charlie Root +** Last update Tue Sep 25 15:56:22 2001 Charlie Root +*/ + + + +int mlx_int_do_nothing(void *param) +{ + +} diff --git a/minilibx/mlx_int_get_visual.c b/minilibx/mlx_int_get_visual.c new file mode 100644 index 0000000..440a7ca --- /dev/null +++ b/minilibx/mlx_int_get_visual.c @@ -0,0 +1,39 @@ +/* +** mlx_int_get_visual.c for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Wed Oct 3 17:01:51 2001 Charlie Root +** Last update Thu Oct 4 15:00:45 2001 Charlie Root +*/ + + + +#include "mlx_int.h" + + +/* +** We need a private colormap for non-default Visual. +*/ + + +int mlx_int_get_visual(t_xvar *xvar) +{ + XVisualInfo *vi; + XVisualInfo template; + int nb_item; + + xvar->private_cmap = 0; + xvar->visual = DefaultVisual(xvar->display,xvar->screen); + if (xvar->visual->class == TrueColor) + return (0); + template.class = TrueColor; + template.depth = xvar->depth; + if (!(vi = XGetVisualInfo(xvar->display,VisualDepthMask|VisualClassMask, + &template,&nb_item)) ) + return (-1); + xvar->visual = vi->visual; + xvar->private_cmap = 1; + return (0); +} diff --git a/minilibx/mlx_int_param_event.c b/minilibx/mlx_int_param_event.c new file mode 100644 index 0000000..8756a22 --- /dev/null +++ b/minilibx/mlx_int_param_event.c @@ -0,0 +1,100 @@ +/* +** mlx_int_param_event.c for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Mon Jul 31 16:37:50 2000 Charlie Root +** Last update Wed Oct 6 13:14:52 2004 Olivier Crouzet +*/ + +#include "mlx_int.h" + +int mlx_int_param_undef() +{ +} + +int mlx_int_param_KeyPress(t_xvar *xvar, XEvent *ev, t_win_list *win) +{ + win->hooks[KeyPress].hook(XkbKeycodeToKeysym(xvar->display, + ev->xkey.keycode, 0, 0), + win->hooks[KeyPress].param); +} + +int mlx_int_param_KeyRelease(t_xvar *xvar, XEvent *ev, t_win_list *win) +{ + win->hooks[KeyRelease].hook(XkbKeycodeToKeysym(xvar->display, + ev->xkey.keycode, 0, 0), + win->hooks[KeyRelease].param); +} + +int mlx_int_param_ButtonPress(t_xvar *xvar, XEvent *ev, t_win_list *win) +{ + win->hooks[ButtonPress].hook(ev->xbutton.button,ev->xbutton.x,ev->xbutton.y, + win->hooks[ButtonPress].param); +} + +int mlx_int_param_ButtonRelease(t_xvar *xvar, XEvent *ev, t_win_list *win) +{ + win->hooks[ButtonRelease].hook(ev->xbutton.button, + ev->xbutton.x, ev->xbutton.y, + win->hooks[ButtonRelease].param); +} + +int mlx_int_param_MotionNotify(t_xvar *xvar, XEvent *ev, t_win_list *win) +{ + win->hooks[MotionNotify].hook(ev->xbutton.x,ev->xbutton.y, + win->hooks[MotionNotify].param); +} + +int mlx_int_param_Expose(t_xvar *xvar, XEvent *ev, t_win_list *win) +{ + if (!ev->xexpose.count) + win->hooks[Expose].hook(win->hooks[Expose].param); +} + + +int mlx_int_param_generic(t_xvar *xvar, XEvent *ev, t_win_list *win) +{ + win->hooks[ev->type].hook(win->hooks[ev->type].param); +} + +int (*(mlx_int_param_event[]))() = +{ + mlx_int_param_undef, /* 0 */ + mlx_int_param_undef, + mlx_int_param_KeyPress, + mlx_int_param_KeyRelease, /* 3 */ + mlx_int_param_ButtonPress, + mlx_int_param_ButtonRelease, + mlx_int_param_MotionNotify, /* 6 */ + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_Expose, /* 12 */ + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic, + mlx_int_param_generic +}; diff --git a/minilibx/mlx_int_set_win_event_mask.c b/minilibx/mlx_int_set_win_event_mask.c new file mode 100644 index 0000000..55650cd --- /dev/null +++ b/minilibx/mlx_int_set_win_event_mask.c @@ -0,0 +1,34 @@ +/* +** mlx_int_set_win_event_mask.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Thu Aug 3 11:49:06 2000 Charlie Root +** Last update Fri Feb 23 17:07:42 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + + + +int mlx_int_set_win_event_mask(t_xvar *xvar) +{ + t_win_list *win; + int mask; + int i; + XSetWindowAttributes xwa; + + win = xvar->win_list; + while (win) + { + xwa.event_mask = 0; + i = MLX_MAX_EVENT; + while (i--) + xwa.event_mask |= win->hooks[i].mask; + XChangeWindowAttributes(xvar->display, win->window, CWEventMask, &xwa); + win = win->next; + } +} diff --git a/minilibx/mlx_int_str_to_wordtab.c b/minilibx/mlx_int_str_to_wordtab.c new file mode 100644 index 0000000..7f92089 --- /dev/null +++ b/minilibx/mlx_int_str_to_wordtab.c @@ -0,0 +1,113 @@ +/* +** mlx_int_str_to_wordtab.c for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Wed Sep 13 11:36:09 2000 Charlie Root +** Last update Fri Dec 14 11:02:09 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + +int mlx_int_str_str(char *str,char *find,int len) +{ + int len_f; + int pos; + char *s; + char *f; + + len_f = strlen(find); + if (len_f>len) + return (-1); + pos = 0; + while (*(str+len_f-1)) + { + s = str; + f = find; + while (*(f++) == *(s++)) + if (!*f) + return (pos); + str ++; + pos ++; + } + return (-1); +} + + + +int mlx_int_str_str_cote(char *str,char *find,int len) +{ + int len_f; + int pos; + char *s; + char *f; + int cote; + + len_f = strlen(find); + if (len_f>len) + return (-1); + cote = 0; + pos = 0; + while (*(str+len_f-1)) + { + if (*str=='"') + cote = 1-cote; + if (!cote) + { + s = str; + f = find; + while (*(f++) == *(s++)) + if (!*f) + return (pos); + } + str ++; + pos ++; + } + return (-1); +} + + +char **mlx_int_str_to_wordtab(char *str) +{ + char **tab; + int pos; + int nb_word; + int len; + + len = strlen(str); + nb_word = 0; + pos = 0; + while (pos +** +** Started on Tue Oct 17 09:26:45 2000 olivier crouzet +** Last update Fri Feb 23 17:27:10 2001 Charlie Root +*/ + + + +#include "mlx_int.h" + + + +int mlx_int_wait_first_expose(t_xvar *xvar,Window win) +{ + XEvent ev; + + XWindowEvent(xvar->display,win,ExposureMask,&ev); + XPutBackEvent(xvar->display,&ev); +} diff --git a/minilibx/mlx_key_hook.c b/minilibx/mlx_key_hook.c new file mode 100644 index 0000000..eea6484 --- /dev/null +++ b/minilibx/mlx_key_hook.c @@ -0,0 +1,22 @@ +/* +** mlx_key_hook.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Thu Aug 3 11:49:06 2000 Charlie Root +** Last update Fri Feb 23 17:10:09 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + + + +int mlx_key_hook(t_win_list *win,int (*funct)(),void *param) +{ + win->hooks[KeyRelease].hook = funct; + win->hooks[KeyRelease].param = param; + win->hooks[KeyRelease].mask = KeyReleaseMask; +} diff --git a/minilibx/mlx_lib_xpm.c b/minilibx/mlx_lib_xpm.c new file mode 100644 index 0000000..b8cf184 --- /dev/null +++ b/minilibx/mlx_lib_xpm.c @@ -0,0 +1,96 @@ +/* +** mlx_xpm.c for minilibX in +** +** Made by Charlie Root +** Login +** +** Started on Fri Dec 8 11:07:24 2000 Charlie Root +** Last update Thu Oct 4 16:00:22 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + + + +void *mlx_int_xpm_f_image(t_xvar *xvar,int *width,int *height, + int (*xpm_func)(),void *param) +{ + XImage *img1; + XImage *img2; + t_img *im2; + XpmAttributes xpm_att; + + xpm_att.visual = xvar->visual; + xpm_att.colormap = xvar->cmap; + xpm_att.depth = xvar->depth; + xpm_att.bitmap_format = ZPixmap; + xpm_att.valuemask = XpmDepth|XpmBitmapFormat|XpmVisual|XpmColormap; + if (xpm_func(xvar->display,param,&img1,&img2,&xpm_att)) + return ((void *)0); + if (img2) + XDestroyImage(img2); + + if (!(im2 = (void *)mlx_new_image(xvar,img1->width,img1->height))) + { + XDestroyImage(img1); + return ((void *)0); + } + *width = img1->width; + *height = img1->height; + if (mlx_int_egal_img(im2->image,img1)) + { + bcopy(img1->data,im2->data,img1->height*img1->bytes_per_line); + XDestroyImage(img1); + return (im2); + } + if (im2->type==MLX_TYPE_SHM_PIXMAP) + { + XFreePixmap(xvar->display,im2->pix); + im2->pix = XCreatePixmap(xvar->display,xvar->root, + *width,*height,xvar->depth); + } + if (im2->type>MLX_TYPE_XIMAGE) + { + XShmDetach(xvar->display,&(im2->shm)); + shmdt(im2->data); + } + XDestroyImage(im2->image); + im2->image = img1; + im2->data = img1->data; + im2->type = MLX_TYPE_XIMAGE; + im2->size_line = img1->bytes_per_line; + im2->bpp = img1->bits_per_pixel; + return (im2); +} + + +int mlx_int_egal_img(XImage *img1,XImage *img2) +{ + if (img1->width!=img2->width || img1->height!=img2->height || + img1->xoffset!=img2->xoffset || img1->format!=img2->format || + img1->byte_order!=img2->byte_order || + img1->bitmap_unit!=img2->bitmap_unit || + img1->bitmap_bit_order!=img2->bitmap_bit_order || + img1->bitmap_pad!=img2->bitmap_pad || img1->depth!=img2->depth || + img1->bytes_per_line!=img2->bytes_per_line || + img1->bits_per_pixel!=img2->bits_per_pixel || + img1->red_mask!=img2->red_mask || img1->green_mask!=img2->green_mask || + img1->blue_mask!=img2->blue_mask ) + return (0); + return (1); +} + + +void *mlx_xpm_file_to_image(t_xvar *xvar,char *filename, + int *width,int *height) +{ + return (mlx_int_xpm_f_image(xvar,width,height,XpmReadFileToImage,filename)); +} + + +void *mlx_xpm_to_image(t_xvar *xvar,char **data,int *width,int *height) +{ + return (mlx_int_xpm_f_image(xvar,width,height,XpmCreateImageFromData,(void *)data)); +} diff --git a/minilibx/mlx_loop.c b/minilibx/mlx_loop.c new file mode 100644 index 0000000..74af0a5 --- /dev/null +++ b/minilibx/mlx_loop.c @@ -0,0 +1,38 @@ +/* +** mlx_loop.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Wed Aug 2 18:58:11 2000 Charlie Root +** Last update Fri Sep 30 14:47:41 2005 Olivier Crouzet +*/ + + +#include "mlx_int.h" + +extern int (*(mlx_int_param_event[]))(); + + +int mlx_loop(t_xvar *xvar) +{ + XEvent ev; + t_win_list *win; + + mlx_int_set_win_event_mask(xvar); + xvar->do_flush = 0; + while (42) + { + while (!xvar->loop_hook || XPending(xvar->display)) + { + XNextEvent(xvar->display,&ev); + win = xvar->win_list; + while (win && (win->window!=ev.xany.window)) + win = win->next; + if (win && ev.type < MLX_MAX_EVENT) + if (win->hooks[ev.type].hook) + mlx_int_param_event[ev.type](xvar, &ev, win); + } + xvar->loop_hook(xvar->loop_param); + } +} diff --git a/minilibx/mlx_loop_hook.c b/minilibx/mlx_loop_hook.c new file mode 100644 index 0000000..1f8b9ed --- /dev/null +++ b/minilibx/mlx_loop_hook.c @@ -0,0 +1,21 @@ +/* +** mlx_loop_hook.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Thu Aug 3 11:49:06 2000 Charlie Root +** Last update Fri Feb 23 17:11:39 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + + + +int mlx_loop_hook(t_xvar *xvar,int (*funct)(),void *param) +{ + xvar->loop_hook = funct; + xvar->loop_param = param; +} diff --git a/minilibx/mlx_mouse_hook.c b/minilibx/mlx_mouse_hook.c new file mode 100644 index 0000000..cb567ab --- /dev/null +++ b/minilibx/mlx_mouse_hook.c @@ -0,0 +1,22 @@ +/* +** mlx_mouse_hook.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Thu Aug 3 11:49:06 2000 Charlie Root +** Last update Fri Feb 23 17:11:05 2001 Charlie Root +*/ + + +#include "mlx_int.h" + + + + +int mlx_mouse_hook(t_win_list *win,int (*funct)(),void *param) +{ + win->hooks[ButtonPress].hook = funct; + win->hooks[ButtonPress].param = param; + win->hooks[ButtonPress].mask = ButtonPressMask; +} diff --git a/minilibx/mlx_new_image.c b/minilibx/mlx_new_image.c new file mode 100644 index 0000000..9967401 --- /dev/null +++ b/minilibx/mlx_new_image.c @@ -0,0 +1,155 @@ +/* +** mlx_new_image.c for MiniLibX in raytraceur +** +** Made by Charlie Root +** Login +** +** Started on Mon Aug 14 15:29:14 2000 Charlie Root +** Last update Wed May 25 16:46:31 2011 Olivier Crouzet +*/ + + + + +#include "mlx_int.h" + +/* +** To handle X errors +*/ + +#define X_ShmAttach 1 + +int mlx_X_error; + +int shm_att_pb(Display *d,XErrorEvent *ev) +{ + if (ev->request_code==146 && ev->minor_code==X_ShmAttach) + write(2,WARN_SHM_ATTACH,strlen(WARN_SHM_ATTACH)); + mlx_X_error = 1; +} + + +/* +** Data malloc : width+32 ( bitmap_pad=32 ), *4 = *32 / 8bit +*/ + + +void *mlx_int_new_xshm_image(t_xvar *xvar,int width,int height,int format) +{ + t_img *img; + int (*save_handler)(); + + if (!(img = malloc(sizeof(*img)))) + return ((void *)0); + bzero(img,sizeof(*img)); + img->data = 0; + img->image = XShmCreateImage(xvar->display,xvar->visual,xvar->depth, + format,img->data,&(img->shm),width,height); + if (!img->image) + { + free(img); + return ((void *)0); + } + img->width = width; + img->height = height; + img->size_line = img->image->bytes_per_line; + img->bpp = img->image->bits_per_pixel; + img->format = format; + img->shm.shmid = shmget(IPC_PRIVATE,(width+32)*height*4,IPC_CREAT|0777); + if (img->shm.shmid==-1) + { + XDestroyImage(img->image); + free(img); + return ((void *)0); + } + img->data = img->shm.shmaddr = img->image->data = shmat(img->shm.shmid,0,0); + if (img->data==(void *)-1) + { + shmctl(img->shm.shmid,IPC_RMID,0); + XDestroyImage(img->image); + free(img); + return ((void *)0); + } + img->shm.readOnly = False; + mlx_X_error = 0; + save_handler = XSetErrorHandler(shm_att_pb); + if (!XShmAttach(xvar->display,&(img->shm)) || + 0&XSync(xvar->display,False) || mlx_X_error) + { + XSetErrorHandler(save_handler); + shmdt(img->data); + shmctl(img->shm.shmid,IPC_RMID,0); + XDestroyImage(img->image); + free(img); + return ((void *)0); + } + XSetErrorHandler(save_handler); + shmctl(img->shm.shmid,IPC_RMID,0); + if (xvar->pshm_format==format) + { + img->pix = XShmCreatePixmap(xvar->display,xvar->root,img->shm.shmaddr, + &(img->shm),width,height,xvar->depth); + img->type = MLX_TYPE_SHM_PIXMAP; + } + else + { + img->pix = XCreatePixmap(xvar->display,xvar->root, + width,height,xvar->depth); + img->type = MLX_TYPE_SHM; + } + if (xvar->do_flush) + XFlush(xvar->display); + return (img); +} + + + +void *mlx_int_new_image(t_xvar *xvar,int width, int height,int format) +{ + t_img *img; + + if (!(img = malloc(sizeof(*img))) || + !(img->data = malloc((width+32)*height*4))) + return ((void *)0); + bzero(img->data,(width+32)*height*4); + img->image = XCreateImage(xvar->display,xvar->visual,xvar->depth,format,0, + img->data,width,height,32,0); + if (!img->image) + { + free(img->data); + free(img); + return ((void *)0); + } + img->gc = 0; + img->size_line = img->image->bytes_per_line; + img->bpp = img->image->bits_per_pixel; + img->width = width; + img->height = height; + img->pix = XCreatePixmap(xvar->display,xvar->root,width,height,xvar->depth); + img->format = format; + img->type = MLX_TYPE_XIMAGE; + if (xvar->do_flush) + XFlush(xvar->display); + return (img); +} + + +void *mlx_new_image(t_xvar *xvar,int width, int height) +{ + t_img *img; + + if (xvar->use_xshm) + if (img = mlx_int_new_xshm_image(xvar,width,height,ZPixmap)) + return (img); + return (mlx_int_new_image(xvar,width,height,ZPixmap)); +} + +void *mlx_new_image2(t_xvar *xvar,int width, int height) +{ + t_img *img; + + if (xvar->use_xshm) + if (img = mlx_int_new_xshm_image(xvar,width,height,XYPixmap)) + return (img); + return (mlx_int_new_image(xvar,width,height,XYPixmap)); +} diff --git a/minilibx/mlx_new_window.c b/minilibx/mlx_new_window.c new file mode 100644 index 0000000..2399cdc --- /dev/null +++ b/minilibx/mlx_new_window.c @@ -0,0 +1,61 @@ +/* +** mlx_new_window.c for MiniLibX in +** +** Made by Charlie Root +** Login +** +** Started on Mon Jul 31 17:29:02 2000 Charlie Root +** Last update Thu Oct 4 15:44:43 2001 Charlie Root +*/ + + +/* +** We do not use White/BlackPixel macro, TrueColor Visual make sure +** 0 is black & -1 is white +** +** With mlx_int_wait_first_expose, no flush is needed. +*/ + +#include "mlx_int.h" + + +void *mlx_new_window(t_xvar *xvar,int size_x,int size_y,char *title) +{ + t_win_list *new_win; + XSetWindowAttributes xswa; + XGCValues xgcv; + + xswa.background_pixel = 0; + xswa.border_pixel = -1; + xswa.colormap = xvar->cmap; + /* + xswa.event_mask = ButtonPressMask | ButtonReleaseMask | ExposureMask | + KeyPressMask | KeyReleaseMask | StructureNotifyMask; + */ + /* xswa.event_mask = ExposureMask; */ + xswa.event_mask = 0xFFFFFF; /* all events */ + if (!(new_win = malloc(sizeof(*new_win)))) + return ((void *)0); + new_win->window = XCreateWindow(xvar->display,xvar->root,0,0,size_x,size_y, + 0,CopyFromParent,InputOutput,xvar->visual, + CWEventMask|CWBackPixel|CWBorderPixel| + CWColormap,&xswa); + mlx_int_anti_resize_win(xvar,new_win->window,size_x,size_y); + XStoreName(xvar->display,new_win->window,title); + xgcv.foreground = -1; + xgcv.function = GXcopy; + xgcv.plane_mask = AllPlanes; + new_win->gc = XCreateGC(xvar->display,new_win->window, + GCFunction|GCPlaneMask|GCForeground,&xgcv); + new_win->next = xvar->win_list; + xvar->win_list = new_win; + /* + new_win->mouse_hook = mlx_int_do_nothing; + new_win->key_hook = mlx_int_do_nothing; + new_win->expose_hook = mlx_int_do_nothing; + */ + bzero(&(new_win->hooks), sizeof(new_win->hooks)); + XMapRaised(xvar->display,new_win->window); + mlx_int_wait_first_expose(xvar,new_win->window); + return (new_win); +} diff --git a/minilibx/mlx_pixel_put.c b/minilibx/mlx_pixel_put.c new file mode 100644 index 0000000..c411f36 --- /dev/null +++ b/minilibx/mlx_pixel_put.c @@ -0,0 +1,26 @@ +/* + ** mlx_pixel_put.c for MiniLibX in + ** + ** Made by Charlie Root + ** Login + ** + ** Started on Mon Jul 31 19:01:33 2000 Charlie Root +** Last update Tue Sep 25 17:09:49 2001 Charlie Root + */ + + +#include "mlx_int.h" + + + +int mlx_pixel_put(t_xvar *xvar,t_win_list *win, + int x,int y,int color) +{ + XGCValues xgcv; + + xgcv.foreground = mlx_int_get_good_color(xvar,color); + XChangeGC(xvar->display,win->gc,GCForeground,&xgcv); + XDrawPoint(xvar->display,win->window,win->gc,x,y); + if (xvar->do_flush) + XFlush(xvar->display); +} diff --git a/minilibx/mlx_put_image_to_window.c b/minilibx/mlx_put_image_to_window.c new file mode 100644 index 0000000..86ba3f4 --- /dev/null +++ b/minilibx/mlx_put_image_to_window.c @@ -0,0 +1,37 @@ +/* +** mlx_put_image_to_window.c for MiniLibX in raytraceur +** +** Made by Charlie Root +** Login +** +** Started on Mon Aug 14 15:55:49 2000 Charlie Root +** Last update Sun Oct 2 09:53:00 2005 Olivier Crouzet +*/ + + + +#include "mlx_int.h" + + +int mlx_put_image_to_window(t_xvar *xvar,t_win_list *win,t_img *img, + int x,int y) +{ + GC gc; + + gc = win->gc; + if (img->gc) + { + gc = img->gc; + XSetClipOrigin(xvar->display, gc, x, y); + } + if (img->type==MLX_TYPE_SHM) + XShmPutImage(xvar->display,img->pix, win->gc, img->image,0,0,0,0, + img->width,img->height,False); + if (img->type==MLX_TYPE_XIMAGE) + XPutImage(xvar->display,img->pix, win->gc, img->image,0,0,0,0, + img->width,img->height); + XCopyArea(xvar->display,img->pix,win->window, gc, + 0,0,img->width,img->height,x,y); + if (xvar->do_flush) + XFlush(xvar->display); +} diff --git a/minilibx/mlx_rgb.c b/minilibx/mlx_rgb.c new file mode 100644 index 0000000..0cfccf6 --- /dev/null +++ b/minilibx/mlx_rgb.c @@ -0,0 +1,764 @@ +/* +** This is a generated file with rgb2c.pl and rgb.txt from +** the XFree86 distribution. +*/ + +#include "mlx_int.h" + +struct s_col_name mlx_col_name[] = +{ + { "snow" , 0xfffafa }, + { "ghost white" , 0xf8f8ff }, + { "ghostwhite" , 0xf8f8ff }, + { "white smoke" , 0xf5f5f5 }, + { "whitesmoke" , 0xf5f5f5 }, + { "gainsboro" , 0xdcdcdc }, + { "floral white" , 0xfffaf0 }, + { "floralwhite" , 0xfffaf0 }, + { "old lace" , 0xfdf5e6 }, + { "oldlace" , 0xfdf5e6 }, + { "linen" , 0xfaf0e6 }, + { "antique white" , 0xfaebd7 }, + { "antiquewhite" , 0xfaebd7 }, + { "papaya whip" , 0xffefd5 }, + { "papayawhip" , 0xffefd5 }, + { "blanched almond" , 0xffebcd }, + { "blanchedalmond" , 0xffebcd }, + { "bisque" , 0xffe4c4 }, + { "peach puff" , 0xffdab9 }, + { "peachpuff" , 0xffdab9 }, + { "navajo white" , 0xffdead }, + { "navajowhite" , 0xffdead }, + { "moccasin" , 0xffe4b5 }, + { "cornsilk" , 0xfff8dc }, + { "ivory" , 0xfffff0 }, + { "lemon chiffon" , 0xfffacd }, + { "lemonchiffon" , 0xfffacd }, + { "seashell" , 0xfff5ee }, + { "honeydew" , 0xf0fff0 }, + { "mint cream" , 0xf5fffa }, + { "mintcream" , 0xf5fffa }, + { "azure" , 0xf0ffff }, + { "alice blue" , 0xf0f8ff }, + { "aliceblue" , 0xf0f8ff }, + { "lavender" , 0xe6e6fa }, + { "lavender blush" , 0xfff0f5 }, + { "lavenderblush" , 0xfff0f5 }, + { "misty rose" , 0xffe4e1 }, + { "mistyrose" , 0xffe4e1 }, + { "white" , 0xffffff }, + { "black" , 0x0 }, + { "dark slate" , 0x2f4f4f }, + { "darkslategray" , 0x2f4f4f }, + { "dark slate" , 0x2f4f4f }, + { "darkslategrey" , 0x2f4f4f }, + { "dim gray" , 0x696969 }, + { "dimgray" , 0x696969 }, + { "dim grey" , 0x696969 }, + { "dimgrey" , 0x696969 }, + { "slate gray" , 0x708090 }, + { "slategray" , 0x708090 }, + { "slate grey" , 0x708090 }, + { "slategrey" , 0x708090 }, + { "light slate" , 0x778899 }, + { "lightslategray" , 0x778899 }, + { "light slate" , 0x778899 }, + { "lightslategrey" , 0x778899 }, + { "gray" , 0xbebebe }, + { "grey" , 0xbebebe }, + { "light grey" , 0xd3d3d3 }, + { "lightgrey" , 0xd3d3d3 }, + { "light gray" , 0xd3d3d3 }, + { "lightgray" , 0xd3d3d3 }, + { "midnight blue" , 0x191970 }, + { "midnightblue" , 0x191970 }, + { "navy" , 0x80 }, + { "navy blue" , 0x80 }, + { "navyblue" , 0x80 }, + { "cornflower blue" , 0x6495ed }, + { "cornflowerblue" , 0x6495ed }, + { "dark slate" , 0x483d8b }, + { "darkslateblue" , 0x483d8b }, + { "slate blue" , 0x6a5acd }, + { "slateblue" , 0x6a5acd }, + { "medium slate" , 0x7b68ee }, + { "mediumslateblue" , 0x7b68ee }, + { "light slate" , 0x8470ff }, + { "lightslateblue" , 0x8470ff }, + { "medium blue" , 0xcd }, + { "mediumblue" , 0xcd }, + { "royal blue" , 0x4169e1 }, + { "royalblue" , 0x4169e1 }, + { "blue" , 0xff }, + { "dodger blue" , 0x1e90ff }, + { "dodgerblue" , 0x1e90ff }, + { "deep sky" , 0xbfff }, + { "deepskyblue" , 0xbfff }, + { "sky blue" , 0x87ceeb }, + { "skyblue" , 0x87ceeb }, + { "light sky" , 0x87cefa }, + { "lightskyblue" , 0x87cefa }, + { "steel blue" , 0x4682b4 }, + { "steelblue" , 0x4682b4 }, + { "light steel" , 0xb0c4de }, + { "lightsteelblue" , 0xb0c4de }, + { "light blue" , 0xadd8e6 }, + { "lightblue" , 0xadd8e6 }, + { "powder blue" , 0xb0e0e6 }, + { "powderblue" , 0xb0e0e6 }, + { "pale turquoise" , 0xafeeee }, + { "paleturquoise" , 0xafeeee }, + { "dark turquoise" , 0xced1 }, + { "darkturquoise" , 0xced1 }, + { "medium turquoise" , 0x48d1cc }, + { "mediumturquoise" , 0x48d1cc }, + { "turquoise" , 0x40e0d0 }, + { "cyan" , 0xffff }, + { "light cyan" , 0xe0ffff }, + { "lightcyan" , 0xe0ffff }, + { "cadet blue" , 0x5f9ea0 }, + { "cadetblue" , 0x5f9ea0 }, + { "medium aquamarine" , 0x66cdaa }, + { "mediumaquamarine" , 0x66cdaa }, + { "aquamarine" , 0x7fffd4 }, + { "dark green" , 0x6400 }, + { "darkgreen" , 0x6400 }, + { "dark olive" , 0x556b2f }, + { "darkolivegreen" , 0x556b2f }, + { "dark sea" , 0x8fbc8f }, + { "darkseagreen" , 0x8fbc8f }, + { "sea green" , 0x2e8b57 }, + { "seagreen" , 0x2e8b57 }, + { "medium sea" , 0x3cb371 }, + { "mediumseagreen" , 0x3cb371 }, + { "light sea" , 0x20b2aa }, + { "lightseagreen" , 0x20b2aa }, + { "pale green" , 0x98fb98 }, + { "palegreen" , 0x98fb98 }, + { "spring green" , 0xff7f }, + { "springgreen" , 0xff7f }, + { "lawn green" , 0x7cfc00 }, + { "lawngreen" , 0x7cfc00 }, + { "green" , 0xff00 }, + { "chartreuse" , 0x7fff00 }, + { "medium spring" , 0xfa9a }, + { "mediumspringgreen" , 0xfa9a }, + { "green yellow" , 0xadff2f }, + { "greenyellow" , 0xadff2f }, + { "lime green" , 0x32cd32 }, + { "limegreen" , 0x32cd32 }, + { "yellow green" , 0x9acd32 }, + { "yellowgreen" , 0x9acd32 }, + { "forest green" , 0x228b22 }, + { "forestgreen" , 0x228b22 }, + { "olive drab" , 0x6b8e23 }, + { "olivedrab" , 0x6b8e23 }, + { "dark khaki" , 0xbdb76b }, + { "darkkhaki" , 0xbdb76b }, + { "khaki" , 0xf0e68c }, + { "pale goldenrod" , 0xeee8aa }, + { "palegoldenrod" , 0xeee8aa }, + { "light goldenrod" , 0xfafad2 }, + { "lightgoldenrodyellow" , 0xfafad2 }, + { "light yellow" , 0xffffe0 }, + { "lightyellow" , 0xffffe0 }, + { "yellow" , 0xffff00 }, + { "gold" , 0xffd700 }, + { "light goldenrod" , 0xeedd82 }, + { "lightgoldenrod" , 0xeedd82 }, + { "goldenrod" , 0xdaa520 }, + { "dark goldenrod" , 0xb8860b }, + { "darkgoldenrod" , 0xb8860b }, + { "rosy brown" , 0xbc8f8f }, + { "rosybrown" , 0xbc8f8f }, + { "indian red" , 0xcd5c5c }, + { "indianred" , 0xcd5c5c }, + { "saddle brown" , 0x8b4513 }, + { "saddlebrown" , 0x8b4513 }, + { "sienna" , 0xa0522d }, + { "peru" , 0xcd853f }, + { "burlywood" , 0xdeb887 }, + { "beige" , 0xf5f5dc }, + { "wheat" , 0xf5deb3 }, + { "sandy brown" , 0xf4a460 }, + { "sandybrown" , 0xf4a460 }, + { "tan" , 0xd2b48c }, + { "chocolate" , 0xd2691e }, + { "firebrick" , 0xb22222 }, + { "brown" , 0xa52a2a }, + { "dark salmon" , 0xe9967a }, + { "darksalmon" , 0xe9967a }, + { "salmon" , 0xfa8072 }, + { "light salmon" , 0xffa07a }, + { "lightsalmon" , 0xffa07a }, + { "orange" , 0xffa500 }, + { "dark orange" , 0xff8c00 }, + { "darkorange" , 0xff8c00 }, + { "coral" , 0xff7f50 }, + { "light coral" , 0xf08080 }, + { "lightcoral" , 0xf08080 }, + { "tomato" , 0xff6347 }, + { "orange red" , 0xff4500 }, + { "orangered" , 0xff4500 }, + { "red" , 0xff0000 }, + { "hot pink" , 0xff69b4 }, + { "hotpink" , 0xff69b4 }, + { "deep pink" , 0xff1493 }, + { "deeppink" , 0xff1493 }, + { "pink" , 0xffc0cb }, + { "light pink" , 0xffb6c1 }, + { "lightpink" , 0xffb6c1 }, + { "pale violet" , 0xdb7093 }, + { "palevioletred" , 0xdb7093 }, + { "maroon" , 0xb03060 }, + { "medium violet" , 0xc71585 }, + { "mediumvioletred" , 0xc71585 }, + { "violet red" , 0xd02090 }, + { "violetred" , 0xd02090 }, + { "magenta" , 0xff00ff }, + { "violet" , 0xee82ee }, + { "plum" , 0xdda0dd }, + { "orchid" , 0xda70d6 }, + { "medium orchid" , 0xba55d3 }, + { "mediumorchid" , 0xba55d3 }, + { "dark orchid" , 0x9932cc }, + { "darkorchid" , 0x9932cc }, + { "dark violet" , 0x9400d3 }, + { "darkviolet" , 0x9400d3 }, + { "blue violet" , 0x8a2be2 }, + { "blueviolet" , 0x8a2be2 }, + { "purple" , 0xa020f0 }, + { "medium purple" , 0x9370db }, + { "mediumpurple" , 0x9370db }, + { "thistle" , 0xd8bfd8 }, + { "snow1" , 0xfffafa }, + { "snow2" , 0xeee9e9 }, + { "snow3" , 0xcdc9c9 }, + { "snow4" , 0x8b8989 }, + { "seashell1" , 0xfff5ee }, + { "seashell2" , 0xeee5de }, + { "seashell3" , 0xcdc5bf }, + { "seashell4" , 0x8b8682 }, + { "antiquewhite1" , 0xffefdb }, + { "antiquewhite2" , 0xeedfcc }, + { "antiquewhite3" , 0xcdc0b0 }, + { "antiquewhite4" , 0x8b8378 }, + { "bisque1" , 0xffe4c4 }, + { "bisque2" , 0xeed5b7 }, + { "bisque3" , 0xcdb79e }, + { "bisque4" , 0x8b7d6b }, + { "peachpuff1" , 0xffdab9 }, + { "peachpuff2" , 0xeecbad }, + { "peachpuff3" , 0xcdaf95 }, + { "peachpuff4" , 0x8b7765 }, + { "navajowhite1" , 0xffdead }, + { "navajowhite2" , 0xeecfa1 }, + { "navajowhite3" , 0xcdb38b }, + { "navajowhite4" , 0x8b795e }, + { "lemonchiffon1" , 0xfffacd }, + { "lemonchiffon2" , 0xeee9bf }, + { "lemonchiffon3" , 0xcdc9a5 }, + { "lemonchiffon4" , 0x8b8970 }, + { "cornsilk1" , 0xfff8dc }, + { "cornsilk2" , 0xeee8cd }, + { "cornsilk3" , 0xcdc8b1 }, + { "cornsilk4" , 0x8b8878 }, + { "ivory1" , 0xfffff0 }, + { "ivory2" , 0xeeeee0 }, + { "ivory3" , 0xcdcdc1 }, + { "ivory4" , 0x8b8b83 }, + { "honeydew1" , 0xf0fff0 }, + { "honeydew2" , 0xe0eee0 }, + { "honeydew3" , 0xc1cdc1 }, + { "honeydew4" , 0x838b83 }, + { "lavenderblush1" , 0xfff0f5 }, + { "lavenderblush2" , 0xeee0e5 }, + { "lavenderblush3" , 0xcdc1c5 }, + { "lavenderblush4" , 0x8b8386 }, + { "mistyrose1" , 0xffe4e1 }, + { "mistyrose2" , 0xeed5d2 }, + { "mistyrose3" , 0xcdb7b5 }, + { "mistyrose4" , 0x8b7d7b }, + { "azure1" , 0xf0ffff }, + { "azure2" , 0xe0eeee }, + { "azure3" , 0xc1cdcd }, + { "azure4" , 0x838b8b }, + { "slateblue1" , 0x836fff }, + { "slateblue2" , 0x7a67ee }, + { "slateblue3" , 0x6959cd }, + { "slateblue4" , 0x473c8b }, + { "royalblue1" , 0x4876ff }, + { "royalblue2" , 0x436eee }, + { "royalblue3" , 0x3a5fcd }, + { "royalblue4" , 0x27408b }, + { "blue1" , 0xff }, + { "blue2" , 0xee }, + { "blue3" , 0xcd }, + { "blue4" , 0x8b }, + { "dodgerblue1" , 0x1e90ff }, + { "dodgerblue2" , 0x1c86ee }, + { "dodgerblue3" , 0x1874cd }, + { "dodgerblue4" , 0x104e8b }, + { "steelblue1" , 0x63b8ff }, + { "steelblue2" , 0x5cacee }, + { "steelblue3" , 0x4f94cd }, + { "steelblue4" , 0x36648b }, + { "deepskyblue1" , 0xbfff }, + { "deepskyblue2" , 0xb2ee }, + { "deepskyblue3" , 0x9acd }, + { "deepskyblue4" , 0x688b }, + { "skyblue1" , 0x87ceff }, + { "skyblue2" , 0x7ec0ee }, + { "skyblue3" , 0x6ca6cd }, + { "skyblue4" , 0x4a708b }, + { "lightskyblue1" , 0xb0e2ff }, + { "lightskyblue2" , 0xa4d3ee }, + { "lightskyblue3" , 0x8db6cd }, + { "lightskyblue4" , 0x607b8b }, + { "slategray1" , 0xc6e2ff }, + { "slategray2" , 0xb9d3ee }, + { "slategray3" , 0x9fb6cd }, + { "slategray4" , 0x6c7b8b }, + { "lightsteelblue1" , 0xcae1ff }, + { "lightsteelblue2" , 0xbcd2ee }, + { "lightsteelblue3" , 0xa2b5cd }, + { "lightsteelblue4" , 0x6e7b8b }, + { "lightblue1" , 0xbfefff }, + { "lightblue2" , 0xb2dfee }, + { "lightblue3" , 0x9ac0cd }, + { "lightblue4" , 0x68838b }, + { "lightcyan1" , 0xe0ffff }, + { "lightcyan2" , 0xd1eeee }, + { "lightcyan3" , 0xb4cdcd }, + { "lightcyan4" , 0x7a8b8b }, + { "paleturquoise1" , 0xbbffff }, + { "paleturquoise2" , 0xaeeeee }, + { "paleturquoise3" , 0x96cdcd }, + { "paleturquoise4" , 0x668b8b }, + { "cadetblue1" , 0x98f5ff }, + { "cadetblue2" , 0x8ee5ee }, + { "cadetblue3" , 0x7ac5cd }, + { "cadetblue4" , 0x53868b }, + { "turquoise1" , 0xf5ff }, + { "turquoise2" , 0xe5ee }, + { "turquoise3" , 0xc5cd }, + { "turquoise4" , 0x868b }, + { "cyan1" , 0xffff }, + { "cyan2" , 0xeeee }, + { "cyan3" , 0xcdcd }, + { "cyan4" , 0x8b8b }, + { "darkslategray1" , 0x97ffff }, + { "darkslategray2" , 0x8deeee }, + { "darkslategray3" , 0x79cdcd }, + { "darkslategray4" , 0x528b8b }, + { "aquamarine1" , 0x7fffd4 }, + { "aquamarine2" , 0x76eec6 }, + { "aquamarine3" , 0x66cdaa }, + { "aquamarine4" , 0x458b74 }, + { "darkseagreen1" , 0xc1ffc1 }, + { "darkseagreen2" , 0xb4eeb4 }, + { "darkseagreen3" , 0x9bcd9b }, + { "darkseagreen4" , 0x698b69 }, + { "seagreen1" , 0x54ff9f }, + { "seagreen2" , 0x4eee94 }, + { "seagreen3" , 0x43cd80 }, + { "seagreen4" , 0x2e8b57 }, + { "palegreen1" , 0x9aff9a }, + { "palegreen2" , 0x90ee90 }, + { "palegreen3" , 0x7ccd7c }, + { "palegreen4" , 0x548b54 }, + { "springgreen1" , 0xff7f }, + { "springgreen2" , 0xee76 }, + { "springgreen3" , 0xcd66 }, + { "springgreen4" , 0x8b45 }, + { "green1" , 0xff00 }, + { "green2" , 0xee00 }, + { "green3" , 0xcd00 }, + { "green4" , 0x8b00 }, + { "chartreuse1" , 0x7fff00 }, + { "chartreuse2" , 0x76ee00 }, + { "chartreuse3" , 0x66cd00 }, + { "chartreuse4" , 0x458b00 }, + { "olivedrab1" , 0xc0ff3e }, + { "olivedrab2" , 0xb3ee3a }, + { "olivedrab3" , 0x9acd32 }, + { "olivedrab4" , 0x698b22 }, + { "darkolivegreen1" , 0xcaff70 }, + { "darkolivegreen2" , 0xbcee68 }, + { "darkolivegreen3" , 0xa2cd5a }, + { "darkolivegreen4" , 0x6e8b3d }, + { "khaki1" , 0xfff68f }, + { "khaki2" , 0xeee685 }, + { "khaki3" , 0xcdc673 }, + { "khaki4" , 0x8b864e }, + { "lightgoldenrod1" , 0xffec8b }, + { "lightgoldenrod2" , 0xeedc82 }, + { "lightgoldenrod3" , 0xcdbe70 }, + { "lightgoldenrod4" , 0x8b814c }, + { "lightyellow1" , 0xffffe0 }, + { "lightyellow2" , 0xeeeed1 }, + { "lightyellow3" , 0xcdcdb4 }, + { "lightyellow4" , 0x8b8b7a }, + { "yellow1" , 0xffff00 }, + { "yellow2" , 0xeeee00 }, + { "yellow3" , 0xcdcd00 }, + { "yellow4" , 0x8b8b00 }, + { "gold1" , 0xffd700 }, + { "gold2" , 0xeec900 }, + { "gold3" , 0xcdad00 }, + { "gold4" , 0x8b7500 }, + { "goldenrod1" , 0xffc125 }, + { "goldenrod2" , 0xeeb422 }, + { "goldenrod3" , 0xcd9b1d }, + { "goldenrod4" , 0x8b6914 }, + { "darkgoldenrod1" , 0xffb90f }, + { "darkgoldenrod2" , 0xeead0e }, + { "darkgoldenrod3" , 0xcd950c }, + { "darkgoldenrod4" , 0x8b6508 }, + { "rosybrown1" , 0xffc1c1 }, + { "rosybrown2" , 0xeeb4b4 }, + { "rosybrown3" , 0xcd9b9b }, + { "rosybrown4" , 0x8b6969 }, + { "indianred1" , 0xff6a6a }, + { "indianred2" , 0xee6363 }, + { "indianred3" , 0xcd5555 }, + { "indianred4" , 0x8b3a3a }, + { "sienna1" , 0xff8247 }, + { "sienna2" , 0xee7942 }, + { "sienna3" , 0xcd6839 }, + { "sienna4" , 0x8b4726 }, + { "burlywood1" , 0xffd39b }, + { "burlywood2" , 0xeec591 }, + { "burlywood3" , 0xcdaa7d }, + { "burlywood4" , 0x8b7355 }, + { "wheat1" , 0xffe7ba }, + { "wheat2" , 0xeed8ae }, + { "wheat3" , 0xcdba96 }, + { "wheat4" , 0x8b7e66 }, + { "tan1" , 0xffa54f }, + { "tan2" , 0xee9a49 }, + { "tan3" , 0xcd853f }, + { "tan4" , 0x8b5a2b }, + { "chocolate1" , 0xff7f24 }, + { "chocolate2" , 0xee7621 }, + { "chocolate3" , 0xcd661d }, + { "chocolate4" , 0x8b4513 }, + { "firebrick1" , 0xff3030 }, + { "firebrick2" , 0xee2c2c }, + { "firebrick3" , 0xcd2626 }, + { "firebrick4" , 0x8b1a1a }, + { "brown1" , 0xff4040 }, + { "brown2" , 0xee3b3b }, + { "brown3" , 0xcd3333 }, + { "brown4" , 0x8b2323 }, + { "salmon1" , 0xff8c69 }, + { "salmon2" , 0xee8262 }, + { "salmon3" , 0xcd7054 }, + { "salmon4" , 0x8b4c39 }, + { "lightsalmon1" , 0xffa07a }, + { "lightsalmon2" , 0xee9572 }, + { "lightsalmon3" , 0xcd8162 }, + { "lightsalmon4" , 0x8b5742 }, + { "orange1" , 0xffa500 }, + { "orange2" , 0xee9a00 }, + { "orange3" , 0xcd8500 }, + { "orange4" , 0x8b5a00 }, + { "darkorange1" , 0xff7f00 }, + { "darkorange2" , 0xee7600 }, + { "darkorange3" , 0xcd6600 }, + { "darkorange4" , 0x8b4500 }, + { "coral1" , 0xff7256 }, + { "coral2" , 0xee6a50 }, + { "coral3" , 0xcd5b45 }, + { "coral4" , 0x8b3e2f }, + { "tomato1" , 0xff6347 }, + { "tomato2" , 0xee5c42 }, + { "tomato3" , 0xcd4f39 }, + { "tomato4" , 0x8b3626 }, + { "orangered1" , 0xff4500 }, + { "orangered2" , 0xee4000 }, + { "orangered3" , 0xcd3700 }, + { "orangered4" , 0x8b2500 }, + { "red1" , 0xff0000 }, + { "red2" , 0xee0000 }, + { "red3" , 0xcd0000 }, + { "red4" , 0x8b0000 }, + { "deeppink1" , 0xff1493 }, + { "deeppink2" , 0xee1289 }, + { "deeppink3" , 0xcd1076 }, + { "deeppink4" , 0x8b0a50 }, + { "hotpink1" , 0xff6eb4 }, + { "hotpink2" , 0xee6aa7 }, + { "hotpink3" , 0xcd6090 }, + { "hotpink4" , 0x8b3a62 }, + { "pink1" , 0xffb5c5 }, + { "pink2" , 0xeea9b8 }, + { "pink3" , 0xcd919e }, + { "pink4" , 0x8b636c }, + { "lightpink1" , 0xffaeb9 }, + { "lightpink2" , 0xeea2ad }, + { "lightpink3" , 0xcd8c95 }, + { "lightpink4" , 0x8b5f65 }, + { "palevioletred1" , 0xff82ab }, + { "palevioletred2" , 0xee799f }, + { "palevioletred3" , 0xcd6889 }, + { "palevioletred4" , 0x8b475d }, + { "maroon1" , 0xff34b3 }, + { "maroon2" , 0xee30a7 }, + { "maroon3" , 0xcd2990 }, + { "maroon4" , 0x8b1c62 }, + { "violetred1" , 0xff3e96 }, + { "violetred2" , 0xee3a8c }, + { "violetred3" , 0xcd3278 }, + { "violetred4" , 0x8b2252 }, + { "magenta1" , 0xff00ff }, + { "magenta2" , 0xee00ee }, + { "magenta3" , 0xcd00cd }, + { "magenta4" , 0x8b008b }, + { "orchid1" , 0xff83fa }, + { "orchid2" , 0xee7ae9 }, + { "orchid3" , 0xcd69c9 }, + { "orchid4" , 0x8b4789 }, + { "plum1" , 0xffbbff }, + { "plum2" , 0xeeaeee }, + { "plum3" , 0xcd96cd }, + { "plum4" , 0x8b668b }, + { "mediumorchid1" , 0xe066ff }, + { "mediumorchid2" , 0xd15fee }, + { "mediumorchid3" , 0xb452cd }, + { "mediumorchid4" , 0x7a378b }, + { "darkorchid1" , 0xbf3eff }, + { "darkorchid2" , 0xb23aee }, + { "darkorchid3" , 0x9a32cd }, + { "darkorchid4" , 0x68228b }, + { "purple1" , 0x9b30ff }, + { "purple2" , 0x912cee }, + { "purple3" , 0x7d26cd }, + { "purple4" , 0x551a8b }, + { "mediumpurple1" , 0xab82ff }, + { "mediumpurple2" , 0x9f79ee }, + { "mediumpurple3" , 0x8968cd }, + { "mediumpurple4" , 0x5d478b }, + { "thistle1" , 0xffe1ff }, + { "thistle2" , 0xeed2ee }, + { "thistle3" , 0xcdb5cd }, + { "thistle4" , 0x8b7b8b }, + { "gray0" , 0x0 }, + { "grey0" , 0x0 }, + { "gray1" , 0x30303 }, + { "grey1" , 0x30303 }, + { "gray2" , 0x50505 }, + { "grey2" , 0x50505 }, + { "gray3" , 0x80808 }, + { "grey3" , 0x80808 }, + { "gray4" , 0xa0a0a }, + { "grey4" , 0xa0a0a }, + { "gray5" , 0xd0d0d }, + { "grey5" , 0xd0d0d }, + { "gray6" , 0xf0f0f }, + { "grey6" , 0xf0f0f }, + { "gray7" , 0x121212 }, + { "grey7" , 0x121212 }, + { "gray8" , 0x141414 }, + { "grey8" , 0x141414 }, + { "gray9" , 0x171717 }, + { "grey9" , 0x171717 }, + { "gray10" , 0x1a1a1a }, + { "grey10" , 0x1a1a1a }, + { "gray11" , 0x1c1c1c }, + { "grey11" , 0x1c1c1c }, + { "gray12" , 0x1f1f1f }, + { "grey12" , 0x1f1f1f }, + { "gray13" , 0x212121 }, + { "grey13" , 0x212121 }, + { "gray14" , 0x242424 }, + { "grey14" , 0x242424 }, + { "gray15" , 0x262626 }, + { "grey15" , 0x262626 }, + { "gray16" , 0x292929 }, + { "grey16" , 0x292929 }, + { "gray17" , 0x2b2b2b }, + { "grey17" , 0x2b2b2b }, + { "gray18" , 0x2e2e2e }, + { "grey18" , 0x2e2e2e }, + { "gray19" , 0x303030 }, + { "grey19" , 0x303030 }, + { "gray20" , 0x333333 }, + { "grey20" , 0x333333 }, + { "gray21" , 0x363636 }, + { "grey21" , 0x363636 }, + { "gray22" , 0x383838 }, + { "grey22" , 0x383838 }, + { "gray23" , 0x3b3b3b }, + { "grey23" , 0x3b3b3b }, + { "gray24" , 0x3d3d3d }, + { "grey24" , 0x3d3d3d }, + { "gray25" , 0x404040 }, + { "grey25" , 0x404040 }, + { "gray26" , 0x424242 }, + { "grey26" , 0x424242 }, + { "gray27" , 0x454545 }, + { "grey27" , 0x454545 }, + { "gray28" , 0x474747 }, + { "grey28" , 0x474747 }, + { "gray29" , 0x4a4a4a }, + { "grey29" , 0x4a4a4a }, + { "gray30" , 0x4d4d4d }, + { "grey30" , 0x4d4d4d }, + { "gray31" , 0x4f4f4f }, + { "grey31" , 0x4f4f4f }, + { "gray32" , 0x525252 }, + { "grey32" , 0x525252 }, + { "gray33" , 0x545454 }, + { "grey33" , 0x545454 }, + { "gray34" , 0x575757 }, + { "grey34" , 0x575757 }, + { "gray35" , 0x595959 }, + { "grey35" , 0x595959 }, + { "gray36" , 0x5c5c5c }, + { "grey36" , 0x5c5c5c }, + { "gray37" , 0x5e5e5e }, + { "grey37" , 0x5e5e5e }, + { "gray38" , 0x616161 }, + { "grey38" , 0x616161 }, + { "gray39" , 0x636363 }, + { "grey39" , 0x636363 }, + { "gray40" , 0x666666 }, + { "grey40" , 0x666666 }, + { "gray41" , 0x696969 }, + { "grey41" , 0x696969 }, + { "gray42" , 0x6b6b6b }, + { "grey42" , 0x6b6b6b }, + { "gray43" , 0x6e6e6e }, + { "grey43" , 0x6e6e6e }, + { "gray44" , 0x707070 }, + { "grey44" , 0x707070 }, + { "gray45" , 0x737373 }, + { "grey45" , 0x737373 }, + { "gray46" , 0x757575 }, + { "grey46" , 0x757575 }, + { "gray47" , 0x787878 }, + { "grey47" , 0x787878 }, + { "gray48" , 0x7a7a7a }, + { "grey48" , 0x7a7a7a }, + { "gray49" , 0x7d7d7d }, + { "grey49" , 0x7d7d7d }, + { "gray50" , 0x7f7f7f }, + { "grey50" , 0x7f7f7f }, + { "gray51" , 0x828282 }, + { "grey51" , 0x828282 }, + { "gray52" , 0x858585 }, + { "grey52" , 0x858585 }, + { "gray53" , 0x878787 }, + { "grey53" , 0x878787 }, + { "gray54" , 0x8a8a8a }, + { "grey54" , 0x8a8a8a }, + { "gray55" , 0x8c8c8c }, + { "grey55" , 0x8c8c8c }, + { "gray56" , 0x8f8f8f }, + { "grey56" , 0x8f8f8f }, + { "gray57" , 0x919191 }, + { "grey57" , 0x919191 }, + { "gray58" , 0x949494 }, + { "grey58" , 0x949494 }, + { "gray59" , 0x969696 }, + { "grey59" , 0x969696 }, + { "gray60" , 0x999999 }, + { "grey60" , 0x999999 }, + { "gray61" , 0x9c9c9c }, + { "grey61" , 0x9c9c9c }, + { "gray62" , 0x9e9e9e }, + { "grey62" , 0x9e9e9e }, + { "gray63" , 0xa1a1a1 }, + { "grey63" , 0xa1a1a1 }, + { "gray64" , 0xa3a3a3 }, + { "grey64" , 0xa3a3a3 }, + { "gray65" , 0xa6a6a6 }, + { "grey65" , 0xa6a6a6 }, + { "gray66" , 0xa8a8a8 }, + { "grey66" , 0xa8a8a8 }, + { "gray67" , 0xababab }, + { "grey67" , 0xababab }, + { "gray68" , 0xadadad }, + { "grey68" , 0xadadad }, + { "gray69" , 0xb0b0b0 }, + { "grey69" , 0xb0b0b0 }, + { "gray70" , 0xb3b3b3 }, + { "grey70" , 0xb3b3b3 }, + { "gray71" , 0xb5b5b5 }, + { "grey71" , 0xb5b5b5 }, + { "gray72" , 0xb8b8b8 }, + { "grey72" , 0xb8b8b8 }, + { "gray73" , 0xbababa }, + { "grey73" , 0xbababa }, + { "gray74" , 0xbdbdbd }, + { "grey74" , 0xbdbdbd }, + { "gray75" , 0xbfbfbf }, + { "grey75" , 0xbfbfbf }, + { "gray76" , 0xc2c2c2 }, + { "grey76" , 0xc2c2c2 }, + { "gray77" , 0xc4c4c4 }, + { "grey77" , 0xc4c4c4 }, + { "gray78" , 0xc7c7c7 }, + { "grey78" , 0xc7c7c7 }, + { "gray79" , 0xc9c9c9 }, + { "grey79" , 0xc9c9c9 }, + { "gray80" , 0xcccccc }, + { "grey80" , 0xcccccc }, + { "gray81" , 0xcfcfcf }, + { "grey81" , 0xcfcfcf }, + { "gray82" , 0xd1d1d1 }, + { "grey82" , 0xd1d1d1 }, + { "gray83" , 0xd4d4d4 }, + { "grey83" , 0xd4d4d4 }, + { "gray84" , 0xd6d6d6 }, + { "grey84" , 0xd6d6d6 }, + { "gray85" , 0xd9d9d9 }, + { "grey85" , 0xd9d9d9 }, + { "gray86" , 0xdbdbdb }, + { "grey86" , 0xdbdbdb }, + { "gray87" , 0xdedede }, + { "grey87" , 0xdedede }, + { "gray88" , 0xe0e0e0 }, + { "grey88" , 0xe0e0e0 }, + { "gray89" , 0xe3e3e3 }, + { "grey89" , 0xe3e3e3 }, + { "gray90" , 0xe5e5e5 }, + { "grey90" , 0xe5e5e5 }, + { "gray91" , 0xe8e8e8 }, + { "grey91" , 0xe8e8e8 }, + { "gray92" , 0xebebeb }, + { "grey92" , 0xebebeb }, + { "gray93" , 0xededed }, + { "grey93" , 0xededed }, + { "gray94" , 0xf0f0f0 }, + { "grey94" , 0xf0f0f0 }, + { "gray95" , 0xf2f2f2 }, + { "grey95" , 0xf2f2f2 }, + { "gray96" , 0xf5f5f5 }, + { "grey96" , 0xf5f5f5 }, + { "gray97" , 0xf7f7f7 }, + { "grey97" , 0xf7f7f7 }, + { "gray98" , 0xfafafa }, + { "grey98" , 0xfafafa }, + { "gray99" , 0xfcfcfc }, + { "grey99" , 0xfcfcfc }, + { "gray100" , 0xffffff }, + { "grey100" , 0xffffff }, + { "dark grey" , 0xa9a9a9 }, + { "darkgrey" , 0xa9a9a9 }, + { "dark gray" , 0xa9a9a9 }, + { "darkgray" , 0xa9a9a9 }, + { "dark blue" , 0x8b }, + { "darkblue" , 0x8b }, + { "dark cyan" , 0x8b8b }, + { "darkcyan" , 0x8b8b }, + { "dark magenta" , 0x8b008b }, + { "darkmagenta" , 0x8b008b }, + { "dark red" , 0x8b0000 }, + { "darkred" , 0x8b0000 }, + { "light green" , 0x90ee90 }, + { "lightgreen" , 0x90ee90 }, + { "none", -1 }, + { 0, 0 } +}; diff --git a/minilibx/mlx_string_put.c b/minilibx/mlx_string_put.c new file mode 100644 index 0000000..8492a09 --- /dev/null +++ b/minilibx/mlx_string_put.c @@ -0,0 +1,26 @@ +/* + ** mlx_string_put.c for MiniLibX in + ** + ** Made by Charlie Root + ** Login + ** + ** Started on Mon Jul 31 19:01:33 2000 Charlie Root +** Last update Tue Sep 25 17:11:47 2001 Charlie Root + */ + + +#include "mlx_int.h" + + + +int mlx_string_put(t_xvar *xvar,t_win_list *win, + int x,int y,int color,char *string) +{ + XGCValues xgcv; + + xgcv.foreground = mlx_int_get_good_color(xvar,color); + XChangeGC(xvar->display,win->gc,GCForeground,&xgcv); + XDrawString(xvar->display,win->window,win->gc,x,y,string,strlen(string)); + if (xvar->do_flush) + XFlush(xvar->display); +} diff --git a/minilibx/mlx_xpm.c b/minilibx/mlx_xpm.c new file mode 100644 index 0000000..c3c0db8 --- /dev/null +++ b/minilibx/mlx_xpm.c @@ -0,0 +1,317 @@ +/* +** xpm-read.c for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Tue Dec 11 15:25:27 2001 olivier crouzet +** Last update Sat Oct 1 14:56:13 2005 Olivier Crouzet +*/ + + +#include "mlx_int.h" + +extern struct s_col_name mlx_col_name[]; + + +#define RETURN { if (colors) free(colors); if (tab) free(tab); \ + if (colors_direct) free(colors_direct); \ + if (img) {XDestroyImage(img->image); \ + XFreePixmap(xvar->display,img->pix);free(img);} \ + return ((void *)0);} + + + + +char *mlx_int_get_line(char *ptr,int *pos,int size) +{ + int pos2; + int pos3; + int pos4; + + if ((pos2 = mlx_int_str_str(ptr+*pos,"\"",size-*pos))==-1) + return ((char *)0); + if ((pos3 = mlx_int_str_str(ptr+*pos+pos2+1,"\"",size-*pos-pos2-1))==-1) + return ((char *)0); + *(ptr+*pos+pos2) = 0; + *(ptr+*pos+pos2+1+pos3) = 0; + pos4 = *pos+pos2+1; + *pos += pos2+pos3+2; + return (ptr+pos4); +} + + + +char *mlx_int_static_line(char **xpm_data,int *pos,int size) +{ + static char *copy = 0; + static int len = 0; + int len2; + char *str; + + str = xpm_data[(*pos)++]; + if ((len2 = strlen(str))>len) + { + if (copy) + free(copy); + if (!(copy = malloc(len2+1))) + return ((char *)0); + len = len2; + } + /* strcpy(copy,str); */ + strlcpy(copy, str, len2+1); + return (copy); +} + + +int mlx_int_get_col_name(char *str,int size) +{ + int result; + + result = 0; + while (size--) + result = (result<<8)+*(str++); + return (result); +} + +int mlx_int_get_text_rgb(char *name, char *end) +{ + int i; + char buff[64]; + + if (*name == '#') + return (strtol(name+1,0,16)); + if (end) + { + snprintf(buff, 64, "%s %s", name, end); + name = buff; + } + i = 0; + while (mlx_col_name[i].name) + { + if (!strcasecmp(mlx_col_name[i].name, name)) + return (mlx_col_name[i].color); + i ++; + } + return (0); +} + + +int mlx_int_xpm_set_pixel(t_img *img, char *data, int opp, int col, int x) +{ + int dec; + + dec = opp; + while (dec--) + { + if (img->image->byte_order) + *(data+x*opp+dec) = col&0xFF; + else + *(data+x*opp+opp-dec-1) = col&0xFF; + col >>= 8; + } +} + + +void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)()) +{ + int pos; + char *line; + char **tab; + char *data; + char *clip_data; + int nc; + int opp; + int cpp; + int col; + int rgb_col; + int col_name; + int method; + int x; + int i; + int j; + t_img *img; + t_xpm_col *colors; + int *colors_direct; + int width; + int height; + XImage *clip_img; + XGCValues xgcv; + Pixmap clip_pix; + + colors = 0; + colors_direct = 0; + img = 0; + tab = 0; + pos = 0; + if (!(line = f(info,&pos,info_size)) || + !(tab = mlx_int_str_to_wordtab(line)) || !(width = atoi(tab[0])) || + !(height = atoi(tab[1])) || !(nc = atoi(tab[2])) || + !(cpp = atoi(tab[3])) ) + RETURN; + free(tab); + tab = 0; + + method = 0; + if (cpp<=2) + { + method = 1; + if (!(colors_direct = malloc((cpp==2?65536:256)*sizeof(int)))) + RETURN; + } + else + if (!(colors = malloc(nc*sizeof(*colors)))) + RETURN; + + clip_data = 0; + + i = nc; + while (i--) + { + if (!(line = f(info,&pos,info_size)) || + !(tab = mlx_int_str_to_wordtab(line+cpp)) ) + RETURN; + j = 0; + while (tab[j] && strcmp(tab[j++],"c")); + + if (!tab[j]) + RETURN; + + if ((rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]))==-1) + { + if (!(clip_data = malloc(4*width*height)) || /* ok, nice size .. */ + !(clip_img = XCreateImage(xvar->display, xvar->visual, + 1, XYPixmap, 0, clip_data, + width, height, 8, (width+7)/8)) ) + RETURN; + memset(clip_data, 0xFF, 4*width*height); + } + + if (method) + colors_direct[mlx_int_get_col_name(line,cpp)] = + rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col; + else + { + colors[i].name = mlx_int_get_col_name(line,cpp); + colors[i].col = rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col; + } + free(tab); + } + + if (!(img = mlx_new_image(xvar,width,height))) + RETURN; + opp = img->bpp/8; + + + i = height; + data = img->data; + while (i--) + { + if (!(line = f(info,&pos,info_size))) + RETURN; + x = 0; + while (xsize_line; + } + if (clip_data) + { + if (!(clip_pix = XCreatePixmap(xvar->display, xvar->root, + width, height, 1)) ) + RETURN; + img->gc = XCreateGC(xvar->display, clip_pix, 0, &xgcv); + XPutImage(xvar->display, clip_pix, img->gc, clip_img, + 0, 0, 0, 0, width, height); + XFreeGC(xvar->display, img->gc); + xgcv.clip_mask = clip_pix; + xgcv.function = GXcopy; + xgcv.plane_mask = AllPlanes; + img->gc = XCreateGC(xvar->display, xvar->root, GCClipMask|GCFunction| + GCPlaneMask, &xgcv); + XSync(xvar->display, False); + XDestroyImage(clip_img); + } + if (colors) + free(colors); + if (colors_direct) + free(colors_direct); + return (img); +} + + +int mlx_int_file_get_rid_comment(char *ptr, int size) +{ + int com_begin; + int com_end; + + while ((com_begin = mlx_int_str_str_cote(ptr,"/*",size))!=-1) + { + com_end = mlx_int_str_str(ptr+com_begin+2,"*/",size-com_begin-2); + memset(ptr+com_begin,' ',com_end+4); + } + while ((com_begin = mlx_int_str_str_cote(ptr,"//",size))!=-1) + { + com_end = mlx_int_str_str(ptr+com_begin+2,"\n",size-com_begin-2); + memset(ptr+com_begin,' ',com_end+3); + } +} + + +void *mlx_xpm_file_to_image(t_xvar *xvar,char *file,int *width,int *height) +{ + int fd; + int size; + char *ptr; + t_img *img; + + fd = -1; + if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 || + (ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))== + (void *)MAP_FAILED) + { + if (fd>=0) + close(fd); + return ((void *)0); + } + mlx_int_file_get_rid_comment(ptr, size); + if (img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line)) + { + *width = img->width; + *height = img->height; + } + munmap(ptr,size); + close(fd); + return (img); +} + +void *mlx_xpm_to_image(t_xvar *xvar,char **xpm_data,int *width,int *height) +{ + t_img *img; + + if (img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line)) + { + *width = img->width; + *height = img->height; + } + return (img); +} diff --git a/minilibx/mlx_xpm.c.ok b/minilibx/mlx_xpm.c.ok new file mode 100644 index 0000000..225ea3c --- /dev/null +++ b/minilibx/mlx_xpm.c.ok @@ -0,0 +1,310 @@ +/* +** xpm-read.c for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Tue Dec 11 15:25:27 2001 olivier crouzet +** Last update Sat Oct 1 14:40:55 2005 Olivier Crouzet +*/ + + +#include "mlx_int.h" + +extern struct s_col_name mlx_col_name[]; + + +#define RETURN { if (colors) free(colors); if (tab) free(tab); \ + if (colors_direct) free(colors_direct); \ + if (img) {XDestroyImage(img->image); \ + XFreePixmap(xvar->display,img->pix);free(img);} \ + return ((void *)0);} + + + + +char *mlx_int_get_line(char *ptr,int *pos,int size) +{ + int pos2; + int pos3; + int pos4; + + if ((pos2 = mlx_int_str_str(ptr+*pos,"\"",size-*pos))==-1) + return ((char *)0); + if ((pos3 = mlx_int_str_str(ptr+*pos+pos2+1,"\"",size-*pos-pos2-1))==-1) + return ((char *)0); + *(ptr+*pos+pos2) = 0; + *(ptr+*pos+pos2+1+pos3) = 0; + pos4 = *pos+pos2+1; + *pos += pos2+pos3+2; + return (ptr+pos4); +} + + + +char *mlx_int_static_line(char **xpm_data,int *pos,int size) +{ + static char *copy = 0; + static int len = 0; + int len2; + char *str; + + str = xpm_data[(*pos)++]; + if ((len2 = strlen(str))>len) + { + if (copy) + free(copy); + if (!(copy = malloc(len2+1))) + return ((char *)0); + len = len2; + } + /* strcpy(copy,str); */ + strlcpy(copy, str, len2+1); + return (copy); +} + + +int mlx_int_get_col_name(char *str,int size) +{ + int result; + + result = 0; + while (size--) + result = (result<<8)+*(str++); + return (result); +} + +int mlx_int_get_text_rgb(char *name) +{ + int i; + + if (*name == '#') + return (strtol(name+1,0,16)); + i = 0; + while (mlx_col_name[i].name) + { + if (!strcasecmp(mlx_col_name[i].name, name)) + return (mlx_col_name[i].color); + i ++; + } + return (0); +} + + +int mlx_int_xpm_set_pixel(t_img *img, char *data, int opp, int col, int x) +{ + int dec; + + dec = opp; + while (dec--) + { + if (img->image->byte_order) + *(data+x*opp+dec) = col&0xFF; + else + *(data+x*opp+opp-dec-1) = col&0xFF; + col >>= 8; + } +} + + +void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)()) +{ + int pos; + char *line; + char **tab; + char *data; + char *clip_data; + int nc; + int opp; + int cpp; + int col; + int rgb_col; + int col_name; + int method; + int x; + int i; + int j; + t_img *img; + t_xpm_col *colors; + int *colors_direct; + int width; + int height; + XImage *clip_img; + XGCValues xgcv; + Pixmap clip_pix; + + colors = 0; + colors_direct = 0; + img = 0; + tab = 0; + pos = 0; + if (!(line = f(info,&pos,info_size)) || + !(tab = mlx_int_str_to_wordtab(line)) || !(width = atoi(tab[0])) || + !(height = atoi(tab[1])) || !(nc = atoi(tab[2])) || + !(cpp = atoi(tab[3])) ) + RETURN; + free(tab); + tab = 0; + + method = 0; + if (cpp<=2) + { + method = 1; + if (!(colors_direct = malloc((cpp==2?65536:256)*sizeof(int)))) + RETURN; + } + else + if (!(colors = malloc(nc*sizeof(*colors)))) + RETURN; + + clip_data = 0; + + i = nc; + while (i--) + { + if (!(line = f(info,&pos,info_size)) || + !(tab = mlx_int_str_to_wordtab(line+cpp)) ) + RETURN; + j = 0; + while (tab[j] && strcmp(tab[j++],"c")); + if (!tab[j]) + RETURN; + + if ((rgb_col = mlx_int_get_text_rgb(tab[j]))==-1) + { + if (!(clip_data = malloc(4*width*height)) || /* ok, nice size .. */ + !(clip_img = XCreateImage(xvar->display, xvar->visual, + 1, XYPixmap, 0, clip_data, + width, height, 8, (width+7)/8)) ) + RETURN; + memset(clip_data, 0xFF, 4*width*height); + } + + if (method) + colors_direct[mlx_int_get_col_name(line,cpp)] = + rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col; + else + { + colors[i].name = mlx_int_get_col_name(line,cpp); + colors[i].col = rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col; + } + free(tab); + } + + if (!(img = mlx_new_image(xvar,width,height))) + RETURN; + opp = img->bpp/8; + + + i = height; + data = img->data; + while (i--) + { + if (!(line = f(info,&pos,info_size))) + RETURN; + x = 0; + while (xsize_line; + } + if (clip_data) + { + if (!(clip_pix = XCreatePixmap(xvar->display, xvar->root, + width, height, 1)) ) + RETURN; + img->gc = XCreateGC(xvar->display, clip_pix, 0, &xgcv); + XPutImage(xvar->display, clip_pix, img->gc, clip_img, + 0, 0, 0, 0, width, height); + XFreeGC(xvar->display, img->gc); + xgcv.clip_mask = clip_pix; + xgcv.function = GXcopy; + xgcv.plane_mask = AllPlanes; + img->gc = XCreateGC(xvar->display, xvar->root, GCClipMask|GCFunction| + GCPlaneMask, &xgcv); + XSync(xvar->display, False); + XDestroyImage(clip_img); + } + if (colors) + free(colors); + if (colors_direct) + free(colors_direct); + return (img); +} + + +int mlx_int_file_get_rid_comment(char *ptr, int size) +{ + int com_begin; + int com_end; + + while ((com_begin = mlx_int_str_str_cote(ptr,"/*",size))!=-1) + { + com_end = mlx_int_str_str(ptr+com_begin+2,"*/",size-com_begin-2); + memset(ptr+com_begin,' ',com_end+4); + } + while ((com_begin = mlx_int_str_str_cote(ptr,"//",size))!=-1) + { + com_end = mlx_int_str_str(ptr+com_begin+2,"\n",size-com_begin-2); + memset(ptr+com_begin,' ',com_end+3); + } +} + + +void *mlx_xpm_file_to_image(t_xvar *xvar,char *file,int *width,int *height) +{ + int fd; + int size; + char *ptr; + t_img *img; + + fd = -1; + if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 || + (ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))== + (void *)MAP_FAILED) + { + if (fd>=0) + close(fd); + return ((void *)0); + } + mlx_int_file_get_rid_comment(ptr, size); + if (img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line)) + { + *width = img->width; + *height = img->height; + } + munmap(ptr,size); + close(fd); + return (img); +} + +void *mlx_xpm_to_image(t_xvar *xvar,char **xpm_data,int *width,int *height) +{ + t_img *img; + + if (img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line)) + { + *width = img->width; + *height = img->height; + } + return (img); +} diff --git a/minilibx/rgb2c.pl b/minilibx/rgb2c.pl new file mode 100755 index 0000000..9ef39a0 --- /dev/null +++ b/minilibx/rgb2c.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl +# +## rgb2c.pl for MiniLibX in /home/boulon/work/c/raytraceur/minilibx +## +## Made by Olivier Crouzet +## Login +## +## Started on Tue Oct 5 16:33:46 2004 Olivier Crouzet +## Last update Tue Oct 5 16:36:11 2004 Olivier Crouzet +## + + +# +# Generate a .c file with encoded colors, from the XFree86 rgb.txt file. +# + +open(RGB, "/usr/X11/lib/X11/rgb.txt"); + + +printf("/*\n** This is a generated file with rgb2c.pl and rgb.txt from\n"); +printf("** the XFree86 distribution.\n*/\n\n"); +printf("struct s_col_name mlx_col_name[] =\n{\n"); + +while () +{ + @tab = split; + if ($tab[0] ne "!") + { + $color = $tab[3]; + if ("$tab[4]" ne "") + { + $color = "$tab[3] $tab[4]"; + } + printf(" { \"%s\" , 0x%x },\n", $color, $tab[0]*65536+$tab[1]*256+$tab[2]); + } +} + +printf(" { 0, 0 }\n};\n"); diff --git a/minilibx/test/Makefile.gen b/minilibx/test/Makefile.gen new file mode 100644 index 0000000..2fcca89 --- /dev/null +++ b/minilibx/test/Makefile.gen @@ -0,0 +1,26 @@ +INC=/usr/include +HT=Linux +DOCP=do_cp + + + +INCLIB=$(INC)/../lib + +CC=gcc + +CFLAGS= -I$(INC) -O3 -I.. + +NAME= mlx-test +SRC = main.c +OBJ = $(SRC:.c=.o) + +all :$(NAME) + +$(NAME) :$(OBJ) + $(CC) -o $(NAME) $(OBJ) -L.. -lmlx -L$(INCLIB) -lXext -lX11 -lm -lbsd + +clean : + rm -f $(NAME) $(OBJ) *~ core *.core + + +re : clean all diff --git a/minilibx/test/Makefile.mk b/minilibx/test/Makefile.mk new file mode 100644 index 0000000..ca55cd3 --- /dev/null +++ b/minilibx/test/Makefile.mk @@ -0,0 +1,24 @@ + + +INC=%%%% + +INCLIB=$(INC)/../lib + +CC=gcc + +CFLAGS= -I$(INC) -O3 -I.. + +NAME= mlx-test +SRC = main.c +OBJ = $(SRC:.c=.o) + +all :$(NAME) + +$(NAME) :$(OBJ) + $(CC) -o $(NAME) $(OBJ) -L.. -lmlx -L$(INCLIB) -lXext -lX11 -lm -lbsd + +clean : + rm -f $(NAME) $(OBJ) *~ core *.core + + +re : clean all diff --git a/minilibx/test/main.c b/minilibx/test/main.c new file mode 100644 index 0000000..ea132b4 --- /dev/null +++ b/minilibx/test/main.c @@ -0,0 +1,284 @@ + +#include "mlx.h" +#include "mlx_int.h" + +#define WIN1_SX 242 +#define WIN1_SY 242 +#define IM1_SX 42 +#define IM1_SY 42 +#define IM3_SX 242 +#define IM3_SY 242 + +void *mlx; +void *win1; +void *win2; +void *win3; +void *im1; +void *im2; +void *im3; +void *im4; +int bpp1; +int bpp2; +int bpp3; +int bpp4; +int sl1; +int sl2; +int sl3; +int sl4; +int endian1; +int endian2; +int endian3; +int endian4; +char *data1; +char *data2; +char *data3; +char *data4; +int xpm1_x; +int xpm1_y; + +int local_endian; + +int expose_win1(void *p) +{ + mlx_put_image_to_window(mlx,win1,im3,0,0); +} + +int expose_win2(void *p) +{ + mlx_put_image_to_window(mlx,win2,im4,0,0); + mlx_put_image_to_window(mlx,win2,im2,0,0); +} + +int key_win1(int key,void *p) +{ + printf("Key in Win1 : %d\n",key); + if (key==0xFF1B) + exit(0); +} + +int key_win2(int key,void *p) +{ + printf("Key in Win2 : %d\n",key); + if (key==0xFF1B) + exit(0); +} + +int key_win3(int key,void *p) +{ + printf("Key in Win3 : %d\n",key); + if (key==0xFF1B) + mlx_destroy_window(mlx,win3); +} + +int mouse_win1(int button,int x,int y, void *p) +{ + printf("Mouse in Win1, button %d at %dx%d.\n",button,x,y); +} + +int mouse_win2(int button,int x,int y, void *p) +{ + printf("Mouse in Win2, button %d at %dx%d.\n",button,x,y); +} + +int mouse_win3(int x,int y, void *p) +{ + printf("Mouse moving in Win3, at %dx%d.\n",x,y); +} + + +int main() +{ + int a; + + printf("MinilibX Test Program\n"); + a = 0x11223344; + if (((unsigned char *)&a)[0] == 0x11) + local_endian = 1; + else + local_endian = 0; + printf(" => Local Endian : %d\n",local_endian); + + printf(" => Connection ..."); + if (!(mlx = mlx_init())) + { + printf(" !! KO !!\n"); + exit(1); + } + printf("OK (use_xshm %d pshm_format %d)\n",((t_xvar *)mlx)->use_xshm,((t_xvar *)mlx)->pshm_format); + + printf(" => Window1 %dx%d \"Title 1\" ...",WIN1_SX,WIN1_SY); + if (!(win1 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title1"))) + { + printf(" !! KO !!\n"); + exit(1); + } + printf("OK\n"); + + printf(" => Colormap sans event ..."); + color_map_1(win1,WIN1_SX,WIN1_SY); + printf("OK\n"); + sleep(2); + + printf(" => Clear Window ..."); + mlx_clear_window(mlx,win1); + printf("OK\n"); + sleep(2); + + printf(" => Image1 ZPixmap %dx%d ...",IM1_SX,IM1_SY); + if (!(im1 = mlx_new_image(mlx,IM1_SX,IM1_SY))) + { + printf(" !! KO !!\n"); + exit(1); + } + data1 = mlx_get_data_addr(im1,&bpp1,&sl1,&endian1); + printf("OK (bpp1: %d, sizeline1: %d endian: %d type: %d)\n",bpp1,sl1,endian1, + ((t_img *)im1)->type); + + printf(" => Fill Image1 ..."); + color_map_2(data1,bpp1,sl1,IM1_SX,IM1_SY,endian1, 1); + printf("OK (pixmap : %d)\n",(int)((t_img *)im1)->pix); + + printf(" => Put Image1 ..."); + mlx_put_image_to_window(mlx,win1,im1,20,20); + printf("OK\n"); + sleep(2); + + printf(" => Destroy Image1 ... "); + mlx_destroy_image(mlx, im1); + printf("OK\n"); + sleep(2); + + printf(" => Image3 ZPixmap %dx%d ...",IM3_SX,IM3_SY); + if (!(im3 = mlx_new_image(mlx,IM3_SX,IM3_SY))) + { + printf(" !! KO !!\n"); + exit(1); + } + data3 = mlx_get_data_addr(im3,&bpp3,&sl3,&endian3); + printf("OK (bpp3 %d, sizeline3 %d endian3 %d type %d)\n",bpp3,sl3,endian3, + ((t_img *)im3)->type); + + printf(" => Fill Image3 ..."); + color_map_2(data3,bpp3,sl3,IM3_SX,IM3_SY,endian3, 1); + printf("OK (pixmap : %d)\n",(int)((t_img *)im3)->pix); + + printf(" => Put Image3 ..."); + mlx_put_image_to_window(mlx,win1,im3,20,20); + printf("OK\n"); + sleep(2); + + printf(" => String ..."); + mlx_string_put(mlx,win1,5,WIN1_SY/2,0xFF99FF,"String output"); + mlx_string_put(mlx,win1,15,WIN1_SY/2+20,0x00FFFF,"MinilibX test"); + printf("OK\n"); + sleep(2); + + printf(" => Xpm from file ..."); + if (!(im2 = mlx_xpm_file_to_image(mlx,"open.xpm",&xpm1_x,&xpm1_y))) + { + printf(" !! KO !!\n"); + exit(1); + } + data2 = mlx_get_data_addr(im2,&bpp2,&sl2,&endian2); + printf("OK (xpm %dx%d)(img bpp2: %d, sizeline2: %d endian: %d type: %d)\n", + xpm1_x,xpm1_y,bpp2,sl2,endian2,((t_img *)im2)->type); + sleep(2); + + printf(" => Put xpm ..."); + mlx_put_image_to_window(mlx,win1,im2,0,0); + mlx_put_image_to_window(mlx,win1,im2,100,100); + printf("OK\n"); + sleep(2); + + printf(" => 2nd window,"); + win2 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title2"); + if (!(im4 = mlx_new_image(mlx,IM3_SX, IM3_SY))) + { + printf(" !! KO !!\n"); + exit(1); + } + data4 = mlx_get_data_addr(im4,&bpp4,&sl4,&endian4); + color_map_2(data4,bpp4,sl4,IM3_SX,IM3_SY,endian4, 2); + + printf(" 3rd window, Installing hooks ..."); + win3 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title3"); + mlx_expose_hook(win1,expose_win1,0); + mlx_mouse_hook(win1,mouse_win1,0); + mlx_key_hook(win1,key_win1,0); + mlx_expose_hook(win2,expose_win2,0); + mlx_mouse_hook(win2,mouse_win2,0); + mlx_key_hook(win2,key_win2,0); + mlx_key_hook(win3,key_win3,0); + + mlx_hook(win3, MotionNotify, PointerMotionMask, mouse_win3, 0); + + printf("OK\nNow in Loop. Just play. Esc in 3 to destroy, 1&2 to quit.\n"); + + mlx_loop(mlx); +} + + +int color_map_1(void *win,int w,int h) +{ + int x; + int y; + int color; + + x = w; + while (x--) + { + y = h; + while (y--) + { + color = (x*255)/w+((((w-x)*255)/w)<<16)+(((y*255)/h)<<8); + mlx_pixel_put(mlx,win,x,y,color); + } + } +} + + +int color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type) +{ + int x; + int y; + int opp; + int dec; + int color; + int color2; + unsigned char *ptr; + + opp = bpp/8; + printf("(opp : %d) ",opp); + y = h; + while (y--) + { + ptr = data+y*sl; + x = w; + while (x--) + { + if (type==2) + color = (y*255)/w+((((w-x)*255)/w)<<16) + +(((y*255)/h)<<8); + else + color = (x*255)/w+((((w-x)*255)/w)<<16)+(((y*255)/h)<<8); + color2 = mlx_get_color_value(mlx,color); + dec = opp; + while (dec--) + if (endian==local_endian) + { + if (endian) + *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[4-opp+dec]; + else + *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[dec]; + } + else + { + if (endian) + *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[opp-1-dec]; + else + *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[3-dec]; + } + } + } + +} diff --git a/minilibx/test/new_win.c b/minilibx/test/new_win.c new file mode 100644 index 0000000..62bed4b --- /dev/null +++ b/minilibx/test/new_win.c @@ -0,0 +1,31 @@ + + + +#include "mlx.h" + + +void *mlx; +void *win1; +void *win2; + + + +int gere_mouse(int x,int y,int button,void*toto) +{ + printf("Mouse event - new win\n"); + mlx_destroy_window(mlx,win1); + win1 = mlx_new_window(mlx,random()%500,random()%500,"new win"); + mlx_mouse_hook(win1,gere_mouse,0); +} + + +int main() +{ + srandom(time(0)); + mlx = mlx_init(); + win1 = mlx_new_window(mlx,300,300,"win1"); + win2 = mlx_new_window(mlx,600,600,"win2"); + mlx_mouse_hook(win1,gere_mouse,0); + mlx_mouse_hook(win2,gere_mouse,0); + mlx_loop(mlx); +} diff --git a/minilibx/test/open.xpm b/minilibx/test/open.xpm new file mode 100644 index 0000000..87be371 --- /dev/null +++ b/minilibx/test/open.xpm @@ -0,0 +1,1439 @@ +/* XPM */ +static char * open30_2_xpm[] = { +"64 64 1372 2", +" c None", +". c #08090D", +"+ c #1A1E23", +"@ c #1F2124", +"# c #060809", +"$ c #1A1E21", +"% c #4F606C", +"& c #3D4145", +"* c #868D93", +"= c #454E56", +"- c #627481", +"; c #667C8A", +"> c #2D3031", +", c #D7E1E7", +"' c #4D5157", +") c #8997A5", +"! c #282E31", +"~ c #333B41", +"{ c #A5C6DB", +"] c #718C9B", +"^ c #000000", +"/ c #181B1F", +"( c #262828", +"_ c #D2DEE7", +": c #B8C5D0", +"< c #151719", +"[ c #08090B", +"} c #272B30", +"| c #2D3037", +"1 c #26282C", +"2 c #1A1D1F", +"3 c #B1CADB", +"4 c #56646E", +"5 c #080809", +"6 c #080A0C", +"7 c #1E2126", +"8 c #98B7C9", +"9 c #A2CAE2", +"0 c #7FA1B5", +"a c #06080A", +"b c #252729", +"c c #A7ADB2", +"d c #272B2E", +"e c #1E2023", +"f c #C8D8E5", +"g c #C9DDED", +"h c #8996A3", +"i c #6B7782", +"j c #C7DFF0", +"k c #CCE0F0", +"l c #AFC1CF", +"m c #47535B", +"n c #B0D3E8", +"o c #7E99A9", +"p c #738493", +"q c #97B4C7", +"r c #53606A", +"s c #6E8996", +"t c #A1CBE3", +"u c #9CC6DE", +"v c #90B5CB", +"w c #171D22", +"x c #1E2629", +"y c #020202", +"z c #ABB3BA", +"A c #BBC4C8", +"B c #222323", +"C c #141617", +"D c #5D6164", +"E c #ACB5BC", +"F c #676D74", +"G c #BDD4E5", +"H c #B3D1E7", +"I c #B0D1E7", +"J c #728A99", +"K c #94AEBF", +"L c #B1D1E7", +"M c #505C64", +"N c #7B98A9", +"O c #A1CBE0", +"P c #99C3D9", +"Q c #475863", +"R c #A0C9DE", +"S c #9CC6DA", +"T c #9ECAE1", +"U c #9CC5DD", +"V c #9AC4DC", +"W c #263137", +"X c #3C4A55", +"Y c #658190", +"Z c #66686B", +"` c #7D8085", +" . c #363839", +".. c #797E81", +"+. c #D2DBE1", +"@. c #DDE9F4", +"#. c #CADEEF", +"$. c #778593", +"%. c #AED0E5", +"&. c #9EC9DE", +"*. c #9EC8DF", +"=. c #9BC1D8", +"-. c #9EC8DE", +";. c #6B8596", +">. c #9BC5DC", +",. c #9BC6DF", +"'. c #9CC5DC", +"). c #688595", +"!. c #6B8698", +"~. c #9CC4DC", +"{. c #9BC4DC", +"]. c #9DC5DD", +"^. c #647D8C", +"/. c #485864", +"(. c #161A1D", +"_. c #36444C", +":. c #95BDD5", +"<. c #566E7E", +"[. c #A4AAAD", +"}. c #E9F2F7", +"|. c #DEEAF6", +"1. c #B5D4E9", +"2. c #A9CFE3", +"3. c #90B3C9", +"4. c #9FCAE1", +"5. c #9BC4DD", +"6. c #7490A2", +"7. c #99C2DB", +"8. c #81A5BA", +"9. c #9CC5DE", +"0. c #98C1DA", +"a. c #5F7889", +"b. c #96BFD8", +"c. c #44545F", +"d. c #565A5E", +"e. c #DFE6EC", +"f. c #E6EEF7", +"g. c #D6E4F2", +"h. c #BFD6E9", +"i. c #A9CCE3", +"j. c #9FC8DD", +"k. c #9DC6DD", +"l. c #9CC4DD", +"m. c #7D9FB0", +"n. c #98C0D6", +"o. c #9AC5DD", +"p. c #97BFD8", +"q. c #9BC5DF", +"r. c #2D3840", +"s. c #626567", +"t. c #E7ECF5", +"u. c #E1EAF5", +"v. c #CEE3F3", +"w. c #B7D6EA", +"x. c #A4CBE0", +"y. c #8AAFC5", +"z. c #647F90", +"A. c #648092", +"B. c #89B0C7", +"C. c #9CC6DF", +"D. c #5D7486", +"E. c #7B9BAF", +"F. c #84A8BF", +"G. c #9BC5DD", +"H. c #96BED5", +"I. c #4B5D69", +"J. c #9BC5DE", +"K. c #536B77", +"L. c #2E3B41", +"M. c #1B2124", +"N. c #3F4F58", +"O. c #4D5152", +"P. c #E7EEF3", +"Q. c #E2EAF5", +"R. c #CEE2F2", +"S. c #BAD5E9", +"T. c #9DC2D7", +"U. c #5C7281", +"V. c #232A31", +"W. c #08090A", +"X. c #121418", +"Y. c #131619", +"Z. c #131719", +"`. c #87ACC3", +" + c #7B9BAE", +".+ c #87ADC3", +"++ c #8FB5CB", +"@+ c #678295", +"#+ c #96C0D8", +"$+ c #607787", +"%+ c #6B8595", +"&+ c #96C1DB", +"*+ c #6A8595", +"=+ c #35424A", +"-+ c #7090A1", +";+ c #15191C", +">+ c #2D3033", +",+ c #DDE5EB", +"'+ c #D2E3F1", +")+ c #BAD7EB", +"!+ c #A9CFE5", +"~+ c #272F35", +"{+ c #1C2227", +"]+ c #4F697B", +"^+ c #6B8FA9", +"/+ c #759CB6", +"(+ c #7BA0BB", +"_+ c #80A5BC", +":+ c #88B0C8", +"<+ c #96C3DB", +"[+ c #8FB6CD", +"}+ c #80A1B3", +"|+ c #556876", +"1+ c #96BFD7", +"2+ c #566B77", +"3+ c #93B8CD", +"4+ c #637A8D", +"5+ c #9DC6DE", +"6+ c #8FB4CA", +"7+ c #55697A", +"8+ c #6F8F9F", +"9+ c #91BDD5", +"0+ c #283239", +"a+ c #050406", +"b+ c #767B80", +"c+ c #BDC6CE", +"d+ c #D4E5F3", +"e+ c #C1D7EA", +"f+ c #A7CDE4", +"g+ c #9FC9DE", +"h+ c #668596", +"i+ c #6D90AA", +"j+ c #5C7994", +"k+ c #60849F", +"l+ c #6286A1", +"m+ c #688CA8", +"n+ c #7298B2", +"o+ c #82A8C2", +"p+ c #8FBAD5", +"q+ c #96C2DB", +"r+ c #89ADC4", +"s+ c #96BED6", +"t+ c #99C2DA", +"u+ c #6C899A", +"v+ c #92BBD2", +"w+ c #9AC4DD", +"x+ c #5B717D", +"y+ c #9EC6DE", +"z+ c #8BB1C9", +"A+ c #718EA0", +"B+ c #94C3DB", +"C+ c #536B78", +"D+ c #3E505F", +"E+ c #4E6373", +"F+ c #2C333C", +"G+ c #070708", +"H+ c #040404", +"I+ c #1A1C1E", +"J+ c #202326", +"K+ c #050606", +"L+ c #23292E", +"M+ c #A1C0D4", +"N+ c #9FC9DD", +"O+ c #97C2DB", +"P+ c #80A8C1", +"Q+ c #668AA6", +"R+ c #4B5D72", +"S+ c #4C647A", +"T+ c #5F80A0", +"U+ c #60859E", +"V+ c #678AA6", +"W+ c #739BB5", +"X+ c #85AEC7", +"Y+ c #92BDD7", +"Z+ c #96BFD5", +"`+ c #627B8A", +" @ c #89B1C9", +".@ c #2B353C", +"+@ c #7597B2", +"@@ c #779CB8", +"#@ c #52697C", +"$@ c #1D2328", +"%@ c #445663", +"&@ c #5E7A8D", +"*@ c #252F37", +"=@ c #090909", +"-@ c #859BB2", +";@ c #859DB8", +">@ c #6E8396", +",@ c #252C33", +"'@ c #9CC4D7", +")@ c #92C0D9", +"!@ c #79A0BA", +"~@ c #6487A3", +"{@ c #566979", +"]@ c #8CB0C2", +"^@ c #51697C", +"/@ c #60849D", +"(@ c #6D8EAC", +"_@ c #7BA0BC", +":@ c #8AB4CE", +"<@ c #95C2DB", +"[@ c #9AC5DC", +"}@ c #95C1DA", +"|@ c #607B8C", +"1@ c #597488", +"2@ c #7EA6BF", +"3@ c #597587", +"4@ c #455664", +"5@ c #668598", +"6@ c #82A9C4", +"7@ c #617F92", +"8@ c #1A2328", +"9@ c #2B3137", +"0@ c #728FAC", +"a@ c #51657B", +"b@ c #6B8AA8", +"c@ c #8EAEC7", +"d@ c #A8C8E2", +"e@ c #92BDD6", +"f@ c #769DBA", +"g@ c #526E87", +"h@ c #7490A0", +"i@ c #A6CDE4", +"j@ c #97BFD4", +"k@ c #55697D", +"l@ c #6286A0", +"m@ c #7399B3", +"n@ c #84ACC5", +"o@ c #92BFD9", +"p@ c #99C4DC", +"q@ c #94C0DA", +"r@ c #4F6575", +"s@ c #7DA5BF", +"t@ c #7FA2BC", +"u@ c #8FB6CE", +"v@ c #95C3DB", +"w@ c #8EB8D2", +"x@ c #6A879D", +"y@ c #111318", +"z@ c #252A30", +"A@ c #81868C", +"B@ c #A5ABAD", +"C@ c #70767C", +"D@ c #38434F", +"E@ c #637F9B", +"F@ c #516980", +"G@ c #799AB5", +"H@ c #A5C3D9", +"I@ c #93BDD6", +"J@ c #779EBA", +"K@ c #445A6B", +"L@ c #93B5C9", +"M@ c #B6D3E8", +"N@ c #AECFE4", +"O@ c #95BDD2", +"P@ c #52687A", +"Q@ c #6486A3", +"R@ c #7092B0", +"S@ c #90BCD6", +"T@ c #97C4DC", +"U@ c #A0C9E0", +"V@ c #99C5DD", +"W@ c #86AEC6", +"X@ c #8FBAD4", +"Y@ c #91BDD6", +"Z@ c #7094AC", +"`@ c #2A353E", +" # c #0B0E10", +".# c #888D90", +"+# c #787D82", +"@# c #465360", +"## c #56697F", +"$# c #A6CADD", +"%# c #5A7382", +"&# c #6C8CAA", +"*# c #A5BED3", +"=# c #A7CAE0", +"-# c #94C1DA", +";# c #7EA4BF", +"># c #415160", +",# c #9DC3D5", +"'# c #B3CFE1", +")# c #AAC3D4", +"!# c #A8CDE4", +"~# c #89ACBE", +"{# c #567088", +"]# c #6C91AC", +"^# c #81A7C2", +"/# c #96C4DC", +"(# c #85A9BD", +"_# c #708C9B", +":# c #5A6E7B", +"<# c #6C8695", +"[# c #97C3DB", +"}# c #8BB5CE", +"|# c #425461", +"1# c #63819E", +"2# c #415465", +"3# c #0B0D0E", +"4# c #607387", +"5# c #687D8C", +"6# c #B8D6E9", +"7# c #7893A2", +"8# c #576F85", +"9# c #A7BACF", +"0# c #B0CEE5", +"a# c #98C4DC", +"b# c #88B1CA", +"c# c #36444E", +"d# c #8FA0AD", +"e# c #73818D", +"f# c #596D81", +"g# c #B4D0E4", +"h# c #A3CDE2", +"i# c #658296", +"j# c #6A8DAB", +"k# c #7BA5C0", +"l# c #94BAD2", +"m# c #6D899B", +"n# c #99C3DC", +"o# c #8EB9D2", +"p# c #7AA0BA", +"q# c #6C8FAB", +"r# c #6484A1", +"s# c #1F252C", +"t# c #121619", +"u# c #7E96B0", +"v# c #7A8A96", +"w# c #BCD7EA", +"x# c #A0C5D9", +"y# c #3C4B57", +"z# c #A9BACD", +"A# c #BCD5E8", +"B# c #84A6BA", +"C# c #8EA1AE", +"D# c #CFD1D4", +"E# c #ECF6FA", +"F# c #ABB7C2", +"G# c #556F84", +"H# c #57626A", +"I# c #5C7078", +"J# c #6C8AA7", +"K# c #80A6C0", +"L# c #91B8D0", +"M# c #94BFD8", +"N# c #87B0CA", +"O# c #7CA2BB", +"P# c #7097AF", +"Q# c #495E6F", +"R# c #0C0E11", +"S# c #3A3F43", +"T# c #8AA3BB", +"U# c #778592", +"V# c #C0D8EB", +"W# c #B3D5E9", +"X# c #404A53", +"Y# c #B2C2D3", +"Z# c #96A1AC", +"`# c #9DB2C3", +" $ c #AEBECE", +".$ c #EDEFF3", +"+$ c #F7FAFC", +"@$ c #B6BFC7", +"#$ c #556E85", +"$$ c #121314", +"%$ c #2B2E2F", +"&$ c #555A5E", +"*$ c #3B4C5B", +"=$ c #6F8EA4", +"-$ c #92BED8", +";$ c #9DC7DF", +">$ c #87ACC1", +",$ c #546A78", +"'$ c #516874", +")$ c #4E6570", +"!$ c #4D6271", +"~$ c #4C6271", +"{$ c #4E677A", +"]$ c #38454E", +"^$ c #6C7278", +"/$ c #86A1B6", +"($ c #5C656C", +"_$ c #A4B0BA", +":$ c #555D64", +"<$ c #657178", +"[$ c #A6B0B5", +"}$ c #939CA1", +"|$ c #D4E4F1", +"1$ c #A0BACE", +"2$ c #B9C7D7", +"3$ c #F6F7F9", +"4$ c #C6CED1", +"5$ c #506A7C", +"6$ c #060607", +"7$ c #676A6B", +"8$ c #91999F", +"9$ c #7CA3BE", +"0$ c #96BCD4", +"a$ c #5B717E", +"b$ c #4B5F6C", +"c$ c #455864", +"d$ c #5B717F", +"e$ c #81A5B9", +"f$ c #98C4DD", +"g$ c #93BFD8", +"h$ c #87B1CA", +"i$ c #7BA1BC", +"j$ c #5A7489", +"k$ c #222A33", +"l$ c #838A92", +"m$ c #9DADBC", +"n$ c #ECF0F5", +"o$ c #F1F9FB", +"p$ c #818A8D", +"q$ c #4A5155", +"r$ c #6A6F72", +"s$ c #7E898F", +"t$ c #E6F1F7", +"u$ c #CADCED", +"v$ c #A0B7CC", +"w$ c #C6D1DF", +"x$ c #AFB3B4", +"y$ c #5F707D", +"z$ c #CBCFD1", +"A$ c #F4F5F6", +"B$ c #66737F", +"C$ c #87B2CB", +"D$ c #90B7CD", +"E$ c #596E7B", +"F$ c #586F7E", +"G$ c #8BB0C8", +"H$ c #91BED6", +"I$ c #83ADC7", +"J$ c #6D8EA7", +"K$ c #3F5161", +"L$ c #2D3A45", +"M$ c #1F2020", +"N$ c #BDC5CC", +"O$ c #E0EDF5", +"P$ c #BBCAD8", +"Q$ c #E1E4E7", +"R$ c #5E6368", +"S$ c #5B5F62", +"T$ c #D9E7F3", +"U$ c #A4C3D6", +"V$ c #89A3B3", +"W$ c #7B91A1", +"X$ c #627990", +"Y$ c #42505A", +"Z$ c #CACCCE", +"`$ c #F9F9F9", +" % c #FDFDFD", +".% c #BCBEC0", +"+% c #5C7689", +"@% c #8DB9D3", +"#% c #8FB5CC", +"$% c #536471", +"%% c #98C1D9", +"&% c #91BED7", +"*% c #81AAC5", +"=% c #597386", +"-% c #41535F", +";% c #6486A2", +">% c #4D667D", +",% c #070809", +"'% c #44484E", +")% c #BEC8D0", +"!% c #8096A6", +"~% c #516473", +"{% c #A9ACAF", +"]% c #8B8F91", +"^% c #A8B3BD", +"/% c #C5DAEB", +"(% c #9FC8E1", +"_% c #8FBCD6", +":% c #81A8C2", +"<% c #6C90AC", +"[% c #56728C", +"}% c #585B5F", +"|% c #CBCDCD", +"1% c #C1C3C6", +"2% c #4F565F", +"3% c #82ABC3", +"4% c #93BCD3", +"5% c #95BED7", +"6% c #8EB9D3", +"7% c #5B788B", +"8% c #627E91", +"9% c #7FA7C1", +"0% c #6C91AB", +"a% c #546F87", +"b% c #6F7376", +"c% c #D5E2EF", +"d% c #A9C4D8", +"e% c #81A1BA", +"f% c #333940", +"g% c #5F6B76", +"h% c #C0D5E8", +"i% c #AACCE2", +"j% c #8EB8D3", +"k% c #7FA5BF", +"l% c #7095B0", +"m% c #4E697E", +"n% c #07090A", +"o% c #0D0F10", +"p% c #7193A6", +"q% c #96C3DC", +"r% c #8EBCD7", +"s% c #91BDD7", +"t% c #8FBBD6", +"u% c #7699AD", +"v% c #4D626F", +"w% c #252D33", +"x% c #101215", +"y% c #0C0D0E", +"z% c #0A0C0E", +"A% c #06090A", +"B% c #7F8488", +"C% c #D7E3F1", +"D% c #B6D0E4", +"E% c #A3C2D7", +"F% c #596872", +"G% c #A9BED0", +"H% c #B4D0E5", +"I% c #9EC8DC", +"J% c #8FB9D4", +"K% c #85ADC7", +"L% c #7FA4BE", +"M% c #4B606F", +"N% c #4E6372", +"O% c #89B6D0", +"P% c #92C1DA", +"Q% c #9DC7DD", +"R% c #95C0DA", +"S% c #94BED8", +"T% c #8BB8D1", +"U% c #7AA0B9", +"V% c #4E667A", +"W% c #344151", +"X% c #0C0D0F", +"Y% c #8A8F92", +"Z% c #D4E6F5", +"`% c #BCD5E9", +" & c #8599A5", +".& c #939DA6", +"+& c #C4DAEB", +"@& c #89A6B9", +"#& c #7D9FB5", +"$& c #98C3DC", +"%& c #95C0D9", +"&& c #7CA2B9", +"*& c #7697AE", +"=& c #698498", +"-& c #7394A8", +";& c #9EC7DF", +">& c #8DB1C4", +",& c #6B8594", +"'& c #50636C", +")& c #50626C", +"!& c #7F9FB1", +"~& c #93B8D0", +"{& c #627A88", +"]& c #90B6CC", +"^& c #93BDD7", +"/& c #87AFC9", +"(& c #7291A7", +"_& c #384651", +":& c #121618", +"<& c #12171B", +"[& c #4F6986", +"}& c #597998", +"|& c #324052", +"1& c #969CA1", +"2& c #D6E6F5", +"3& c #C6DCEE", +"4& c #505A64", +"5& c #82929F", +"6& c #99ABBB", +"7& c #A1B9CA", +"8& c #87A0B0", +"9& c #718EA1", +"0& c #8DB2C9", +"a& c #8BAEC4", +"b& c #586D7D", +"c& c #97C0D9", +"d& c #8DB3C9", +"e& c #95B8CD", +"f& c #9DC0D6", +"g& c #6F8B9C", +"h& c #354249", +"i& c #464E54", +"j& c #8A98A5", +"k& c #AABAC7", +"l& c #86939E", +"m& c #41494F", +"n& c #4A5861", +"o& c #97C1DA", +"p& c #5E7888", +"q& c #5C7482", +"r& c #88ACC2", +"s& c #91BFD7", +"t& c #799CB5", +"u& c #47596A", +"v& c #0D0F12", +"w& c #1A2127", +"x& c #56778D", +"y& c #688BA9", +"z& c #5D7F9E", +"A& c #547391", +"B& c #0E1013", +"C& c #9DA6AB", +"D& c #C8DCED", +"E& c #7A8996", +"F& c #B5CEE0", +"G& c #BCDBEC", +"H& c #B9D5EA", +"I& c #8BA2B2", +"J& c #6C8A9D", +"K& c #97BFD7", +"L& c #3E4E59", +"M& c #92B5CB", +"N& c #535F68", +"O& c #454F56", +"P& c #6F7C87", +"Q& c #ABC0D1", +"R& c #C7DCEE", +"S& c #C5DBED", +"T& c #C2D7EA", +"U& c #BFD8EA", +"V& c #BCD7EB", +"W& c #62717B", +"X& c #5B6F7B", +"Y& c #95C3DC", +"Z& c #8BB2C9", +"`& c #485761", +" * c #42525F", +".* c #6686A1", +"+* c #587896", +"@* c #1B2129", +"#* c #5C7A94", +"$* c #7DA2BD", +"%* c #84AEC7", +"&* c #749BB5", +"** c #5C7E9C", +"=* c #27343F", +"-* c #A4A9B2", +";* c #D9E7F4", +">* c #C8DBEC", +",* c #B1C8DA", +"'* c #5D6C76", +")* c #A8C5D8", +"!* c #A6BDD0", +"~* c #B9D6EA", +"{* c #B9D4E9", +"]* c #8198A8", +"^* c #8AADC3", +"/* c #8CB1CA", +"(* c #96C2D8", +"_* c #A3C7DF", +":* c #ADCDE3", +"<* c #ABD0E4", +"[* c #ADCFE3", +"}* c #AACEE4", +"|* c #A4CDE3", +"1* c #A1CBE1", +"2* c #A3CCE3", +"3* c #A2C9DF", +"4* c #41515A", +"5* c #81A2B5", +"6* c #94C0D7", +"7* c #5E7789", +"8* c #526777", +"9* c #516777", +"0* c #6B8CA5", +"a* c #759CBA", +"b* c #658AA5", +"c* c #587798", +"d* c #1B242B", +"e* c #0E1110", +"f* c #101214", +"g* c #202931", +"h* c #59758E", +"i* c #799FBB", +"j* c #84B1CA", +"k* c #86ACC6", +"l* c #354758", +"m* c #A0A6AE", +"n* c #DAE6F2", +"o* c #C4DCEE", +"p* c #B4D2E8", +"q* c #3E4A53", +"r* c #698091", +"s* c #5D7581", +"t* c #A3CAE0", +"u* c #A6CFE5", +"v* c #A5CCE5", +"w* c #718A9C", +"x* c #98C3DB", +"y* c #83ABC7", +"z* c #2E3B46", +"A* c #33414A", +"B* c #678398", +"C* c #8AB3CE", +"D* c #93BED7", +"E* c #97C4DB", +"F* c #42525E", +"G* c #88ACC0", +"H* c #789EB9", +"I* c #7A9FBB", +"J* c #7EA2BD", +"K* c #779DB5", +"L* c #577081", +"M* c #5B7B9B", +"N* c #1D2229", +"O* c #547390", +"P* c #54728D", +"Q* c #6082A0", +"R* c #688EA9", +"S* c #6689A7", +"T* c #6086A0", +"U* c #6285A1", +"V* c #6B8DAA", +"W* c #718FAB", +"X* c #3E5568", +"Y* c #969DA1", +"Z* c #DBE8F4", +"`* c #95ACBD", +" = c #758B9A", +".= c #A4C9DE", +"+= c #698190", +"@= c #667E8A", +"#= c #7D99AA", +"$= c #7B9BAD", +"%= c #6F8C9A", +"&= c #536976", +"*= c #84ADC6", +"== c #6D92AD", +"-= c #62829E", +";= c #43576A", +">= c #2F3B46", +",= c #5C788A", +"'= c #86AFC8", +")= c #93BED8", +"!= c #93BAD5", +"~= c #93BAD2", +"{= c #92BCD4", +"]= c #7EA2B6", +"^= c #3D4D56", +"/= c #485B67", +"(= c #7596A9", +"_= c #8CBBD4", +":= c #90BCD5", +"<= c #91BFD9", +"[= c #789BAD", +"}= c #465B6A", +"|= c #59789A", +"1= c #5D7F9D", +"2= c #5E839C", +"3= c #59799A", +"4= c #415569", +"5= c #2D3A46", +"6= c #2E3B49", +"7= c #4A647C", +"8= c #587690", +"9= c #39485A", +"0= c #7F8589", +"a= c #D9E8F5", +"b= c #CCDEEE", +"c= c #8597A5", +"d= c #B3D2E3", +"e= c #9BB3C4", +"f= c #B2CEE1", +"g= c #B2D1E7", +"h= c #ABCFE6", +"i= c #94B7CB", +"j= c #495C6A", +"k= c #688498", +"l= c #617B8A", +"m= c #85ADC8", +"n= c #78A0B9", +"o= c #62819B", +"p= c #2E3843", +"q= c #485A6C", +"r= c #67889C", +"s= c #8AB5CF", +"t= c #8EB9D1", +"u= c #6C899B", +"v= c #6E91A7", +"w= c #678399", +"x= c #6888A1", +"y= c #323E48", +"z= c #5B7585", +"A= c #98C5DD", +"B= c #83ACC1", +"C= c #2D373F", +"D= c #4B637C", +"E= c #567694", +"F= c #26313C", +"G= c #15191F", +"H= c #4D647A", +"I= c #252F39", +"J= c #5D6163", +"K= c #DDE9F5", +"L= c #CEDFEE", +"M= c #8898A5", +"N= c #B0CBDC", +"O= c #BFDAEC", +"P= c #BFDBEC", +"Q= c #BBDAEC", +"R= c #BAD7EA", +"S= c #6B808F", +"T= c #7297B0", +"U= c #8CB8D1", +"V= c #95C1D9", +"W= c #91BCD6", +"X= c #86AEC8", +"Y= c #7496B3", +"Z= c #6587A2", +"`= c #384958", +" - c #323F4B", +".- c #546A7C", +"+- c #6C88A1", +"@- c #779AB1", +"#- c #658297", +"$- c #3B4A58", +"%- c #33404B", +"&- c #202830", +"*- c #577287", +"=- c #86B1CC", +"-- c #86ACC0", +";- c #6E8797", +">- c #9CC7DF", +",- c #92BCD5", +"'- c #91BCD5", +")- c #8EB6CE", +"!- c #344453", +"~- c #263039", +"{- c #364452", +"]- c #2B3643", +"^- c #2A2D2E", +"/- c #E1EBF4", +"(- c #D2E4F3", +"_- c #A0B2C3", +":- c #8094A1", +"<- c #BAD8EB", +"[- c #B8D6EA", +"}- c #485A6A", +"|- c #789FB9", +"1- c #90BBD3", +"2- c #94C4DC", +"3- c #88B3CD", +"4- c #7A9EB9", +"5- c #698BA8", +"6- c #4D677C", +"7- c #151A1E", +"8- c #1A2125", +"9- c #171C21", +"0- c #1D2329", +"a- c #1D262E", +"b- c #486073", +"c- c #6A8CAA", +"d- c #7CA2BE", +"e- c #90BDD7", +"f- c #9AC5DE", +"g- c #7493A2", +"h- c #708B99", +"i- c #8CB7D1", +"j- c #7494AB", +"k- c #68889F", +"l- c #6A8FA5", +"m- c #7BA2BC", +"n- c #171D21", +"o- c #1D262F", +"p- c #212B36", +"q- c #09090B", +"r- c #BBC2C9", +"s- c #D4E4F2", +"t- c #C1D9EB", +"u- c #44515A", +"v- c #92B5C9", +"w- c #6B8795", +"x- c #4E687E", +"y- c #7EA6C0", +"z- c #91BED8", +"A- c #93BFD9", +"B- c #8CB5D0", +"C- c #7DA4BE", +"D- c #6F92AE", +"E- c #6687A5", +"F- c #526C85", +"G- c #415669", +"H- c #384655", +"I- c #6589A4", +"J- c #6E92AE", +"K- c #80A8C2", +"L- c #92BCD6", +"M- c #91BFD8", +"N- c #799AAF", +"O- c #6A8796", +"P- c #81AAC3", +"Q- c #577187", +"R- c #1F2930", +"S- c #192027", +"T- c #1B2227", +"U- c #0D1010", +"V- c #0E1012", +"W- c #070709", +"X- c #5C6062", +"Y- c #DCE8F3", +"Z- c #C4DCEF", +"`- c #9BB3C6", +" ; c #3A424F", +".; c #313A44", +"+; c #35424C", +"@; c #374655", +"#; c #6E91AD", +"$; c #87B2CC", +"%; c #799EBA", +"&; c #618298", +"*; c #7095AF", +"=; c #435663", +"-; c #80A7C0", +";; c #95C4DC", +">; c #779CB3", +",; c #526D7E", +"'; c #516A7A", +"); c #526B7B", +"!; c #465764", +"~; c #34414E", +"{; c #5C7E9A", +"]; c #2B3741", +"^; c #4B657F", +"/; c #5C7D9C", +"(; c #557088", +"_; c #0F0F10", +":; c #B9C2CA", +"<; c #CCDFEF", +"[; c #B4CDE1", +"}; c #8DAEC8", +"|; c #6F93AE", +"1; c #678CA6", +"2; c #6E92AF", +"3; c #81A8C1", +"4; c #8FBBD5", +"5; c #8DB9D2", +"6; c #6D8FA2", +"7; c #586F82", +"8; c #394851", +"9; c #86B0C6", +"0; c #85AFC8", +"a; c #6F94AF", +"b; c #698DA8", +"c; c #6889A7", +"d; c #5E7E9F", +"e; c #475D75", +"f; c #2E3C4A", +"g; c #5D7E9D", +"h; c #405465", +"i; c #36393B", +"j; c #D7E5F1", +"k; c #A4C5DC", +"l; c #668496", +"m; c #7595AB", +"n; c #7798AE", +"o; c #97C2DA", +"p; c #789DB3", +"q; c #8BB1C8", +"r; c #93C0D9", +"s; c #8BB5CF", +"t; c #85AFC9", +"u; c #82AAC6", +"v; c #5F7C95", +"w; c #1E252C", +"x; c #54728E", +"y; c #587899", +"z; c #5A7B9B", +"A; c #2D3843", +"B; c #798086", +"C; c #D1E3F1", +"D; c #B7D3E8", +"E; c #7E98AB", +"F; c #181C1F", +"G; c #46525F", +"H; c #80A1B8", +"I; c #99C3DB", +"J; c #85ACC2", +"K; c #21272D", +"L; c #0A0B0D", +"M; c #53718C", +"N; c #577797", +"O; c #1B2229", +"P; c #0D0E0F", +"Q; c #B3BDC4", +"R; c #CADDED", +"S; c #B4D3E7", +"T; c #2B3339", +"U; c #2F3840", +"V; c #7899AC", +"W; c #93C1D9", +"X; c #8FBCD5", +"Y; c #8BB6D1", +"Z; c #8DB8D2", +"`; c #92BFD8", +" > c #678092", +".> c #547089", +"+> c #5C7F9B", +"@> c #1F262E", +"#> c #202223", +"$> c #B1BECB", +"%> c #C3D9EB", +"&> c #7B8D99", +"*> c #708B9A", +"=> c #85ABC1", +"-> c #7FA3BA", +";> c #92BBD3", +">> c #7CA0B4", +",> c #97BDD4", +"'> c #657E8F", +")> c #93BDD4", +"!> c #88ADC7", +"~> c #6F94AE", +"{> c #526A7E", +"]> c #65849B", +"^> c #799DBB", +"/> c #84AFC9", +"(> c #8FB9D2", +"_> c #323C45", +":> c #516C84", +"<> c #658AA4", +"[> c #5B7C9B", +"}> c #2E3A49", +"|> c #2A3038", +"1> c #252D3A", +"2> c #1B1E20", +"3> c #ADBFCF", +"4> c #C0D6E7", +"5> c #B0CDE2", +"6> c #8EB3C9", +"7> c #526975", +"8> c #6B899D", +"9> c #597183", +"0> c #90BAD5", +"a> c #94C2DA", +"b> c #82ABC5", +"c> c #495E6E", +"d> c #82A8C3", +"e> c #81A4BA", +"f> c #7594A5", +"g> c #87ABC3", +"h> c #4D6573", +"i> c #6689A6", +"j> c #526E85", +"k> c #243037", +"l> c #607B96", +"m> c #7699B6", +"n> c #789EB5", +"o> c #303D48", +"p> c #7498B4", +"q> c #7094AF", +"r> c #597792", +"s> c #242F39", +"t> c #1A1D25", +"u> c #374553", +"v> c #4D677D", +"w> c #14191E", +"x> c #040505", +"y> c #171A1D", +"z> c #8A9FAD", +"A> c #BCD9EC", +"B> c #B5D3E7", +"C> c #A2CAE1", +"D> c #9DC7DE", +"E> c #9EC7DD", +"F> c #3B4A57", +"G> c #455867", +"H> c #98C2DB", +"I> c #85B0CC", +"J> c #7496B2", +"K> c #4C606F", +"L> c #6E8EA3", +"M> c #7EA0B6", +"N> c #91BBD3", +"O> c #8DB7D1", +"P> c #90BAD4", +"Q> c #96C1DA", +"R> c #3B4853", +"S> c #688AA5", +"T> c #4C657A", +"U> c #1B2026", +"V> c #2B3C44", +"W> c #5F7A90", +"X> c #587284", +"Y> c #536978", +"Z> c #88B1CC", +"`> c #759AB8", +" , c #617E9A", +"., c #556F85", +"+, c #20272E", +"@, c #323D48", +"#, c #333E4A", +"$, c #060707", +"%, c #4A5159", +"&, c #ACC3D5", +"*, c #ACCFE5", +"=, c #5A6874", +"-, c #AACDE1", +";, c #9CC6DC", +">, c #35414C", +",, c #769AB2", +"', c #80AAC5", +"), c #6F92AB", +"!, c #38464F", +"~, c #7EA4B9", +"{, c #97C3DC", +"], c #7A9FB6", +"^, c #3F505C", +"/, c #6D8DA6", +"(, c #1E282E", +"_, c #080909", +":, c #090A0C", +"<, c #344452", +"[, c #3B4857", +"}, c #7799AE", +"|, c #8DB6D1", +"1, c #66869E", +"2, c #3D4957", +"3, c #536C84", +"4, c #353F4C", +"5, c #111215", +"6, c #65727E", +"7, c #A6BCCD", +"8, c #5D6972", +"9, c #AED0E6", +"0, c #99C5DC", +"a, c #8DB5D0", +"b, c #8DB5CE", +"c, c #90BBD5", +"d, c #84AAC5", +"e, c #8EBBD5", +"f, c #80A7C1", +"g, c #6C8DA2", +"h, c #85AFC6", +"i, c #61839B", +"j, c #374352", +"k, c #576D83", +"l, c #80A6C1", +"m, c #81A4BB", +"n, c #111315", +"o, c #111418", +"p, c #4C6378", +"q, c #33424C", +"r, c #37454D", +"s, c #8DB4CF", +"t, c #7397B3", +"u, c #3A495A", +"v, c #0D0F13", +"w, c #27303A", +"x, c #272E36", +"y, c #0F1012", +"z, c #90A4B2", +"A, c #A8CBE2", +"B, c #91BCD4", +"C, c #80ABC3", +"D, c #567083", +"E, c #67899D", +"F, c #94C2DB", +"G, c #95C1DB", +"H, c #779CB2", +"I, c #60849E", +"J, c #64849F", +"K, c #1A1F22", +"L, c #405061", +"M, c #79A1BD", +"N, c #324051", +"O, c #6183A1", +"P, c #6B8FAD", +"Q, c #6485A2", +"R, c #34444F", +"S, c #060606", +"T, c #2D3339", +"U, c #B2CBDF", +"V, c #94BCD5", +"W, c #7DA2BA", +"X, c #3F5264", +"Y, c #5A7991", +"Z, c #7195B3", +"`, c #7BA5BD", +" ' c #81AAC6", +".' c #88B2CC", +"+' c #8EBBD4", +"@' c #8AB2CC", +"#' c #82ADC7", +"$' c #7092A5", +"%' c #95C2DA", +"&' c #41525F", +"*' c #6387A3", +"=' c #475F72", +"-' c #21282F", +";' c #5B7288", +">' c #0D0F11", +",' c #0B0E11", +"'' c #212C36", +")' c #26323C", +"!' c #161B20", +"~' c #55616D", +"{' c #9BB9D0", +"]' c #799EB6", +"^' c #27313A", +"/' c #1A222B", +"(' c #5D7E99", +"_' c #6587A4", +":' c #6789A6", +"<' c #6B8EAB", +"[' c #628097", +"}' c #6D8B9D", +"|' c #769AAF", +"1' c #6E91A9", +"2' c #6C8EAD", +"3' c #6E91AF", +"4' c #3C4D59", +"5' c #8BB1CB", +"6' c #232D32", +"7' c #13171B", +"8' c #232B32", +"9' c #839AAF", +"0' c #789BB3", +"a' c #283138", +"b' c #0C0E0F", +"c' c #242B33", +"d' c #3D4D5B", +"e' c #435768", +"f' c #4B6176", +"g' c #283137", +"h' c #8DB4CC", +"i' c #41535E", +"j' c #405362", +"k' c #3C4F60", +"l' c #3C4E5B", +"m' c #2B353E", +"n' c #526876", +"o' c #92BAD3", +"p' c #1B1F23", +"q' c #31383F", +"r' c #7F9CB6", +"s' c #21292F", +"t' c #29333F", +"u' c #1F252E", +"v' c #090A0E", +"w' c #4D626E", +"x' c #96BDD3", +"y' c #191D20", +"z' c #13181B", +"A' c #80A4BC", +"B' c #1B2027", +"C' c #5D7182", +"D' c #2C383F", +"E' c #364857", +"F' c #1A2028", +"G' c #333F49", +"H' c #7FA2B5", +"I' c #4A5E6E", +"J' c #232E35", +"K' c #252D35", +"L' c #2F3A41", +"M' c #0A0B0E", +"N' c #14191D", +"O' c #5A717F", +"P' c #212931", +"Q' c #222B34", +"R' c #101216", +"S' c #21272B", +" ", +" ", +" ", +" . ", +" + ", +" @ # $ % ", +" & * = - ; ", +" > , ' ) ! ~ { ] ", +" ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ", +" b c d e f g h i j k l m n o p q r s t u v w x ", +" y z A B C D E F G H I J K L M N O P Q R S T U U V W X Y ", +" Z ` ...+.@.#.$.%.O &.*.=.-.;.>.,.'.).!.~.~.~.{.].^./.(._.:.<. ", +" b [.}.|.#.1.2.3.4.{.~.~.~.~.5.6.5.~.7.8.{.~.~.~.~.9.0.a.b.].c. ", +" d.e.f.g.h.i.j.k.{.~.~.~.~.l.~.m.% n.~.o.{.{.~.~.~.~.p.V 9.~.q.r. ", +" s.t.u.v.w.x.u y.z.A.B.5.~.~.5.C.D.E.F.~.~.G.~.~.~.G.H.I.J.~.~.J.K.L. M.N. ", +" O.P.Q.R.S.T.U.V.W.X.Y.Z.`.~.~.5. +.+++@+U ~.~.~.~.~.#+$+%+,.~.~.G.&+*+=+-+;+ ", +" >+,+Q.'+)+!+~+{+]+^+/+(+_+:+<+~.[+}+U 9.|+5.~.~.~.~.1+2+3+4+5+~.].6+7+8+9+0+ ", +" a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+5.U ~.U r+s+~.~.~.t+u+v+w+x+y+~.z+A+t+B+C+D+E+ F+G+ ", +" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+V ~.~.~.~.U ~.~.~.o.9.{.Z+`+9.~.~.~.V @.@+@@@#@ $@%@&@*@ ", +" =@-@;@>@,@'@'.)@!@~@{@]@^@/@l+(@_@:@<@~.~.~.U {.~.~.~.{.~.~.{.[@~.~.~.~.}@|@1@2@3@4@5@6@7@8@ ", +" 9@0@a@b@c@d@-.e@f@g@h@i@j@k@l@V+m@n@o@p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.q@r@s@t@u@v@w@x@y@ ", +"z@A@B@C@D@E@X F@G@H@R I@J@K@L@M@N@O@P@Q@R@o+S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.9.U@V@W@X@<+V Y@Z@`@ # ", +" .#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.U (#_#:#<#p@{.[#}#|#1#2# ", +" 3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.l#m#9.{.~.n#o#p#q#r#s# ", +" t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#% J#K#S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.L#0.l.~.~.{.M#N#O#P#Q#R# ", +" S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$a#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.o.o.;$9.G.~.>$,$'$)$!$~${$]$ ", +" ^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$:+<+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.G.0$a$b$c$d$e$f$g$h$i$j$k$ ", +" [ l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$M#p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.;$D$E$F$G$H$I$J$K$L$ ", +" M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%<+{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.#%$%%%p@&%*%=%-%;%>%,% ", +" '%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%2%3%-$T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.4%5%U p@6%7%8%9%0%a%y ", +" b%c%d%e%f%g%h%i%G.[#j%k%l%m%n%o%p%@%q%{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.~.~.~.~.~.V G.}@r%s%t%u%v%w%M.x%y%z%A% ", +" B%C%D%E%F%G%H%I%V o.<@J%K%L%M%N%O%P%p@~.~.~.~.~.~.~.~.~.U ~.~.U 9.Q%{.~.~.~.~.~.{.%%U {.~.~.{.v@R%S%T%U%V%W% X%$ ", +" Y%Z%`% &.&+&@&#&U ~.{.$&%&&&*&=&-&T@~.~.~.~.~.~.~.~.~.~.~.;&>&,&'&)&!&5+~.~.~.~.{.~&{&]&9.~.p@^&/&(&_&:& <&[&}&|& ", +" 1&2&3&4&5&6&7&8&9&l.~.{.V 0&a&b&c&~.~.~.~.~.~.~.5.d&e&f&g&h&i&j&k&l&m&n&~.~.G.~.~.~.o&p&q&r&s&t&u&v& w&x&y&z&A&B& ", +" C&2&D&E&F&G&G&H&I&J&U ~.~.U K&L&,.~.~.~.~.~.~.~.U M&N&O&P&Q&R&S&T&U&V&W&X&].{.~.~.{./#Y&Z&`& *.*+*@* (.#*$*%*&***=* ", +" -*;*>*,*'*)*!*~*{*]*^*~.5.{.5./*U ~.~.~.~.~.~.{.[#(*_*:*<*[*[*}*|*1*2*3*4*5*U ~.~.6*7*8*9*0*a*b*c*d*e*f*g*h*i*%*j*k*<%l* ", +" m*n*o*p*q*r*s*t*u*v*w*1+~.~.~.~.~.~.~.~.~.~.~.x*y*z*A*B*C*D*E*V U ~.G.~.:.F*G*l.{.R%X+H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X* ", +" Y*Z*D&`* =.=+=@=#=$=%=&={.~.~.~.~.~.~.~.~.~.~.<+*===-=;=>=,='=)=[#p@!=~={=]=^=/=(=a#&%_=:=<=-#[=}=k$|=1=2=3=4=5=6=7=8=9= ", +" 0=a=b=c=d=e=f=g=h=i=j=k=l=5.~.~.~.~.~.~.~.~.~.V -$m=n===o=p=q=r=s=t=:+u=v=w=x=y=z=A=J.V U ~.V [#B=C=D=1=E=F= G=H=I= ", +" J=K=L=M=N=O=P=Q=R=S=T=U=V=5.U ~.~.~.~.~.~.~.~.~.{.x*W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-9.x*)=,-'-)-c.!-~- {-]- ", +" ^-/-(-_-:-<-<-[-%.}-|-1-T@~.{.~.~.~.~.~.~.~.~.~.~.V 2-^&3-4-5-6-7-8-9-0-a-b-c-d-e-f-g-h-V@i-j-k-l-T=m-7@n- o-p- ", +" q-r-s-t-u-v-!+2*w-x-y-z-V ~.~.~.~.~.~.~.~.~.~.~.~.~.~./#A-B-C-D-E-F-G-H-I-J-K-L-<@M-W=N-O-P-Q-R-<&S-T-U-V- W- ", +" X-Y-Z-`- ;.;+;@;#;$;q+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~./#v@W=N#%;&;*;=;-;s=-#;;>;,;';);!;~;{;];^;/;(;H+ ", +" _;:;<;[;};|;1;2;3;4;{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.T@-#5;6;7;8;9;[#V <+0;a;b;c;E-d;e;f;|=g;h; ", +" i;j;V#k;F.l;m;n;o;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.{.p@S@s=p;q;~.~.{.r;s;t;u;~$v;w;x;y;z;A; ", +" H+B;C;D;E;F;G;H;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.U ~.~.V E*E*V ~.~.~.{.T@/#I;J;K;L;M;y;N;O; ", +" P;Q;R;S;T;U;~.{.~.~.~.~.~.~.~.~.l.U {.p@~.~.{.V ~.~.5+V;].~.~.~.~.{.{.p@W;X;Y;Z;`;/# >W..>+>N;@> ", +" #>$>%>&>*>G.~.~.~.~.~.~.~.~.{.`.=>V=->;>~.n##&>>T@,>'>].~.~.~.~.~.)>!>i$~>{>]>^>/>(>_>:><>[>}> |>1> ", +" 2>3>4>5>U@U ~.~.~.~.~.~.~.{.6>7>8>9>0>a#a>b>c>d>e>f>~.~.~.V ~.~.g>h>i>1=j>,%k>l>m>n>o>p>q>r>s>t>u>v>w> ", +" x>y>z>A>B>C>5+D>E>~.~.~.~.{.%&F>G>3;s%{.H>I>J>K>L>M>~.V N>O>P>x*Q>R>S>T>U> X%V>W>X>Y>Z>P-`> ,.,+, ", +" @,#,$,%,&,1.*,=,-,;,{.p@V {.X@>,,,Z;V ~.5.`;',),!,~,~.{,],^,/,/&-$F$(,_, :,<,[,},<@|,1,2, ", +" B&3,4, 5,6,7,8,9,0,`;a,b,B+c,d,s=<+~.~.~.a#e,f,g,h,V -#9$i,j,k,l,m,n, o,p,q,r,s,t,u,v, ", +" w,x, y,z,A,B,C,D,E,o@F,G,<+~.~.~.~.~.;;P>j%}@p@H,]#I,J,K,L,M,=+ N,O,P,Q,R,S, ", +" T,U,V,W,X,Y,Z,`, '.'+'x*~.{.O+@%@'#'$'%'a#&'*'='-' ~;;'>' ,''')'!' ", +" ~'{']'^'/'('_'_':'<'['}'{.V |'1'2'3'4'5'}@6'7' 8'K; ", +" v&9'0'a' b'c'd'e'f'1@g'h'G.i'j'k'l'm'n'o'p' y ", +" q'r's' t'u'H+ v'w'x'y' z'A'B' ", +" C'D' E'F' G'H' I'J' ", +" K'L' M' N'O' P'Q' ", +" R' S' ", +" ", +" ", +" ", +" "}; diff --git a/minilibx/test/open24.xpm b/minilibx/test/open24.xpm new file mode 100644 index 0000000..f363254 --- /dev/null +++ b/minilibx/test/open24.xpm @@ -0,0 +1,230 @@ +/* XPM */ +static char *open[] = { +/* width height num_colors chars_per_pixel */ +" 45 55 168 2", +/* colors */ +".. s None c None", +".# c #450304", +".a c #ce7e7c", +".b c #b94344", +".c c #b65254", +".d c #780204", +".e c #b04c4c", +".f c #b00204", +".g c #8a8a64", +".h c #969a24", +".i c #b6b60c", +".j c #cac614", +".k c #cece34", +".l c #cace54", +".m c #caca94", +".n c #c24e4c", +".o c #aa0204", +".p c #9e4244", +".q c #bc0204", +".r c #a40204", +".s c #9e262c", +".t c #8c3a3c", +".u c #5c1414", +".v c #5b0204", +".w c #700204", +".x c #722214", +".y c #b52624", +".z c #8e3234", +".A c #b60204", +".B c #c20204", +".C c #860204", +".D c #560304", +".E c #800204", +".F c #9e0204", +".G c #920204", +".H c #620204", +".I c #a41314", +".J c #996a6c", +".K c #920d09", +".L c #c80204", +".M c #690204", +".N c #980204", +".O c #984c4c", +".P c #e2dedc", +".Q c #ae5e5c", +".R c #bc6a6c", +".S c #a21a1c", +".T c #8a0a04", +".U c #671e1c", +".V c #941b1c", +".W c #b8b4b4", +".X c #e8e6e4", +".Y c #ccb4b4", +".Z c #c07c7c", +".0 c #f3f2eb", +".1 c #b49696", +".2 c #521614", +".3 c #9e5a5c", +".4 c #d4d4d4", +".5 c #a7a5a1", +".6 c #dec4c4", +".7 c #e4d6d4", +".8 c #f4f2f4", +".9 c #cccac4", +"#. c #9a161c", +"## c #8c0204", +"#a c #862c2c", +"#b c #7e5e5c", +"#c c #a39694", +"#d c #6b6667", +"#e c #322624", +"#f c #b09e9c", +"#g c #b23234", +"#h c #500304", +"#i c #222224", +"#j c #2e322c", +"#k c #925c5c", +"#l c #721a1c", +"#m c #6e6e6c", +"#n c #0a0a0c", +"#o c #b2b2b4", +"#p c #8e6264", +"#q c #884444", +"#r c #8c5c5c", +"#s c #121214", +"#t c #b2aeac", +"#u c #c21e1c", +"#v c #6e0e0c", +"#w c #623e3c", +"#x c #b64e4c", +"#y c #bc3634", +"#z c #624e1c", +"#A c #6e727c", +"#B c #824e4c", +"#C c #8b8d87", +"#D c #a09674", +"#E c #766844", +"#F c #7a663c", +"#G c #828c90", +"#H c #beb6a4", +"#I c #3a0204", +"#J c #8e9298", +"#K c #562529", +"#L c #7c3838", +"#M c #bab294", +"#N c #7e4644", +"#O c #929a9c", +"#P c #762a2c", +"#Q c #a60e0c", +"#R c #ae1e1c", +"#S c #460a0c", +"#T c #a6aaa4", +"#U c #6a4a4c", +"#V c #784c50", +"#W c #761214", +"#X c #9e1e1c", +"#Y c #988c90", +"#Z c #821e1c", +"#0 c #7a1618", +"#1 c #7a6e74", +"#2 c #7e7a77", +"#3 c #808688", +"#4 c #828284", +"#5 c #828279", +"#6 c #827a64", +"#7 c #7e765c", +"#8 c #864a34", +"#9 c #825a44", +"a. c #766e54", +"a# c #7e7e74", +"aa c #806464", +"ab c #7e724c", +"ac c #766634", +"ad c #765a2c", +"ae c #8e7e54", +"af c #a69e8c", +"ag c #c7c2ac", +"ah c #9a2a1c", +"ai c #aa3a3c", +"aj c #979894", +"ak c #70684c", +"al c #62522c", +"am c #6e5e3c", +"an c #92866c", +"ao c #968e6c", +"ap c #826e54", +"aq c #84765c", +"ar c #86522c", +"as c #7e4624", +"at c #7e3614", +"au c #6e5254", +"av c #712e2c", +"aw c #7a5654", +"ax c #82727c", +"ay c #a63634", +"az c #8a6a6c", +"aA c #863534", +"aB c #5c1a18", +"aC c #6a2c2c", +"aD c #5e0e14", +"aE c #868684", +"aF c #922624", +"aG c #901614", +"aH c #c21614", +"aI c #520e0c", +"aJ c #805654", +"aK c #b00c0c", +"aL c #c2221c", +/* pixels */ +"..........................................................................................", +"..........................................................................................", +".....................................#.a.#................................................", +"...................................#.b.c.#.#.#.#...........#.d............................", +".................................#.e.f.f.#.g.h.i.j.k.l.m...f.n............................", +".................................d.f.o.f.#.#.#.d.d.#.#.#...f.f.d..........................", +".................................p.q.q.r.s.t.u.v.w.x.d.d.#.d.r.y.d........................", +".................................z.A.B.q.C.D.E.F.G.E.H.E.I.F.q.A.d........................", +".................................J.G.f.G.w.K.f.L.B.B.r.M.f.B.L.A.d........................", +".................................d.w.N.M.O.P.Q.B.B.o.R.S.E.q.q.T.d........................", +".................................d.U.M.V.W.X.Y.q.B.Z.0.1.E.r.N.d..........................", +".................................d.2.r.3.4.5.6.A.f.7.8.9#.###a.#..........................", +"................................#b.d.L#c#d#e#f.N.V.5#d.4#g.E.d............................", +"...............................d#h.r.L#f#i#j#k.M#l#m#n#o.b.r.d............................", +"...............................d#h##.q#g#p#q##.q.N#r#s#t#u.q#v.#..........................", +"..............#j................#w.w.C.r.q##.r.B.f.T#x#y.L.r.M.d..........................", +"............#j#z#j#A#A#j.........d.D.r.M.C.f.r.r.r.q.B.C.N.E#B............................", +"..........#j#C#D#E#z#F#G#j.......d.d.#.G##.w.M.M.C.C.d.G.r.u.d............................", +"....................#E#H#C#j.........d#I.w.F.f.o.o.o.N.M.#.d..............................", +"......................#E#j#J#j......#K.M.#.#.v.w.M.v.##h.H#L.d............................", +"..........................#M#j.......v.F.q.r.d.w.w.C.E.M.v.M#N.d..........................", +"..........................#E#O#j#j#K##.f.L.L.L.B.q.f##.M.v.w.w#P.d.#...d.d................", +"............................#C#E.#.v.o.B.L.L.q.q.q.q.N.M.D#h.M.N.r#Q#R#S.H.J.#............", +"............................#j#T#U.C.q.q.o.G.F.f.q.A.N.d.v.v##.o.q.L.r.C.A###k............", +"..............................#C#V.N.A.N.f.q.F.C.E.f.F.E.H#n#W.K.I#X#a.z.V.q.d#p.d........", +"................................#Y.r.K#Z.K.q.A.G.w#0#b#1#2#3#4#5#5#6#6#7#8.q.G#9..........", +"..................#j#oa..5#j..#J#Ja##4#4aa.o.A##.E.xabacadae#Daf#M#Magah.r.qai.#..........", +"................aja#akalamanaoapaqaaarasat.r.o.E.w.T.T.E.H.#...........#.d.d.#............", +"...........E....#j#j#C#M#j#n#naa#V.O.f.N.F.q.G.d.w.r.C.d.H.#...............#..............", +"...........#.F.F.J#n#n#n#n#n#nauav#p.q.N.d.d.w.M.F.F.E.d.U................................", +".........E.F.E.E.d.z#n.d#n#n#naw.Uax.r##.d.w.D.M.r.N.E.w.d................................", +".........E.F.......d.Fay.E.F#naz.2#A.D#h.r.f.w##.r##.d.H.M................................", +".........F.#...........E.E.F.baAaB#A.#.E.f.r.w.N.N.E.waC.#................................", +".........F.#...............d.F.E#K#d.H.G.F.G.w.N##.d.D.#..................................", +".........F.#....................#Aau.v.E##.w.E.E.w.H.d.......d..av.d......................", +".........E.#..................#j#GaC.M.H.M.d.d.w.H.#.d.d.#aC.w.C##.E.d....................", +"...........F.................5#O...#aD.w.d.w.H.D.M######.G.F.o.f.o.N.3....................", +"...........F.E...........5aEakak.....#.##h#h.v.N.o.f.q.L.L.L.L.L.q.faF....................", +"...........E.E......#E#C.5aq#j.....#.v.N.F.d.N.r.F.r.F#Q.I.o.q.L.L.L.y....................", +".............E.....................#.E.B.qaG.d.d.d.....#.#.....d#x.b......................", +".............E.F...................E.w.L.LaG.#............................................", +"...............E.E.................EaA.q.qaG.#............................................", +"...............E.F.E.................E.r.r#Z.#............................................", +".................E.F.E...............E.G.NaA..............................................", +".................E#uaH.................w.dav..............................................", +"...................E.E.............EaI.M.w.v.#............................................", +"...................................E.D.d.E.waJ............................................", +".....................................C.N.N##.M............................................", +"..................................#W.f.q.A.f.G#q..........................................", +".....................................q.L.L.L.q.V.#........................................", +"...................................#.daK.q.qaL.d..........................................", +".......................................#.#.#..............................................", +"..........................................................................................", +"..........................................................................................", +".........................................................................................." +}; diff --git a/minilibx/test/open30.xpm b/minilibx/test/open30.xpm new file mode 100644 index 0000000..87be371 --- /dev/null +++ b/minilibx/test/open30.xpm @@ -0,0 +1,1439 @@ +/* XPM */ +static char * open30_2_xpm[] = { +"64 64 1372 2", +" c None", +". c #08090D", +"+ c #1A1E23", +"@ c #1F2124", +"# c #060809", +"$ c #1A1E21", +"% c #4F606C", +"& c #3D4145", +"* c #868D93", +"= c #454E56", +"- c #627481", +"; c #667C8A", +"> c #2D3031", +", c #D7E1E7", +"' c #4D5157", +") c #8997A5", +"! c #282E31", +"~ c #333B41", +"{ c #A5C6DB", +"] c #718C9B", +"^ c #000000", +"/ c #181B1F", +"( c #262828", +"_ c #D2DEE7", +": c #B8C5D0", +"< c #151719", +"[ c #08090B", +"} c #272B30", +"| c #2D3037", +"1 c #26282C", +"2 c #1A1D1F", +"3 c #B1CADB", +"4 c #56646E", +"5 c #080809", +"6 c #080A0C", +"7 c #1E2126", +"8 c #98B7C9", +"9 c #A2CAE2", +"0 c #7FA1B5", +"a c #06080A", +"b c #252729", +"c c #A7ADB2", +"d c #272B2E", +"e c #1E2023", +"f c #C8D8E5", +"g c #C9DDED", +"h c #8996A3", +"i c #6B7782", +"j c #C7DFF0", +"k c #CCE0F0", +"l c #AFC1CF", +"m c #47535B", +"n c #B0D3E8", +"o c #7E99A9", +"p c #738493", +"q c #97B4C7", +"r c #53606A", +"s c #6E8996", +"t c #A1CBE3", +"u c #9CC6DE", +"v c #90B5CB", +"w c #171D22", +"x c #1E2629", +"y c #020202", +"z c #ABB3BA", +"A c #BBC4C8", +"B c #222323", +"C c #141617", +"D c #5D6164", +"E c #ACB5BC", +"F c #676D74", +"G c #BDD4E5", +"H c #B3D1E7", +"I c #B0D1E7", +"J c #728A99", +"K c #94AEBF", +"L c #B1D1E7", +"M c #505C64", +"N c #7B98A9", +"O c #A1CBE0", +"P c #99C3D9", +"Q c #475863", +"R c #A0C9DE", +"S c #9CC6DA", +"T c #9ECAE1", +"U c #9CC5DD", +"V c #9AC4DC", +"W c #263137", +"X c #3C4A55", +"Y c #658190", +"Z c #66686B", +"` c #7D8085", +" . c #363839", +".. c #797E81", +"+. c #D2DBE1", +"@. c #DDE9F4", +"#. c #CADEEF", +"$. c #778593", +"%. c #AED0E5", +"&. c #9EC9DE", +"*. c #9EC8DF", +"=. c #9BC1D8", +"-. c #9EC8DE", +";. c #6B8596", +">. c #9BC5DC", +",. c #9BC6DF", +"'. c #9CC5DC", +"). c #688595", +"!. c #6B8698", +"~. c #9CC4DC", +"{. c #9BC4DC", +"]. c #9DC5DD", +"^. c #647D8C", +"/. c #485864", +"(. c #161A1D", +"_. c #36444C", +":. c #95BDD5", +"<. c #566E7E", +"[. c #A4AAAD", +"}. c #E9F2F7", +"|. c #DEEAF6", +"1. c #B5D4E9", +"2. c #A9CFE3", +"3. c #90B3C9", +"4. c #9FCAE1", +"5. c #9BC4DD", +"6. c #7490A2", +"7. c #99C2DB", +"8. c #81A5BA", +"9. c #9CC5DE", +"0. c #98C1DA", +"a. c #5F7889", +"b. c #96BFD8", +"c. c #44545F", +"d. c #565A5E", +"e. c #DFE6EC", +"f. c #E6EEF7", +"g. c #D6E4F2", +"h. c #BFD6E9", +"i. c #A9CCE3", +"j. c #9FC8DD", +"k. c #9DC6DD", +"l. c #9CC4DD", +"m. c #7D9FB0", +"n. c #98C0D6", +"o. c #9AC5DD", +"p. c #97BFD8", +"q. c #9BC5DF", +"r. c #2D3840", +"s. c #626567", +"t. c #E7ECF5", +"u. c #E1EAF5", +"v. c #CEE3F3", +"w. c #B7D6EA", +"x. c #A4CBE0", +"y. c #8AAFC5", +"z. c #647F90", +"A. c #648092", +"B. c #89B0C7", +"C. c #9CC6DF", +"D. c #5D7486", +"E. c #7B9BAF", +"F. c #84A8BF", +"G. c #9BC5DD", +"H. c #96BED5", +"I. c #4B5D69", +"J. c #9BC5DE", +"K. c #536B77", +"L. c #2E3B41", +"M. c #1B2124", +"N. c #3F4F58", +"O. c #4D5152", +"P. c #E7EEF3", +"Q. c #E2EAF5", +"R. c #CEE2F2", +"S. c #BAD5E9", +"T. c #9DC2D7", +"U. c #5C7281", +"V. c #232A31", +"W. c #08090A", +"X. c #121418", +"Y. c #131619", +"Z. c #131719", +"`. c #87ACC3", +" + c #7B9BAE", +".+ c #87ADC3", +"++ c #8FB5CB", +"@+ c #678295", +"#+ c #96C0D8", +"$+ c #607787", +"%+ c #6B8595", +"&+ c #96C1DB", +"*+ c #6A8595", +"=+ c #35424A", +"-+ c #7090A1", +";+ c #15191C", +">+ c #2D3033", +",+ c #DDE5EB", +"'+ c #D2E3F1", +")+ c #BAD7EB", +"!+ c #A9CFE5", +"~+ c #272F35", +"{+ c #1C2227", +"]+ c #4F697B", +"^+ c #6B8FA9", +"/+ c #759CB6", +"(+ c #7BA0BB", +"_+ c #80A5BC", +":+ c #88B0C8", +"<+ c #96C3DB", +"[+ c #8FB6CD", +"}+ c #80A1B3", +"|+ c #556876", +"1+ c #96BFD7", +"2+ c #566B77", +"3+ c #93B8CD", +"4+ c #637A8D", +"5+ c #9DC6DE", +"6+ c #8FB4CA", +"7+ c #55697A", +"8+ c #6F8F9F", +"9+ c #91BDD5", +"0+ c #283239", +"a+ c #050406", +"b+ c #767B80", +"c+ c #BDC6CE", +"d+ c #D4E5F3", +"e+ c #C1D7EA", +"f+ c #A7CDE4", +"g+ c #9FC9DE", +"h+ c #668596", +"i+ c #6D90AA", +"j+ c #5C7994", +"k+ c #60849F", +"l+ c #6286A1", +"m+ c #688CA8", +"n+ c #7298B2", +"o+ c #82A8C2", +"p+ c #8FBAD5", +"q+ c #96C2DB", +"r+ c #89ADC4", +"s+ c #96BED6", +"t+ c #99C2DA", +"u+ c #6C899A", +"v+ c #92BBD2", +"w+ c #9AC4DD", +"x+ c #5B717D", +"y+ c #9EC6DE", +"z+ c #8BB1C9", +"A+ c #718EA0", +"B+ c #94C3DB", +"C+ c #536B78", +"D+ c #3E505F", +"E+ c #4E6373", +"F+ c #2C333C", +"G+ c #070708", +"H+ c #040404", +"I+ c #1A1C1E", +"J+ c #202326", +"K+ c #050606", +"L+ c #23292E", +"M+ c #A1C0D4", +"N+ c #9FC9DD", +"O+ c #97C2DB", +"P+ c #80A8C1", +"Q+ c #668AA6", +"R+ c #4B5D72", +"S+ c #4C647A", +"T+ c #5F80A0", +"U+ c #60859E", +"V+ c #678AA6", +"W+ c #739BB5", +"X+ c #85AEC7", +"Y+ c #92BDD7", +"Z+ c #96BFD5", +"`+ c #627B8A", +" @ c #89B1C9", +".@ c #2B353C", +"+@ c #7597B2", +"@@ c #779CB8", +"#@ c #52697C", +"$@ c #1D2328", +"%@ c #445663", +"&@ c #5E7A8D", +"*@ c #252F37", +"=@ c #090909", +"-@ c #859BB2", +";@ c #859DB8", +">@ c #6E8396", +",@ c #252C33", +"'@ c #9CC4D7", +")@ c #92C0D9", +"!@ c #79A0BA", +"~@ c #6487A3", +"{@ c #566979", +"]@ c #8CB0C2", +"^@ c #51697C", +"/@ c #60849D", +"(@ c #6D8EAC", +"_@ c #7BA0BC", +":@ c #8AB4CE", +"<@ c #95C2DB", +"[@ c #9AC5DC", +"}@ c #95C1DA", +"|@ c #607B8C", +"1@ c #597488", +"2@ c #7EA6BF", +"3@ c #597587", +"4@ c #455664", +"5@ c #668598", +"6@ c #82A9C4", +"7@ c #617F92", +"8@ c #1A2328", +"9@ c #2B3137", +"0@ c #728FAC", +"a@ c #51657B", +"b@ c #6B8AA8", +"c@ c #8EAEC7", +"d@ c #A8C8E2", +"e@ c #92BDD6", +"f@ c #769DBA", +"g@ c #526E87", +"h@ c #7490A0", +"i@ c #A6CDE4", +"j@ c #97BFD4", +"k@ c #55697D", +"l@ c #6286A0", +"m@ c #7399B3", +"n@ c #84ACC5", +"o@ c #92BFD9", +"p@ c #99C4DC", +"q@ c #94C0DA", +"r@ c #4F6575", +"s@ c #7DA5BF", +"t@ c #7FA2BC", +"u@ c #8FB6CE", +"v@ c #95C3DB", +"w@ c #8EB8D2", +"x@ c #6A879D", +"y@ c #111318", +"z@ c #252A30", +"A@ c #81868C", +"B@ c #A5ABAD", +"C@ c #70767C", +"D@ c #38434F", +"E@ c #637F9B", +"F@ c #516980", +"G@ c #799AB5", +"H@ c #A5C3D9", +"I@ c #93BDD6", +"J@ c #779EBA", +"K@ c #445A6B", +"L@ c #93B5C9", +"M@ c #B6D3E8", +"N@ c #AECFE4", +"O@ c #95BDD2", +"P@ c #52687A", +"Q@ c #6486A3", +"R@ c #7092B0", +"S@ c #90BCD6", +"T@ c #97C4DC", +"U@ c #A0C9E0", +"V@ c #99C5DD", +"W@ c #86AEC6", +"X@ c #8FBAD4", +"Y@ c #91BDD6", +"Z@ c #7094AC", +"`@ c #2A353E", +" # c #0B0E10", +".# c #888D90", +"+# c #787D82", +"@# c #465360", +"## c #56697F", +"$# c #A6CADD", +"%# c #5A7382", +"&# c #6C8CAA", +"*# c #A5BED3", +"=# c #A7CAE0", +"-# c #94C1DA", +";# c #7EA4BF", +"># c #415160", +",# c #9DC3D5", +"'# c #B3CFE1", +")# c #AAC3D4", +"!# c #A8CDE4", +"~# c #89ACBE", +"{# c #567088", +"]# c #6C91AC", +"^# c #81A7C2", +"/# c #96C4DC", +"(# c #85A9BD", +"_# c #708C9B", +":# c #5A6E7B", +"<# c #6C8695", +"[# c #97C3DB", +"}# c #8BB5CE", +"|# c #425461", +"1# c #63819E", +"2# c #415465", +"3# c #0B0D0E", +"4# c #607387", +"5# c #687D8C", +"6# c #B8D6E9", +"7# c #7893A2", +"8# c #576F85", +"9# c #A7BACF", +"0# c #B0CEE5", +"a# c #98C4DC", +"b# c #88B1CA", +"c# c #36444E", +"d# c #8FA0AD", +"e# c #73818D", +"f# c #596D81", +"g# c #B4D0E4", +"h# c #A3CDE2", +"i# c #658296", +"j# c #6A8DAB", +"k# c #7BA5C0", +"l# c #94BAD2", +"m# c #6D899B", +"n# c #99C3DC", +"o# c #8EB9D2", +"p# c #7AA0BA", +"q# c #6C8FAB", +"r# c #6484A1", +"s# c #1F252C", +"t# c #121619", +"u# c #7E96B0", +"v# c #7A8A96", +"w# c #BCD7EA", +"x# c #A0C5D9", +"y# c #3C4B57", +"z# c #A9BACD", +"A# c #BCD5E8", +"B# c #84A6BA", +"C# c #8EA1AE", +"D# c #CFD1D4", +"E# c #ECF6FA", +"F# c #ABB7C2", +"G# c #556F84", +"H# c #57626A", +"I# c #5C7078", +"J# c #6C8AA7", +"K# c #80A6C0", +"L# c #91B8D0", +"M# c #94BFD8", +"N# c #87B0CA", +"O# c #7CA2BB", +"P# c #7097AF", +"Q# c #495E6F", +"R# c #0C0E11", +"S# c #3A3F43", +"T# c #8AA3BB", +"U# c #778592", +"V# c #C0D8EB", +"W# c #B3D5E9", +"X# c #404A53", +"Y# c #B2C2D3", +"Z# c #96A1AC", +"`# c #9DB2C3", +" $ c #AEBECE", +".$ c #EDEFF3", +"+$ c #F7FAFC", +"@$ c #B6BFC7", +"#$ c #556E85", +"$$ c #121314", +"%$ c #2B2E2F", +"&$ c #555A5E", +"*$ c #3B4C5B", +"=$ c #6F8EA4", +"-$ c #92BED8", +";$ c #9DC7DF", +">$ c #87ACC1", +",$ c #546A78", +"'$ c #516874", +")$ c #4E6570", +"!$ c #4D6271", +"~$ c #4C6271", +"{$ c #4E677A", +"]$ c #38454E", +"^$ c #6C7278", +"/$ c #86A1B6", +"($ c #5C656C", +"_$ c #A4B0BA", +":$ c #555D64", +"<$ c #657178", +"[$ c #A6B0B5", +"}$ c #939CA1", +"|$ c #D4E4F1", +"1$ c #A0BACE", +"2$ c #B9C7D7", +"3$ c #F6F7F9", +"4$ c #C6CED1", +"5$ c #506A7C", +"6$ c #060607", +"7$ c #676A6B", +"8$ c #91999F", +"9$ c #7CA3BE", +"0$ c #96BCD4", +"a$ c #5B717E", +"b$ c #4B5F6C", +"c$ c #455864", +"d$ c #5B717F", +"e$ c #81A5B9", +"f$ c #98C4DD", +"g$ c #93BFD8", +"h$ c #87B1CA", +"i$ c #7BA1BC", +"j$ c #5A7489", +"k$ c #222A33", +"l$ c #838A92", +"m$ c #9DADBC", +"n$ c #ECF0F5", +"o$ c #F1F9FB", +"p$ c #818A8D", +"q$ c #4A5155", +"r$ c #6A6F72", +"s$ c #7E898F", +"t$ c #E6F1F7", +"u$ c #CADCED", +"v$ c #A0B7CC", +"w$ c #C6D1DF", +"x$ c #AFB3B4", +"y$ c #5F707D", +"z$ c #CBCFD1", +"A$ c #F4F5F6", +"B$ c #66737F", +"C$ c #87B2CB", +"D$ c #90B7CD", +"E$ c #596E7B", +"F$ c #586F7E", +"G$ c #8BB0C8", +"H$ c #91BED6", +"I$ c #83ADC7", +"J$ c #6D8EA7", +"K$ c #3F5161", +"L$ c #2D3A45", +"M$ c #1F2020", +"N$ c #BDC5CC", +"O$ c #E0EDF5", +"P$ c #BBCAD8", +"Q$ c #E1E4E7", +"R$ c #5E6368", +"S$ c #5B5F62", +"T$ c #D9E7F3", +"U$ c #A4C3D6", +"V$ c #89A3B3", +"W$ c #7B91A1", +"X$ c #627990", +"Y$ c #42505A", +"Z$ c #CACCCE", +"`$ c #F9F9F9", +" % c #FDFDFD", +".% c #BCBEC0", +"+% c #5C7689", +"@% c #8DB9D3", +"#% c #8FB5CC", +"$% c #536471", +"%% c #98C1D9", +"&% c #91BED7", +"*% c #81AAC5", +"=% c #597386", +"-% c #41535F", +";% c #6486A2", +">% c #4D667D", +",% c #070809", +"'% c #44484E", +")% c #BEC8D0", +"!% c #8096A6", +"~% c #516473", +"{% c #A9ACAF", +"]% c #8B8F91", +"^% c #A8B3BD", +"/% c #C5DAEB", +"(% c #9FC8E1", +"_% c #8FBCD6", +":% c #81A8C2", +"<% c #6C90AC", +"[% c #56728C", +"}% c #585B5F", +"|% c #CBCDCD", +"1% c #C1C3C6", +"2% c #4F565F", +"3% c #82ABC3", +"4% c #93BCD3", +"5% c #95BED7", +"6% c #8EB9D3", +"7% c #5B788B", +"8% c #627E91", +"9% c #7FA7C1", +"0% c #6C91AB", +"a% c #546F87", +"b% c #6F7376", +"c% c #D5E2EF", +"d% c #A9C4D8", +"e% c #81A1BA", +"f% c #333940", +"g% c #5F6B76", +"h% c #C0D5E8", +"i% c #AACCE2", +"j% c #8EB8D3", +"k% c #7FA5BF", +"l% c #7095B0", +"m% c #4E697E", +"n% c #07090A", +"o% c #0D0F10", +"p% c #7193A6", +"q% c #96C3DC", +"r% c #8EBCD7", +"s% c #91BDD7", +"t% c #8FBBD6", +"u% c #7699AD", +"v% c #4D626F", +"w% c #252D33", +"x% c #101215", +"y% c #0C0D0E", +"z% c #0A0C0E", +"A% c #06090A", +"B% c #7F8488", +"C% c #D7E3F1", +"D% c #B6D0E4", +"E% c #A3C2D7", +"F% c #596872", +"G% c #A9BED0", +"H% c #B4D0E5", +"I% c #9EC8DC", +"J% c #8FB9D4", +"K% c #85ADC7", +"L% c #7FA4BE", +"M% c #4B606F", +"N% c #4E6372", +"O% c #89B6D0", +"P% c #92C1DA", +"Q% c #9DC7DD", +"R% c #95C0DA", +"S% c #94BED8", +"T% c #8BB8D1", +"U% c #7AA0B9", +"V% c #4E667A", +"W% c #344151", +"X% c #0C0D0F", +"Y% c #8A8F92", +"Z% c #D4E6F5", +"`% c #BCD5E9", +" & c #8599A5", +".& c #939DA6", +"+& c #C4DAEB", +"@& c #89A6B9", +"#& c #7D9FB5", +"$& c #98C3DC", +"%& c #95C0D9", +"&& c #7CA2B9", +"*& c #7697AE", +"=& c #698498", +"-& c #7394A8", +";& c #9EC7DF", +">& c #8DB1C4", +",& c #6B8594", +"'& c #50636C", +")& c #50626C", +"!& c #7F9FB1", +"~& c #93B8D0", +"{& c #627A88", +"]& c #90B6CC", +"^& c #93BDD7", +"/& c #87AFC9", +"(& c #7291A7", +"_& c #384651", +":& c #121618", +"<& c #12171B", +"[& c #4F6986", +"}& c #597998", +"|& c #324052", +"1& c #969CA1", +"2& c #D6E6F5", +"3& c #C6DCEE", +"4& c #505A64", +"5& c #82929F", +"6& c #99ABBB", +"7& c #A1B9CA", +"8& c #87A0B0", +"9& c #718EA1", +"0& c #8DB2C9", +"a& c #8BAEC4", +"b& c #586D7D", +"c& c #97C0D9", +"d& c #8DB3C9", +"e& c #95B8CD", +"f& c #9DC0D6", +"g& c #6F8B9C", +"h& c #354249", +"i& c #464E54", +"j& c #8A98A5", +"k& c #AABAC7", +"l& c #86939E", +"m& c #41494F", +"n& c #4A5861", +"o& c #97C1DA", +"p& c #5E7888", +"q& c #5C7482", +"r& c #88ACC2", +"s& c #91BFD7", +"t& c #799CB5", +"u& c #47596A", +"v& c #0D0F12", +"w& c #1A2127", +"x& c #56778D", +"y& c #688BA9", +"z& c #5D7F9E", +"A& c #547391", +"B& c #0E1013", +"C& c #9DA6AB", +"D& c #C8DCED", +"E& c #7A8996", +"F& c #B5CEE0", +"G& c #BCDBEC", +"H& c #B9D5EA", +"I& c #8BA2B2", +"J& c #6C8A9D", +"K& c #97BFD7", +"L& c #3E4E59", +"M& c #92B5CB", +"N& c #535F68", +"O& c #454F56", +"P& c #6F7C87", +"Q& c #ABC0D1", +"R& c #C7DCEE", +"S& c #C5DBED", +"T& c #C2D7EA", +"U& c #BFD8EA", +"V& c #BCD7EB", +"W& c #62717B", +"X& c #5B6F7B", +"Y& c #95C3DC", +"Z& c #8BB2C9", +"`& c #485761", +" * c #42525F", +".* c #6686A1", +"+* c #587896", +"@* c #1B2129", +"#* c #5C7A94", +"$* c #7DA2BD", +"%* c #84AEC7", +"&* c #749BB5", +"** c #5C7E9C", +"=* c #27343F", +"-* c #A4A9B2", +";* c #D9E7F4", +">* c #C8DBEC", +",* c #B1C8DA", +"'* c #5D6C76", +")* c #A8C5D8", +"!* c #A6BDD0", +"~* c #B9D6EA", +"{* c #B9D4E9", +"]* c #8198A8", +"^* c #8AADC3", +"/* c #8CB1CA", +"(* c #96C2D8", +"_* c #A3C7DF", +":* c #ADCDE3", +"<* c #ABD0E4", +"[* c #ADCFE3", +"}* c #AACEE4", +"|* c #A4CDE3", +"1* c #A1CBE1", +"2* c #A3CCE3", +"3* c #A2C9DF", +"4* c #41515A", +"5* c #81A2B5", +"6* c #94C0D7", +"7* c #5E7789", +"8* c #526777", +"9* c #516777", +"0* c #6B8CA5", +"a* c #759CBA", +"b* c #658AA5", +"c* c #587798", +"d* c #1B242B", +"e* c #0E1110", +"f* c #101214", +"g* c #202931", +"h* c #59758E", +"i* c #799FBB", +"j* c #84B1CA", +"k* c #86ACC6", +"l* c #354758", +"m* c #A0A6AE", +"n* c #DAE6F2", +"o* c #C4DCEE", +"p* c #B4D2E8", +"q* c #3E4A53", +"r* c #698091", +"s* c #5D7581", +"t* c #A3CAE0", +"u* c #A6CFE5", +"v* c #A5CCE5", +"w* c #718A9C", +"x* c #98C3DB", +"y* c #83ABC7", +"z* c #2E3B46", +"A* c #33414A", +"B* c #678398", +"C* c #8AB3CE", +"D* c #93BED7", +"E* c #97C4DB", +"F* c #42525E", +"G* c #88ACC0", +"H* c #789EB9", +"I* c #7A9FBB", +"J* c #7EA2BD", +"K* c #779DB5", +"L* c #577081", +"M* c #5B7B9B", +"N* c #1D2229", +"O* c #547390", +"P* c #54728D", +"Q* c #6082A0", +"R* c #688EA9", +"S* c #6689A7", +"T* c #6086A0", +"U* c #6285A1", +"V* c #6B8DAA", +"W* c #718FAB", +"X* c #3E5568", +"Y* c #969DA1", +"Z* c #DBE8F4", +"`* c #95ACBD", +" = c #758B9A", +".= c #A4C9DE", +"+= c #698190", +"@= c #667E8A", +"#= c #7D99AA", +"$= c #7B9BAD", +"%= c #6F8C9A", +"&= c #536976", +"*= c #84ADC6", +"== c #6D92AD", +"-= c #62829E", +";= c #43576A", +">= c #2F3B46", +",= c #5C788A", +"'= c #86AFC8", +")= c #93BED8", +"!= c #93BAD5", +"~= c #93BAD2", +"{= c #92BCD4", +"]= c #7EA2B6", +"^= c #3D4D56", +"/= c #485B67", +"(= c #7596A9", +"_= c #8CBBD4", +":= c #90BCD5", +"<= c #91BFD9", +"[= c #789BAD", +"}= c #465B6A", +"|= c #59789A", +"1= c #5D7F9D", +"2= c #5E839C", +"3= c #59799A", +"4= c #415569", +"5= c #2D3A46", +"6= c #2E3B49", +"7= c #4A647C", +"8= c #587690", +"9= c #39485A", +"0= c #7F8589", +"a= c #D9E8F5", +"b= c #CCDEEE", +"c= c #8597A5", +"d= c #B3D2E3", +"e= c #9BB3C4", +"f= c #B2CEE1", +"g= c #B2D1E7", +"h= c #ABCFE6", +"i= c #94B7CB", +"j= c #495C6A", +"k= c #688498", +"l= c #617B8A", +"m= c #85ADC8", +"n= c #78A0B9", +"o= c #62819B", +"p= c #2E3843", +"q= c #485A6C", +"r= c #67889C", +"s= c #8AB5CF", +"t= c #8EB9D1", +"u= c #6C899B", +"v= c #6E91A7", +"w= c #678399", +"x= c #6888A1", +"y= c #323E48", +"z= c #5B7585", +"A= c #98C5DD", +"B= c #83ACC1", +"C= c #2D373F", +"D= c #4B637C", +"E= c #567694", +"F= c #26313C", +"G= c #15191F", +"H= c #4D647A", +"I= c #252F39", +"J= c #5D6163", +"K= c #DDE9F5", +"L= c #CEDFEE", +"M= c #8898A5", +"N= c #B0CBDC", +"O= c #BFDAEC", +"P= c #BFDBEC", +"Q= c #BBDAEC", +"R= c #BAD7EA", +"S= c #6B808F", +"T= c #7297B0", +"U= c #8CB8D1", +"V= c #95C1D9", +"W= c #91BCD6", +"X= c #86AEC8", +"Y= c #7496B3", +"Z= c #6587A2", +"`= c #384958", +" - c #323F4B", +".- c #546A7C", +"+- c #6C88A1", +"@- c #779AB1", +"#- c #658297", +"$- c #3B4A58", +"%- c #33404B", +"&- c #202830", +"*- c #577287", +"=- c #86B1CC", +"-- c #86ACC0", +";- c #6E8797", +">- c #9CC7DF", +",- c #92BCD5", +"'- c #91BCD5", +")- c #8EB6CE", +"!- c #344453", +"~- c #263039", +"{- c #364452", +"]- c #2B3643", +"^- c #2A2D2E", +"/- c #E1EBF4", +"(- c #D2E4F3", +"_- c #A0B2C3", +":- c #8094A1", +"<- c #BAD8EB", +"[- c #B8D6EA", +"}- c #485A6A", +"|- c #789FB9", +"1- c #90BBD3", +"2- c #94C4DC", +"3- c #88B3CD", +"4- c #7A9EB9", +"5- c #698BA8", +"6- c #4D677C", +"7- c #151A1E", +"8- c #1A2125", +"9- c #171C21", +"0- c #1D2329", +"a- c #1D262E", +"b- c #486073", +"c- c #6A8CAA", +"d- c #7CA2BE", +"e- c #90BDD7", +"f- c #9AC5DE", +"g- c #7493A2", +"h- c #708B99", +"i- c #8CB7D1", +"j- c #7494AB", +"k- c #68889F", +"l- c #6A8FA5", +"m- c #7BA2BC", +"n- c #171D21", +"o- c #1D262F", +"p- c #212B36", +"q- c #09090B", +"r- c #BBC2C9", +"s- c #D4E4F2", +"t- c #C1D9EB", +"u- c #44515A", +"v- c #92B5C9", +"w- c #6B8795", +"x- c #4E687E", +"y- c #7EA6C0", +"z- c #91BED8", +"A- c #93BFD9", +"B- c #8CB5D0", +"C- c #7DA4BE", +"D- c #6F92AE", +"E- c #6687A5", +"F- c #526C85", +"G- c #415669", +"H- c #384655", +"I- c #6589A4", +"J- c #6E92AE", +"K- c #80A8C2", +"L- c #92BCD6", +"M- c #91BFD8", +"N- c #799AAF", +"O- c #6A8796", +"P- c #81AAC3", +"Q- c #577187", +"R- c #1F2930", +"S- c #192027", +"T- c #1B2227", +"U- c #0D1010", +"V- c #0E1012", +"W- c #070709", +"X- c #5C6062", +"Y- c #DCE8F3", +"Z- c #C4DCEF", +"`- c #9BB3C6", +" ; c #3A424F", +".; c #313A44", +"+; c #35424C", +"@; c #374655", +"#; c #6E91AD", +"$; c #87B2CC", +"%; c #799EBA", +"&; c #618298", +"*; c #7095AF", +"=; c #435663", +"-; c #80A7C0", +";; c #95C4DC", +">; c #779CB3", +",; c #526D7E", +"'; c #516A7A", +"); c #526B7B", +"!; c #465764", +"~; c #34414E", +"{; c #5C7E9A", +"]; c #2B3741", +"^; c #4B657F", +"/; c #5C7D9C", +"(; c #557088", +"_; c #0F0F10", +":; c #B9C2CA", +"<; c #CCDFEF", +"[; c #B4CDE1", +"}; c #8DAEC8", +"|; c #6F93AE", +"1; c #678CA6", +"2; c #6E92AF", +"3; c #81A8C1", +"4; c #8FBBD5", +"5; c #8DB9D2", +"6; c #6D8FA2", +"7; c #586F82", +"8; c #394851", +"9; c #86B0C6", +"0; c #85AFC8", +"a; c #6F94AF", +"b; c #698DA8", +"c; c #6889A7", +"d; c #5E7E9F", +"e; c #475D75", +"f; c #2E3C4A", +"g; c #5D7E9D", +"h; c #405465", +"i; c #36393B", +"j; c #D7E5F1", +"k; c #A4C5DC", +"l; c #668496", +"m; c #7595AB", +"n; c #7798AE", +"o; c #97C2DA", +"p; c #789DB3", +"q; c #8BB1C8", +"r; c #93C0D9", +"s; c #8BB5CF", +"t; c #85AFC9", +"u; c #82AAC6", +"v; c #5F7C95", +"w; c #1E252C", +"x; c #54728E", +"y; c #587899", +"z; c #5A7B9B", +"A; c #2D3843", +"B; c #798086", +"C; c #D1E3F1", +"D; c #B7D3E8", +"E; c #7E98AB", +"F; c #181C1F", +"G; c #46525F", +"H; c #80A1B8", +"I; c #99C3DB", +"J; c #85ACC2", +"K; c #21272D", +"L; c #0A0B0D", +"M; c #53718C", +"N; c #577797", +"O; c #1B2229", +"P; c #0D0E0F", +"Q; c #B3BDC4", +"R; c #CADDED", +"S; c #B4D3E7", +"T; c #2B3339", +"U; c #2F3840", +"V; c #7899AC", +"W; c #93C1D9", +"X; c #8FBCD5", +"Y; c #8BB6D1", +"Z; c #8DB8D2", +"`; c #92BFD8", +" > c #678092", +".> c #547089", +"+> c #5C7F9B", +"@> c #1F262E", +"#> c #202223", +"$> c #B1BECB", +"%> c #C3D9EB", +"&> c #7B8D99", +"*> c #708B9A", +"=> c #85ABC1", +"-> c #7FA3BA", +";> c #92BBD3", +">> c #7CA0B4", +",> c #97BDD4", +"'> c #657E8F", +")> c #93BDD4", +"!> c #88ADC7", +"~> c #6F94AE", +"{> c #526A7E", +"]> c #65849B", +"^> c #799DBB", +"/> c #84AFC9", +"(> c #8FB9D2", +"_> c #323C45", +":> c #516C84", +"<> c #658AA4", +"[> c #5B7C9B", +"}> c #2E3A49", +"|> c #2A3038", +"1> c #252D3A", +"2> c #1B1E20", +"3> c #ADBFCF", +"4> c #C0D6E7", +"5> c #B0CDE2", +"6> c #8EB3C9", +"7> c #526975", +"8> c #6B899D", +"9> c #597183", +"0> c #90BAD5", +"a> c #94C2DA", +"b> c #82ABC5", +"c> c #495E6E", +"d> c #82A8C3", +"e> c #81A4BA", +"f> c #7594A5", +"g> c #87ABC3", +"h> c #4D6573", +"i> c #6689A6", +"j> c #526E85", +"k> c #243037", +"l> c #607B96", +"m> c #7699B6", +"n> c #789EB5", +"o> c #303D48", +"p> c #7498B4", +"q> c #7094AF", +"r> c #597792", +"s> c #242F39", +"t> c #1A1D25", +"u> c #374553", +"v> c #4D677D", +"w> c #14191E", +"x> c #040505", +"y> c #171A1D", +"z> c #8A9FAD", +"A> c #BCD9EC", +"B> c #B5D3E7", +"C> c #A2CAE1", +"D> c #9DC7DE", +"E> c #9EC7DD", +"F> c #3B4A57", +"G> c #455867", +"H> c #98C2DB", +"I> c #85B0CC", +"J> c #7496B2", +"K> c #4C606F", +"L> c #6E8EA3", +"M> c #7EA0B6", +"N> c #91BBD3", +"O> c #8DB7D1", +"P> c #90BAD4", +"Q> c #96C1DA", +"R> c #3B4853", +"S> c #688AA5", +"T> c #4C657A", +"U> c #1B2026", +"V> c #2B3C44", +"W> c #5F7A90", +"X> c #587284", +"Y> c #536978", +"Z> c #88B1CC", +"`> c #759AB8", +" , c #617E9A", +"., c #556F85", +"+, c #20272E", +"@, c #323D48", +"#, c #333E4A", +"$, c #060707", +"%, c #4A5159", +"&, c #ACC3D5", +"*, c #ACCFE5", +"=, c #5A6874", +"-, c #AACDE1", +";, c #9CC6DC", +">, c #35414C", +",, c #769AB2", +"', c #80AAC5", +"), c #6F92AB", +"!, c #38464F", +"~, c #7EA4B9", +"{, c #97C3DC", +"], c #7A9FB6", +"^, c #3F505C", +"/, c #6D8DA6", +"(, c #1E282E", +"_, c #080909", +":, c #090A0C", +"<, c #344452", +"[, c #3B4857", +"}, c #7799AE", +"|, c #8DB6D1", +"1, c #66869E", +"2, c #3D4957", +"3, c #536C84", +"4, c #353F4C", +"5, c #111215", +"6, c #65727E", +"7, c #A6BCCD", +"8, c #5D6972", +"9, c #AED0E6", +"0, c #99C5DC", +"a, c #8DB5D0", +"b, c #8DB5CE", +"c, c #90BBD5", +"d, c #84AAC5", +"e, c #8EBBD5", +"f, c #80A7C1", +"g, c #6C8DA2", +"h, c #85AFC6", +"i, c #61839B", +"j, c #374352", +"k, c #576D83", +"l, c #80A6C1", +"m, c #81A4BB", +"n, c #111315", +"o, c #111418", +"p, c #4C6378", +"q, c #33424C", +"r, c #37454D", +"s, c #8DB4CF", +"t, c #7397B3", +"u, c #3A495A", +"v, c #0D0F13", +"w, c #27303A", +"x, c #272E36", +"y, c #0F1012", +"z, c #90A4B2", +"A, c #A8CBE2", +"B, c #91BCD4", +"C, c #80ABC3", +"D, c #567083", +"E, c #67899D", +"F, c #94C2DB", +"G, c #95C1DB", +"H, c #779CB2", +"I, c #60849E", +"J, c #64849F", +"K, c #1A1F22", +"L, c #405061", +"M, c #79A1BD", +"N, c #324051", +"O, c #6183A1", +"P, c #6B8FAD", +"Q, c #6485A2", +"R, c #34444F", +"S, c #060606", +"T, c #2D3339", +"U, c #B2CBDF", +"V, c #94BCD5", +"W, c #7DA2BA", +"X, c #3F5264", +"Y, c #5A7991", +"Z, c #7195B3", +"`, c #7BA5BD", +" ' c #81AAC6", +".' c #88B2CC", +"+' c #8EBBD4", +"@' c #8AB2CC", +"#' c #82ADC7", +"$' c #7092A5", +"%' c #95C2DA", +"&' c #41525F", +"*' c #6387A3", +"=' c #475F72", +"-' c #21282F", +";' c #5B7288", +">' c #0D0F11", +",' c #0B0E11", +"'' c #212C36", +")' c #26323C", +"!' c #161B20", +"~' c #55616D", +"{' c #9BB9D0", +"]' c #799EB6", +"^' c #27313A", +"/' c #1A222B", +"(' c #5D7E99", +"_' c #6587A4", +":' c #6789A6", +"<' c #6B8EAB", +"[' c #628097", +"}' c #6D8B9D", +"|' c #769AAF", +"1' c #6E91A9", +"2' c #6C8EAD", +"3' c #6E91AF", +"4' c #3C4D59", +"5' c #8BB1CB", +"6' c #232D32", +"7' c #13171B", +"8' c #232B32", +"9' c #839AAF", +"0' c #789BB3", +"a' c #283138", +"b' c #0C0E0F", +"c' c #242B33", +"d' c #3D4D5B", +"e' c #435768", +"f' c #4B6176", +"g' c #283137", +"h' c #8DB4CC", +"i' c #41535E", +"j' c #405362", +"k' c #3C4F60", +"l' c #3C4E5B", +"m' c #2B353E", +"n' c #526876", +"o' c #92BAD3", +"p' c #1B1F23", +"q' c #31383F", +"r' c #7F9CB6", +"s' c #21292F", +"t' c #29333F", +"u' c #1F252E", +"v' c #090A0E", +"w' c #4D626E", +"x' c #96BDD3", +"y' c #191D20", +"z' c #13181B", +"A' c #80A4BC", +"B' c #1B2027", +"C' c #5D7182", +"D' c #2C383F", +"E' c #364857", +"F' c #1A2028", +"G' c #333F49", +"H' c #7FA2B5", +"I' c #4A5E6E", +"J' c #232E35", +"K' c #252D35", +"L' c #2F3A41", +"M' c #0A0B0E", +"N' c #14191D", +"O' c #5A717F", +"P' c #212931", +"Q' c #222B34", +"R' c #101216", +"S' c #21272B", +" ", +" ", +" ", +" . ", +" + ", +" @ # $ % ", +" & * = - ; ", +" > , ' ) ! ~ { ] ", +" ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a ", +" b c d e f g h i j k l m n o p q r s t u v w x ", +" y z A B C D E F G H I J K L M N O P Q R S T U U V W X Y ", +" Z ` ...+.@.#.$.%.O &.*.=.-.;.>.,.'.).!.~.~.~.{.].^./.(._.:.<. ", +" b [.}.|.#.1.2.3.4.{.~.~.~.~.5.6.5.~.7.8.{.~.~.~.~.9.0.a.b.].c. ", +" d.e.f.g.h.i.j.k.{.~.~.~.~.l.~.m.% n.~.o.{.{.~.~.~.~.p.V 9.~.q.r. ", +" s.t.u.v.w.x.u y.z.A.B.5.~.~.5.C.D.E.F.~.~.G.~.~.~.G.H.I.J.~.~.J.K.L. M.N. ", +" O.P.Q.R.S.T.U.V.W.X.Y.Z.`.~.~.5. +.+++@+U ~.~.~.~.~.#+$+%+,.~.~.G.&+*+=+-+;+ ", +" >+,+Q.'+)+!+~+{+]+^+/+(+_+:+<+~.[+}+U 9.|+5.~.~.~.~.1+2+3+4+5+~.].6+7+8+9+0+ ", +" a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+5.U ~.U r+s+~.~.~.t+u+v+w+x+y+~.z+A+t+B+C+D+E+ F+G+ ", +" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+V ~.~.~.~.U ~.~.~.o.9.{.Z+`+9.~.~.~.V @.@+@@@#@ $@%@&@*@ ", +" =@-@;@>@,@'@'.)@!@~@{@]@^@/@l+(@_@:@<@~.~.~.U {.~.~.~.{.~.~.{.[@~.~.~.~.}@|@1@2@3@4@5@6@7@8@ ", +" 9@0@a@b@c@d@-.e@f@g@h@i@j@k@l@V+m@n@o@p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.q@r@s@t@u@v@w@x@y@ ", +"z@A@B@C@D@E@X F@G@H@R I@J@K@L@M@N@O@P@Q@R@o+S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.9.U@V@W@X@<+V Y@Z@`@ # ", +" .#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.U (#_#:#<#p@{.[#}#|#1#2# ", +" 3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.l#m#9.{.~.n#o#p#q#r#s# ", +" t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#% J#K#S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.L#0.l.~.~.{.M#N#O#P#Q#R# ", +" S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$a#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.o.o.;$9.G.~.>$,$'$)$!$~${$]$ ", +" ^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$:+<+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.G.0$a$b$c$d$e$f$g$h$i$j$k$ ", +" [ l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$M#p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.;$D$E$F$G$H$I$J$K$L$ ", +" M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%<+{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.#%$%%%p@&%*%=%-%;%>%,% ", +" '%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%2%3%-$T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.4%5%U p@6%7%8%9%0%a%y ", +" b%c%d%e%f%g%h%i%G.[#j%k%l%m%n%o%p%@%q%{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.~.~.~.~.~.V G.}@r%s%t%u%v%w%M.x%y%z%A% ", +" B%C%D%E%F%G%H%I%V o.<@J%K%L%M%N%O%P%p@~.~.~.~.~.~.~.~.~.U ~.~.U 9.Q%{.~.~.~.~.~.{.%%U {.~.~.{.v@R%S%T%U%V%W% X%$ ", +" Y%Z%`% &.&+&@&#&U ~.{.$&%&&&*&=&-&T@~.~.~.~.~.~.~.~.~.~.~.;&>&,&'&)&!&5+~.~.~.~.{.~&{&]&9.~.p@^&/&(&_&:& <&[&}&|& ", +" 1&2&3&4&5&6&7&8&9&l.~.{.V 0&a&b&c&~.~.~.~.~.~.~.5.d&e&f&g&h&i&j&k&l&m&n&~.~.G.~.~.~.o&p&q&r&s&t&u&v& w&x&y&z&A&B& ", +" C&2&D&E&F&G&G&H&I&J&U ~.~.U K&L&,.~.~.~.~.~.~.~.U M&N&O&P&Q&R&S&T&U&V&W&X&].{.~.~.{./#Y&Z&`& *.*+*@* (.#*$*%*&***=* ", +" -*;*>*,*'*)*!*~*{*]*^*~.5.{.5./*U ~.~.~.~.~.~.{.[#(*_*:*<*[*[*}*|*1*2*3*4*5*U ~.~.6*7*8*9*0*a*b*c*d*e*f*g*h*i*%*j*k*<%l* ", +" m*n*o*p*q*r*s*t*u*v*w*1+~.~.~.~.~.~.~.~.~.~.~.x*y*z*A*B*C*D*E*V U ~.G.~.:.F*G*l.{.R%X+H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X* ", +" Y*Z*D&`* =.=+=@=#=$=%=&={.~.~.~.~.~.~.~.~.~.~.<+*===-=;=>=,='=)=[#p@!=~={=]=^=/=(=a#&%_=:=<=-#[=}=k$|=1=2=3=4=5=6=7=8=9= ", +" 0=a=b=c=d=e=f=g=h=i=j=k=l=5.~.~.~.~.~.~.~.~.~.V -$m=n===o=p=q=r=s=t=:+u=v=w=x=y=z=A=J.V U ~.V [#B=C=D=1=E=F= G=H=I= ", +" J=K=L=M=N=O=P=Q=R=S=T=U=V=5.U ~.~.~.~.~.~.~.~.~.{.x*W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-9.x*)=,-'-)-c.!-~- {-]- ", +" ^-/-(-_-:-<-<-[-%.}-|-1-T@~.{.~.~.~.~.~.~.~.~.~.~.V 2-^&3-4-5-6-7-8-9-0-a-b-c-d-e-f-g-h-V@i-j-k-l-T=m-7@n- o-p- ", +" q-r-s-t-u-v-!+2*w-x-y-z-V ~.~.~.~.~.~.~.~.~.~.~.~.~.~./#A-B-C-D-E-F-G-H-I-J-K-L-<@M-W=N-O-P-Q-R-<&S-T-U-V- W- ", +" X-Y-Z-`- ;.;+;@;#;$;q+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~./#v@W=N#%;&;*;=;-;s=-#;;>;,;';);!;~;{;];^;/;(;H+ ", +" _;:;<;[;};|;1;2;3;4;{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.T@-#5;6;7;8;9;[#V <+0;a;b;c;E-d;e;f;|=g;h; ", +" i;j;V#k;F.l;m;n;o;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.{.p@S@s=p;q;~.~.{.r;s;t;u;~$v;w;x;y;z;A; ", +" H+B;C;D;E;F;G;H;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.U ~.~.V E*E*V ~.~.~.{.T@/#I;J;K;L;M;y;N;O; ", +" P;Q;R;S;T;U;~.{.~.~.~.~.~.~.~.~.l.U {.p@~.~.{.V ~.~.5+V;].~.~.~.~.{.{.p@W;X;Y;Z;`;/# >W..>+>N;@> ", +" #>$>%>&>*>G.~.~.~.~.~.~.~.~.{.`.=>V=->;>~.n##&>>T@,>'>].~.~.~.~.~.)>!>i$~>{>]>^>/>(>_>:><>[>}> |>1> ", +" 2>3>4>5>U@U ~.~.~.~.~.~.~.{.6>7>8>9>0>a#a>b>c>d>e>f>~.~.~.V ~.~.g>h>i>1=j>,%k>l>m>n>o>p>q>r>s>t>u>v>w> ", +" x>y>z>A>B>C>5+D>E>~.~.~.~.{.%&F>G>3;s%{.H>I>J>K>L>M>~.V N>O>P>x*Q>R>S>T>U> X%V>W>X>Y>Z>P-`> ,.,+, ", +" @,#,$,%,&,1.*,=,-,;,{.p@V {.X@>,,,Z;V ~.5.`;',),!,~,~.{,],^,/,/&-$F$(,_, :,<,[,},<@|,1,2, ", +" B&3,4, 5,6,7,8,9,0,`;a,b,B+c,d,s=<+~.~.~.a#e,f,g,h,V -#9$i,j,k,l,m,n, o,p,q,r,s,t,u,v, ", +" w,x, y,z,A,B,C,D,E,o@F,G,<+~.~.~.~.~.;;P>j%}@p@H,]#I,J,K,L,M,=+ N,O,P,Q,R,S, ", +" T,U,V,W,X,Y,Z,`, '.'+'x*~.{.O+@%@'#'$'%'a#&'*'='-' ~;;'>' ,''')'!' ", +" ~'{']'^'/'('_'_':'<'['}'{.V |'1'2'3'4'5'}@6'7' 8'K; ", +" v&9'0'a' b'c'd'e'f'1@g'h'G.i'j'k'l'm'n'o'p' y ", +" q'r's' t'u'H+ v'w'x'y' z'A'B' ", +" C'D' E'F' G'H' I'J' ", +" K'L' M' N'O' P'Q' ", +" R' S' ", +" ", +" ", +" ", +" "}; diff --git a/obj/.gitkeep b/obj/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..65d798a --- /dev/null +++ b/src/main.c @@ -0,0 +1,62 @@ +// C/C++ File +// AUTHOR: foton +// FILE: main.c +// ROLE: to rule them all +// CREATED: 2017-01-30 21:51:28 +// MODIFIED: 2017-01-30 23:25:14 + + +#include +#include "libft.h" +#include "mlx.h" +#include + +void put_square(int side, int init_x, int init_y, void *mlx, void *mlx_w, int hex_rgb) +{ + struct timespec tw = {0,10}; + struct timespec tr; + + int temp_y; + + temp_y = init_y; + while(init_x < side) + { + init_y = temp_y; + while(init_y < side) + { + mlx_pixel_put(mlx, mlx_w, init_x, init_y, hex_rgb); + nanosleep(&tw, &tr); + init_y++; + } + init_x++; + } +} + +int main(void) +{ + void *mlx; + void *mlx_window; + int y; + int x; + int hex; + + mlx = mlx_init(); + mlx_window = mlx_new_window(mlx, 400, 400, "mlx test"); + y = 50; + hex = 0xFFA6FB; + while (y < 100) + { + x = 50; + while (x < 100) + { + put_square(100, x, y, mlx, mlx_window, hex); + mlx_clear_window(mlx, mlx_window); + printf("y = %d\n", y); + hex += 0xFFA6FB; + x++; + } + y++; + } + mlx_loop(mlx); + return (0); +}