X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/3a8f34126fd2b8cf8b2ae8822a800aa62003625d..450e1ee2b85d6de278eb8cc38d7797c6055294c4:/emufs_gui/articulos.c?ds=sidebyside diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index f6f4fed..db32b74 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -10,78 +10,78 @@ t_LstArticulos *art_cargar(const char *filename) xmlDocPtr document; xmlNode *node, *inicio; int cant; + t_LstArticulos *tmp; lst_articulos = NULL; - - document = xmlReadFile(filename, "ISO-8859-1",0); - if (document == NULL) { - return NULL; - } - - inicio = NULL; - node = xmlDocGetRootElement(document); - /* Busco el TAG principal "ARTICULOS" */ - while (node) { - if (node->type == XML_ELEMENT_NODE) { - if (strcmp(node->name, "ARTICULOS") == 0) { - inicio = node->children; - break; - } - } - node = node->next; - } - - /* Cuento la cantidad de articulos en el archivo */ - cant = 0; - for ( ; node ; node = node->next) { - if (node->type == XML_ELEMENT_NODE) { - if (strcmp(node->name, "ARTICULO") == 0) { - ++cant; - } - } - } - t_LstArticulos *tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos)); - printf("%p\n", tmp); + tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos)); if (tmp == NULL) return NULL; - tmp->cant = cant; -/* tmp->array = (t_Reg_Articulo *)malloc(sizeof(t_Reg_Articulo)*tmp->cant);*/ + tmp->cant = 0; + /* tmp->array = (t_Reg_Articulo *)malloc(sizeof(t_Reg_Articulo)*tmp->cant);*/ printf("%p\n", tmp->array); if (tmp->array == NULL) { printf("Fallo malloc\n"); - xmlFreeDoc(document); - xmlCleanupParser(); free(tmp); return NULL; } - /* leo los datos y los guardo en el archivo*/ - cant = 0; - /* FIXME : por ahora hago que entren 2 bloques y me sobre algo de espacio*/ - tmp->fp = emufs_crear("articulos", T3, sizeof(t_Articulo)*2, sizeof(t_Articulo)); - for (node=inicio ; node ; node = node->next) { - if (node->type == XML_ELEMENT_NODE) { - if (strcmp(node->name, "ARTICULO") == 0) { - t_Articulo art; - art.numero = atoi(xmlGetProp(node, "NroArtículo")); - strncpy(art.desc, xmlGetProp(node, "Descripción"), 50); - strncpy(art.presentacion, xmlGetProp(node, "Presentación"), 30); - strncpy(art.existencia, xmlGetProp(node, "Existencia"), 8); - /*strncpy(tmp->array[cant].ubicacion, xmlGetProp(node, "Ubicacion"), 30);*/ - strncpy(art.pvu, xmlGetProp(node, "PVU"), 8); - strncpy(art.emin, xmlGetProp(node, "Emín"), 8); + if (filename != NULL) { + document = xmlReadFile(filename, "ISO-8859-1",0); + if (document == NULL) { + return NULL; + } - /* Ya leido el articulo ahora paso a guardarlo en el archivo y agregarlo a la lista */ - tmp->array[cant].num_reg = tmp->fp->grabar_registro(tmp->fp, &art, sizeof(t_Articulo)); - tmp->array[cant].numero = art.numero; - ++cant; + inicio = NULL; + node = xmlDocGetRootElement(document); + /* Busco el TAG principal "ARTICULOS" */ + while (node) { + if (node->type == XML_ELEMENT_NODE) { + if (strcmp(node->name, "ARTICULOS") == 0) { + inicio = node->children; + break; + } } + node = node->next; } + + /* Cuento la cantidad de articulos en el archivo */ + cant = 0; + for ( ; node ; node = node->next) { + if (node->type == XML_ELEMENT_NODE) { + if (strcmp(node->name, "ARTICULO") == 0) { + ++cant; + } + } + } + + /* leo los datos y los guardo en el archivo*/ + cant = 0; + /* FIXME : por ahora hago que entren 2 bloques y me sobre algo de espacio*/ + tmp->fp = emufs_crear("articulos", T3, sizeof(t_Articulo)*2, sizeof(t_Articulo)); + for (node=inicio ; node ; node = node->next) { + if (node->type == XML_ELEMENT_NODE) { + if (strcmp(node->name, "ARTICULO") == 0) { + t_Articulo art; + art.numero = atoi(xmlGetProp(node, "NroArtículo")); + strncpy(art.desc, xmlGetProp(node, "Descripción"), 50); + strncpy(art.presentacion, xmlGetProp(node, "Presentación"), 30); + strncpy(art.existencia, xmlGetProp(node, "Existencia"), 8); + /*strncpy(tmp->array[cant].ubicacion, xmlGetProp(node, "Ubicacion"), 30);*/ + strncpy(art.pvu, xmlGetProp(node, "PVU"), 8); + strncpy(art.emin, xmlGetProp(node, "Emín"), 8); + /* Ya leido el articulo ahora paso a guardarlo en el archivo y agregarlo a la lista */ + tmp->array[cant].num_reg = tmp->fp->grabar_registro(tmp->fp, &art, sizeof(t_Articulo)); + tmp->array[cant].numero = art.numero; + ++cant; + } + } + } + tmp->cant = cant; + xmlFreeDoc(document); + xmlCleanupParser(); + } else { + tmp->fp = emufs_abrir("articulos"); } - tmp->cant = cant; - printf("%d\n", cant); - xmlFreeDoc(document); - xmlCleanupParser(); lst_articulos = tmp; return tmp; @@ -114,7 +114,7 @@ t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero) if (n == lst->array[i].numero) { art = (t_Articulo *)malloc(sizeof(t_Articulo)); /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */ - lst->fp->leer_registro(lst->fp, lst->array[i].num_reg, art, sizeof(t_Articulo)); + lst->fp->leer_registro(lst->fp, lst->array[i].num_reg, art); return art; } }