From d1aba415c74a504ffcd56a77878d24661db1f98c Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Sun, 11 Apr 2004 00:24:37 +0000 Subject: [PATCH] * Empiezo con las Facturas en la GUI --- emufs_gui/Makefile | 2 +- emufs_gui/articulos.c | 37 +++++++++---- emufs_gui/articulos.h | 15 +----- emufs_gui/facturas.c | 96 +++++++++++++++++++++++++++++++++ emufs_gui/facturas.h | 40 ++++++++++++++ emufs_gui/gui.c | 16 +++--- emufs_gui/malloc_debug.c | 114 --------------------------------------- emufs_gui/malloc_debug.h | 40 -------------- 8 files changed, 172 insertions(+), 188 deletions(-) create mode 100644 emufs_gui/facturas.c create mode 100644 emufs_gui/facturas.h delete mode 100644 emufs_gui/malloc_debug.c delete mode 100644 emufs_gui/malloc_debug.h diff --git a/emufs_gui/Makefile b/emufs_gui/Makefile index 450599d..25606db 100644 --- a/emufs_gui/Makefile +++ b/emufs_gui/Makefile @@ -3,7 +3,7 @@ LDFLAGS= -lmenu -lncurses -lxml2 all: gui -gui: form.c gui.c malloc_debug.c articulos.c ../emufs/libemufs.a +gui: form.c gui.c articulos.c facturas.c ../emufs/libemufs.a clean: @rm -vf *.o gui diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index ca82c02..f816fc5 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -1,9 +1,11 @@ #include "articulos.h" -t_LstArticulos *lst_articulos; +static t_LstArticulos *lst_articulos; -t_Articulo *art_form_buscar(WINDOW *win); +static t_Articulo *art_form_buscar(WINDOW *win); + +static int procesar_articulo(t_Articulo *dst, void *src, int size, t_LstArticulos *lst); t_LstArticulos *art_cargar(const char *filename) { @@ -17,10 +19,8 @@ t_LstArticulos *art_cargar(const char *filename) if (tmp == NULL) return NULL; 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"); free(tmp); return NULL; } @@ -111,20 +111,18 @@ t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero) int n = atoi(numero); if (lst == NULL) lst = lst_articulos; + if (lst == NULL) return NULL; for(i=0; icant; i++) { 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 */ tmp = lst->fp->leer_registro(lst->fp, lst->array[i].num_reg, &size); - if (tmp == NULL) { - return NULL; - } - if (size == sizeof(t_Articulo)) { - memcpy(art, tmp, sizeof(t_Articulo)); - } else { + + if (procesar_articulo(art, tmp, size, lst_articulos) != 1) { free(art); - art = NULL; + free(tmp); + return NULL; } free(tmp); return art; @@ -253,3 +251,20 @@ void art_agregar(char *s) delwin(win); } +int procesar_articulo(t_Articulo *dst, void *src, int size, t_LstArticulos *lst) +{ + switch (lst->fp->tipo) { + case T1: + case T2: + /* TODO : Leer campos variales */ + break; + case T3: + if (size != sizeof(t_Articulo)) { + return 0; /* El tamaño no encaja!! */ + } + memcpy(dst, src, size); + } + + return 1; /* Todo ok */ +} + diff --git a/emufs_gui/articulos.h b/emufs_gui/articulos.h index da3a3d5..3800f49 100644 --- a/emufs_gui/articulos.h +++ b/emufs_gui/articulos.h @@ -9,19 +9,6 @@ #include "form.h" #include "emufs.h" -/* FACTURAS!! - char numero[9]; - char emision[9]; - char vencimiento[9]; - char numero_remito[9]; - char estado[3]; - char fp[3]; - char procdoi[6]; - char ctacte[6]; - char cheque[19]; - char *nota; -*/ - /* Tipo de dato articulo */ typedef struct _articulo_ { unsigned int numero; @@ -35,7 +22,7 @@ typedef struct _articulo_ { /* tipo de dato registro de articulo */ typedef struct _reg_articulo_ { - unsigned int num_reg; /* numero de registro en el archivo */ + EMUFS_REG_ID num_reg; /* numero de registro en el archivo */ unsigned int numero; /* codigo de articulo */ } t_Reg_Articulo; diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c new file mode 100644 index 0000000..fbf1b25 --- /dev/null +++ b/emufs_gui/facturas.c @@ -0,0 +1,96 @@ + +#include "facturas.h" + +static t_LstFacturas *lst_facturas; +static int al_azar(int min, int max); + +/* Procesa una factura antes de enviarla al archivo para guardarla */ +static void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size); + +/* es por cada mes a generar */ +#define CANT_FACTURAS 500 + +t_LstFacturas *fact_cargar(const char *filename) +{ + int i, numero, size; + char *estados[6] = {"PN", "CD", "CM", "CF", "PM", "NC"}; + char *fps[6] = {"CO", "CR", "CH"}; + void *save; + t_Factura fact; + + if (filename == NULL) { + /* Genero las facturas en forma automática */ + /* Genero las facturas de fecha Abril 2004 */ + srand(time(NULL)); + numero = 0; + for(i=0; ifp->grabar_registro(lst_facturas->fp, save, size); + } + } + } else { + /* Cargo un archivo existente */ + } + + return lst_facturas; +} + +int al_azar(int min, int max) +{ + return (min + rand()%(max-min)); +} + +void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size) +{ + char *tmp=NULL; + int i[9]; + + switch (lst->fp->tipo) { + case T1: + case T2: + /* Calculo el tamaño que voy a necesitar */ + i[0] = sizeof(int); + i[1] = sizeof(char)*(strlen(f->emision)+1); /* +1 por el \0 para separar */ + i[2] = sizeof(char)*(strlen(f->vencimiento)+1); /* +1 por el \0 para separar */ + i[3] = sizeof(int); + i[4] = sizeof(char)*(strlen(f->estado)+1); /* +1 por el \0 para separar */ + i[5] = sizeof(char)*(strlen(f->fp)+1); /* +1 por el \0 para separar */ + i[6] = sizeof(float); + i[7] = sizeof(char)*(strlen(f->ctacte)+1); /* +1 por el \0 para separar */ + i[8] = sizeof(char)*(strlen(f->cheque)+1); /* +1 por el \0 para separar */ + tmp = (char *)malloc(i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]); + if (tmp == NULL) return NULL; + /* Ahora copio la info */ + memcpy(tmp, &f->numero, i[0]); + memcpy(tmp+i[0], f->emision, i[1]); + memcpy(tmp+i[0]+i[1], f->vencimiento, i[2]); + memcpy(tmp+i[0]+i[1]+i[2], &f->numero_remito, i[3]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3], f->estado, i[4]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4], f->fp, i[5]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5], &f->procdoi, i[6]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6], f->ctacte, i[7]); + memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7], f->cheque, i[8]); + break; + case T3: + tmp = (char *)malloc(sizeof(t_Factura)); + if (tmp == NULL) return NULL; + memcpy(tmp, f, sizeof(t_Factura)); + (*size) = sizeof(t_Factura); + } + return tmp; +} + diff --git a/emufs_gui/facturas.h b/emufs_gui/facturas.h new file mode 100644 index 0000000..d8108b0 --- /dev/null +++ b/emufs_gui/facturas.h @@ -0,0 +1,40 @@ + +#ifndef _FACTURAS_H_ +#define _FACTURAS_H_ + +#include "emufs.h" +#include +#include +#include +#include + +typedef struct _facturas_ { + int numero; + char emision[9]; + char vencimiento[9]; + int numero_remito; + char estado[3]; + char fp[3]; + float procdoi; + char ctacte[6]; + char cheque[19]; + char *nota; +} t_Factura; + +typedef struct _reg_factura_ { + EMUFS_REG_ID num_reg; /* numero de registro en el archivo */ + EMUFS_REG_ID texto_reg; /* numero de registro donde se encuentra el texto */ + unsigned int numero; /* codigo de factura */ +} t_Reg_Factura; + +typedef struct _lista_facturas_ { + t_Reg_Factura array[100]; + unsigned int cant; + EMUFS *fp; /* Filepointer al archivo donde estan los datos */ + EMUFS *fp_texto; /* Filepointer al archivo donde estan los textos */ +} t_LstFacturas; + +t_LstFacturas *fact_cargar(const char *filename); + +#endif + diff --git a/emufs_gui/gui.c b/emufs_gui/gui.c index 88130d5..bc2bacf 100644 --- a/emufs_gui/gui.c +++ b/emufs_gui/gui.c @@ -118,16 +118,16 @@ void menu_articulos() items[4] = NULL; menu = new_menu((ITEM **)items); - menu_win = newwin(8, 68, 3, 1); + menu_win = newwin(8, COLS-2, 3, 1); keypad(menu_win, TRUE); set_menu_mark(menu, " > "); set_menu_win(menu, menu_win); - set_menu_sub(menu, derwin(menu_win, 5, 66, 3, 1)); + set_menu_sub(menu, derwin(menu_win, 5, COLS-4, 3, 1)); box(menu_win, 0, 0); mvwaddch(menu_win, 2, 0, ACS_LTEE); - mvwhline(menu_win, 2, 1, ACS_HLINE, 67); - mvwaddch(menu_win, 2, 67, ACS_RTEE); + mvwhline(menu_win, 2, 1, ACS_HLINE, COLS-3); + mvwaddch(menu_win, 2, COLS-3, ACS_RTEE); wattron(menu_win, COLOR_PAIR(COLOR_RED)); mvwaddstr(menu_win, 1, 1, "Menu Articulos"); wattroff(menu_win, COLOR_PAIR(COLOR_RED)); @@ -204,16 +204,16 @@ int main_menu() items[5] = NULL; menu = new_menu((ITEM **)items); - menu_win = newwin(9, 68, 3, 1); + menu_win = newwin(9, COLS-2, 3, 1); keypad(menu_win, TRUE); set_menu_mark(menu, " > "); set_menu_win(menu, menu_win); - set_menu_sub(menu, derwin(menu_win, 6, 66, 3, 1)); + set_menu_sub(menu, derwin(menu_win, 6, COLS-4, 3, 1)); box(menu_win, 0, 0); mvwaddch(menu_win, 2, 0, ACS_LTEE); - mvwhline(menu_win, 2, 1, ACS_HLINE, 67); - mvwaddch(menu_win, 2, 67, ACS_RTEE); + mvwhline(menu_win, 2, 1, ACS_HLINE, COLS-3); + mvwaddch(menu_win, 2, COLS-3, ACS_RTEE); wattron(menu_win, COLOR_PAIR(COLOR_RED)); mvwaddstr(menu_win, 1, 1, "Menu Principal"); wattroff(menu_win, COLOR_PAIR(COLOR_RED)); diff --git a/emufs_gui/malloc_debug.c b/emufs_gui/malloc_debug.c deleted file mode 100644 index cd2a35a..0000000 --- a/emufs_gui/malloc_debug.c +++ /dev/null @@ -1,114 +0,0 @@ -/*************************************************************************** - * malloc_debug.c - * - * Sat Aug 30 17:00:48 2003 - * Copyright 2003 Ricardo Markiewicz - * rmarkie@fi.uba.ar - ****************************************************************************/ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -/* este debe ser el ultimo include, para evitar errores de compilacion */ -#include "malloc_debug.h" - -/* Tengo que sacar los macros dentro de malloc_debug para evitar problemas */ -#undef malloc -#undef free - -typedef struct _t_malloc_ { - void *ptr; - int size; - char file[21]; - int line; - time_t hora; - struct _t_malloc_ *next; -} t_MDAlloc; - -static t_MDAlloc *lstMalloc = NULL; - -void *MD_malloc(int size, int line, char *file) -{ - void *ptr; - t_MDAlloc *nodo; - - ptr = malloc(size); - if (ptr == NULL) { - /* No registro nada porque no hay memoria! */ - return NULL; - } - - nodo = (t_MDAlloc *)malloc(sizeof(t_MDAlloc)); - if (nodo == NULL) { - free(ptr); - return NULL; - } - nodo->ptr = ptr; - nodo->size = size; - nodo->line = line; - nodo->hora = time(NULL); - strncpy(nodo->file, file, 20); - - /* Agrego el nodo al principio */ - nodo->next = lstMalloc; - lstMalloc = nodo; - - return ptr; -} - -void MD_free(void *ptr) -{ - /* Tengo que buscar el nodo alocado */ - t_MDAlloc *node, *padre; - node = lstMalloc; - padre = NULL; - while (node != NULL) { - if (node->ptr == ptr) { - /* lo encontre! */ - if (padre != NULL) { - padre->next = node->next; - } else { - lstMalloc = node->next; - } - free(node); - break; - } - padre = node; - node = node->next; - } - free(ptr); -} - -void MD_Listar() -{ - struct tm *hora; - t_MDAlloc *nodo; - nodo = lstMalloc; - printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------"); - printf("|Direccion | Tamaño | %-20s | Linea | Fecha | Hora |\n", "Archivo"); - printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------"); - while (nodo != NULL) { - hora = localtime(&nodo->hora); - printf("|%p | % 6d | %-20s | % 7d | %02d/%02d | %02d:%02d:%02d |\n", \ - nodo->ptr, nodo->size, nodo->file, nodo->line, hora->tm_mday, hora->tm_mon, \ - hora->tm_hour, hora->tm_min, hora->tm_sec); - printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------"); - free(hora); - nodo = nodo->next; - } -} diff --git a/emufs_gui/malloc_debug.h b/emufs_gui/malloc_debug.h deleted file mode 100644 index 00ba43f..0000000 --- a/emufs_gui/malloc_debug.h +++ /dev/null @@ -1,40 +0,0 @@ -/*************************************************************************** - * malloc_debug.h - * - * Sat Aug 30 16:55:51 2003 - * Copyright 2003 Ricardo Markiewicz - * rmarkie@fi.uba.ar - ****************************************************************************/ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* Si ya esta definido malloc y/o free, lo dehabilito */ - -#include - -/* Macro para emular la funcion malloc y free */ -#define malloc(x) MD_malloc(x, __LINE__, __FILE__) -#define free(x) MD_free(x) - -#ifndef _MALLOC_DEBUG_H -#define _MALLOC_DEBUG_H 1 - -void *MD_malloc(int size, int line, char *file); -void MD_free(void *); -void MD_Listar(); - -#endif - -- 2.43.0