]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs_gui/tree_viewer.c
New test, borrado de B+ parece andar un 10, me falta agitar la raiz de un nivel 2...
[z.facultad/75.06/emufs.git] / emufs_gui / tree_viewer.c
1
2 #include "tree_viewer.h"
3
4 int emufs_indice_b_ver(INDICE *idx, WINDOW *win, int w, int h, int id)
5 {
6         int y=0;
7         B_NodoHeader header;
8         B_NodoEntry *claves;
9         t_Form *form;
10         char *nodo;
11         char tmp[100];
12         int i;
13         int posibles_proximos[100];
14         int proximo;
15
16         if (id == -1) return 0;
17
18         memset(posibles_proximos, -1, sizeof(int)*100);
19         do {
20                 y = 0;
21                 mvwaddstr(win, y++, 0, "Nombre : ");
22                 waddstr(win, idx->nombre);
23         
24                 /* Muestro la raiz */
25                 nodo = b_leer_nodo(idx, id);
26                 b_leer_header(nodo, &header);
27                 claves = b_leer_claves(nodo, &header);
28         
29                 mvwaddstr(win, y++, 0, "Nodo Nro ");
30                 sprintf(tmp, "%d", id);
31                 waddstr(win, tmp);
32                 mvwaddstr(win, y++, 0, "Nivel =  ");
33                 sprintf(tmp, "%d", header.nivel);
34                 waddstr(win, tmp);
35                 mvwaddstr(win, y++, 0, "Cantidad de hijo = ");
36                 sprintf(tmp, "%d", header.cant);
37                 waddstr(win, tmp);
38                 mvwaddstr(win, y++, 0, "Padre = ");
39                 sprintf(tmp, "%d", header.padre);
40                 waddstr(win, tmp);
41         
42                 /* Muestro las claves */
43                 mvwaddstr(win, y++, 0, "Claves");
44                 wmove(win, y, 0);
45                 sprintf(tmp, "%d", header.hijo_izquierdo);
46                 waddstr(win, tmp);
47                 for(i=0; i<header.cant; i++) {
48                         sprintf(tmp, "(%d)%d",
49                                         claves[i].clave.i_clave,
50         /*                              claves[i].dato.id,
51                                         claves[i].dato.bloque,*/
52                                         claves[i].hijo_derecho
53                         );
54                         posibles_proximos[i] = claves[i].hijo_derecho;
55                         waddstr(win, tmp);
56                 }
57                 posibles_proximos[i++] = header.hijo_izquierdo;
58                 free(nodo);
59                 wrefresh(win);
60         
61                 form = form_crear(win);
62                 form_agregar_widget(form, INPUT, "Ver (-1 para volver)", 4, "");
63                 form_ejecutar(form, 0, h-2);
64                 proximo = form_obtener_valor_int(form, "Ver (-1 para volver)");
65
66                 /* Verifico que proximo sea un hijo */
67                 /* +1 por el hijo izquierdo */
68                 if (proximo != -1) {
69                         for(i=0; i<header.cant+1; i++) {
70                                 if (posibles_proximos[i] == proximo) break;
71                         }
72
73                         if (i>=(header.cant+1)) proximo = id; /* Si no es un nodo valido, lo anulo*/
74                 }
75
76                 /* Solo voy a otro nodo si no soy el mismo */
77                 if (proximo != id) {
78                         werase(win);
79                         wrefresh(win);
80                         emufs_indice_b_ver(idx, win, w, h, proximo);
81                 }
82         } while (proximo != -1);
83
84         werase(win);
85         wrefresh(win);
86         return 0;
87 }
88