main

 avatar
unknown
plain_text
12 days ago
1.6 kB
3
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