diff options
Diffstat (limited to 'src/ft_get_map.c')
-rw-r--r-- | src/ft_get_map.c | 63 |
1 files changed, 60 insertions, 3 deletions
diff --git a/src/ft_get_map.c b/src/ft_get_map.c index a45052c..1c672e6 100644 --- a/src/ft_get_map.c +++ b/src/ft_get_map.c @@ -3,18 +3,75 @@ #include <stddef.h> #include <stdlib.h> +/* static char */ +/* **ft_split_lines(char *line, int count) */ +/* { */ +/* } */ + +static int +ft_linecpy(char *line, char *mapL) +{ + size_t i; + + i = 0; + while (i < ft_strlen(line)) + { + mapL[i] = line[i]; + i += 2; + } + mapL[i + 1] = '\n'; + return (0); +} + +static int +ft_check_err(char *line, size_t size, t_win *wlist) +{ + size_t i; + + i = 1; + if (ft_strlen(line) != size) + return (-1); + while (i < ft_strlen(line) && line[i]) + { + if (line[i] != ' ') + return (ft_map_error(11, wlist)); + i += 2; + } + return (0); +} int ft_get_map(int fd, t_win *wlist) { size_t i; + size_t len; char *line; + char *mapL; - ft_free_words(wlist->clist->map, NULL); - i = 0; - if (!(wlist->clist->map = (char**)malloc(40 * sizeof(char*)))) + /* ft_free_words(wlist->clist->map, NULL); */ + /* if (!(wlist->clist->map = (char**)malloc(40 * sizeof(char*)))) */ + /* return (-1); */ + if (get_next_line(fd, &line) > 0) + { + len = ft_strlen(line); + ft_check_err(line, len, wlist); + if (!(mapL = (char*)malloc((len + 1) * sizeof(char)))) + ft_linecpy(line, mapL); + ft_memdel(line); + } + else return (-1); + i = 1; while (get_next_line(fd, &line) > 0) { + ft_check_err(line, len, wlist); + mapL = (char*)ft_nrealloc(mapL, ((len + 1) * i) * sizeof(char), (((len + 1) * i) + ft_strlen(line) + 1) * sizeof(char)); + ft_linecpy(line, mapL); + ft_memdel(line); + i++; } + mapL[(i * (len + 1)) + 1] = '\0'; + ft_printf("mapL [%s]\n", mapL); + wlist->clist->map = ft_split(mapL, '\n'); + ft_memdel(mapL); return (0); } |