+/* vim: set noexpandtab tabstop=4 shiftwidth=4:
+ *----------------------------------------------------------------------------
+ * emufs
+ *----------------------------------------------------------------------------
+ * This file is part of emufs.
+ *
+ * emufs is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * emufs is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with emufs; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *----------------------------------------------------------------------------
+ * Creado: mié mar 31 17:26:46 ART 2004
+ * Autores: Nicolás Dimov <sagardua@uolsinectis.com.ar>
+ * Ricardo Markiewicz <rmarkie@fi.uba.ar>
+ * Leandro Lucarella <llucare@fi.uba.ar>
+ *----------------------------------------------------------------------------
+ *
+ * $Id$
+ *
+ */
+
+/** \file
+ *
+ * Estructura general de un archivo <em>abstracto</em> de emufs.
+ *
+ * Implementación de la estructura abstracta que representa cualquiera de los
+ * tipos de archivo implementados. Se incluyen funciones tipo <em>factory</em>
+ * para crear un archivo, abrirlo y destruirlo.
+ *
+ */
+
#include "emufs.h"
#include "tipo3.h"
+#include "did.h"
+#include "fsc.h"
+#include "idx.h"
/* Defino las extenciones que usan cada tipo de archivo */
-#define EXT_TIPO3_ID ".idx"
-#define EXT_TIPO3_DATA ".dat"
-#define EXT_TIPO3_DISP ".fsc"
-#define EXT_TIPO3_IDS ".did"
char *str_dup(const char *s);
case T3:
tmp->tipo = T3;
tmp->tam_bloque = tam_bloque;
- tmp->leer_bloque = leer_bloque;
- tmp->leer_registro = leer_registro;
- tmp->grabar_registro = grabar_registro;
- tmp->borrar_registro = borrar_registro;
+ tmp->leer_bloque = emufs_tipo3_leer_bloque;
+ tmp->leer_registro = emufs_tipo3_leer_registro;
+ tmp->grabar_registro = emufs_tipo3_grabar_registro;
+ tmp->borrar_registro = emufs_tipo3_borrar_registro;
tmp->nombre = str_dup(filename);
strcpy(name, filename);
- strcat(name, EXT_TIPO3_DATA);
+ strcat(name, ".dat");
fp = fopen(name, "w");
if (fp == NULL) {
/* ERROR */
fclose(fp);
strcpy(name, filename);
- strcat(name, EXT_TIPO3_ID);
+ strcat(name, EMUFS_IDX_EXT);
fp = fopen(name, "w");
fclose(fp);
strcpy(name, filename);
- strcat(name, EXT_TIPO3_DISP);
+ strcat(name, EMUFS_FSC_EXT);
fp = fopen(name, "w");
fclose(fp);
strcpy(name, filename);
- strcat(name, EXT_TIPO3_IDS);
+ strcat(name, EMUFS_DID_EXT);
fp = fopen(name, "w");
fclose(fp);
FILE *fp;
strcpy(name, filename);
- strcat(name, EXT_TIPO3_DATA);
+ strcat(name, ".dat");
/* Trato de determinar el tipo de archivo */
fp = fopen(name, "r");
case T3:
tmp->tipo = tipo;
fread(&tmp->tam_bloque, sizeof(int), 1, fp);
- tmp->leer_bloque = leer_bloque;
- tmp->leer_registro = leer_registro;
- tmp->grabar_registro = grabar_registro;
- tmp->borrar_registro = borrar_registro;
+ tmp->leer_bloque = emufs_tipo3_leer_bloque;
+ tmp->leer_registro = emufs_tipo3_leer_registro;
+ tmp->grabar_registro = emufs_tipo3_grabar_registro;
+ tmp->borrar_registro = emufs_tipo3_borrar_registro;
tmp->nombre = str_dup(filename);
}
int ver_archivo_FS(EMUFS *emu)
{
FILE *f_block_free;
- BLOCK_FREE_T reg;
+ EMUFS_FSC reg;
char name_f_block_free[255];
strcpy(name_f_block_free,emu->nombre);
strcpy(name_f_block_free,emu->nombre);
strcat(name_f_block_free,".idx");
{
- BLOCK_REG_T r;
+ EMUFS_IDX r;
f_block_free = fopen(name_f_block_free, "r");
- fread(&r, sizeof(BLOCK_REG_T), 1, f_block_free);
+ fread(&r, sizeof(EMUFS_IDX), 1, f_block_free);
while (!feof(f_block_free)) {
printf("ID %ld en bloque %d\n", r.id_reg, r.block);
- fread(&r, sizeof(BLOCK_REG_T), 1, f_block_free);
+ fread(&r, sizeof(EMUFS_IDX), 1, f_block_free);
}
fclose(f_block_free);
}