]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Se agrega el draft sobre la estructura del programa.
authorLeandro Lucarella <llucax@gmail.com>
Fri, 26 Mar 2004 14:46:34 +0000 (14:46 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Fri, 26 Mar 2004 14:46:34 +0000 (14:46 +0000)
doc/draft.txt [new file with mode: 0644]

diff --git a/doc/draft.txt b/doc/draft.txt
new file mode 100644 (file)
index 0000000..66a503d
--- /dev/null
@@ -0,0 +1,58 @@
+! 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.
+