6 /* Se encarga de reemplazar los \0 un caracter visual, y segurar un \0 al final */
7 static char *procesar_registro_articulo(char *ptr, EMUFS_REG_SIZE *size);
13 void ver_registros(WINDOW *padre, int w, int h)
15 /* Ventanas donde mostrar las cosas */
16 WINDOW *actual[2], *ant[2], *sig[2];
18 int scroll, actual_ancho;
20 EMUFS_REG_ID ant_indice, total_indice; /* Indice de registro que tengo en ANT */
21 char *data[3]; /* Registros a mostrar en pantalla */
22 char codigo[50]; /* Variable para guardar el codigo actual para mandar a modificar */
25 fp = emufs_abrir("articulos");
27 total_indice = emufs_idx_get_count(fp);
30 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
31 data[ANT] = procesar_registro_articulo(data[ANT], &size);
33 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
34 data[ACT] = procesar_registro_articulo(data[ACT], &size);
36 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
37 data[SIG] = procesar_registro_articulo(data[SIG], &size);
39 max_scroll = size / (w/3-2) - (h-7);
40 if (max_scroll < 0) max_scroll = 0;
42 actual[0] = derwin(padre, h-5, w/3, 1, w/3);
44 actual[1] = derwin(actual[0], h-7, w/3-2, 1, 1);
46 ant[0] = derwin(padre, h-5, w/3, 1, 0);
47 ant[1] = derwin(ant[0], h-7, w/3-2, 1, 1);
49 sig[0] = derwin(padre, h-5, w/3, 1, w/3*2);
50 sig[1] = derwin(sig[0], h-7, w/3-2, 1, 1);
54 /* Pongo algunos titulos */
55 mvwaddstr(actual[0], 0, w/6-3, "Actual");
56 mvwaddstr(ant[0], 0, w/6-4, "Anterior");
57 mvwaddstr(sig[0], 0, w/6-4, "Siguiente");
60 wattron(padre, A_BOLD);
61 wattron(padre, COLOR_PAIR(COLOR_RED));
62 mvwaddstr(padre, h-4, 5, "Teclas :");
63 wattroff(padre, A_BOLD);
64 wattroff(padre, COLOR_PAIR(COLOR_RED));
65 mvwaddstr(padre, h-3, 8, "Salir = ENTER");
66 mvwaddstr(padre, h-2, 8, "Scroll = A/Z");
67 mvwaddstr(padre, h-1, 8, "Mover registros = K/L");
70 wattron(padre, A_BOLD);
71 wattron(padre, COLOR_PAIR(COLOR_RED));
72 mvwaddstr(padre, h-4, 35, "Leyenda :");
73 wattroff(padre, A_BOLD);
74 wattroff(padre, COLOR_PAIR(COLOR_RED));
75 mvwaddstr(padre, h-3, 38, "| = Separador de campos");
76 mvwaddstr(padre, h-2, 38, "(XXX) = Campo numerico");
77 mvwaddstr(padre, h-1, 38, "* = Relleno en registros fijos");
80 wattron(actual[1], A_BOLD);
81 mvwaddstr(actual[1], 0, 0, data[ACT]);
82 wattroff(actual[1], A_BOLD);
84 mvwaddstr(sig[1], 0, 0, data[SIG]);
85 mvwaddstr(ant[1], 0, 0, data[ANT]);
89 while ((c=getch()) != 13) {
91 case 'e': /* Quiero editar !!! */
92 sprintf(codigo, "%lu", ant_indice+1);
93 fprintf(stderr, "%s", codigo);
94 art_modificar(codigo);
95 /* Tengo que re-pintar algunas cosas */
99 mvwaddstr(actual[0], 0, w/6-3, "Actual");
100 mvwaddstr(ant[0], 0, w/6-4, "Anterior");
101 mvwaddstr(sig[0], 0, w/6-4, "Siguiente");
106 case 'a': /* Scroll */
108 if (scroll < 0) scroll = 0;
110 case 'z': /* Scroll */
112 if (scroll > max_scroll) scroll = max_scroll;
113 case 'k': /* Desplano los registros a derecha! */
114 if (ant_indice != EMUFS_NOT_FOUND) {
115 if (data[ANT]) free(data[ANT]);
116 if (data[ACT]) free(data[ACT]);
117 if (data[SIG]) free(data[SIG]);
120 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
121 data[ANT] = procesar_registro_articulo(data[ANT], &size);
122 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
123 data[ACT] = procesar_registro_articulo(data[ACT], &size);
124 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
125 data[SIG] = procesar_registro_articulo(data[SIG], &size);
128 case 'l': /* Desplazo los registros a izquieda!! */
129 if (ant_indice+1 < total_indice-1) {
130 if (data[ANT]) free(data[ANT]);
131 if (data[ACT]) free(data[ACT]);
132 if (data[SIG]) free(data[SIG]);
135 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
136 data[ANT] = procesar_registro_articulo(data[ANT], &size);
137 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
138 data[ACT] = procesar_registro_articulo(data[ACT], &size);
139 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
140 data[SIG] = procesar_registro_articulo(data[SIG], &size);
143 /* Borro las ventanas */
148 /* Imprimo los registros */
149 wattron(actual[1], A_BOLD);
150 if (data[ACT]) mvwaddstr(actual[1], 0, 0, data[ACT]+actual_ancho*scroll);
151 wattroff(actual[1], A_BOLD);
152 if (data[SIG]) mvwaddstr(sig[1], 0, 0, data[SIG]);
153 if (data[ANT]) mvwaddstr(ant[1], 0, 0, data[ANT]);
170 static char *procesar_registro_articulo(char *ptr, EMUFS_REG_SIZE *size)
172 char *tmp, *salida, *tmp1;
173 if (ptr == NULL) return NULL;
174 salida = (char *)malloc((*size)-sizeof(unsigned int)+11);
175 sprintf(salida, "(%08d)", *((unsigned int *)ptr));
177 tmp = ptr+sizeof(unsigned int);
178 while (tmp < (ptr + (*size))) {
189 (*size) = (*size)-sizeof(unsigned int)+11;