#include "tree_viewer.h"
+#include "emufs.h"
+
+void sprint_ind(INDICE *idx, char *dst, B_NodoEntry e)
+{
+ int error;
+ char * leido;
+ EMUFS_REG_SIZE dummy;
+
+ switch (idx->tipo_dato) {
+ case IDX_INT:
+ sprintf(dst, "(%d)%d", e.clave.i_clave, e.hijo_derecho);
+ break;
+ case IDX_FLOAT:
+ sprintf(dst, "(%.2f)%d", e.clave.f_clave, e.hijo_derecho);
+ break;
+ case IDX_STRING:
+ error = 0;
+ leido = idx->emu_string->leer_registro(idx->emu_string, e.clave, &dummy, &error);
+ sprintf(dst, "(%s)%d", leido, e.hijo_derecho);
+ free(leido);
+ }
+}
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 : ");
sprintf(tmp, "%d", header.hijo_izquierdo);
waddstr(win, tmp);
for(i=0; i<header.cant; i++) {
- sprintf(tmp, "(%d)%d",
- claves[i].clave.i_clave,
- /* claves[i].dato.id,
- claves[i].dato.bloque,*/
- claves[i].hijo_derecho
- );
+ sprint_ind(idx, tmp, claves[i]);
+ posibles_proximos[i] = claves[i].hijo_derecho;
waddstr(win, tmp);
}
+ posibles_proximos[i++] = header.hijo_izquierdo;
free(nodo);
wrefresh(win);
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;
}