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
21 #include "memdebug_debugger.h"
24 * Copia un fragmento de una cadena devolviendo el puntero a la copia.
26 * \param str Cadena de caracteres original.
27 * \param start Comienzo del fragmento a copiar.
28 * \param len Longitud del fragmento a copiar.
30 * \return Fragmento copiado.
32 char* Equation_copy_fragment(const char* str, size_t start, size_t len) {
33 /* Reservo el espacio (incluyendo el caracter nulo). */
34 char* new = malloc(sizeof(char) * (len + 1));
36 /* Copio el fragmento. */
37 strncpy(new, str + start, len);
38 /* Termino la cadena. */
40 /* Si no pude reservar la memoria, devuelvo NULL. */
45 Equation* Equation_new(const char* line, size_t var_start, size_t var_len,
46 size_t exp_start, size_t exp_len) {
47 Equation* eq = malloc(sizeof(Equation));
49 /* Copio el fragmento de la variable. */
50 eq->variable = Equation_copy_fragment(line, var_start, var_len);
51 /* Si no hay más memoria, libero el resto y devuelvo NULL. */
56 /* Copio el fragmento de la ecuación. */
57 eq->expression = Equation_copy_fragment(line, exp_start, exp_len);
58 /* Si no hay más memoria, libero el resto y devuelvo NULL. */
59 if (!eq->expression) {
68 void Equation_delete(Equation* eq) {
76 size_t Equation_print(Equation* eq, FILE* fp) {
77 return fprintf(fp, "%s = %s\n", eq->variable, eq->expression);