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)
44 while ((r = getline(&line, &lsz, f)) > 0) {
45 r = cmd_run(dec, line);
47 fprintf(stderr, "Não foi possível executar comando na linha %d: %s\n",
48 n, dec->error ?: strerror(-r));
57 static int ttyprocess(struct declaracao *dec)
62 while ((line = readline("declara> ")) != NULL) {
65 r = cmd_run(dec, line);
67 fprintf(stderr, "Não foi possível executar comando: %s\n",
68 dec->error ?: strerror(-r));
75 static int process(char *filename)
79 struct declaracao *dec;
80 dec = declaracao_new(-1);
83 if (filename != NULL) {
84 fd = open(filename, O_RDONLY);
89 r = fileprocess(dec, fd);
92 if (isatty(0) && readline_support) {
95 r = fileprocess(dec, 0);
103 static void usage(void)
105 fprintf(stderr, "declara <filename>\n");
109 int main(int argc, char **argv)
111 char *filename = NULL;
113 if (!readline_support && argc < 2)
121 r = process(filename);