From 59e2fdde4a22bba2c0a5ad10a835f0e1699b28cf Mon Sep 17 00:00:00 2001 From: hugogogo Date: Sun, 18 Jul 2021 14:38:40 +0200 Subject: [PATCH] debut du projet --- Makefile | 78 + builds/fdf.o | Bin 0 -> 107264 bytes fdf | Bin 0 -> 90832 bytes includes/fdf.h | 31 + libft | 1 + minilibx-linux-master/Makefile | 22 + minilibx-linux-master/Makefile.gen | 48 + minilibx-linux-master/Makefile.mk | 48 + minilibx-linux-master/README.md | 43 + minilibx-linux-master/configure | 95 ++ minilibx-linux-master/libmlx.a | Bin 0 -> 110658 bytes minilibx-linux-master/libmlx_Linux.a | Bin 0 -> 110658 bytes minilibx-linux-master/man/man1/mlx.1 | 93 ++ minilibx-linux-master/man/man1/mlx_loop.1 | 141 ++ .../man/man1/mlx_new_image.1 | 192 +++ .../man/man1/mlx_new_window.1 | 79 + .../man/man1/mlx_pixel_put.1 | 84 + minilibx-linux-master/man/man3/mlx.1 | 93 ++ minilibx-linux-master/man/man3/mlx_loop.1 | 141 ++ .../man/man3/mlx_new_image.1 | 192 +++ .../man/man3/mlx_new_window.1 | 79 + .../man/man3/mlx_pixel_put.1 | 81 + minilibx-linux-master/mlx.h | 139 ++ minilibx-linux-master/mlx_clear_window.c | 21 + minilibx-linux-master/mlx_clear_window.o | Bin 0 -> 1512 bytes minilibx-linux-master/mlx_destroy_display.c | 18 + minilibx-linux-master/mlx_destroy_display.o | Bin 0 -> 1424 bytes minilibx-linux-master/mlx_destroy_image.c | 31 + minilibx-linux-master/mlx_destroy_image.o | Bin 0 -> 1856 bytes minilibx-linux-master/mlx_destroy_window.c | 38 + minilibx-linux-master/mlx_destroy_window.o | Bin 0 -> 1896 bytes minilibx-linux-master/mlx_expose_hook.c | 22 + minilibx-linux-master/mlx_expose_hook.o | Bin 0 -> 1256 bytes minilibx-linux-master/mlx_ext_randr.c | 104 ++ minilibx-linux-master/mlx_flush_event.c | 25 + minilibx-linux-master/mlx_flush_event.o | Bin 0 -> 1648 bytes minilibx-linux-master/mlx_get_color_value.c | 33 + minilibx-linux-master/mlx_get_color_value.o | Bin 0 -> 1504 bytes minilibx-linux-master/mlx_get_data_addr.c | 23 + minilibx-linux-master/mlx_get_data_addr.o | Bin 0 -> 1256 bytes minilibx-linux-master/mlx_hook.c | 40 + minilibx-linux-master/mlx_hook.o | Bin 0 -> 1848 bytes minilibx-linux-master/mlx_init.c | 97 ++ minilibx-linux-master/mlx_init.o | Bin 0 -> 4024 bytes minilibx-linux-master/mlx_int.h | 138 ++ .../mlx_int_anti_resize_win.c | 28 + .../mlx_int_anti_resize_win.o | Bin 0 -> 1768 bytes minilibx-linux-master/mlx_int_do_nothing.c | 16 + minilibx-linux-master/mlx_int_do_nothing.o | Bin 0 -> 1240 bytes minilibx-linux-master/mlx_int_get_visual.c | 39 + minilibx-linux-master/mlx_int_get_visual.o | Bin 0 -> 1656 bytes minilibx-linux-master/mlx_int_param_event.c | 100 ++ minilibx-linux-master/mlx_int_param_event.o | Bin 0 -> 3848 bytes .../mlx_int_set_win_event_mask.c | 34 + .../mlx_int_set_win_event_mask.o | Bin 0 -> 2328 bytes .../mlx_int_str_to_wordtab.c | 113 ++ .../mlx_int_str_to_wordtab.o | Bin 0 -> 2416 bytes .../mlx_int_wait_first_expose.c | 23 + .../mlx_int_wait_first_expose.o | Bin 0 -> 1680 bytes minilibx-linux-master/mlx_key_hook.c | 22 + minilibx-linux-master/mlx_key_hook.o | Bin 0 -> 1248 bytes minilibx-linux-master/mlx_lib_xpm.c | 96 ++ minilibx-linux-master/mlx_loop.c | 43 + minilibx-linux-master/mlx_loop.o | Bin 0 -> 1968 bytes minilibx-linux-master/mlx_loop_hook.c | 21 + minilibx-linux-master/mlx_loop_hook.o | Bin 0 -> 1232 bytes minilibx-linux-master/mlx_mouse.c | 48 + minilibx-linux-master/mlx_mouse.o | Bin 0 -> 2664 bytes minilibx-linux-master/mlx_mouse_hook.c | 22 + minilibx-linux-master/mlx_mouse_hook.o | Bin 0 -> 1256 bytes minilibx-linux-master/mlx_new_image.c | 155 ++ minilibx-linux-master/mlx_new_image.o | Bin 0 -> 5384 bytes minilibx-linux-master/mlx_new_window.c | 62 + minilibx-linux-master/mlx_new_window.o | Bin 0 -> 2360 bytes minilibx-linux-master/mlx_pixel_put.c | 26 + minilibx-linux-master/mlx_pixel_put.o | Bin 0 -> 1848 bytes .../mlx_put_image_to_window.c | 37 + .../mlx_put_image_to_window.o | Bin 0 -> 2088 bytes minilibx-linux-master/mlx_rgb.c | 764 +++++++++ minilibx-linux-master/mlx_rgb.o | Bin 0 -> 38592 bytes minilibx-linux-master/mlx_screen_size.c | 13 + minilibx-linux-master/mlx_screen_size.o | Bin 0 -> 1608 bytes minilibx-linux-master/mlx_set_font.c | 30 + minilibx-linux-master/mlx_set_font.o | Bin 0 -> 1704 bytes minilibx-linux-master/mlx_string_put.c | 26 + minilibx-linux-master/mlx_string_put.o | Bin 0 -> 1952 bytes minilibx-linux-master/mlx_xpm.c | 342 ++++ minilibx-linux-master/mlx_xpm.c.ok | 310 ++++ minilibx-linux-master/mlx_xpm.o | Bin 0 -> 9696 bytes minilibx-linux-master/rgb2c.pl | 38 + minilibx-linux-master/test/Makefile.gen | 26 + minilibx-linux-master/test/Makefile.mk | 24 + minilibx-linux-master/test/main.c | 287 ++++ minilibx-linux-master/test/main.o | Bin 0 -> 15656 bytes minilibx-linux-master/test/mlx-test | Bin 0 -> 77032 bytes minilibx-linux-master/test/new_win.c | 31 + minilibx-linux-master/test/open.xpm | 1439 +++++++++++++++++ minilibx-linux-master/test/open24.xpm | 230 +++ minilibx-linux-master/test/open30.xpm | 1439 +++++++++++++++++ srcs/fdf.c | 171 ++ 100 files changed, 8325 insertions(+) create mode 100644 Makefile create mode 100644 builds/fdf.o create mode 100755 fdf create mode 100644 includes/fdf.h create mode 120000 libft create mode 100644 minilibx-linux-master/Makefile create mode 100644 minilibx-linux-master/Makefile.gen create mode 100644 minilibx-linux-master/Makefile.mk create mode 100644 minilibx-linux-master/README.md create mode 100755 minilibx-linux-master/configure create mode 100644 minilibx-linux-master/libmlx.a create mode 100644 minilibx-linux-master/libmlx_Linux.a create mode 100644 minilibx-linux-master/man/man1/mlx.1 create mode 100644 minilibx-linux-master/man/man1/mlx_loop.1 create mode 100644 minilibx-linux-master/man/man1/mlx_new_image.1 create mode 100644 minilibx-linux-master/man/man1/mlx_new_window.1 create mode 100644 minilibx-linux-master/man/man1/mlx_pixel_put.1 create mode 100644 minilibx-linux-master/man/man3/mlx.1 create mode 100644 minilibx-linux-master/man/man3/mlx_loop.1 create mode 100644 minilibx-linux-master/man/man3/mlx_new_image.1 create mode 100644 minilibx-linux-master/man/man3/mlx_new_window.1 create mode 100644 minilibx-linux-master/man/man3/mlx_pixel_put.1 create mode 100644 minilibx-linux-master/mlx.h create mode 100644 minilibx-linux-master/mlx_clear_window.c create mode 100644 minilibx-linux-master/mlx_clear_window.o create mode 100644 minilibx-linux-master/mlx_destroy_display.c create mode 100644 minilibx-linux-master/mlx_destroy_display.o create mode 100644 minilibx-linux-master/mlx_destroy_image.c create mode 100644 minilibx-linux-master/mlx_destroy_image.o create mode 100644 minilibx-linux-master/mlx_destroy_window.c create mode 100644 minilibx-linux-master/mlx_destroy_window.o create mode 100644 minilibx-linux-master/mlx_expose_hook.c create mode 100644 minilibx-linux-master/mlx_expose_hook.o create mode 100644 minilibx-linux-master/mlx_ext_randr.c create mode 100644 minilibx-linux-master/mlx_flush_event.c create mode 100644 minilibx-linux-master/mlx_flush_event.o create mode 100644 minilibx-linux-master/mlx_get_color_value.c create mode 100644 minilibx-linux-master/mlx_get_color_value.o create mode 100644 minilibx-linux-master/mlx_get_data_addr.c create mode 100644 minilibx-linux-master/mlx_get_data_addr.o create mode 100644 minilibx-linux-master/mlx_hook.c create mode 100644 minilibx-linux-master/mlx_hook.o create mode 100644 minilibx-linux-master/mlx_init.c create mode 100644 minilibx-linux-master/mlx_init.o create mode 100644 minilibx-linux-master/mlx_int.h create mode 100644 minilibx-linux-master/mlx_int_anti_resize_win.c create mode 100644 minilibx-linux-master/mlx_int_anti_resize_win.o create mode 100644 minilibx-linux-master/mlx_int_do_nothing.c create mode 100644 minilibx-linux-master/mlx_int_do_nothing.o create mode 100644 minilibx-linux-master/mlx_int_get_visual.c create mode 100644 minilibx-linux-master/mlx_int_get_visual.o create mode 100644 minilibx-linux-master/mlx_int_param_event.c create mode 100644 minilibx-linux-master/mlx_int_param_event.o create mode 100644 minilibx-linux-master/mlx_int_set_win_event_mask.c create mode 100644 minilibx-linux-master/mlx_int_set_win_event_mask.o create mode 100644 minilibx-linux-master/mlx_int_str_to_wordtab.c create mode 100644 minilibx-linux-master/mlx_int_str_to_wordtab.o create mode 100644 minilibx-linux-master/mlx_int_wait_first_expose.c create mode 100644 minilibx-linux-master/mlx_int_wait_first_expose.o create mode 100644 minilibx-linux-master/mlx_key_hook.c create mode 100644 minilibx-linux-master/mlx_key_hook.o create mode 100644 minilibx-linux-master/mlx_lib_xpm.c create mode 100644 minilibx-linux-master/mlx_loop.c create mode 100644 minilibx-linux-master/mlx_loop.o create mode 100644 minilibx-linux-master/mlx_loop_hook.c create mode 100644 minilibx-linux-master/mlx_loop_hook.o create mode 100644 minilibx-linux-master/mlx_mouse.c create mode 100644 minilibx-linux-master/mlx_mouse.o create mode 100644 minilibx-linux-master/mlx_mouse_hook.c create mode 100644 minilibx-linux-master/mlx_mouse_hook.o create mode 100644 minilibx-linux-master/mlx_new_image.c create mode 100644 minilibx-linux-master/mlx_new_image.o create mode 100644 minilibx-linux-master/mlx_new_window.c create mode 100644 minilibx-linux-master/mlx_new_window.o create mode 100644 minilibx-linux-master/mlx_pixel_put.c create mode 100644 minilibx-linux-master/mlx_pixel_put.o create mode 100644 minilibx-linux-master/mlx_put_image_to_window.c create mode 100644 minilibx-linux-master/mlx_put_image_to_window.o create mode 100644 minilibx-linux-master/mlx_rgb.c create mode 100644 minilibx-linux-master/mlx_rgb.o create mode 100644 minilibx-linux-master/mlx_screen_size.c create mode 100644 minilibx-linux-master/mlx_screen_size.o create mode 100644 minilibx-linux-master/mlx_set_font.c create mode 100644 minilibx-linux-master/mlx_set_font.o create mode 100644 minilibx-linux-master/mlx_string_put.c create mode 100644 minilibx-linux-master/mlx_string_put.o create mode 100644 minilibx-linux-master/mlx_xpm.c create mode 100644 minilibx-linux-master/mlx_xpm.c.ok create mode 100644 minilibx-linux-master/mlx_xpm.o create mode 100755 minilibx-linux-master/rgb2c.pl create mode 100644 minilibx-linux-master/test/Makefile.gen create mode 100644 minilibx-linux-master/test/Makefile.mk create mode 100644 minilibx-linux-master/test/main.c create mode 100644 minilibx-linux-master/test/main.o create mode 100755 minilibx-linux-master/test/mlx-test create mode 100644 minilibx-linux-master/test/new_win.c create mode 100644 minilibx-linux-master/test/open.xpm create mode 100644 minilibx-linux-master/test/open24.xpm create mode 100644 minilibx-linux-master/test/open30.xpm create mode 100644 srcs/fdf.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ada4f97 --- /dev/null +++ b/Makefile @@ -0,0 +1,78 @@ + +# have the .c in a "srcs/" directory +# have the .h in a "includes/" directory + +# - - - - - - - - - - - - - - # +# variables names # +# - - - - - - - - - - - - - - # +# name = value \ +# value +# name is case sensitive + +# VPATH where to look for rules preriquisites not found in "./" +# best to use only for ".c", not ".o" nor ".h" +NAME = fdf +CC = gcc +VPATH = srcs + +IDIR = ./includes +_DEPS = fdf.h +DEPS = $(_DEPS:%.h=$(IDIR)/%.h) + +LDIR = ./libft +_LIBS = libft.a +LIBS = $(_LIBS:lib%.a=%) + +SRCS = fdf.c + +ODIR = ./builds +OBJS = $(SRCS:%.c=$(ODIR)/%.o) + +# flag -g generates debug informations, g3 is maximal version +CFLAGS = -I$(IDIR) -g3 -Wall -Wextra -Werror +LFLAGS = -L$(LDIR) -l$(LIBS) +CFLAGS += -I./minilibx-linux-master +LFLAGS += -lm -lmlx -lXext -lX11 -L./minilibx-linux-master + +# - - - - - - - - - - - - - - # +# rules to execute # +# - - - - - - - - - - - - - - # +# target: prerequisites ... +# recipe ... + + +all: $(NAME) + +# it verify if anything has changed in .c and .h files +# then it makes LDIR library, then it compiles NAME +$(NAME): $(ODIR) $(OBJS) $(DEPS) + make -C $(LDIR) + $(CC) $(CFLAGS) -o $@ $(OBJS) $(LFLAGS) + +# create "builds/" if doesn't exist +$(ODIR): + mkdir -p $@ + +# if a file.c has been modified, it's recompiled in object file.o +$(ODIR)/%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + +debug: CFLAGS += -fsanitize=address +debug: clean $(NAME) + +leaks: clean $(NAME) + valgrind --leak-check=full --show-leak-kinds=all ./$(NAME) + +clean: + /bin/rm -f $(OBJS) + +fclean: clean + make fclean -C $(LDIR) + /bin/rm -rf $(ODIR) + /bin/rm -f $(NAME) + /bin/rm -rf a.out a.out.dSYM + +re: fclean all + +.PHONY: all clean fclean re gcc + diff --git a/builds/fdf.o b/builds/fdf.o new file mode 100644 index 0000000000000000000000000000000000000000..731ae54a671f34e0db9d345745dc08adedba1dc6 GIT binary patch literal 107264 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 literal 0 HcmV?d00001 diff --git a/fdf b/fdf new file mode 100755 index 0000000000000000000000000000000000000000..e6962680022974d762899f1627faec2cbc3ed643 GIT binary patch literal 90832 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 literal 0 HcmV?d00001 diff --git a/includes/fdf.h b/includes/fdf.h new file mode 100644 index 0000000..03101b1 --- /dev/null +++ b/includes/fdf.h @@ -0,0 +1,31 @@ +#ifndef FDF_H +# define FDF_H + +# include "../libft/includes/libft.h" +# include +# include // for sleep() + +# define ESCAPE 65307 +# define UP 65362 +# define DOWN 65364 +# define LEFT 65361 +# define RIGHT 65363 + +typedef struct s_map +{ + void *mlx_ptr; + void *win_ptr; + int win_size_x; + int win_size_y; + int img_size_x; + int img_size_y; + void *img_ptr; + char *img_addr; + int img_bpp; + int img_sizel; + int img_endian; + int rot_x; + int rot_y; +} t_map; + +#endif diff --git a/libft b/libft new file mode 120000 index 0000000..5634df6 --- /dev/null +++ b/libft @@ -0,0 +1 @@ +../libft \ No newline at end of file diff --git a/minilibx-linux-master/Makefile b/minilibx-linux-master/Makefile new file mode 100644 index 0000000..5c418c5 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/Makefile.gen b/minilibx-linux-master/Makefile.gen new file mode 100644 index 0000000..5eded88 --- /dev/null +++ b/minilibx-linux-master/Makefile.gen @@ -0,0 +1,48 @@ +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_set_font.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 mlx_mouse.c mlx_screen_size.c \ + mlx_destroy_display.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) libmlx_$(HT).a *~ core *.core diff --git a/minilibx-linux-master/Makefile.mk b/minilibx-linux-master/Makefile.mk new file mode 100644 index 0000000..fd93700 --- /dev/null +++ b/minilibx-linux-master/Makefile.mk @@ -0,0 +1,48 @@ +## +## 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_set_font.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 mlx_mouse.c mlx_screen_size.c \ + mlx_destroy_display.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) libmlx_$(HT).a *~ core *.core diff --git a/minilibx-linux-master/README.md b/minilibx-linux-master/README.md new file mode 100644 index 0000000..40cded8 --- /dev/null +++ b/minilibx-linux-master/README.md @@ -0,0 +1,43 @@ + +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 + - make + - X11 include files (package xorg) + - XShm extension must be present (package libxext-dev) + - Utility functions from BSD systems - development files (package libbsd-dev) + - **e.g. _sudo apt-get install gcc make xorg libxext-dev libbsd-dev_ (Debian/Ubuntu)** + +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-linux-master/configure b/minilibx-linux-master/configure new file mode 100755 index 0000000..04fcdc4 --- /dev/null +++ b/minilibx-linux-master/configure @@ -0,0 +1,95 @@ +#!/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 \ + /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-linux-master/libmlx.a b/minilibx-linux-master/libmlx.a new file mode 100644 index 0000000000000000000000000000000000000000..1bc7cb4d44eea2c9d9b275c515e9cd60ccfefb48 GIT binary patch literal 110658 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

