63 lines
1.9 KiB
C
63 lines
1.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
|
|
#include "messages.h"
|
|
|
|
// Mensagens de uso e ajuda
|
|
const char *MSG_USAGE =
|
|
"Here Document (hdoc) 0.1\n\n"
|
|
"Uso: %s [OPÇÕES] ARQUIVO\n\n"
|
|
"Sem OPÇÕES, cria um novo ARQUIVO para receber linhas\n"
|
|
"digitadas no terminal.\n\n"
|
|
"OPÇÕES:\n"
|
|
" -o Força abertura de ARQUIVO para sobrescrevê-lo.\n"
|
|
" -a Força abertura de ARQUIVO para append.\n"
|
|
" -h Exibe esta ajuda.\n\n";
|
|
|
|
const char *MSG_EOF_HINT = "Tecle Ctrl+D para terminar...";
|
|
const char *MSG_PROMPT = "> ";
|
|
|
|
// Mensagens de erro
|
|
const char *MSG_ARGC_ERROR = "Número incorreto de argumentos!\n\n";
|
|
const char *MSG_FILE_EXISTS = "Arquivo já existe!\n\n";
|
|
const char *MSG_INVALID_ARG = "Argumento inválido!\n\n";
|
|
const char *MSG_INVALID_FMT = "Argumento inválido (%s)!\n\n";
|
|
const char *MSG_INCORRECT_ALL = "Argumentos incorretos!\n\n";
|
|
const char *MSG_FOPEN_ERROR = "Erro na abertura do arquivo!\n\n";
|
|
|
|
// Estilo ANSI: negrito + amarelo
|
|
#define STYLE_ERROR "\033[1;33m"
|
|
#define STYLE_RESET "\033[0m"
|
|
|
|
// Retorna sucesso se stderr estiver ligada ao terminal.
|
|
int is_tty_stderr() {
|
|
return isatty(fileno(stderr));
|
|
}
|
|
|
|
// Imprime mensagens de erro sem argumentos.
|
|
void print_error(const char *msg) {
|
|
if (is_tty_stderr())
|
|
fprintf(stderr, STYLE_ERROR "%s" STYLE_RESET, msg);
|
|
else
|
|
fprintf(stderr, "%s", msg);
|
|
}
|
|
|
|
// Imprime mensagens de erro com argumentos.
|
|
void print_error_fmt(const char *fmt, const char *arg) {
|
|
if (is_tty_stderr()) {
|
|
fprintf(stderr, "%s", STYLE_ERROR);
|
|
fprintf(stderr, fmt, arg);
|
|
fprintf(stderr, "%s", STYLE_RESET);
|
|
} else {
|
|
fprintf(stderr, fmt, arg);
|
|
}
|
|
}
|
|
|
|
// Imprime versão e ajuda e retorna status.
|
|
int print_usage(int status, char *prog_name) {
|
|
FILE *stream = stderr;
|
|
if (status == EXIT_SUCCESS) stream = stdout;
|
|
fprintf(stream, MSG_USAGE, prog_name);
|
|
return status;
|
|
}
|