/* Conjunto de utilidades */ #include "Tipos_SF.h" #include "sfsimb.h" char nombre[25]; char buff[512]; void (*f[25])(); extern int Error_SF; main() { int ret, opcion; void crea_sistema(), salir(), monta(), desmonta(), crea_fichero(); void apertura(), cierre(), posiciona(), lee(), escribe(), instala(); void borra_fichero(), informe(); f[0] = salir; f[1] = crea_sistema; f[2] = monta; f[3] = desmonta; f[4] = apertura; f[5] = cierre; f[6] = posiciona; f[7] = lee; f[8] = escribe; f[9] = informe; f[10] = instala; f[11] = crea_fichero; f[12] = borra_fichero; do { printf("\nOPCIONES BASICAS:\n"); printf(" 0 ... Salir\n"); printf(" 1 ... Crear sistema de ficheros\n"); printf(" 2 ... Montar sistema de ficheros\n"); printf(" 3 ... Desmontar sistema de ficheros\n"); printf(" 4 ... Abrir fichero\n"); printf(" 5 ... Cerrar fichero\n"); printf(" 6 ... Posicionar puntero a fichero\n"); printf(" 7 ... Leer fichero\n"); printf(" 8 ... Escribir fichero\n"); printf(" 9 ... Estado del sistema\n"); printf(" 10 ... Instalacion de disco\n"); printf(" 11 ... Creacion de fichero\n"); printf(" 12 ... Borrado de fichero\n"); scanf("%d",&opcion); if ( (opcion < 0) || (opcion > 13) ) continue; else (*f[opcion])(); } while(1); } void salir() { printf("\n Se ha pulsado salir"); exit(0); } void crea_sistema() { paramfs br, bd, lb, nf; printf("\n Nombre del archivo: "); scanf("%s",nombre); printf("\n Bloques reservados: "); scanf("%hu",&br); printf("\n Longitud de bloque de datos: "); scanf("%hu",&lb); printf("\n Numero de ficheros: "); scanf("%hu",&nf); printf("\n Creando sistema .... "); if ( Crea_Sistema(nombre, br, lb, nf) < 0 ) printf("ERROR !!\n"); else printf("SISTEMA CREADO\n"); return; } void monta() { int nbc; printf("\n Nombre del archivo: "); scanf("%s",&nombre); printf("\n Numero de bloques de cache: "); scanf("%d",&nbc); printf("\n Montando sistema .... "); if ( Activa_Sistema( nombre, nbc ) < 0 ) printf("ERROR !!\n"); else printf(" SISTEMA MONTADO\n"); return; } void desmonta() { printf("\n Desmontando sistema .... "); if ( Desactiva_Sistema() < 0 ) printf("ERROR !!\n"); else printf(" SISTEMA DESMONTADO\n"); return; } void apertura() { int ret ; int a; printf("\n Nombre del fichero: "); scanf("%s",nombre); printf("\n Acceso: "); scanf("%d",&a); ret = Abre_Fichero((Nombre)nombre,(char)a); if ( ret < -1 ) printf("\n Error al abrir: %d\n",Error_SF); else printf("\n Descriptor: %d",ret); return; } void cierre() { int fd, ret; printf("Descriptor del fichero a cerrar: "); scanf("%d",&fd); ret = Cierra_Fichero( fd ); if ( ret >= 0 ) printf("\n Archivo cerrado\n" ); else printf("\n ERROR: %d",Error_SF); return; } void posiciona() { int fd, ret; Posfich pos; printf("Descriptor del fichero a cerrar y posicion: "); scanf("%d %d",&fd,&pos); ret = Posiciona_Puntero( fd, pos ); if ( ret > -1 ) printf("\n Puntero .... %d\n",ret); else printf("\n ERROR: %d\n", Error_SF); return; } void lee() { int fd, nbytes, ret; char p; do { printf("Descriptor de fichero y bytes a leer (<512): "); scanf("%d %d",&fd, &nbytes); if ( !nbytes ) return; if ( nbytes <= 512 ) { printf("\n Leyendo fichero ...."); ret = Lee_Fichero(fd, buff, nbytes); p = buff[nbytes]; buff[nbytes] = '\0'; if ( ret > -1 ) printf(" %s\n",buff); else printf("\n ERROR: %d\n",Error_SF); buff[nbytes] = p; return; } printf("\n"); } while (1); } void escribe() { int fd, nbytes, ret; do { printf("Descriptor de fichero y bytes a escribir (<512): "); scanf("%d %d",&fd,&nbytes); if ( !nbytes ) return; if ( (nbytes) >0 && (nbytes<=512) ) { scanf("%s",buff); ret = Escribe_Fichero(fd, buff, nbytes); if ( ret > -1 ) printf(" %d\n", ret); else printf("\n ERROR: %d\n", Error_SF); return; } printf("\n"); } while(1); } void instala() { int ret; ret = InstalaDisco( "MI_DISCO", 512, 2048 ); printf("\n InstalaDisco ha retornado %d\n",ret); } void crea_fichero() { int ret; int atrib; printf("Nombre del fichero a crear: "); scanf("%s",nombre); printf("\n Atributos de acceso: "); scanf("%d",&atrib); ret = Crea_Fichero( (Nombre)nombre, (char)atrib ); if ( ret < 0 ) printf(" ERROR: %d\n",Error_SF); } void borra_fichero() { int ret; printf("Nombre del fichero a borrar: "); scanf("%s",nombre); ret = Borra_Fichero( (Nombre)nombre ); printf("\n Valor retornado: %d\n", ret); if ( ret < 0 ) printf(" ERROR: %d\n",Error_SF); } void informe() { void Informe(); Informe(); }