5 /* Se encarga de reemplazar los \0 un caracter visual, y segurar un \0 al final */
6 static char *procesar_registro(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(data[ANT], &size);
31 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
32 data[ACT] = procesar_registro(data[ACT], &size);
34 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
35 data[SIG] = procesar_registro(data[SIG], &size);
37 max_scroll = size / (w/3-2) - (h-4);
38 if (max_scroll < 0) max_scroll = 0;
40 actual[0] = derwin(padre, h-2, w/3, 1, w/3);
42 actual[1] = derwin(actual[0], h-4, w/3-2, 1, 1);
44 ant[0] = derwin(padre, h-2, w/3, 1, 0);
45 ant[1] = derwin(ant[0], h-4, w/3-2, 1, 1);
47 sig[0] = derwin(padre, h-2, w/3, 1, w/3*2);
48 sig[1] = derwin(sig[0], h-4, w/3-2, 1, 1);
51 wattron(actual[1], A_BOLD);
52 mvwaddstr(actual[1], 0, 0, data[ACT]);
53 wattroff(actual[1], A_BOLD);
55 mvwaddstr(sig[1], 0, 0, data[SIG]);
56 mvwaddstr(ant[1], 0, 0, data[ANT]);
64 while ((c=getch()) != 13) {
68 if (scroll < 0) scroll = 0;
72 if (scroll > max_scroll) scroll = max_scroll;
73 case 'k': /* Desplano los registros a derecha! */
74 if (ant_indice != EMUFS_NOT_FOUND) {
75 if (data[ANT]) free(data[ANT]);
76 if (data[ACT]) free(data[ACT]);
77 if (data[SIG]) free(data[SIG]);
80 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
81 data[ANT] = procesar_registro(data[ANT], &size);
82 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
83 data[ACT] = procesar_registro(data[ACT], &size);
84 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
85 data[SIG] = procesar_registro(data[SIG], &size);
88 case 'l': /* Desplazo los registros a izquieda!! */
89 if (ant_indice+1 < total_indice-1) {
90 if (data[ANT]) free(data[ANT]);
91 if (data[ACT]) free(data[ACT]);
92 if (data[SIG]) free(data[SIG]);
95 data[ANT] = (char *)fp->leer_registro(fp, ant_indice, &size, &error);
96 data[ANT] = procesar_registro(data[ANT], &size);
97 data[ACT] = (char *)fp->leer_registro(fp, ant_indice+1, &size, &error);
98 data[ACT] = procesar_registro(data[ACT], &size);
99 data[SIG] = (char *)fp->leer_registro(fp, ant_indice+2, &size, &error);
100 data[SIG] = procesar_registro(data[SIG], &size);
103 /* Borro las ventanas */
108 /* Imprimo los registros */
109 wattron(actual[1], A_BOLD);
110 if (data[ACT]) mvwaddstr(actual[1], 0, 0, data[ACT]+actual_ancho*scroll);
111 wattroff(actual[1], A_BOLD);
112 if (data[SIG]) mvwaddstr(sig[1], 0, 0, data[SIG]);
113 if (data[ANT]) mvwaddstr(ant[1], 0, 0, data[ANT]);
115 /* Refrescos para todos!! */
135 static char *procesar_registro(char *ptr, EMUFS_REG_SIZE *size)
137 char *tmp, *salida, *tmp1;
138 if (ptr == NULL) return NULL;
139 salida = (char *)malloc((*size)-sizeof(unsigned int)+11);
140 sprintf(salida, "(%08d)", *((unsigned int *)ptr));
142 tmp = ptr+sizeof(unsigned int);
143 while (tmp < (ptr + (*size))) {
154 (*size) = (*size)-sizeof(unsigned int)+11;