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 01:10:28 ART 2003
22 #include "memdebug_debugger.h"
24 Variable* Variable_new(const char* line, size_t var_start, size_t var_len) {
25 Variable* var = malloc(sizeof(Variable));
27 /* Copio el fragmento de la variable. */
28 var->variable = strutil_copy_fragment(line, var_start, var_len);
29 /* Si no hay más memoria, libero el resto y devuelvo NULL. */
34 var->have_min = FALSE;
35 var->have_max = FALSE;
40 void Variable_delete(Variable* var) {
47 /* simplifico el manejo de errores, false si hubo error. */
48 bool Variable_set_value(Variable* var, const char* line, size_t start,
51 char* str = strutil_copy_fragment(line, start, len);
55 var->value = strtod(str, &err);
56 /* Si el caracter donde apunta error no es 0 es porque hay error. */
58 /* Libero memoria reservada. */
66 /* simplifico el manejo de errores, false si hubo error. */
67 bool Variable_set_min(Variable* var, const char* line, size_t start,
70 char* str = strutil_copy_fragment(line, start, len);
74 var->min = strtod(str, &err);
75 /* Si el caracter donde apunta error no es 0 es porque hay error. */
77 /* Libero memoria reservada. */
86 /* simplifico el manejo de errores, false si hubo error. */
87 bool Variable_set_max(Variable* var, const char* line, size_t start,
90 char* str = strutil_copy_fragment(line, start, len);
94 var->max = strtod(str, &err);
95 /* Si el caracter donde apunta error no es 0 es porque hay error. */
97 /* Libero memoria reservada. */
102 var->have_max = TRUE;
106 /* simplifico el manejo de errores, false si hubo error. */
107 bool Variable_check_min_max(Variable* var) {
108 return !var->have_min
110 || (var->min <= var->max);
113 size_t Variable_print(Variable* var, FILE* fp) {
115 cant += fprintf(fp, "%s = %f", var->variable, var->value);
116 if (var->have_min || var->have_max) {
117 cant += fprintf(fp, " (");
120 cant += fprintf(fp, "min = %f", var->min);
122 if (var->have_min && var->have_max) {
123 cant += fprintf(fp, ", ");
126 cant += fprintf(fp, "max = %f", var->max);
128 if (var->have_min || var->have_max) {
129 cant += fprintf(fp, ")");
131 cant += fprintf(fp, "\n");