2 * Copyright (C) 2015 Thadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 #include <readline/readline.h>
27 #include <readline/history.h>
29 #include "declaracao.h"
32 static int readline_support = 1;
34 static int fileprocess(struct declaracao *dec, int fd)
45 while (getline(&line, &lsz, f) > 0) {
46 r = cmd_run(dec, line);
48 fprintf(stderr, "Não foi possível executar comando na linha %d: %s\n",
49 n, dec->error ?: strerror(-r));
59 static int ttyprocess(struct declaracao *dec)
64 while ((line = readline("declara> ")) != NULL) {
67 r = cmd_run(dec, line);
69 fprintf(stderr, "Não foi possível executar comando: %s\n",
70 dec->error ?: strerror(-r));
77 static int process(char *filename)
81 struct declaracao *dec;
82 dec = declaracao_new(-1);
85 if (filename != NULL) {
86 fd = open(filename, O_RDONLY);
91 r = fileprocess(dec, fd);
94 if (isatty(0) && readline_support) {
97 r = fileprocess(dec, 0);
101 declaracao_free(dec);
105 static void usage(void)
107 fprintf(stderr, "declara <filename>\n");
111 int main(int argc, char **argv)
113 char *filename = NULL;
115 if (!readline_support && argc < 2)
123 r = process(filename);