From 49a21a405e9cbf0951ccf112eacce481a6d947a3 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Mon, 12 Apr 2004 14:02:48 +0000 Subject: [PATCH 1/1] * metodo para eliminar nodos. --- emufs_gui/articulos.c | 36 ++++++++++++++++++++++-------------- emufs_gui/facturas.c | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index 5662bc7..51f2b1b 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -12,6 +12,26 @@ static int procesar_leer_articulo(t_Articulo *dst, void *src, EMUFS_REG_SIZE siz /* Manejo de la lista doble */ static t_Reg_Articulo *crear_nodo_articulo(EMUFS_REG_ID reg, unsigned int num); static int agregar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo); +static int eliminar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *nodo); + +int eliminar_nodo_articulo(t_LstArticulos *lst, t_Reg_Articulo *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_Articulo *crear_nodo_articulo(EMUFS_REG_ID reg, unsigned int num) { @@ -241,7 +261,7 @@ void art_eliminar(char *s) { WINDOW *win; t_Articulo *articulo; - t_Reg_Articulo *nodo, *del; + t_Reg_Articulo *nodo; win = newwin(8, COLS-2, 13, 1); box(win, 0, 0); wrefresh(win); @@ -259,19 +279,7 @@ void art_eliminar(char *s) while (nodo) { if (nodo->numero == articulo->numero) { lst_articulos->fp->borrar_registro(lst_articulos->fp, nodo->num_reg); - del = nodo; - if (nodo->ant) { - nodo->ant->sig = nodo->sig; - if (nodo->sig) { - nodo->sig->ant = nodo->ant; - } - } else { - if (nodo->sig) { - nodo->sig->ant = NULL; - } - lst_articulos->primero = nodo->sig; - } - free(del); + eliminar_nodo_articulo(lst_articulos, nodo); break; } nodo = nodo->sig; diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 3c699de..f6f2e7c 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -8,6 +8,26 @@ static int al_azar(int min, int max); 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); +static 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) { @@ -50,6 +70,7 @@ t_LstFacturas *fact_cargar(const char *filename) 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)*20, sizeof(t_Factura)); -- 2.43.0