diff --git a/parse_input.c b/parse_input.c index 876670b..e59be21 100644 --- a/parse_input.c +++ b/parse_input.c @@ -6,41 +6,75 @@ /* By: vmanzoni +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/15 14:48:14 by vmanzoni #+# #+# */ -/* Updated: 2019/04/25 13:03:52 by hulamy ### ########.fr */ +/* Updated: 2019/04/25 15:02:26 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ #include "fillit.h" /* -** DELETE BEFORE EVAL -** Function that print a short in bites +** Function that transforme a tetrminos char* into a short of 16 bites +** and then fills it and its reversed into the list */ -//void print_short(short octet) -//{ -// unsigned int i; -// -// i = 1 << 15; -// while (i) -// { -// (octet & i) ? printf("1") : printf("0"); -// i >>= 1; -// } -//} +void fill_list(char line[], t_fillist *list) +{ + unsigned short tmp; + int i; + + i = 0; + while (line[i]) + { + list->tetribit <<= 1; + if (line[i] == '\n') + i++; + if (line[i++] == '#') + list->tetribit |= 1; + } + while (!(list->tetribit & (1 << 15))) + list->tetribit <<= 1; + tmp = list->tetribit; + while (tmp) + { + list->tibirtet <<= 1; + if (tmp & 1) + list->tibirtet |= 1; + tmp >>= 1; + } +} + +/* +** Function that creates the linked list and add a new structure +** linked each time needed +*/ + +int add_to_list(char *line, t_fillist **list) +{ + t_fillist *tmp; + + if (!(tmp = (t_fillist*)malloc(sizeof(*tmp)))) + return (0); + if (!(*list)) + tmp->next = NULL; + else + tmp->next = *list; + *list = tmp; + fill_list(line, *list); + return (1); +} /* ** Function that parse a file and put each tetrimino in a linked list */ -void parse_input(char *input, t_fillist *list) +void parse_input(char *input) { + static t_fillist *list = NULL; char tetri[20]; int i; int j; i = 0; -// printf("%s", input); while (input[i]) { j = 0; @@ -55,31 +89,3 @@ void parse_input(char *input, t_fillist *list) } } -/* -** DELETE BEFORE EVAL // NOT USED ANYMORE -** Function that parse a file and put each tetrimino in a linked list -*/ - -// char **create_square(char *tetri) -// { -// char **square; -// int i; -// int k; -// -// i = 0; -// if (!(square = (char**)malloc(sizeof(*square) * (4 + 1)))) -// return (NULL); -// square[4] = NULL; -// while (*tetri && (k = -1)) -// { -// if (!(square[i] = (char*)malloc(sizeof(**square) * (4 + 1)))) -// return (NULL); -// square[i][4] = '\0'; -// while (++k < 4) -// square[i][k] = *(tetri++); -// while (*tetri == '\n') -// tetri++; -// i++; -// } -// return (square); -// } diff --git a/test_big_tetri.c b/test_big_tetri.c index eaa4259..795515c 100644 --- a/test_big_tetri.c +++ b/test_big_tetri.c @@ -14,40 +14,21 @@ void print_bits(unsigned int bits, int size) write(1, "\n", 1); } -void print_map(unsigned int *tab, int s) +void print_map(unsigned int *tab, int size) { int i; - unsigned int m; + unsigned int mask; unsigned int tmp; i = 0; - m = 0; + mask = 0; // creer un mask avec les size bits de gauche a 1 (ex: 11111110000000000000000000000000) - while (i++ < s) - m = (m >> 1) | ((m | 1) << 31); - write(1, "\n", 1); + while (i++ < size) + mask = (mask >> 1) | ((mask | 1) << 31); i = 0; - while (i < s * s) + while (i < size * size) { -// /* -// ** first version : -// ** -// ** tmp = ((m >> i) & tab[i / 32]) << i; -// ** tmp |= ((m << (32 - i)) & tab[(i + s) / 32]) >> (32 - i); -// ** tmp >>= 32 - s; -// ** print_bits(tmp, s); -// ** i += s; -// */ -// -// tmp = (m & (tab[i / 32] << i)) | (m & (tab[(i + s) / 32] >> (32 - i))); -// print_bits(tmp >> (32 - s), s); -// i += s; - - /* - ** second version : - ** n'utilise pas le mask m et le tmp - */ - if (!(i % s)) + if (!(i % size)) ft_putchar('\n'); tab[i / 32] & (1 << (31 - i % 32)) ? ft_putchar('#') : ft_putchar('.'); ft_putchar(' '); @@ -56,16 +37,18 @@ void print_map(unsigned int *tab, int s) write(1, "\n", 1); } -void find_place(unsigned int *tab, char *line, int s) +void find_place(unsigned int *tab, char *line, int size) { unsigned short tetri; int i; - unsigned int m; + int j; + unsigned int mask; unsigned int tmp; - ft_putendl("# . . # # # # T T # . # . # # # # # . . # # . # T # . # # # # . . # . # . . # # T . . # # # . # # . # # # . . . # # # # . . # . . # . # # . . # . . . # . . . . # . . . # # . # . . . # . # # ."); - // create tetri +// ft_putendl("# . . # # # # T T # . # . # # # # # . . # # . # T # . # # # # . . # . # . . # # T . . # # # . # # . # # # . . . # # # # . . # . . # . # # . . # . . . # . . . . # . . . # # . # . . . # . # # ."); + /////////////// create tetri /////////////// i = 0; + tmp = 0; while (line[i]) { tetri <<= 1; @@ -77,18 +60,31 @@ void find_place(unsigned int *tab, char *line, int s) while (!(tetri & (1 << 15))) tetri <<= 1; print_bits(tetri, 16); - write(1, "\n", 1); + tmp = (tetri | tmp) << 16; + print_map(&tmp, 4); + /////////////// create tetri /////////////// - m = 15 << (32 - 4); + mask = 15 << (32 - 4); i = 0; - while (i < 20) + while (i < 16) { - while (i < 4 * s) + tmp = 0; + j = 3 * size + i; + while (j >= i) { - tmp = (m & (tab[i / 32] << i)) | (m & (tab[(i + s) / 32] >> (32 - i))); - print_bits(tmp, 32); - i += s; + tmp >>= 4; + tmp |= (mask & (tab[j / 32] << j)); + tmp |= (mask & (tab[(j + size) / 32] >> (32 - j))); + // print_bits(tmp, 32); + j -= size; } + //write(1, "\n", 1); + print_map(&tmp, 4); + print_bits(tmp >> 16, 32); + print_bits(tetri, 32); + //print_bits((tmp >> 16) & tetri, 32); + if (i % size == size - 4) + i += 3; i++; } } @@ -120,10 +116,10 @@ int main(int ac, char **av) // mettre l'option "b" pour afficher la troisieme argument en binaire if (av[0][0] == 'b' && ac > 2) ft_putendl(ft_convertbase(av[1], "01", "0123456789")); - print_map(tab, 16); + print_map(tab, 10); write(1, "\n", 1); if (av[0][0] == 't' && ac > 2) - find_place(tab, av[1], 16); + find_place(tab, av[1], 10); } return (0); }