2 #include "tree_viewer.h"
5 void sprint_ind(INDICE *idx, char *dst, B_NodoEntry e)
11 switch (idx->tipo_dato) {
13 sprintf(dst, "(%d)%d", e.clave.i_clave, e.hijo_derecho);
16 sprintf(dst, "(%.2f)%d", e.clave.f_clave, e.hijo_derecho);
20 leido = idx->emu_string->leer_registro(idx->emu_string, e.clave, &dummy, &error);
21 sprintf(dst, "(%s)%d", leido, e.hijo_derecho);
26 int emufs_indice_b_ver(INDICE *idx, WINDOW *win, int w, int h, int id)
35 int posibles_proximos[1000];
38 if (id == -1) return 0;
40 memset(posibles_proximos, -1, sizeof(int)*100);
43 mvwaddstr(win, y++, 0, "Nombre : ");
44 waddstr(win, idx->nombre);
47 nodo = b_leer_nodo(idx, id);
48 b_leer_header(nodo, &header);
49 claves = b_leer_claves(nodo, &header);
51 mvwaddstr(win, y++, 0, "Nodo Nro ");
52 sprintf(tmp, "%d", id);
54 mvwaddstr(win, y++, 0, "Nivel = ");
55 sprintf(tmp, "%d", header.nivel);
57 mvwaddstr(win, y++, 0, "Cantidad de hijo = ");
58 sprintf(tmp, "%d", header.cant);
60 mvwaddstr(win, y++, 0, "Padre = ");
61 sprintf(tmp, "%d", header.padre);
64 /* Muestro las claves */
65 mvwaddstr(win, y++, 0, "Claves");
67 sprintf(tmp, "%d", header.hijo_izquierdo);
69 fprintf(stderr, "CANT DE CLAVES = %d\n", header.cant);
70 for(i=0; i<header.cant; i++) {
71 sprint_ind(idx, tmp, claves[i]);
72 posibles_proximos[i] = claves[i].hijo_derecho;
75 posibles_proximos[i++] = header.hijo_izquierdo;
79 form = form_crear(win);
80 form_agregar_widget(form, INPUT, "Ver (-1 para volver)", 4, "");
81 form_ejecutar(form, 0, h-2);
82 proximo = form_obtener_valor_int(form, "Ver (-1 para volver)");
84 /* Verifico que proximo sea un hijo */
85 /* +1 por el hijo izquierdo */
87 for(i=0; i<header.cant+1; i++) {
88 if (posibles_proximos[i] == proximo) break;
91 if (i>=(header.cant+1)) proximo = id; /* Si no es un nodo valido, lo anulo*/
94 /* Solo voy a otro nodo si no soy el mismo */
98 emufs_indice_b_ver(idx, win, w, h, proximo);
100 } while (proximo != -1);