diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..282b13f Binary files /dev/null and b/.DS_Store differ diff --git a/get_next_line/get_next_line.c b/get_next_line/get_next_line.c new file mode 100644 index 0000000..a182f41 --- /dev/null +++ b/get_next_line/get_next_line.c @@ -0,0 +1,116 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/27 20:59:49 by hyko #+# #+# */ +/* Updated: 2022/02/21 15:03:04 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line.h" + +char *get_next_line(int fd) +{ + static char *backup; + char *return_line; + int nl_idx; + int pre_len; + + if (fd < 0 || BUFFER_SIZE <= 0) + return (NULL); + nl_idx = gnl_find_newline(backup); + if (nl_idx == -1) + { + pre_len = ft_strlen(backup); + backup = gnl_expand_backup(backup, fd); + if ((int)ft_strlen(backup) == pre_len) + nl_idx = ft_strlen(backup); + } + if (nl_idx != -1) + { + return_line = ft_substr(backup, 0, nl_idx + 1); + backup = gnl_cut_backup(backup, return_line); + return (return_line); + } + return (get_next_line(fd)); +} + +int gnl_find_newline(char *backup) +{ + int idx; + int len; + + if (backup == NULL) + return (-1); + idx = 0; + len = ft_strlen(backup); + while (idx < len) + { + if (backup[idx] == '\n') + return (idx); + idx++; + } + return (-1); +} + +char *gnl_read_line(int fd) +{ + char *read_line; + int read_size; + + read_line = (char *)malloc(BUFFER_SIZE + 1); + if (read_line == NULL) + return (NULL); + read_size = read(fd, read_line, BUFFER_SIZE); + if (read_size == -1) + { + free(read_line); + return (NULL); + } + read_line[read_size] = '\0'; + return (read_line); +} + +char *gnl_expand_backup(char *backup, int fd) +{ + char *new_backup; + char *read_line; + + read_line = gnl_read_line(fd); + if (read_line == NULL) + return (NULL); + if (read_line[0] == 0) + { + free(read_line); + return (backup); + } + if (backup == NULL) + return (read_line); + new_backup = ft_strjoin(backup, read_line); + free(backup); + free(read_line); + return (new_backup); +} + +char *gnl_cut_backup(char *backup, char *return_line) +{ + char *new_backup; + int backup_len; + int return_len; + + if (backup == NULL || return_line == NULL) + return (NULL); + backup_len = ft_strlen(backup); + return_len = ft_strlen(return_line); + if (backup_len == return_len) + { + free(backup); + return (NULL); + } + new_backup = ft_substr(backup, return_len, backup_len - return_len); + free(backup); + return (new_backup); +} diff --git a/get_next_line/get_next_line.h b/get_next_line/get_next_line.h new file mode 100644 index 0000000..e85f60d --- /dev/null +++ b/get_next_line/get_next_line.h @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/27 21:00:30 by hyko #+# #+# */ +/* Updated: 2022/12/20 15:10:57 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_H + +# define GET_NEXT_LINE_H + +# include +# include + +#define BUFFER_SIZE 42 + +char *get_next_line(int fd); +char *gnl_expand_backup(char *backup, int fd); +char *gnl_cut_backup(char *backup, char *return_line); +char *gnl_read_line(int fd); +int gnl_find_newline(char *read_line); + +size_t ft_strlen(const char *s); +char *ft_strdup(const char *s1); +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); + +#endif diff --git a/get_next_line/get_next_line_utils.c b/get_next_line/get_next_line_utils.c new file mode 100644 index 0000000..faabaf3 --- /dev/null +++ b/get_next_line/get_next_line_utils.c @@ -0,0 +1,102 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/27 21:00:08 by hyko #+# #+# */ +/* Updated: 2022/02/20 18:47:46 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line.h" + +size_t ft_strlen(const char *s) +{ + size_t i; + + i = 0; + if (s == NULL) + return (0); + while (s[i] != '\0') + i++; + return (i); +} + +char *ft_strdup(const char *s1) +{ + int i; + int len; + char *s2; + + len = ft_strlen(s1); + s2 = (char *)malloc(sizeof(char) * (len + 1)); + if (s2 == NULL) + return (NULL); + i = 0; + while (s1[i] != '\0') + { + s2[i] = s1[i]; + i++; + } + s2[i] = '\0'; + return (s2); +} + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + size_t i; + size_t j; + char *substr; + + i = 0; + j = 0; + if (s == 0) + return (NULL); + if (start >= ft_strlen(s)) + return (ft_strdup("")); + substr = (char *)malloc(sizeof(char) * (len + 1)); + if (substr == NULL) + return (NULL); + while (s[i] != '\0') + { + if (i >= start && j < len) + { + substr[j] = s[i]; + j++; + } + i++; + } + substr[j] = '\0'; + return (substr); +} + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *new_str; + size_t s1_len; + size_t s2_len; + size_t i; + size_t j; + + if (s1 == NULL && s2 == NULL) + return (NULL); + if (s1 == NULL) + return ((char *)s2); + if (s2 == NULL) + return ((char *)s1); + s1_len = ft_strlen(s1); + s2_len = ft_strlen(s2); + i = -1; + j = 0; + new_str = (char *)malloc(sizeof(char) * (s1_len + s2_len + 1)); + if (new_str == NULL) + return (NULL); + while (++i < s1_len) + new_str[i] = s1[i]; + while (j < s2_len) + new_str[i++] = s2[j++]; + new_str[i] = '\0'; + return (new_str); +} diff --git a/jk/3d_render.c b/jk/3d_render.c index 867524e..741e182 100644 --- a/jk/3d_render.c +++ b/jk/3d_render.c @@ -1,5 +1,24 @@ #include "cub3d.h" + +void init_img_data(t_all* p_all) +{ + int x; + int y; + + y = 0; + while (y < WINDOW_HEI) + { + x = 0; + while (x < WINDOW_WID) + { + p_all->img.data[WINDOW_WID * y + x] = 0; + x++; + } + y++; + } +} + void draw_ceiling(t_all *p_all, int ray_num, int wall_top_pixel, int color) { int x; @@ -11,7 +30,7 @@ void draw_ceiling(t_all *p_all, int ray_num, int wall_top_pixel, int color) x = 0; while (x < WALL_STRIP_WIDTH) { - if (p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)] == PINK) + if (!p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)]) p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)] = color; x++; } @@ -30,7 +49,7 @@ void draw_floor(t_all *p_all, int ray_num, int wall_bottom_pixel, int color) x = 0; while (x < WALL_STRIP_WIDTH) { - if (p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)] == PINK) + if (!p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)]) p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)] = color; x++; } @@ -78,7 +97,7 @@ void render_3d_wall(t_all *p_all, int ray_num) x = 0; while (x < WALL_STRIP_WIDTH) { - if (p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)] == PINK) + if (!p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)]) p_all->img.data[WINDOW_WID * y + (x + ray_num * WALL_STRIP_WIDTH)] = color; //현재위치픽셀 색이 초기설정색이면 색을 덧입히기 x++; @@ -89,4 +108,4 @@ void render_3d_wall(t_all *p_all, int ray_num) draw_floor(p_all, ray_num, wall_bottom_pixel, GROUND); }//ray_num의 순번을 잘 넘겨주기 위해 draw_ray() 수정함 //화면~player 거리 -//y축 기준으로 wall_top_pixel~wall_bottom_pixel 그려줌. \ No newline at end of file +//y축 기준으로 wall_top_pixel~wall_bottom_pixel 그려줌. diff --git a/jk/Makefile b/jk/Makefile index 109be19..04fa4a1 100644 --- a/jk/Makefile +++ b/jk/Makefile @@ -9,14 +9,18 @@ SRC = main.c \ playeronmap.c \ draw_ray.c \ key.c \ - map_parse.c \ get_next_line.c \ get_next_line_util.c \ - 3d_render.c + 3d_render.c \ + parse_map.c \ + map_info.c + OBJ = $(SRC:.c=.o) MLX_FLAGS = -I. -L../mlx -lmlx -framework OpenGL -framework Appkit +LIB = -L../libft -lft + all : $(NAME) .c.o : @@ -25,7 +29,7 @@ all : $(NAME) # $(CC) $(CCFLAGS) $(MLX_FLAGS) -c $< -o $@ $(NAME) : $(OBJ) - $(CC) $(CCFLAGS) $(MLX_FLAGS) $(OBJ) -o $(NAME) + $(CC) $(CCFLAGS) $(MLX_FLAGS) $(OBJ) -o $(NAME) $(LIB) # $(CC_M1) $(CCFLAGS) $(MLX_FLAGS) $(OBJ) -o $(NAME) clean : @@ -38,4 +42,4 @@ re : make fclean make all -.PHONY : all clean fclean re \ No newline at end of file +.PHONY : all clean fclean re diff --git a/jk/cub3d.h b/jk/cub3d.h index b848adc..d3c72ae 100644 --- a/jk/cub3d.h +++ b/jk/cub3d.h @@ -3,6 +3,8 @@ #include "../mlx/mlx.h" #include "key_macos.h" +#include "../get_next_line/get_next_line.h" +#include "../libft/libft.h" #include #include #include @@ -13,12 +15,6 @@ #include #include -typedef struct s_mlx -{ - void *mlx; - void *win; -} t_mlx; - typedef struct s_img { void *img; @@ -32,10 +28,10 @@ typedef struct s_player { double x; double y; - double rotation_angle;//바라보는각도. 시야각도 - double walk_speed;//움직이는 속도 - double turn_speed;//바라보는 각도의 조정속도 - double updown_sight;//변수명 변경 + double rotation_angle; + double walk_speed; + double turn_speed; + double updown_sight; } t_player; typedef struct s_key @@ -46,7 +42,7 @@ typedef struct s_key bool right; bool right_rotation; bool left_rotation; - int updown_sight;//변수명 변경 + int updown_sight; } t_key; typedef struct s_temp_ray @@ -59,9 +55,7 @@ typedef struct s_temp_ray double xhit_wall; double yhit_wall; double distance; -} t_temp_ray;//변수명 다시 -//일회용. -//변수들은 광선 한개 그릴때만 유효함 +} t_temp_ray; typedef struct s_ray { @@ -74,9 +68,7 @@ typedef struct s_ray bool ray_faces_up; bool ray_faces_right; bool ray_faces_left; -} t_ray;//변수명 다시 -//광선이 벽과 만나는 좌표와 -//광선의 방향적인 요소를 가지고있다 +} t_ray; typedef struct s_map { @@ -93,18 +85,46 @@ typedef struct s_point double y; } t_point; +typedef struct s_map_info //map 구조체에 합칠지 고민중...(hyko) +{ + void* no; + void* so; + void* we; + void* ea; + int f; + int c; + char** tile; + int info_cnt; + int tile_cnt; +} t_map_info; + +typedef enum e_type +{ + NO, + SO, + WE, + EA, + F, + C, + TILE, +} t_type; + typedef struct s_all { - t_mlx mlx; t_img img; t_player player; t_key key; t_ray ray; t_map map; +<<<<<<< HEAD + t_map_info map_info; +======= + void *mlx; + void *win; +>>>>>>> f993e28f07096fbc40e69ec85ebc737183d1b81e } t_all; #define MINI_SCALE 0.25 -#define TILE_SIZE 80 #define WINDOW_WID 640 #define WINDOW_HEI 480 @@ -116,17 +136,18 @@ typedef struct s_all #define PI (3.14159265358979323846264338327950288) #define TWO_PI (6.28318530717958647692528676655900576) #define HALF_PI (1.57079632679489661923132169163975144) -#define RAY_RANGE (PI / 3.0) // player 시야범위. 무난하게 60도 -#define RAY_COUNT 121 // 광선의 갯수. 2보다 커야하고 홀수 추천 +// #define RAY_COUNT 121 +#define RAY_COUNT WINDOW_WID -#define BUFFER_SIZE 333 +// #define BUFFER_SIZE 333 #define FOV_ANGLE 60 * (PI / 180.0) -#define WALL_STRIP_WIDTH WINDOW_WID / RAY_COUNT +// #define WALL_STRIP_WIDTH (WINDOW_WID / RAY_COUNT) +#define WALL_STRIP_WIDTH 1 #define BLUE 0x0000FF #define WHITE 0xFFFFFF #define GREY 0xAAAAAA -#define BLACK 0x000000 +#define BLACK 0x000001 //초기화 값과 구분하기 위해 블루 한방울...(hyko) #define PINK 0xFF00FF #define RED 0xFF0000 @@ -141,8 +162,7 @@ void update_player(t_all *p_all); void fill_square(t_all *p_all, int x, int y, int color); void render_map(t_all *p_all); void draw_player(t_all *p_all); -int ft_loop(t_all *p_all);//이름 수정할거임 -void render_player(t_all *p_all); +int ft_loop(t_all *p_all); int key_release(int keycode, t_all *p_all); void ray_init(t_ray *p_ray, double ang); @@ -179,4 +199,17 @@ void render_3d(t_all *p_all); void draw_ceiling(t_all *p_all, int ray_num, int wall_top_pixel, int color); void draw_floor(t_all *p_all, int ray_num, int wall_bottom_pixel, int color); -#endif \ No newline at end of file +<<<<<<< HEAD +void parse_map(int argc, char** argv, t_all* all); +void is_cub_file(const char* filename); +void check_type(char* line, t_all *all); +void display_err_msg_and_exit(const char* err_msg); +======= +void init_mlx(t_all *p_all); +void init_key(t_all *p_all); +void ft_init(t_all *p_all); +void loop_hook(t_all *p_all); +void init_img_data(t_all* p_all); +>>>>>>> f993e28f07096fbc40e69ec85ebc737183d1b81e + +#endif diff --git a/jk/draw_ray.c b/jk/draw_ray.c index f74139e..69049dd 100644 --- a/jk/draw_ray.c +++ b/jk/draw_ray.c @@ -28,7 +28,7 @@ void ray_init(t_ray *p_ray, double ang) p_ray->ray_faces_up = !(p_ray->ray_faces_down); p_ray->ray_faces_right = p_ray->ray_angle < 0.5 * PI || p_ray->ray_angle > 1.5 * PI; p_ray->ray_faces_left = !(p_ray->ray_faces_right); -}//t_ray 구조체 초기화 +} void calc_distance(t_all *p_all, t_temp_ray *hv) { @@ -36,10 +36,8 @@ void calc_distance(t_all *p_all, t_temp_ray *hv) hv->distance = distance_btw_points(p_all->player.x, p_all->player.y , hv->xhit_wall, hv->yhit_wall); else - hv->distance = __DBL_MAX__;//써두되나... + hv->distance = __DBL_MAX__; } -//벽 찾았으면 거리 계산함 -//못찾았으면 double 자료형 최대값 지정.(수평경계좌표와 수직경계좌표를 비교할때 항상 선택받지 못하도록 하기 위해) double distance_btw_points(double xa, double ya, double xb, double yb) { @@ -71,21 +69,19 @@ void calc_ray(t_all *p_all, t_temp_ray *hv) } } calc_distance(p_all, hv); -}//실질적으로 벽 위치 찾는다 -//calc_horz_ray(), calc_vert_ray()에서 intercept, step이 정해지고, -//여기선 그 값들을 이용해서 계산한다 -//calc_distance()는 거리를 계산해준다 +} + void calc_horz_ray(t_all *p_all, t_temp_ray *p_horz) { p_horz->found_wallHit = false; p_horz->xhit_wall = 0; p_horz->yhit_wall = 0; - p_horz->yintercept = floor(p_all->player.y / p_all->map.row_tile_size) * p_all->map.row_tile_size;// + p_horz->yintercept = floor(p_all->player.y / p_all->map.row_tile_size) * p_all->map.row_tile_size; if (p_all->ray.ray_faces_down) p_horz->yintercept += p_all->map.row_tile_size; else - p_horz->yintercept += 0; + ; p_horz->xintercept = p_all->player.x + (p_horz->yintercept - p_all->player.y) / tan(p_all->ray.ray_angle); @@ -96,7 +92,7 @@ void calc_horz_ray(t_all *p_all, t_temp_ray *p_horz) else p_horz->ystep *= 1; - p_horz->xstep = p_all->map.col_tile_size / tan(p_all->ray.ray_angle); + p_horz->xstep = p_all->map.row_tile_size / tan(p_all->ray.ray_angle); if (p_all->ray.ray_faces_left && p_horz->xstep > 0) p_horz->xstep *= -1; else @@ -107,7 +103,7 @@ void calc_horz_ray(t_all *p_all, t_temp_ray *p_horz) p_horz->xstep *= 1; calc_ray(p_all, p_horz); -}//수평 계산 +} void calc_vert_ray(t_all *p_all, t_temp_ray *p_vert) { @@ -119,7 +115,7 @@ void calc_vert_ray(t_all *p_all, t_temp_ray *p_vert) if (p_all->ray.ray_faces_right) p_vert->xintercept += p_all->map.col_tile_size; else - p_vert->xintercept += 0; + ; p_vert->yintercept = p_all->player.y + (p_vert->xintercept - p_all->player.x) * tan(p_all->ray.ray_angle); @@ -130,7 +126,7 @@ void calc_vert_ray(t_all *p_all, t_temp_ray *p_vert) else p_vert->xstep *= 1; - p_vert->ystep = p_all->map.row_tile_size * tan(p_all->ray.ray_angle); + p_vert->ystep = p_all->map.col_tile_size * tan(p_all->ray.ray_angle); if (p_all->ray.ray_faces_up && p_vert->ystep > 0) p_vert->ystep *= -1; else @@ -172,17 +168,17 @@ void draw_line(t_all *p_all, double dx, double dy) { set_point(&p1, ray_x, ray_y); set_point(&p2, ray_x + dx, ray_y + dy); - if (!hit_wall(ray_x + dx, ray_y + dy, p_all)) + if (!hit_wall(p2.x, p2.y, p_all)) { locate_for_mini(&x, &y, p1, p_all); p_all->img.data[WINDOW_WID * y + x] = RED; } else break; - ray_y += dy; ray_x += dx; + ray_y += dy; } -} +}//여기랑 calc_ray 겹치는부분이 있는것같아서, 되면 합치는거어떨까? void draw_one_ray(t_all *p_all, double ang, int i) { @@ -210,7 +206,6 @@ void draw_one_ray(t_all *p_all, double ang, int i) draw_line(p_all, p_all->ray.xhit_wall - p_all->player.x, p_all->ray.yhit_wall - p_all->player.y); render_3d_wall(p_all, i); } -//각각 광선에 대한 정보는 이 함수에 와서야 결정된다. void draw_ray(t_all *p_all) { @@ -218,15 +213,14 @@ void draw_ray(t_all *p_all) double max_angle; int i; - angle = p_all->player.rotation_angle - (RAY_RANGE / 2.0); - max_angle = p_all->player.rotation_angle + (RAY_RANGE / 2.0); - i = 0; + angle = p_all->player.rotation_angle - (FOV_ANGLE / 2.0); + max_angle = p_all->player.rotation_angle + (FOV_ANGLE / 2.0); + i = 0; while (i < RAY_COUNT) { draw_one_ray(p_all, angle, i); - angle += RAY_RANGE / RAY_COUNT; + angle += FOV_ANGLE / RAY_COUNT; i++; } -} -//원래 광선 동시에 2개 그렸는데, 왼쪽부터 하나씩 그려주는걸로 수정 \ No newline at end of file +} \ No newline at end of file diff --git a/jk/get_next_line.c b/jk/get_next_line.c deleted file mode 100644 index 5241bf2..0000000 --- a/jk/get_next_line.c +++ /dev/null @@ -1,97 +0,0 @@ -#include "cub3d.h" - -char *for_next(char *save) -{ - char *str; - int i; - int j; - - i = 0; - while (save[i] && save[i] != '\n') - i++; - if (!save[i]) - { - free(save); - return (NULL); - } - str = (char *)malloc(sizeof(char) * (ft_strlen((const char *)save) - i)); - if (!str) - return (NULL); - j = 0; - while (save[i + 1]) - { - str[j] = save[i + 1]; - j++; - i++; - } - str[j] = 0; - free (save); - return (str); -} - -char *rtg(char *save) -{ - char *str; - int i; - - i = 0; - if (!save[i]) - return (NULL); - while (save[i] && save[i] != '\n') - i++; - str = (char *)malloc(sizeof(char) * (i + 2)); - if (!str) - return (NULL); - i = 0; - while (save[i] && save[i] != '\n') - { - str[i] = save[i]; - i++; - } - if (save[i] == '\n') - { - str[i] = save[i]; - i++; - } - str[i] = 0; - return (str); -} - -char *read_and_save(int fd, char *save) -{ - char *buf; - int rd; - - buf = (char *)malloc(sizeof(char) * (BUFFER_SIZE + 1)); - if (!buf) - return (NULL); - rd = 1; - while (!ft_strchr((const char *)save, '\n') && rd != 0) - { - rd = read(fd, buf, BUFFER_SIZE); - if (rd == -1) - { - free (buf); - return (NULL); - } - buf[rd] = 0; - save = ft_strjoin((const char *)save, buf); - } - free (buf); - return (save); -} - -char *get_next_line(int fd) -{ - char *line; - static char *save; - - if (fd < 0 || BUFFER_SIZE <= 0) - return (NULL); - save = read_and_save(fd, save); - if (!save) - return (NULL); - line = rtg(save); - save = for_next(save); - return (line); -} diff --git a/jk/get_next_line_util.c b/jk/get_next_line_util.c deleted file mode 100644 index a8cfeb0..0000000 --- a/jk/get_next_line_util.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "cub3d.h" - -size_t ft_strlen(const char *str) -{ - size_t c; - - c = 0; - if (!str) - return (0); - while (str[c] != '\0') - c++; - return (c); -} - -char *ft_strchr(const char *s, int c) -{ - int i; - size_t len; - - i = 0; - if (!s) - return (0); - len = ft_strlen(s); - while ((size_t)i < len + 1) - { - if (s[i] == (unsigned char) c) - return ((char *)s + i); - i++; - } - return (0); -} - -size_t ft_strlcpy(char *dst, const char *src, size_t dstsize) -{ - size_t i; - - i = 0; - while (i + 1 < dstsize && src[i]) - { - dst[i] = src[i]; - i++; - } - if (dstsize > 0) - dst[i] = 0; - return (ft_strlen(src)); -} - -size_t ft_strlcat(char *dst, const char *src, size_t dstsize) -{ - size_t len; - size_t i; - - len = ft_strlen(dst); - if (dstsize >= len + 1) - { - i = 0; - while (src[i] && i < dstsize - 1 - len) - { - dst[len + i] = src[i]; - i++; - } - dst[len + i] = 0; - return (ft_strlen(src) + len); - } - return (ft_strlen(src) + dstsize); -} - -char *ft_strjoin(const char *s1, const char *s2) -{ - char *newstr; - int s1_len; - int s2_len; - - s1_len = ft_strlen(s1); - s2_len = ft_strlen(s2); - newstr = (char *)malloc(sizeof(char) * (s1_len + s2_len + 1)); - if (newstr == NULL) - return (NULL); - ft_strlcpy(newstr, s1, s1_len + 1); - ft_strlcat(newstr + (s1_len), s2, s2_len + 1); - free ((char *)s1); - return (newstr); -} diff --git a/jk/main.c b/jk/main.c index 2bb6c04..cd9b3fb 100644 --- a/jk/main.c +++ b/jk/main.c @@ -2,35 +2,83 @@ int ft_loop(t_all *p_all)//이름 수정할거임 { +<<<<<<< HEAD + printf("[debug: stop here]\n"); update_player(p_all); +======= + update_player(p_all);//later +>>>>>>> f993e28f07096fbc40e69ec85ebc737183d1b81e render_map(p_all); - render_player(p_all); - draw_ray(p_all); - mlx_put_image_to_window(p_all->mlx.mlx, p_all->mlx.win, p_all->img.img, 0, 0); + // render_player(p_all); + draw_player(p_all); + // draw_ray(p_all);여기에 없어도 될것같은딩..? + mlx_put_image_to_window(p_all->mlx, p_all->win, p_all->img.img, 0, 0); return (0); } +void init_mlx(t_all *p_all) +{ + p_all->mlx = mlx_init();//디스플레이와 내 프로그램을 연결 시켜주고, + p_all->win = mlx_new_window(p_all->mlx, WINDOW_WID, WINDOW_HEI, "title");//새로운 창 화면에 만들고 + p_all->img.img = mlx_new_image(p_all->mlx, WINDOW_WID, WINDOW_HEI);//지정한 가로 세로로 만들어진 직사각형을 보이지 않는 공간에 그려두고(메모리에 새 이미지 만들고), + p_all->img.data = (int *)mlx_get_data_addr(p_all->img.img, &(p_all->img.bpp), + &(p_all->img.size_line), &(p_all->img.endian)); + //생성된 이미지에 대한 정보 반환해서, 나중에 user가 이 정보 수정할수있음 +} + +void init_key(t_all *p_all) +{ + p_all->key.up = false; + p_all->key.down = false; + p_all->key.left = false; + p_all->key.right = false; + p_all->key.left_rotation = false; + p_all->key.right_rotation = false; + p_all->key.updown_sight = false; +} + +void ft_init(t_all *p_all) +{ + init_player(p_all);//player 구조체 초기화시키고, + init_key(p_all);//key " + init_mlx(p_all);//mlx 사용하기 위한 초기 세팅해주고 +} + +void loop_hook(t_all *p_all) +{ + mlx_hook(p_all->win, X_EVENT_KEY_PRESS, 0, &key_press, p_all);//키 누를때 + //mlx상 모든 이벤트가 발생할때 hook 한다. + //키보드입력이나 마우스클릭을 프로그램에 도달하기전 가로채서 다른 역할하게끔한다. + mlx_hook(p_all->win, X_EVENT_KEY_RELEASE, 0, &key_release, p_all);//키 떼고있을때 + mlx_loop_hook(p_all->mlx, &ft_loop, p_all);//ft_loop()를 계속 돌린다 + //등록된 이벤트가 발생하지 않을 경우, 두번째 함수 호출함 + mlx_loop(p_all->mlx);//이벤트를 받고, 이벤트를 관리함. + //무한 루프를 돈다. +} + int main(int argc, char **argv) { - if (argc != 2) - { - printf("'2' arguments needed.\n"); - return (0); - }//메시지, 반환값 수정! t_all s_all; - init_map(argv[1], &s_all); + +<<<<<<< HEAD init_player(&s_all); s_all.mlx.mlx = mlx_init(); - s_all.mlx.win = mlx_new_window(s_all.mlx.mlx, WINDOW_WID, WINDOW_HEI, "title"); + s_all.mlx.win = mlx_new_window(s_all.mlx.mlx, WINDOW_WID, WINDOW_HEI, "jeeko's cub3d"); s_all.img.img = mlx_new_image(s_all.mlx.mlx, WINDOW_WID, WINDOW_HEI); s_all.img.data = (int *)mlx_get_data_addr(s_all.img.img, &(s_all.img.bpp), &(s_all.img.size_line), &(s_all.img.endian)); + parse_map(argc, argv, &s_all); mlx_hook(s_all.mlx.win, X_EVENT_KEY_PRESS, 0, &key_press, &s_all); mlx_hook(s_all.mlx.win, X_EVENT_KEY_RELEASE, 0, &key_release, &s_all); mlx_loop_hook(s_all.mlx.mlx, &ft_loop, &s_all); mlx_loop(s_all.mlx.mlx); +======= + init_map(argv[1], &s_all);//필요시 argv[1] t_all에 넣기 + ft_init(&s_all); + loop_hook(&s_all); +>>>>>>> f993e28f07096fbc40e69ec85ebc737183d1b81e return (0); -} \ No newline at end of file +} diff --git a/jk/map3.cub b/jk/map3.cub new file mode 100644 index 0000000..cfed194 --- /dev/null +++ b/jk/map3.cub @@ -0,0 +1,4 @@ +1111 +1001 +1001 +1111 \ No newline at end of file diff --git a/jk/map_info.c b/jk/map_info.c new file mode 100644 index 0000000..ccc6ac7 --- /dev/null +++ b/jk/map_info.c @@ -0,0 +1,139 @@ +#include "cub3d.h" + +void is_cub_file(const char* filename) +{ + size_t len = ft_strlen(filename); + if (len < 5) + display_err_msg_and_exit("Invalid file extension"); + if (ft_strncmp(&filename[len - 4], ".cub", 4)) + display_err_msg_and_exit("Invalid file extension"); +} + +static void is_valid_texture(char* path, int type, t_all* all) +{ + int img_width = 64; //나중에 헤더에 정의 + int img_height = 64; + + int e_flag; + void* tmp; + + while(*path == ' ') //이거 메모리 누수 안나나? + path++; + if (path[ft_strlen(path) - 1] == '\n') //개행 지우기 + path[ft_strlen(path) - 1] = '\0'; + tmp = mlx_xpm_file_to_image(all->mlx.mlx, path, &img_width, &img_height); + if (!tmp) + display_err_msg_and_exit("Invalid image file"); + + e_flag = 1; + if (type == NO && !all->map_info.no && e_flag--) + all->map_info.no = tmp; + else if (type == SO && !all->map_info.so && e_flag--) + all->map_info.so = tmp; + else if (type == WE && !all->map_info.we && e_flag--) + all->map_info.we = tmp; + else if (type == EA && !all->map_info.ea && e_flag--) + all->map_info.ea = tmp; + + if (e_flag) + display_err_msg_and_exit("Duplicate Elements"); +} + +static void free_double_pointer(char** arr) +{ + int i; + + i = 0; + while (arr[i]) + { + free(arr[i]); + i++; + } + free(arr); +} + +static void is_valid_color(char* color, int type, t_all* all) +{ + char** tmp; + int rgb[3]; + int result; + int i; + + tmp = ft_split(color, ','); + i = 0; + while (tmp[i]) + i++; + if (i != 3) + { + free_double_pointer(tmp); + display_err_msg_and_exit("Invalid color information"); + } + result = 0; + i = 0; + while (i < 3) + { + rgb[i] = ft_atoi(tmp[i]); + if (rgb[i] < 0 || rgb[i] > 255) + display_err_msg_and_exit("Invalid color information"); + result <<= 8; + result += rgb[i]; + i++; + } + if (type == F) + all->map_info.f = result; + else if (type == C) + all->map_info.c = result; + free_double_pointer(tmp); +} + +static void is_valid_tile(char* line, t_all* all) +{ + int i; + + i = 0; + while (line[i]) + { + if (!ft_strchr(" \n01NSEW", line[i])) + display_err_msg_and_exit("Invalid map"); + i++; + } + // all->map_info.tile[all->map_info.tile_cnt] = line; + all->map.dp_map[all->map_info.tile_cnt] = line; + if (all->map.col < (ft_strlen(line) - 1)) + all->map.col = ft_strlen(line) - 1; + all->map_info.tile_cnt++; +} + +void check_type(char* line, t_all *all) +{ + int i; + + i = 0; + while (line[i] == ' ') + i++; + if (line[i] == '\n' && (all->map_info.tile_cnt == 0 || all->map_info.tile_cnt == (int)all->map.row)) + return ; + if (all->map_info.info_cnt < 6) + { + if (line[i] == 'N' && line[i + 1] == 'O') + is_valid_texture(line += 2, NO, all); + else if (line[i] == 'S' && line[i + 1] == 'O') + is_valid_texture(line += 2, SO, all); + else if (line[i] == 'W' && line[i + 1] == 'E') + is_valid_texture(line += 2, WE, all); + else if (line[i] == 'E' && line[i + 1] == 'A') + is_valid_texture(line += 2, EA, all); + else if (line[i] == 'F') + is_valid_color(line += 1, F, all); + else if (line[i] == 'C') + is_valid_color(line += 1, C, all); + else + display_err_msg_and_exit("Invalid element in map file"); + all->map_info.info_cnt++; + return ; + } + if (all->map_info.info_cnt == 6 && line[i] == '1') + is_valid_tile(line, all); + else + display_err_msg_and_exit("Invalid element in map file"); +} diff --git a/jk/map_parse.c b/jk/map_parse.c index 58becb8..06ff79e 100644 --- a/jk/map_parse.c +++ b/jk/map_parse.c @@ -29,7 +29,7 @@ void get_row_col(char *argv, t_all *p_all) void get_map(char *argv, t_all *p_all) { - get_row_col(argv, p_all); + get_row_col(argv, p_all);//맵의 행렬 크기 가져오고, int fd; fd = open(argv, O_RDONLY); if (fd == -1) @@ -57,7 +57,7 @@ void get_map(char *argv, t_all *p_all) void init_map(char *argv, t_all *p_all) { - get_map(argv, p_all); - p_all->map.row_tile_size = WINDOW_HEI / p_all->map.row; + get_map(argv, p_all);//맵 이중포인터에 넣어주고, + p_all->map.row_tile_size = WINDOW_HEI / p_all->map.row;//타일 사이즈 설정해주고 p_all->map.col_tile_size = WINDOW_WID / p_all->map.col; } diff --git a/jk/minimap.c b/jk/minimap.c index 57ad851..b284821 100644 --- a/jk/minimap.c +++ b/jk/minimap.c @@ -1,11 +1,11 @@ #include "cub3d.h" -// void locate_for_mini(int *xp, int *yp, int x, int y, t_all *p_all) void locate_for_mini(int *xp, int *yp, t_point p, t_all *p_all) { *xp = (int)((1 - MINI_SCALE) * p_all->map.col_tile_size * p_all->map.col + MINI_SCALE * p.x); *yp = (int)((1 - MINI_SCALE) * p_all->map.row_tile_size * p_all->map.row + MINI_SCALE * p.y); -} +}//화면 맨 아래, 맨 오른쪽에 위치할수있게설정. + void fill_square(t_all *p_all, int x, int y, int color) { int j; @@ -24,39 +24,28 @@ void fill_square(t_all *p_all, int x, int y, int color) j++; } k++; - } + }//타일 하나 그림 } void render_map(t_all *p_all) { unsigned long long j; unsigned long long k; - int x; - int y; + //미니맵과, 3d 동시에 그려주기. - y = 0; - while (y < WINDOW_HEI) - { - x = 0; - while (x < WINDOW_WID) - { - p_all->img.data[WINDOW_WID * y + x] = PINK; - x++; - } - y++; - } + init_img_data(p_all); k = 0; - while (k < p_all->map.row) + while (k < p_all->map.row)//미니맵 그리기 { j = 0; while (j < p_all->map.col) { if (p_all->map.dp_map[k][j] == '1') - fill_square(p_all, (int)(p_all->map.col_tile_size * j), (int)(p_all->map.row_tile_size * k), 0x000000); + fill_square(p_all, (int)(p_all->map.col_tile_size * j), (int)(p_all->map.row_tile_size * k), BLACK); else - fill_square(p_all, (int)(p_all->map.col_tile_size * j), (int)(p_all->map.row_tile_size * k), 0xffffff); + fill_square(p_all, (int)(p_all->map.col_tile_size * j), (int)(p_all->map.row_tile_size * k), WHITE); j++; } k++; } -} \ No newline at end of file +} diff --git a/jk/parse_map.c b/jk/parse_map.c new file mode 100644 index 0000000..e415c82 --- /dev/null +++ b/jk/parse_map.c @@ -0,0 +1,129 @@ +#include "cub3d.h" + +// static void display_map_elements(t_all* all) +// { +// printf("texture NO: %p\n", all->map_info.no); +// printf("texture SO: %p\n", all->map_info.so); +// printf("texture WE: %p\n", all->map_info.we); +// printf("texture EA: %p\n", all->map_info.ea); +// printf("\n"); +// printf("color F: %x\n", all->map_info.f); +// printf("color C: %x\n", all->map_info.c); +// printf("\n"); +// printf("map\n row:%llu col:%llu\n", all->map.row, all->map.col); +// for (int i = 0; i < (int)all->map.row; i++) +// printf("%s", all->map.dp_map[i]); +// } + +void display_err_msg_and_exit(const char* err_msg) +{ + // free + printf("ERROR\n"); + printf("%s\n", err_msg); + exit (1); +} + +void get_row(char* filename, t_all* all) +{ + char *tmp; + int fd; + int i; + + all->map.row = 0; + all->map.col = 0; + + fd = open(filename, O_RDONLY); + if (!fd) + display_err_msg_and_exit("Invalid File"); + tmp = " "; + while (tmp) + { + i = 0; + tmp = get_next_line(fd); + if (tmp) + { + while (tmp[i] == ' ') + i++; + if (tmp[i] == '1') + all->map.row++; + } + free(tmp); + } + close(fd); +} + +static void init_map_info(t_all* all) +{ + all->map_info.no = 0; + all->map_info.so = 0; + all->map_info.we = 0; + all->map_info.ea = 0; + all->map_info.f = 0; + all->map_info.c = 0; + all->map.dp_map = (char**)malloc(sizeof(char*) * all->map.row); + all->map_info.info_cnt = 0; + all->map_info.tile_cnt = 0; +} + +static void is_vaild_map(char** map, int row) +{ + int i; + int j; + int player; + + i = 0; + j = 0; + player = 0; + while (i < row) + { + j = 0; + while (map[i][j]) + { + if (ft_strchr("NSEW", map[i][j])) + player++; + if (!ft_strchr(" \t\n1", map[i][j])) + { + if (ft_strchr(" \t\n", map[i - 1][j]) + || ft_strchr(" \t\n", map[i + 1][j]) + || ft_strchr(" \t\n", map[i][j - 1]) + || ft_strchr(" \t\n", map[i][j + 1])) + { + printf("[%d][%d]\n", i, j); + display_err_msg_and_exit("Invalid Map"); + } + } + j++; + } + i++; + } + if (player != 1) + display_err_msg_and_exit("Invalid Player"); +} + +void parse_map(int argc, char** argv, t_all* all) +{ + int fd; + char* line; + + if (argc != 2) + display_err_msg_and_exit("Invalid argument"); + is_cub_file(argv[1]); + get_row(argv[1], all); + init_map_info(all); + + fd = open(argv[1], O_RDONLY); + line = " "; + while (line) + { + line = get_next_line(fd); + if (line) + check_type(line, all); + } + free(line); + close(fd); + + is_vaild_map(all->map.dp_map, all->map.row); + + /* debug */ + // display_map_elements(all); +} diff --git a/jk/playeronmap.c b/jk/playeronmap.c index 81ca24a..2d8a869 100644 --- a/jk/playeronmap.c +++ b/jk/playeronmap.c @@ -4,7 +4,8 @@ void init_player(t_all *p_all) { p_all->player.x = WINDOW_WID / 2; p_all->player.y = WINDOW_HEI / 2; - p_all->player.rotation_angle = PI / 2;//? + p_all->player.rotation_angle = 0;// 오른쪽을 봄 + // p_all->player.rotation_angle = PI / 2 + PI;// 삐딱한거 보정해야함. 어안보정 문제일수도..? p_all->player.walk_speed = 1; p_all->player.turn_speed = 2 * (PI / 180);//? p_all->player.updown_sight = 0; @@ -15,7 +16,7 @@ bool hit_wall(double x, double y, t_all *p_all) int ix; int iy; - if (x < 0 || x > WINDOW_WID || y < 0 || y > WINDOW_HEI) + if (x < 0 || x > WINDOW_WID || y < 0 || y > WINDOW_HEI)//포함시키는게 맞지않나..? { return (true); } @@ -80,9 +81,9 @@ void draw_player(t_all *p_all) int y; t_point p; - set_point(&p, p_all->player.x, p_all->player.y); - locate_for_mini(&x, &y, p, p_all); - update_player(p_all); + set_point(&p, p_all->player.x, p_all->player.y);//t_point구조체 값 대입 + locate_for_mini(&x, &y, p, p_all);//화면 맨 오른쪽 맨 아래에 위치하게, + update_player(p_all);//있어야 더 스무스하게 움직임 int row; row = (-(MINI_SCALE * p_all->map.row_tile_size) / 10); while (row <= (MINI_SCALE * p_all->map.row_tile_size / 10)) @@ -95,11 +96,6 @@ void draw_player(t_all *p_all) col++; } row++; - } - draw_ray(p_all); -} - -void render_player(t_all *p_all) -{ - draw_player(p_all); + }//플레이어그려주고 + draw_ray(p_all);//있어야 광선 좀 풍부함 } \ No newline at end of file diff --git a/libft/Makefile b/libft/Makefile new file mode 100644 index 0000000..2a3b77b --- /dev/null +++ b/libft/Makefile @@ -0,0 +1,59 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: hyko +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2022/01/03 18:58:22 by hyko #+# #+# # +# Updated: 2022/01/18 00:16:54 by hyko ### ########.fr # +# # +# **************************************************************************** # + +NAME = libft.a + +CC = gcc +CFLAG = -Wall -Wextra -Werror + +RM = rm -rf + +INCLUDE = ./libft.h + +SRC = ft_isalpha.c ft_isdigit.c ft_isalnum.c ft_isascii.c ft_isprint.c \ + ft_toupper.c ft_tolower.c \ + ft_strlen.c ft_strncmp.c ft_strlcpy.c \ + ft_strlcat.c ft_strnstr.c ft_strchr.c ft_strrchr.c \ + ft_bzero.c ft_atoi.c ft_memchr.c ft_memcmp.c ft_memset.c \ + ft_memcpy.c ft_memmove.c ft_calloc.c ft_strdup.c \ + ft_substr.c ft_strjoin.c ft_strtrim.c ft_strmapi.c \ + ft_striteri.c ft_split.c ft_itoa.c \ + ft_putchar_fd.c ft_putstr_fd.c ft_putendl_fd.c ft_putnbr_fd.c \ + +SRC_BN = ft_lstnew.c ft_lstadd_front.c ft_lstsize.c ft_lstlast.c \ + ft_lstadd_back.c ft_lstdelone.c ft_lstclear.c \ + ft_lstiter.c ft_lstmap.c + +%.o : %.c + $(CC) $(CFLAG) -c $^ -o $@ + +OBJ = $(SRC:.c=.o) + +OBJ_BONUS = $(SRC_BN:.c=.o) + +all : $(NAME) + +$(NAME) : $(OBJ) + ar rc $@ $^ + +clean : + $(RM) $(OBJ) $(OBJ_BONUS) + +fclean : clean + $(RM) $(NAME) + +re : fclean all + +bonus : $(OBJ) $(OBJ_BONUS) + ar rc $(NAME) $^ + +.PHONY : all clean fclean re bonus diff --git a/libft/ft_atoi.c b/libft/ft_atoi.c new file mode 100644 index 0000000..80f429b --- /dev/null +++ b/libft/ft_atoi.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:07:53 by hyko #+# #+# */ +/* Updated: 2022/12/21 18:17:47 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_atoi(const char *str) +{ + long long i; + long long sign; + long long result; + + i = 0; + sign = 1; + result = 0; + while ((9 <= str[i] && str[i] <= 13) || str[i] == 32) + i++; + if (str[i] == '-' || str[i] == '+') + { + if (str[i] == '-') + sign = sign * -1; + i++; + } + while ('0' <= str[i] && str[i] <= '9') + { + result = result * 10 + (str[i] - 48); + if (result * sign > 2147483647) + return (-1); + else if (result * sign < -2147483648) + return (0); + i++; + } + while (str[i]) + { + if (!((9 <= str[i] && str[i] <= 13) || str[i] == 32 || str[i] == 0)) { + return (-1); + } + i++; + } + return (result * sign); +} diff --git a/libft/ft_bzero.c b/libft/ft_bzero.c new file mode 100644 index 0000000..25e29be --- /dev/null +++ b/libft/ft_bzero.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:08:08 by hyko #+# #+# */ +/* Updated: 2022/01/16 00:46:19 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + ft_memset(s, 0, n); +} diff --git a/libft/ft_calloc.c b/libft/ft_calloc.c new file mode 100644 index 0000000..14b88fe --- /dev/null +++ b/libft/ft_calloc.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:08:32 by hyko #+# #+# */ +/* Updated: 2022/01/16 20:37:34 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_calloc(size_t count, size_t size) +{ + void *tmp; + + tmp = malloc(count * size); + if (tmp == NULL) + return (NULL); + ft_bzero(tmp, (count * size)); + return (tmp); +} diff --git a/libft/ft_isalnum.c b/libft/ft_isalnum.c new file mode 100644 index 0000000..ca0b3f2 --- /dev/null +++ b/libft/ft_isalnum.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:08:55 by hyko #+# #+# */ +/* Updated: 2022/01/03 19:37:41 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + if ((ft_isalpha(c) == 1) || (ft_isdigit(c) == 1)) + return (1); + else + return (0); +} diff --git a/libft/ft_isalpha.c b/libft/ft_isalpha.c new file mode 100644 index 0000000..5e57d4a --- /dev/null +++ b/libft/ft_isalpha.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:09:05 by hyko #+# #+# */ +/* Updated: 2022/01/03 19:15:29 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalpha(int c) +{ + if (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'))) + return (1); + else + return (0); +} diff --git a/libft/ft_isascii.c b/libft/ft_isascii.c new file mode 100644 index 0000000..e5c4a5a --- /dev/null +++ b/libft/ft_isascii.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:09:21 by hyko #+# #+# */ +/* Updated: 2022/01/03 19:13:35 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isascii(int c) +{ + if ((c >= 0) && (c <= 127)) + return (1); + else + return (0); +} diff --git a/libft/ft_isdigit.c b/libft/ft_isdigit.c new file mode 100644 index 0000000..48f80cf --- /dev/null +++ b/libft/ft_isdigit.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:09:30 by hyko #+# #+# */ +/* Updated: 2022/01/03 19:31:44 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isdigit(int c) +{ + if ((c >= '0') && (c <= '9')) + return (1); + else + return (0); +} diff --git a/libft/ft_isprint.c b/libft/ft_isprint.c new file mode 100644 index 0000000..933020f --- /dev/null +++ b/libft/ft_isprint.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:09:37 by hyko #+# #+# */ +/* Updated: 2022/01/15 21:57:03 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isprint(int c) +{ + if (c >= 32 && c <= 126) + return (1); + else + return (0); +} diff --git a/libft/ft_itoa.c b/libft/ft_itoa.c new file mode 100644 index 0000000..8af12db --- /dev/null +++ b/libft/ft_itoa.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:09:45 by hyko #+# #+# */ +/* Updated: 2022/01/17 02:34:28 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int nb_len(long nb) +{ + int len; + + len = 0; + if (nb == 0) + return (1); + if (nb < 0) + len++; + while (nb != 0) + { + nb = nb / 10; + len++; + } + return (len); +} + +char *ft_itoa(int n) +{ + char *str; + int len; + int i; + long nb; + + nb = n; + i = 0; + len = nb_len(nb); + str = (char *)malloc(sizeof(char) * len + 1); + if (str == NULL) + return (NULL); + str[len] = '\0'; + if (nb < 0) + { + str[0] = '-'; + nb = nb * -1; + i = 1; + } + while (--len >= i) + { + str[len] = nb % 10 + 48; + nb = nb / 10; + } + return (str); +} diff --git a/libft/ft_lstadd_back.c b/libft/ft_lstadd_back.c new file mode 100644 index 0000000..3cc3140 --- /dev/null +++ b/libft/ft_lstadd_back.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:17:31 by hyko #+# #+# */ +/* Updated: 2022/01/17 00:19:55 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + t_list *last; + + if (lst == NULL || new == NULL) + return ; + if (*lst == NULL) + { + *lst = new; + return ; + } + last = ft_lstlast(*lst); + last->next = new; +} diff --git a/libft/ft_lstadd_front.c b/libft/ft_lstadd_front.c new file mode 100644 index 0000000..611f8c5 --- /dev/null +++ b/libft/ft_lstadd_front.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:14:16 by hyko #+# #+# */ +/* Updated: 2022/01/17 00:33:10 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + if (lst == NULL || new == NULL) + return ; + new->next = *lst; + *lst = new; +} diff --git a/libft/ft_lstclear.c b/libft/ft_lstclear.c new file mode 100644 index 0000000..a781b11 --- /dev/null +++ b/libft/ft_lstclear.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:18:36 by hyko #+# #+# */ +/* Updated: 2022/01/17 00:50:15 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstclear(t_list **lst, void (del)(void*)) +{ + t_list *curr; + + if (lst == NULL || del == NULL) + return ; + while (*lst != NULL) + { + curr = (*lst)->next; + ft_lstdelone(*lst, del); + *lst = curr; + } +} diff --git a/libft/ft_lstdelone.c b/libft/ft_lstdelone.c new file mode 100644 index 0000000..226c65a --- /dev/null +++ b/libft/ft_lstdelone.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:18:06 by hyko #+# #+# */ +/* Updated: 2022/01/17 00:37:48 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void*)) +{ + if (lst == NULL || del == NULL) + return ; + del(lst->content); + free(lst); +} diff --git a/libft/ft_lstiter.c b/libft/ft_lstiter.c new file mode 100644 index 0000000..23cefb4 --- /dev/null +++ b/libft/ft_lstiter.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:19:07 by hyko #+# #+# */ +/* Updated: 2022/01/17 00:57:54 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + t_list *curr; + + if (lst == NULL || f == NULL) + return ; + curr = lst; + while (curr != NULL) + { + f(curr->content); + curr = curr->next; + } +} diff --git a/libft/ft_lstlast.c b/libft/ft_lstlast.c new file mode 100644 index 0000000..f99cbba --- /dev/null +++ b/libft/ft_lstlast.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:15:27 by hyko #+# #+# */ +/* Updated: 2022/01/16 23:53:40 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (lst == NULL) + return (lst); + while (lst->next != NULL) + lst = lst->next; + return (lst); +} diff --git a/libft/ft_lstmap.c b/libft/ft_lstmap.c new file mode 100644 index 0000000..38c0d58 --- /dev/null +++ b/libft/ft_lstmap.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:19:32 by hyko #+# #+# */ +/* Updated: 2022/01/17 01:53:57 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new_lst; + t_list *curr; + + new_lst = NULL; + while (lst != NULL) + { + curr = ft_lstnew(f(lst->content)); + if (curr == NULL) + { + ft_lstclear(&new_lst, del); + return (NULL); + } + ft_lstadd_back(&new_lst, curr); + lst = lst->next; + } + return (new_lst); +} diff --git a/libft/ft_lstnew.c b/libft/ft_lstnew.c new file mode 100644 index 0000000..7de8d1d --- /dev/null +++ b/libft/ft_lstnew.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:13:20 by hyko #+# #+# */ +/* Updated: 2022/01/17 00:59:00 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *new; + + new = (t_list *)malloc(sizeof(t_list)); + if (new == NULL) + return (NULL); + new->content = content; + new->next = NULL; + return (new); +} diff --git a/libft/ft_lstsize.c b/libft/ft_lstsize.c new file mode 100644 index 0000000..1cceade --- /dev/null +++ b/libft/ft_lstsize.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/12 14:14:50 by hyko #+# #+# */ +/* Updated: 2022/01/16 23:52:27 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int i; + + i = 0; + while (lst != NULL) + { + lst = lst->next; + i++; + } + return (i); +} diff --git a/libft/ft_memchr.c b/libft/ft_memchr.c new file mode 100644 index 0000000..2426e8d --- /dev/null +++ b/libft/ft_memchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:09:52 by hyko #+# #+# */ +/* Updated: 2022/01/16 20:27:33 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + unsigned char *tmp; + size_t i; + + i = 0; + tmp = (unsigned char *)s; + while (i < n) + { + if (tmp[i] == (unsigned char)c) + return ((void *)tmp + i); + i++; + } + return (NULL); +} diff --git a/libft/ft_memcmp.c b/libft/ft_memcmp.c new file mode 100644 index 0000000..957f0b0 --- /dev/null +++ b/libft/ft_memcmp.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:10:00 by hyko #+# #+# */ +/* Updated: 2022/01/16 01:53:05 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned char *tmp1; + unsigned char *tmp2; + size_t i; + + i = 0; + tmp1 = (unsigned char *)s1; + tmp2 = (unsigned char *)s2; + while (i < n) + { + if (!(tmp1[i] == tmp2[i])) + return (tmp1[i] - tmp2[i]); + i++; + } + return (0); +} diff --git a/libft/ft_memcpy.c b/libft/ft_memcpy.c new file mode 100644 index 0000000..fa99e2c --- /dev/null +++ b/libft/ft_memcpy.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:10:08 by hyko #+# #+# */ +/* Updated: 2022/01/16 20:23:48 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + unsigned char *d; + unsigned char *s; + size_t i; + + if (dst == 0 && src == 0 && n > 0) + return (dst); + d = (unsigned char *)dst; + s = (unsigned char *)src; + i = 0; + if (dst == 0 && src == 0 && n > 0) + return (dst); + while (i < n) + { + d[i] = s[i]; + i++; + } + return (dst); +} diff --git a/libft/ft_memmove.c b/libft/ft_memmove.c new file mode 100644 index 0000000..b0227de --- /dev/null +++ b/libft/ft_memmove.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:10:19 by hyko #+# #+# */ +/* Updated: 2022/01/16 01:42:39 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memmove(void *dst, const void *src, size_t len) +{ + unsigned char *d; + unsigned char *s; + size_t i; + + d = (unsigned char *)dst; + s = (unsigned char *)src; + i = 0; + if (d < s) + { + while (i < len) + { + d[i] = s[i]; + i++; + } + } + else if (d > s) + { + while (i < len) + { + d[len - 1 - i] = s[len - 1 - i]; + i++; + } + } + return (dst); +} diff --git a/libft/ft_memset.c b/libft/ft_memset.c new file mode 100644 index 0000000..63348de --- /dev/null +++ b/libft/ft_memset.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:10:27 by hyko #+# #+# */ +/* Updated: 2022/01/16 01:47:44 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memset(void *b, int c, size_t len) +{ + size_t i; + unsigned char *tmp; + + tmp = (unsigned char *)b; + i = 0; + while (i < len) + { + tmp[i] = (unsigned char)c; + i++; + } + return (b); +} diff --git a/libft/ft_putchar_fd.c b/libft/ft_putchar_fd.c new file mode 100644 index 0000000..68c25bf --- /dev/null +++ b/libft/ft_putchar_fd.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:10:33 by hyko #+# #+# */ +/* Updated: 2022/01/16 21:49:24 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + if (fd < 0) + return ; + write(fd, &c, 1); +} diff --git a/libft/ft_putendl_fd.c b/libft/ft_putendl_fd.c new file mode 100644 index 0000000..e118900 --- /dev/null +++ b/libft/ft_putendl_fd.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:10:45 by hyko #+# #+# */ +/* Updated: 2022/01/16 21:49:25 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + int i; + + i = 0; + if (s == 0 || fd < 0) + return ; + while (s[i] != '\0') + { + write(fd, &s[i], 1); + i++; + } + write(fd, "\n", 1); +} diff --git a/libft/ft_putnbr_fd.c b/libft/ft_putnbr_fd.c new file mode 100644 index 0000000..47ac9e8 --- /dev/null +++ b/libft/ft_putnbr_fd.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:10:52 by hyko #+# #+# */ +/* Updated: 2022/01/16 21:49:23 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putnbr_fd(int n, int fd) +{ + if (n >= 0) + { + if (n < 10) + ft_putchar_fd(n + '0', fd); + else + { + ft_putnbr_fd(n / 10, fd); + ft_putnbr_fd(n % 10, fd); + } + } + else if (n == -2147483648) + write(fd, "-2147483648", 11); + else + { + write(fd, "-", 1); + if (n > -10) + ft_putchar_fd(n * -1 + '0', fd); + else + { + ft_putnbr_fd(n * -1 / 10, fd); + ft_putnbr_fd(n * -1 % 10, fd); + } + } +} diff --git a/libft/ft_putstr_fd.c b/libft/ft_putstr_fd.c new file mode 100644 index 0000000..f3e12f2 --- /dev/null +++ b/libft/ft_putstr_fd.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:10:58 by hyko #+# #+# */ +/* Updated: 2022/01/16 21:49:26 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + int i; + + i = 0; + if (s == 0 || fd < 0) + return ; + while (s[i] != '\0') + { + write(fd, &s[i], 1); + i++; + } +} diff --git a/libft/ft_split.c b/libft/ft_split.c new file mode 100644 index 0000000..9536cc4 --- /dev/null +++ b/libft/ft_split.c @@ -0,0 +1,90 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:04 by hyko #+# #+# */ +/* Updated: 2022/01/17 22:15:49 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +static char **ft_malloc_error(char **str) +{ + int i; + + i = 0; + while (str[i]) + { + free(str[i]); + i++; + } + free(str); + return (NULL); +} + +int word_count(char const *s, char c) +{ + int i; + int count; + + if (s[0] == '\0') + return (0); + i = 0; + count = 0; + if (s[0] != c) + count++; + while (s[i + 1] != '\0') + { + if (s[i] == c && s[i + 1] != c) + count++; + i++; + } + return (count); +} + +int word_len(char const *s, char c) +{ + int len; + + len = 0; + while (*s != c && *s != '\0') + { + len++; + s++; + } + return (len); +} + +char **ft_split(char const *s, char c) +{ + char **str; + int total_word; + int next_word_len; + int i; + + if (s == NULL) + return (NULL); + total_word = word_count(s, c); + str = (char **)malloc(sizeof(char *) * (total_word + 1)); + if (str == NULL) + return (NULL); + i = -1; + while (++i < total_word) + { + while (*s == c) + s++; + next_word_len = word_len(s, c); + str[i] = (char *)malloc(sizeof(char) * (next_word_len + 1)); + if (str[i] == NULL) + return (ft_malloc_error(str)); + ft_strlcpy(str[i], s, next_word_len + 1); + s += next_word_len; + } + str[i] = NULL; + return (str); +} diff --git a/libft/ft_strchr.c b/libft/ft_strchr.c new file mode 100644 index 0000000..4bb7f09 --- /dev/null +++ b/libft/ft_strchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:11 by hyko #+# #+# */ +/* Updated: 2022/01/16 01:46:39 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + int i; + + i = 0; + while (s[i] != '\0') + { + if (s[i] == (unsigned char)c) + return ((char *)s + i); + i++; + } + if ((unsigned char)c == '\0') + return ((char *)s + i); + return (NULL); +} diff --git a/libft/ft_strdup.c b/libft/ft_strdup.c new file mode 100644 index 0000000..46a283b --- /dev/null +++ b/libft/ft_strdup.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:18 by hyko #+# #+# */ +/* Updated: 2022/01/15 23:50:34 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdup(const char *s1) +{ + int i; + int len; + char *s2; + + len = ft_strlen(s1); + s2 = (char *)malloc(sizeof(char) * (len + 1)); + if (s2 == NULL) + return (NULL); + i = 0; + while (s1[i] != '\0') + { + s2[i] = s1[i]; + i++; + } + s2[i] = '\0'; + return (s2); +} diff --git a/libft/ft_striteri.c b/libft/ft_striteri.c new file mode 100644 index 0000000..47cdab5 --- /dev/null +++ b/libft/ft_striteri.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:26 by hyko #+# #+# */ +/* Updated: 2022/01/16 21:17:28 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char*)) +{ + unsigned int i; + + if (s == 0 || f == 0) + return ; + i = 0; + while (s[i] != '\0') + { + f(i, &s[i]); + i++; + } +} diff --git a/libft/ft_strjoin.c b/libft/ft_strjoin.c new file mode 100644 index 0000000..c808791 --- /dev/null +++ b/libft/ft_strjoin.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:33 by hyko #+# #+# */ +/* Updated: 2022/01/17 02:07:47 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *new_str; + size_t s1_len; + size_t s2_len; + size_t i; + size_t j; + + if (s1 == NULL && s2 == NULL) + return (NULL); + if (s1 == NULL) + return ((char *)s2); + if (s2 == NULL) + return ((char *)s1); + s1_len = ft_strlen(s1); + s2_len = ft_strlen(s2); + i = -1; + j = 0; + new_str = (char *)malloc(sizeof(char) * (s1_len + s2_len + 1)); + if (new_str == NULL) + return (NULL); + while (++i < s1_len) + new_str[i] = s1[i]; + while (j < s2_len) + new_str[i++] = s2[j++]; + new_str[i] = '\0'; + return (new_str); +} diff --git a/libft/ft_strlcat.c b/libft/ft_strlcat.c new file mode 100644 index 0000000..5e95c11 --- /dev/null +++ b/libft/ft_strlcat.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:38 by hyko #+# #+# */ +/* Updated: 2022/01/15 22:23:15 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + size_t i; + size_t j; + size_t dst_len; + size_t src_len; + + dst_len = ft_strlen(dst); + src_len = ft_strlen(src); + i = dst_len; + j = 0; + if (size < dst_len) + return (src_len + size); + while (src[j] != '\0' && i < size - 1 && size != 0) + { + dst[i] = src[j]; + i++; + j++; + } + dst[i] = '\0'; + return (dst_len + src_len); +} diff --git a/libft/ft_strlcpy.c b/libft/ft_strlcpy.c new file mode 100644 index 0000000..f6f5a8d --- /dev/null +++ b/libft/ft_strlcpy.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:45 by hyko #+# #+# */ +/* Updated: 2022/01/15 22:12:40 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcpy(char *dst, const char *src, size_t dstsize) +{ + size_t i; + size_t src_len; + + i = 0; + src_len = ft_strlen(src); + if (dstsize != 0) + { + while (i < (dstsize - 1) && src[i] != '\0') + { + dst[i] = src[i]; + i++; + } + dst[i] = '\0'; + } + return (src_len); +} diff --git a/libft/ft_strlen.c b/libft/ft_strlen.c new file mode 100644 index 0000000..d245917 --- /dev/null +++ b/libft/ft_strlen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:51 by hyko #+# #+# */ +/* Updated: 2022/01/15 22:06:23 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + size_t i; + + i = 0; + while (s[i] != '\0') + i++; + return (i); +} diff --git a/libft/ft_strmapi.c b/libft/ft_strmapi.c new file mode 100644 index 0000000..1c07088 --- /dev/null +++ b/libft/ft_strmapi.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:11:58 by hyko #+# #+# */ +/* Updated: 2022/01/16 21:08:48 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + unsigned int len; + unsigned int i; + char *new_s; + + if (s == 0 || f == 0) + return (0); + i = 0; + len = (ft_strlen(s)); + new_s = (char *)malloc(sizeof(char) * (len + 1)); + if (new_s == NULL) + return (NULL); + while (i < len) + { + new_s[i] = f(i, s[i]); + i++; + } + new_s[i] = '\0'; + return (new_s); +} diff --git a/libft/ft_strncmp.c b/libft/ft_strncmp.c new file mode 100644 index 0000000..3d3455d --- /dev/null +++ b/libft/ft_strncmp.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:12:05 by hyko #+# #+# */ +/* Updated: 2022/01/15 23:33:25 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t i; + unsigned char *cp_s1; + unsigned char *cp_s2; + + i = 0; + cp_s1 = (unsigned char *)s1; + cp_s2 = (unsigned char *)s2; + while (i < n && cp_s1[i] != '\0') + { + if (cp_s1[i] != cp_s2[i]) + return (cp_s1[i] - cp_s2[i]); + i++; + } + if (cp_s1[i] == '\0' && i < n) + return (cp_s1[i] - cp_s2[i]); + return (0); +} diff --git a/libft/ft_strnstr.c b/libft/ft_strnstr.c new file mode 100644 index 0000000..3ebea1f --- /dev/null +++ b/libft/ft_strnstr.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:12:29 by hyko #+# #+# */ +/* Updated: 2022/01/15 23:43:24 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + size_t j; + + if (little[0] == '\0') + return ((char *)big); + i = 0; + while (big[i] != '\0' && i < len) + { + j = 0; + if (big[i] == little[j]) + { + while (big[i + j] == little[j] + && big[i + j] != '\0' && i + j < len) + { + j++; + if (little[j] == '\0') + return ((char *)big + i); + } + } + i++; + } + return (NULL); +} diff --git a/libft/ft_strrchr.c b/libft/ft_strrchr.c new file mode 100644 index 0000000..00443bb --- /dev/null +++ b/libft/ft_strrchr.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:12:36 by hyko #+# #+# */ +/* Updated: 2022/01/16 01:46:58 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + int i; + + i = ft_strlen(s); + while (i >= 0) + { + if (s[i] == (unsigned char)c) + return ((char *)s + i); + i--; + } + return (NULL); +} diff --git a/libft/ft_strtrim.c b/libft/ft_strtrim.c new file mode 100644 index 0000000..a70200a --- /dev/null +++ b/libft/ft_strtrim.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:12:43 by hyko #+# #+# */ +/* Updated: 2022/01/16 20:58:44 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtrim(char const *s1, char const *set) +{ + int i; + int j; + char *s2; + + s2 = ""; + if (s1 != 0 && set != 0) + { + i = 0; + j = ft_strlen(s1) - 1; + while (s1[i] != 0 && ft_strchr(set, s1[i]) != 0) + i++; + while (s1[j] != 0 && ft_strchr(set, s1[j]) != 0 && j > i) + j--; + s2 = (char *)malloc(sizeof(char) * (j - i + 2)); + if (s2 == NULL) + return (NULL); + ft_strlcpy(s2, &s1[i], j - i + 2); + } + return (s2); +} diff --git a/libft/ft_substr.c b/libft/ft_substr.c new file mode 100644 index 0000000..5cdef33 --- /dev/null +++ b/libft/ft_substr.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:12:50 by hyko #+# #+# */ +/* Updated: 2022/01/16 20:16:45 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + size_t i; + size_t j; + char *substr; + + i = 0; + j = 0; + if (s == 0) + return (NULL); + if (start >= ft_strlen(s)) + return (ft_strdup("")); + substr = (char *)malloc(sizeof(char) * (len + 1)); + if (substr == NULL) + return (NULL); + while (s[i] != '\0') + { + if (i >= start && j < len) + { + substr[j] = s[i]; + j++; + } + i++; + } + substr[j] = '\0'; + return (substr); +} diff --git a/libft/ft_tolower.c b/libft/ft_tolower.c new file mode 100644 index 0000000..e0f33d3 --- /dev/null +++ b/libft/ft_tolower.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:12:56 by hyko #+# #+# */ +/* Updated: 2022/01/03 20:08:19 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if (c >= 'A' && c <= 'Z') + return (c + 32); + else + return (c); +} diff --git a/libft/ft_toupper.c b/libft/ft_toupper.c new file mode 100644 index 0000000..de4655c --- /dev/null +++ b/libft/ft_toupper.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 19:13:03 by hyko #+# #+# */ +/* Updated: 2022/01/03 19:36:04 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if (c >= 'a' && c <= 'z') + return (c - 32); + else + return (c); +} diff --git a/libft/libft.h b/libft/libft.h new file mode 100644 index 0000000..3592d23 --- /dev/null +++ b/libft/libft.h @@ -0,0 +1,80 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hyko +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/01/03 18:52:12 by hyko #+# #+# */ +/* Updated: 2022/01/15 22:31:28 by hyko ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H + +# include +# include + +/* ctype.h */ +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +int ft_toupper(int c); +int ft_tolower(int c); + +/* string.h */ +size_t ft_strlen(const char *s); +size_t ft_strlcpy(char *dst, const char *src, size_t dstsize); +size_t ft_strlcat(char *dst, const char *src, size_t size); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +int ft_strncmp(const char *s1, const char *s2, size_t n); +char *ft_strnstr(const char *big, const char *little, size_t len); +char *ft_strdup(const char *s1); + +void *ft_memset(void *b, int c, size_t len); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dst, const void *src, size_t n); +void *ft_memmove(void *dst, const void *src, size_t len); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); + +/* stdlib.h */ +int ft_atoi(const char *str); +void *ft_calloc(size_t count, size_t size); + +/* Additional Functions */ +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +void ft_striteri(char *s, void (*f) (unsigned int, char*)); + +void ft_putchar_fd(char c, int fd); +void ft_putstr_fd(char *s, int fd); +void ft_putendl_fd(char *s, int fd); +void ft_putnbr_fd(int n, int fd); + +/* Bouns Part */ +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +t_list *ft_lstnew(void *content); +void ft_lstadd_front(t_list **lst, t_list *new); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lstadd_back(t_list **lst, t_list *new); +void ft_lstdelone(t_list *lst, void (*del)(void*)); +void ft_lstclear(t_list **lst, void (*del)(void*)); +void ft_lstiter(t_list *lst, void (*f)(void *)); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); + +#endif diff --git a/jk/map.cub b/map/map.cub similarity index 80% rename from jk/map.cub rename to map/map.cub index 128d193..9201d9e 100644 --- a/jk/map.cub +++ b/map/map.cub @@ -2,4 +2,4 @@ 100001 100001 100001 -111111 \ No newline at end of file +111111 diff --git a/jk/map2.cub b/map/map2.cub similarity index 83% rename from jk/map2.cub rename to map/map2.cub index b3b9005..5d09701 100644 --- a/jk/map2.cub +++ b/map/map2.cub @@ -2,8 +2,8 @@ 10001000000000001001 10001000000000001001 10011011101010111001 -10000000100000000001 -10000000100000001001 +10P00000100000000001 +1000000100000001001 10000000100000001001 10001000100000001001 10001000000001111001 diff --git a/map/test_map.cub b/map/test_map.cub new file mode 100644 index 0000000..02cb9cd --- /dev/null +++ b/map/test_map.cub @@ -0,0 +1,31 @@ +WE ../textures/barrel.xpm +EA ../textures/barrel.xpm + + +F 220 ,100 , 0 +C 225 ,30 , 0 + +NO ../textures/barrel.xpm +SO ../textures/barrel.xpm + + + 11111111111111111111111111 + 100000000011000000000000001 + 10110000011100000000000011 + 1001000000000000000000001 +111111111011000001110000000000001 +100000000011000001110111111111111 +11110111111111011100000010001 +11110111111111011101010010001 +11000000110101011100000010001 +10000000000000001100000010001 +10000000000000001101010010001 +11000001110101011111011110N0111 +11110111 1110101 101111010001 +11110111 1111111 111111111111 +1000001 +1000001 +1000001 +1111111 + + diff --git a/textures/barrel.xpm b/textures/barrel.xpm new file mode 100755 index 0000000..7d45baf --- /dev/null +++ b/textures/barrel.xpm @@ -0,0 +1,97 @@ +/* XPM */ +static char *barrel[] = { +/* columns rows colors chars-per-pixel */ +"64 64 27 1 ", +" c black", +". c gray11", +"X c #231C0A", +"o c #312611", +"O c #382A15", +"+ c #3F3115", +"@ c gray15", +"# c #313131", +"$ c #3F3F3F", +"% c #493418", +"& c #50381C", +"* c #5E3F1F", +"= c #654223", +"- c #704626", +"; c #774D2A", +": c #7E502D", +"> c #494949", +", c gray34", +"< c #626262", +"1 c #6C6C6C", +"2 c gray48", +"3 c #885431", +"4 c #8C5734", +"5 c #935B38", +"6 c #9D623B", +"7 c #A4693F", +"8 c gray52", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" <<<<<<<<<1111112222 ", +" 1<>>>>>>>>>>>,,,,,<<<21 ", +" 12>#....@@@@@@@##$$$$><>< ", +" 112882211111<<<<,,,,>>$## ", +" 33112211<<<,,,,>>>$$$####++ ", +" ;4:33;---====***&&&++++++&+ ", +" 3;446737664:5543:=*-==%=*++&+ ", +" ;4;6745766:;5543:=*--=*&=*+&+ ", +" ;4;6737666::5543:-&---=%=*+&$ ", +" >,12<737665:5543:;-&---=%$$$$# ", +" ><1122821111<<<<<,,,,,>>>>####+ ", +" >111112<<<<,,,,>>>>>>$$$$#####+ ", +" ;=>,<11<<<<,,,,>>>>>>$$$$$###&+ ", +" ;4;644&3:;-+===****X&++++%&&+&+ ", +" ;4;67747666:5433:;-&---=*%&&+&+ ", +" ;4;67747666:5433:;-&---=*%&&+&+ ", +" ;4;67747666;5433:;-&---=*%&&+&+ ", +" ;4;67747666;5433:;-&---=*%&&+&+ ", +" ;4;67747666;5433:;-&---=*%&&+&+ ", +" ;4;67747666;5433:;-&---=*%&&+&+ ", +" 14;67737666-5433:;-&---=*%&&+$$ ", +" <2221737666-5433:;-&---=*%$$$$# ", +" ,11128211111<<<<<,,,,,>>>>$### ", +" >,<1121<<<<,,,,>>>>>>$$$$$####O ", +" =>,,,<<<<<,,,,>>>>>>$$$$$OOO%& ", +" ;;------**o**&&&&&X&&&&OO&+&+& ", +" ;4;5737553=3::::;-&--=*+&&+&+ ", +" ;446;5553=;::::;*&--=*+&&+&+ ", +" <4;44;553=-:::;-&&--=&+&+&+ ", +" <2824;333-=;;;;-&*-=*+&+++# ", +" 1112222111<<,,,>>>$$$##@. ", +" 1<11<<<,,,,>>>>$$$###@@ ", +" >>>>>$$$$$####@@@@@ " +}; diff --git a/textures/bluestone.xpm b/textures/bluestone.xpm new file mode 100755 index 0000000..9776c32 --- /dev/null +++ b/textures/bluestone.xpm @@ -0,0 +1,90 @@ +/* XPM */ +static char *bluestone[] = { +/* columns rows colors chars-per-pixel */ +"64 64 20 1 ", +" c black", +". c #202020", +"X c #2C2C2C", +"o c gray22", +"O c #000040", +"+ c #00004C", +"@ c #000058", +"# c #000064", +"$ c #000070", +"% c #00007C", +"& c gray33", +"* c #000088", +"= c #000098", +"- c #0000A4", +"; c #0000B0", +": c #0000BC", +"> c #0000C8", +", c #0000D4", +"< c #0000E0", +"1 c #4040FC", +/* pixels */ +"o$%%%%%%%%%%%%%%%%%%%$oo****************************oo$%%%%%%%$X", +".---------------------..::::::::::::::::::::::::::::..;;;;;;;;;.", +" ---*-%--=%==%==%-%$$@ .:-:;%-:=$$=*--*$*-:-*=-::-=$ .;:-=-;;=% ", +" -=%*===%%-=-#==%$%%$# .::-===$=@$@@%--#$$#$$@$**$#$ .;;--%=--@ ", +" -*-$>>=%%%=**%#@%$@@# . .;-;::;-%% ", +" -*%->>#%%%-===*$$%@@O .-------------------...........;:-;-%%#@ ", +" -==;;---=---==$$#@#$# .-:::;-==:==;==;::-- .----==#..;==-%**## ", +" --=-;;-=%#--=**%##@OO .-;:<>;-:-===;;---=- .-==*=%# .;==-$***# ", +" -=%=--*=%=$$***$%%#@O .-;>:>=;--:==-%-%=-% .-===%%# .;:-=--**O ", +" -***-%%%--$@##$#%%%@O .-;;;===;----=*#%%%# .--=%%@@ .:%%=--=@O ", +" =%*-**$=--$$#@###%%@O .-:;;;==;::--##*%%#@ .--=%-%@ .:%:-%==@O ", +" =*=%%-*#%@%#@#%O@OO#O .-:--;;;;:;;-##$-##O .-%*=%@@ .::%%##%%O ", +" =%=%#**%#%#%#O$$OOO#O .-;--=:==-;;-==%%@@# .-***$$# .:%$#%#%%O ", +" ==%%%$#@@#%#$#OO$O#@O .-;<>**==*%%%*=*%##O .--**$$# .:%%$@@@@O ", +" =%=##$#%#OOOOOOOOOOOO .-:>>***--%**%*$%#@O .-%=-@@@ . ", +" .-:--=**---**=##%#@O .---=-@# ...........", +"-:;-;-----;---- ;;;--== -;=-*=----%==%%@@OO .=-=-=$# .---- :::::", +":;-=-:;-*--%-=% ;;=::%: ----:-=---*#$%OO#@O .==%$%$@ .-;*% ::-;:", +":;==*--*%==%%== ;::;=%% -;=-:-*%**#%%$OO#OO .==@@@#O .-;;% :-;;;", +";-=;;==%%%=%%%% ;:;;==# -;---*-%%#$$@@@##@O .=%@#@@O .-*%@ :::;;", +"-*=;:;%%==%=@%% ;:=%==# ---====%#@##@##@OOO .=%#@@OO .-@#@ ::;;;", +"--*=;,%=%%##$%% ;=:%%%# . .::--=", +";*%*=-=%%=#$%@@ ;==#%%@ .........................;;;;;;;;..:--==", +";-*=%=%==%$%#%@ ;:=*#@# .;;;;;;;;;;;;;;;;;;;;=-..;>;>---= .:;===", +";;=*;====%%$@@@ -:%**#@ .;:;-:::;:-;-:;%-:::%-@ .;>;>>-=* .::===", +";-*%*;;#%=**$@# -%#$$@# .;:-;><<:,<-:--::----%@ .;>>>>-*% .:;:--", +"-=%*-;;-=%**$@# =%@@@@# .;;-:,,<:<,,;%-%%-%%-@@ .;;->-*-# .:::--", +";=;==-;-#%$$$@@ .;::;;>>--,,--%%%$-%%@@ .;>----*# .:::;;", +"-**--=--#$@#@OO .........;;:;;;---:---%**%%@@@# .;>>--*%$ .:--:;", +"-=*---=%$#@##@@ .;;;;--..;--:;**-:;%--%***$$$@@ .;>>==--@ .:--;;", +"=*=*--%##@@@#O# .;;*-=* .;:;:;**---%---$**@$$$O .;;>===-@ .::==%", +"=**%**%##$%%#OO .;--=*= .;::-;;;=-%%%--$@#@#$$O .;;-*;--# .:**==", +"=*-=$%%$#$%%#@O .;-=*$# .;:-%-;;--%$%#$$$@OO@OO .;;>*;;=# .:**%%", +"=-=**%##@++$#@O .;;*;*@ .;--:%--=%$%%##$$#OO##O .;->-*==@ .::%%%", +"%==*%%%%@++@@#O .;;;$$# .;%:%--%%$#%%%##@@###+O .;>--=@$# .:--==", +"%**%$%%%@@#@@@@ .;;;-@@ .;-:%--$##@%%%#@@@@+++O .;>-=%=$@ .:--=*", +"%*#$%#%%@#@O@#@ .;==@*# .;-%--%@@@@####@OOOOOOO .;>-%==%# .:=--%", +"%=%#%#$@#OO@OOO .;==;@# . .-;-%#%%# .:=**%", +"%*=*$%$@@@O#O@O .;;*;*@ .........................-;;-%@#O .::**%", +"%=*%#$%$OOOOOOO .;;**@# .----------------------..-;-:-%#O .:==%*", +" .;;%%@@ .-::::::;-------=*%:=-% .->--:*@O . ", +".....@@$$***%$#..-;%%%@ .;:>>:--;;>:==--=%*%*=% .----**@O .*=** ", +".=-;:::::::::::..--*%%# .;:>>>;;;;::%%%%---==%# .->-%$@@O .==%% ", +".-:::::;-;:---: .--=@## .;::::,,;;;%%%%%%=%%$=# .-;*$#@$O .=%$$ ", +".-:;;,,;:::=-:: .-=*@@@ .;::;:,,,%-=%%$$$*%%%%# .--$#$@@O .=$%@ ", +".:::;,,:==-::=; . .-;:;::,,:--=%$$##@%%%# .*%%@@@#O .*%$@ ", +".:-;-;;;===:-** .........--;>==:-:----%%##%#@++ . .*$@# ", +".::;=*;;-==-::- .::;--=..-->>===;---%%=*$##@@OO ............... ", +".::=-:;*-;;;%-- .:%:*=* .-:::;==:::-%%%%###@@OO .;;;;:::::::::: ", +".::::-*:*;%%-*- .:-;;=% .-;--;;;::::-%*$@###$@+ .;;--;;;;-*:--% ", +".:-:=--:;=%+%-- .::%-%$ .-:---=-::::---@@@@#$$# .;-;,,;;;=---=% ", +".:;==:<:-*-%%-- .:;--%- .-::--:**:::---$@@#@+++ .;::,>>;;**-=%# ", +".:-:-<1<==-=*%* .:;-%-$ .--:==%%%*---%%%##@@@OO .;=:=>>;;--%%%@ ", +".:;:;:<:-%--++# .:-;;%# .--:-**%%%*%*@@==$$@+OO .;:;===--%%%%@# ", +".:-:;;;***%$++# .::;=*# .-=::=:%%*%%*%@==*$$#@# .;;-===-%$#%@@# ", +".-:;;-%%=-==%## .:;-**% .-:=-:-*%$$**@@%==%$@@O .;;=-==-%$#$%@@ ", +".:-:;**;%--=$%@ .:-:%%% .-:---=*--$$@$@@%%%#@@O .;;:;*;;=%#==@O ", +".:-:-=*%#*--=$# .::-### .---==%*---$#$$@+++#OOO .::;*-;;;=%==%O ", +".;-***-#+#*==$$ .:;-%$@ .-;-==:-%--@@$$#@OO@OOO .:;-*--;;=%%%%O ", +".;-$#*#-%%=@#@@ .;-###@ .-;:%::-@###@@+++OO+@OO .:;-:--%*$$%%@O ", +".--**#*@#@#$#$# .;-*$## .--;:-%=@###@@OO$$#O+O@ .:::=-%%$%%$#O# ", +".-=%%%%%$$$$%%%..-*%%%%..--=-=%%%%%%$#@@%%%%@@$..:--%=-%%%%%$$% ", +"o***%%%%%%%%%%%oo**%%%%oo->*****%%%%%%%%%%%%%%%oo:**%%%%%%%%%%%.", +"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&o" +}; diff --git a/textures/colorstone.xpm b/textures/colorstone.xpm new file mode 100755 index 0000000..3029319 --- /dev/null +++ b/textures/colorstone.xpm @@ -0,0 +1,96 @@ +/* XPM */ +static char *colorstone[] = { +/* columns rows colors chars-per-pixel */ +"64 64 26 1 ", +" c gray11", +". c #382C14", +"X c #202020", +"o c #282828", +"O c #2C2C2C", +"+ c gray19", +"@ c #343434", +"# c gray22", +"$ c #403018", +"% c #483818", +"& c #543C1C", +"* c #5C4020", +"= c #6C4824", +"- c #744C28", +"; c gray25", +": c #484848", +"> c #4C4C4C", +", c gray33", +"< c gray36", +"1 c #646464", +"2 c gray44", +"3 c #7C7C7C", +"4 c #80502C", +"5 c gray55", +"6 c #989898", +"7 c gray66", +/* pixels */ +"333%&**-**************&$%****&&%,1332222OOOOOOO:12,1,,>>>>,<<123", +"322,%&*-*******&******&$%***&%%,13323233:OOOOO:12,1,>>,,<1111112", +"2221,%&=********&&****&$%*&&%:,11:****:11:OOO:12,1,>,<1111111111", +",2321,%=********&&****%$%&%%,13:**%%$%$%11:::12,111111<,,>>>>>>>", +">,2231%=*************&%$%%,133:*%%%%$%$%:31112,1<<<<<<<<<<<<<<<<", +">>,222%&*****&******&$$%,1331**%%%%%$%$$.1572,1,>>>>>>>>>>>>>>>>", +">>>,23,%&**********&$$:,133:*%%%%%%%$$%..173,1,>>>>>:>>>>>>>>>>>", +">>>>,23,%&*******&&$%,1131**%%%%%%%%$$%..1631,>>>>>>>>>>>>>>>>>>", +">>>>:,31,%&****&&$$,1133:*&%%%%%%$%%$.%..161,>>>>:>>>>>>>>>:>>>>", +">>>>::331,%&&&&$$,13331**&%%%%%%%$%%$.$..151,>>>:>>>>>>>>>>>>>>>", +">>>>::3231,$$$$:,1331:*&&%%%%%%%%%%%%.$.;151<>:>>>:>>>>>>>>>>>>>", +">>>>::22331,,,,,1331**&%%%&%%%%%%.%%%...>231<>>>:>>>>>>::>>>>>>:", +">>>>:#221,,,1266521*&&%&&%%%%%%%%.%%%...,251,>>>>>>>>>>::>::::>>", +">>>:#131,,,,:16551*%&&%&&%%%%%%%%.%%%...1231,>>>>>>>>>>>>>::::>>", +">>:#132,,,,,::253*&%*%%%%%%%%%%%%.%%%..;1331,>>>>>>>>>>>>>::::>>", +">:#1331,,,,,:::1,*%*&%%%%%%%%%%%$.%%%..>2331,>>>>>>>>>>>>>::::>:", +":#13321,,,,,;>,:1*%*%%&%%%%%%%%%$.%%$..,333,>>>>>>>>>>>>>>>>>>:#", +"#11::12,,,,>;,,11*%&%%%%%%%%%%%%..%%$..1=*1,>>>>>>>>:>>>>>>>>:#;", +"11:&&:11,,,;;,,,2*&&%%%%%%%%%%%%.$%$.$<=**,1;>>>>>>>>>>>>>>:;#;;", +"1:&*%&:3:,;;;,,,11&&%%%%%%%%%%%$.$..$1=***%11;:>>>>>>>>>:;#@@#;1", +":&*%%%$12:;,;,,,:3:&%%%%%%%%%%$....>13%%%%%221;;;:::::;;#@#;#,11", +"&*%%%%$:31:,;,,,:21$%%%%%%%%%%....>133311115511;#@@@@@@@#;;#,13:", +"*%%%%%$$12:,;,,,#13:%%%%%%%%%...;<1,,,,,,,356621,#;;;;;;;;#,13:&", +"%%%&%%$%131:;,,>#131$%%%%%%%..;,11,:;#;;;;,366531,#;;;;;##,13:&*", +"%%%%%%$%:331;,>:#133:.$%%%$..,131,:;;##;;;;,355231,######,131&*%", +"%%%%%%$%$132#:::#2231.......;131,:;;;#;#;;#;232,,31,####,131:*%%", +"%&&%%%.%$,231###23333:....;><3,,:;::;#;#;;#:121::,31,,,,131:&%%%", +"%&&%%%.%$:3521123,==,1::><<33,,:;;::;#;;#;@,12,:::,3335532:&%%%%", +"%%%&%%.%$:325221==****111232,,:;;;;;;@;;##+,11:::::1355321&%%%%%", +"%%%%%$.%$:32222=******&3322,,:;;;:;;;@;;##:12,,::::,1221<,&%%&&&", +"%%%%%$$%$,252221******%323,,,;;;;;;;;@;;#@,233111111132<,<&%%&&&", +"%%%%%.$$$,331,133***&%%33,,:,;;;;;;;;@;;#+1,---------%*-<1&%%&&&", +"%%%%$.%$:131,<,133&&%%13,,::,:;;;;;;;+;;@,2===*******%***3&%%%%%", +"%%%%$.$:111,<,,,1331,,31,:;:,:;;;;;;#+;#+,1=*=*******%**&1&%%&%%", +"%%%%.$:113,<,,,,,135353,:;;:,:;;;;;;#+;#+1,4*=**&****%**&1&%%%%%", +"%%%$.:1121,<,,,,,,13555,;;;:,>;;;;;;@+;+12:4*=*******%**&1$%%%%%", +"%%%.:1133,<,,,,,,,,1566,;;;:,>;;;;;;@+#:22=4*=*******%**&1:$%%%%", +"%%$:11231,<,,,,,,,,,1661;;;:,>:;;;;;++@,31=4*=*******&**&11:$%%%", +"%$:11231,<,,<,,,,,:,,152#;;:,>:;;;;;+++13,=4********&&**&131:$%%", +"$:113321,,,,,,,,,,,:,,55,##:,:>;;;;;++:22=*4*=******&***%1331:$$", +":115531,,,,,<,,,,,,;,,122+##,;>;;;;;++,31=*4=*******&***%13331::", +"116651,,,,,,<,,,,,,;:,,11:+@+;>;;;;;++,3,=*4-******&****%1OO#,11", +"13662,,,,<<,,,,<,,,:;,,,1,:++#::;;;#+:12=**-4******&****%1OOOO#,", +"O:551,,,<<<,,,,,,,,:;,,,,:,1,@@:;;;#+,23=**=4*****&*****%1OOOOXO", +"OX:3,,,,<<<,,,,,,:,:;:,,,:11,+@@#;;#+133&***-********&**%1OOOOXO", +"OX:2,,,,<<,,,,,,,,,:;:,,:#155,+@@;;@:2221&**==**********%1OOOOXO", +"X:11,,,,,,,<,,,,,:,:;:,:#:3553,+@##+,32231&**=*****&&**&%1OOOXOO", +":111:,,<<,,,,,,,,:,:@::#:,3:%:3,++++231##11&&*=****&&*&%:1OOOXOO", +"12221:,<<,,,,,,,,:,:@;#:,1:&%$:31,,131#OO#121&*******&%:11XXXXXX", +"332231::,,,,,,,,,:,;@#:,1:&%%$%$:3331#OOOO#121&&****&%:1233:::::", +"3235551::,,,,,,,::,;@:,1:&%%%$%$%:33:#OOOOO#122,&&&%%:1,,,,,,133", +"3,==,551:#,,,,,,:::@:,1:&%%%%$%$%$31#oOOOooO#132,&%::11,,,,,,:13", +"==**==,31:#:,,,:::#:,1:&%%%%%$%$%$3#OOoOOooOO#132,::13,,,>,,,:13", +"******==,1:#:,::##:1::&%%%%$%$%$$:1#OOOXoOOOOO#1321151>>,,,,>:13", +"*&******=%1:#::#:,1:&*&%%%%%%$$$:1#OOOOOXXOoOOO#13255,>>,,,,>:1=", +"*******&*%**:##:,1:&*&%%%%%$%$$$,##OOOOOoXXoOOOO#1351,,,,,,>::1=", +"**&&***&*%**&::,1:&&*&%%%%%$%$$:1#OOooOOOoXXoOOOO#13,,,,,,,::,=*", +"**&&***&*%&%%,,1:&%&*%%%%%%$%$:1:#OOoooOOoXXXoOOOO#13,,,,,:>:1=*", +"******&%&$%%,11:&%%&*%&%%%%$$$,1##OOooOoOOXXXXoOOOO#11,,,>::,=**", +"******&%%$%,333:%%%&*%%%%%%$$:1#O#OOOOOOOOoXXoXoOOOO#1>>>:>:,=**", +"******&%$$,3333,%%%&*%%%%%%$:1:#O#OOOOOOOOoXXXoXoOOOOX1>:,,:=***", +"******%$$,3,;,31:%%&*%%%%%%$,1#OO#OOOOooOOOoX ooXoOOOX,1,,>1=***", +"*****&%$,3,;;;,3,%%&*%%%%%$:1#OOO#OOOOooOOOoX XOXXoOOX,3>>1=****", +"****&$$,33;;;;;,1%%&%%%%%$:,1OOOO#OOoOOOOOOoX XOoXXoOX,3311=****" +}; diff --git a/textures/eagle.xpm b/textures/eagle.xpm new file mode 100755 index 0000000..5879a57 --- /dev/null +++ b/textures/eagle.xpm @@ -0,0 +1,126 @@ +/* XPM */ +static char *eagle[] = { +/* columns rows colors chars-per-pixel */ +"64 64 56 1 ", +" c #202020", +". c #2C2C2C", +"X c gray19", +"o c gray22", +"O c #400000", +"+ c #4C0000", +"@ c #580000", +"# c #640000", +"$ c #700000", +"% c #7C0000", +"& c #543C1C", +"* c #585400", +"= c #706C00", +"- c #744C28", +"; c #400040", +": c #480048", +"> c #500050", +", c #580058", +"< c #600064", +"1 c #6C0070", +"2 c gray25", +"3 c #484848", +"4 c gray33", +"5 c #646464", +"6 c gray44", +"7 c #7C7C7C", +"8 c #880000", +"9 c #980000", +"0 c #A40000", +"q c #B00000", +"w c #BC0000", +"e c #C80000", +"r c #D40000", +"t c #E00000", +"y c #EC0000", +"u c #FC0000", +"i c #FC2020", +"p c #B45400", +"a c #CC6000", +"s c #FC7800", +"d c #A86840", +"f c #848400", +"g c #9C9C00", +"h c #FC8820", +"j c #CCC400", +"k c #E4D800", +"l c #FCF400", +"z c #E88C58", +"x c #840084", +"c c #9C009C", +"v c gray55", +"b c #989898", +"n c gray66", +"m c #B4B4B4", +"M c #C0C0C0", +"N c #D0D0D0", +/* pixels */ +"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", +"4o433333433333343o333333344444433333333344444443333ooo334433333o", +"oyyrrrrrrrrr0334yyrrrrrrrrrrrrrrrrrr03o4yyyyttttttrrrrreeeewww03", +"3leqqr80r8e0#.34yw8w8w8w%w9w9w%w%we0$.3or0eqeqqe$e%eqe8q0%e9e0l.", +"kjfmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmjj=", +"dg*6677777777777777777777777777777777777777777777777777777666=z*", +"3&07777bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb7677@d.", +"3w%b7i0OO4$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$0qut7OOO7M6@O.", +"3w0n70Mb6O7nMNMMmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmMMMMM7O76bi76@O.", +"3%#mbObMb7vbnnv7nNMmmmmmmmmmmmmmmmmmmmmmmmmmmmmv15Mmnnn6nN067OO.", +"33.NnObnMb77bb4,6nNNMMmmmmmmmmmmmmmmmmmmmmmmMMv5<>bnnbbnN7O7b .", +"4ooNm46bmMb77v>,,,7nNMMMMMmm>64>>>>pasmmmmMMv5<,>>bbbbnNM54vn ..", +"yrrmNO7bnmMb653:>>,,7nmmmmmm>>>>>7>ppahmmmv5<,>>>3bbbnMMn7Obn@@r", +"q88mN$bvbnm5,653::>>,,,7vmmm6>>>>>>pvmmv5<<,,>>>366>5nMnv7Onm@@q", +"808mNqnbvb51<3653::::x,,,6vmm>>>>>>vmv5<<,x>>>:3641<<5nb7v$nm@@9", +"$00mm9mbvv:<1<,353o::1:,,,,mm>>>>>>mm,<<,>1::o353><<11bv7v$nm@@%", +"088mm8Mnbv::<1<<,34o;;:::,4mm>>>>>>mm4::::::o33:>,<111v7vv$nm@@%", +"$0#mm$Nmnb3::<11<,:;;;;::vmm6>>>>>>6mmv:::;;;::>,<1114v7vb$mm@@8", +"$q#mm$NMmb53:,<<1<,1;;;:v>6m>>>>>>>>m6:v:;;:,::,<111477vvn$mm@@$", +"O++mm$NN5>6443,<<1,x>;;:>:>mm>>>>>>mm::::::,1>,<<1475335bn$mmO@O", +"...mm$mN,>:34443<<1,x>>>:>:75>>>>>>57::::::1,,<<4v753;;:bn$mm .", +"443mm$mN<,>::;o3345,,,,:::>>>>>>>>>>::::::>>,45v74>:;;;:nn$mm ..", +"4yyMM%Mm<<>>:;;;::,c,,,::>>>>>>>>>>>:::::>,,c,,,>>:;;;;,nn$mm@@.", +"4y8NN9NM,<,>::;;;::x,,,>>>>>>>>>>>>>>::>>,,,c,,,>::;;;:,bn%mm@O.", +"oyqMM8Mb6,<>>:;;:;:1,,>>>>>>44566544>>>,,,,,x,,>::;;;;:6bn%mm@O.", +"3w#mm%mbb63,>:::>:>,1>>>>>>>51c11c15>>,,,,,x,,>:::;;;36bbm8mm@O.", +"3wqmm$m>,356655432X:>,x,>>>>7c1111c7>,>,,x,,,4432o23453<1M9MM@O.", +"4w$nn$n>>,,,,>:>:>:>:>,x1>>>41111114>>,1x,,,,>::::;::>,<1N9NN@O.", +"3e0nn#n>>>,,,>>:>:>:>>>>>>>>7c1111c7>,>,>,,,>:::::::>,,<>,>,>,>>>>>>>>>>>>>>41c31c14>>,>,,,>>:::::::>><1>>,>,>>>>>>4>>>>4>>>74131147>,>4,>>>4:::::::>><<>m%mm .", +"444nn#n5>>>>>>>>36>>>>>4>>>>47744774>>>,4>>:>:63:::>>,<,5m$mm ..", +"wwwmm$mb5>>>>366>>>>>>6>>>>>>>4774>>>>,>>6>>:::>663>>,,5bm$mm@@w", +"0q0mm$mmmbbbb6>>>>>>>6>>>>>>>>>>>>>>>>>>>>6:>::::>6bbbbmnn#nn@@0", +"0%8mm$mmbb6>>>>>>>>>6>>>>>>>>>>>>>>>>>>>>>>6:>:>:>,,,6bbbb@bb@@$", +"8%0mm$mm>>>>>>>>>>>6>>>>6>6>>>>>>>>>>6>6>>>>6:>:>,,,,,>>vv+vv@@$", +"08%mm$mm>>>>>>>>>>6>>>>5b6>>>>>>>>>>>>6b5>>>>6>>>>,,,,>>bb@bb@@8", +"08%mm%mm6>>>>>>>>6>>>>>b>>>>>>>>>>>>>>>>b>>>>>6>>,,,,,>6bb#bb@@$", +"$$8mm%mmb>>>>>>>6>>>>>b>>>>>>>>>>>>>>>>>>b>>>>>6>>,>,>>bnn#nn@@$", +"OO+mm8mmm6>>>>>6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6>>>,>6mmm#mm@@O", +"...MM8MMMm6>>>6>>>>>>b>>>>>>>>>>>>>>>>>>>>b>>>>>>6>>>6mmmm$mm .", +"434NN0NNNmmbbbb>>>>>bmc>>>>>>6>>>>6>>>>>>cmb>>>>>bbbbmmmmm$mm ..", +"oyrMM9MMMmmmmmbb>>>bmmm6>>>>>>>>>>>>>>>>6mmmb>>>bbmmmmmmMM8MM@@.", +"4r0mm9mmmmmmm7pp7mmmm7p>>>>>>>>>>>>>>>>>>p7mmmm7pp7mmMMMMM8MM@O.", +"3r0mm8mmmmmmmpppppppppp-->>6m>>>>>>m6>>--ppppppppppMMMMNNN9NN@O.", +"3r8mm8mmmmmmmm75-pppp--7mmmm>>>>>>>>mmmm7--pppp-57mmmMMMMM9MM@O.", +"or0mm%mmmmmmmvppppppppppmmm>>>>>>>>>>mmmppppppppppvmmmmmMM8MM@O.", +"4r0nn$nnnnmmmp--vpp-mv-pm7>>>>>>>>>>>>7mp-vm-ppv--pmmmmmmm$mm@O.", +"oe0nn$nnnnnnm-7vmp-mmmm74>>>>>>>>>>>>>>47mmmm-pmv7-mmmmmmm$mm@O.", +"40#mm$mmmmmmmmmmmp-mm74>>>>>>>>>>>>>>>>>>47mm-pmmmmmmmmmmm$mmOO.", +"o3.mm$bmmmmmmmmmmvpm>>>>>>>>>7>>>>7>>>>>>>>>mpvmmmmmmmmmmb$mm .", +"4o4mm$7mmmmmmmmmmmmm74>>>>>5m>>>>>>m5>>>>>47mmmmmmmmmmmmm7$mm ..", +"rrrmm7$7bmmmmmmmmmmmmm74>>5m7>>>>>>7m5>>47mmmmmmmmmmmmmb7$7mm@@w", +"%0@7mm7$$$7bmmmmmmmmmmmmmmmm>>>>>>>>mmmmmmmmmmmmmmmmbv$$$7bm7@@$", +"0%%@7mmmb7$$$$7bmmmmmmmmmmmm5>>>>>>5mmmmmmmmmmmmb7$$$$vbmmm7@@@+", +"0%@@@47mmmmmb7$$$7bmmmmmmmmmm5>>>>5mmmmmmmmmmb7$$$7bmmmmm74@@@$8", +"%9@@@@@47mmmmmmb7$$$7bmmmmmmmm5>>5mmmmmmmmb7$$$7bmmmmm74@@@@@#$0", +"#0%0#@#@@@@47mmmmmb7$$$7bmmmmmm55mmmmmmb7$$$7bmmmmm74@@@@@@$@0$0", +"#0%%#99#@@@@@@47mmmmmb7$$$$7bmmmmmmb7$$$$7bmmmmm74@@@@@@@$0$@#0+", +"%9@0##8#%%0@@@@@@O47mmmmmb7$$$7bb7$$$7bmmmmm74O...@@@@0@0$0$0#0$", +"++++++++++++++++OO .47mmmmmb7$$$$7bmmmm74+++OO ..@OO+++++++++++", +"................... .47mmmmmmmmmm74 . ......... ..", +"o4o4ooo333334oooo....... 47mm74. ........oo33433332o2333", +"44444444444444444443ooo.. .ooo334444444444444444" +}; diff --git a/textures/greenlight.xpm b/textures/greenlight.xpm new file mode 100755 index 0000000..274e3c3 --- /dev/null +++ b/textures/greenlight.xpm @@ -0,0 +1,96 @@ +/* XPM */ +static char *greenlight[] = { +/* columns rows colors chars-per-pixel */ +"64 64 26 1 ", +" c black", +". c #044C00", +"X c #045800", +"o c #046400", +"O c #047000", +"+ c #047C00", +"@ c #646464", +"# c #7C7C7C", +"$ c #048800", +"% c #049800", +"& c #04A400", +"* c #00A800", +"= c #04B000", +"- c #04BC00", +"; c #04C800", +": c #00E000", +"> c #00EC00", +", c #00FC00", +"< c #80FC7C", +"1 c #FCFC54", +"2 c gray55", +"3 c #BCFCB8", +"4 c #FCFC9C", +"5 c #FCFCB8", +"6 c #D8FCD8", +"7 c gray99", +/* pixels */ +" @ @ ", +" #2# ", +" .o. ", +" oO+++OOoX ", +" o$%=;;=%%$+oX ", +" o&->>>>:;*%$+oX ", +" o=;:,,,,::;=&$+oX ", +" o&:,<365714563<,:%o ", +" +%><<<3655563<<<>%+ ", +" %;:,<<<<<<<,:;% ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" " +}; diff --git a/textures/greystone.xpm b/textures/greystone.xpm new file mode 100755 index 0000000..ff8a3d4 --- /dev/null +++ b/textures/greystone.xpm @@ -0,0 +1,92 @@ +/* XPM */ +static char *greystone[] = { +/* columns rows colors chars-per-pixel */ +"64 64 22 1 ", +" c gray12", +". c gray23", +"X c #3F3F3F", +"o c gray28", +"O c #4B4B4B", +"+ c gray31", +"@ c #535353", +"# c gray34", +"$ c #5F5F5F", +"% c #676767", +"& c gray42", +"* c gray45", +"= c #7B7B7B", +"- c #838383", +"; c gray56", +": c #9B9B9B", +"> c gray67", +", c #B7B7B7", +"< c gray78", +"1 c LightGray", +"2 c #DFDFDF", +"3 c #EFEFEF", +/* pixels */ +" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", +"#@#+#+#+#+O1222121222121222 .->,1<11<1,<>-# oooooooooo@+#+#+#+#+", +"@#@@#@@@#@o21<1,111<11,11<; .-<,;>-;;;;->+. .&;;-;;;=&%oooOoooOo", +";;-;;;-; @O2<<,1,<<,<<,,1;$ .>1>;>;>->;>-#. .;122212,,>;-;;;-;;;", +"1111,>;- #o21>>:>;>>>>:>>=@ .;,;;->>>>-;*+. .-22,<,1222121<111<1", +">>>>:>=* @o3,:>>>>:>;>->>&@ .o>;>>-;:;>&#@. .;1,>;>;>>:;;>;>->;:", +",:::>;=& Oo31>->;>;:::;;>;+ .o=;->;>>->*... .-2,;>-:-;;>-;:;>:;:", +",>-,-:$# .o3<;:;>>:;=;;>;$# .oo;>>:;;;>&... .;2>>-:=>:=;>->>;=>:", +":>>;:*oO O<,>:>->;:-:;;>&@ O@o=........ ..*22;>--:*:;>;;=>>*;", +";;-;*@oo .o>3>:>;;;;;;->-#= .o....... . ooo<<;;;;:::-;>;>>->;", +"*&**+O.. O;1;>;;=;;>->;>&#. .o. . . O@o<>;>->;-;*&%$$%$%$", +"@#ooo .X*2>-:===>:;-=;&%. .ooOO*=;>:>>:*.+O,;&*%$%#@@@oOoOooO", +" . . .@o2<;;;::-;>=;>;+. .X*>>123111:&@ @o;&%$@Ooo..... . . ", +" . . . ..+o>1;>-=;>;-:;-*+. .>,21,->;>-*. ........... ", +"..........OO;<>->:-=;=;>;+#. .X>2,>;;;-;;+. . . . . XX.......", +"@O...... .@o*<->:;>:>->->+*o O>3>;->;>->@. .o#@## oOooOoooooooX", +"::;:;:;:: #o<,:;-::*;;;;&#@ O>3-;>>->;;+. .&>21#o@=::;:::;::::", +"1<11<1,>*X #o;,;>;=;;->;&;&O O><>>;->;>-#. .>1<> o=<12221222121", +">:;>;>>&*. @o*:>->>->*;&@*@O O><>;&**&@#@. .1<>- O:11,,>,,,>,,,", +">;:;>-;&*. o@o:;**&*@@*+*@o .:;*;&....... $2>;; o:2>>:>;>;:-::", +">;;>->>&#. o@o%@#@#ooo. ;*... $2>>- O:1>;:-:;:*-;-", +">;>;>-;*+. o@o . . ..+. . . ;2>>; o;<->:>;>;:-::", +";>*=;;>&#. .+#O. +OO+OOo;;;>>;;;=# X%,2>-= O-<>-:;:-:==;;", +";--=;>-%o. .-2221<>>;$.O%=>>,<<2221222<:% .=2<:>* o-,>:;>->;==;;", +";;>>-;;$O. .1<>;::>;:.+O=1322<,,<,<,<,<&# .;2>:;& O&<->;;:;->;>;", +":>-;>-*@.. .2:;:>>;:> @O:2<;>->:->:>:;-%o .;3>-># Oo;*$#@@%%&=;-", +"%$%$%@o... .1>>>->;>$ Oo:3>:>;=>>;-;>->#o .-3>>;# @ ..ooooOoo@#@", +"@Oo... .2->;>>;=$ Oo:3->;:>-;=;>;;;+O .;3->;+ #. ..o", +" . OOo2>:->;>=$ .o:3;;>-;=;=;-;>;+O .-3>>-# #....... . ", +"o%%&;:;-;;o 2>*:;>--%. o;3>;-;=;=;>=;->@o .;3;>>+ #oXo+@+#@@#...", +"%;,21211<>* 2>>-=;>-%. o;2,:;>;>*=;=;>-#. .;1;;>+ O>21,;$#ooOoo@", +"%>1<<,>>:>X 3;:>=;>:&o O=1<>-;*;==>;>--+. .;2>;;@ O2-;,221222;.@", +"%2,>>->;>-* 3:>;>>->&O .+<2>>:;>->==;>&#. X;1;>;+ O2;->>-;>;--.+", +"%1,:->;>->* 3:-:>;>-%@ #>3>>:;;=;==>-*o. O;1>>-# o2>>-;>>->;$.o", +"%2>;>;>>=>+ 2>>>;;;>%+ .+;3,>;>-;:->;>$o .X;1:;>+ O<>;>>-;>;>$.o", +"%2>>;;::>-# 2,=:=>>:$# O&1,>;=:-;:;;;$. O;1;>+# O<>:>;>-;>:#.o", +"%1,;>>;>->@ <2-:>;;;$# O@,2>->;>;>-;%@. .o=>=+...X>>;>:;>;->#..", +"%2,>:;>;>;+ ,2=>-;;>&# .+;,>;=%$@oO.... .X#....Xo *+o@#@#@@#@..", +"%2>;>>->=>@ :1:=>>-;&# .@o;;$#o. .o+oo+@#@# .", +"%1,;-:>;>-# =2>:>-;>%+ +o. . . . . .o@#ooOoooOoo..........", +"%2,>>-:>;>@ #3;:;;>-%@ .ooo.....OoOX+OoOoo#@================*.+", +"%2>;;>->;&# o3>;-=;>&# X%=============;;;:>,><,<,<,,<,<,<,<=.+", +"%<,>>;>;>+ +3:;>;;-%#. .=<,<,<,<<,<,<,<,122333333333331211;% O", +"%1,;>;>>-# .X3;>=:->%+. =<<3333322332333332211,,,<,>,<,,<,=# +", +"%,,>;>-;;+ .o2>>->;;$#. =<<,<,<,<>,<>,<,,>>::;;>;>-;;>->;>&#..", +"O<-;>-*&*@ .o1-;>->;&#. %,2,;;-;;;>->>;;:>>>;=:->>:->;>>:;&@ .", +"o,>>:;#@@ Xo,>-;>;-*@. o<2,;;;>;:;:>-;:>>-:;:;;=-::;>->;>&#..", +"o===#@#@@ ..X::>-;;&%@. ,21>>-;;;=;->;:->:=-;>-;>;=*;=:;;*@ .", +"o. #@@# .XO=%$%%$%@@. .>11;->;>-;>;==::->;>;;>-;=;;->;*-&# .", +"@#@o. ..X........... ;1,>;;>->=;-:=:;:=>-;=;;;->;=;;-=&# .", +"oOoooOo. .O.. .-:&**&**&>;>>-;=-;;=;;>->;;>-;;;:&# .", +"o=>>>>;;%OO@.. . . . . .@o.. . . #*&=;===================%+ .", +"o><12122,>>;&$#O..........X#oo...... O@@#@#@#@#@@@#@#@@#@#@@@ ..", +"o>1>>;,1222,>>>>>>>:;;-==&%%+#oooXo.. . . . . . . .X", +"o>2>>>,>;>,222121212222<1<,>>>>>-O@o......... . . . . . . ...oO", +"o>2>->==>:;=>->;>;>>->;>>><1211,-.o+Ooo... .................XoO@", +"o><>>>;>;;;:>-;>=*;>=;-;>->;>>>=% .+O>12:=OOo@@@ooXoooXooXoo+#@@", +"o><>->==:>->>:-=>=;=:->;>;>->>:%@ .oo2>>2221,@@O,22122211<>:=Oo@", +"o>-%$%$%$%%$%$%%$%$%$%%$%$%$%$%#@. .o1,>,>,,,$#=2:>>;>->:>;>1: @", +"o;%............................... O,>,,:$:-%o,>;>->>>->;>->@ #", +"o. +.o.+%$%%$O2:::>>;:>::>;;+ #", +"@O... . . . . . . . . . . . X+#.. .@#@@@@@#+@#@#+# @", +"@#+@oooOOoOO.........................+#+@......+@ #", +"................................................................" +}; diff --git a/textures/mossy.xpm b/textures/mossy.xpm new file mode 100755 index 0000000..49c7742 --- /dev/null +++ b/textures/mossy.xpm @@ -0,0 +1,95 @@ +/* XPM */ +static char *mossy[] = { +/* columns rows colors chars-per-pixel */ +"64 64 25 1 ", +" c #202020", +". c #2C2C2C", +"X c gray22", +"o c #404000", +"O c #585400", +"+ c #706C00", +"@ c #484848", +"# c gray33", +"$ c #646464", +"% c gray44", +"& c #7C7C7C", +"* c #848400", +"= c #9C9C00", +"- c #B4AC00", +"; c #CCC400", +": c #E4D800", +"> c #FCF420", +", c gray55", +"< c #989898", +"1 c gray66", +"2 c #B4B4B4", +"3 c #C0C0C0", +"4 c #D0D0D0", +"5 c gainsboro", +"6 c #ECECEC", +/* pixels */ +"................................................................", +"##########@5;;;;;555555---5 X,155555;;;%,,# @@@@@@@@@@##########", +"##########@54----<1;;433;;, X,32,;&;===+##X X%====&&&%$@@@@@@@@@", +",,,,,,,, #@54---+<;;=333*-$ X151,&;&+*+#&#X X=;:=+,23;;;$$;;,,,,", +"42-221,, #@54==*+<;=11<,,=# X,3,,,11$*+#%#X X=:-+$&25;::@$;;*&44", +"11--#%&% #@53=*+%&<1<=,%,*# X@1;=1,,&O#%##X X=:+$,2:;&==@$=*+@,<", +"2<+#,,,% @@54=++&1<<<=,<%,# X@&=*-,11%$%XXX X*=+$&;;;&+=@%$@@$-&", +"22&,1,%# X@54,&&<1<4&*<1,,# X@%,1,1,,,1%XXX.X*+$,,&;&&++@%&,%&*$", +"<11%%,@@ .@531<&<;<<,<,,1,# @#%%##XXXXXXX XX&$,&11&,1&@%,<,,1&$", +",,,,%#@@ .@561&<&;-%,,,1,,#. @@XXXXXXXXX XXX&22,=&<&&<$%<,<,,1,", +"%%%%#@XX .@55,&<<;=%1,1,1,#. X@X.. ..XXXX&2&=@,1:&,%,%<$%,$$", +"##@@@ .@151<&;-=%<,,&,%$X X@@@@%111155+XXX%2,&$$&=X##$@@@@@@@", +" ....X#,54,&,=%,,1&,=,#X X@%1>>555445;+XX#,%$$#@OXXXXXX.....", +".........X#%14,1,,,1,,<,$$#X .X1>;=,,1,1=%O XXXXXXXXXXX.. ", +"XXXXXXXXXX#@,41,1<%<,&,1*##X .@1;*&1,::,=#+XX..........XXXXXXXXX", +"#@XXXXXXXX#@%3,1<;=%1,1,+#%@ .@1:*&,;:&,*#OX@@#### @@@@@@@@@@@@@", +"<<<<<<<<<. #@33*,=*1%,,,%$## @::&&1::%,+#XX@:--$#@#&<<<<<<<<<<<", +"4;-55;=%%X #@,3+$<$,%%1,%,%@ @:&,&,=+$1,#XXX--*$.@&3;;;5-11;;;5", +";-*--=+#%X #@%<$$,,%,#,%#%#@ @&,&,:$$$###X X=*#$ @<;;;&:=&1;=*%", +"-*1-=*+#%X @#@<<%,$%%%%#%#@. .1,%,%#XXXXXX $=*%# @<;;&<==&<;=*%", +"*1,-=++##X @#@$##XXXXXX. .,%XXX $,*,# @<1&,<=&&1;=*<", +"1,1-+##,#X @#@.... .X#X ......,1,1# @,1<1<1&1&1=+%", +",1&&#%,%#X X##@X @@@@@@@,,<=====&#.X$3513$ @,,1:<,1<11&&<", +",;=&,,,$@X X,;;-=,222$X@$=;;;-4666;;;;-=* X&5351% @&<1<,1<:<&1<1", +",=*1,,,$@X X;--=&&&&&X#@=;-%<11<1<=&=*=*+ X,5113: @:1<1<::&1<<1<", +"<*,,,,%#XX X-=*$$$$$$ #@<6<<=<;1<<&1*&=+O X,:,,1= @=O%$:-*+O%%#%", +"$$$$$#@XXX X-*$$<*=+$ @@<6:1<;*<;;1<*1*$O X,-%,1+ @OXX@OOOO@@###", +"#@@XXX .X-*$<<&*+$ @@<6;1;=&<;*<1<<&$o X,%,15O @.. XX@", +" ...@@@6$<1*,*+$ X@<6-<;+&1<1<&-*&$o X:6151# @XXXX... ", +"@$$%,<,,,,@ 6<<1*,$&$o @<6-1=+&<&<1<-*&#o X-6331# @XXXXXXXXXXXXX", +"$,2--,1111$ 614,+1,&$o @<61;=+&<11<1-*,#o +=511-# @+===--**@@@@#", +"$2--*$1111@ 61<1&,&,$o @&<;=+%&1<<&<-*$#o X=55-=# @%=+===---* c #C0C0C0", +", c #D0D0D0", +"< c gainsboro", +"1 c #ECECEC", +"2 c gray99", +/* pixels */ +" ;;;;=======&&&&% ", +" ;;<<,,,>>>::;;--==*&&%#+## ", +" >22111<<<,,,>>::;-&>=*&%#+OooX ", +" 12222111222<<,>>::;--=**+#+Ooo.X ", +" <112222221<,>>::;;-=**&%%%%oOoX.XX ", +" <<1122211,,,>>;,;;-=**&%%#O+XX..XX ", +" ><<2122111<<,,>>::;-=*&%#+OXo..XXX ", +" >>211221122<<,>>;;-=*&%#OoX...XX ", +" :1122221<,>;:-=*&%#+OXoX.... ", +" :>>2221<,>:;-=*&%#+OoXX..X ", +" ->1221<,>:;-=*&#%+OoX..X ", +" ->1221<,>:;-=*&%#+OoX..X ", +" ->2221<,>:;=;*&%#+OXo..X ", +" ->2221<,>:=-;*&%#+OoX..X ", +" ->2221<,>:;-=*&%O%OoX..X ", +" ->2221<,>:;-=*&%#%OoX..X ", +" ->11<,>:;-=*&%#+O+X....X ", +" -=;:;;==*&&%%#+OoX...... ", +" <2<1221<,>:;-=*&#%+o.X ", +" ><2222<,>:;-=*&%#+#oXX.o ", +" ><2221<,,:;-*=&%#+OoX..X ", +" ->2221<:1:;-=&*%#+OoX..X ", +" ->2221<>1:;-=*&%#+OXo..X ", +" ->2221<,,:;-=*&#%+OoX .X ", +" ->2221<,>:;-=*&%#+X+X..X ", +" -;2221:2>:;-=*&%#+OoX..X ", +" -<2221<,>:;-*-&%#+oOX..X ", +" ->2221<:<:;-=*&%+#OoX..X ", +" ->2221<,>:;=-*&%#+OXo..X ", +" *-<1<,>:;-=*&%#+OoX..... ", +" *-;-==**&&%%#+OoX.. ", +" ;,22222><,>:;-=*&%#+oXXo ", +" ->2221<1>:;-=*&%#+OoX..X ", +" ->2221<,>:;=-*%*#+OXO .X ", +" ->2221<:1:;-=*&%#O+oX..X ", +" ->22<2<,>:;-=*&%+#Oo.X.X ", +" ->2121<:>;:-*=&%##OoX... ", +" ->2221:2>:;-=*&%#+oOX..X ", +" ->22212,>:;-=&*%#+OoX..X ", +" ->22<2<,>:;=-*&%#O+Xo..X ", +" ->2221<,:<;-=*&#%+OoX..X ", +" ->2221,1>:;-=&*%#+OXo..X ", +" *>1211<,>:--=*&%+#OoX..o ", +" ;,<>>>:;-&-&%#+OoX.... ", +" ;1:>,>-=*&#%%#+OoX...... ", +" -,212221<,>:=-=*&%#+o.XX ", +" ->2221<,>:;-*-&%#+OXO..X ", +" ->222,2,>-<-=*&%#+OoX..X ", +" ->2221<,>:;-*-&%+#OoX..X ", +" ->2221<,>:;-=*&#%+OoX..X ", +" ->2221<,>->-=*%&#+OoX..X ", +" ->2221<,;<;-=*&%#O#oX..X ", +" ->122,2,>:;-=*&%#+OoX..X ", +" ->122,2,>:;-=*&%+#OoX..X ", +" :<>2221<,>:-:=*&%#+OoXo..X ", +" :1122221<,>:;-=*&%#+OXoX...XX ", +" >>212221122<<,>>;;-=*&%#OoX...XXXO+@##$$%% ", +" ><<2122111<<,,>>::;-=*&%#+OXo..XXXooO++@##$%% ", +" <<1122211,,,>>::;;=;**&%%#O+XX..XXooooO++@#$$% ", +" <112222221<,>>::;;-=**&%%&%@@oX.XXooooO++@#$$% ", +" 12222111222<<,>>::;--=**&$O$oo.XoooOO+@@#$$% ", +" >22111<<<,,,>:,:;--=*=&%$+OooXOOO+++@#$$% ", +" ;;<<,,,>>>::;;--==*&&%#+OO+#$$$%%%%%% ", +" ;;;;=======&&&&%#OO+#$%% " +}; diff --git a/textures/purplestone.xpm b/textures/purplestone.xpm new file mode 100755 index 0000000..097cb9a --- /dev/null +++ b/textures/purplestone.xpm @@ -0,0 +1,90 @@ +/* XPM */ +static char *purplestone[] = { +/* columns rows colors chars-per-pixel */ +"64 64 20 1 ", +" c #382C14", +". c gray22", +"X c #403018", +"o c #483818", +"O c #543C1C", +"+ c #5C4020", +"@ c #6C4824", +"# c #744C28", +"$ c #400040", +"% c #480048", +"& c #500050", +"* c #580058", +"= c #6C0070", +"- c #484848", +"; c gray33", +": c #646464", +"> c #80502C", +", c #840084", +"< c #9C009C", +"1 c #B400B4", +/* pixels */ +"===$$$$$*=,*=$$$$$$$======*$$$$$$$$$*=,,=**$$$$$$$$$$$$$********", +"+,,=$$$*=,==**$$$$$=,<@@@+=*$$$$$$&*=,,,,=,=$$$$$$$$$***=,,@@@@@", +"@+,,,=$*==*===*$$&*,<@@++++**&$$&&*&=,,,=,==*$$$$$$$***=,,@@@@@@", +"+++,=*****==**$%&&*,<@+,==+=*&&&**&*=,=,==***&&%&&%&&**=,@@@@OO*", +",+o=,=******&%%&&**=,,=*=,@=&*+++,=**=,=**++@+++OOoo&&&=,@@@X*O=", +",+o,,==*==,,,,,==***=,=,,=O&*+@@@+,=**=oo+@@@@@+++o+o&&=,=@+X=O,", +"=,+=,=,=,,,,@==,,==**=*,==X*+@@OO+,=*Xo@@#@@@+OOXOXX+o&*=,@+X,O=", +",,+,===,+#,@+=*===,=****=*o*@+O**O=*XO@#####@oOo$O**+Xo&*,@+X,O*", +"=,+=*=,+##@+O=****==*=**==+=++*,=o,=X@##>>##@o$o*O==O*o&&=+OX=O&", +"*=+*=,,##@++O=**=*****====O*++=,,X=X@Oo>>##@+X*X*O,,O=o*&*+OX,O&", +"**X==,<#@++Oo=*==+++Oo***=o&o*,==X&XO@=>#@@+OX***,,OO=oX*&*OX=*&", +"**X=,,<#++ooo=*=+@@@@+=****&o=,*=X%XOo=>@@+OOOX,*,OOOOoX=*&OX&*&", +"**X=,<<=+oX=X*=*@@+=+@,=*&%%X&&&&%%*Oo,@@+O*=OOX,,OooOoX==*OX&&%", +"**X=<,@@@+X&X&&+@+==,+,=&$$%&&*&&&*&Oo,@+O*=,=OX+@oXX,oX=,*&&&%%", +"***=,@@+==== %&+@+*,=+,=&%%&**=,,=&&oo,@*O=,,,@+@OX===oX=,=*&&%%", +"***=,@+=,<<, $&+@+*,*O=*%*ooo*====&%o*,@,O*oO@@@OX=,=*=oX==&%%%%", +"***=,@=,<,== $&@,O*=*o&&&+@@++o*=*%%o*,@,Oo@@@@@@OX==*,ooX=&%%%%", +"***==@=<,**$ $&@,o*=*X&*@>>>>@+**=%%X=,*,O@@@@OOOOX=,===oXX&%%&*", +"***==@=<*=,* %&,,=,=*&&,>@++++@O**&%X==**O@@OO O OX==**,=X&$&&&*", +"****==,=*,=* &*=,,=*&&*,+=1<,<+OoX*&X=,*OO@Oo *O*O =*=*,=X&%&**=", +"===**=,**==,=*=,==*&&*,@11<,,O,OOo**X==**O@O *=*=O =*=*==o&&====", +"@,,=*==*=**=,=***&&&=,@#,<,@OOXOXXX*o=***O,O ==** **=*&=*o*=,##@", +"@@+,=****=,**$$&**==,@#@@@@+X*=X*XXoOo**=O,o ***==*=*&&&oO,,##@@", +"++@o=**=,,,=*$$++X*=,@#=,@OO*=,*XXO+@+**==,X=****,=**&%$o+@@##@@", +"+OOo=,==,,,=&$O+Oo*=,@#=,@OX*,*XXoooOOO===,X,==,,=,=%$&&+@##,,,+", +"**oXX==,,,=*$&@=*o*=,@#@@OXX=,OooXXOOoOOX,===,,==*=$$%*=@##<,===", +"***oo=*===*o@@@*=XX=,@@=**==,,OoXo**=OOoXX=,==,=*&%$$%=,##<<,*=*", +",,,OO*,=**oOO+***X&=,,@=*=@@@OXXoOO,#@+@,1<@o=,,=,=*=,@@,o=*$**o+<,===,= $", +"%&*o=,,=,,=*,*&=,##@@@=<,+@o,=,==*=@@@,o=**oo+@#,=,===**", +"&%&X===*=,=**&==<=X=***@#@@+@@@,<,++=,=,==@@@@@@*oo++@#+==,==,=X", +"&%&X&****=***=*==X=,=*@@+O@O+@@@,<,+o====,@@++++@,,###+o**===,=X", +"%$% %&&&**==&*&%$X*=**,@O++oO+++=,,+o&**=@@++%&&*==+o*+o*=,,=,=X", +"$$$ %$%%&&***==%%X&*o@@@@+o+OOoo+@,+o%&**@+=O&**=,,+o=+o=,,=*=**", +"%$$$$%&&*******&&X o@OOo+o++ooooo++++o%&*O,=o*o++oX+,,=o,,O+o**X", +"&$$ %&**==,,,,,=*Xo@OOX oo+oo%**==OO++oX*o=,o=+OOoX+,==o=O+++o*X", +"%$%%&*=,,,@@@@@,=*o+OX% X%ooX*,==*ooooOo%X*=o,=o%oX+=**X,==OOo&&", +"%%%%&=,<<+@OOOO@,*o+X%% X%ooX=,,,,XX Oo&X%*X,=o%XX**=*X=*=ooo&&", +"%%%%*=,<<@*===OO=*o+X%%%X%%*X*=,,, X %oX**&%X==X%oo**,*X***ooo&&", +"&%%&*=,<*O=,=,=O=* ,,**,X*,*X*=,== %&X &*&%X&&X&OOX***X*=**+OO*", +"&%%&*=,OOXOO,=,o== *,,**X***X=*=*%% &=X %=%&X*&&*+=+X**X=**+>@@O", +"&%%&O@@@=,=====o=, *****XXXXX==***% =*X %&&*X==*,O,=XX*X**+>@++,", +"X&&=@@++@==,,XXXXXX**,*XooooooXXXXX X*X %=*=,,,=*XXXXXXXXX@>+=XX", +"XXX,@&=,O,*=XooooooooXXX+,++++OOOoooXXX =,==,,,oooOOOO+++@>+o,=X", +"XXXX+=,*oXXXo++@@+++ooooo+@#>#@@+++++OOooooXXXXoooO+@@@@@@+oXXXX", +":-.XXXXXXXXXXXXXXX.-::;.XXXXXXXXXXXXXXXXXXX.-;;-.XXXXXXXXXXXX.-:" +}; diff --git a/textures/redbrick.xpm b/textures/redbrick.xpm new file mode 100755 index 0000000..ec489b1 --- /dev/null +++ b/textures/redbrick.xpm @@ -0,0 +1,96 @@ +/* XPM */ +static char *redbrick[] = { +/* columns rows colors chars-per-pixel */ +"64 64 26 1 ", +" c #202020", +". c #2C2C2C", +"X c gray19", +"o c #343434", +"O c gray22", +"+ c #400000", +"@ c #4C0000", +"# c #580000", +"$ c #640000", +"% c #700000", +"& c #7C0000", +"* c gray25", +"= c #484848", +"- c #4C4C4C", +"; c gray33", +": c gray36", +"> c #646464", +", c #880000", +"< c #980000", +"1 c #A40000", +"2 c #B00000", +"3 c #BC0000", +"4 c #C80000", +"5 c #D40000", +"6 c #E00000", +"7 c #EC0000", +/* pixels */ +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +";O;=====;======;=O=======;;;;;;=========;;;;;;;====OOO==;;=====O", +"O775555555551==;775555555555555555551=O;77776666665555544443331=", +"=74225,15,41$.=;73,3,3,3&3<3<3&3&341%.=O51424224%4&424,21&4<41&.", +"=51&1,1<%1,%$.=;53,,1,%11%<11%<1%1<%#.=;511&$1,%,1&,11,1&,1#1%$.", +"=5&11%<11%1#+.=;5,31,1%1,1%1%,&1%<&%#.==5%1$,1$1%1&1,1$1<&1&1%@.", +"=41&,<&1%,1%+.=;33,1,,<1%,%1,%<&,%1%+.O=3%1&1,$1%%11%1,11&1#1,@.", +"=3&11%1<%<%#+.==34,1%1%1%1%<,%&1%<&%#.O=3<1$,1&,%,&1,1$1&,1&1%+.", +"=31%,#%&#%,%+.O;<<%%@,%%,%@%,%,%@,%%+.O=3%%#%%@,@%#,@%@,$@%,%,+.", +"=&$$$++++++++.O=&$$#########+++++++++.O=,$$$$$$$$$$#########+++.", +"==........ .O;=..... .. .....=;O........... .......", +";OOOO====OOOOO=O=======OOO;===OO======;O=;;;;:>>:;;==*O*;O;===;O", +"7555333333333331=;=7755555544444443333333333333333331=*;77555555", +"2,,2<&2&<,2$2,1+O=;7%24&3$,3,,4<1,&,1,1,1&4$4,<34<41+O=O74&2,2,2", +",1,1&,,$1,$,11%+.==52%1&11,1$1%$,1&1&1$11,$1,1%,1%1%+O=;42&1,&1<", +"%11,<$1&,,<$1,%+.O=5%1,<,,$,,%1,$1,&$&,,1#,&1%1%11%%+.*=4&111&1&", +"1,,1,&&,&1<$1$%+.O=5%11&1$,1$%1$,1&,&1$1,#1$1%,%1%1%+.O=42&1&1<&", +"%1$1%,&<$1$,11%+.=;52#1&1,$,#,%$1,&#&1$,#,1$,1%,1%1%+ O=2&11#1&,", +"%2$%@&%<%<%#<%%+.=;21%,#%<%,$%,#%<%<$,%,,#<%%,@%<%,%+ *;21&%#%<%", +"+@@@@@@@@@@@@+++O=;1$$$$$$$$$$$$$##################++ =O1$+$++$+", +"... ... ... .O=O=Oo......ooOOo... ... .....O=;=.......", +";;=OO=;O;O==OOOO==;===*O*O*O*===;O;=*OOO**==;*OO*===;=;O;*O*;===", +";775555555333333333333333331=;;77555555555533333333333333333331=", +";7,23&3&3&2,2,24,2,2,32$24%+O=;73%512,12,2<2&$1,%,1&,1<,1&,1#1+.", +"O72,1<1&%,11,<,1,$1%1,$,1%2+.=:53<1$1$,%<,$1$,1$1%1&1,1$1<&1&%+.", +"=3$11%,#1$1%1,<1$,1%,1,$&1%+.;>53&1&1$1%<1&1&1,$1%%1<%<,11&1#%+.", +"=32,1@1#%,1,%&1&,$&1$1,$1%#+.;:5%1%<,$,<%1$,$,1&,%,&1,1$1&,1&%+.", +";3%$1@,&1$1#1$1,$,1,$1$,&&2+.=;54%1%1,1,%1$1#%%@1@1#1@11,$@%,%+.", +"=41$%%%#%@%%,$,%%,%%$%<%<%%+.O;41%<%,#%%%%$,%,@1#%1@%,@1#1@1%%+.", +"=1<$$$$$$$$$$$$$$@@@@@@@@@++.O;1$$$$$$$$$$$$$$############+#&#+.", +"==O.................OOO......===........ .OOO. ...........", +";;;;;==O=OOO=;>>;;;===**OO*OO*;===;O;=;=*O*O*=;;==*O*===;O;===;O", +"33333333331=O;55555555333333333333333331=;;475555555553333333333", +"1212<42241+O=O51$1%11$1,11%1,$11$11%1&1+O=;51&1%11$1&,&1%1,1&1%1", +"1&,1<1&1,%+.=;5$1&,1&1<%1,,%,,1,$1%,1$1+O;;51#1%1,$1,1&,,<%<&<,%", +",&1<&1&<1%+.=O5$11&<1%1%1,1#1@,,1,%<1&1+O;>51&1%1,1,11&1%<,1<&1%", +"1,&1<1<&,%+O=;5<$1&1&#<,,,%,1$1,$,<%,1&+O;>5&11%1$11&&1&1,<<,&%,", +"1,&1&1&<1%+O==5$1&#<1%,,1,1%,@$<$1<%1&1+O=;41&11%1,,&1&1%<,1&,1%", +"%%,<%%<%%%+O==<$11#1&%1%1$1#,$1,$<%<1$&+.=;41#1%11,1,1&1%<%<&11%", +"++@@@@@@@++.==1$$$$$$$$$##############++.==1$$$$$$$$$$$$$$$####+", +"............=;=. ..OOO. .........O===....OO=O.. .......", +";=;O=OO==OOOO==OOO=====;;==OOO;===;O=O=O==;=;O;=;:>;-==O;=;=;O;O", +"O7555555533333333333333333333331O;O7755555555333333333333333331=", +";51,,1$11&<1&1%,1$1&1,1$1$11&%1+O=;711$1$1#1%1#1,#<,%1,&1&<%,1+.", +"=51$1,$1,<&1$,#1<$1#,<,$1&1&1%<+.==5,1$,$&#,#<&1#1$1%,%1,&<1$,+.", +"=5,$1$,%$1$1,&,1$<,,#&1@<#,$,,%+.O=5,1$$,1&#<1#1%%1%1&1%,$1+.", +"O51,1,$1,&<1&1#,1$1#,1#<1&111%&+.O=51$1,$1#1%<&&#,$1&,<,<&%1,1+.", +";51$,1$1$1$1$1%1$$1#,&1&,$<$,%1+ O;51$$1$#1#<#1$,%1%&1&<,$%+.", +"O41$1$,%,<&1,,,1<$,&#$1@1%<&1%1+ O;4%1$,$1#&1&#<%,$1%1%1&<%1$1+.", +";1$$$$$$$$$@@@@@@@@@@@@@@@@@@@@+.=;1$$$$$$$$$#####@@@@@@@@@@@++.", +"O=..........OOO. ... .. ..=O=...... .oOo. .... ......", +";O;O;=;====;>>;=;O;=;=*OOO*=;==O==;O;========-;;;-====OX XO==;=", +"555553333333333331=;=77555555553333333333333331=O;75555533333333", +"&1#11$<$1&4&1$1&1+.==51111$1@1&1$1$1<1$1$1#1%$+O=;51$,1#1%1%1$1%", +"1&&1&1$<&$1#&$,$,+.==5&1%1$%@&<&1,$,<$&,%,#1$1+o=;5$1#1%1%,1%1,@", +"1&#&1$<$&1,$<&+.=*5&&%1$&&1#1@11$1$1$,#,,$%+.=;5$1%%11,%,%$%,", +"&<#<$$1$1&1#&%$1$+.=*51@%1$1@1&<$1$,&$1$1,#%<$+.=;51$#1,%%1%1$%1", +"$1&1$1$,1$1&#,1&,+.=*5@11$1&%,#&@1$1$&&$,%#,%$+.==5$1,1%1,%%#1%1", +"$1&&$<<$<$$1$<+.==5@1%1$&&,@<$,@1&$1,$1#1#,+.O=5$1#%#1%1%#$1@", +"&<#1$$,$&&1#1$%,&+.=;41@%1$1@,$1$1%$1$&1$,%,$,+.O=4$$#1#1%1%1$1%", +"@@@@@@@@@@@@@@@@++.==1+++++@@@@@@@@@@@@@@@@@@++ =;1++@@@@@@@@@@@", +"...................=;=Ooo.............. . O==...... ..", +"O;O;OOO=====;;O====;;;;;===;===;==O===*OO*OO*=*O*;==O;====*O*===", +";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" +}; diff --git a/textures/wood.xpm b/textures/wood.xpm new file mode 100644 index 0000000..34bc923 --- /dev/null +++ b/textures/wood.xpm @@ -0,0 +1,79 @@ +/* XPM */ +static char *_14002b063464ef8f2562fe527901c8e08YouUzmnCeigh4Y[] = { +/* columns rows colors chars-per-pixel */ +"64 64 9 1 ", +" c #28200C", +". c #382C14", +"X c #403018", +"o c #483818", +"O c #543C1C", +"+ c #5C4020", +"@ c #6C4824", +"# c #744C28", +"$ c #905C34", +/* pixels */ +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", +"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", +"OOOOOOO.O .OOOOOOOOOOOOOO.O .OOOO.O .OOOOOO.O .OOOOOOOOOOO.O .OO", +"oo@####O$ O$+oooo##o@o@ooO$ O$#o#O$ O$+ooo+O$ O$o#oo#o#o##O$ O$@", +"oo@###+O$ O$@oooO##o@o@ooO$ O$#o#O$ O$#+o+#O$ O$o#oo#o#o##O$ O$@", +"oo+###OO$ O$#OooO##o@o@ooO$ O$@o#O$ O$##+##O$ O$o#oo#o#o##O$ O$@", +"OoO@##OO$ O$#Ooo+#@o@o@ooO$ O$@o#O$ O$#####O$ O$o#oo#o#o##O$ O$@", +"@oo+#+oO$ O$#+oO@#@o@o@ooO$ O$@o#O$ O$#####O$ O$o#oo#o#o@#O$ O$O", +"@oOo+OoO$ O$#@o+##+o@o@ooO$ O$+o#O$ O$#####O$ O$o#oo#o#o@#O$ O$O", +"#OooOooO$ O$##+@##+o@o@ooO$ O$+o#O$ O$#####O$ O$o#oo#o#o+#O$ O$O", +"#OooooOO$ O$##@###Oo@o@ooO$ O$oo#O$ O$#####O$ O$o#oo#o#o+#O$ O$o", +"@#oooO#O$ O$##@###Oo@o@ooO$ O$o+#O$ O$@####O$ O$o#oo#o#Oo#O$ O$o", +"@#OooO#O$ O$#####@oo@o@ooO$ O$o+#O$ O$@###@O$ O$o#oo#o#Oo#O$ O$o", +"+##oO##O$ O$#####@oo@o@ooO$ O$o##O$ O$+###@O$ O$o#oo#o#Oo#O$ O$o", +"O###O#+O$ O$@####@oo@o@ooO$ O$+##O$ O$o@#@+O$ O$o#oo#o#Oo#O$ O$O", +"o@##+#OO$ O$@####+oo@o@ooO$ O$+#@O$ O$o+@+oO$ O$o#oo#o#+o#O$ O$O", +"o@####OO$ O$+####+oo@o@ooO$ O$##@O$ O$oo+ooO$ O$o#oo#o#+o@O$ O$O", +"o+@###oO$ O$+####Ooo@o@ooO$ O$##+O$ O$oooooO$ O$o#oo#o#@o@O$ O$@", +"oO@##+oO$ O$O@###OoO@o@ooO$ O$#@+O$ O$oooooO$ O$o#oo#o#@o@O$ O$@", +"oo+##OoO$ O$O@##@ooO@o@ooO$ O$#@oO$ O$oooooO$ O$o#oo#o#@o+O$ O$@", +"ooO##OoO$ O$o+##@ooO@o@ooO$ O$#+oO$ O$+ooo+O$ O$o#oo#o##o+O$ O$@", +"OoO+OooO$ O$o+##+oo+@o@ooO$ O$@ooO$ O$@+o+@O$ O$o#oo#o@#ooO$ O$@", +"OooOooOO$ O$oO@@+oo+@o@ooO$ O$+ooO$ O$#@+@#O$ O$o#oo#o@#OoO$ O$@", +"OoooooOO$ O$oO++Ooo++o@ooO$ O$oooO$ O$##@##O$ O$o#oo#o+#OoO$ O$+", +"@ooooo@O$ O$ooOOooo@Oo@ooO$ O$oooO$ O$#####O$ O$o#oo#o+#+oO$ O$O", +"@ooooo@O$ O$ooooooo@Oo@ooO$ O$ooOO$ O$#####O$ O$o#oo#oO#+oO$ O$O", +"@OoooO+O$ O$ooooooO#oo@ooO$ O$ooOO$ O$#####O$ O$o#oo#oO#@OO$ O$o", +"+OoooOOO$ O$oooooo+#oo@ooO$ O$oo+O$ O$@####O$ O$o#oo#oO#@OO$ O$o", +"O@ooo@OO$ O$oooooo+#oo@ooO$ O$oo@O$ O$@####O$ O$o#oo#oo##+o$ O$o", +"O@Ooo@oO$ O$oooooo@#oo@ooO$ O$oO@O$ O$+###@O$ O$o#oo#oo##+O$ O$o", +"o+Oo@+oO$ O$Oooooo@#oo@ooO$ O$o+#O$ O$+@##@O$ O$o#oo#oo@#@O$ O$o", +"oO@O@OoO$ O$+ooooO#@oO@ooO$ O$O@#O$ O$o@##+O$ O$o#oo#oo@#@O$ O$o", +"oO@O@OoO$ O$@Oooo+#@oO@ooO$ O$+##O$ O$o+#@oO$ O$o#oo#Oo+##O$ O$o", +"oo+@+ooO$ O$#+ooO+#+o+@ooO$ O$@##O$ O$oo@+oO$ O$o#oo#Oo+##O$ O$O", +"ooO+OooO$ O$#@OoO##Oo+@ooO$ O$###O$ O$oo+ooO$ O$o#oo#OoO##O$ O$O", +"oooOoooO$ O$##+o+##Oo+@ooO$ O$##@O$ O$oooooO$ O$o#oo#OoO##O$ O$+", +"oooooooO$ O$###+###oo@@ooO$ O$##@O$ O$oooooO$ O$o#oo#+oO##O$ O$@", +"ooooooOO$ O$######@oo@@ooO$ O$##+O$ O$oooooO$ O$o#oo#+oo@#O$ O$@", +"OoooooOO$ O$@#####@oo#@ooO$ O$#@+O$ O$+ooooO$ O$o#oo#@oo@#O$ O$@", +"Oooooo+O$ O$@#####+oo#@ooO$ O$#@oO$ O$+ooooO$ O$o#oo@@oo+#O$ O$O", +"@OoooO+O$ O$+#####Ooo#+ooO$ O$#+oO$ O$@+oo+O$ O$o#oo@#oo+#O$ O$O", +"@OoooO@O$ O$O#####ooo#+ooO$ O$@+oO$ O$#+o++O$ O$o#oo+#OoO@O$ O$o", +"@+OoO+@O$ O$o@###@ooO#oooO$ O$@ooO$ O$#@++@O$ O$o#oo+#OoO@O$ O$o", +"@@OOO@+O$ O$o+###+oo+#oooO$ O$+ooO$ O$##+@#O$ O$o#ooO#OoO+O$ O$o", +"+@+O+@OO$ O$oO@#@Ooo@#oooO$ O$oooO$ O$##@##O$ O$o#ooO#+oo+O$ O$o", +"O@@+@@OO$ O$ooO@+ooo@#oooO$ O$ooOO$ O$#####O$ O$o#ooO#+OoOO$ O$o", +"O@@+@@oO$ O$oooOOooo#@oooO$ O$ooOO$ O$#####O$ O$o#ooO#@OoOO$ O$o", +"o@###@oO$ O$OooooooO#@oooO$ O$oo+O$ O$####@O$ O$o#ooo#@OoOO$ O$o", +"o+###@oO$ O$Ooooooo+#+oooO$ O$oO@O$ O$@###@O$ O$o#ooo@#+ooO$ O$o", +"oO@##@oO$ O$+oooooo@#+oooO$ O$o+#O$ O$@###+O$ O$o#ooo@#+OoO$ O$o", +"oO@##+oO$ O$@Oooooo@#ooooO$ O$O@#O$ O$+###+O$ O$o#ooo+#@OoO$ O$O", +"oo+#@+oO$ O$#OooooO#@ooooO$ O$@##O$ O$+##@OO$ O$o#ooo+#@+oO$ O$O", +"ooO@@OoO$ O$#+oooo+#@oo+oO$ O$###O$ O$O@#@OO$ O$o#OooO@#+OO$ O$+", +"ooO@+OoO$ O$@@Oooo@#+oo+oO$ O$###O$ O$O@#+oO$ O$o#OooO+#@OO$ O$+", +"ooo++ooO$ O$@#OooO@#ooo@oO$ O$###O$ O$o+@OoO$ O$o#Oooo+#@OO$ O$@", +"oooOOooO$ O$+#@OoO##ooo@oO$ O$###O$ O$oO+ooO$ O$o#OoooO@#OO$ O$@", +"OoooooOO$ O$o@#@O##@ooo@oO$ O$###O$ O$ooOooO$ O$o@+oooO+#@O$ O$#", +"OoooooOO$ O$o+#####+ooo#oO$ O$##@O$ O$oooooO$ O$o@@oooo+#@O$ O$#", +"+ooooo@O$ O$oo####@ooo+#oO$ O$##@O$ O$oooooO$ O$o+@OoooO@@O$ O$#", +"+OoooO@O$ O$oo+@#@+ooo@#oO$ O$#@+O$ O$oooooO$ O$o+#Ooooo++O$ O$#", +"@OoooO@O$ O$ooo+@+oooo@#oO$ O$#@+O$ O$oooooO$ O$oo#OoooooOO$ O$#", +"@+oooO@O$ O$oooo+oooo@##+O$ O$@+oO$ O$oooooO$ O$+o#+ooooooO$ O$#", +"+++++++O$ O$+ooooooo+++++O$ O$+ooO$ O$+ooo+O$ O$+o++ooooooO$ O$+" +};