From afae487b5828cdb06702759dad8354c889723bea Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Sun, 30 May 2004 05:34:03 +0000 Subject: [PATCH 1/1] Recorrer de articulos listo, still buggy, no se si el que jode es el arbol o el buscar siguiente clave. --- emufs_gui/articulos.c | 45 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index 2d49c02..30c7e74 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -1011,7 +1011,7 @@ void imprimir(WINDOW *win, int y, int x, char *s, char *b) waddstr(win, b); } -void mostrar_art(WINDOW *win, CLAVE k, char *s) +void mostrar_art(WINDOW *win, CLAVE k, char *s, INDICE *idx) { t_Articulo *art; EMUFS_REG_ID dummy; @@ -1029,7 +1029,43 @@ void mostrar_art(WINDOW *win, CLAVE k, char *s) wattroff(win, A_BOLD); mvwaddstr(win, 19, 5, " L = Siguiente"); mvwaddstr(win, 20, 5, " K = Anterior"); - art = art_obtener(lst_articulos, k.i_clave, &dummy); + + if (strcmp(s, "codigo") == 0) { + art = art_obtener(lst_articulos, k.i_clave, &dummy); + } else { + INDICE_DATO *datos; + EMUFS_REG_SIZE size; + int cant, error; + char *tmp; + + art = (t_Articulo *)malloc(sizeof(t_Articulo)); + /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */ + PERR("Busco todos los datos que tengan esta clave"); + datos = idx->buscar_entradas(idx, k, &cant); + if (datos == NULL) { + free(art); + art = NULL; + } else { + fprintf(stderr, "Tengo %d datos\n", cant); + error = 1; + k.i_clave = datos[0].id; + PERR("Leo el primer dato"); + tmp = lst_articulos->fp->leer_registro(lst_articulos->fp, k, &size, &error); + if (tmp == NULL) { + free(art); + art = NULL; + } else { + if (procesar_leer_articulo(art, tmp, size, lst_articulos) != 1) { + free(art); + free(tmp); + art = NULL; + } + } + free(datos); + } + } + + if (art != NULL) { sprintf(numero, "%08d", art->numero); @@ -1071,10 +1107,11 @@ void art_recorrer_con_indice(char *s) PERR("Muestro el primer elemento"); - mostrar_art(win1, k, s); + mostrar_art(win1, k, s, idx); wrefresh(win1); PERR("Sigue el usuario"); curs_set(0); + stack[0] = k; while ((c=wgetch(win)) != 13) { switch (c) { case 'L': @@ -1094,7 +1131,7 @@ void art_recorrer_con_indice(char *s) continue; } werase(win1); - mostrar_art(win1, k, s); + mostrar_art(win1, k, s, idx); wrefresh(win1); } curs_set(1); -- 2.43.0