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 fprintf(stderr, "%s", codigo);
95 art_modificar(codigo);
96 /* Vuelvo a cargar el articulo actual */
98 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
99 data[ACT] = procesar_registro_articulo(data[ACT], &size);
101 /* Tengo que re-pintar algunas cosas */
102 box(actual[0], 0, 0);
105 mvwaddstr(actual[0], 0, w/6-3, "Actual");
106 mvwaddstr(ant[0], 0, w/6-4, "Anterior");
107 mvwaddstr(sig[0], 0, w/6-4, "Siguiente");
112 case 'a': /* Scroll */
114 if (scroll < 0) scroll = 0;
116 case 'z': /* Scroll */
118 if (scroll > max_scroll) scroll = max_scroll;
119 case 'k': /* Desplano los registros a derecha! */
120 if (ant_indice != EMUFS_NOT_FOUND) {
121 if (data[ANT]) free(data[ANT]);
122 if (data[ACT]) free(data[ACT]);
123 if (data[SIG]) free(data[SIG]);
126 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
127 data[ANT] = procesar_registro_articulo(data[ANT], &size);
128 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
129 data[ACT] = procesar_registro_articulo(data[ACT], &size);
130 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
131 data[SIG] = procesar_registro_articulo(data[SIG], &size);
134 case 'l': /* Desplazo los registros a izquieda!! */
135 if (ant_indice+1 < total_indice-1) {
136 if (data[ANT]) free(data[ANT]);
137 if (data[ACT]) free(data[ACT]);
138 if (data[SIG]) free(data[SIG]);
141 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
142 data[ANT] = procesar_registro_articulo(data[ANT], &size);
143 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
144 data[ACT] = procesar_registro_articulo(data[ACT], &size);
145 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
146 data[SIG] = procesar_registro_articulo(data[SIG], &size);
149 /* Borro las ventanas */
154 /* Imprimo los registros */
155 wattron(actual[1], A_BOLD);
156 if (data[ACT]) mvwaddstr(actual[1], 0, 0, data[ACT]+actual_ancho*scroll);
157 wattroff(actual[1], A_BOLD);
158 if (data[SIG]) mvwaddstr(sig[1], 0, 0, data[SIG]);
159 if (data[ANT]) mvwaddstr(ant[1], 0, 0, data[ANT]);
176 static char *procesar_registro_articulo(char *ptr, EMUFS_REG_SIZE *size)
178 char *tmp, *salida, *tmp1;
179 if (ptr == NULL) return NULL;
180 salida = (char *)malloc((*size)-sizeof(unsigned int)+11);
181 sprintf(salida, "(%08d)", *((unsigned int *)ptr));
183 tmp = ptr+sizeof(unsigned int);
184 while (tmp < (ptr + (*size))) {
195 (*size) = (*size)-sizeof(unsigned int)+11;