#include #include #include "disco.h" int error_disco; extern int errno; char nombre[100]; extern reg_tabla disc_tab[MAX_UNIDADES]; char buff_escr[1024], buff_lect[1024]; main() { int opcion, i; unidad ud; int Creadisco(), Montadisco(), Desmontadisco(); int Dameposicion(), Posiciona(), Transfiere(); void trataerror( int errno, int error_disco); for ( i=0; i<1024; i++) *(buff_escr+i) = 'E'; while ( 1 ) { printf("OPCIONES:\n"); printf("=========\n\n"); printf(" Crear Disco .... 1\n"); printf(" Montar Disco .... 2\n"); printf(" Desmontar Disco .... 3\n"); printf(" Leer posicion .... 4\n"); printf(" Posiciona .... 5\n"); printf(" Transfiere .... 6\n"); printf(" Salir .... 7\n"); scanf("%d",&opcion); switch (opcion) { case 0: return; case 1: if ( Creadisco() < 0 ) trataerror(errno, error_disco); break; case 2: if ( (ud = (unidad)Montadisco()) < 0 ) trataerror(errno, error_disco); printf("\n UNIDAD: %d",ud); break; case 3: if ( Desmontadisco( ud ) < 0 ) trataerror(errno, error_disco); break; case 4: if ( Dameposicion( ud ) < 0 ) trataerror(errno, error_disco); break; case 5: if ( Posiciona(ud) < 0 ) trataerror(errno, error_disco); break; case 6: if ( Transfiere( ud ) < 0 ) trataerror(errno, error_disco); break; case 7: exit(); } } } /* Final de funcion */ int Creadisco() { bloq_param desc ; tiempo t; int Inicializa_Disco( char *nombre, bloq_param desc); printf("\n Nombre del fichero: "); scanf("%s",nombre); printf("\n Introduza parametros: \n"); printf("\n Superficies: "); scanf("%hd",&desc.nsuperficie); printf("\n Cilindro : "); scanf("%hd",&desc.ncilindro); printf("\n Sectores : "); scanf("%hd",&desc.nsectores); printf("\n Tamao : "); scanf("%hd",&desc.tamsector); printf("\n T. seek : "); scanf("%ld%ld",&t.seg, &t.mseg); desc.tseek = t; printf("\n T. Lat. : "); scanf("%ld%ld",&t.seg,&t.mseg); desc.tlatency = t; printf("\n T. Transf: "); scanf("%ld%ld",&t.seg,&t.mseg); desc.ttransf = t; printf("\n T. Recal.: "); scanf("%ld%ld",&t.seg,&t.mseg); desc.trecalib = t; return( Inicializa_Disco( nombre, desc ) ); } /* Final de funcion Creadisco */ int Montadisco() { int Monta_Disco( char *nombre ); unidad u; printf("\n Disco a montar: "); scanf("%s",nombre); u = Monta_Disco( nombre ); if ( u < 0 ) return(-1); printf("\nParametros del disco Montado: \n"); return( u ); } int Desmontadisco( unidad u ) { return( Desmonta_Disco( u ) ); } int Dameposicion( unidad ud) { int pos ; pos = Lee_Posicion( ud ); if ( pos < 0 ) return(-1); printf("\n POSICION ACTUAL: %d", pos); return(0); } int Posiciona( unidad ud) { unsigned short int cil; printf("\nCilindro: "); scanf("%hd",&cil); if ( Posiciona_Cabeza( ud, cil ) < 0 ) return(-1); } int Transfiere( unidad ud ) { char *buff; int modo, i; sector_logico s; printf("\nSECTOR: "); scanf("%d", &s); printf(" TIPO DE TRANSFERENCIA: "); scanf("%d",&modo); buff = buff_lect; if ( modo == ESCRITURA ) buff = buff_escr; if ( Transfiere_Sector( ud, s, buff, modo) < 0 ) return(-1); printf("\n"); if ( modo == LECTURA ) for (i=0; i<1024; i++) printf(" %c", *(buff+i)); return(0); } /* Funcion de tratamiento de errores del subssitema de disco */ void trataerror(int errno, int error_disco) { printf("ERROR: errno: %d error_disco: %d\n",errno, error_disco); return; }