+! 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.
+