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