]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/tree_viewer.c
Recorrer de articulos listo, still buggy, no se si el que jode es el arbol
[z.facultad/75.06/emufs.git] / emufs_gui / tree_viewer.c
index 3dc30d520eea93463a4f5ad255be0d5153311cbd..7f83b26a74092bf009a1f386048e379f19a4da4a 100644 (file)
@@ -10,10 +10,12 @@ int emufs_indice_b_ver(INDICE *idx, WINDOW *win, int w, int h, int id)
        char *nodo;
        char tmp[100];
        int i;
+       int posibles_proximos[1000];
        int proximo;
 
        if (id == -1) return 0;
 
+       memset(posibles_proximos, -1, sizeof(int)*100);
        do {
                y = 0;
                mvwaddstr(win, y++, 0, "Nombre : ");
@@ -42,6 +44,7 @@ int emufs_indice_b_ver(INDICE *idx, WINDOW *win, int w, int h, int id)
                wmove(win, y, 0);
                sprintf(tmp, "%d", header.hijo_izquierdo);
                waddstr(win, tmp);
+               fprintf(stderr, "CANT DE CLAVES = %d\n", header.cant);
                for(i=0; i<header.cant; i++) {
                        sprintf(tmp, "(%d)%d",
                                        claves[i].clave.i_clave,
@@ -49,8 +52,10 @@ int emufs_indice_b_ver(INDICE *idx, WINDOW *win, int w, int h, int id)
                                        claves[i].dato.bloque,*/
                                        claves[i].hijo_derecho
                        );
+                       posibles_proximos[i] = claves[i].hijo_derecho;
                        waddstr(win, tmp);
                }
+               posibles_proximos[i++] = header.hijo_izquierdo;
                free(nodo);
                wrefresh(win);
        
@@ -58,12 +63,27 @@ int emufs_indice_b_ver(INDICE *idx, WINDOW *win, int w, int h, int id)
                form_agregar_widget(form, INPUT, "Ver (-1 para volver)", 4, "");
                form_ejecutar(form, 0, h-2);
                proximo = form_obtener_valor_int(form, "Ver (-1 para volver)");
-               werase(win);
-               wrefresh(win);
-               emufs_indice_b_ver(idx, win, w, h, proximo);
+
+               /* Verifico que proximo sea un hijo */
+               /* +1 por el hijo izquierdo */
+               if (proximo != -1) {
+                       for(i=0; i<header.cant+1; i++) {
+                               if (posibles_proximos[i] == proximo) break;
+                       }
+
+                       if (i>=(header.cant+1)) proximo = id; /* Si no es un nodo valido, lo anulo*/
+               }
+
+               /* Solo voy a otro nodo si no soy el mismo */
+               if (proximo != id) {
+                       werase(win);
+                       wrefresh(win);
+                       emufs_indice_b_ver(idx, win, w, h, proximo);
+               }
        } while (proximo != -1);
 
        werase(win);
        wrefresh(win);
+       return 0;
 }