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
#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)
{
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;
}
int n = atoi(numero);
if (lst == NULL) lst = lst_articulos;
+ if (lst == NULL) return NULL;
for(i=0; i<lst->cant; 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;
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 */
+}
+
#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;
/* 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;
--- /dev/null
+
+#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; i<CANT_FACTURAS*0.1; i++) {
+ /* Entre 10 y 15 ITEMS! */
+ fact.numero = numero;
+ sprintf(fact.emision, "200404%02d", al_azar(1, 30));
+ sprintf(fact.vencimiento, "200406%02d", al_azar(1, 30));
+ fact.numero_remito = numero; /* QUE PONGO? */
+ strcpy(fact.estado, estados[al_azar(0, 5)]);
+ strcpy(fact.fp, fps[al_azar(0, 2)]); /* FIXME : esto y estado se relacionan */
+ fact.procdoi = 0; /* TODO : relacionar con el estado */
+ sprintf(fact.ctacte, "%05d", al_azar(11111, 99999));
+ sprintf(fact.cheque, "%04d-%03d-%05d-%03d", al_azar(1, 9999), al_azar(1,999),al_azar(1,99999),al_azar(1,999));
+ fact.nota = NULL;
+
+ /* Guardo */
+ save = procesar_guardar_factura(&fact, lst_facturas, &size);
+ if (save != NULL) {
+ lst_facturas->fp->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;
+}
+
--- /dev/null
+
+#ifndef _FACTURAS_H_
+#define _FACTURAS_H_
+
+#include "emufs.h"
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+
+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
+
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));
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));
+++ /dev/null
-/***************************************************************************
- * 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 <stdlib.h>
-#include <string.h>
-#include <time.h>
-/* 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;
- }
-}
+++ /dev/null
-/***************************************************************************
- * 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 <stdio.h>
-
-/* 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
-