+
+void imprimir(WINDOW *win, int y, int x, char *s, char *b)
+{
+ wmove(win, y, x);
+ waddstr(win, s);
+ waddstr(win, b);
+}
+
+void mostrar_art(WINDOW *win, CLAVE k, char *s)
+{
+ t_Articulo *art;
+ EMUFS_REG_ID dummy;
+ int y = 3;
+ char numero[10];
+ /* XXX SOLO PARA CODIGO XXX */
+
+ wattron(win, COLOR_PAIR(COLOR_RED));
+ mvwaddstr(win, 1, 5, "Recorriendo Articulos por indice ");
+ waddstr(win, s);
+ wattroff(win, COLOR_PAIR(COLOR_RED));
+
+ wattron(win, A_BOLD);
+ mvwaddstr(win, 18, 5, "Teclas:");
+ wattroff(win, A_BOLD);
+ mvwaddstr(win, 19, 5, " L = Siguiente");
+ mvwaddstr(win, 20, 5, " K = Anterior");
+ art = art_obtener(lst_articulos, k.i_clave, &dummy);
+ if (art != NULL) {
+ sprintf(numero, "%08d", art->numero);
+
+ imprimir(win, y++, 5, "Numero : ", numero);
+ imprimir(win, y++, 5, "Descripcion : ", art->desc);
+ imprimir(win, y++, 5, "Presentacion: ", art->presentacion);
+ imprimir(win, y++, 5, "Existencia : ", art->existencia);
+ imprimir(win, y++, 5, "Ubicacion : ", art->ubicacion);
+ imprimir(win, y++, 5, "P. Unitario : ", art->pvu);
+ imprimir(win, y++, 5, "Stock Minimo: ", art->emin);
+
+ free(art);
+ } else {
+ PERR("NO EXISTE EL ARTICULO");
+ }
+
+}
+
+void art_recorrer_con_indice(char *s)
+{
+ WINDOW *win, *win1;
+ INDICE *idx;
+ CLAVE stack[1000]; /* shhhh */
+ CLAVE k;
+ int stack_pos=0, c;
+
+ PERR("Busco indice");
+ idx = emufs_buscar_indice_por_nombre(lst_articulos->fp, s);
+
+ win = newwin(LINES-4, COLS-2, 2, 1);
+ win1 = derwin(win, LINES-6, COLS-4, 1, 1);
+ werase(win);
+ box(win, 0, 0);
+ wrefresh(win);
+
+ PERR("Obtengo clave menor");
+ k = idx->obtener_menor_clave(idx);
+
+ PERR("Muestro el primer elemento");
+
+
+ mostrar_art(win1, k, s);
+ wrefresh(win1);
+ PERR("Sigue el usuario");
+ curs_set(0);
+ while ((c=wgetch(win)) != 13) {
+ switch (c) {
+ case 'L':
+ case 'l':
+ stack[stack_pos++] = k; /* Guardo la clave para poder volver */
+ k = idx->obtener_sig_clave(idx, k);
+ /* TODO Verificar que no me pase del fin */
+ break;
+ case 'K':
+ case 'k':
+ /* recupero la anterior */
+ stack_pos--;
+ if (stack_pos < 0) stack_pos = 0;
+ k = stack[stack_pos];
+ break;
+ default:
+ continue;
+ }
+ werase(win1);
+ mostrar_art(win1, k, s);
+ wrefresh(win1);
+ }
+ curs_set(1);
+
+ werase(win1);
+ werase(win);
+ wrefresh(win);
+ delwin(win);
+}
+
+void art_recorrer()
+{
+ char *ind[3] = {"codigo", "desc", "presentacion"};
+ MENU(mi_menu) {
+ MENU_OPCION("Codigos", "Recorrer por Indice Codigo"),
+ MENU_OPCION("Descripcion", "Recorrer por Indice Descripcionn"),
+ MENU_OPCION("Presentacion", "Recorrer por Indice Presentacion"),
+ MENU_OPCION("Volver", "Volver al menu anterior.")
+ };
+ int opt;
+ while ((opt = menu_ejecutar(mi_menu, 4, "Consulta de Articulos")) != 3) {
+ art_recorrer_con_indice(ind[opt]);
+ }
+}
+