1 /* vim: set et sts=4 sw=4 fdm=indent fdl=1 fdn=0 fo+=t tw=80:
3 * Taller de Programación (75.42).
6 * Programa calculadora.
8 * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9 * Puede copiar, modificar y distribuir este programa bajo los términos de
10 * la licencia GPL (http://www.gnu.org/).
12 * Creado: lun sep 15 00:02:35 ART 2003
17 #include "parseerror.h"
22 #include "memdebug_debugger.h"
24 ParseError* ParseError_new(void) {
25 ParseError* pe = malloc(sizeof(ParseError));
34 void ParseError_delete(ParseError* pe) {
41 bool ParseError_set_message(ParseError* pe, const char* msg) {
42 /* Si había otro mensaje, liberamos la memoria */
46 /* Aloco nueva memoria. */
47 pe->message = malloc(sizeof(char) * (strlen(msg) + 1));
49 strcpy(pe->message, msg);
51 return pe->message ? TRUE : FALSE;
54 bool ParseError_set_pos_message(ParseError* pe, const char* msg, size_t pos,
56 /* Pongo la posición */
58 /* Si había otro mensaje, liberamos la memoria */
62 /* Aloco nueva memoria. */
65 + sizeof(char) * strlen(msg) /* Tamaño del mensaje */
66 + sizeof(", pero se encontró '")
67 + sizeof(char) /* un char para imprimir el caracter encontrado */
69 + sizeof(char) * 2 /* dos char para poner el numero */
71 + sizeof(char) /* un char para el caracter nulo (fin de string) */
74 /* Copio el nuevo mensaje. */
75 sprintf(pe->message, "Se buscaba %s pero se encontró '%c' (0x%02X)",
76 msg, wrong_char, wrong_char);
78 return pe->message ? TRUE : FALSE;
81 size_t ParseError_print(ParseError* pe, FILE* fp) {
82 /* No es un error de interpretación específico. */
86 return fprintf(fp, "Error: %s.\n", pe->message);
87 /* Si no hay mensaje. */
89 return fprintf(fp, "Error no especificado.\n");
91 /* Es un error de interpretación en una posición específica. */
95 return fprintf(fp, "Error en la línea %u, posición %u: %s.\n",
96 pe->line, pe->pos, pe->message);
97 /* Si no hay mensaje. */
100 "Error en la línea %u, posición %u no especificado.\n",