5 !! Estructura general del programa
7 El proyecto está separado en 4 partes:
8 * una por cada tipo de archivo a manejar.
12 !! Esquema para los archivos
14 Para facilitar el manejo de los archivos desde la interfaz utilizamos
15 orientación a objetos en C, utilizando punteros a funciones.
17 La estructura principal básica es así:
20 enum { T1, T2, T3 } tipo; /* Corregir nombres */
21 unsigned long tam_bloque; /* 0 si no tiene bloques */
22 int (*leer_bloque)(int ID, void *, unsigned long tam);
23 int (*leer_registro)(int ID, void *, unsigned long tam);
24 int (*grabar_registro)(int ID, void *, unsigned long tam);
28 luego hay 3 funciones generales:
30 /* Abre, determina el tipo de archivo y retorna todo bonito */
31 EMUFS *efs_open(const char *archivo);
33 /* cierra (libera memoria) */
34 int efs_close(EMUFS *);
36 /* Crea un nuevo archivo de un tipo dado */
37 EMUFS *efs_create(const char *nombre, int tipo);
40 El uso básico es de la siguiente manera:
43 fd = efs_open("facturas.dat");
44 fd->leer_registro(5, dato, 5);
47 * en los registros variables no se tiene el tamaño a priori, hay que ver
48 si leer_registro lo determina y pide memoria para alocar el dato, o
49 poner una funcion que retorne el tamaño del registro y el usurio deba
50 consultar para pedir memoria.
52 Todos los archivos tienen otras funciones, pero que son internas y no van
53 a estar en la estructura, porque desde la interfaz no deben ser visibles
54 (es decir, deberian ser static en los .c para asegurar esto).
56 Algunas funciones comunes están separadas en módulos que son usados en las
57 implementaciones de cada uno de los archivos.