+
+int debug_ver_estadisticas(EMUFS* efs)
+{
+ EMUFS_Estadisticas s = efs->leer_estadisticas(efs);
+
+ printf("ESTADISTICAS:\n");
+ printf("=============\n");
+ printf("Tamaño del archivo: %lu bytes\n", s.tam_archivo);
+ printf("Tamaño de datos (incluye espacio libre): %lu bytes (%.2f %%)\n",
+ s.tam_archivo - s.tam_info_control_dat,
+ (s.tam_archivo - s.tam_info_control_dat) * 100.0
+ / (float) s.tam_archivo);
+ printf("Tamaño de info de control total: %lu bytes (%.2f %%)\n",
+ s.tam_info_control_dat + s.tam_archivos_aux,
+ (s.tam_info_control_dat + s.tam_archivos_aux) * 100.0
+ / (float) s.tam_archivo);
+ printf("Tamaño de los archivos auxiliares: %lu bytes\n",
+ s.tam_archivos_aux);
+ printf("Tamaño de la información de control en el .dat: %lu bytes\n",
+ s.tam_info_control_dat);
+ printf("Total de espacio libre: %lu bytes\n", s.total_fs);
+ printf("Máximo espacio libre en bloque: %lu bytes\n", s.max_fs);
+ printf("Mínimo espacio libre en bloque: %lu bytes\n", s.min_fs);
+ printf("Media del espacio libre por bloque: %lu bytes\n", s.media_fs);
+ printf("Cantidad de registros: %lu\n", s.cant_registros);
+ printf("Cantidad de bloques: %lu\n", s.cant_bloques);
+ return 0;
+}
+
+int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset, unsigned int tam_bloque)
+{
+ INDICE *tmp;
+ int error=0;
+
+ /* Verifico que no existe un indice con el mismo nombre */
+ /* y que no exista un indice primario */
+ PERR("Agregando indice");
+ tmp = emu->indices;
+ while (tmp) {
+ if (strcmp(tmp->nombre, nombre)==0) {
+ error = 1;
+ break;
+ }
+ if ((funcion == IND_PRIMARIO) && (tmp->funcion == funcion)) {
+ error = 2;
+ break;
+ }
+ tmp = tmp->sig;
+ }
+
+ if (tmp != NULL) {
+ switch (error) {
+ case 1:
+ PERR("Ya existe un indice con el mismo nombre!");
+ break;
+ case 2:
+ PERR("EMUFS ya tiene indice primario!!");
+ }
+ return 0;
+ }
+
+ /* Creo el nuevo indice */
+ PERR("Creando indice\n");
+ tmp = emufs_indice_crear(emu, nombre, funcion, tipo, tipo_dato, offset, tam_bloque);
+
+ if (tmp == NULL) {
+ PERR("NO SE PUDO CREAR INDICE!!!");
+ return 0;
+ }
+
+ if (emu->indices==NULL)
+ emu->indices = tmp;
+ else {
+ tmp->sig = emu->indices;
+ emu->indices = tmp;
+ }
+ return 1;
+}
+
+INDICE_DATO *emufs_buscar_registros(EMUFS *emu, char *indice, CLAVE clave, int *cant)
+{
+ INDICE *tmp;
+ tmp = emu->indices;
+ while (tmp) {
+ if (strcmp(tmp->nombre, indice) == 0) break;
+ }
+
+ if (tmp == NULL) {
+ PERR("NO EXISTE EL INDICE");
+ cant = 0;
+ return NULL;
+ }
+
+ return tmp->buscar_entradas(tmp, clave, cant);
+}
+