Files
42_INT_04_fdf/srcs/parse.c
2021-07-25 14:24:05 +02:00

100 lines
1.5 KiB
C

#include "fdf.h"
void z_amplitude(t_fdf*fdf, int i)
{
if (i > fdf->max_z)
fdf->max_z = i;
if (i < fdf->min_z)
fdf->min_z = i;
}
int **split_to_map(t_fdf *fdf, char *raw)
{
int i;
int j;
int **map;
if (fdf->map_height == 0)
shut_down(fdf);
map = ft_calloc(fdf->map_height, sizeof(map));
if (!map)
shut_down(fdf);
i = -1;
while (++i < fdf->map_height)
{
map[i] = ft_calloc(fdf->map_width, sizeof(*map));
j = -1;
while (++j < fdf->map_width)
{
while (*raw == ' ' || *raw == '!')
raw++;
map[i][j] = ft_atoi(raw);
while (ft_isdigit(*raw) || *raw == '-')
raw++;
raw += is_color(raw);
z_amplitude(fdf, map[i][j]);
}
}
return (map);
}
int is_color(char *color)
{
int i;
i = 0;
if (!ft_strncmp(color, ",0x", 3))
i += 3;
while (ft_isalnum(color[i]))
i++;
return (i);
}
int size_width(char *raw)
{
int i;
int j;
i = 0;
while (raw[i] && raw[i] != '!')
{
while (raw[i] == ' ')
i++;
if (raw[i] == '-')
i++;
while (ft_isdigit(raw[i]))
i++;
i += is_color(raw + 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);
fdf->min_z = 0;
fdf->max_z = 0;
return (split_to_map(fdf, raw));
}