parsing done

This commit is contained in:
Jack Halford 2016-08-29 00:36:01 +02:00
parent b93eebc9be
commit b9edcec9b9
4 changed files with 70 additions and 40 deletions

View file

@ -0,0 +1,19 @@
...#
...#
...#
...#
....
....
....
####
.###
...#
....
....
....
..##
.##.
....

View file

@ -1,9 +1,10 @@
#ifndef FILLIT_H #ifndef FILLIT_H
# include <fcntl.h>
# include <stdio.h>
# include "libft.h" # include "libft.h"
# define FILLIT_H # define FILLIT_H
# define BUF_SIZE 32 # define BUF_SIZE 32
typedef struct s_tetrim typedef struct s_tetrim
{ {
char id; char id;

@ -1 +1 @@
Subproject commit 5d24c020c6563f8d7eb78bdcb18e61f28aa0d435 Subproject commit b12c10b76eee97e4ed9f5aafef7954cd06c0e9f3

View file

@ -5,90 +5,100 @@ void ft_usage(void)
ft_putendl("error"); ft_putendl("error");
} }
t_list *ft_get_tetrims(char *filename) t_tetrim *ft_get_tetrims(char *filename)
{ {
int fd; int fd;
char buf[BUF_SIZE + 1]; char buf[BUF_SIZE + 1];
int ret;
int i; int i;
int j; int j;
int k; int k;
int l;
int ref[2]; int ref[2];
char letter = 'A'; char letter = 'A';
t_tetrim tetrim; t_tetrim *tetrims;
t_list *tetrims;
fd = open(filename); tetrims = (t_tetrim *)ft_memalloc(sizeof(t_tetrim) * 27);
fd = open(filename, O_RDONLY);
if (fd == -1) if (fd == -1)
return (0); return (0);
j = -1; k = -1;
k = 0; j = 0;
l = 0;
while ((ret = read(fd, buf, BUF_SIZE))) while ((ret = read(fd, buf, BUF_SIZE)))
{ {
ret[BUF_SIZE] = '\0'; buf[ret] = '\0';
i = 0; i = 0;
while (ret[i]) while (buf[i])
{ {
if (ret[i] == '.') /* printf("%i, %i, %i: '%c'\n", i, j, k, buf[i]); */
if (buf[i] == '.')
; ;
else if (ret[i] == '#') else if (buf[i] == '#')
{ {
if (j == -1) if (k == -1)
{ {
tetrim.id = letter++; tetrims[l].id = letter++;
ref[0] = k / 5; ref[0] = j / 5;
ref[1] = k % 5; ref[1] = j % 5;
} }
else if (j >= 0 && j <= 2) else if (k >= 0 && k <= 2)
{ {
(tetrim.pos)[j][0] = i / 5 - ref[0]; tetrims[l].pos[k][0] = j / 5 - ref[0];
(tetrim.pos)[j][1] = i % 5 - ref[1]; tetrims[l].pos[k][1] = j % 5 - ref[1];
} }
else else
return (0); return (0);
j++; k++;
} }
else if (i > 0 && ret[i] == '\n' && ret[i - 1] == '\n') else if (buf[i] == '\n')
{ {
if (j != 3 || k != 20) if (i > 0 && buf[i - 1] == '\n')
{
if (k != 3 || j != 20)
return (0); return (0);
ft_lstadd(&tetrims, ft_lstnew(tetrim, sizeof(tetrim))); l++;
j = -1; j = -1;
k = -1; k = -1;
} }
else if (ret[i] == '\n') else
{ {
if ((k + 1) % 5 != 0) if ((j + 1) % 5 != 0)
return (0); return (0);
} }
}
else else
{
return (0); return (0);
}
i++; i++;
k++; j++;
} }
} }
if (j != 3 || k != 20) if (k != 3 || j != 20)
return (0); return (0);
ft_lstadd(&tetrims, ft_lstnew(tetrim, sizeof(tetrim))); tetrims[l + 1].id = '\0';
return (tetrims); return (tetrims);
} }
int main(int ac, char **av) int main(int ac, char **av)
{ {
t_list *tetrims; t_tetrim *tetrims;
int i; int i;
int l;
if (ac != 2 || !(tetrims = ft_get_tetrims(av[1]))) if (ac != 2 || !(tetrims = ft_get_tetrims(av[1])))
{ {
ft_usage(); ft_usage();
return (1); return (1);
} }
while (tetrims) l = -1;
while (tetrims[++l].id)
{ {
printf("%c", tetrims->content.id); printf("%c\n",tetrims[l].id);
for (i=0; i<=3; i++) for (i=0; i < 3; i++)
printf("\t%i,%i\n", tetrims->content.pos[i][0], tetrims->content.pos[i][1]); printf("%i,%i\n", tetrims[l].pos[i][0], tetrims[l].pos[i][1]);
ft_putendl(""); ft_putendl("");
tetrims = tetrims->next;
} }
return (0); return (0);
} }