void menu_estadisticas();
void menu_ver_registros();
void menu_ver_bloques();
+void menu_ver_indices();
void preguntar_nuevo_tipo(const char *title, int *tipo, int *tam_bloque, int *tam_reg);
char *preguntar_file();
}
}
-int main_menu()
+void ver_indice(int arch, char *indice)
{
- int c, w, h;
+ INDICE *idx;
+ int w, h;
WINDOW *win;
+ switch (arch) {
+ case 0:
+ idx = emufs_buscar_indice_por_nombre(art_get_lst()->fp, indice);
+ break;
+ case 1:
+ idx = emufs_buscar_indice_por_nombre(fact_get_lst()->fp, indice);
+ }
+ h = LINES-4;
+ w = COLS-2;
+ win = newwin(h, w, 2, 1);
+
+ if ((idx != NULL) && (idx->tipo != IND_B_PLUS)) {
+ emufs_indice_b_ver(idx, win, w, h, 0);
+ } else {
+ if (idx != NULL) {
+ WINDOW *dlg;
+ dlg = msg_box(win, w, h, "El tipo de arbol B+ no esta soportado en el visor");
+ getch();
+ msg_box_free(win, dlg);
+ }
+ }
+ delwin(win);
+}
+
+void menu_ver_indices()
+{
+ int arch[8] = {0, 0, 0, 1, 1, 1, 1, 1};
+ char *nombres[8] = {"codigo", "desc", "presentacion",
+ "numero", "emision", "vto", "cheque", "ctacte"};
+ MENU(mi_menu) {
+ MENU_OPCION("Articulos->codigo",""),
+ MENU_OPCION("Articulos->desc",""),
+ MENU_OPCION("Articulos->presentacion",""),
+ MENU_OPCION("Facturas->numero",""),
+ MENU_OPCION("Facturas->emision",""),
+ MENU_OPCION("Facturas->vto",""),
+ MENU_OPCION("Facturas->cheque", ""),
+ MENU_OPCION("Facturas->ctacte", ""),
+ MENU_OPCION("Volver", "Volver al menu anterior.")
+ };
+ int c;
+
+ while ((c=menu_ejecutar(mi_menu, 9, "Menu Principal"))!=8) {
+ ver_indice(arch[c], nombres[c]);
+ }
+}
+
+int main_menu()
+{
+ int c;
MENU(mi_menu) {
MENU_OPCION("Articulos","Alta,baja,consulta y modificacion de articulos."),
MENU_OPCION("Facturas","Alta,baja,consulta y modificacion de facturas."),
MENU_OPCION("Ver Bloques","Ver bloques (en su contexto) de los archivos."),
MENU_OPCION("Estadisticas","Ver estadisticas de ocupacion de archivos."),
MENU_OPCION("Mantenimiento","Tareas de mantenimiento de los archivos."),
- MENU_OPCION("DEBUG", "Debug de Arbol B"),
+ MENU_OPCION("Ver Indices", "Permite ver y recorrer los indices"),
MENU_OPCION("Salir", "Salir del sistema.")
};
menu_mantenimiento();
break;
case 6:
- h = LINES-2;
- w = COLS-2;
- win = newwin(h, w, 1, 1);
- emufs_indice_b_ver(fact_get_lst()->fp->indices, win, w, h, 0);
- delwin(win);
+ menu_ver_indices();
}
}
#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)
{
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,
- /* 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);
}