X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/66243c7630bd677829a4263930f856fb70a0aa68..c44140901674eea943d44ef522337fae17feb3c1:/emufs_gui/facturas.c?ds=sidebyside diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 6a56a92..0016c9f 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -6,28 +6,80 @@ 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); +static t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, unsigned int num); +static int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo); +int eliminar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo); + +int eliminar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo) +{ + if (nodo == NULL) return 0; + if (nodo->ant == NULL) { + /* Me piden borrar el primer nodo */ + if (nodo->sig) { + nodo->sig->ant = NULL; + } + lst->primero = nodo->sig; + } else { + if (nodo->sig) { + nodo->sig->ant = nodo->ant; + } + nodo->ant->sig = nodo->sig; + } + free(nodo); + return 1; +} + +t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, unsigned int num) +{ + t_Reg_Factura *tmp; + if (reg == EMUFS_NOT_FOUND) return NULL; + tmp = malloc(sizeof(t_Reg_Factura)); + if (tmp == NULL) return NULL; + tmp->sig = tmp->ant = NULL; + tmp->num_reg = reg; + tmp->texto_reg = texto; + tmp->numero = num; + + return tmp; +} + +int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo) +{ + if (nodo == NULL) return 0; + + if (lst->primero) { + lst->primero->ant = nodo; + nodo->sig = lst->primero; + lst->primero = nodo; + } else { + lst->primero = nodo; + } + return 1; +} /* es por cada mes a generar */ -#define CANT_FACTURAS 500 +#define CANT_FACTURAS 1500 t_LstFacturas *fact_cargar(const char *filename) { - int i, numero, size, error, cant; + int i, numero, size, error = 0, cant; char *estados[6] = {"PN", "CD", "CM", "CF", "PM", "NC"}; char *fps[6] = {"CO", "CR", "CH"}; void *save; t_Factura fact; + EMUFS_REG_ID id; lst_facturas = (t_LstFacturas *)malloc(sizeof(t_LstFacturas)); + lst_facturas->primero = NULL; - if (filename == NULL) { - lst_facturas->fp = emufs_crear("facturas", T3, sizeof(t_Factura)*2, sizeof(t_Factura)); + if (filename != NULL) { + lst_facturas->fp = emufs_crear("facturas", T3, sizeof(t_Factura)*20, sizeof(t_Factura)); /* Genero las facturas en forma automática */ /* Genero las facturas de fecha Abril 2004 */ srand(time(NULL)); numero = 0; cant = 0; - for(i=0; iarray[cant].numero = numero; - lst_facturas->array[cant].num_reg = lst_facturas->fp->grabar_registro(lst_facturas->fp, save, size, &error); + id = lst_facturas->fp->grabar_registro(lst_facturas->fp, save, size, &error); + agregar_nodo_factura(lst_facturas, crear_nodo_factura(id, EMUFS_NOT_FOUND, numero)); + free(save); } } - lst_facturas->cant = cant; } else { /* Cargo un archivo existente */ } @@ -55,6 +107,18 @@ t_LstFacturas *fact_cargar(const char *filename) return lst_facturas; } +int fact_liberar(t_LstFacturas *l) +{ + if (l == NULL) l = lst_facturas; + if (l == NULL) return 1; + + emufs_destruir(l->fp); + free(l); + + lst_facturas = NULL; + return 0; +} + int al_azar(int min, int max) { return (min + rand()%(max-min));