#ifndef __SBFISICO_H
#define __SBFISICO_H

/*                                                              */
/*      SBFISICO.H                                              */
/*      ==========                                              */
/*                                                              */
/*      Interfaz con el Sistema de Ficheros Físico              */
/*                                                              */


/* Tipos básicos de estas prácticas */
#include "tipos.h"      
/* Estructura del superbloque */
#include "superblq.h"   


/************************/
/* Límites y constantes */
/************************/


#define MIN_TAMBLOQUE   96              /* para que quepa el superbloque */

/* Estas dos constantes pueden alterarse */

#define MAX_TAMBLOQUE   8192            
#define MAX_TAMDISCO    (1L<<24)                /* 16 megabytes */

#define MAX_BLOQUES_FISICOS     (MAX_TAMDISCO/MIN_TAMBLOQUE)



/****************************/
/* Servicios de este módulo */
/****************************/


/* Instalación y montaje del disco */

int InstalaDisco ( const char* nombre_fichero,
		   WORD tam_bloque, DWORD num_bloques );
int MontaDisco ( const char* nombre_fichero, int nbloques_cache );
int DesmontaDisco (void);


/* Acceso al superbloque */

int LeeSuperbloque (struct Superbloque* bloque);
int EscribeSuperbloque (const struct Superbloque* bloque);


/* Lectura y escritura de bloques físicos */

int LeeBloqueFisico ( DWORD nbloque, void* bufer );
int EscribeBloqueFisico ( DWORD nbloque, void* bufer );

enum ModoAccesoFisico { ACCESO_FISICO_LECTURA=0, ACCESO_FISICO_ESCRITURA=1 };
int AccedeBloqueFisico ( DWORD nbloque, void* bufer, enum ModoAccesoFisico );


#endif