]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs_gui/tree_viewer.c
7f83b26a74092bf009a1f386048e379f19a4da4a
[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[1000];
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                 fprintf(stderr, "CANT DE CLAVES = %d\n", header.cant);
48                 for(i=0; i<header.cant; i++) {
49                         sprintf(tmp, "(%d)%d",
50                                         claves[i].clave.i_clave,
51         /*                              claves[i].dato.id,
52                                         claves[i].dato.bloque,*/
53                                         claves[i].hijo_derecho
54                         );
55                         posibles_proximos[i] = claves[i].hijo_derecho;
56                         waddstr(win, tmp);
57                 }
58                 posibles_proximos[i++] = header.hijo_izquierdo;
59                 free(nodo);
60                 wrefresh(win);
61         
62                 form = form_crear(win);
63                 form_agregar_widget(form, INPUT, "Ver (-1 para volver)", 4, "");
64                 form_ejecutar(form, 0, h-2);
65                 proximo = form_obtener_valor_int(form, "Ver (-1 para volver)");
66
67                 /* Verifico que proximo sea un hijo */
68                 /* +1 por el hijo izquierdo */
69                 if (proximo != -1) {
70                         for(i=0; i<header.cant+1; i++) {
71                                 if (posibles_proximos[i] == proximo) break;
72                         }
73
74                         if (i>=(header.cant+1)) proximo = id; /* Si no es un nodo valido, lo anulo*/
75                 }
76
77                 /* Solo voy a otro nodo si no soy el mismo */
78                 if (proximo != id) {
79                         werase(win);
80                         wrefresh(win);
81                         emufs_indice_b_ver(idx, win, w, h, proximo);
82                 }
83         } while (proximo != -1);
84
85         werase(win);
86         wrefresh(win);
87         return 0;
88 }
89