5 /* Se encarga de reemplazar los \0 un caracter visual, y segurar un \0 al final */
6 static char *procesar_registro_articulo(char *ptr, EMUFS_REG_SIZE *size);
12 void ver_registros(WINDOW *padre, int w, int h)
14 /* Ventanas donde mostrar las cosas */
15 WINDOW *actual[2], *ant[2], *sig[2];
17 int scroll, actual_ancho;
19 EMUFS_REG_ID ant_indice, total_indice; /* Indice de registro que tengo en ANT */
23 fp = emufs_abrir("articulos");
25 total_indice = emufs_idx_get_count(fp);
28 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
29 data[ANT] = procesar_registro_articulo(data[ANT], &size);
31 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
32 data[ACT] = procesar_registro_articulo(data[ACT], &size);
34 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
35 data[SIG] = procesar_registro_articulo(data[SIG], &size);
37 max_scroll = size / (w/3-2) - (h-7);
38 if (max_scroll < 0) max_scroll = 0;
40 actual[0] = derwin(padre, h-5, w/3, 1, w/3);
42 actual[1] = derwin(actual[0], h-7, w/3-2, 1, 1);
44 ant[0] = derwin(padre, h-5, w/3, 1, 0);
45 ant[1] = derwin(ant[0], h-7, w/3-2, 1, 1);
47 sig[0] = derwin(padre, h-5, w/3, 1, w/3*2);
48 sig[1] = derwin(sig[0], h-7, w/3-2, 1, 1);
52 /* Pongo algunos titulos */
53 mvwaddstr(actual[0], 0, w/6-3, "Actual");
54 mvwaddstr(ant[0], 0, w/6-4, "Anterior");
55 mvwaddstr(sig[0], 0, w/6-4, "Siguiente");
58 wattron(padre, A_BOLD);
59 wattron(padre, COLOR_PAIR(COLOR_RED));
60 mvwaddstr(padre, h-4, 5, "Teclas :");
61 wattroff(padre, A_BOLD);
62 wattroff(padre, COLOR_PAIR(COLOR_RED));
63 mvwaddstr(padre, h-3, 8, "Salir = ENTER");
64 mvwaddstr(padre, h-2, 8, "Scroll = A/Z");
65 mvwaddstr(padre, h-1, 8, "Mover registros = K/L");
68 wattron(padre, A_BOLD);
69 wattron(padre, COLOR_PAIR(COLOR_RED));
70 mvwaddstr(padre, h-4, 35, "Leyenda :");
71 wattroff(padre, A_BOLD);
72 wattroff(padre, COLOR_PAIR(COLOR_RED));
73 mvwaddstr(padre, h-3, 38, "| = Separador de campos");
74 mvwaddstr(padre, h-2, 38, "(XXX) = Campo numerico");
75 mvwaddstr(padre, h-1, 38, "* = Relleno en registros fijos");
78 wattron(actual[1], A_BOLD);
79 mvwaddstr(actual[1], 0, 0, data[ACT]);
80 wattroff(actual[1], A_BOLD);
82 mvwaddstr(sig[1], 0, 0, data[SIG]);
83 mvwaddstr(ant[1], 0, 0, data[ANT]);
87 while ((c=getch()) != 13) {
91 if (scroll < 0) scroll = 0;
95 if (scroll > max_scroll) scroll = max_scroll;
96 case 'k': /* Desplano los registros a derecha! */
97 if (ant_indice != EMUFS_NOT_FOUND) {
98 if (data[ANT]) free(data[ANT]);
99 if (data[ACT]) free(data[ACT]);
100 if (data[SIG]) free(data[SIG]);
103 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
104 data[ANT] = procesar_registro_articulo(data[ANT], &size);
105 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
106 data[ACT] = procesar_registro_articulo(data[ACT], &size);
107 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
108 data[SIG] = procesar_registro_articulo(data[SIG], &size);
111 case 'l': /* Desplazo los registros a izquieda!! */
112 if (ant_indice+1 < total_indice-1) {
113 if (data[ANT]) free(data[ANT]);
114 if (data[ACT]) free(data[ACT]);
115 if (data[SIG]) free(data[SIG]);
118 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
119 data[ANT] = procesar_registro_articulo(data[ANT], &size);
120 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
121 data[ACT] = procesar_registro_articulo(data[ACT], &size);
122 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
123 data[SIG] = procesar_registro_articulo(data[SIG], &size);
126 /* Borro las ventanas */
131 /* Imprimo los registros */
132 wattron(actual[1], A_BOLD);
133 if (data[ACT]) mvwaddstr(actual[1], 0, 0, data[ACT]+actual_ancho*scroll);
134 wattroff(actual[1], A_BOLD);
135 if (data[SIG]) mvwaddstr(sig[1], 0, 0, data[SIG]);
136 if (data[ANT]) mvwaddstr(ant[1], 0, 0, data[ANT]);
153 static char *procesar_registro_articulo(char *ptr, EMUFS_REG_SIZE *size)
155 char *tmp, *salida, *tmp1;
156 if (ptr == NULL) return NULL;
157 salida = (char *)malloc((*size)-sizeof(unsigned int)+11);
158 sprintf(salida, "(%08d)", *((unsigned int *)ptr));
160 tmp = ptr+sizeof(unsigned int);
161 while (tmp < (ptr + (*size))) {
172 (*size) = (*size)-sizeof(unsigned int)+11;