]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* metodo para eliminar nodos.
authorRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 12 Apr 2004 14:02:48 +0000 (14:02 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 12 Apr 2004 14:02:48 +0000 (14:02 +0000)
emufs_gui/articulos.c
emufs_gui/facturas.c

index 5662bc7cdc20d95439b0645e909ab617fce8eb5c..51f2b1b17fbefb45ea9c0fb3b99e8b30282a07c0 100644 (file)
@@ -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;
index 3c699decf14c96000f2ec15774cd99f4a67b40c5..f6f2e7cfdfb9f10f3a8c72deed10fc2e59728632 100644 (file)
@@ -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));