]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - gui/articulos.c
hice un par de funciones, tendria que empezar a probarlo porque van empezar a saltar...
[z.facultad/75.06/emufs.git] / gui / articulos.c
1
2 #include "articulos.h"
3
4 t_LstArticulos *art_cargar(const char *filename)
5 {
6         xmlDocPtr document;
7         xmlNode *node;
8         int cant;
9         t_LstArticulos *tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos));
10         if (tmp == NULL) return NULL;
11
12         document = xmlParseFile(filename);
13         if (document == NULL) {
14                 free(tmp);
15                 return NULL;
16         }
17
18         node = xmlDocGetRootElement(document);
19         while (node) {
20                 if (node->type == XML_ELEMENT_NODE) {
21                         if (strcmp(node->name, "ARTICULOS") == 0) {
22                                 node = node->children;
23                                 break;
24                         }
25                 }
26                 node = node->next;
27         }
28
29         /* Cuento la cantidad de articulos en el archivo */
30         cant = 0;
31         for ( ; node ; node = node->next) {
32                 if (node->type == XML_ELEMENT_NODE) {
33                         if (strcmp(node->name, "ARTICULO") == 0) {
34                                 ++cant;
35                         }
36                 }       
37         }
38         tmp->cant = cant;
39         tmp->array = (t_Articulo *)malloc(sizeof(t_Articulo)*cant);
40
41         if (tmp->array == NULL) {
42                 xmlFreeDoc(document);
43                 xmlCleanupParser();
44                 free(tmp);
45                 return NULL;
46         }
47
48         node = xmlDocGetRootElement(document);
49         while (node) {
50                 if (node->type == XML_ELEMENT_NODE) {
51                         if (strcmp(node->name, "ARTICULOS") == 0) {
52                                 node = node->children;
53                                 break;
54                         }
55                 }
56                 node = node->next;
57         }
58
59         /* leo los datos */
60         cant = 0;
61         for ( ; node ; node = node->next) {
62                 if (node->type == XML_ELEMENT_NODE) {
63                         if (strcmp(node->name, "ARTICULO") == 0) {
64                                 strncpy(tmp->array[cant].numero, xmlGetProp(node, "NroArticulo"), 8);
65                                 strncpy(tmp->array[cant].desc, xmlGetProp(node, "Descripcion"), 50);
66                                 strncpy(tmp->array[cant].presentacion, xmlGetProp(node, "Presentacion"), 30);
67                                 strncpy(tmp->array[cant].existencia, xmlGetProp(node, "Existencia"), 8);
68 //                              strncpy(tmp->array[cant].ubicacion, xmlGetProp(node, "Ubicacion"), 30);
69                                 strncpy(tmp->array[cant].pvu, xmlGetProp(node, "PVU"), 8);
70                                 strncpy(tmp->array[cant].emin, xmlGetProp(node, "Emin"), 8);
71                                 ++cant;
72                         }
73                 }
74         }
75         xmlFreeDoc(document);
76         xmlCleanupParser();
77
78         return tmp;
79 }
80
81 int art_liberar(t_LstArticulos *l)
82 {
83         if (l == NULL) return 1;
84
85         free(l->array);
86         free(l);
87
88         return 0;
89 }
90
91 t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero)
92 {
93         int i, j;
94         int n = atoi(numero);
95         for(i=0; i<lst->cant; i++) {
96                 j = atoi(lst->array[i].numero);
97                 if (n == j)
98                         return &lst->array[i];
99         }
100
101         return NULL;
102 }
103