/* * Copyright ©️ 2022 Mario Forzanini * * This file is part of dwrt. * * Dwrt is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * Dwrt is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License * along with dwrt. If not, see . * */ #include #include #include #include #include "dat.h" #include "fns.h" #define BUFSZ 512 void start_repl(int lflag, char var) { char c, *buf; size_t offset, len; Parser *p; Node *result; c = '\0'; offset = 0; len = BUFSZ; buf = ecalloc(len, sizeof(char)); while (1) { while ((c = getchar()) != '\n' && c != EOF) { len = strappend(buf, c, offset++, len); } p = p_alloc_str(buf); if (parse(p) < 0) { fprintf(stderr, "%s", p->err); fflush(stdout); p_free(p); buf = memset(buf, 0, len); offset = 0; continue; } if (p->ast != NULL) { result = ast_dwrt(p->ast, var); if (lflag) ast_to_latex(result); else ast_print(result); printf("\n"); fflush(stdout); ast_free(result); } p_free(p); buf = memset(buf, 0, len); offset = 0; if (c == EOF) break; } free(buf); }