카테고리 없음
[FDF] ft_make_layer
Or71nH
2022. 6. 25. 09:05
type.h
typedef struct s_layer_len
{
int x;
int y;
} t_layer_len;
typedef struct s_oneline
{
char *data;
size_t data_size;
void *next;
} t_oneline;
main문
#include <stdio.h>
#include <stdlib.h>
#include <mlx.h>
#include <mlx_type.h>
#include <get_next_line.h>
t_oneline *ft_new_oneline(char const *data)
{
t_oneline *new_oneline;
new_oneline = (t_oneline *)malloc(sizeof(t_oneline));
if (!new_oneline)
return (NULL);
ft_memset(new_oneline, 0, sizeof(t_oneline));
if (!data)
return (new_oneline);
new_oneline->data_size = ft_strlen(data);
new_oneline->data = malloc(new_oneline->data_size);
if (!new_oneline->data)
return (NULL);
ft_memcpy(new_oneline->data, data, new_oneline->data_size);
return (new_oneline);
}
t_oneline *ft_oneline_add(t_oneline **oneline_ptr, char const *data)
{
t_oneline *new_oneline;
t_oneline *tmp_oneline;
tmp_oneline = *oneline_ptr;
new_oneline = ft_new_oneline(data);
if (!tmp_oneline)
{
*oneline_ptr = new_oneline;
return (new_oneline);
}
while (tmp_oneline->next)
tmp_oneline = tmp_oneline->next;
tmp_oneline->next = new_oneline;
return (new_oneline);
}
t_oneline *readfile(char *file_name)
{
t_oneline *head_oneline;
char *line;
int fd1;
head_oneline = NULL;
fd1 = open(file_name, O_RDONLY);
while (get_next_line(fd1, &line) > 0)
ft_oneline_add(&head_oneline, line);
return (head_oneline);
}
int ft_atoi_move(char **str_ptr)
{
int num;
int sign;
sign = 1;
num = 0;
while ((0x09 <= **str_ptr && **str_ptr <= 0x0D) || **str_ptr == 0x20)
(*str_ptr)++;
if ((**str_ptr == '-' || **str_ptr == '+'))
{
if (**str_ptr == '-')
sign = -1;
(*str_ptr)++;
}
while (0x30 <= **str_ptr && **str_ptr <= 0x39)
num = (num * 10) + (*(*str_ptr)++ - 0x30);
return (num * sign);
}
int ft_int_layer_y_len(t_oneline *head_oneline)
{
int y_len;
y_len = 0;
while (head_oneline)
{
head_oneline = head_oneline->next;
y_len++;
}
return (y_len);
}
int ft_int_layer_x_len(t_oneline *head_oneline)
{
int x_len;
int flag;
char *str;
x_len = 0;
flag = 1;
str = head_oneline->data;
while (*str)
{
if ((0x09 <= *str && *str <= 0x0D) || *str == 0x20)
flag = 1;
else if ((0x30 <= *str && *str <= 0x39) || *str == '-' || *str == '+')
{
if (flag && flag--)
x_len++;
}
else
return (0);
str++;
}
return (x_len);
}
int *ft_make_layer_1D(t_oneline *head_oneline)
{
int *layer_1D;
int index;
int x_len;
char *str;
index = 0;
str = head_oneline->data;
x_len = ft_int_layer_x_len(head_oneline);
layer_1D = (int *)malloc(sizeof(int) * (x_len));
if (!layer_1D)
return (NULL);
while (*str)
layer_1D[index++] = ft_atoi_move(&str);
return (layer_1D);
}
int **ft_make_layer_2D(t_oneline *head_oneline)
{
int **layer_2D;
int index;
int y_len;
if (!head_oneline)
return (NULL);
index = 0;
y_len = ft_int_layer_y_len(head_oneline);
layer_2D = (int **)malloc(sizeof(int *) * (y_len));
if (!layer_2D)
return (NULL);
while (head_oneline)
{
layer_2D[index++] = ft_make_layer_1D(head_oneline);
head_oneline = head_oneline->next;
}
return (layer_2D);
}
void ft_print_layer_2D(int **layer_2D, t_layer_len c_layer_len)
{
int x = 0;
int y = 0;
while (y < c_layer_len.y)
{
x= 0;
while (x < c_layer_len.x)
{
printf("%d\t", layer_2D[y][x]);
x++;
}
printf("\n");
y++;
}
printf("\n");
}
int **ft_make_layer(char *file_name)
{
t_oneline *head_oneline;
t_dot *head_dot;
int **layer_2D;
t_layer_len c_layer_len;
head_oneline = readfile(file_name);
if (!head_oneline)
return (NULL);
c_layer_len.x = ft_int_layer_x_len(head_oneline);
c_layer_len.y = ft_int_layer_y_len(head_oneline);
layer_2D = ft_make_layer_2D(head_oneline);
ft_print_layer_2D(layer_2D, c_layer_len);
return (layer_2D);
}
int main(int ac, char **av)
{
t_dot *head_dot;
int **layer_2D;
layer_2D = ft_make_layer(av[1]);
if (layer_2D)
return 0;
return (0);
}
결과
kyoulee@kyouleeui-MacBookAir run % cat test.fdf
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
kyoulee@kyouleeui-MacBookAir run % ./a.out test.fdf
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
kyoulee@kyouleeui-MacBookAir run %
이걸 만들고
조금 문제가 있다 느겼다
x와 y가 일정하지 않다면 점이 꼭 사각형이 아니라면 그것을 해결하기 위해 다시 생각하게 됨