Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <dirent.h>
- #include <sys/stat.h>
- #include <string.h>
- #include <time.h>
- int ContadorInstrucciones;
- int ContadorComandosExitosos;
- int ErrorInterprete;
- int ErrorComando;
- int ErrorCrearDisco;
- int ErrorEliminarDisco;
- int ErrorCrearParticion;
- int ErrorEliminarParticion;
- int ErrorCrearParticionLogica;
- int ErrorEliminarLogica;
- int ErrorReporte1;
- int ErrorReporte2;
- int comentario;
- int fin=0;
- char sincomillas[1000];// se usa en el Metodo quitarComillas
- typedef struct
- {
- int esnuevonodo;
- char nombre[100];
- char name2[100];
- int contador;
- char nombreparametro[100];
- char parametro[100];
- int size;
- char size2[100];
- char unit;
- char path[100];
- char type;
- char typeFormatear[100];
- char delete_[100];
- char name[100];
- char Contenido[1000];
- char id[100];
- char fileid[100];
- int add;
- char fit[30];
- char allocation[100];
- char idvector[6];
- int p;
- char fs[100];
- int tamano;
- char count[100];
- int count2;
- }Funcion;
- typedef struct
- {
- char part_status;
- char part_type;
- char part_fit[3];
- int part_start;
- int part_size;
- char part_name[16];
- }Particion;
- typedef struct
- {
- char part_status;
- char part_type;
- char part_fit[3];
- int part_start;
- int part_size;
- int part_next;
- char part_name[16];
- }EBR;
- struct retorno
- {
- int disco;
- int particion;
- };
- typedef struct retorno Retorno;
- struct montura
- {
- char path[100];
- char name[15];
- char nombre[15];
- struct montura *siguiente;
- };
- typedef struct montura Montura;
- struct lista
- {
- struct montura *primero;
- struct montura *ultimo;
- };
- typedef struct lista Lista;
- struct bloque
- {
- int inicio;
- int fin;
- int tamano;
- struct bloque *siguiente;
- struct bloque *anterior;
- };
- typedef struct bloque Bloque;
- struct espacios
- {
- struct bloque *primero;
- struct bloque *ultimo;
- };
- typedef struct espacios Espacios;
- Lista *sistema;
- typedef struct
- {
- int mbr_tamano;
- char mbr_fecha_creacion[25];
- int mbr_disk_signature;
- char mbr_fit[3];
- Particion particiones[4];
- int cantParticones;
- }MbrDisco;
- MbrDisco mbrG;
- MbrDisco *BuscarDisco(Funcion funcion)
- {
- int bandera =0;
- Montura *pivote=sistema->primero;
- while (pivote!=NULL) {
- if(!strcmp(funcion.id,pivote->name))
- {
- printf("Se encontro la particion montada\n");
- FILE *fp;
- fp = fopen(pivote->path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&mbrG, sizeof(MbrDisco), 1, fp);
- fclose(fp);
- return &mbrG;
- }
- bandera=1;
- break;
- }
- pivote=pivote->siguiente;
- }
- if(bandera==0)
- {
- printf("No se encotro ninguna particion montada con ese nombre\n");
- return NULL;
- }
- }
- MbrDisco BuscarDisco2(Funcion funcion)
- {
- FILE *fp;
- fp = fopen(funcion.path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&mbrG, sizeof(MbrDisco), 1, fp);
- fclose(fp);
- return mbrG;
- }
- }
- void Graficar2(Funcion funcion)
- {
- MbrDisco *mbr=BuscarDisco(funcion);
- if(mbr!=NULL)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- strcpy(pathauxiliar,funcion.path);
- int q=0;
- while(pathauxiliar[q]!='.')
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=pathauxiliar[q];
- strncat(pathauxiliar2,nuevoCaracter,1);
- q++;
- }
- strcat(pathauxiliar2,".dot");
- printf("%s\n",funcion.path);
- printf("%s\n",pathauxiliar2);
- char finalizado[500];
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[500];
- while(funcion.path[indice]!='.')
- {
- if(funcion.path[indice]!='/')
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=funcion.path[indice];
- strncat(carpeta,nuevoCaracter,1);
- }
- else
- {
- if(carpeta[0]!='\0')
- {
- strcat(finalizado,"mkdir ");
- strcat(finalizado,"\"");
- strcat(finalizado,carpeta);
- strcat(finalizado,"\"");
- strcat(finalizado,"\n");
- strcat(finalizado,"cd ");
- strcat(finalizado,"\"");
- strcat(finalizado,carpeta);
- strcat(finalizado,"\"");
- strcat(finalizado,"\n");
- strcat(carpeta,"");
- }
- limpiarvar(carpeta,500);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(pathauxiliar2,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }
- fprintf(fptr,"digraph G{\n");
- fprintf(fptr,"aHtmlTable[");
- fprintf(fptr,"shape=plaintext ");
- fprintf(fptr,"color=\"#2471a3\" ");
- fprintf(fptr,"label=<\n");
- fprintf(fptr,"<table border=\"2px\">\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td rowspan=\"2\">MBR</td>\n");
- int a[4];
- int n=0;
- for (int i=0;i<4;i++) {
- if(mbr->particiones[i].part_status=='1')
- {
- a[i]=mbr->particiones[i].part_start;
- n++;
- }
- }
- int i,j,aux;
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("\n");
- for(i=0;i<=n;i++){
- for(j=0;j<n-1;j++){
- if(a[j]>a[j+1]){
- aux=a[j];
- a[j]=a[j+1];
- a[j+1]=aux;
- }
- }
- }
- printf("\n");
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("\n");
- for (int j=0;j<4;j++) {
- for (int i=0;i<4;i++) {
- if(a[j]==mbr->particiones[i].part_start)
- {
- printf("Espacio-> %d\n",a[j]);
- int AntVacio=0;
- int Ant=0;
- int SigVacio=0;
- int Sig=0;
- if(j!=0)
- {
- for (int i=0;i<4;i++) {
- if(a[j-1]==mbr->particiones[i].part_start)
- {
- Ant=i;
- AntVacio=1;
- break;
- }
- }
- }
- int Sigvaci=0;
- int sigui=0;
- if(j!=3)
- {
- for (int i=0;i<4;i++) {
- if(a[j+1]==mbr->particiones[i].part_start)
- {
- Sig=i;
- SigVacio=1;
- break;
- }
- }
- }
- if(j==0)
- {
- printf("Entre principio y primero\n");
- printf("Inicio %d\n",1);
- printf("Fin %d\n",mbr->particiones[i].part_start);
- double a=mbr->particiones[i].part_start;
- double b=1;
- double c=mbr->mbr_tamano;
- double po= ((a-b)/c)*100;
- if(po>0)
- {
- fprintf(fptr,"<td rowspan=\"2\">Libre <br/>%.2f%%</td>\n",po);
- }
- if((mbr->particiones[i].part_type=='p'||mbr->particiones[i].part_type=='P') && mbr->particiones[i].part_status=='1')
- {
- double b=mbr->particiones[i].part_size;
- double c=mbr->mbr_tamano;
- double po=(b/c)*100;
- fprintf(fptr,"<td rowspan=\"2\">Primaria <br/>%.2f%%</td>\n",po);
- }
- else if((mbr->particiones[i].part_type=='e'||mbr->particiones[i].part_type=='E') && mbr->particiones[i].part_status=='1')
- {
- double b=mbr->particiones[i].part_size;
- double c=mbr->mbr_tamano;
- double po=(b/c)*100;
- fprintf(fptr,"<td rowspan=\"1\">Extendida <br/>%.2f%%o</td>\n",po);
- }
- if(SigVacio==0)
- {
- printf("Primero y final\n");
- printf("Inicio %d\n",mbr->particiones[i].part_start+mbr->particiones[i].part_size);
- printf("Fin %d\n",mbr->mbr_tamano);
- double a=mbr->mbr_tamano;
- double b=mbr->particiones[i].part_start+mbr->particiones[i].part_size;
- double c=mbr->mbr_tamano;
- double po= ((a-b)/c)*100;
- if(po>0)
- {
- fprintf(fptr,"<td rowspan=\"2\">Libre <br/>%.2f%%</td>\n",po);
- }
- }
- }
- else
- {
- printf("Entre %d y %d\n",j,j+1);
- printf("Inicio %d\n",mbr->particiones[Ant].part_start+mbr->particiones[Ant].part_size);
- printf("Fin %d\n",mbr->particiones[i].part_start);
- double a=mbr->particiones[i].part_start;
- double b=mbr->particiones[Ant].part_start+mbr->particiones[Ant].part_size;
- double c=mbr->mbr_tamano;
- double po= ((a-b)/c)*100;
- if(po>0)
- {
- fprintf(fptr,"<td rowspan=\"2\">Libre <br/>%.2f%%</td>\n",po);
- }
- if((mbr->particiones[i].part_type=='p'||mbr->particiones[i].part_type=='P') && mbr->particiones[i].part_status=='1')
- {
- double b=mbr->particiones[i].part_size;
- double c=mbr->mbr_tamano;
- double po=(b/c)*100;
- fprintf(fptr,"<td rowspan=\"2\">Primaria <br/>%.2f%%</td>\n",po);
- }
- else if((mbr->particiones[i].part_type=='e'||mbr->particiones[i].part_type=='E') && mbr->particiones[i].part_status=='1')
- {
- double b=mbr->particiones[i].part_size;
- double c=mbr->mbr_tamano;
- double po=(b/c)*100;
- fprintf(fptr,"<td rowspan=\"1\">Extendida <br/>%.2f%%</td>\n",po);
- }
- if(SigVacio==0)
- {
- printf("%d y final\n",j);
- printf("Inicio %d\n",mbr->particiones[i].part_start+mbr->particiones[i].part_size);
- printf("Fin %d\n",mbr->mbr_tamano);
- double a=mbr->mbr_tamano;
- double b=mbr->particiones[i].part_start+mbr->particiones[i].part_size;
- double c=mbr->mbr_tamano;
- double po= ((a-b)/c)*100;
- if(po>0)
- {
- fprintf(fptr,"<td rowspan=\"2\">Libre <br/>%.2f%%</td>\n",po);
- }
- }
- }
- break;
- }
- }
- }
- fprintf(fptr,"</tr>\n");
- fprintf(fptr," <tr>\n");
- fprintf(fptr," <td>EBR</td>\n");
- fprintf(fptr," </tr>\n");
- fprintf(fptr,"</table>\n");
- fprintf(fptr,">];\n");
- fprintf(fptr,"}\n");
- fclose(fptr);
- strcat(dot,"dot -Tpng ");
- strcat(dot,pathauxiliar2);
- strcat(dot," -o ");
- strcat(dot,funcion.path);
- printf("%s\n",dot);
- system(dot);
- ContadorComandosExitosos++;
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,100);
- }else {
- printf("Error::-> Generar reporte\n");
- }
- }
- void Graficar(Funcion funcion)
- {
- MbrDisco *mbr=BuscarDisco(funcion);
- if(mbr!=NULL)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- strcpy(pathauxiliar,funcion.path);
- int q=0;
- while(pathauxiliar[q]!='.')
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=pathauxiliar[q];
- strncat(pathauxiliar2,nuevoCaracter,1);
- q++;
- }
- strcat(pathauxiliar2,".dot");
- printf("%s\n",funcion.path);
- printf("%s\n",pathauxiliar2);
- char finalizado[500];
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[500];
- while(funcion.path[indice]!='.')
- {
- if(funcion.path[indice]!='/')
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=funcion.path[indice];
- strncat(carpeta,nuevoCaracter,1);
- }
- else
- {
- if(carpeta[0]!='\0')
- {
- strcat(finalizado,"mkdir ");
- strcat(finalizado,"\"");
- strcat(finalizado,carpeta);
- strcat(finalizado,"\"");
- strcat(finalizado,"\n");
- strcat(finalizado,"cd ");
- strcat(finalizado,"\"");
- strcat(finalizado,carpeta);
- strcat(finalizado,"\"");
- strcat(finalizado,"\n");
- strcat(carpeta,"");
- }
- limpiarvar(carpeta,500);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(pathauxiliar2,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }
- fprintf(fptr,"digraph G{\n");
- fprintf(fptr,"aHtmlTable[");
- fprintf(fptr,"shape=plaintext ");
- fprintf(fptr,"color=\"#2471a3\" ");
- fprintf(fptr,"label=<\n");
- fprintf(fptr,"<table border='1' cellborder='1'>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> NOMBRE </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> VALOR </td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> mbr_tamano</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", mbr->mbr_tamano);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> mbr_fecha_creacion </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", mbr->mbr_fecha_creacion);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> mbr_disk_signature </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", mbr->mbr_disk_signature);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> Disk_fit </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", mbr->mbr_fit);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- int a[4];
- int n=0;
- for (int i=0;i<4;i++) {
- if(mbr->particiones[i].part_status=='1')
- {
- a[i]=mbr->particiones[i].part_start;
- n++;
- }
- }
- int i,j,aux;
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("%d\n");
- for(i=0;i<=n;i++){
- for(j=0;j<n-1;j++){
- if(a[j]>a[j+1]){
- aux=a[j];
- a[j]=a[j+1];
- a[j+1]=aux;
- }
- }
- }
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("%d\n",a[i]);
- int e=-1;
- for (int j=0;j<4;j++) {
- for (int i=0;i<4;i++) {
- if(a[j]==mbr->particiones[i].part_start)
- {
- if(mbr->particiones[i].part_type=='E' || mbr->particiones[i].part_type=='e')
- {
- e=i;
- }
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td colspan=\"2\" bgcolor=\"#d6dbdf\"> Particion No.%d </td>\n",j+1);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_status_%d </td>\n",j+1);
- fprintf(fptr,"<td>");
- fprintf(fptr,"%c", mbr->particiones[i].part_status);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_type_%d </td>\n",j+1);
- fprintf(fptr,"<td>");
- fprintf(fptr,"%c", mbr->particiones[i].part_type);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_fit_%d </td>\n",j+1);
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", mbr->particiones[i].part_fit);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_start_%d </td>\n",j+1);
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", mbr->particiones[i].part_start);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_size_%d </td>\n",j+1);
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", mbr->particiones[i].part_size);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_name_%d </td>\n",j+1);
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", mbr->particiones[i].part_name);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- break;
- }
- }
- }
- if(e!=-1)
- {
- char path[50];
- Montura *pivote=sistema->primero;
- while (pivote!=NULL) {
- if(!strcmp(funcion.id,pivote->name))
- {
- int l=0;
- for(int k=0;k<50;k++)
- {
- path[l++]=pivote->path[k];
- }
- break;
- }
- pivote=pivote->siguiente;
- }
- printf("%s\n",path);
- EBR lec;
- int inicio= mbr->particiones[e].part_start;
- FILE *fp = fopen(path, "rb");
- printf("Inicio %d\n",inicio+sizeof (MbrDisco));
- fseek(fp,inicio+sizeof (MbrDisco),SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&lec, sizeof(EBR), 1, fp);
- fclose(fp);
- }
- printf("Siguiente %d\n",lec.part_next);
- int siguiente=lec.part_next;
- EBR sig;
- int contador=0;
- while (siguiente!=-1) {
- if(contador==0)
- {
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td colspan=\"2\" bgcolor=\"#d6dbdf\"> EBR </td>\n");
- fprintf(fptr,"</tr>\n");
- }
- fp = fopen(path, "rb");
- fseek(fp,siguiente,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&sig, sizeof(EBR), 1, fp);
- fclose(fp);
- }
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> NOMBRE </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> VALOR </td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_status </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%c", sig.part_status);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_fit </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", sig.part_fit);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_start </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", sig.part_start);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_size </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", sig.part_size);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_next </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", sig.part_next);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> part_name </td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", sig.part_name);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- contador++;
- siguiente=sig.part_next;
- printf("Siguiente %d\n",siguiente);
- }
- }
- fprintf(fptr,"</table>\n");
- fprintf(fptr,">];\n");
- fprintf(fptr,"}\n");
- fclose(fptr);
- strcat(dot,"dot -Tpng ");
- strcat(dot,pathauxiliar2);
- strcat(dot," -o ");
- strcat(dot,funcion.path);
- printf("%s\n",dot);
- system(dot);
- ContadorComandosExitosos++;
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,100);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }
- void CrearDisco(Funcion funcion)
- {
- MbrDisco mbr;
- mbr.mbr_tamano=funcion.size;
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- printf("Fecha y Hora de Creacion: %s\n",output);
- int id=funcion.path;
- int k=0;
- int l=0;
- for(k=0;k<25;k++)
- {
- mbr.mbr_fecha_creacion[l++]=output[k];
- }
- l=0;
- for(k=0;k<3;k++)
- {
- mbr.mbr_fit[l++]=funcion.fit[k];
- }
- strcpy(mbr.mbr_fit,funcion.fit);
- mbr.mbr_disk_signature=abs(id);
- mbr.cantParticones=0;
- //tamaño en bytes
- int tamano=0;
- if(funcion.unit=='k'||funcion.unit=='K')
- {
- tamano=funcion.size*1024;
- }
- else
- {
- tamano=funcion.size*(1024*1024);
- }
- //----------------- Quitar "" en la path ------------------------
- char pathauxiliar[500];
- strcpy(pathauxiliar,funcion.path);
- char finalizado[500];
- strcpy(finalizado,"cd /\n");
- if(pathauxiliar[0]=='\"')
- {
- limpiarvar(funcion.path,100);
- int q=1;
- while(pathauxiliar[q]!='\"')
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=pathauxiliar[q];
- strncat(funcion.path,nuevoCaracter,1);
- q++;
- }
- }
- int con1=0;
- int valExtencion=0;
- while(funcion.path[con1]!=NULL){
- if(funcion.path[con1]=='.'){
- if(funcion.path[con1+1]=='d'&&funcion.path[con1+2]=='i'&&funcion.path[con1+3]=='s' &&funcion.path[con1+4]=='k'){
- valExtencion=1;
- }
- }
- con1++;
- }
- if(valExtencion==0){
- printf("\nError::-> Extencion incorrecta\n");
- ErrorCrearDisco++;
- }else{
- int indice=0;
- char carpeta[500];
- printf("%s\n",funcion.path);
- while(funcion.path[indice]!='.')
- {
- if(funcion.path[indice]!='/')
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=funcion.path[indice];
- strncat(carpeta,nuevoCaracter,1);
- }
- else
- {
- if(carpeta[0]!='\0')
- {
- strcat(finalizado,"mkdir ");
- strcat(finalizado,"\"");
- strcat(finalizado,carpeta);
- strcat(finalizado,"\"");
- strcat(finalizado,"\n");
- strcat(finalizado,"cd ");
- strcat(finalizado,"\"");
- strcat(finalizado,carpeta);
- strcat(finalizado,"\"");
- strcat(finalizado,"\n");
- strcat(carpeta,"");
- limpiarvar(carpeta,500);
- }
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- FILE* archivo= fopen(funcion.path, "ab");
- if (archivo==NULL)
- {
- printf("\nError::-> Imposible crear el archivo\n");
- ErrorCrearDisco++;
- }
- else
- {
- int fin=(tamano/1024);
- char buffer[1024];
- int i=0;
- for(i=0;i<1024;i++){
- buffer[i]='\0';
- }
- int j=0;
- while(j!=fin){
- fwrite(&buffer,1024 , 1, archivo);
- j++;
- }
- fclose(archivo);
- }
- //Fin Creacion de Archivo
- //Estableciendo propiedades de la estructura del Mbr del disco
- mbr.mbr_tamano=tamano;
- int i;
- for(i=0;i<4;i++)//recorre el arreglo de las 4 particiones
- {//estableciendo datos por defecto
- mbr.particiones[i].part_start=-1;
- mbr.particiones[i].part_status='0';
- mbr.particiones[i].part_size=0;
- }
- //abriendo el Archivo qe simula el disco virtual
- FILE* file= fopen(funcion.path, "rb+");
- fseek(file,0,SEEK_SET);// estableciendo puntero al inicio
- if (file==NULL)//si el archivo no contiene nada
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- ErrorCrearDisco++;
- //fclose(file);
- }
- else
- {
- fwrite(&mbr, sizeof(MbrDisco), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'CREACION DE DISCO EXITOSO'\n");
- ContadorComandosExitosos++;
- }
- }
- }
- void ELiminarDisco(Funcion funcion)
- {
- //----------------- Quita "" en la path ------------------------
- char pathauxiliar[500];
- strcpy(pathauxiliar,funcion.path);
- char finalizado[500];
- strcpy(finalizado,"cd /\n");
- if(pathauxiliar[0]=='\"')
- {
- limpiarvar(funcion.path,100);
- int q=1;
- while(pathauxiliar[q]!='\"')
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=pathauxiliar[q];
- strncat(funcion.path,nuevoCaracter,1);
- q++;
- }
- }
- //----------------------------------------------------------------------
- int con1=0;
- int valExtencion=0;
- while(funcion.path[con1]!=NULL){
- if(funcion.path[con1]=='.'){
- if(funcion.path[con1+1]=='d'&&funcion.path[con1+2]=='i'&&funcion.path[con1+3]=='s' &&funcion.path[con1+4]=='k'){
- valExtencion=1;
- }
- }
- con1++;
- }
- if(valExtencion==0){
- printf("\nError::-> Extencion incorrecta\n");
- ErrorEliminarDisco++;
- }else{
- int encontro=0;
- FILE *fp;
- fp = fopen (funcion.path, "r" );
- if (fp==NULL) {
- printf("\nError::->Disco no encontrado\n");
- ErrorEliminarDisco++;
- }
- else {
- encontro=1;
- fclose ( fp );
- }
- if(encontro==1)
- {
- int opcion;
- printf("%s\n", "¿Desea eliminar el disco?");
- printf("%s\n", "1. SI");
- printf("%s\n", "2. NO");
- printf("%s\n", "");
- printf(">:~$ ");
- scanf("%d",&opcion);
- if(opcion>0 && opcion<3){
- switch(opcion)
- {
- case 1:
- //-----------------------------------------------EliminarParticion(funcion)-----------------------------------------;
- printf("Eliminando Particion...\n");
- strcpy(finalizado,"\nrm \"");
- strcat(finalizado,funcion.path);
- strcat(finalizado,"\"");
- printf("\n%s\n",finalizado);
- system(finalizado);
- limpiarvar(finalizado,100);
- printf("'EIMINACION DE DISCO EXITOSA'\n");
- ContadorComandosExitosos++;
- break;
- case 2:
- printf("-------------------------Eliminacion Cancelada-------------------\n");
- break;
- default:
- printf("Error::-> Opcion Incorrecta \n");
- break;
- }
- }else
- {
- opcion=1;
- printf(" \n");
- printf("%s\n", "Error::-> Opcion incorrecta ");
- }
- }
- }
- }
- void OrdenarEspacios (MbrDisco * mbr)
- {
- Particion aux;
- for (int i=0;i<4;i++) {
- for (int j=0;j<4;j++) {
- if(j!=3)
- {
- if(mbr->particiones[j].part_start>mbr->particiones[j+1].part_start)
- {
- aux=mbr->particiones[j];
- mbr->particiones[j]=mbr->particiones[j+1];
- mbr->particiones[j+1]=aux;
- }
- }
- }
- }
- }
- void Insertar(Espacios * lista,Bloque * nueva)
- {
- if(lista->primero==NULL)
- {
- lista->primero=nueva;
- lista->ultimo=nueva;
- }else {
- nueva->siguiente=lista->primero;
- lista->primero=nueva;
- }
- }
- int Entra(long inicio,long fin,long tamano)
- {
- int espacio=fin-inicio;
- if(espacio>=tamano)
- {
- return 1;
- }else
- {
- return 0;
- }
- }
- void insertarEspacio(Espacios *lista, Bloque *bloque){
- if(lista->primero == NULL){
- lista->primero = bloque;
- lista->ultimo = bloque;
- }
- else
- {
- if(lista->primero->tamano>bloque->tamano)///insertar al inicio
- {
- bloque->siguiente=lista->primero;
- lista->primero->anterior=bloque;
- lista->primero=bloque;
- }
- //printf("entro al insertar cuando no esta vacia \n");
- Bloque *aux = lista->primero;
- while(aux->siguiente!=NULL)
- {
- //printf("el siguiente no es nulo\n");
- Bloque *sigui = aux->siguiente;
- while(sigui->tamano < bloque->tamano)
- {
- if(aux->siguiente==NULL){
- break;
- }
- aux = aux->siguiente;
- if(aux->siguiente==NULL){
- break;
- }
- sigui = aux->siguiente;
- }
- break;
- }
- if(lista->ultimo->tamano < bloque->tamano)///Instertar al final
- {
- lista->ultimo->siguiente = bloque;
- bloque->anterior=lista->ultimo;
- lista->ultimo = bloque;
- }
- else if(lista->primero->tamano>bloque->tamano)///Insertar al inicio
- {
- bloque->siguiente=lista->primero;
- lista->primero->anterior=bloque;
- lista->primero=bloque;
- }
- else///insertar en medio
- {
- Bloque *auxSiguiente = aux->siguiente;
- aux->siguiente=bloque;
- bloque->anterior=aux;
- bloque->siguiente=auxSiguiente;
- auxSiguiente->anterior=bloque;
- }
- }
- }
- int EspacioFF(MbrDisco mbr,int tamano)
- {
- int espacio=-1;
- int encontro=0;
- if(mbr.particiones[0].part_status=='0')
- {
- espacio=1;
- }else{
- int a[4];
- int n=0;
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_status=='1')
- {
- a[i]=mbr.particiones[i].part_start;
- n++;
- }
- }
- int i,j,aux;
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("\n");
- for(i=0;i<=n;i++){
- for(j=0;j<n-1;j++){
- if(a[j]>a[j+1]){
- aux=a[j];
- a[j]=a[j+1];
- a[j+1]=aux;
- }
- }
- }
- printf("\n");
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("\n");
- for (int j=0;j<4;j++) {
- if(encontro==0)
- {
- for (int i=0;i<4;i++) {
- if(a[j]==mbr.particiones[i].part_start)
- {
- printf("Espacio-> %d\n",a[j]);
- int AntVacio=0;
- int Ant=0;
- int SigVacio=0;
- int Sig=0;
- if(j!=0)
- {
- for (int i=0;i<4;i++) {
- if(a[j-1]==mbr.particiones[i].part_start)
- {
- Ant=i;
- AntVacio=1;
- break;
- }
- }
- }
- if(j!=3)
- {
- for (int i=0;i<4;i++) {
- if(a[j+1]==mbr.particiones[i].part_start)
- {
- SigVacio=i;
- Sig=1;
- break;
- }
- }
- }
- if(j==0)
- {
- printf("Entre principio y primero\n");
- printf("Inicio %d\n",1);
- printf("Fin %d\n",mbr.particiones[i].part_start);
- int a=mbr.particiones[i].part_start;
- int b=1;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- espacio=b;
- encontro=1;
- break;
- }
- if(SigVacio==0)
- {
- printf("Primero y final\n");
- printf("Inicio %d\n",mbr.particiones[i].part_start+mbr.particiones[i].part_size);
- printf("Fin %d\n",mbr.mbr_tamano);
- int a=mbr.mbr_tamano;
- int b=mbr.particiones[i].part_start+mbr.particiones[i].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- espacio=b;
- encontro=1;
- break;
- }
- }
- }
- else
- {
- printf("Entre %d y %d\n",j,j+1);
- printf("Inicio %d\n",mbr.particiones[Ant].part_start+mbr.particiones[Ant].part_size);
- printf("Fin %d\n",mbr.particiones[i].part_start);
- int a=mbr.particiones[i].part_start;
- int b=mbr.particiones[Ant].part_start+mbr.particiones[Ant].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- espacio=b;
- encontro=1;
- break;
- }
- if(SigVacio==0)
- {
- printf("%d y final\n",j);
- printf("Inicio %d\n",mbr.particiones[i].part_start+mbr.particiones[i].part_size);
- printf("Fin %d\n",mbr.mbr_tamano);
- int a=mbr.mbr_tamano;
- int b=mbr.particiones[i].part_start+mbr.particiones[i].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- espacio=b;
- encontro=1;
- break;
- }
- }
- }
- break;
- }
- }
- }
- }
- }
- return espacio;
- }
- void RecorrerEspacios(Espacios *lista)
- {
- Bloque *pivote=lista->primero;
- while (pivote!=NULL) {
- printf("--------------------------\n");
- printf("Inicio %d\n",pivote->inicio);
- printf("Fin %d\n",pivote->fin);
- printf("Tamano %d\n",pivote->tamano);
- pivote=pivote->siguiente;
- }
- }
- int BuscarMenor(Espacios *lista,int tamano)
- {
- Bloque *pivote=lista->primero;
- while (pivote!=NULL) {
- if(pivote->tamano>=tamano)
- {
- printf("Encontro espacio en %d\n",pivote->inicio);
- return pivote->inicio;
- }
- pivote=pivote->siguiente;
- }
- return -1;
- }
- int BuscarMayor(Espacios *lista,int tamano)
- {
- Bloque *pivote=lista->ultimo;
- while (pivote!=NULL) {
- if(pivote->tamano>=tamano)
- {
- printf("Encontro espacio en %d\n",pivote->inicio);
- return pivote->inicio;
- }
- pivote=pivote->anterior;
- }
- return -1;
- }
- int EspacioBF(MbrDisco mbr,int tamano)
- {
- printf("Buscando el mejor espacio...");
- int espacio=-1;
- Espacios *lista=(Espacios*)malloc(sizeof (Espacios));
- lista->primero=NULL;
- lista->ultimo=NULL;
- if(mbr.particiones[0].part_status=='0')
- {
- espacio=1;
- return espacio;
- }else{
- int a[4];
- int n=0;
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_status=='1')
- {
- a[i]=mbr.particiones[i].part_start;
- n++;
- }
- }
- int i,j,aux;
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("\n");
- for(i=0;i<=n;i++){
- for(j=0;j<n-1;j++){
- if(a[j]>a[j+1]){
- aux=a[j];
- a[j]=a[j+1];
- a[j+1]=aux;
- }
- }
- }
- printf("\n");
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("\n");
- for (int j=0;j<4;j++) {
- for (int i=0;i<4;i++) {
- if(a[j]==mbr.particiones[i].part_start)
- {
- printf("Espacio-> %d\n",a[j]);
- int AntVacio=0;
- int Ant=0;
- int SigVacio=0;
- int Sig=0;
- if(j!=0)
- {
- for (int i=0;i<4;i++) {
- if(a[j-1]==mbr.particiones[i].part_start)
- {
- Ant=i;
- AntVacio=1;
- break;
- }
- }
- }
- if(j!=3)
- {
- for (int i=0;i<4;i++) {
- if(a[j+1]==mbr.particiones[i].part_start)
- {
- SigVacio=i;
- Sig=1;
- break;
- }
- }
- }
- if(j==0)
- {
- printf("Entre principio y primero\n");
- printf("Inicio %d\n",1);
- printf("Fin %d\n",mbr.particiones[i].part_start);
- int a=mbr.particiones[i].part_start;
- int b=1;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- Bloque *nuevo= (Bloque*)malloc(sizeof (Bloque));
- nuevo->inicio=b;
- nuevo->fin=a;
- nuevo->tamano=po;
- nuevo->siguiente=NULL;
- nuevo->anterior=NULL;
- insertarEspacio(lista,nuevo);
- }
- if(SigVacio==0)
- {
- printf("Primero y final\n");
- printf("Inicio %d\n",mbr.particiones[i].part_start+mbr.particiones[i].part_size);
- printf("Fin %d\n",mbr.mbr_tamano);
- int a=mbr.mbr_tamano;
- int b=mbr.particiones[i].part_start+mbr.particiones[i].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- Bloque *nuevo= (Bloque*)malloc(sizeof (Bloque));
- nuevo->inicio=b;
- nuevo->fin=a;
- nuevo->tamano=po;
- nuevo->siguiente=NULL;
- nuevo->anterior=NULL;
- insertarEspacio(lista,nuevo);
- }
- }
- }
- else
- {
- printf("Entre %d y %d\n",j,j+1);
- printf("Inicio %d\n",mbr.particiones[Ant].part_start+mbr.particiones[Ant].part_size);
- printf("Fin %d\n",mbr.particiones[i].part_start);
- int a=mbr.particiones[i].part_start;
- int b=mbr.particiones[Ant].part_start+mbr.particiones[Ant].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- Bloque *nuevo= (Bloque*)malloc(sizeof (Bloque));
- nuevo->inicio=b;
- nuevo->fin=a;
- nuevo->tamano=po;
- nuevo->siguiente=NULL;
- nuevo->anterior=NULL;
- insertarEspacio(lista,nuevo);
- }
- if(SigVacio==0)
- {
- printf("%d y final\n",j);
- printf("Inicio %d\n",mbr.particiones[i].part_start+mbr.particiones[i].part_size);
- printf("Fin %d\n",mbr.mbr_tamano);
- int a=mbr.mbr_tamano;
- int b=mbr.particiones[i].part_start+mbr.particiones[i].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- Bloque *nuevo= (Bloque*)malloc(sizeof (Bloque));
- nuevo->inicio=b;
- nuevo->fin=a;
- nuevo->tamano=po;
- nuevo->siguiente=NULL;
- nuevo->anterior=NULL;
- insertarEspacio(lista,nuevo);
- }
- }
- }
- break;
- }
- }
- }
- }
- RecorrerEspacios(lista);
- espacio=BuscarMenor(lista,tamano);
- printf("Retornando %d\n",espacio);
- return espacio;
- }
- int EspacioWF(MbrDisco mbr,int tamano)
- {
- printf("Buscando el mejor espacio...");
- int espacio=-1;
- Espacios *lista=(Espacios*)malloc(sizeof (Espacios));
- lista->primero=NULL;
- lista->ultimo=NULL;
- if(mbr.particiones[0].part_status=='0')
- {
- espacio=1;
- return espacio;
- }else{
- int a[4];
- int n=0;
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_status=='1')
- {
- a[i]=mbr.particiones[i].part_start;
- n++;
- }
- }
- int i,j,aux;
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("\n");
- for(i=0;i<=n;i++){
- for(j=0;j<n-1;j++){
- if(a[j]>a[j+1]){
- aux=a[j];
- a[j]=a[j+1];
- a[j+1]=aux;
- }
- }
- }
- printf("\n");
- for(i=0;i<n;i++)
- {
- printf("%d,",a[i]);
- }
- printf("\n");
- for (int j=0;j<4;j++) {
- for (int i=0;i<4;i++) {
- if(a[j]==mbr.particiones[i].part_start)
- {
- printf("Espacio-> %d\n",a[j]);
- int AntVacio=0;
- int Ant=0;
- int SigVacio=0;
- int Sig=0;
- if(j!=0)
- {
- for (int i=0;i<4;i++) {
- if(a[j-1]==mbr.particiones[i].part_start)
- {
- Ant=i;
- AntVacio=1;
- break;
- }
- }
- }
- if(j!=3)
- {
- for (int i=0;i<4;i++) {
- if(a[j+1]==mbr.particiones[i].part_start)
- {
- SigVacio=i;
- Sig=1;
- break;
- }
- }
- }
- if(j==0)
- {
- printf("Entre principio y primero\n");
- printf("Inicio %d\n",1);
- printf("Fin %d\n",mbr.particiones[i].part_start);
- int a=mbr.particiones[i].part_start;
- int b=1;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- Bloque *nuevo= (Bloque*)malloc(sizeof (Bloque));
- nuevo->inicio=b;
- nuevo->fin=a;
- nuevo->tamano=po;
- nuevo->siguiente=NULL;
- nuevo->anterior=NULL;
- insertarEspacio(lista,nuevo);
- }
- if(SigVacio==0)
- {
- printf("Primero y final\n");
- printf("Inicio %d\n",mbr.particiones[i].part_start+mbr.particiones[i].part_size);
- printf("Fin %d\n",mbr.mbr_tamano);
- int a=mbr.mbr_tamano;
- int b=mbr.particiones[i].part_start+mbr.particiones[i].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- Bloque *nuevo= (Bloque*)malloc(sizeof (Bloque));
- nuevo->inicio=b;
- nuevo->fin=a;
- nuevo->tamano=po;
- nuevo->siguiente=NULL;
- nuevo->anterior=NULL;
- insertarEspacio(lista,nuevo);
- }
- }
- }
- else
- {
- printf("Entre %d y %d\n",j,j+1);
- printf("Inicio %d\n",mbr.particiones[Ant].part_start+mbr.particiones[Ant].part_size);
- printf("Fin %d\n",mbr.particiones[i].part_start);
- int a=mbr.particiones[i].part_start;
- int b=mbr.particiones[Ant].part_start+mbr.particiones[Ant].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- Bloque *nuevo= (Bloque*)malloc(sizeof (Bloque));
- nuevo->inicio=b;
- nuevo->fin=a;
- nuevo->tamano=po;
- nuevo->siguiente=NULL;
- nuevo->anterior=NULL;
- insertarEspacio(lista,nuevo);
- }
- if(SigVacio==0)
- {
- printf("%d y final\n",j);
- printf("Inicio %d\n",mbr.particiones[i].part_start+mbr.particiones[i].part_size);
- printf("Fin %d\n",mbr.mbr_tamano);
- int a=mbr.mbr_tamano;
- int b=mbr.particiones[i].part_start+mbr.particiones[i].part_size;
- int po= a-b;
- if(po>0)
- {
- printf("Encontro Espacio\n");
- Bloque *nuevo= (Bloque*)malloc(sizeof (Bloque));
- nuevo->inicio=b;
- nuevo->fin=a;
- nuevo->tamano=po;
- nuevo->siguiente=NULL;
- nuevo->anterior=NULL;
- insertarEspacio(lista,nuevo);
- }
- }
- }
- break;
- }
- }
- }
- }
- RecorrerEspacios(lista);
- espacio=BuscarMayor(lista,tamano);
- printf("Retornando %d\n",espacio);
- return espacio;
- }
- int BuscarEspacionBF(MbrDisco mbr,Funcion funcion,int tamano)
- {
- int espacio=EspacioBF(mbr,tamano);
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_status=='0')
- {
- if(espacio!=-1)
- {
- printf("Ingresara particion en espacio %i\n",espacio);
- mbr.particiones[i].part_start=espacio;
- mbr.particiones[i].part_status='1';
- mbr.particiones[i].part_type=funcion.type;
- int l=0;
- for(int k=0;k<3;k++)
- {
- mbr.particiones[i].part_fit[l++]=funcion.fit[k];
- }
- strcpy(mbr.particiones[i].part_name,funcion.name);
- mbr.particiones[i].part_size=tamano;
- printf("part_status: %c\n",mbr.particiones[i].part_status);
- printf("part_type: %c\n",mbr.particiones[i].part_type);
- printf("part_fit: %s\n",mbr.particiones[i].part_fit);
- printf("part_name: %s\n",mbr.particiones[i].part_name);
- printf("part_size: %i\n",mbr.particiones[i].part_size);
- printf("part_start: %i\n",mbr.particiones[i].part_start);
- mbr.cantParticones++;
- printf("particiones: %i\n",mbr.cantParticones);
- if(mbr.particiones[i].part_type=='E' || mbr.particiones[i].part_type=='E' )
- {
- printf("Es una particion extendida\n");
- EBR ebr;
- ebr.part_next=-1;
- ebr.part_size=0;
- ebr.part_start=mbr.particiones[i].part_start;
- ebr.part_status='0';
- FILE* file= fopen(funcion.path, "rb+");
- printf("EBR inicial dir->%d\n",mbr.particiones[i].part_start+sizeof (MbrDisco));
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fwrite(&ebr, sizeof(EBR), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'EBR CREADO EXITOSAMENTE'\n");
- }
- }
- FILE* file= fopen(funcion.path, "rb+");
- fseek(file,0,SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- ErrorCrearParticion++;
- }
- else
- {
- /*Particion aux;
- for(int i=0;i<=mbr.cantParticones;i++){
- for(int j=0;j<mbr.cantParticones-1;j++){
- printf("%s->%d\n",mbr.particiones[j].part_name,mbr.particiones[j].part_start);
- printf("%s-> %d\n",mbr.particiones[j+1].part_name,mbr.particiones[j+1].part_start);
- if(mbr.particiones[j].part_start>mbr.particiones[j+1].part_start){
- aux=mbr.particiones[j];
- mbr.particiones[j]=mbr.particiones[j+1];
- mbr.particiones[j+1]=aux;
- }
- }
- }
- printf("%d\n",mbr.mbr_disk_signature);
- for (int i=0;i<4;i++) {
- printf("%s\n",mbr.particiones[i].part_name);
- }*/
- fwrite(&mbr, sizeof(MbrDisco), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'CREACION DE PARTICION EXITOSA'\n");
- ContadorComandosExitosos++;
- }
- }else {
- printf("Error::->No se encontro espacio para la particion\n");
- ErrorCrearParticion++;
- }
- break;
- }
- }
- }
- int BuscarEspacionWF(MbrDisco mbr,Funcion funcion,int tamano)
- {
- int espacio=EspacioWF(mbr,tamano);
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_status=='0')
- {
- if(espacio!=-1)
- {
- printf("Ingresara particion en espacio %i\n",espacio);
- mbr.particiones[i].part_start=espacio;
- mbr.particiones[i].part_status='1';
- mbr.particiones[i].part_type=funcion.type;
- int l=0;
- for(int k=0;k<3;k++)
- {
- mbr.particiones[i].part_fit[l++]=funcion.fit[k];
- }
- strcpy(mbr.particiones[i].part_name,funcion.name);
- mbr.particiones[i].part_size=tamano;
- printf("part_status: %c\n",mbr.particiones[i].part_status);
- printf("part_type: %c\n",mbr.particiones[i].part_type);
- printf("part_fit: %s\n",mbr.particiones[i].part_fit);
- printf("part_name: %s\n",mbr.particiones[i].part_name);
- printf("part_size: %i\n",mbr.particiones[i].part_size);
- printf("part_start: %i\n",mbr.particiones[i].part_start);
- mbr.cantParticones++;
- printf("particiones: %i\n",mbr.cantParticones);
- if(mbr.particiones[i].part_type=='E' || mbr.particiones[i].part_type=='E' )
- {
- printf("Es una particion extendida\n");
- EBR ebr;
- ebr.part_next=-1;
- ebr.part_size=0;
- ebr.part_start=mbr.particiones[i].part_start;
- ebr.part_status='0';
- FILE* file= fopen(funcion.path, "rb+");
- printf("EBR inicial dir->%d\n",mbr.particiones[i].part_start+sizeof (MbrDisco));
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fwrite(&ebr, sizeof(EBR), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'EBR CREADO EXITOSAMENTE'\n");
- }
- }
- FILE* file= fopen(funcion.path, "rb+");
- fseek(file,0,SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- ErrorCrearParticion++;
- }
- else
- {
- /*Particion aux;
- for(int i=0;i<=mbr.cantParticones;i++){
- for(int j=0;j<mbr.cantParticones-1;j++){
- printf("%s->%d\n",mbr.particiones[j].part_name,mbr.particiones[j].part_start);
- printf("%s-> %d\n",mbr.particiones[j+1].part_name,mbr.particiones[j+1].part_start);
- if(mbr.particiones[j].part_start>mbr.particiones[j+1].part_start){
- aux=mbr.particiones[j];
- mbr.particiones[j]=mbr.particiones[j+1];
- mbr.particiones[j+1]=aux;
- }
- }
- }
- printf("%d\n",mbr.mbr_disk_signature);
- for (int i=0;i<4;i++) {
- printf("%s\n",mbr.particiones[i].part_name);
- }*/
- fwrite(&mbr, sizeof(MbrDisco), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'CREACION DE PARTICION EXITOSA'\n");
- ContadorComandosExitosos++;
- }
- }else {
- printf("Error::->No se encontro espacio para la particion\n");
- }
- break;
- }
- }
- }
- void BuscarEspacionFF(MbrDisco mbr,Funcion funcion,int tamano)
- {
- int espacio=EspacioFF(mbr,tamano);
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_status=='0')
- {
- if(espacio!=-1)
- {
- printf("Ingresara particion en espacio %i\n",espacio);
- mbr.particiones[i].part_start=espacio;
- mbr.particiones[i].part_status='1';
- mbr.particiones[i].part_type=funcion.type;
- int l=0;
- for(int k=0;k<3;k++)
- {
- mbr.particiones[i].part_fit[l++]=funcion.fit[k];
- }
- strcpy(mbr.particiones[i].part_name,funcion.name);
- mbr.particiones[i].part_size=tamano;
- printf("part_status: %c\n",mbr.particiones[i].part_status);
- printf("part_type: %c\n",mbr.particiones[i].part_type);
- printf("part_fit: %s\n",mbr.particiones[i].part_fit);
- printf("part_name: %s\n",mbr.particiones[i].part_name);
- printf("part_size: %i\n",mbr.particiones[i].part_size);
- printf("part_start: %i\n",mbr.particiones[i].part_start);
- mbr.cantParticones++;
- printf("particiones: %i\n",mbr.cantParticones);
- if(mbr.particiones[i].part_type=='E' || mbr.particiones[i].part_type=='E' )
- {
- printf("Es una particion extendida\n");
- EBR ebr;
- ebr.part_next=-1;
- ebr.part_size=0;
- ebr.part_start=mbr.particiones[i].part_start;
- ebr.part_status='0';
- FILE* file= fopen(funcion.path, "rb+");
- printf("EBR inicial dir->%d\n",mbr.particiones[i].part_start+sizeof (MbrDisco));
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fwrite(&ebr, sizeof(EBR), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'EBR CREADO EXITOSAMENTE'\n");
- }
- }
- FILE* file= fopen(funcion.path, "rb+");
- fseek(file,0,SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- ErrorCrearParticion++;
- }
- else
- {
- fwrite(&mbr, sizeof(MbrDisco), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'CREACION DE PARTICION EXITOSA'\n");
- ContadorComandosExitosos++;
- }
- }else {
- printf("Error::->No se encontro espacio para la particion\n");
- ErrorCrearParticion++;
- }
- break;
- }
- }
- }
- void actualizar(Funcion funcion, MbrDisco mbr)
- {
- FILE* file= fopen(funcion.path, "rb+");
- fseek(file,0,SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fwrite(&mbr, sizeof(MbrDisco), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'DATOS ACTUALIZADOS'\n");
- ContadorComandosExitosos++;
- }
- }
- void CrearParticion(Funcion funcion)
- {
- int bandera=1;
- MbrDisco mbr;
- FILE *fp;
- fp = fopen(funcion.path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&mbr, sizeof(MbrDisco), 1, fp);
- fclose(fp);
- if(funcion.type!='L')
- {
- if(funcion.type=='p' || funcion.type=='P')
- {
- printf("Creando particion primaria...\n");
- }if(funcion.type=='e' || funcion.type=='E')
- {
- printf("Creando particion extendidas...\n");
- int contador=0;
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_type=='e' || mbr.particiones[i].part_type=='E')
- {
- contador++;
- }
- }
- if(contador>=1)
- {
- bandera=0;
- printf("\nError::-> Limite de particiones extendidas\n");
- ErrorCrearParticion++;
- }
- }
- if(bandera==1)
- {
- if(mbr.cantParticones==4)
- {
- printf("--------%s\n",mbr.mbr_fit);
- printf("\nError::-> Limite de particiones en el disco\n");
- ErrorCrearParticion++;
- }else {
- int tamano=0;
- if(funcion.unit=='k'||funcion.unit=='K')
- {
- tamano=funcion.size*1024;
- }
- else if(funcion.unit=='b'||funcion.unit=='B')
- {
- tamano=funcion.size;
- }
- else
- {
- tamano=funcion.size*(1024*1024);
- }
- if(!strcmp(mbr.mbr_fit,"BF"))
- {
- printf("Creando particion con mejor ajuste...\n");
- BuscarEspacionBF(mbr,funcion,tamano);
- //actualizar(funcion,mbr);
- }
- if(!strcmp(mbr.mbr_fit,"FF"))
- {
- printf("Creando particion con primer ajuste...\n");
- BuscarEspacionFF(mbr,funcion,tamano);
- //actualizar(funcion,mbr);
- }
- if(!strcmp(mbr.mbr_fit,"WF"))
- {
- printf("Creando particion con peor ajuste...\n");
- BuscarEspacionWF(mbr,funcion,tamano);
- // actualizar(funcion,mbr);
- }
- }
- }
- }else {
- printf("Creando particion logica...\n");
- int contador=0;
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_type=='e' || mbr.particiones[i].part_type=='E')
- {
- contador++;
- }
- }
- if(contador==0)
- {
- bandera=0;
- printf("\nError::-> No existen particiones extendidas\n");
- ErrorCrearParticion++;
- }
- }
- }
- }
- void Exec(Funcion funcion)
- {
- FILE *fichero;
- char caracter;
- char comando[500];
- fichero = fopen(funcion.path, "rt");
- if (fichero == NULL) {
- printf("Error::-> No se ha podido abrir en script");
- } else {
- caracter = fgetc(fichero);
- while (feof(fichero) == 0) {
- if(caracter=='\n' )
- {
- printf("\n-> %s\n",comando);
- Interprete(comando);
- limpiarvar(comando,100);
- }else {
- char nuevoCaracter[1];
- nuevoCaracter[0]=caracter;
- strncat(comando,nuevoCaracter,1);
- }
- caracter = fgetc(fichero);
- }
- printf("\n-> %s\n",comando);
- Interprete(comando);
- limpiarvar(comando,100);
- fclose(fichero);
- ContadorComandosExitosos++;
- }
- }
- void Recorrer()
- {
- Montura *pivote=sistema->primero;
- while (pivote!=NULL) {
- printf("--------------------------\n");
- printf("%s\n",pivote->name);
- printf("%s\n",pivote->path);
- pivote=pivote->siguiente;
- }
- }
- Retorno buscarEnSistema(Funcion funcion)
- {
- int bandera=0;
- Retorno r;
- r.disco=0;
- r.particion=0;
- Montura *pivote=sistema->primero;
- while (pivote!=NULL) {
- if(!strcmp(funcion.path,pivote->path) && strcmp(funcion.name,pivote->nombre))
- {
- r.particion++;
- }
- pivote=pivote->siguiente;
- }
- pivote=sistema->primero;
- Montura *anterior=pivote;
- while (pivote!=NULL) {
- if(!strcmp(funcion.path,pivote->path))
- {
- bandera=1;
- break;
- }
- printf("%s\n",pivote->path);
- printf("%s\n",anterior->path);
- if(strcmp(anterior->path,pivote->path)){
- r.disco++;
- }
- anterior=pivote;
- pivote=pivote->siguiente;
- }
- if(bandera==0 && sistema->primero!=NULL)
- {
- r.disco++;
- }
- return r;
- }
- Montura *DeterminarNombre(Funcion funcion)
- {
- Montura *nueva;
- nueva=(Montura*)malloc(sizeof (Montura));
- int bandera=0;
- MbrDisco mbr;
- FILE *fp;
- fp = fopen(funcion.path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&mbr, sizeof(MbrDisco), 1, fp);
- fclose(fp);
- for (int i=0;i<4;i++) {
- if(!strcmp(mbr.particiones[i].part_name,funcion.name))
- {
- strcpy(nueva->nombre,mbr.particiones[i].part_name);
- strcpy(nueva->path,funcion.path);
- bandera=1;
- break;
- }
- }
- if(bandera==1)
- {
- printf("Se encontro la particion\n");
- char nom[10];
- Retorno r= buscarEnSistema(funcion);
- printf("Discos: %i\n",r.disco);
- printf("Particiones: %i\n",r.particion);
- char x[1];
- x[0]=r.disco+97;
- int y= r.particion+1;
- char d[3];
- strcat(nom,"vd");
- strncat(nom,x,1);
- sprintf(d, "%d",y);
- strcat(nom,d);
- printf("Id: %s\n",nom);
- nueva->siguiente=NULL;
- strcpy(nueva->name,nom);
- limpiarvar(x,1);
- limpiarvar(d,3);
- limpiarvar(nom,10);
- return nueva;
- }else {
- printf("\n Error::-> No se encontro la particion\n");
- }
- }
- return NULL;
- }
- void montar(Montura * nueva)
- {
- if(sistema->primero==NULL)
- {
- sistema->primero=nueva;
- sistema->ultimo=nueva;
- }else {
- nueva->siguiente=sistema->primero;
- sistema->primero=nueva;
- }
- }
- void desmontar(Funcion funcion)
- {
- int bandera=0;
- Montura *pivote=sistema->primero;
- Montura * anterior=pivote;
- while (pivote!=NULL) {
- if(!strcmp(funcion.id,pivote->name))
- {
- if(!strcmp(pivote->name,sistema->primero->name))
- {
- printf("Primero\n");
- sistema->primero=sistema->primero->siguiente;
- free(pivote);
- }
- else if(!strcmp(pivote->name,sistema->ultimo->name))
- {
- printf("Ultimo\n");
- anterior->siguiente=NULL;
- sistema->ultimo=anterior;
- free(pivote);
- }else
- {
- printf("Medio\n");
- anterior->siguiente=pivote->siguiente;
- pivote->siguiente=NULL;
- free(pivote);
- }
- bandera=1;
- break;
- }
- anterior=pivote;
- pivote=pivote->siguiente;
- }
- if(bandera==0)
- {
- printf("\nNo se encontro ninguna particion montada con ese nombre\n");
- }else {
- printf("\nParticion desmontada\n");
- }
- }
- // HERRAMIENTAS----------------------------------------------------------------------------------------------------------------------------------
- void limpiarvar(char aux[], int n) {
- int i;
- for (i = 0; i < n; i++) {
- aux[i] = '\0';
- }
- }
- void quitarComillas (char a[100]){
- limpiarvar(sincomillas,1000);
- char pathauxiliar[100];
- strcpy(pathauxiliar,a);
- char finalizado[100];
- strcpy(finalizado,"cd /\n");
- if(pathauxiliar[0]=='\"')
- {
- limpiarvar(a,100);
- int q=1;
- while(pathauxiliar[q]!='\"')
- {
- char nuevaCadena[1];
- nuevaCadena[0]=pathauxiliar[q];
- strncat(a,nuevaCadena,1);
- q++;
- }
- }
- strcpy(sincomillas,a);
- }
- void LimpiarVariables (){
- comentario=0;
- ErrorInterprete=0;
- ErrorComando=0;
- ErrorCrearDisco=0;
- ErrorEliminarDisco=0;
- ErrorCrearParticionLogica=0;
- ErrorEliminarLogica=0;
- ErrorReporte1=0;
- ErrorReporte2=0;
- ContadorInstrucciones=0;
- ContadorComandosExitosos=0;
- fin=0;
- }
- int EsLetra(char caracter)
- {
- if((caracter >= 'a' && caracter <= 'z' ) || (caracter >= 'A' && caracter <= 'Z' ))
- {
- return 1;
- }else
- {
- return 0;
- }
- }
- //0 si la cadena es numero
- int CadenaEsNumero(char entrada[])
- {
- int resultado=0;
- int contador=0;
- while(entrada[contador])
- {
- if(EsNumero(entrada[contador])==0)
- {
- resultado++;
- }
- contador++;
- }
- return resultado;
- }
- int EsNumero (char caracter[])
- {
- if(caracter >= '0' && caracter <= '9')
- {
- return 1;
- }else
- {
- return 0;
- }
- }
- void AgregarEspacio(Funcion funcion)
- {
- MbrDisco mbr;
- int bandera=0;
- FILE *fp;
- fp = fopen(funcion.path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&mbr, sizeof(MbrDisco), 1, fp);
- fclose(fp);
- for (int i=0;i<4;i++) {
- if(!strcmp(funcion.name,mbr.particiones[i].part_name))
- {
- bandera=1;
- long espacio;
- if(i==3)
- {
- espacio= mbr.mbr_tamano-(mbr.particiones[i+1].part_start+mbr.particiones[i+1].part_size);
- }else {
- if(mbr.particiones[i+1].part_status=='1')
- {
- espacio= mbr.particiones[i+1].part_start-(mbr.particiones[i+1].part_start+mbr.particiones[i+1].part_size);
- }else
- {
- espacio= mbr.mbr_tamano-(mbr.particiones[i+1].part_start+mbr.particiones[i+1].part_size);
- }
- }
- if(espacio>funcion.tamano)
- {
- printf("%d\n",mbr.mbr_disk_signature);
- printf("%s\n",mbr.mbr_fit);
- mbr.particiones[i].part_size=mbr.particiones[i].part_size+funcion.tamano;
- FILE* file= fopen(funcion.path, "rb+");
- fseek(file,0,SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fwrite(&mbr, sizeof(MbrDisco), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'PARTICION AMPLIADA EXITOSAMENTE'\n");
- ContadorComandosExitosos++;
- }
- }else
- {
- printf("No hay espacio para ampliar la particion\n");
- }
- break;
- }
- }
- if(bandera==0)
- {
- printf("No se encontro la particion\n");
- }
- }
- }
- void QuitarEspacio(Funcion funcion)
- {
- MbrDisco mbr;
- int bandera=0;
- FILE *fp;
- fp = fopen(funcion.path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&mbr, sizeof(MbrDisco), 1, fp);
- fclose(fp);
- for (int i=0;i<4;i++) {
- if(!strcmp(funcion.name,mbr.particiones[i].part_name))
- {
- bandera=1;
- if(mbr.particiones[i].part_size-funcion.tamano>0)
- {
- mbr.particiones[i].part_size=mbr.particiones[i].part_size-funcion.tamano;
- FILE* file= fopen(funcion.path, "rb+");
- fseek(file,0,SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fwrite(&mbr, sizeof(MbrDisco), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'PARTICION REDUCIDA EXITOSAMENTE'\n");
- ContadorComandosExitosos++;
- }
- }else
- {
- printf("No se puede reducir\n");
- }
- break;
- }
- }
- if(bandera==0)
- {
- printf("No se encontro la particion\n");
- }
- }
- }
- void EliminarParticion(Funcion funcion)
- {
- MbrDisco mbr;
- int bandera=0;
- FILE *fp;
- fp = fopen(funcion.path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- ErrorEliminarParticion++;
- }else {
- fread(&mbr, sizeof(MbrDisco), 1, fp);
- fclose(fp);
- for (int i=0;i<4;i++) {
- if(!strcmp(funcion.name,mbr.particiones[i].part_name))
- {
- bandera=1;
- switch (i) {
- case 0:
- mbr.particiones[0]=mbr.particiones[1];
- mbr.particiones[1]=mbr.particiones[2];
- mbr.particiones[2]=mbr.particiones[3];
- mbr.particiones[3].part_start=-1;
- mbr.particiones[3].part_status='0';
- mbr.particiones[3].part_size=0;
- break;
- case 1:
- mbr.particiones[1]=mbr.particiones[2];
- mbr.particiones[2]=mbr.particiones[3];
- mbr.particiones[3].part_start=-1;
- mbr.particiones[3].part_status='0';
- mbr.particiones[3].part_size=0;
- break;
- case 2:
- mbr.particiones[2]=mbr.particiones[3];
- mbr.particiones[3].part_start=-1;
- mbr.particiones[3].part_status='0';
- mbr.particiones[3].part_size=0;
- break;
- case 3:
- mbr.particiones[3].part_start=-1;
- mbr.particiones[3].part_status='0';
- mbr.particiones[3].part_size=0;
- break;
- }
- FILE* file= fopen(funcion.path, "rb+");
- fseek(file,0,SEEK_SET);
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- ErrorEliminarParticion++;
- }
- else
- {
- mbr.cantParticones--;
- fwrite(&mbr, sizeof(MbrDisco), 1, file);//escribiendo la estructura del MBR
- fclose(file);
- printf("'PARTICION ELIMINADA EXITOSAMENTE'\n");
- ContadorComandosExitosos++;
- }
- break;
- }
- }
- if(bandera==0)
- {
- printf("No se encontro la particion\n");
- ErrorEliminarParticion++;
- }
- }
- }
- int BuscarEspacioLogicaFF(EBR ebr,Funcion funcion,int inicio,MbrDisco mbr,EBR ebrNuevo)
- {
- printf("Buscando espacios en particion extendida\n");
- int siguiente=ebr.part_next;
- EBR sig;
- EBR actual=ebr;
- int contador=0;
- while (siguiente!=-1) {
- printf("Siguiente existe\n");
- FILE *fp;
- fp = fopen(funcion.path, "rb");
- fseek(fp,siguiente+sizeof(EBR)+sizeof (MbrDisco),SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&sig, sizeof(EBR), 1, fp);
- fclose(fp);
- }
- printf("Siguiente empieza en %d\n",siguiente+206);
- printf("Siguiente es %s\n",sig.part_name);
- if(contador==0)
- {
- printf("Primer particion logica\n");
- printf("Inicio-> %d\n",inicio);
- printf("Actual-> %d\n",actual.part_start+206);
- printf("tamano-> %d\n",funcion.tamano+206);
- if(inicio-actual.part_start>=funcion.tamano)
- {
- printf("Encontro Espacio entre el principio y la primera particion\n");
- FILE* file= fopen(funcion.path, "rb+");
- // estableciendo puntero al inicio
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- EBR ebri;
- ebri.part_next=inicio;
- ebri.part_size=0;
- ebri.part_start=0;
- ebri.part_status='0';
- ebrNuevo.part_start=inicio;
- ebrNuevo.part_next=actual.part_start;
- printf("Nuevo inicia en %d\n",ebrNuevo.part_start+206);
- printf("Nuevo siguiente esta en %d\n\n",ebrNuevo.part_next+206);
- fseek(file,inicio+sizeof (MbrDisco),SEEK_SET);
- fwrite(&ebri, sizeof(EBR), 1, file);
- fseek(file,inicio+sizeof(EBR)+sizeof (MbrDisco),SEEK_SET);
- fwrite(&ebrNuevo, sizeof(EBR), 1, file);
- fclose(file);
- printf("'CREACION DE PARTICION EXITOSA'\n");
- }
- return inicio;
- }
- }
- if(sig.part_start-(actual.part_start+actual.part_size)>=funcion.tamano)
- {
- printf("Encontro Espacio en medio\n");
- FILE* file= fopen(funcion.path, "rb+");
- // estableciendo puntero al inicio
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- actual.part_next=actual.part_start+actual.part_size;
- ebrNuevo.part_start=actual.part_start+actual.part_size;
- ebrNuevo.part_next=sig.part_start;
- printf("Actual inicia en %d\n",actual.part_start+206);
- printf("Actual siguiente esta en %d\n",actual.part_next+206);
- printf("Nuevo inicia en %d\n",ebrNuevo.part_start+206);
- printf("Nuevo siguiente esta en %d\n\n",ebrNuevo.part_next+206);
- fseek(file,actual.part_start+sizeof(EBR)+sizeof (MbrDisco),SEEK_SET);
- fwrite(&actual, sizeof(EBR), 1, file);
- fseek(file,ebrNuevo.part_start+sizeof(EBR)+sizeof (MbrDisco),SEEK_SET);
- fwrite(&ebrNuevo, sizeof(EBR), 1, file);
- fclose(file);
- printf("'CREACION DE PARTICION EXITOSA'\n");
- }
- return actual.part_start+actual.part_size;
- }
- actual=sig;
- siguiente=actual.part_next;
- contador++;
- }
- printf("Encontro Espacio al final\n");
- FILE* file= fopen(funcion.path, "rb+");
- // estableciendo puntero al inicio
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- actual.part_next=actual.part_start+actual.part_size;
- ebrNuevo.part_start=actual.part_start+actual.part_size;
- ebrNuevo.part_next=-1;
- printf("Actual inicia en %d\n",actual.part_start+206);
- printf("Actual siguiente esta en %d\n",actual.part_next+206);
- printf("Nuevo inicia en %d\n",ebrNuevo.part_start+206);
- printf("Nuevo siguiente esta en %d\n\n",ebrNuevo.part_next+206);
- printf("EBR actual dir->%d\n",actual.part_start+sizeof (MbrDisco));
- fseek(file,actual.part_start+sizeof (MbrDisco),SEEK_SET);
- fwrite(&actual, sizeof(EBR), 1, file);
- printf("EBR nuevo dir->%d\n",ebrNuevo.part_start+sizeof(EBR)+sizeof (MbrDisco));
- fseek(file,ebrNuevo.part_start+sizeof(EBR)+sizeof (MbrDisco),SEEK_SET);
- fwrite(&ebrNuevo, sizeof(EBR), 1, file);
- fclose(file);
- printf("'CREACION DE PARTICION EXITOSA'\n");
- }
- return actual.part_start+actual.part_size;
- }
- CrearParticionLogica(Funcion funcion)
- {
- MbrDisco mbr;
- FILE *fp;
- fp = fopen(funcion.path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&mbr, sizeof(MbrDisco), 1, fp);
- fclose(fp);
- }
- int inicio;
- //Creamos el ebr con sus atributos-------------------------------------------------------
- EBR ebr;
- int l=0;
- for(int k=0;k<3;k++)
- {
- ebr.part_fit[l++]=funcion.fit[k];
- }
- ebr.part_next=-1;
- ebr.part_size=funcion.tamano;
- ebr.part_status='1';
- strcpy(ebr.part_name,funcion.name);
- ebr.part_type=funcion.type;
- for (int i=0;i<4;i++) {
- if(mbr.particiones[i].part_type=='E' || mbr.particiones[i].part_type=='e')
- {
- inicio=mbr.particiones[i].part_start;
- }
- }
- printf("Particion extendida inicia en %d\n",inicio);
- //Leemos el primer ebr de la particion extendida-----------------------------------------------------
- EBR lec;
- fp = fopen(funcion.path, "rb");
- printf("EBR inicial dir->%d\n",inicio+sizeof (MbrDisco));
- fseek(fp,inicio+sizeof (MbrDisco),SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- printf("Lectura de ebr inicial siguiente-> %d\n",lec.part_next+sizeof(EBR)+sizeof (MbrDisco));
- fread(&lec, sizeof(EBR), 1, fp);
- fclose(fp);
- }
- //----------------------------------------------------------------------------------------
- BuscarEspacioLogicaFF(lec,funcion,inicio,mbr,ebr);
- }
- void Interprete(char entrada[])
- {
- Funcion nuevafuncion;
- int size=0;
- int unit=0;
- int path=0;
- int type=0;
- int name=0;
- int contenido=0;
- int delete_=0;
- int add=0;
- int fit=0;
- int fs=0;
- int id=0;
- int numeroparametros=0;
- int contador=0;
- int p=0;
- int count=0;
- int activarmount=0;
- int contadorParametrosObligatorios=0;
- char instruccion[100];
- limpiarvar(instruccion,100);
- char nombreparametro[100];
- limpiarvar(nombreparametro,100);
- char parametro[1000];
- limpiarvar(parametro,1000);
- nuevafuncion.count2=0;
- int pa=0;
- printf("Reconociendo comando...\n");
- printf("---------------------Lectura Comando--------------------\n");
- //INICIO----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- while(entrada[contador]!=NULL){//While Comando NULO
- if(entrada[contador]=='#')//------------------------->COMENTARIO-----------------------------------------------------------------------------------------------------------
- {
- //printf("Reconocio: COMENTARIO\n");
- while(entrada[contador]!='\n' && entrada[contador]!='\0')
- {
- comentario=1;
- contador++;
- }
- printf("Comentario");
- }
- else if(entrada[contador]==' ')//-------------------->ESPACIO EN BLANCO--------------------------------------------------------------------------------------------------------------------------
- {
- //printf("Reconocio(): ESPACIO\n");
- contador++;
- }else if(EsLetra(entrada[contador])==1){//------------>LETRA--------------------------------------------------------------------------------------------------------------------------------------
- while(EsLetra(entrada[contador])==1)
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=entrada[contador];
- strncat(instruccion,nuevoCaracter,1);
- contador++;
- }
- size=0;
- unit=0;
- path=0;
- type=0;
- fit=0;
- delete_=0;
- name=0;
- add=0;
- numeroparametros=0;
- id=0;
- contenido=0;
- fs=0;
- //Quitar Mayusculas----------------------------------------------------------------------------------------------------------------------------------------
- int contadormay=0;
- while(instruccion[contadormay])
- {
- instruccion[contadormay]=tolower(instruccion[contadormay]);
- contadormay++;
- }
- strcpy(nuevafuncion.nombre,instruccion);
- printf("----%s----\n", nuevafuncion.nombre);
- }else if((entrada[contador]=='-' || entrada[contador]=='\–')){//--------------------------->Parametro--------------------------------------------------------------------------------------
- numeroparametros++;
- contador++;
- while(entrada[contador]!='~')//limite del parametro(-Size~:~3000)
- {
- //Guardar nombre parametro
- char nuevoCaracter[1];
- nuevoCaracter[0]=entrada[contador];
- strncat(nombreparametro,nuevoCaracter,1);
- contador++;
- }
- //tomar valor del parametro (~:~)
- if(entrada[contador]=='~' && entrada[contador+1]==':' && entrada[contador+2]=='~'){
- //si encuentra los simbolos
- //pa=1;
- contador=contador+3;//saltarse la flecha
- int contadorpar=0;
- while(nombreparametro[contadorpar])// cambiar a minusculas el nombre del parametro
- {
- nombreparametro[contadorpar]=tolower(nombreparametro[contadorpar]);
- contadorpar++;
- }
- printf("%s::= ",nombreparametro);
- char prueba;
- if(entrada[contador]!='\"')//si no hay comillas en el contenido del parametro
- {
- while(entrada[contador]!=' ' && entrada[contador]!='\n' && entrada[contador]!='#' && entrada[contador]!=NULL)
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=entrada[contador];
- strncat(parametro,nuevoCaracter,1);
- contador++;
- }
- printf(" %s\n",parametro);
- char fn[1];
- fn[0]='\0';
- strncat(parametro,fn,1);
- }else //si existieran comillas en el parametro
- {
- char nuevoCaracter[1];
- nuevoCaracter[0]=entrada[contador];
- strncat(parametro,nuevoCaracter,1);
- contador++;
- while(entrada[contador]!='\"') //&& entrada[contador]!=' ' esto se quita si truena
- {
- prueba=entrada[contador];
- char nuevoCaracter[1];
- nuevoCaracter[0]=entrada[contador];
- strncat(parametro,nuevoCaracter,1);
- contador++;
- }
- char y6[1];
- y6[0]=entrada[contador];
- strncat(parametro,y6,1);
- contador++;
- char fn[1];
- fn[0]='\0';
- strncat(parametro,fn,1);
- printf(" con Comillas -> %s\n",parametro);
- }
- //pa=0;
- }else{
- printf("Error::-> Sintaxis Incorrecta Esperaba '->' \n");
- ErrorInterprete++;
- }
- //Inicia el Reconocimiento de los Parametros
- if(!strcmp(nombreparametro,"size"))//---------------Reconocio size----------------------------------------------------------------------
- {
- //Validar mayor que >0
- size=1;
- if(EsNumero(parametro)==0)
- {
- nuevafuncion.size=atoi(parametro);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else{
- printf("\nError::-> Parametro de 'size' Invalido \n\n");
- ErrorInterprete++;
- size=0;
- }
- }else if(!strcmp(nombreparametro,"path"))//------------Reconocio path----------------------------------------------------------------------------------------------
- {
- path=1;
- strcpy(nuevafuncion.path,parametro);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"id"))//------------Reconocio id----------------------------------------------------------------------------------------------
- {
- id=1;
- strcpy(nuevafuncion.id,parametro);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"unit"))//------------Reconocio unit-------------------------------------------------------------------------------------------------
- {
- unit=2;
- // solo my k valores correctos
- if(parametro[0]=='m' || parametro[0]=='k'||parametro[0]=='M' || parametro[0]=='K'||parametro[0]=='b' || parametro[0]=='B')
- {
- nuevafuncion.unit=parametro[0];
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }
- else
- {
- unit=0;
- printf("\nError::-> Parametro 'unit' Invalido \n\n");
- ErrorInterprete++;
- }
- }else if(!strcmp(nombreparametro,"fit"))//--------------Reconocio fit-------------------------------------------------------------------------------------------------
- {
- fit=2;
- if(!strcmp(parametro,"bf") || !strcmp(parametro,"ff") || !strcmp(parametro,"wf")||!strcmp(parametro,"BF") || !strcmp(parametro,"FF") || !strcmp(parametro,"WF") )
- {
- strcpy(nuevafuncion.fit,parametro);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }
- else
- {
- fit=0;
- printf("\nError::-> Parametro 'fit' Invalido \n\n");
- ErrorInterprete++;
- }
- }else if(!strcmp(nombreparametro,"name"))//---------------Reconocio name--------------------------------------------------------------------------------------------------
- {
- name=1;
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.name,sincomillas);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"type"))//------------------reconoce type
- {
- type=2;
- if(parametro[0]=='p' || parametro[0]=='e' || parametro[0]=='l'||parametro[0]=='P' || parametro[0]=='E' || parametro[0]=='L'){
- nuevafuncion.type=parametro[0];
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }/*else if(!strcmp(parametro,"fast") || !strcmp(parametro,"full")){
- strcpy(nuevafuncion.typeFormatear,parametro);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }*/
- else{
- type=0;
- printf("\nError::-> Parametro 'type' Invalido \n\n");
- ErrorInterprete++;
- }
- }else if(!strcmp(nombreparametro,"delete"))//------------------reconoce delete
- {
- delete_=2;
- if((!strcmp(parametro,"fast")) || (!strcmp(parametro,"full"))||(!strcmp(parametro,"FULL")) || (!strcmp(parametro,"FAST")) )
- {
- strcpy(nuevafuncion.delete_,parametro);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }
- else
- {
- delete_=0;
- printf("\nError::-> Parametro 'delete' Invalido \n\n");
- ErrorInterprete++;
- }
- }else if(!strcmp(nombreparametro,"add"))//--------------------reconoce add
- {
- add=2;
- if(CadenaEsNumero(parametro)==0)
- {
- nuevafuncion.add=atoi(parametro);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }
- else if(parametro[0]=='-')
- {
- nuevafuncion.add=atoi(parametro)*-1;
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- add=1;
- }
- else{
- printf("\nError::-> Parametro 'add' Invalido\n\n");
- ErrorInterprete++;
- add=0;
- }
- }else{
- printf("Error::-> Parametro Opcional Invalido \n\n");
- ErrorInterprete++;
- }
- }else if(entrada[contador]=='\n'){//--------------------------->Salto de Linea------------------------------------------------------------------------------------------
- }//Fin Salto Linea
- else{ //------------------------------------------------------->SEGUIR AVANZANDO LA CADENA
- contador++;
- }
- }//Fin While Detectar comando
- printf("--------------------Ejecucion Comando-------------------\n");
- printf("Ejecutando comando...\n");
- //Verifica que sea el fin y no Existan errores en el interprete
- if(ErrorInterprete==0 && fin==0){
- if(instruccion!=NULL||instruccion[0]!='\0'){
- if(!strcmp(instruccion,"mkdisk")){//----------------------------->mkdisk--------------------------------------------------------
- printf("////MKDISK////\n");
- if(unit==0){
- printf("Colocando unit megas...\n");
- nuevafuncion.unit='m';
- }else{
- if(nuevafuncion.unit=='b'){
- printf("\nError::-> Unidad no permitida para Mkdisk\n\n");
- printf("Colocando unit megas...\n");
- nuevafuncion.unit='m';
- }else{
- }
- }
- if(fit==0){
- printf("Colocando fit primer ajuste...\n");
- strcpy(nuevafuncion.fit,"FF");
- }
- if(unit==0 && numeroparametros==3 && path==1 && fit==2 && size==1)
- {
- printf("Creando disco...\n\n");
- CrearDisco(nuevafuncion);
- limpiarvar(instruccion,100);
- }
- else if(unit==2 && numeroparametros==4 && path==1 && fit==2 && size==1)
- {
- printf("Creando disco... \n\n");
- CrearDisco(nuevafuncion);
- limpiarvar(instruccion,100);
- }
- else if(unit==2 && numeroparametros==3 && path==1 && fit==0 && size==1)
- {
- printf("Creando disco... \n\n");
- CrearDisco(nuevafuncion);
- limpiarvar(instruccion,100);
- }
- else if(unit==0 && numeroparametros==2 && path==1 && fit==0 && size==1)
- {
- printf("Creando disco... \n\n");
- CrearDisco(nuevafuncion);
- limpiarvar(instruccion,100);
- }
- else
- {
- printf("Error::-> Parametros 'mkdisk' Invalidos\n\n");
- ErrorComando++;
- }
- ContadorInstrucciones++;
- limpiarvar(instruccion,100);
- //fin del mkdisk
- }else if(!strcmp(instruccion,"fdisk")){//------------------------------------------->fdisk-------------------------------------------------------------------
- printf("////FDISK////\n");
- ContadorInstrucciones++;
- if((name==1 && path==1 && delete_==0 && add==0 && size==1) ||(name==1 && path==1 && delete_!=0 && add==0) || (name==1 && path==1 && delete_==0 && add!=0 ) ||(name==1 && path==1 && delete_!=0 && add!=0 && size==1) )
- {
- if(unit==0){
- printf("Colocando unit en kilobytes...\n");
- nuevafuncion.unit='k';
- }
- if(type==0){
- printf("Colocando type primaria...\n");
- nuevafuncion.type='p';
- }
- if(fit==0){
- printf("Colocando fit peor ajuste...\n");
- strcpy(nuevafuncion.fit,"wf");
- }
- /*if(allocation==0){
- printf("Colocando allocation Aleatorio...\n");
- strcpy(nuevafuncion.allocation,"IX");
- }*/
- if(nuevafuncion.unit=='b' || nuevafuncion.unit=='B')
- {
- nuevafuncion.tamano=nuevafuncion.add;
- }else if(nuevafuncion.unit=='k' || nuevafuncion.unit=='K')
- {
- nuevafuncion.tamano=nuevafuncion.add*1024;
- }else
- {
- nuevafuncion.tamano=nuevafuncion.add*(1024*1024);
- }
- if((add==1 && delete_==1)||(add==2 && delete_==2)||(add==1 && delete_==2)||(add==2 && delete_==1))
- {
- printf("\nError::-> Parametros 'fdisk' Invalidos(add y delete estan juntos)\n\n");
- ErrorComando++;
- }else if(add==2 && delete_==0||add==1 && delete_==0){//---------AUMENTAR TAMAÑO
- if(add==2){// agrega espacio
- printf("Aumentando...\n");
- AgregarEspacio(nuevafuncion);
- }else
- if(add==1){ //quita espacio
- printf("Reduciendo...\n");
- QuitarEspacio(nuevafuncion);
- }else{
- printf("\nError::-> Parametros 'fdisk' Invalidos error en add\n\n");
- ErrorComando++;
- }
- limpiarvar(instruccion,100);
- }else if(add==0 && delete_==2){//_----------------------------------->Elimnar Particion-----------------------------------------------
- if(nuevafuncion.type=='p' || nuevafuncion.type=='e'||nuevafuncion.type=='P' || nuevafuncion.type=='E')
- {
- int opcion;
- printf("%s\n", "¿Desea eliminar esta Particion?");
- printf("%s\n", "1.-SI");
- printf("%s\n", "2.-NO");
- printf("%s\n", "");
- printf(">:~$ ");
- scanf("%d",&opcion);
- if(opcion>0 && opcion<3){
- switch(opcion)
- {
- case 1:
- //-----------------------------------------------EliminarParticion(funcion)-----------------------------------------;
- printf("Eliminando Particion...\n");
- EliminarParticion(nuevafuncion);
- limpiarvar(instruccion,100);
- break;
- case 2:
- printf("-------------------------Eliminacion Cancelada-------------------\n");
- break;
- default:
- printf("Error::-> Opcion Incorrecta \n");
- break;
- }
- }else
- {
- opcion=1;
- printf(" \n");
- printf("%s\n", "Error::-> Opcion incorrecta ");
- }
- }
- else
- {
- //--------------------------------------------------EliminarParticionLogica(funcion);
- printf("Eliminando Particion Logica...\n");
- limpiarvar(instruccion,100);
- }
- }else if (add==0 && delete_==0 && size==1){//--------------------------Crear Particion---------------------
- if(nuevafuncion.type=='p' || nuevafuncion.type=='e'||nuevafuncion.type=='P' || nuevafuncion.type=='E')
- {
- printf("Creando Particion...\n\n");
- //--------------------------------------------------CrearParticion(nuevafuncion);
- CrearParticion(nuevafuncion);
- limpiarvar(instruccion,100);
- }
- else
- {
- printf("Creando Particion Logica...\n");
- //--------------------------------------------------CrearParticionLogica(nuevafuncion);
- if(nuevafuncion.unit=='b' || nuevafuncion.unit=='B')
- {
- nuevafuncion.tamano=nuevafuncion.size;
- }else if(nuevafuncion.unit=='k' || nuevafuncion.unit=='K')
- {
- nuevafuncion.tamano=nuevafuncion.size*1024;
- }else
- {
- nuevafuncion.tamano=nuevafuncion.size*(1024*1024);
- }
- CrearParticionLogica(nuevafuncion);
- limpiarvar(instruccion,100);
- }
- }else{
- printf("\nError::-> Crear Particion\n\n");
- ErrorComando++;
- }
- }else{
- printf("\nError::-> Parametros Obligatorios 'fdisk' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"mount")){//--------------------------------------------------------MOUNT-----------------------------------------
- printf("////MOUNT////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(path==1 && name==1 && numeroparametros==2 )
- {
- printf("Montando Particion... \n");
- Montura *particion= DeterminarNombre(nuevafuncion);
- if(particion!=NULL)
- {
- montar(particion);
- ContadorComandosExitosos++;
- Recorrer();
- }
- limpiarvar(instruccion,100);
- }else if(numeroparametros!=1)
- {
- printf("\nError::-> Parametros 'Mount' invalidos\n\n");
- ErrorComando++;
- }else{
- printf("\nError::-> Parametros Obligatorios 'Mount' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"unmount")){//--------------------------------------------------------UNMOUNT-----------------------------------------
- printf("////UNMOUNT////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(id==1 && numeroparametros==1 )
- {
- printf("Desmontando Particion... \n");
- desmontar(nuevafuncion);
- ContadorComandosExitosos++;
- Recorrer();
- limpiarvar(instruccion,100);
- }else if(numeroparametros!=1)
- {
- printf("\nError::-> Parametros 'Unmount' invalidos\n\n");
- ErrorComando++;
- }else{
- printf("\nError::-> Parametros Obligatorios 'Mount' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"rmdisk")){//--------------------------------------------------------RMDISK-----------------------------------------
- printf("////RMDISK////\n");
- ContadorInstrucciones++;
- //eliminar archivo que representa a un disco duro
- if(path==1 && numeroparametros==1 )
- {
- printf("Eliminando representacion de disco... \n");
- ELiminarDisco(nuevafuncion);
- limpiarvar(instruccion,100);
- }else if(numeroparametros!=1)
- {
- printf("\nError::-> Parametros 'Rmdisk' invalidos\n\n");
- ErrorComando++;
- }
- else{
- printf("\nError::-> Parametros Obligatorios 'Mount' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"exec")){//--------------------------------------------------------exec-----------------------------------------
- printf("////EXEC////\n");
- ContadorInstrucciones++;
- //eliminar archivo que representa a un disco duro
- if(path==1 && numeroparametros==1 )
- {
- printf("Ejecuando script... \n");
- Exec(nuevafuncion);
- limpiarvar(instruccion,100);
- }else if(numeroparametros!=1)
- {
- printf("\nError::-> Parametros 'exec' invalidos\n\n");
- ErrorComando++;
- }
- else{
- printf("\nError::-> Parametros Obligatorios 'exec' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"rep")){//--------------------------------------------------------rep-----------------------------------------
- printf("////REP////\n");
- ContadorInstrucciones++;
- //eliminar archivo que representa a un disco duro
- if(path==1 && name==1 && id==1 && numeroparametros==3 )
- {
- if((nuevafuncion.name[0]=='m' && nuevafuncion.name[1]=='b' && nuevafuncion.name[2]=='r') || (nuevafuncion.name[0]=='d' && nuevafuncion.name[1]=='i' && nuevafuncion.name[2]=='s' && nuevafuncion.name[3]=='k'))
- {
- if(nuevafuncion.name[0]=='m')
- {
- printf("Generando Reporte MBR... \n");
- Graficar(nuevafuncion);
- }else {
- printf("Generando Reporte Disk...\n");
- Graficar2(nuevafuncion);
- }
- limpiarvar(instruccion,100);
- }else {
- printf("Error::-> Nombre imcorrecto");
- }
- }else if(numeroparametros!=3)
- {
- printf("\nError::-> Parametros 'rep' invalidos\n\n");
- ErrorComando++;
- }
- else{
- printf("\nError::-> Parametros Obligatorios 'rep' no ingresados\n\n");
- ErrorComando++;
- }
- }else{
- printf("\nError::-> Instruccion no encontrada \n\n");
- ErrorInterprete++;
- }
- }
- }else{
- printf("\nError-> Fallo en el interprete\n");
- //printf("\n ->Errores Encontrados En Interprete : '%i' \n", ErrorInterprete);
- }
- }
- int menu_principal (){
- int opcion=1;
- char comando[100];
- char * ptr3;
- printf("%s\n", "________________________________________________________");
- printf(" %s\n", "PROYECTO NO. 1/ FASE NO. 1");
- printf("%s\n", "________________________________________________________");
- printf("%s\n", "");
- printf("%s\n", "");
- printf(">:~$ ");
- while(strcmp(comando,"salir")!=0)
- {
- scanf(" %[^\n]", comando);
- ptr3=strtok(comando,"\n");
- comentario=0;
- fin=0;
- ErrorInterprete=0;
- while(ptr3!=NULL){
- printf("--------------------------------------------------------\n");
- printf("%s\n", "");
- printf("%s\n", "");
- printf("Linea ->%s\n",ptr3);
- if(!strcmp(ptr3,"exit"))
- {
- }else {
- Interprete(ptr3);
- }
- ptr3=strtok(NULL,"\n");
- }
- /*----------------------------------------------------------------------*/
- }
- }
- int main()
- {
- ContadorInstrucciones=0;
- ContadorComandosExitosos=0;
- ErrorInterprete=0;
- ErrorComando=0;
- ErrorCrearDisco=0;
- ErrorEliminarDisco=0;
- ErrorCrearParticion=0;
- ErrorEliminarParticion=0;
- ErrorCrearParticionLogica=0;
- ErrorEliminarLogica=0;
- ErrorReporte1=0;
- ErrorReporte2=0;
- comentario=0;
- int fin=0;
- sincomillas[1000];// se usa en el Metodo quitarComillas
- sistema = (Lista*)malloc(sizeof (Lista));
- sistema->primero=NULL;
- sistema->ultimo=NULL;
- //inicia El lanzador del programa
- menu_principal();
- printf("No. Instrucciones -> %d\n",ContadorInstrucciones);
- printf("No. Comandos Existosos -> %d\n",ContadorComandosExitosos);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement