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-8);
40 if (max_scroll < 0) max_scroll = 0;
42 actual[0] = derwin(padre, h-6, w/3, 1, w/3);
44 actual[1] = derwin(actual[0], h-8, w/3-2, 1, 1);
46 ant[0] = derwin(padre, h-6, w/3, 1, 0);
47 ant[1] = derwin(ant[0], h-8, w/3-2, 1, 1);
49 sig[0] = derwin(padre, h-6, w/3, 1, w/3*2);
50 sig[1] = derwin(sig[0], h-8, 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-5, 5, "Teclas :");
63 wattroff(padre, A_BOLD);
64 wattroff(padre, COLOR_PAIR(COLOR_RED));
65 mvwaddstr(padre, h-4, 8, "Salir = ENTER");
66 mvwaddstr(padre, h-3, 8, "Scroll = A/Z");
67 mvwaddstr(padre, h-2, 8, "Mover registros = K/L");
68 mvwaddstr(padre, h-1, 8, "Editar Actual = e");
71 wattron(padre, A_BOLD);
72 wattron(padre, COLOR_PAIR(COLOR_RED));
73 mvwaddstr(padre, h-5, 35, "Leyenda :");
74 wattroff(padre, A_BOLD);
75 wattroff(padre, COLOR_PAIR(COLOR_RED));
76 mvwaddstr(padre, h-4, 38, "| = Separador de campos");
77 mvwaddstr(padre, h-3, 38, "(XXX) = Campo numerico");
78 mvwaddstr(padre, h-2, 38, "* = Relleno en registros fijos");
81 wattron(actual[1], A_BOLD);
82 mvwaddstr(actual[1], 0, 0, data[ACT]);
83 wattroff(actual[1], A_BOLD);
85 mvwaddstr(sig[1], 0, 0, data[SIG]);
86 mvwaddstr(ant[1], 0, 0, data[ANT]);
90 while ((c=getch()) != 13) {
92 case 'e': /* Quiero editar !!! */
93 sprintf(codigo, "%lu", ant_indice+1);
94 art_modificar(codigo);
95 /* Vuelvo a cargar el articulo actual */
97 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
98 data[ACT] = procesar_registro_articulo(data[ACT], &size);
100 /* Tengo que re-pintar algunas cosas */
101 box(actual[0], 0, 0);
104 mvwaddstr(actual[0], 0, w/6-3, "Actual");
105 mvwaddstr(ant[0], 0, w/6-4, "Anterior");
106 mvwaddstr(sig[0], 0, w/6-4, "Siguiente");
111 case 'a': /* Scroll */
113 if (scroll < 0) scroll = 0;
115 case 'z': /* Scroll */
117 if (scroll > max_scroll) scroll = max_scroll;
118 case 'k': /* Desplano los registros a derecha! */
119 if (ant_indice != EMUFS_NOT_FOUND) {
120 if (data[ANT]) free(data[ANT]);
121 if (data[ACT]) free(data[ACT]);
122 if (data[SIG]) free(data[SIG]);
125 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
126 data[ANT] = procesar_registro_articulo(data[ANT], &size);
127 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
128 data[ACT] = procesar_registro_articulo(data[ACT], &size);
129 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
130 data[SIG] = procesar_registro_articulo(data[SIG], &size);
133 case 'l': /* Desplazo los registros a izquieda!! */
134 if (ant_indice+1 < total_indice-1) {
135 if (data[ANT]) free(data[ANT]);
136 if (data[ACT]) free(data[ACT]);
137 if (data[SIG]) free(data[SIG]);
140 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
141 data[ANT] = procesar_registro_articulo(data[ANT], &size);
142 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
143 data[ACT] = procesar_registro_articulo(data[ACT], &size);
144 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
145 data[SIG] = procesar_registro_articulo(data[SIG], &size);
148 /* Borro las ventanas */
153 /* Imprimo los registros */
154 wattron(actual[1], A_BOLD);
155 if (data[ACT]) mvwaddstr(actual[1], 0, 0, data[ACT]+actual_ancho*scroll);
156 wattroff(actual[1], A_BOLD);
157 if (data[SIG]) mvwaddstr(sig[1], 0, 0, data[SIG]);
158 if (data[ANT]) mvwaddstr(ant[1], 0, 0, data[ANT]);
175 static char *procesar_registro_articulo(char *ptr, EMUFS_REG_SIZE *size)
177 char *tmp, *salida, *tmp1;
178 if (ptr == NULL) return NULL;
179 salida = (char *)malloc((*size)-sizeof(unsigned int)+11);
180 sprintf(salida, "(%08d)", *((unsigned int *)ptr));
182 tmp = ptr+sizeof(unsigned int);
183 while (tmp < (ptr + (*size))) {
194 (*size) = (*size)-sizeof(unsigned int)+11;