b?vc4T|Cy=vL?;T$3g1a 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 Iw!ZxT08C1F-T(jq literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/libmlx_Linux.a b/minilibx-linux-master/libmlx_Linux.a new file mode 100644 index 0000000000000000000000000000000000000000..1bc7cb4d44eea2c9d9b275c515e9cd60ccfefb48 GIT binary patch literal 110658 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

b?vc4T|Cy=vL?;T$3g1a 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 Iw!ZxT08C1F-T(jq literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/man/man1/mlx.1 b/minilibx-linux-master/man/man1/mlx.1 new file mode 100644 index 0000000..9ad0ac1 --- /dev/null +++ b/minilibx-linux-master/man/man1/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-linux-master/man/man1/mlx_loop.1 b/minilibx-linux-master/man/man1/mlx_loop.1 new file mode 100644 index 0000000..3397ce2 --- /dev/null +++ b/minilibx-linux-master/man/man1/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-linux-master/man/man1/mlx_new_image.1 b/minilibx-linux-master/man/man1/mlx_new_image.1 new file mode 100644 index 0000000..f2160a2 --- /dev/null +++ b/minilibx-linux-master/man/man1/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-linux-master/man/man1/mlx_new_window.1 b/minilibx-linux-master/man/man1/mlx_new_window.1 new file mode 100644 index 0000000..90f6d47 --- /dev/null +++ b/minilibx-linux-master/man/man1/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-linux-master/man/man1/mlx_pixel_put.1 b/minilibx-linux-master/man/man1/mlx_pixel_put.1 new file mode 100644 index 0000000..258df58 --- /dev/null +++ b/minilibx-linux-master/man/man1/mlx_pixel_put.1 @@ -0,0 +1,84 @@ +.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: + +.TS +allbox; +c s s s s +r c c c c. +Color Integer +Interpretation \[*a] R G B +Bit numbers 31..24 23..16 15..8 7..0 +.TE + +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-linux-master/man/man3/mlx.1 b/minilibx-linux-master/man/man3/mlx.1 new file mode 100644 index 0000000..9ad0ac1 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/man/man3/mlx_loop.1 b/minilibx-linux-master/man/man3/mlx_loop.1 new file mode 100644 index 0000000..3397ce2 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/man/man3/mlx_new_image.1 b/minilibx-linux-master/man/man3/mlx_new_image.1 new file mode 100644 index 0000000..f2160a2 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/man/man3/mlx_new_window.1 b/minilibx-linux-master/man/man3/mlx_new_window.1 new file mode 100644 index 0000000..90f6d47 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/man/man3/mlx_pixel_put.1 b/minilibx-linux-master/man/man3/mlx_pixel_put.1 new file mode 100644 index 0000000..f4d131e --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx.h b/minilibx-linux-master/mlx.h new file mode 100644 index 0000000..74c0aff --- /dev/null +++ b/minilibx-linux-master/mlx.h @@ -0,0 +1,139 @@ +/* +** 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); +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_set_font(void *mlx_ptr, void *win_ptr, char *name); +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); + +int mlx_destroy_dispaly(void *mlx_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); + +int mlx_mouse_get_pos(void *mlx_ptr, void *win_ptr, int *x, int *y); +int mlx_mouse_move(void *mlx_ptr, void *win_ptr, int x, int y); +int mlx_mouse_hide(void *mlx_ptr, void *win_ptr); +int mlx_mouse_show(void *mlx_ptr, void *win_ptr); + +int mlx_get_screen_size(void *mlx_ptr, int *sizex, int *sizey); + +#endif /* MLX_H */ diff --git a/minilibx-linux-master/mlx_clear_window.c b/minilibx-linux-master/mlx_clear_window.c new file mode 100644 index 0000000..f621090 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_clear_window.o b/minilibx-linux-master/mlx_clear_window.o new file mode 100644 index 0000000000000000000000000000000000000000..045aede6b3fbd0923a9419d60ac75f47617856b4 GIT binary patch literal 1512 zcmb_b&ubG=5S~rc#ZFYL~|@69)F-t6Rcty#|)1~3e`1IH_70S+_A zz9n4?=3o}q?GL}~@hy9N_mJ3e_0hX8QGVy^nM-eFls#VE`7XUiwYp+n-E2qwFfwn8 zo1(OMBa*A~tMalaEiJ^X42JWu0psOkFh)gVer_iB5evJBJUxU3dQ}R=H<_(`A$NcF zULi+JD(Frp;O9}=W;XT409pK{A&Z&PkcCreG-jEZ!k?Vr>E7oO^~gIScNw4JL^Qza z6yBb~gWnrDou20oorC@U?%+UlCMa+k&DL6_>9p$g_1cEBQCVx&9N4as?1@ytcD)w` zUBC&5K^@8C^ZO_U)k`3rVwgA4C(t-0MhZX#FZ|GLqYa0#?XoxYdaek)Q3zt!4P6lJ zAOO)B_`cUiu0IGp(RjGI7=&);83-Bfb)CJT>wEIB|L`&~2hEWFg)QU={GH;}~Yjh4>gNxq=?D~i`Aa$oK1hH@lv9T$}IU-f0wQckWDT?sz_8WYO$ z`D|B^XFnPGDY;1adTdMS|C$-(J}b>~LQ5|9kLd^Kr1k%~O2~bt{?ose^~_T}`q@aq qH+msVRWSVrNUQ59uiks4;D^%D{gTk{e-<~>^zT(sPm^Nwb^RaAAa&IM literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_destroy_display.c b/minilibx-linux-master/mlx_destroy_display.c new file mode 100644 index 0000000..d2970b8 --- /dev/null +++ b/minilibx-linux-master/mlx_destroy_display.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* mlx_destroy_display.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mg +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/10/03 18:56:35 by mg #+# #+# */ +/* Updated: 2020/10/04 01:55:35 by mg ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "mlx_int.h" + +int mlx_destroy_display(t_xvar *xvar) +{ + XCloseDisplay(xvar->display); +} diff --git a/minilibx-linux-master/mlx_destroy_display.o b/minilibx-linux-master/mlx_destroy_display.o new file mode 100644 index 0000000000000000000000000000000000000000..4789f0598b2a19a39743a64ce5cd5de862ea7227 GIT binary patch literal 1424 zcmbtTOHaZ;5T1$;d>qu6Xrc#B#^(m2M&m(21dJh)_(=5B6sW;S!L&;P9`pxz@n?AS zZ+Y}?qBC?y*Rp!hA?2I-cD|YI?Djra%=cLquvxGJUlFqak9}W$y6dK43`XJLVfUpQ z7P8sx#KKv*)sU^krq~e4)wNbPO5LTlL~?yGWL23dh1TscSnY9Zc5EpAh>eM#Q)_XB zzX9#FA70;0IWgm#0L1WTvKUq}SquhEG*%h68(rA7YI?->o}Bx@`%f>PQDfIS4>hnx5x2kZUxhD+)(vtATVX z*C4v-Zq2^*9nV$m{tXGNKzAZ~Vrk^acO6U;x?apA_RteF4 z@%+>>9HL{I|BPY&^!2fx=WpswwV&t@Ev`09cb&9RJ)LWG_DI3A($V|rrsz*<0zH#H NsrG;InHf4!{ReUMUk3mH literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_destroy_image.c b/minilibx-linux-master/mlx_destroy_image.c new file mode 100644 index 0000000..afd4d1a --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_destroy_image.o b/minilibx-linux-master/mlx_destroy_image.o new file mode 100644 index 0000000000000000000000000000000000000000..01377e372cb6f8edccfd77110d0b9e53b899ccb0 GIT binary patch literal 1856 zcmbu8-%k@k5Xa|wDCLKx8cj$rp-&1%E)X#ijM`G#uB3q~)Ibb5k8*fKu9)7H6b=4J zMbk7U{7EL7z<;5S7=0loh6fGK-0ik&f4t}N;lL18mVG7)adL}49 zv_sOKj6yH;Kz5#0ezVFCR{kEWCWp$0f%37kwZy6_tL&d-9vPHEd}2Xgh)tyvIxHp&rkPnU*~U{}r{b`N2$PMX zW5MFQWlx)~k+Z{S=vVHll^{zy0auM^*H5=0|Tr$X>JK{VpM=z^CBq7e_F3;voQ z8u31K!E*%Bh@U|hJc61mz}-vep*h>OYph^&3x2eODwrFF=9(oJv{l13KwEJf&~lr$ zZRU~XH(gUp&1Od&{PHKDdDBfxUn>~4S?m9wB7*gFM;cFX6d9Q~hkn+476)*E_97}K z@HoM*&>qjbFw#0fp7-;3iSx!Ax6j8L1ND&YDkjwPU+c%PmU@n&%O=*pB16<-eGw-m zCQm(*6G@9Yf#y&UqjMwMF;6lwL@oAD;29LH_Wyuyh}dV^|4yl1@K$S6Z^mEr6_0es nXl=2+sHeV-dyfbX_y^@Fk&L&ik+Y~;)qmk|sW#IWjrD&3Vu#E) literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_destroy_window.c b/minilibx-linux-master/mlx_destroy_window.c new file mode 100644 index 0000000..464790c --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_destroy_window.o b/minilibx-linux-master/mlx_destroy_window.o new file mode 100644 index 0000000000000000000000000000000000000000..e5ac9252c7be5ceaa8790bd7d617a3ce9b86bf96 GIT binary patch literal 1896 zcmbu9%}*0S6u@6wlnPi@Vhj-ydO#vZHf_L&#Apk&osbGBpctZ?er!{uA4zvN6cZ&x zFxl+Ii-~`Ne}V@O82kg!g9k6hlNvc_ylU{x>`c3~+l#(r_r3R<_c8l+b~j_mxYy$W zAs)B}bx%-$d|Ta)Ff#&O&fEE&DZwqT5tt+#YjEBE$t-2>Zf*Tk~-g;DlKjULuP zM1G@DtSls^rY3^tm(oT_H-eYtOLAyr)L>rtad=z~jSbtB)jiGb0G@}pz*ChxeO>MT zXE?|)^wb*-^gi+32<*3epLYa$5k&+3na=w)JJ!ilniPFEZSeE3X#s)H z_03U^LvRrvR&o;`9CyQ5rM(3|*2K>s>2d6bJv*{tyriaRfa@*zYzuz71z%~w(=9j@ z3sohnYI>!-p{%c#vgLI-;{riRB2Atmc-RR=kn(o-O(H4WrUxmZ+7$Vz2hl@qf| zBkVarX5ngH$yHKCwO0Q>jUeXJv)_0!Bgm+T^JRO@XRHqw=xL9L0IsY2)2MR)1ZvvH z&;4Gmhd6KilFrg#7iq*7F^1Os*ZeT%(wZT>oFe*Pa6+_2f1xKF%o#c@0-Vq#c8;?n zX9gMJ`ST6=VtxY8py4+EAABHU&UF6tFC+2=r)?U0BZ3#af1YdlEz#V@d|J10_K0dw bV^00X%hkZCdT5PN!_R-AcaPBe{006C50Be{ literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_expose_hook.c b/minilibx-linux-master/mlx_expose_hook.c new file mode 100644 index 0000000..b00b675 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_expose_hook.o b/minilibx-linux-master/mlx_expose_hook.o new file mode 100644 index 0000000000000000000000000000000000000000..05696ddbd1b3fd495deb22892d1937515059e700 GIT binary patch literal 1256 zcmbtTJx{_=6ukvh{21_K(BOb^5RJS*lxQ4G6M_(99E=Q3q+m@GC?&Kc)j>@hl+Deb zBD;gDqkqF+p!d@E%A-~Xy-9n{J-z4N_xjqK;?Y4wQ9y(O`!LLe3XqNrxjLXKOv4nE zd(UmGFZZ5Ygx7n6%(nn9P%0GmQt3*q+j6?89hPU=%vN`h<*swPEW5q#se@*)-~lLC zC!n|qB{?$@f5cv-FY{+h9Df5EAA^t2u$pM-&H$nyZB8;q@kv-jVJu9>>hT}+*f)J1 zl{slW{@%={Th-mRW$RVLvKp)o0mW;T;vH$_BdcfjrRiujV7Alo&=AbgT?g2?=4ilb zwhgRqnWo-Ctz|hnD;-xdwxiV>z&d(UW4ckj=xCNkuy;cK&q8v4U;%tfAw#omwIOLl0(ejkVWKTzQDYs$)$I4B5~mp(jgMkM$Q`Z z2VM|d7wuJ!A|~_|saf($B W{5zNZd=^=l|BV-(`js9D`o922JWHGa literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_ext_randr.c b/minilibx-linux-master/mlx_ext_randr.c new file mode 100644 index 0000000..34ddb91 --- /dev/null +++ b/minilibx-linux-master/mlx_ext_randr.c @@ -0,0 +1,104 @@ + + + +#include "mlx_int.h" + +#include +#include + +/* global for independant extension */ + +RRMode saved_mode = 0; + + +int mlx_ext_fullscreen(t_xvar *xvar, t_win_list *win, int fullscreen) +{ + XWindowAttributes watt; + int i; + int j; + XRRScreenResources *res; + XRROutputInfo *o_info; + XRRCrtcInfo *crtc; + RRMode mode_candidate; + int idx_output; + int idx_candidate; + + if (!XGetWindowAttributes(xvar->display, win->window, &watt)) + return (0); + + res = XRRGetScreenResources(xvar->display, xvar->root); + o_info = NULL; + idx_output = -1; + i = res->noutput; + while (i--) + { + o_info = XRRGetOutputInfo(xvar->display, res, res->outputs[i]); + if (o_info->connection == RR_Connected) + { + idx_output = i; + i = 0; + } + else + XRRFreeOutputInfo(o_info); + } + if (!o_info) + { + XRRFreeScreenResources(res); + return (0); + } + + idx_candidate = -1; + i = o_info->nmode; + while (i--) + { + j = res->nmode; + while (j--) + if (res->modes[j].id == o_info->modes[i]) + if (res->modes[j].width >= watt.width && res->modes[j].height >= watt.height && + (idx_candidate == -1 || res->modes[idx_candidate].width > res->modes[j].width || + res->modes[idx_candidate].height > res->modes[j].height) ) + idx_candidate = i; + } + if (idx_candidate < 0) + { + XRRFreeOutputInfo(o_info); + XRRFreeScreenResources(res); + return (0); + } + if (!fullscreen && saved_mode == -1) + idx_candidate = 0; /* if no clue, uses first mode, usually part of npreferred */ + mode_candidate = o_info->modes[idx_candidate]; + if (!fullscreen) + mode_candidate = saved_mode; + + crtc = XRRGetCrtcInfo(xvar->display, res, o_info->crtc); + saved_mode = crtc->mode; + + i = XRRSetCrtcConfig(xvar->display, res, o_info->crtc, CurrentTime, 0, 0, mode_candidate, + crtc->rotation, &res->outputs[idx_output], 1); + if (fullscreen) + printf("found mode : %d x %d\n Status %d\n", res->modes[idx_candidate].width, res->modes[idx_candidate].height, i); + else + printf("back previous mode\n"); + + XMoveWindow(xvar->display, win->window, 0, 0); + XMapRaised(xvar->display, win->window); + + if (fullscreen) + { + // XGrabPointer(xvar->display, win->window, True, 0, GrabModeAsync, GrabModeAsync, win->window, 0L, CurrentTime); + XGrabKeyboard(xvar->display, win->window, False, GrabModeAsync, GrabModeAsync, CurrentTime); + } + else + { + XUngrabPointer(xvar->display, CurrentTime); + XUngrabKeyboard(xvar->display, CurrentTime); + } + + XSync(xvar->display, False); + sleep(1); + + XRRFreeCrtcInfo(crtc); + XRRFreeOutputInfo(o_info); + XRRFreeScreenResources(res); +} diff --git a/minilibx-linux-master/mlx_flush_event.c b/minilibx-linux-master/mlx_flush_event.c new file mode 100644 index 0000000..1e586ad --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_flush_event.o b/minilibx-linux-master/mlx_flush_event.o new file mode 100644 index 0000000000000000000000000000000000000000..97bab271109ed2c1e3d814b0f2609f105045cabb GIT binary patch literal 1648 zcmbu8&ubG=5XWb;)y6bzqxKM}V89<#vCo7mtraBOnq(+1dA~sXeXx`P=yT=`?7) z>st567pg?p(dT>iSFQKT$*gEI6Hcie(RSZavpbt_oh-;LF3u;WiY2>g*@;s4c`j%QxRMMjg0;QG7o+AKjd;`9Io-z11eJc>*3 z1o~tlzMO#mvG&7;Wt32@ma8@4wamJ~EW9SLieVYRO6@kV@=l{cw`R>9%VfEg;v_)oZ}e-v?-%OfHTn*z=fBpcu$Fozad}Ogf6)uk7v~F|_b_kj2XElfAfZ7&NP4e+C{zKL1$C%IKSu|SNb-n)?ZJ3{j)~|tNi@C X6nKoc>yzW?1=Ytmyxq@q9e@1+c2JqP literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_get_color_value.c b/minilibx-linux-master/mlx_get_color_value.c new file mode 100644 index 0000000..b620970 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_get_color_value.o b/minilibx-linux-master/mlx_get_color_value.o new file mode 100644 index 0000000000000000000000000000000000000000..b8f413a51a3278965b04f8c8ba85497e9993e64d GIT binary patch literal 1504 zcmcIi&ubGw6n@*S8h=2m6e?73J*ll7QfyH?$ZD+xDW*tUJP64q**0P}3&}*H2ZQKk z>BXaeiF!18@hB{KE?@iv&VY0m_zGeB|`{sRb=DnHj!qVL##{q2)+=PQj zvjCoZ;QPw;;Ut`ZSKYDkWT(4y>%%Cr$=;o$H&uAp+t0n+hTj0`{$^n%`Ida@Z80ynzNVw+ALJlE$8cx&+B63{A;z#|EUj)^Yb^nORME}L$!#KS*+q7H>Aqmh~sKs!u32x>e%dh*5XSXgJ?aAWKc$w%|6z&C&P{eQ4M4OqTFhM zsKikeHjrz?G8BvVSEpMts5}AD4C{diYsK|u5QVz(Kj8$b>8|aG`&{)MqXv3Ird_~* z^!5$^G?NUUa!tF4K@R`F)n7p^)zt4AU1fUzNlh^7{WZ=ZuYEJs%OW#!?=fe-0ji_* zJ_UwRucj?vK(E?2N%Y@xLERVW=#I4hEa%fP?Y(KK#OL4PyyJ+Zwe`f?vnR +** +** 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-linux-master/mlx_get_data_addr.o b/minilibx-linux-master/mlx_get_data_addr.o new file mode 100644 index 0000000000000000000000000000000000000000..96010d7319eb099bb1deb9dcad98afd0f2b9226e GIT binary patch literal 1256 zcmbtT%}&BV5S{`8{v6O~B!L5-L?fFLB^nQ=3BeL$JQ#^bQlLsAg@i5%deC^2^y1@i z_XRxq8a{!}z%DGMdeBMQ`R40c0c`tLw3QW)K_eN3vF@MDLgPk!etF8;6JzRp; zPiU!?So{?SAwDghZOY_dJk1_~&#$1AaNx-R!k`>Z5r*+ekcD9(h{o*b4}4^f-#}(f znP+k~r`50C+PvDZxK*_pjV`Oh90!mQ6>0LB>6v@)aH|H)<=wGwO2q9x2S$Z~)m#@? zz2i7`8@YCe+swSEh%w&?UfmqI!1#{Y&4QFd~E5hsL~ZVLhF z{TsQK2|iD`s%>Ks$Lp{9J=9W79WT{n|6P?tEc;7eP&hU9Sq&5{b&@(mK-|o(F@6yV z{<-L^s+BOHuh39Q#6!_2DR|P+j-+1lLA^;bq#N4D*uf%t()#tp`` +** +** 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-linux-master/mlx_hook.o b/minilibx-linux-master/mlx_hook.o new file mode 100644 index 0000000000000000000000000000000000000000..57a9cdb575c37873cafc6059a2a5716fd77b0f9e GIT binary patch literal 1848 zcmbtUL2DCH5S}#A);7{Aib4hVAfjTI1S^&vbkmw-kzh*GLIh#mq#FWhb|u+J;z2#= zAr`@(;E(X&-GhI@zu?hJPePs9ok^ds8xJ}m`^|jsn|Uwa?&fu|QkqGnKq3YA;kXhO zU@dc;TTyC378by69@-x=FYx=#9@|@$u~i>$*=&RH_wsoSni(rRYGtfTHb4R7DX@JlXC4A@fDmANftF z*XSC>wHTs1wt)Gsqc~O-{;a~66n;_R4d!PM=_?^~gg1D>W)xoheyZ^n*I@QX-Oz0y zhP@culJ&fO*9^U32MTx+iCUOt|#OF z7Y!Uh?~wk4TgXv7ieYlqpN(Z)p|{4GDB>i?ubB9C25H(yp6|=7zs|h=M!x5D9cYFc zx3Qp^|Jt9&UYaTQ5z{DS|64*Z%Kn1u$V;wDKdXh3>)I;!tIr~RQ9%5Yn(j}M z|3fz984JmO`nQsP@t@A4?@cWRAM_35JooDTG*|bY`aki|11glzfB!jLOX~m5 +** +** 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)))) + return ((void*)0); + if ((xvar->display = XOpenDisplay("")) == 0) + { + free(xvar); + 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; + xvar->wm_delete_window = XInternAtom (xvar->display, "WM_DELETE_WINDOW", False); + 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-linux-master/mlx_init.o b/minilibx-linux-master/mlx_init.o new file mode 100644 index 0000000000000000000000000000000000000000..5de0262fe586af8a1f6bf4b2b43f33514c018ddf GIT binary patch literal 4024 zcmbuB|8G-O6u@uSA#;p&AebTGo~9$iNL~3N3;3m_-FAnCOfPNVz`=ELoSMNT;tXr`9Pnrs`KzJJ3kgKpoY3 zdo_1EbOqJBM)zF!W8OXyLvw96E$#q);`*A-c-ycCZ98k-*v@!+al^|Ysh8j#)2@;} z(!8y>M}NZXko{JPYR@%+aRiO*tGq#~d74gIavQa=V6o4_-~0SE^+Msa<)lTqqh^Cs z+E@rChn)6i+&Nf%VLo?$@QI%uAejR z->HRkLj2{#^+4jfSmL^P;v8B&SUhBb(0sw3BgQG_NL-6JQU03q_`jrOR=~#7?+)d zba}nIgw}(DxulX4b~<-B+qP`W=_A+6u6AeJ_RVF={I6lH<;4TUGSX;S->|%H3N{R{ z#s)UG1vhYyt?_t`$JX?k)ngM1wOzIWtHn}p699Q^jeBf$bOq}7GMgXK1||wM))Sys z*S&&}MnGvce;>{-Avj%2ewweOVy#$_39-UoC9#61N@69;Dq-+)Ulm?gg=3MtTgsn@ zd;PD{)s_*nrw18deYYF3p794vT+qkW;#_XhCZq+(YD3=iJq7k8{BU2);s;QPAF0A) zRXFZ}3f z*wJ0M7m4_Y2zOs`hKbV;Un+RG@Uayi+wrlDlywv_B1>^G8%+?g%ipud;}?56I|Cg- zG3eRj?+{5S5KTOvlQW}-jnLOp3Y>5FC4acOiRBJe5>>&1zLx|52WNqUr2 zf`q&oSyIZy3zi^58CfRjoRTH-2zu1tSrIcw2gPtIIn2U^6p_dA0fILf@6g}){|872 zAqaB3JDiIML2BTKx0CY-LJ-u)JH`1lLJ;Iw6FEPJ5Cr|y!;kX~>>Q&0S_9u~;CQFG z{!RmLGVr~Oqkkxo3;I0<{dETZhJin1;O`myVC~`So;B!WE#ds4LEmoRH!%bV;ftvY*XQ?#IJ2V( zMH+-w$&}kD?`7n;h@%)gS(4{u0dIc=plHZDv1?1B3ARIf_CDRoxu0 zb_6#Zgq9n<#^90Q_I&>_cJtb3l4k$HG_j4v+Jg1MY>z(8dk=`b&J-I=$uSM}nqJAi N#NyARGlQ7z{{dW$>$Cs> literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_int.h b/minilibx-linux-master/mlx_int.h new file mode 100644 index 0000000..58c22c7 --- /dev/null +++ b/minilibx-linux-master/mlx_int.h @@ -0,0 +1,138 @@ +/* +** 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 +*/ + +#ifndef MLX_INT_H + +# define MLX_INT_H + +# 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]; + Atom wm_delete_window; +} t_xvar; + + +int mlx_int_do_nothing(); +int mlx_get_color_value(); +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(); +int mlx_int_get_visual(t_xvar *xvar); +int mlx_int_set_win_event_mask(t_xvar *xvar); +int mlx_int_str_str_cote(char *str,char *find,int len); +int mlx_int_str_str(char *str,char *find,int len); + + +#endif diff --git a/minilibx-linux-master/mlx_int_anti_resize_win.c b/minilibx-linux-master/mlx_int_anti_resize_win.c new file mode 100644 index 0000000..2f20b44 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_int_anti_resize_win.o b/minilibx-linux-master/mlx_int_anti_resize_win.o new file mode 100644 index 0000000000000000000000000000000000000000..7157508fa7d4b54a6bc02cf09e85ec77d1eef499 GIT binary patch literal 1768 zcmbu9&1(};5WrtP`e7S4QFx4vEtw0K|J~=R1`dU^$+kMJ&54JlR}-@yl0o~=Askc&dl%4%zMnv=1E3d2nGU# zOMqM_M;@ny9E6VSlw+nygp3pAj*?gGPf8A+pI4~;i`qZw?uRbz-LNMlZLcJW}SJssW@0|#eou8i**esvW&jw{)X! zRrIFWs%)G3qe@*a4%#7lR$ERhn!dcSu#(B?IVG)Sbh4T?t-H6D8qJzfrBJX%R#&`4 z*ISlR+|-L3n|j%(RN+o}SSZ-pF<8G3`_cs)1v$Q8&R-z}K^}p{xd=8&kS)i-hunHx zvy1|0tJ&8Z+-jOtL$=J0MdXrU8AL9$T0|~3YBjSCtlqFpIlGj<=v5GXcvj{QUE72sS^T>p2&5hsJn-8~Vg9Glp~H7M}mm4Z-I9<9HDa zzy5ErhVVXP|MA~|=W~wN^qvifY_a>#GL7E`=6dt7uDADq$QxF42OXDq+j0u_{PLeM Lc+ZuKrZ@i&EMUTf literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_int_do_nothing.c b/minilibx-linux-master/mlx_int_do_nothing.c new file mode 100644 index 0000000..49524e4 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_int_do_nothing.o b/minilibx-linux-master/mlx_int_do_nothing.o new file mode 100644 index 0000000000000000000000000000000000000000..36011d70d0ca6d8121bcecf65c800cf4678e0a73 GIT binary patch literal 1240 zcmbu7%}&BV5XYy0iXR6w#*p9vPl}NZM2W_OX(UKuj0Yph^`NidBY5;N zOneDn!}tI?LwC!%trwl7%*=1+KeHb^HqK5`h5^zHID%;=DL_6ojm=4D!Xhld=NmNZ z^~2&;t3CGkxVX=1tWw?`PqOMm^?+6ON+F%7Rz(}*{sN33XB3v^vQIdW__|nAMhOyk zw8sp5e8pD)(upS^p4>T&D@m4ynIw$Wv%m06jISYCQT7wwDL% z192!D7DYh%s0T6T-?`jwqvxa0_hiJKfCKB=+y>V6ePErT>pC7XoanITd8_PmyK@6< zM#h_Re6eNAC%=|D}CSn4D?#ekT8Pq(5#-xr-#wFV~iZ!}ei@rxLg7o2qT xMp7?%(rl7E(+}Ev=wKc_X>~nu{q9K;i1{T-6caci%NQl;Uq#_%R2c@k{u}LLN6Y{K literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_int_get_visual.c b/minilibx-linux-master/mlx_int_get_visual.c new file mode 100644 index 0000000..440a7ca --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_int_get_visual.o b/minilibx-linux-master/mlx_int_get_visual.o new file mode 100644 index 0000000000000000000000000000000000000000..e215a96cbb6309fd202c5eb4f70b1e5c5d2adb82 GIT binary patch literal 1656 zcmbu8&1(}u6u{qRqls+@QHliWA&01`*rlQMgC1f+=kzt!|O=&(PnMm}Y zLQn~z;MIeFic(R?)qgfG1?pDv95@2 zY_ZunyHDq^8D#CxrTY&)y+1#0s0us%S=T7}t!M>Di|3#h=A*8Z&cK zeF`u^eNeQgcR_1~w8?&aFrsA8pB$HA zu8Q{Ug`Y=mi@NK?0d)MiiH?=rM2FLE7_0bB;HO6Tc_inC_GABNWK;NsMxp^0PT(si zaHy19e5We-Lrd_-JB_AUHi|9~cs94Xn9T9jOlB>e=lSGfF3n*hYl(F`Yq`2z1I`=5 zEbj7RX_s%CJ7oYQ>n_ zgw+yYY?;CYW3$l!qgbm{tSYiDr7&&p4GcTnD)H^QS+NH7|I>(IKHVwji6@Ye zsB`Okqh~jX3pAsI3XuAX9KwwB&!DD0e(8s$z9hNxhJKanPDM3_h29m_{MYwd$|*JaT0Zhx**0OYEv-f87~mewojPixPMEx6yZ-zZ!^|GtHk~ugX`P w+Bkb7f;+N*L~42ilpF literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_int_param_event.c b/minilibx-linux-master/mlx_int_param_event.c new file mode 100644 index 0000000..8756a22 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_int_param_event.o b/minilibx-linux-master/mlx_int_param_event.o new file mode 100644 index 0000000000000000000000000000000000000000..ca581818ca409df9db6d7d3ff23c2226e77dc864 GIT binary patch literal 3848 zcmeH}UuauZ9LG=Ex<%cRYz&M{>_tR2-7XDISA5W$u1SyBtz}DRVM=_LdX-_7r|hm(6?=&J{Af4}oN z-{0^2%{hH9HJu&`g_tNI_A=YA3Ch^!qx-()yB3SE!|bo`qoWqfo6*s0KIP5bSDPK~ zeRu<^UL)gOo=mj8RqMRBz6~VV>uU6!0sT&}{vL03ywyo>&EnoCcR|Cw%`TWkyZ39p z<)z2pZ`U8^-pvL~Bhdy;1)ScU=;%6#2FIH_z&{$X;QNkyv$Nc5%tN9(c`={4ONm>2 z(vbRUg6&7n1*{_ZGuVsg#9zV@k5w5|K!cvSKj2!AN_&o&9V`M{bUu2<1EOh+P!Eg%> zNDTNB)HXyG*%%<--`!v{3$v=xW8Hs%`l#IkThSL#aArha8 z#FCLPL)|wIpd-nE!Qb=LI@Ph*!*XyV>PO(SN z5y!p4BK9c-KI$!mPz1NZM_%zMV`9JFA>JY`^dA#%6BqmT1@SI%fA7Hm7Ctc+YVys` z8vYw_9FKt;1V!Wl#E!82^%U)_SZHKdN^Z7dSM6ffS#?UTnNw)JwB+O!Hc@xoa%r~e z)M|k(7oCD**BqtoeA!(omoC8H{F>5~YE;St`nQ~tQ(aNV^P02P?>IX(Ju{J<&d#LM zmr|K*COI*k%Ch;Zi=fDrmz+!)oZ4DZ=?Y-*@cilb7mn5sPv#N${_gdQrQ!V`hRe+4 zQz%ZV%Eg`{kBVThaq^KLmAE1CMx3Yxt&yw>12^hHq*3mm0pU;WsqAt>HTw-qG-1G`y?fcQt%h z!|!XjfAFDA-S;qp03OruxP}{k7RH9a;wQ=(as-c2oh#g;`Wp(bP+eG&r$zjlqHj}O zoD-q%5*O`)8#Etg!ZqaDi(uVq-!2QU>J)6#bs8=+mu%N&<|5pwrcbeso>?g8>;f}$ z$E1KMoGw zot6M(cPQZ))$z{4RAH*e$v#6|{g2@@rC*Z!IfRe)6nvQT-^RZPvDlRwzeW8U$~X+r z$|V7np!wgY`7cmnoIk$G>ipBdunVzH;QFPF2MfxxeY5vh3`f`*Xc7LN2%O(3US{a4 z+9hJDe3w8MgQOzHFHjbop!v_!fT}e aHvJ29OqsA!_22xU_&7bXB}^t2HU1w6>SvJv literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_int_set_win_event_mask.c b/minilibx-linux-master/mlx_int_set_win_event_mask.c new file mode 100644 index 0000000..55650cd --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_int_set_win_event_mask.o b/minilibx-linux-master/mlx_int_set_win_event_mask.o new file mode 100644 index 0000000000000000000000000000000000000000..d133561a184edf4757ecb8e4afc7971b8a7e5447 GIT binary patch literal 2328 zcmbtVUuaup6#vp&ZQMc<#~un3%|nz<+$E(G=N=@twe3ZM9j?VnCwKQY_b#!`&1i01 zRQxm6jg}}B=7Z3eJqmjn^kvwW;f8-6gn>HiWa{S2B!f*v*n^|~&i7}z-X)vhf#jU? zJLmkq@0@#X^8RRHtS1&@N@DB<*7g+2SpUOqJI~ELOR%lXn4H>g9=)*w$ZT4)8tyeRM=V6T6L;er2K zaQ%o6IK9i@{0*GI{MEdu!x_%c@Yinh{1)dqEO@>Le!BDko?k^B@z4y`KMC=q1rO%n zuf-q0^Ff=3_q8X)bB5av@9R@Mt^4(rY4h;DHh8}1YoFjjU)|?&PUOpeMBOcp@#ooX zo-+r{<`DXvGtK6^xL^we{yPm!nYkDlATQ=q8YPRBrEZ@__>pV@FS{b7%h z>_4Fy$;`3d@#LA9)~9VrW`G&V^l&n6Y?b+)6ew9Q`(v|HOzZgOGrUH0@V%mesgr0d z^kWf9&{$u{YnvK-sO?DWap-NK`|#d@J&#XX=7iNm7yM8coK@xB6hnwK;wEK0#)U7bb>{f;BNVwtsZenly$BqZXSUDcSxZ_tmmrtR69fV4>{P1GmO3 zs}|U^bJlEW&hqT?JiCT>lY}O>1)sk+h0yOA3E}ko6rO=iLS?d)`%JIBRS9edI#>|8 zq^t#Z-qr)R5iq@I2R754T8-(m)k*~|GTpBRu0H=PA5uAoXFnDmm#t0!`=OFM>WS!uBK0bl-Uq7x*UrFSlJ)ykqSR`B z3VsPjr}>|f^H+1G`O{mi>J{GUY~tRK=VxSd^bSyMw4Qi7wR)Q_1!)L%_d7bPM-k~% Pe^%cAwY!zVh}QoDpthJn literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_int_str_to_wordtab.c b/minilibx-linux-master/mlx_int_str_to_wordtab.c new file mode 100644 index 0000000..7f92089 --- /dev/null +++ b/minilibx-linux-master/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!7gNGa^0V?NAT_Ato6lU}a(4*`TVZRghSNrO^&u9xnp&RG{Qe4zX@q5i!c&`%f%vR_c^$H@>N$y>;3eyF5Q`8f|l;>W=loaeGN*V0trFJU+lyLlx^=zL_X1N7)M7Z2z}? z)hcxEXAh0o=7kE~J5VfZy@eSsmb+Ce$MvDwI9nW_cT3D)N9Fl@LKf$t9>V?^7Tdm1 zHa>kB>lq8D!D2szZiY74s?k>9!h3?Wp~sg$P&%oR(uWmd|2S^6ML9QWXzV9m1}P7E zeDr?lgf>^U*b?oyv=%KzJoF%<`%7=g#GC6)MjIexVD57oTj3qNw3ffmu324w%zi## zKO&2Fb)hI0Du*@*>YDo+HHdxLD}^l|Db4Hw+E~~M<`0une2+%hW>wD>4@!Ezcm%T&OZ*O<-&}b?@N%O&1%;RRqk)wGr z3VjsnG&_#9S5e+(cvk!aXy;!CZ91UsYiaV%W06CMzaZz*+(-O@iyq70`iUO(2a64! zH~p=aKM?VwieorUB==%H?y2319BY1Cg#aDMEy%nS-(V&vaa=p6TGY)DD6UO^#75)Sf!cu)rpSp#`tgk5kvcU2i(hF zG#YkN4~yUKUsL4gABX-N@C+=Z+D&be^aUodkYWUyiAX}0RmswkVD zNSZV~O~E{qq)9MSxg41GR3?+2L~Ig!WcHsNJ(8nI`&}>vJ$*JYo=s-dv5-}t+yya} zx5j;P!-#Q9IX91E_ZiuT81Ho$AEyn;qdhG_A9`K~KL^5Er9X(CZpdcGMBsa?M63=z#^L5?5M+la=D75ocxBajBrT~7w Q>*WXJfjp&%(!2Bj1J+cgasU7T literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_int_wait_first_expose.c b/minilibx-linux-master/mlx_int_wait_first_expose.c new file mode 100644 index 0000000..0d549ee --- /dev/null +++ b/minilibx-linux-master/mlx_int_wait_first_expose.c @@ -0,0 +1,23 @@ +/* +** mlx_int_wait_first_expose.c for minilibx in +** +** Made by olivier crouzet +** Login +** +** 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-linux-master/mlx_int_wait_first_expose.o b/minilibx-linux-master/mlx_int_wait_first_expose.o new file mode 100644 index 0000000000000000000000000000000000000000..501404017ca256e7e28b88e5d137f8f77f125098 GIT binary patch literal 1680 zcmbu9&1(}u6u{pm)y6c0Dm?_Mkb_DUJ0w(Tt)NLtl0~8^w!vzVVUuh~Xg(x6v8e~O zC_?C^2k-tLo&-JUtw;X>K|w^%3iZ9+nRMN3F8adez4v<`GxIW=r`bX-plP5)gX?hQ zDGIP3JhD@^nSuyRL1|4N{CWe=0QB8&pD>{B-OvZ0^}*MwzBh4hj>zD}*$=3bZ@=I- zCS218-=+D=j#Tx989TKX)_31im(2(7>Y8*BV_*aI^ogW0|ZnJ_bBrC}z?HUd-jzvg>?3ohf8FY}{?M ztDWuaBeN}FW3?wTMrF(KIJX2kyi(udHKWl~M`F^T$%gUyedx$l7pEUs@l6+xxOiOh z0BU-M!mOQ^Fv`Fz(RFlPSzWVfFk$uuu&N;pU}eh!R_U}_w13v_2$SV+m*(xA1GCf3 zI5h7DPzo7|x(ALodKYFfK(kA!1gQ_?5OnFEKuzm}q#u*|yyV^+ z|60bqih8((-c#!Nuk}f+rJf0V+@jXM=!R&k^_5 +** +** 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-linux-master/mlx_key_hook.o b/minilibx-linux-master/mlx_key_hook.o new file mode 100644 index 0000000000000000000000000000000000000000..63bdfafe6feabafd486dcdeb4e8579812485fa89 GIT binary patch literal 1248 zcmbtT%}&BV5S~(0{5hcUph1&*@+Y!^DA9N@O$b7a@nGcOi4?3M!P1151U%@$gL31h zM<2nP-aY6e_!>Te&a}H_E!Bfg(w+If&bKqW(_R%0_F{?x!W7tr0TL{L78}I67wRwx z6Hw|s-6JgZ?jF#+-t=*$)E6k`^E=u~x!P{JZEcI?SSG#E_E7dRyUjA2t3Hd#XtTZp z<>CmGPEtutjV1cn2=NR2-8}cdIqE$QAD>Yil;};RZC5@XhFakYH805KC+4WYch$ks4sj@;^fq88A!3v32Gk$;=auq z@hwjX_eE!wt$={OK3yg;e&mJbI8Qp7k?akAqA<2 +** +** 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-linux-master/mlx_loop.c b/minilibx-linux-master/mlx_loop.c new file mode 100644 index 0000000..c5f83be --- /dev/null +++ b/minilibx-linux-master/mlx_loop.c @@ -0,0 +1,43 @@ +/* +** 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 (ev.type == ClientMessage && (Atom)ev.xclient.data.l[0] == xvar->wm_delete_window) + XDestroyWindow(xvar->display, win->window); + if (win->hooks[ev.type].hook) + mlx_int_param_event[ev.type](xvar, &ev, win); + } + } + XSync(xvar->display, False); + xvar->loop_hook(xvar->loop_param); + } +} diff --git a/minilibx-linux-master/mlx_loop.o b/minilibx-linux-master/mlx_loop.o new file mode 100644 index 0000000000000000000000000000000000000000..df610c1aa34e28786d075972cbadd4ebb38667fe GIT binary patch literal 1968 zcmb`H%}*0S6u_sn3Q8^2Kth5EH5LO#HmzuEA<-5njL<+sOROelE$u1|?Y5y)0WpH9 zm^6iivnLN8JQ@E0qr`)H@Z?EPdhnpZ_z@FBqDg&kJ5x&8UW~7qeQ$p6V`ksXcFE@- zsxugf5Cb_&wr7G8^4PR(do-(WOVZts~4$qp#?i={(Kdd>$a|9@L}x_s$J(vHA7p zYAL_Z`HQcy=y7fogRal%VzEdIqiO2)+iCWRwvUj#L5srjv;ecs2V{6)px4$pIh9pe z)^(@TAch+g#4v9)w3+K0)}g_6V23piAwN;~Tdb>f zUQ6p;BemFarV-0>9e3+0JR=kNQPgu9bx)8GBmDHl2$l52NcQSss8U~p@7cx8Kn_*x zM|)RbEikORq6z7$!Ozv;mum264X)PUtOh5^#JrqHrP5NgY-&baWpX+)8%fH_bwy=F z9`=v-d;RkG&`{79l0)8pzfUelW)vpR#nn=*oQz~uZv2=XQvg4@7G!Ts#Gs8VJj$s$ukf>$W%X<^MOiHOADWr-Avun3W+G8rO8 zQ^_PYP*PJ&k%q@6yE7~jogtDIu1w2Up~;H2*nfD~pay +** +** 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-linux-master/mlx_loop_hook.o b/minilibx-linux-master/mlx_loop_hook.o new file mode 100644 index 0000000000000000000000000000000000000000..3a672f36feb4c918b57fe86cf68a747758fdf5fd GIT binary patch literal 1232 zcmbtT%}&BV5S~(0{5hcUV1kKw@+Y!^D3N$DO$dUOsA7^ASAy z2;O}OU&ANR8M<4RwR+G=wlnkXeDl+3A1cQO3Bv#>2JFMglPEwsF|w_pX~8VaKy7eS zstwMqH>j4&d)f7Rv)|?Y>@F*^d~Ulx^a}Td63g#wglL#&QKU2OPQeJ$MrLj*^@N29 zUlw=MLjR_y*Cc#=#>JSilK_~Y45JWDyonPNCgNa>p8Nq%e#7SxSy1|kW^+41qvLtk zjkf1qu@;Q^09lcVIv(qq`L`~&o4|bD3w2vs+zB|a3!B@(n!XRL<+-lYMXc*_hgDDN zIiK6DD_}jRV>74Sxa`@kBP#t*Wspug(cg?E(nfO&KP|LWt7s5k-^8H|&@{!WvW89y z&tLgl$fcZlJgUh0n<|L5tS@y@!PHP+brf6jBy@xZVPm^SKM(Sbw1(xyC=${sJ}vvA_9&O`cLBcuOjd)iVO{% F{{display, None, win->window, 0, 0, 0, 0, x, y); + return (0); +} + +int mlx_mouse_hide(t_xvar *xvar, t_win_list *win) +{ + static char data[1] = {0}; + Cursor cursor; + Pixmap blank; + XColor dummy; + + blank = XCreateBitmapFromData(xvar->display, win->window, data, 1, 1); + cursor = XCreatePixmapCursor(xvar->display, blank, blank, &dummy, &dummy, 0, 0); + XDefineCursor(xvar->display, win->window, cursor); + XFreePixmap(xvar->display, blank); + XFreeCursor(xvar->display, cursor); +} + +int mlx_mouse_show(t_xvar *xvar, t_win_list *win) +{ + XUndefineCursor(xvar->display, win->window); +} + +/* +** Queries the position of the mouse pointer relative to the origin of the +** specified window and saves it to the provided location. +** +** If the pointer is not on the same screen as the specified window, both +** win_x_return and win_y_return are set to zero and the function returns 0. +*/ + +int mlx_mouse_get_pos(t_xvar *xvar, t_win_list *win, \ + int *win_x_return, int *win_y_return) +{ + Window root_return; + Window child_return; + int root_x_return; + int root_y_return; + unsigned mask_return; + + return (XQueryPointer(xvar->display, win->window, \ + &root_return, &child_return, &root_x_return, &root_y_return, \ + win_x_return, win_y_return, &mask_return)); +} diff --git a/minilibx-linux-master/mlx_mouse.o b/minilibx-linux-master/mlx_mouse.o new file mode 100644 index 0000000000000000000000000000000000000000..61e3870929343c4870797fa7c12108dcfc80c80d GIT binary patch literal 2664 zcmbuAO>7%Q6vvs3~E<4g<=&%y^cRNXhodVhAmKSHt`y}jqPZ? zh7^ep5rkM7OF3{rf&(X-D>r&URvS=zL|izQ3tvJA4j?3u%6q#r$+B6W_)D|z&2QeD zd7hbFzgbjE6OjlAMc`@J>j?_bJh12ITsH@YU>cOoUuKoTxnkzl;!-g)QU*saLFQKG z&mSoU`XQTO7)Bb7vE&+DgA;_Y+S@k4x!O zr~7U%^F}5sr5}6Pqgd1tstgr*Z3!Y9vyo$m4#c)_D~}_iMoQA7z~W_=kXcG$=>-CnU-hEuQN?%mFhv3l4*`O2IpB!o(7o3 zRPST~Z-b{4nh&{OCtF~-I#bH5A~UVPmY-ueoXSn-QTq+uhDrGS&i)aAXy^?k9t{ge zI=PSEgCyePw4P8D?h@{QY!rMifo~)VQ@)<(-jC+6ug)ZocnB@+Sx|HqVSFAr&6DN{ z?pdL)jfwA!;ct)OTVwdgWBB$MehoR*c^fTB+=ZLyhyAW^kyHF{6pV833EH2rg~daA zZ9{K&`#n=yg}PxIQZ{=gyGL>C6%+Kbx{#MueW6r3U##j?Ij@Du+4nSZX4?*tJ^N%+=5nG8%XE+RUe+5%Yt6S_ui1SSv|6X`pJ(@H=`WkMzTWMDw%9kVE27*7Xme0>gK1Cyx#Q^^ zLDU2`8WX%l5JimcxZn;!6mf=4@Q(1=9c@pT8==V|+%5g{VH1EF`;J107?lnooi~9#s?@HS? zR?ym(XPd&a%r!%@%?%qQx_Kb2^m-tzcH3>UgRIlFO{x5B?UZ}+Ai3dYQ*T&C+w@lZ z|IY+YL0cC5GUbqws{Ric_Ji-xF=Vu-Ic$D?!arRxo_{wEk{jbeac=3mMLhV0{UER| z4|ijQPxd4>nsZ!!aGGF0gSo`S`J(GetpA7r+=_f*&mtGTKlF<*7!td{ng8z5JR_bz zqK;2u{{(slov{7i<_EgW18M*1UqYe4<`WCVju>pTYcp0ZU$g7XSbN literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_mouse_hook.c b/minilibx-linux-master/mlx_mouse_hook.c new file mode 100644 index 0000000..cb567ab --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_mouse_hook.o b/minilibx-linux-master/mlx_mouse_hook.o new file mode 100644 index 0000000000000000000000000000000000000000..0dd6a8cbbd467dd622724ed77f248407f6bdd0a0 GIT binary patch literal 1256 zcmbtTzfZzI6n>?s_+vogpuqtq(Z~g&MB`wZ5QG@xU}SJ21#3v4G@)&R4mvm}o16cF zqnqpwu8#g2{ssCTy(`zII_OKT-}k=0@9y1Qds8_&h$#w)P+%V>nNR_8u?g44RD*e# zgWB-r8PnSEafI-8_k_z<0m7)u_2 za&-dAAgQDmW)ctB2c`)k*&Q@Y%e9S0+p;>W1wlc~lHr6p4|LD$OViPtz-*`QVOucA7&ySrbw>x* zv~6H5%QTH1YCX#_SoOG`w;jFJ0oFIVIy2ghi@t6eV#$AD8r^g^;Sty)X~;TAM8N*He6W0JDhX4f{zCpFLUVAE(HA W;6J(S=Znaq{O`Q*)UWhN*#8Z~tV;v{ literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_new_image.c b/minilibx-linux-master/mlx_new_image.c new file mode 100644 index 0000000..9967401 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_new_image.o b/minilibx-linux-master/mlx_new_image.o new file mode 100644 index 0000000000000000000000000000000000000000..e289f25a77e819cf227f65b67c9d5784b4652077 GIT binary patch literal 5384 zcmcgvZ){sv6~Bp-#%sFgvOzN`1$WM@>Z*<7niNG9p@!Z<3E-C z(xziwL3XNLy?P8JB#?%bPeVdNh;MAuwpQ5|&@^cpe*{8e8XrbG_JN`iDy_qubKkx3 z&5MoD#JJJ(z3+F=`JHor_q_LRE<}^D{=PmUS|2$=I(GskW!D(tDZgILR6d5 z9@Ns>agDy7o}~ZK=?5<&+e;bv0g^F|{)Tz$%a;>$&C|RWW|OVc0o^)eO^)hTeN0~q z`j9E=zpNck-%qbc=(Uc^P*%%$nqLF2)}m^q_F6%ozpc@#8l`jNn&)TlM`?AhMyDW9 zeD`y07a>>P>DLSEjG=J@OyfaMa~=2-mdF35f1R%BG&%0JBUmuf!AhsvNP@<7xO|@G z^O$?oIPjSr>vBp1DU3 zEF?Y6?*bbL;Eq_~(FlDT{OP-F8iG!s?2wJy3a6GYFP;F&$CC8MLnpO|wUgQ-T2|=a ziIA`^_-uDMRKgn4=~_FLOVW1K-)07X{rRldv!{uxfdmfO*pKY}hg@*)6V{ZDxxsXj zUXRkZHF`C*ksPSZlKaMqYY(^E?b)X~d{_+$`Y+f?Rsv8GPytXJ%omEl(_97T)_Ikc ziB4Bx4{u)i3v8L48>^EmIt{}<{17ZP>%q~4b!H5zBVipmMW8rNslaaYHC|T1L8mS= zYu5(o2-fbX6$7s$`dWAdI0&5_qv753UAmw~Xkpy;rD3;b#ZnQvuy-vyfkg|u2n#>L zr++WR2C0Lf(>HB(b@~=F@c&V#9TO1G*3*6#ew&`u>4zG9AGHK2m)|t+dKR}d!nc@Z zy=v~nM`?ox0@)9aodGUv)zkbnxM{7&#%;wwt`B?2^%F3(((p_zqFTCjo}3~qCqhO2 zQBw=~%H5`#H_d#ZsMd@5nlYo6jdHbi&bytEcsP7eok&kFR?J29E8hFOzJ2#DvOE9d z{(#rF{~jB)3j4T>027Qb|>njHcv{DVdOxat-xuR{}7tDHC80Zr~nL z-1>0;l#)p^GflxaHGX%V=5hXsJs3WTaayjZqFx#Rf{TMO#n;%@pHc!*B^Xk4@JuMa z{)e_J6PiRG9iG|@6oKvr=RSZN2;42?zT}E1>P6&k41Qhl<$wqPO=KAv?mwyo;w%;{ z24fixllX92nTSa~C7_?d7|=fMSay`|znH=Rx!&$J>*{*)AjAcK-I@!Sx-}PJr;sgE zE;6(QL%>DcTX6fh(~D=@7W+>EvP;UJ)hb|j!nKq9y)7~o{XW3iw*-2*h2f?fj(o_E zHHnSYJoGuZy4lb5z|Z!;AMb%Td*I*ifv@zypXq`Bv~SrWjAqH%+PrBnyZMUAxR%hL z5t2f_RH_z8X0lig*NnVrBrpyJm@`c5@+M3gW)uVH`N~Yms4;7ey~bg9u2Mj|f>|ON zn<6#8RL-A9aKiVIOZnsTVS8DVccDC z3H*y3$GGq@+`vU0IP(cfJhw^q$0QuTg@QjP;h&K3St%~+ChSegUgrO{gyTC**snEJJjuV$$k`tfrj{};S%{Amhd|y{G5b;M#7(#aCv`! zCE=fy><9Vti*e=kj!XEad?Z}XKiUIta2&%cQru@GdpZBtBwWt_0|}S&KZuD#bLO9u za5?|;5-#Vz+yh_bxHJEEBzrmkVgBjFX*vHx5-#WesD#V=l@C%Tt#u9 zVg9@X*nNQgcJLIxUvc0$?sU_M^Zh9DIv4yaTo>Z4pDUaBY3R+G-515EW|Zw!G&+4Oh zD!AejoF|(gVA%e^b+zxdehcxL#3cuX0q=jX!ycr#9{4WAIO4>G?+R>p!G$=N6Cu`a zcP7MfE;qj;WG{@6^P~Fv!529vGoIi~Y(C&2P@3@6Cc6a|AKS&fAOXtVw|8GlReh>fv literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_new_window.c b/minilibx-linux-master/mlx_new_window.c new file mode 100644 index 0000000..3f05914 --- /dev/null +++ b/minilibx-linux-master/mlx_new_window.c @@ -0,0 +1,62 @@ +/* +** 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); + XSetWMProtocols(xvar->display, new_win->window, &(xvar->wm_delete_window), 1); + 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-linux-master/mlx_new_window.o b/minilibx-linux-master/mlx_new_window.o new file mode 100644 index 0000000000000000000000000000000000000000..ef66d9300af6217b6866f6622b69a6bc4b875847 GIT binary patch literal 2360 zcmb`H&2Jk;6u_VDv@vPehKNI?axjuX2GNzR0*#7PW$kP{MVlsSViE-Dc4Kdd6WeQf z*NW+ZQnesPZupS+6OcdxaW6>JQUh%d6@>%j)*h{@2O@-oC{lQDz0)ik?*;L!@q6=| z_c8l+W-qAPR5TI+ArUwUdow`+#t-h<6RtS{!*B?c1?9C<{70pr%%8fkwTn`iWBj4Q z|4{fZ?BatsCM&V_z%wZfV*GOQPt=(XYv&W!zK9{ZF`0~0K8=@>V>Dx!13f2`=eoq% zdmYBVKYaN%+58@B+i})@Wp;H46RLb?*B)DosJy!dYmm8>`MDQ!X)8U+cNqVHaTO-{ zea7!*I=!WK6EI%mfBC0ubFO}s9{b-=OV+;`M5^)6lJBC%-PLi=?p|9xSFYlAa%r|% zU{@=+#Q1ue@n5m-NT%~U`x0w0EV-B0x05SwGfM2(u-Bb#bCg}&qL#g}q`avtDQ6Y^ zx*H1lT<%07RakD;oMz&<{F0nLdaUWrGVf%@<@Afs^(bz^l_xzNIe!Kst&zx);lcRF zn3(qXl(+U4J#khV`6!x|#y*UxQetx;E2XX+U{d=1gNihMX>eBRM5FW4&8RBfiB3t| z=y?zAF6!T+)3o^AkTkAHX+=t9r3B`|d|4^39P(;}DJnexJG=eXV|`B`Kn#EVB!-## zNeq04*5?odda3&*1_$=RQ6!_j{kT0t_B4)>eck}aL-@%Mu7&VY2)9D`g%Hj|_@^QK z>ktmrN=vVq8~R4MRU@8Z&F%VoO7&(dD^I&XqwK#^lZa&tfE!1MS^?|7N?E+8KZ2QrAK)- zjIyJzlpD6Ao2|NKo1p8qV-(l*;_AA-VwCaFFX3~M&`BA>@i%>{P(C4uLY&U5;9n6$ zAwG;l@NWsC5Puwp;CBe35SMTW{*WLF@xwR-PtgTHAx`H=@Rxo32_G-|IGsu1pFo== z>J4{7f3p2{)iIV)JB^-R6;{Kn7_wuw9FR+fV}QJD+aMRMYSpYEt67dI=T8@ox;+Hh zbvIY_l?J_;|49;)7uB#Rf-M9Q{G_j5kbm( Z|JP{ZlVDruZuN`b_V)j}FP6+;{69LqVV(d0 literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_pixel_put.c b/minilibx-linux-master/mlx_pixel_put.c new file mode 100644 index 0000000..c411f36 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_pixel_put.o b/minilibx-linux-master/mlx_pixel_put.o new file mode 100644 index 0000000000000000000000000000000000000000..69736df8878e24409abc81a3fc337b8447f6c575 GIT binary patch literal 1848 zcmbu9&ui0g6u@8F&ed&(Djo(C>|sh37gpwQ%ppyG1}$#5RVq4S)@I9C+l)5B&Vw@i zfuRbXWca6uhk_zrym=6ByY1k`gC_-jFa3VEn57qe;hXo~=lkCKCNJM_9_EVqkRSjT z0j|J-$0@)}y`aUPF9 zL!IpIQL56hqe|zpvZFY=Z>X-~WXEG{s)SQE$U3_&?PM07bS=tZL2uo1Rb^_< zt#6CU_Iq0K_Og6OUVi6BK_QcwjVDSgcEhscm!xTFa$?GMz2t-Bj5K-iT#wQt!AbWH zAl$zJLOUjmjSNO#Vk72|pJH>bNvFlwi%?n|eICw=@uv}4OgtJ`6uUyGIV2`zF)oXv z7?KvF@-RyaRMg`LeE%IZ84mmc0Aaj>B#f1UBn(G_Fjg7t!v_xW<48_;p2zJ0veP(X zhoS+d`|x5PezOnP`f#HUhkC88ZmzfWn!0IQQsr+S)IxDSEf>}Ke10*vq%O(nVor5q z)*F_(rsFWps#-B?W)sR8Lu;(*g$$IlP3_)-i7`;l*X))7s@k%&%7$7oHq=#Zy@rqD z$|TeDC5CYP`rVUj9!?vAb9z4#iXXwj`6fXW;>U1s{)!+9aS;dSakNQ7Y`6~Hq}Ep5 z(pFGg&7L;6)zoX6Wa(`Sq^f3VAg#1oAXUtIUB?%d8m6U7h3lmW_f0`^!*xSlZEAIW zzy5z3am=SP;NPJsWF&l_^}NG-Z44)<7bzaVw8D-^oB2mk(>hV+k1~ChasP?>%I5uw zYIx-WI#lyt^OKlMHTk|l(-pq{c@CK7>vKJeoZH^eNDvH&oo9^pjaQ;9zwCu*^Zs#s z6^)?&cUePtpQ-=!x8eDm(=z_G5y4%yzQHt|CCc^ZQ(b@W5y3}Rbc-C1uyXr^{%b+` OUl_c#AK5ef`F{X1mCO +** +** 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-linux-master/mlx_put_image_to_window.o b/minilibx-linux-master/mlx_put_image_to_window.o new file mode 100644 index 0000000000000000000000000000000000000000..95b5a3f3f9f36fc770fd36cf88af807a7b4f4d01 GIT binary patch literal 2088 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 Nw!4>fMdOjj|6iF7nPvb0 literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_screen_size.c b/minilibx-linux-master/mlx_screen_size.c new file mode 100644 index 0000000..835730d --- /dev/null +++ b/minilibx-linux-master/mlx_screen_size.c @@ -0,0 +1,13 @@ +#include "mlx_int.h" + +int mlx_get_screen_size(void *mlx_ptr, int *sizex, int *sizey) +{ + XWindowAttributes xwAttr; + Status ret; + t_xvar *xvar; + + xvar = mlx_ptr; + ret = XGetWindowAttributes(xvar->display, xvar->root, &xwAttr); + (*sizex) = xwAttr.width; + (*sizey) = xwAttr.height; +} diff --git a/minilibx-linux-master/mlx_screen_size.o b/minilibx-linux-master/mlx_screen_size.o new file mode 100644 index 0000000000000000000000000000000000000000..b13ab8175deddabf8d34a10d532772d13f0d0a3f GIT binary patch literal 1608 zcmbu8zi-n}5XaAPp&^Z;@MDNnh71J?qE@1Us44+*OA>1)bWC9|~Lccbj{ z?23}Pa?zvI8|{oIAnk2{G)PMG@!9A*{6m+KpXF;+QZ>-8Orc)zR(do~4*Bd1^5~1-)1*uc;-yTqtbjxAZM_t(4c{LD6FOo1J=h zS7of%to4~?gRa}mFn4sbv7>Jr&6an%C4NYnR1B|QN1i?Qae82ar#X+H(ls{4e%5A2 z4HTR8JZ%WCXSEE4Spx=2-CzbNHQNTo?6%uh2U(}fETwp_vgDo*6gS;!=-WM`ZH@c? zr<2Bddbfg4K8K8~>fR@};4_@ZC7MxglHz(JK7 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/09/30 13:30:47 by amalliar #+# #+# */ +/* Updated: 2020/09/30 17:08:36 by amalliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "mlx_int.h" + +/* +** Allows to specify the font that will be used by mlx_string_put. +** +** Note: only fixed-width bitmap fonts are supported by Xlib, refer to xfontsel +** utility to get valid font names for this function. +*/ + +void mlx_set_font(t_xvar *xvar, t_win_list *win, char *name) +{ + static Font font = 0; + + if (font) + XUnloadFont(xvar->display, font); + font = XLoadFont(xvar->display, name); + XSetFont(xvar->display, win->gc, font); +} diff --git a/minilibx-linux-master/mlx_set_font.o b/minilibx-linux-master/mlx_set_font.o new file mode 100644 index 0000000000000000000000000000000000000000..2b65299291c086a08487e2d418c363ac2405e4b3 GIT binary patch literal 1704 zcmbu9Pj3=I6u{rIYSAKMCkrG^y|H&d_CmlP?+Gd%yQ*W*!5t^QA&a(?E&_ci_mA z6yT$NWM@1x0})t+T7|p6xci3>f5iD{og#d6m%sV#EOEEG68`3sO+G@0yI+Oh5A)F` zcMrIG+)EgKjz4|=olGgkt*wp3m0F|Uar%i{Y@H=n*ZQ89+E1lf^2Sx4iu`jzYp))I zHi&7gf5&ql){V_MNHj=|5v=?H*6b5g_u z!wMAY*h!Tb0xiIUC(+@An(p~JEX?8FFehT?(OU|f)0+XZ%eZK7Rc<4g#qZ7Gl{p;R zt$|@%j{_=mRB$i>CVb(3gt@QHU+#k~~Eag?I#)CMz`S&8&)Dsm zZEM{BKaB*|(_26hq{RWmXK(oup1ff5PAq<3n5;g53-*H^*!EVwf=)hlKaUT)u->DdM0Ip(6auT!sY%_Z(v;7!PJAG6R_3XvZ$YUGswP( znvBp=spsFuz^wTv#X#hoY5w%@AnPTk^Qe0xg0MK~L!nP0qaJEKF?IHcpe~v|BPSs0 S{m)`-Ry`N+NuZWYwf-OHx1ss~ literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_string_put.c b/minilibx-linux-master/mlx_string_put.c new file mode 100644 index 0000000..8492a09 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_string_put.o b/minilibx-linux-master/mlx_string_put.o new file mode 100644 index 0000000000000000000000000000000000000000..c258b9cad618d4cc7f43c38e6314ea44aceb1b03 GIT binary patch literal 1952 zcmbu9OHUI~6vxldA{B6~garwj)C5g6GHHVZ1BvPMInnY6ZB2dPWM~IU=!3K~iY`Qg zuSwOgaKX}V;KH3N5{=P?#)V&i9Sb(Z7#Eu0In%i?DbtPq$>}-wch5QZa_7#h#FFtg zjsqqRF2liyQGnO(gE(Y{A?SuK5U+`uapS9)&Pc}3RMhw=8NWs2yJ&ooR(IAhF)!8K zXZ#pQ#-o8}=!2WvR4>(ak5nI%jIDRnTH26|=z!OpN*cc!DQi2Jl0nlkeQYXfY>gYc zF=N}DtzVtW-gx|3qb^p*SLOnFX{gs+QTIx#A7~FZXT)3LjClLKnFonTWYp)+%<5%L z_l*d{LSS%6H%Gw-!AnBm;<*N;ZT8X+in~7z+_IPJ@9yxd;{m0Soit|v-jWaV-j{7* zzVC%A#`~VTMc)6UJ<12xj->caZiWBECHZgMGEH8g4lA zNp)iUXRo0t8>bt?IGqcLo@_T7<97(6h#x~^{3$^caUPBFHw00{kE1c}!$V|MmUMM$laU7jGKrd;kCd literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/mlx_xpm.c b/minilibx-linux-master/mlx_xpm.c new file mode 100644 index 0000000..4a527f6 --- /dev/null +++ b/minilibx-linux-master/mlx_xpm.c @@ -0,0 +1,342 @@ +/* + ** 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); +} + + +unsigned int strlcpy_is_not_posix(char *dest, char *src, unsigned int size) +{ + unsigned count; + unsigned i; + + count = 0; + while (src[count] != '\0') + ++count; + i = 0; + while (src[i] != '\0' && i < (size - 1)) + { + dest[i] = src[i]; + ++i; + } + dest[i] = '\0'; + return (count); +} + +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; + } + strlcpy_is_not_posix(copy, str, len2); + + 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; + unsigned int ucol; + + if (opp == 4 && img->image->byte_order) + ucol = col | 0x000000FF; + else if (opp == 4) + ucol = col | 0xFF000000; + else + ucol = col; + dec = opp; + while (dec--) + { + if (img->image->byte_order) + *(data+x*opp+dec) = ucol&0xFF; + else + *(data+x*opp+opp-dec-1) = ucol&0xFF; + ucol >>= 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-linux-master/mlx_xpm.c.ok b/minilibx-linux-master/mlx_xpm.c.ok new file mode 100644 index 0000000..225ea3c --- /dev/null +++ b/minilibx-linux-master/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-linux-master/mlx_xpm.o b/minilibx-linux-master/mlx_xpm.o new file mode 100644 index 0000000000000000000000000000000000000000..a7a8106e09bced1968c89c58f3f629500ec83451 GIT binary patch literal 9696 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 +## +## 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-linux-master/test/Makefile.gen b/minilibx-linux-master/test/Makefile.gen new file mode 100644 index 0000000..2fcca89 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/test/Makefile.mk b/minilibx-linux-master/test/Makefile.mk new file mode 100644 index 0000000..ca55cd3 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/test/main.c b/minilibx-linux-master/test/main.c new file mode 100644 index 0000000..578eaae --- /dev/null +++ b/minilibx-linux-master/test/main.c @@ -0,0 +1,287 @@ + +#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 color_map_1(void *win,int w,int h); +int color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type); + +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-linux-master/test/main.o b/minilibx-linux-master/test/main.o new file mode 100644 index 0000000000000000000000000000000000000000..81db6639c577760371722650e1e023894ed565fa GIT binary patch literal 15656 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 literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/test/mlx-test b/minilibx-linux-master/test/mlx-test new file mode 100755 index 0000000000000000000000000000000000000000..b7c7fefdf7de1f2df575234b4bd5d12535770b7b GIT binary patch literal 77032 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 Tjh5`!_Y(V`G$GbnZWaFr9-6XO literal 0 HcmV?d00001 diff --git a/minilibx-linux-master/test/new_win.c b/minilibx-linux-master/test/new_win.c new file mode 100644 index 0000000..62bed4b --- /dev/null +++ b/minilibx-linux-master/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-linux-master/test/open.xpm b/minilibx-linux-master/test/open.xpm new file mode 100644 index 0000000..87be371 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/test/open24.xpm b/minilibx-linux-master/test/open24.xpm new file mode 100644 index 0000000..f363254 --- /dev/null +++ b/minilibx-linux-master/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-linux-master/test/open30.xpm b/minilibx-linux-master/test/open30.xpm new file mode 100644 index 0000000..87be371 --- /dev/null +++ b/minilibx-linux-master/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/srcs/fdf.c b/srcs/fdf.c new file mode 100644 index 0000000..91993bb --- /dev/null +++ b/srcs/fdf.c @@ -0,0 +1,171 @@ +#include "fdf.h" + +t_map *init_map(void); +int print_keycode(int keycode); +int shut_down(t_map *map); +void draw_pixel(t_map *map, int x, int y, int color); + +int keypress(int keycode, t_map *map) +{ + if (keycode == ESCAPE) + shut_down(map); + else if (keycode == LEFT) + (map->rot_x) -= 1; + else if (keycode == RIGHT) + (map->rot_x) += 1; + else if (keycode == UP) + (map->rot_y) -= 1; + else if (keycode == DOWN) + (map->rot_y) += 1; + else + print_keycode(keycode); + return (0); +} + +void draw_image(t_map *map) +{ + int x; + int y; + + y = 0; + while (y < map->img_size_y) + { + x = 0; + while ((x * map->img_bpp / 8) < map->img_sizel) + { + draw_pixel(map, x, y, 0x94dd24); + x += 4; + } + y += 4; + } +} + +int main(int ac, char **av) +{ + t_map *map; + + (void)av; + (void)ac; + map = init_map(); + + // receive a keypress event + mlx_hook(map->win_ptr, 2, 1L << 0, keypress, map); + // receive event when clicking the button to close the window + mlx_hook(map->win_ptr, 17, 1L << 17, shut_down, map); + // run window when no events occurs + mlx_loop(map->mlx_ptr); + return (0); +} + +int print_keycode(int keycode) +{ + ft_putnbr(keycode); + ft_putchar(' '); + return(0); +} + +void draw_pixel(t_map *map, int x, int y, int color) +{ + int position; + + position = y * map->img_sizel + x * map->img_bpp / 8; + *(unsigned int*)(map->img_addr + position) = color; +} + +t_map *init_map(void) +{ + t_map *map; + + map = malloc(sizeof(t_map)); + // size window + map->win_size_x = 500; + map->win_size_y = 500; + // size image + map->img_size_x = 400; + map->img_size_y = 400; + // view rotation + map->rot_x = 0; + map->rot_y = 0; + // init connexion to server + map->mlx_ptr = mlx_init(); + // create the window + map->win_ptr = mlx_new_window(map->mlx_ptr, map->win_size_x, map->win_size_y, "test"); + // create image + map->img_ptr = mlx_new_image(map->mlx_ptr, map->img_size_x, map->img_size_y); + map->img_addr = mlx_get_data_addr(map->img_ptr, &(map->img_bpp), &(map->img_sizel), &(map->img_endian)); + // draw image + draw_image(map); + // put image on screen + mlx_put_image_to_window(map->mlx_ptr, map->win_ptr, map->img_ptr, 50, 50); + + return (map); +} + +int shut_down(t_map *map) +{ + mlx_destroy_window(map->mlx_ptr, map->win_ptr); + exit(0); + free(map); + return (0); +} + +/* +** w forward 119 +** a left 97 +** s backward 115 +** d right 100 +** < 65361 +** > 65363 +** v 65364 +** ^ 65362 +** esc 65307 +** +** +** +** +** +** +** +** +** +** // x_event | x_mask | action +** // 2 | 1L << 0 | key press +** // 3 | 1L << 1 | key release +** // 4 | | mouse press +** // 5 | | mouse release +** // 6 | | mouse move +** // 12 | | expose event +** // 17 | 1L << 17 | x button press (red button) +** // | | +** +** +** +** FONCTIONS EXTERNES AUTORISEES : +** . open +** . close +** . read +** . write +** . malloc +** . free +** . perror +** . strerror +** . exit +** . math lib : +** -lm // needed at compilation to link the lib : +** gcc foo.c -o foo -lm +** man +** man 3 math +** . minilibx : +** minilibx_opengl.tgz +** minilibx_mms_20200219_beta.tgz +** // to open an archive.tgz : +** gzip -d archive.tgz --> turn it into archive.tar +** tar -xf archive.tar --> un-archive it +** // how to add a man directory to the manual : +** . cp man/man1 /usr/local/share/man/man1 +** (create man1 if necessary) +** . mandb +** // i didn't use any of both library above but the one for linux : +** https://github.com/42Paris/minilibx-linux +** there are pbm with their man pages +*/