]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs_gui/registros.c
* Ver Registros muestra el primer registro de articulos en pantalla (con scrol!...
[z.facultad/75.06/emufs.git] / emufs_gui / registros.c
1
2 #include "registros.h"
3
4 /* Se encarga de reemplazar los \0 un caracter visual, y segurar un \0 al final */
5 static char *procesar_registro(char *ptr, size_t size);
6
7 void ver_registros(WINDOW *padre, int w, int h)
8 {
9         /* Ventanas donde mostrar las cosas */
10         WINDOW *actual[2], *ant[2], *sig[2];
11         int c, scroll, actual_ancho;
12         char *data;
13         EMUFS *fp;
14         fp = emufs_abrir("articulos");
15
16         data = (char *)fp->leer_registro(fp, 0, &c, &scroll);
17
18         data = procesar_registro(data, c);
19
20         actual[0] = derwin(padre, h-2, w/3, 1, w/3);
21         actual_ancho = w/3-2;
22         actual[1] = derwin(actual[0], h-4, w/3-2, 1, 1);
23         box(actual[0], 0, 0);
24         ant[0] = derwin(padre, h-2, w/3, 1, 0);
25         box(ant[0], 0, 0);
26         sig[0] = derwin(padre, h-2, w/3, 1, w/3*2);
27         box(sig[0], 0, 0);
28
29         wattron(actual[1], A_BOLD);
30         mvwaddstr(actual[1], 0, 0, data);
31         wattroff(actual[1], A_BOLD);
32         
33         wrefresh(sig[0]);
34         wrefresh(ant[0]);
35         wrefresh(actual[0]);
36         wrefresh(actual[1]);
37         wrefresh(padre);
38         scroll = 0;
39         while ((c=getch()) != 13) {
40                 switch (c) {
41                         case 'a':
42                                 scroll--;
43                                 if (scroll < 0) scroll = 0;
44                         break;
45                         case 'z':
46                                 scroll++;
47                 }
48                 werase(actual[1]);
49                 wattron(actual[1], A_BOLD);
50                 mvwaddstr(actual[1], 0, 0, data+actual_ancho*scroll);
51                 wattroff(actual[1], A_BOLD);
52                 wrefresh(actual[1]);
53                 wrefresh(actual[0]);
54                 wrefresh(padre);
55         }
56         werase(actual[1]);
57         delwin(actual[1]);
58         werase(actual[0]);
59         delwin(actual[0]);
60         werase(sig[0]);
61         delwin(sig[0]);
62         werase(ant[0]);
63         delwin(ant[0]);
64         wrefresh(padre);
65 }
66
67 static char *procesar_registro(char *ptr, size_t size)
68 {
69         char *tmp, *salida, *tmp1;
70         salida = (char *)malloc(size-sizeof(unsigned int)+10+1);
71         sprintf(salida, "(%08d)", *((unsigned int *)ptr));
72         tmp1 = salida+10;
73         tmp = ptr+sizeof(unsigned int);
74         while (tmp < (ptr+size)) {
75                 if (*tmp == '\0') {
76                         (*tmp1) = '|';
77                 } else {
78                         (*tmp1) = (*tmp);
79                 }
80                 tmp++;
81                 tmp1++;
82         }
83         free(ptr);
84         return salida;
85 }
86