From 5b88d390025d7b91d0e0d2c6c63fef166b8d20f1 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Thu, 8 Apr 2004 22:30:45 +0000 Subject: [PATCH] * Agrego libemufs.a en el Makefile * Hago que la GUI use archivos de tipo3 para los articulos NO ANDA :-) ... Me esta grabando cualquiera. Es muy raro. Tengo que revisar. --- emufs/Makefile | 5 +++- emufs_gui/Makefile | 6 ++--- emufs_gui/articulos.c | 57 +++++++++++++++++++++++-------------------- emufs_gui/articulos.h | 14 ++++++++--- emufs_gui/gui.c | 2 ++ 5 files changed, 51 insertions(+), 33 deletions(-) diff --git a/emufs/Makefile b/emufs/Makefile index 051ddbf..aecd1e5 100644 --- a/emufs/Makefile +++ b/emufs/Makefile @@ -3,9 +3,12 @@ LDFLAGS= EMUFS_COMMON=emufs.o idx.o did.o fsc.o -all: tipo3_main +all: tipo3_main libemufs.a tipo3_main: tipo3_main.o tipo3.o $(EMUFS_COMMON) +libemufs.a: tipo3.o $(EMUFS_COMMON) + ar cru libemufs.a tipo3.o $(EMUFS_COMMON) + clean: @rm -fv *.o tipo3_main diff --git a/emufs_gui/Makefile b/emufs_gui/Makefile index b029ac2..450599d 100644 --- a/emufs_gui/Makefile +++ b/emufs_gui/Makefile @@ -1,9 +1,9 @@ -CFLAGS=-Wall -g -I/usr/include/libxml2 -LDFLAGS=-lmenu -lncurses -lxml2 +CFLAGS=-Wall -g -I/usr/include/libxml2 -I../emufs +LDFLAGS= -lmenu -lncurses -lxml2 all: gui -gui: form.c gui.c malloc_debug.c articulos.c +gui: form.c gui.c malloc_debug.c articulos.c ../emufs/libemufs.a clean: @rm -vf *.o gui diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index 8e53638..8d288ce 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -8,8 +8,10 @@ t_Articulo *art_form_buscar(WINDOW *win); t_LstArticulos *art_cargar(const char *filename) { xmlDocPtr document; - xmlNode *node; + xmlNode *node, *inicio; int cant; + t_Articulo art; + t_LstArticulos *tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos)); if (tmp == NULL) return NULL; @@ -19,11 +21,13 @@ t_LstArticulos *art_cargar(const char *filename) 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) { - node = node->children; + inicio = node->children; break; } } @@ -40,7 +44,7 @@ t_LstArticulos *art_cargar(const char *filename) } } tmp->cant = cant; - tmp->array = (t_Articulo *)malloc(sizeof(t_Articulo)*cant); + tmp->array = (t_Reg_Articulo *)malloc(sizeof(t_Reg_Articulo)*cant); if (tmp->array == NULL) { xmlFreeDoc(document); @@ -49,29 +53,24 @@ t_LstArticulos *art_cargar(const char *filename) return NULL; } - node = xmlDocGetRootElement(document); - while (node) { - if (node->type == XML_ELEMENT_NODE) { - if (strcmp(node->name, "ARTICULOS") == 0) { - node = node->children; - break; - } - } - node = node->next; - } - - /* leo los datos */ + /* leo los datos y los guardo en el archivo*/ cant = 0; - for ( ; node ; node = node->next) { + /* FIXME : por ahora hago que entren 2 bloques y me sobre algo de espacio*/ + tmp->fp = emufs_crear("articulos", T3, sizeof(t_Articulo)*2+20, 0); + for (node=inicio ; node ; node = node->next) { if (node->type == XML_ELEMENT_NODE) { if (strcmp(node->name, "ARTICULO") == 0) { - tmp->array[cant].numero = atoi(xmlGetProp(node, "NroArtículo")); - strncpy(tmp->array[cant].desc, xmlGetProp(node, "Descripción"), 50); - strncpy(tmp->array[cant].presentacion, xmlGetProp(node, "Presentación"), 30); - strncpy(tmp->array[cant].existencia, xmlGetProp(node, "Existencia"), 8); + 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(tmp->array[cant].pvu, xmlGetProp(node, "PVU"), 8); - strncpy(tmp->array[cant].emin, xmlGetProp(node, "Emín"), 8); + 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].numero = art.numero; + tmp->array[cant].num_reg = tmp->fp->grabar_registro(tmp->fp, &art, sizeof(t_Articulo)); /* REGISTRO CTE! */ ++cant; } } @@ -88,6 +87,8 @@ int art_liberar(t_LstArticulos *l) if (l == NULL) l = lst_articulos; if (l == NULL) return 1; + ver_archivo_FS(l->fp); + emufs_destruir(l->fp); free(l->array); free(l); @@ -97,15 +98,19 @@ int art_liberar(t_LstArticulos *l) t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero) { - int i, j; + /* FIXME : NO ME GUSTA :-/ */ + static t_Articulo art; + int i; int n = atoi(numero); if (lst == NULL) lst = lst_articulos; for(i=0; icant; i++) { - j = lst->array[i].numero; - if (n == j) - return &lst->array[i]; + if (n == lst->array[i].numero) { + /* 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)); + return &art; + } } return NULL; diff --git a/emufs_gui/articulos.h b/emufs_gui/articulos.h index 2957c3b..5ac8ce0 100644 --- a/emufs_gui/articulos.h +++ b/emufs_gui/articulos.h @@ -8,6 +8,7 @@ #include #include "malloc_debug.h" #include "form.h" +#include "emufs.h" /* FACTURAS!! char numero[9]; @@ -22,9 +23,9 @@ char *nota; */ +/* Tipo de dato articulo */ typedef struct _articulo_ { - unsigned int idREG; /* Registro Fisico donde esta guardado */ - int numero; + unsigned int numero; char desc[51]; char presentacion[31]; char existencia[9]; @@ -33,9 +34,16 @@ typedef struct _articulo_ { char emin[9]; } t_Articulo; +/* tipo de dato registro de articulo */ +typedef struct _reg_articulo_ { + unsigned int num_reg; /* numero de registro en el archivo */ + unsigned int numero; /* codigo de articulo */ +} t_Reg_Articulo; + typedef struct _lista_articulos_ { - t_Articulo *array; + t_Reg_Articulo *array; unsigned int cant; + EMUFS *fp; /* Filepointer al archivo donde estan los datos */ } t_LstArticulos; t_LstArticulos *art_cargar(const char *filename); diff --git a/emufs_gui/gui.c b/emufs_gui/gui.c index 19daa73..22475cd 100644 --- a/emufs_gui/gui.c +++ b/emufs_gui/gui.c @@ -8,6 +8,7 @@ #include "form.h" #include "articulos.h" +#include "emufs.h" #define CTRLD 4 @@ -83,6 +84,7 @@ int main(int argc, char *argv[]) art_liberar(NULL); + MD_Listar(); return 0; } -- 2.43.0