Files
42_INT_04_fdf/srcs/parse.c
2021-07-24 15:26:48 +02:00

74 lines
1.1 KiB
C

#include "fdf.h"
int **split_to_map(t_fdf *fdf, char *raw)
{
int i;
int j;
int z;
int **map;
map = ft_calloc(fdf->map_height, sizeof(map));
i = -1;
z = 0;
while (++i < fdf->map_height)
{
map[i] = ft_calloc(fdf->map_width, sizeof(*map));
j = -1;
while (++j < fdf->map_width)
{
while (!ft_isdigit(*raw))
raw++;
map[i][j] = ft_atoi(raw);
while (ft_isdigit(*raw))
raw++;
if (map[i][j] > z)
z = map[i][j];
}
}
fdf->max_z = z;
return (map);
}
int size_width(char *raw)
{
int i;
int j;
i = 0;
while (raw[i] && raw[i] != '!')
{
while (raw[i] == ' ')
i++;
while (ft_isdigit(raw[i]))
i++;
j++;
}
return (j);
}
int **parse_map(t_fdf *fdf, int fd)
{
int height;
int ret;
char *line;
char *raw;
height = 0;
ret = 1;
line = NULL;
raw = ft_strdup("");
while (ret > 0)
{
ret = ft_gnl(fd, &line);
if (ret > 0)
{
height++;
raw = ft_strjoinfree(raw, line);
raw = ft_strjoinfree(raw, ft_strdup("!"));
}
}
fdf->map_height = height;
fdf->map_width = size_width(raw);
return (split_to_map(fdf, raw));
}