hdoc/messages.c
2025-06-19 12:29:07 -03:00

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;
}