X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/064dc9896dce3d936a5876b927cece0f44808912..cea6c333334aa778c0828c62821f4fafc099ea8c:/tipo3/emufs.h diff --git a/tipo3/emufs.h b/tipo3/emufs.h index cf16da9..81d62b3 100644 --- a/tipo3/emufs.h +++ b/tipo3/emufs.h @@ -3,21 +3,77 @@ #include #include -#include "malloc_debug.h" -typedef enum {T1, T2, T3} EMUFS_TYPE; +/** Tipo de archivo. */ +typedef enum { + T1, /**< Archivo de bloque parametrizado y registro variable. */ + T2, /**< Archivo sin bloques y registros variables. */ + T3 /**< Archivo de bloque parametrizado y registro fijo. */ +} EMUFS_TYPE; +/** Tipo Abstracto para menajo de archivos. + * + * Esta estructura es utilizada para acceder a cualquier tipo de archivo. + * + * Cuando se requiere abrir o crear un nuevo archivo, esta estrucura contendrá los + * punteros a los métodos de dicho archivo, por lo que desde el código que utilice + * esta estructura no deberá ser modificado por cada tipo de archivo. + * + * Por ejemplo: + * \code + * EMUFS *fs = emufs_abrir("archivo"); + * fs->leer_registro(id, ptr, size); + * \endcode + * + * Este ejemplo funcionará sin importar de que tipo de archivo se trate, sin + * la necesidad de que el usuario tenga que hacer una selección previa del tipo + * para llamar al método correspondiente a cada tipo de archivo. + */ typedef struct _emu_fs_t { - EMUFS_TYPE tipo; /* Corregir nombres */ - unsigned long tam_bloque; /* 0 si no tiene bloques */ - int (*leer_bloque)(struct _emu_fs_t *, int, void *); - int (*leer_registro)(struct _emu_fs_t *, int, void *, unsigned long); - int (*grabar_registro)(struct _emu_fs_t *, void *, unsigned long ); - int (*borrar_registro)(struct _emu_fs_t *, int); - char *nombre; + EMUFS_TYPE tipo; + unsigned long tam_bloque; /**< Tamaño de bloque. 0 Si no tiene bloques */ + int (*leer_bloque)(struct _emu_fs_t *, int, void *); /**< Método para leer un bloque */ + int (*leer_registro)(struct _emu_fs_t *, int, void *, unsigned long); /**< Método para leer un registro */ + int (*grabar_registro)(struct _emu_fs_t *, void *, unsigned long ); /**< Método para grabar un registro */ + int (*borrar_registro)(struct _emu_fs_t *, int, int); /**< Método para borrar un registro */ + char *nombre; /**< Nombre del archivo */ } EMUFS; +/** Crea un nuevo archivo EMUFS. + * + * Un archivo EMUFS está compuesto por 4 archivos a nivel del sistema operativo. + * Un archivo principal con extensión .dat y 3 archivos auxiliares para manejo interno. + * + * El parámetro filename que recive esta función en el nombre virtual que se utilizará, ya + * que las extensiones serán puestas automáticamente for EMUFS. + * + * Un ejemplo: + * \code + * EMUFS *fp emufs_crear("archivo", T3, 100, 100); + * \endcode + * + * En el ejemplo anterior se tiene que nuestro filesystem virtual se llamará archivo. + * + * Los últimos 2 parámetros serán ignorados si el tipo de archivo no utiliza dicho parámetro. + * + * \param filename Nombre del archivo virtual. + * \param tipo Tipo de archivo. + * \param tam_bloque Tamaño del bloque. + * \param tam_reg Tamaño del registro. + */ EMUFS *emufs_crear(const char *filename, char tipo, unsigned int tam_bloque, unsigned int tam_reg); +/** Abre un archivo EMUFS. + * + * Abre un archivo, determinando de que tipo se trata. + * + * \param filename Nombre del archivo virtual. + */ +EMUFS *emufs_abrir(const char *filename); + +/** Libera un archivo virtual */ int emufs_destruir(EMUFS *e); + +int ver_archivo_FS(EMUFS *emu); + #endif