main
unknown
plain_text
8 months ago
1.6 kB
15
Indexable
#include "type.h"
bool lerLinha(char *cmd, char *arg) {
char line[LINE_SIZE] = {0};
printf("\n> ");
if (fgets(line, LINE_SIZE, stdin) == NULL) {
return false;
}
// remove newline
line[strcspn(line, "\n")] = '\0';
int num_args = sscanf(line, "%c %s", cmd, arg);
if (num_args == 0) {
return false;
}
if (num_args == 1) {
arg[0] = '\0'; // limpa arg se só houver comando
}
return true;
}
bool executarComando(COMANDO comandos[], char cmd, char *arg, ESTADO *estado) {
for (int i = 0; comandos[i] != NULL; i++) {
bool resultado;
if (arg[0] != '\0') {
resultado = comandos[i](cmd, arg, estado);
} else {
resultado = comandos[i](cmd, NULL, estado);
}
if (resultado) {
return true;
}
}
return false;
}
int main() {
COMANDO comandos[] = {sair, ler, /*gravar,*/ riscar, desfazer, branco,NULL};
ESTADO estado;
estado.looping = true;
estado.tabuleiro = NULL;
estado.historico = NULL;
char cmd = 0;
char arg[LINE_SIZE] = {0};
while (estado.looping) {
bool leu = lerLinha(&cmd, arg);
if (!leu) {
estado.looping = false;
} else {
bool executado = executarComando(comandos, cmd, arg, &estado);
if (!executado && cmd != '\0') {
fprintf(stderr, "Erro: Comando %c inválido!\n", cmd);
}
}
}
libertarMemoria(&estado);
libertarHistorico(&estado);
return 0;
}Editor is loading...
Leave a Comment