From: Ricardo Markiewicz Date: Sat, 17 Apr 2004 17:23:00 +0000 (+0000) Subject: * Agrego programa para generar archivo de articulos. X-Git-Tag: svn_import_r684~426 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/9bbb4b390299cc1c13b735a700d7050e9f6a6ad1?ds=sidebyside * Agrego programa para generar archivo de articulos. - Para hacerlo mas lindo, hay que agregar mas datos en los diccionario ;-) ... marcas.txt : Marcas de productos productos.txt : Nombre de productos presentacion.txt : formas en que pueden venir productos. Agreguen a gusto!!. Tengan en cuenta que la descripcion se arma con un producto y con una marca. No se preocupen por que queden cosas poco logicas como (Yerba mate Coca Cola), porque no importa. * Pongo un XML de 2000 articulos como ejemplo. --- diff --git a/emufs_gui/Makefile b/emufs_gui/Makefile index 278cc09..150c820 100644 --- a/emufs_gui/Makefile +++ b/emufs_gui/Makefile @@ -1,6 +1,8 @@ CFLAGS=-Wall -g -I/usr/include/libxml2 -I../emufs -DDEBUG LDFLAGS= -lmenu -lncurses -lxml2 +SUB_DIRS=genera_art + OBJ=form.o gui.o articulos.o facturas.o registros.o menu.o ../emufs/libemufs.a all: gui diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index 8fcd2ee..593c81e 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -82,6 +82,7 @@ t_LstArticulos *art_cargar(const char *filename, int tipo, int tam_bloque) tmp->primero = NULL; if (filename != NULL) { + PERR("Voy a crear desde un XML"); document = xmlReadFile(filename, "ISO-8859-1",0); if (document == NULL) { free(tmp); @@ -102,6 +103,7 @@ t_LstArticulos *art_cargar(const char *filename, int tipo, int tam_bloque) node = node->next; } + fprintf(stderr, "Creando articulos con bloque = %d\n", tam_bloque); tmp->fp = emufs_crear("articulos", tipo-1, tam_bloque, sizeof(t_Articulo)); for (node=inicio ; node ; node = node->next) { if (node->type == XML_ELEMENT_NODE) { @@ -132,7 +134,14 @@ t_LstArticulos *art_cargar(const char *filename, int tipo, int tam_bloque) xmlFreeDoc(document); xmlCleanupParser(); } else { + PERR("Voy a recuperar desde un archivo"); tmp->fp = emufs_abrir("articulos"); + if (tmp->fp == NULL) { + PERR("No se pudo cargar archivo de articulos."); + free(tmp); + lst_articulos = NULL; + return NULL; + } /* Ahora trato de recuperar la info */ indices = emufs_idx_get(tmp->fp, &indices_cant); for(i=0; i - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 469d97b..2b0a305 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -152,6 +152,7 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque) tmp->primero = NULL; if (filename != NULL) { + PERR("Voy a cargar de un XML"); document = xmlReadFile(filename, "ISO-8859-1",0); if (document == NULL) { free(tmp); @@ -223,8 +224,22 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque) xmlFreeDoc(document); xmlCleanupParser(); } else { + PERR("Voy a recuperar desde un archivo"); tmp->fp = emufs_abrir("facturas"); + if (tmp->fp == NULL) { + PERR("No se pudo cargar archivo de facturas!"); + free(tmp); + lst_facturas = NULL; + return NULL; + } tmp->fp_texto = emufs_abrir("notas"); + if (tmp->fp_texto == NULL) { + PERR("No se pudo cargar archivo de notas!"); + emufs_destruir(tmp->fp); + free(tmp); + lst_facturas = NULL; + return NULL; + } /* Ahora trato de recuperar la info */ indices = emufs_idx_get(tmp->fp, &indices_cant); diff --git a/emufs_gui/genera_art/Makefile b/emufs_gui/genera_art/Makefile new file mode 100644 index 0000000..ac1e177 --- /dev/null +++ b/emufs_gui/genera_art/Makefile @@ -0,0 +1,11 @@ +CFLAGS=-Wall -g -I/usr/include/libxml2 -I../emufs -DDEBUG +LDFLAGS= -lmenu -lncurses -lxml2 + +OBJ= genera_art.o dict.o common.o + +all: genera_art + +genera_art: $(OBJ) + +clean: + @$(RM) -vf *.o gui diff --git a/emufs_gui/genera_art/common.c b/emufs_gui/genera_art/common.c new file mode 100644 index 0000000..3c6a825 --- /dev/null +++ b/emufs_gui/genera_art/common.c @@ -0,0 +1,9 @@ + + +#include "common.h" + +int al_azar(int min, int max) +{ + return (min + rand()%(max-min)); +} + diff --git a/emufs_gui/genera_art/common.h b/emufs_gui/genera_art/common.h new file mode 100644 index 0000000..e0733a9 --- /dev/null +++ b/emufs_gui/genera_art/common.h @@ -0,0 +1,10 @@ + +#ifndef _COMMON_H_ +#define _COMMON_H_ + +#include + +int al_azar(int min, int max); + +#endif + diff --git a/emufs_gui/genera_art/dict.c b/emufs_gui/genera_art/dict.c new file mode 100644 index 0000000..e096c24 --- /dev/null +++ b/emufs_gui/genera_art/dict.c @@ -0,0 +1,70 @@ + +#include "dict.h" + +char *leer_linea(FILE *fp) +{ + char *ret; + char tmp[255]; /* Hack! */ + if (feof(fp)) return NULL; + tmp[0] = '\0'; + fscanf(fp, "%[^\n]", tmp); /* Leo una linea */ + fgetc(fp); /* saco el \n */ + if (strlen(tmp) == 0) return NULL; + ret = malloc(sizeof(char)*(strlen(tmp)+1)); + strcpy(ret, tmp); + return ret; +} + +t_Dict* dict_crear(const char *f) +{ + t_Dict *tmp; + FILE *fp; + unsigned int count = 0; + char *s; + + fp = fopen(f, "rt"); + if (fp == NULL) return NULL; + + tmp = (t_Dict *)malloc(sizeof(t_Dict)); + if (tmp == NULL) return NULL; + tmp->array = NULL; + tmp->total = 0; + + s = (char*)(-1L); + while (s!=NULL) { + s = leer_linea(fp); + if (s != NULL) { + count++; + tmp->array = (char **)realloc(tmp->array, sizeof(char *)*count); + tmp->array[count-1] = s; + } + } + + tmp->total = count; + fclose(fp); + return tmp; +} + +void dict_destruir(t_Dict *d) +{ + int i; + for(i=0; itotal; i++) + free(d->array[i]); + free(d->array); + free(d); +} + +char *dict_get_al_azar(t_Dict *d) +{ + return dict_get(d, al_azar(0, d->total)); +} + +char *dict_get(t_Dict *d, unsigned int pos) +{ + if (pos < d->total) { + return d->array[pos]; + } + + return ""; +} + diff --git a/emufs_gui/genera_art/dict.h b/emufs_gui/genera_art/dict.h new file mode 100644 index 0000000..6cf11d2 --- /dev/null +++ b/emufs_gui/genera_art/dict.h @@ -0,0 +1,22 @@ + +/* Diccionario de datos */ + +#ifndef _DICT_H_ +#define _DICT_H_ +#include +#include +#include + +#include "common.h" + +typedef struct _dict_ { + char **array; + unsigned int total; +} t_Dict; + +t_Dict* dict_crear(const char *f); +void dict_destruir(t_Dict *); +char *dict_get(t_Dict *, unsigned int pos); +char *dict_get_al_azar(t_Dict *); + +#endif diff --git a/emufs_gui/genera_art/genera_art.c b/emufs_gui/genera_art/genera_art.c new file mode 100644 index 0000000..16df70d --- /dev/null +++ b/emufs_gui/genera_art/genera_art.c @@ -0,0 +1,58 @@ + +/* Genera un XML con articulos */ + +#include +#include +#include + +#include "dict.h" +#include "common.h" + +int main(int argc, char *argv[]) +{ + int i, total; + t_Dict *productos; + t_Dict *marcas; + t_Dict *presentacion; + FILE *fp; + + if (argc != 3) { + printf("Modo de uso :\n"); + printf("\t#> %s salida.xml \n", argv[0]); + return 1; + } + + total = atoi(argv[2]); + + fp = fopen(argv[1], "wt"); + if (fp == NULL) { + printf("No se pudo crear %s\n", argv[1]); + return 1; + } + + productos = dict_crear("productos.txt"); + marcas = dict_crear("marcas.txt"); + presentacion = dict_crear("presentacion.txt"); + + srand(time(NULL)); + fprintf(fp, "\n\n"); + fprintf(fp, "\n"); + for(i=0; i\n", al_azar(1, 1000)); + } + fprintf(fp, "\n"); + fclose(fp); + + dict_destruir(productos); + dict_destruir(marcas); + dict_destruir(presentacion); + return 0; +} + + diff --git a/emufs_gui/genera_art/marcas.txt b/emufs_gui/genera_art/marcas.txt new file mode 100644 index 0000000..10ce864 --- /dev/null +++ b/emufs_gui/genera_art/marcas.txt @@ -0,0 +1,12 @@ +Pepsi +Coca Cola +Don Huberto +Cuasimodo Co +Lopez +Balderrobles +El Señor de los Anillos +Matelindo +Esperanza +LM +Lucky +Matrix diff --git a/emufs_gui/genera_art/presentacion.txt b/emufs_gui/genera_art/presentacion.txt new file mode 100644 index 0000000..a8f2a77 --- /dev/null +++ b/emufs_gui/genera_art/presentacion.txt @@ -0,0 +1,7 @@ +Caja de 6 unidades +Paquetes de 1 kg. +Botella de plastico de 1/2 litro +por Kilo +En frascos de vidrio chicos +Con moño +Envuelto para regalo de navidad diff --git a/emufs_gui/genera_art/productos.txt b/emufs_gui/genera_art/productos.txt new file mode 100644 index 0000000..2129b4d --- /dev/null +++ b/emufs_gui/genera_art/productos.txt @@ -0,0 +1,15 @@ +Vino blanco +Vino tinto +Yerba mate +Azucar +Galletitas dulce +Fideos finos +Fideos gruesos +Fideos guiso +Fideos tubo +Fideos remolinos +Caldo de carne +Caldo de verdura +Caldo de pollo +Gaseosa +Cerveza diff --git a/emufs_gui/gui.c b/emufs_gui/gui.c index d7095f7..35ebc98 100644 --- a/emufs_gui/gui.c +++ b/emufs_gui/gui.c @@ -70,6 +70,7 @@ t_Param param_ok(int argc, char *argv[]) return BLOQUE_NO_DEFINIDO; parametros.tipo_arch_art = n; parametros.tam_bloque_art = atoi(argv[i+2]); + fprintf(stderr, "%d\n", parametros.tam_bloque_art); if (parametros.tam_bloque_art <= 0) return NULL_BLOCK_FOUND; parametros.xml_art = i; } else {