bsq

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   mapper.c                                           :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: rmckinno <[email protected]>                    +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2020/01/27 13:04:05 by rmckinno          #+#    #+#             */
/*   Updated: 2020/01/29 23:32:46 by rmckinno         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "../lib/ft_bsq.h"

void	read_key(t_map *m, int fd)
{
	char *k;

	k = ft_read_line(fd);
	m->lines = ft_atoi(k);
	while (*k)
		k++;
	m->full = *--k;
	m->obstacle = *--k;
	m->empty = *--k;
}

void	read_map(t_map *m, int fd)
{
	char	*line;
	int		length;
	int		x;
	int		y;

	x = 0;
	y = 0;
	length = 0;
	line = ft_read_line(fd);
	while (line[length])
		length++;
	m->length = length;
	m->map = (char **)malloc(sizeof(char) * (m->lines * length));
	m->map[y++] = &line[0];
	while (y < m->lines)
	{
		line = ft_read_line(fd);
		m->map[y++] = line;
	}
}

int		validate_map(t_map *m)
{
	int l;
	int c;

	l = 0;
	c = 0;
	while (l < m->lines)
	{
		while (c <= m->length && m->map[l][c] != '\0')
		{
			if ((m->map[l][c] != m->empty) && (m->map[l][c] != m->obstacle))
				return (0);
			c++;
		}
		if (c != m->length)
			return (0);
		c = 0;
		l++;
	}
	if (l != (m->lines))
		return (0);
	return (1);
}

t_map	*get_map(int fd)
{
	t_map	*m;

	m = (t_map *)malloc(sizeof(t_map));
	read_key(m, fd);
	read_map(m, fd);
	if (!validate_map(m))
		return (NULL);
	return (m);
}