99 lines
1.4 KiB
C
99 lines
1.4 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;
|
|
|
|
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));
|
|
if (!map[i])
|
|
shut_down(fdf);
|
|
j = -1;
|
|
while (++j < fdf->map_width)
|
|
{
|
|
while (*raw == ' ' || *raw == '!')
|
|
raw++;
|
|
map[i][j] = ft_atoi(raw);
|
|
while (ft_isdigit(*raw) || *raw == '-')
|
|
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));
|
|
}
|