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>
- #include <math.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
- {
- char nombre[150];
- }pathFile;
- 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[150];
- char dest[150];
- char cont[150];
- char ruta[100];
- char type;
- char typeFormatear[100];
- char delete_[100];
- char name[100];
- char Contenido[1000];
- char id[100];
- char usr[100];
- char pwd[100];
- char fileid[100];
- int add;
- pathFile fileN[10];
- char fit[30];
- char allocation[100];
- char idvector[6];
- int p;
- char grp[100];
- 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 parte[64];
- }Parte;
- typedef struct
- {
- Parte part[64];
- int cantidad;
- }Cadena;
- 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[250];
- 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;
- typedef struct
- {
- int s_filesystem_type;
- int s_inodes_count;
- int s_blocks_count;
- int s_free_blocks_count;
- int s_free_inodes_count;
- char s_mtime[16];
- char s_umtime[16];
- int s_mnt_count;
- int s_magic;
- int s_inode_size;
- int s_block_size;
- int s_first_ino;
- int s_first_blo;
- int s_bm_inode_start;
- int s_bm_block_start;
- int s_inode_start;
- int s_block_start;
- }SuperBlock;
- typedef struct
- {
- int i_uid;
- int I_gid;
- int i_size;
- char i_atime[16];
- char i_ctime[16];
- char i_mtime[16];
- int i_block[15];
- char i_type;
- int i_perm;
- }Inodo;
- typedef struct
- {
- char operacion;
- char tipo;
- char path[100];
- char cont[100];
- char fecha[16];
- char propietario[16];
- char permisos[16];
- int siguiente;
- int posicion;
- }Journal;
- typedef struct
- {
- char b_name[12];
- int b_inodo;
- }content;
- typedef struct
- {
- content b_content[4];
- }BloqueCarpeta;
- typedef struct
- {
- char b_content[64];
- }BloqueArchivo;
- typedef struct
- {
- char b_pointers[16];
- }BloqueApuntador;
- typedef struct
- {
- char cadena[800];
- int grupos;
- int usuarios;
- }Retornoo;
- 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;
- int bandera;
- }MbrDisco;
- MbrDisco mbrG;
- char pathG[100];
- char nombG[30];
- int actual=0;
- int logu=1;
- char NombreUsuario[100];
- int root=0;
- int cambioCortar=0;
- char cambioCortarNom[50];
- void limpiarvar(char aux[], int n) {
- int i;
- for (i = 0; i < n; i++) {
- aux[i] = '\0';
- }
- }
- MbrDisco obtenerMBR(Funcion funcion)
- {
- MbrDisco mbr;
- mbr.bandera=-4;
- char path[250];
- limpiarvar(path,150);
- Montura *pivote=sistema->primero;
- while (pivote!=NULL) {
- if(!strcmp(funcion.id,pivote->name))
- {
- FILE *fp;
- printf("Se encontro la particion montada-> %s\n",pivote->path);
- strcpy(path,pivote->path);
- fp=fopen(path, "rb");
- printf("Abrio archivo\n");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fseek(fp,0,SEEK_SET);
- fread(&mbr, sizeof(MbrDisco), 1, fp);
- printf("Guardo mbr\n");
- fclose(fp);
- limpiarvar(path,250);
- return mbr;
- }
- break;
- }
- pivote=pivote->siguiente;
- }
- printf("No se encotro ninguna particion montada con ese nombre\n");
- limpiarvar(path,250);
- return mbr;
- }
- MbrDisco obtenerMBR2()
- {
- //printf("%s\n",nombG);
- MbrDisco mbr;
- mbr.bandera=-4;
- char path[250];
- limpiarvar(path,150);
- Montura *pivote=sistema->primero;
- while (pivote!=NULL) {
- if(!strcmp(nombG,pivote->nombre))
- {
- FILE *fp;
- //printf("Se encontro la particion montada-> %s\n",pivote->path);
- strcpy(path,pivote->path);
- fp=fopen(path, "rb");
- //printf("Abrio archivo\n");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fseek(fp,0,SEEK_SET);
- fread(&mbr, sizeof(MbrDisco), 1, fp);
- //printf("Guardo mbr\n");
- fclose(fp);
- limpiarvar(path,250);
- return mbr;
- }
- break;
- }
- pivote=pivote->siguiente;
- }
- printf("No se encotro ninguna particion montada con ese nombre\n");
- limpiarvar(path,250);
- return mbr;
- }
- char* obtenerNombre(Funcion funcion)
- {
- int bandera =0;
- Montura *pivote=sistema->primero;
- while (pivote!=NULL) {
- if(!strcmp(funcion.id,pivote->name))
- {
- FILE *fp;
- fp = fopen(pivote->path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- return pivote->nombre;
- fclose(fp);
- }
- bandera=1;
- break;
- }
- pivote=pivote->siguiente;
- }
- if(bandera==0)
- {
- return "";
- }
- }
- char* obtenerPath(Funcion funcion)
- {
- int bandera =0;
- Montura *pivote=sistema->primero;
- while (pivote!=NULL) {
- if(!strcmp(funcion.id,pivote->name))
- {
- FILE *fp;
- fp = fopen(pivote->path, "rb");
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- return pivote->path;
- fclose(fp);
- }
- bandera=1;
- break;
- }
- pivote=pivote->siguiente;
- }
- if(bandera==0)
- {
- return "";
- }
- }
- 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 GraficarSB(Funcion funcion)
- {
- SuperBlock super;
- char nomb[15];
- char path[100];
- strcpy(nomb,obtenerNombre(funcion));
- strcpy(path,obtenerPath(funcion));
- MbrDisco *mbr=BuscarDisco(funcion);
- printf("Graficando...\n");
- if(mbr!=NULL)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- limpiarvar(finalizado,300);
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[100];
- limpiarvar(carpeta,100);
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- FILE *fptr= fopen(pathauxiliar2,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nomb,mbr->particiones[i].part_name))
- {
- FILE *fp= fopen(path, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr->particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&super,sizeof (SuperBlock), 1, fp);
- fclose(fp);
- 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> s_filesystem_type</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_filesystem_type);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_inodes_count</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_inodes_count);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_blocks_count</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_blocks_count);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_free_blocks_count</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_free_blocks_count);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_free_inodes_count</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_free_inodes_count);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_mtime</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", super.s_mtime);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_umtime</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", super.s_umtime);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_mnt_count</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_mnt_count);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_magic</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_magic);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_inode_size</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_inode_size);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_block_size</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_block_size);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_first_ino</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_first_ino);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_first_blo</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_first_blo);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_bm_inode_start</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_bm_inode_start);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_bm_block_start</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_bm_block_start);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_inode_start</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_inode_start);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> s_block_start</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", super.s_block_start);
- fprintf(fptr,"</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++;
- }
- break;
- }
- }
- }
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,200);
- limpiarvar(finalizado,300);
- limpiarvar(carpeta,100);
- limpiarvar(path,100);
- limpiarvar(nomb,15);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }
- void GraficarJournal(Funcion funcion)
- {
- int bandera =0;
- SuperBlock super;
- char nomb[15];
- char path[100];
- strcpy(nomb,obtenerNombre(funcion));
- strcpy(path,obtenerPath(funcion));
- MbrDisco mbr=obtenerMBR(funcion);
- if(mbr.bandera!=-4)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- limpiarvar(finalizado,300);
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[100];
- limpiarvar(carpeta,100);
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- FILE *fptr;
- fptr = fopen(pathauxiliar2,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nomb,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(path, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&super,sizeof (SuperBlock), 1, fp);
- if (super.s_filesystem_type==3) {
- 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 \"> NO. </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> OPERACION </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> TIPO </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> PATH </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> CONT </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> SIZE </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> FECHA </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> PROPIETARIO </td>\n");
- fprintf(fptr,"<td bgcolor=\" #5d6d7e \"> PERMISOS </td>\n");
- fprintf(fptr,"</tr>\n");
- Journal Jactual;
- int contador=1;
- fseek(fp,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock),SEEK_SET);
- fread(&Jactual,sizeof (Journal), 1, fp);
- while (Jactual.siguiente!=-1) {
- fseek(fp,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock)+Jactual.siguiente,SEEK_SET);
- fread(&Jactual,sizeof (Journal), 1, fp);
- fprintf(fptr,"<tr>");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%d", contador);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%c", Jactual.operacion);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%c", Jactual.tipo);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", Jactual.path);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", Jactual.cont);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"-");
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", Jactual.fecha);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", Jactual.propietario);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"<td>");
- fprintf(fptr,"%s", Jactual.permisos);
- fprintf(fptr,"</td>\n");
- fprintf(fptr,"</tr>\n");
- contador++;
- }
- 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);
- }
- else {
- printf("No es ext3\n");
- }
- ContadorComandosExitosos++;
- fclose(fp);
- }
- break;
- }
- }
- fclose(fptr);
- }
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,200);
- limpiarvar(finalizado,300);
- limpiarvar(carpeta,100);
- limpiarvar(dot,100);
- limpiarvar(path,100);
- limpiarvar(nomb,15);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }
- void GraficarInodos (Funcion funcion)
- {
- int bandera =0;
- SuperBlock super;
- char nomb[15];
- char path[100];
- strcpy(nomb,obtenerNombre(funcion));
- strcpy(path,obtenerPath(funcion));
- MbrDisco mbr=obtenerMBR(funcion);
- if(mbr.bandera!=-4)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- limpiarvar(finalizado,300);
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[100];
- limpiarvar(carpeta,100);
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(pathauxiliar2,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nomb,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(path, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- int tamano;
- fread(&super,sizeof (SuperBlock), 1, fp);
- tamano=super.s_inodes_count;
- fprintf(fptr,"digraph html{\n");
- fprintf(fptr,"rankdir=LR\n");
- for (int j=0;j<tamano;j++) {
- char in;
- fseek(fp,super.s_bm_inode_start +j,SEEK_SET);
- fread(&in,1, 1, fp);
- if(in=='1')
- {
- fprintf(fptr,"inodo%d[shape=none, margin=0,label=<\n",j);
- Inodo ino;
- fseek(fp,super.s_inode_start+(j*sizeof (Inodo)),SEEK_SET);
- fread(&ino,sizeof (Inodo), 1, fp);
- fprintf(fptr,"<table border='1' cellborder='1'>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td colspan=\"2\" bgcolor=\" #5d6d7e \"> INODO_%d </td>\n",j);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_uid </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_uid);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_gid </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.I_gid);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_size </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_size);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_atime </td>\n");
- fprintf(fptr,"<td> %s </td>\n",ino.i_atime);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_ctime </td>\n");
- fprintf(fptr,"<td> %s </td>\n",ino.i_ctime);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_mtime </td>\n");
- fprintf(fptr,"<td> %s </td>\n",ino.i_mtime);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_type </td>\n");
- fprintf(fptr,"<td> %c </td>\n",ino.i_type);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_perm </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_perm);
- fprintf(fptr,"</tr>\n");
- for (int i=0;i<12;i++) {
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> AD </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_block[i]);
- fprintf(fptr,"</tr>\n");
- }
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> AI </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_block[12]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> AI </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_block[13]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> AI </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_block[14]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"</table>");
- fprintf(fptr,">];\n");
- //fprintf(fptr,"inodo%d->",j);
- }
- }
- fprintf(fptr,"}\n");
- fclose(fp);
- fclose(fptr);
- strcat(dot,"dot -Tpng ");
- strcat(dot,pathauxiliar2);
- strcat(dot," -o ");
- strcat(dot,funcion.path);
- printf("Inodo->%s\n",dot);
- system(dot);
- ContadorComandosExitosos++;
- }
- break;
- }
- }
- }
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,200);
- limpiarvar(finalizado,300);
- limpiarvar(carpeta,100);
- limpiarvar(dot,100);
- limpiarvar(path,100);
- limpiarvar(nomb,15);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }
- void GraficarTree (Funcion funcion)
- {
- int bandera =0;
- SuperBlock super;
- char direcciones[5000];
- limpiarvar(direcciones,5000);
- char nomb[15];
- char path[100];
- strcpy(nomb,obtenerNombre(funcion));
- strcpy(path,obtenerPath(funcion));
- MbrDisco mbr=obtenerMBR(funcion);
- if(mbr.bandera!=-4)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- limpiarvar(finalizado,300);
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[100];
- limpiarvar(carpeta,100);
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(pathauxiliar2,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nomb,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(path, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- int tamano;
- fread(&super,sizeof (SuperBlock), 1, fp);
- tamano=super.s_inodes_count;
- fprintf(fptr,"digraph html{\n");
- fprintf(fptr,"rankdir=LR\n");
- for (int j=0;j<tamano;j++) {
- char in;
- fseek(fp,super.s_bm_inode_start +j,SEEK_SET);
- fread(&in,1, 1, fp);
- if(in=='1')
- {
- fprintf(fptr,"inodo%d[shape=none, margin=0,label=<\n",j);
- Inodo ino;
- fseek(fp,super.s_inode_start+(j*sizeof (Inodo)),SEEK_SET);
- fread(&ino,sizeof (Inodo), 1, fp);
- fprintf(fptr,"<table border='1' cellborder='1'>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td colspan=\"2\" bgcolor=\" #5d6d7e \"> INODO_%d </td>\n",j);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_uid </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_uid);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_gid </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.I_gid);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_size </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_size);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_atime </td>\n");
- fprintf(fptr,"<td> %s </td>\n",ino.i_atime);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_ctime </td>\n");
- fprintf(fptr,"<td> %s </td>\n",ino.i_ctime);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_mtime </td>\n");
- fprintf(fptr,"<td> %s </td>\n",ino.i_mtime);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_type </td>\n");
- fprintf(fptr,"<td> %c </td>\n",ino.i_type);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> I_perm </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_perm);
- fprintf(fptr,"</tr>\n");
- for (int h=0;h<12;h++) {
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> AD </td>\n");
- fprintf(fptr,"<td PORT=\"AD%d\"> %d</td>\n",h,ino.i_block[h]);
- if(ino.i_block[h]!=-1)
- {
- sprintf(direcciones,"%s inodo%d:AD%d->bloque%d\n",direcciones,j,h,ino.i_block[h]);
- }
- fprintf(fptr,"</tr>\n");
- }
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> AI </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_block[12]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> AI </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_block[13]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> AI </td>\n");
- fprintf(fptr,"<td> %d </td>\n",ino.i_block[14]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"</table>");
- fprintf(fptr,">];\n");
- for (int i=0;i<12;i++) {
- if(ino.i_type=='0')
- {
- if(ino.i_block[i]!=-1)
- {
- BloqueCarpeta bloqueC;
- fseek(fp,super.s_block_start+(ino.i_block[i]*sizeof (BloqueArchivo)),SEEK_SET);
- fread(&bloqueC,sizeof (BloqueArchivo), 1, fp);
- fprintf(fptr,"bloque%d[shape=none, margin=0,label=<\n",ino.i_block[i]);
- Inodo ino;
- fseek(fp,super.s_inode_start+(j*sizeof (Inodo)),SEEK_SET);
- fread(&ino,sizeof (Inodo), 1, fp);
- fprintf(fptr,"<table border='1' cellborder='1'>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td colspan=\"2\" bgcolor=\" #5d6d7e \"> BLOQUE_%d </td>\n",ino.i_block[i]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content[0].b_name);
- fprintf(fptr,"<td PORT=\"AD0\"> %d </td>\n",bloqueC.b_content[0].b_inodo);
- if(bloqueC.b_content[0].b_inodo!=-1 && i!=0)
- {
- sprintf(direcciones,"%s bloque%d:AD%d->inodo%d\n",direcciones,ino.i_block[i],0,bloqueC.b_content[0].b_inodo);
- }
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content[1].b_name);
- fprintf(fptr,"<td PORT=\"AD1\"> %d </td>\n",bloqueC.b_content[1].b_inodo);
- if(bloqueC.b_content[1].b_inodo!=-1 && i!=0)
- {
- sprintf(direcciones,"%s bloque%d:AD%d->inodo%d\n",direcciones,ino.i_block[i],1,bloqueC.b_content[1].b_inodo);
- }
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content[2].b_name);
- fprintf(fptr,"<td PORT=\"AD2\"> %d </td>\n",bloqueC.b_content[2].b_inodo);
- if(bloqueC.b_content[2].b_inodo!=-1)
- {
- sprintf(direcciones,"%s bloque%d:AD%d->inodo%d\n",direcciones,ino.i_block[i],2,bloqueC.b_content[2].b_inodo);
- }
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content[3].b_name);
- fprintf(fptr,"<td PORT=\"AD3\"> %d </td>\n",bloqueC.b_content[3].b_inodo);
- if(bloqueC.b_content[3].b_inodo!=-1)
- {
- sprintf(direcciones,"%s bloque%d:AD%d->inodo%d\n",direcciones,ino.i_block[i],3,bloqueC.b_content[3].b_inodo);
- }
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"</table>");
- fprintf(fptr,">];\n");
- }
- }
- if(ino.i_type=='1')
- {
- if(ino.i_block[i]!=-1)
- {
- BloqueArchivo bloqueC;
- fseek(fp,super.s_block_start+(ino.i_block[i]*sizeof (BloqueArchivo)),SEEK_SET);
- fread(&bloqueC,sizeof (BloqueArchivo), 1, fp);
- fprintf(fptr,"bloque%d[shape=none, margin=0,label=<\n",ino.i_block[i]);
- fprintf(fptr,"<table border='1' cellborder='1'>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td colspan=\"2\" bgcolor=\" #5d6d7e \"> BLOQUE_%d </td>\n",ino.i_block[i]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> Contenido </td>\n");
- fprintf(fptr,"<td> %s</td>\n",bloqueC.b_content);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"</table>");
- fprintf(fptr,">];\n");
- }
- }
- }
- //fprintf(fptr,"inodo%d->",j);
- }
- }
- fprintf(fptr,"%s",direcciones);
- limpiarvar(direcciones,5000);
- fprintf(fptr,"}\n");
- fclose(fp);
- fclose(fptr);
- strcat(dot,"dot -Tpng ");
- strcat(dot,pathauxiliar2);
- strcat(dot," -o ");
- strcat(dot,funcion.path);
- printf("%s\n",dot);
- system(dot);
- ContadorComandosExitosos++;
- }
- break;
- }
- }
- }
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,200);
- limpiarvar(finalizado,300);
- limpiarvar(carpeta,100);
- limpiarvar(dot,100);
- limpiarvar(path,100);
- limpiarvar(nomb,15);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }
- void GraficarBloques (Funcion funcion)
- {
- int bandera =0;
- SuperBlock super;
- char nomb[15];
- char path[100];
- strcpy(nomb,obtenerNombre(funcion));
- strcpy(path,obtenerPath(funcion));
- MbrDisco mbr=obtenerMBR(funcion);
- if(mbr.bandera!=-4)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- limpiarvar(finalizado,300);
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[100];
- limpiarvar(carpeta,100);
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(pathauxiliar2,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nomb,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(path, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- int tamano;
- fread(&super,sizeof (SuperBlock), 1, fp);
- tamano=super.s_inodes_count;
- fprintf(fptr,"digraph html{\n");
- fprintf(fptr,"rankdir=LR\n");
- for (int j=0;j<tamano;j++) {
- char in;
- fseek(fp,super.s_bm_inode_start +j,SEEK_SET);
- fread(&in,1, 1, fp);
- if(in=='1')
- {
- Inodo ino;
- fseek(fp,super.s_inode_start+(j*sizeof (Inodo)),SEEK_SET);
- fread(&ino,sizeof (Inodo), 1, fp);
- for (int i=0;i<12;i++) {
- if(ino.i_type=='0')
- {
- if(ino.i_block[i]!=-1)
- {
- BloqueCarpeta bloqueC;
- fseek(fp,super.s_block_start+(ino.i_block[i]*sizeof (BloqueArchivo)),SEEK_SET);
- fread(&bloqueC,sizeof (BloqueArchivo), 1, fp);
- fprintf(fptr,"bloque%d[shape=none, margin=0,label=<\n",ino.i_block[i]);
- Inodo ino;
- fseek(fp,super.s_inode_start+(j*sizeof (Inodo)),SEEK_SET);
- fread(&ino,sizeof (Inodo), 1, fp);
- fprintf(fptr,"<table border='1' cellborder='1'>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td colspan=\"2\" bgcolor=\" #5d6d7e \"> BLOQUE_%d </td>\n",ino.i_block[i]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content[0].b_name);
- fprintf(fptr,"<td> %d </td>\n",bloqueC.b_content[0].b_inodo);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content[1].b_name);
- fprintf(fptr,"<td> %d </td>\n",bloqueC.b_content[1].b_inodo);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content[2].b_name);
- fprintf(fptr,"<td> %d </td>\n",bloqueC.b_content[2].b_inodo);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content[3].b_name);
- fprintf(fptr,"<td> %d </td>\n",bloqueC.b_content[3].b_inodo);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"</table>");
- fprintf(fptr,">];\n");
- }
- }
- if(ino.i_type=='1')
- {
- if(ino.i_block[i]!=-1)
- {
- BloqueArchivo bloqueC;
- fseek(fp,super.s_block_start+(ino.i_block[i]*sizeof (BloqueArchivo)),SEEK_SET);
- fread(&bloqueC,sizeof (BloqueArchivo), 1, fp);
- fprintf(fptr,"bloque%d[shape=none, margin=0,label=<\n",ino.i_block[i]);
- Inodo ino;
- fseek(fp,super.s_inode_start+(j*sizeof (Inodo)),SEEK_SET);
- fread(&ino,sizeof (Inodo), 1, fp);
- fprintf(fptr,"<table border='1' cellborder='1'>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td colspan=\"2\" bgcolor=\" #5d6d7e \"> BLOQUE_%d </td>\n",ino.i_block[i]);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"<tr>\n");
- fprintf(fptr,"<td> Contenido </td>\n");
- fprintf(fptr,"<td> %s </td>\n",bloqueC.b_content);
- fprintf(fptr,"</tr>\n");
- fprintf(fptr,"</table>");
- fprintf(fptr,">];\n");
- }
- }
- }
- }
- }
- fprintf(fptr,"}\n");
- fclose(fp);
- fclose(fptr);
- strcat(dot,"dot -Tpng ");
- strcat(dot,pathauxiliar2);
- strcat(dot," -o ");
- strcat(dot,funcion.path);
- printf("%s\n",dot);
- system(dot);
- ContadorComandosExitosos++;
- }
- break;
- }
- }
- }
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,200);
- limpiarvar(finalizado,300);
- limpiarvar(carpeta,100);
- limpiarvar(dot,100);
- limpiarvar(path,100);
- limpiarvar(nomb,15);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }
- void GraficarBitInodo(Funcion funcion)
- {
- int bandera =0;
- SuperBlock super;
- char nomb[15];
- char path[100];
- strcpy(nomb,obtenerNombre(funcion));
- strcpy(path,obtenerPath(funcion));
- MbrDisco mbr=obtenerMBR(funcion);
- if(mbr.bandera!=-4)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- limpiarvar(finalizado,300);
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[100];
- limpiarvar(carpeta,100);
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(funcion.path,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nomb,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(path, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&super,sizeof (SuperBlock), 1, fp);
- for (int j=0;j<super.s_inodes_count;j++) {
- char in;
- fseek(fp,super.s_bm_inode_start +j,SEEK_SET);
- fread(&in,1, 1, fp);
- fprintf(fptr,"%c",in);
- if((j+1)%20==0)
- {
- fprintf(fptr,"\n");
- }
- }
- fclose(fp);
- ContadorComandosExitosos++;
- }
- break;
- }
- }
- fclose(fptr);
- }
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,200);
- limpiarvar(finalizado,300);
- limpiarvar(carpeta,100);
- limpiarvar(dot,100);
- limpiarvar(path,100);
- limpiarvar(nomb,15);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }
- void GraficarBitBloque(Funcion funcion)
- {
- int bandera =0;
- SuperBlock super;
- char nomb[15];
- char path[100];
- strcpy(nomb,obtenerNombre(funcion));
- strcpy(path,obtenerPath(funcion));
- MbrDisco mbr=obtenerMBR(funcion);
- if(mbr.bandera!=-4)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- limpiarvar(finalizado,300);
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[100];
- limpiarvar(carpeta,100);
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(funcion.path,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nomb,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(path, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&super,sizeof (SuperBlock), 1, fp);
- for (int j=0;j<super.s_blocks_count;j++) {
- char in;
- fseek(fp,super.s_bm_block_start +j,SEEK_SET);
- fread(&in,1, 1, fp);
- fprintf(fptr,"%c",in);
- if((j+1)%20==0)
- {
- fprintf(fptr,"\n");
- }
- }
- fclose(fp);
- ContadorComandosExitosos++;
- }
- break;
- }
- }
- fclose(fptr);
- }
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,200);
- limpiarvar(finalizado,300);
- limpiarvar(carpeta,100);
- limpiarvar(dot,100);
- limpiarvar(path,100);
- limpiarvar(nomb,15);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }
- void Graficar2(Funcion funcion)
- {
- MbrDisco *mbr=BuscarDisco(funcion);
- if(mbr!=NULL)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[100];
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(pathauxiliar2,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- 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;
- int e=-1;
- for (int i=0;i<4;i++) {
- if(mbr->particiones[i].part_status=='1')
- {
- a[i]=mbr->particiones[i].part_start;
- if(mbr->particiones[i].part_type=='E' || mbr->particiones[i].part_type=='e')
- {
- e=i;
- }
- 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;
- 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;
- }
- EBR lec;
- EBR sig;
- int cont=1;
- 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);
- }
- int siguiente=lec.part_next;
- sig=lec;
- while (siguiente!=-1) {
- fp = fopen(path, "rb");
- fseek(fp,siguiente+sizeof (MbrDisco)+sizeof (EBR),SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&sig, sizeof(EBR), 1, fp);
- fclose(fp);
- }
- cont++;
- siguiente=sig.part_next;
- }
- fprintf(fptr,"<td rowspan=\"1\" colspan=\"%d\">Extendida <br/>%.2f%%</td>\n",cont*2,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;
- 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;
- }
- EBR lec;
- EBR sig;
- int cont=1;
- 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);
- }
- int siguiente=lec.part_next;
- sig=lec;
- while (siguiente!=-1) {
- fp = fopen(path, "rb");
- fseek(fp,siguiente+sizeof (MbrDisco)+sizeof (EBR),SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&sig, sizeof(EBR), 1, fp);
- fclose(fp);
- }
- cont++;
- siguiente=sig.part_next;
- }
- fprintf(fptr,"<td rowspan=\"1\" colspan=\"%d\">Extendida <br/>%.2f%%</td>\n",cont*2,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;
- }
- }
- }
- EBR sig;
- EBR ant;
- fprintf(fptr,"</tr>\n");
- 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;
- sig=lec;
- ant=lec;
- int contador=0;
- fprintf(fptr,"<tr>\n");
- while (siguiente!=-1) {
- contador++;
- fprintf(fptr," <td>EBR</td>\n");
- ant=sig;
- fp = fopen(path, "rb");
- fseek(fp,siguiente+sizeof (MbrDisco)+sizeof (EBR),SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&sig, sizeof(EBR), 1, fp);
- fclose(fp);
- }
- double b=sig.part_size;
- double c=mbr->mbr_tamano;
- double po=(b/c)*100;
- fprintf(fptr,"<td rowspan=\"1\">Logica <br/>%.2f%%</td>\n",po);
- siguiente=sig.part_next;
- printf("Siguiente %d\n",siguiente);
- }
- double b=ant.part_start+ant.part_size;
- printf("Inicio %d\n",ant.part_start+ant.part_size);
- double c=mbr->mbr_tamano;
- double a=mbr->particiones[e].part_size+mbr->particiones[e].part_start;
- printf("Fin %d\n",mbr->particiones[e].part_size+mbr->particiones[e].part_start);
- double po=((a-b)/c)*100;
- if(po>0)
- {
- fprintf(fptr,"<td rowspan=\"1\">Libre <br/>%.2f%%</td>\n",po);
- }
- if(contador==0)
- {
- 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!");
- }else {
- 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;
- while (siguiente!=-1) {
- 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+sizeof (MbrDisco)+sizeof (EBR),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");
- 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;
- mbr.bandera=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)
- {
- 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++;
- 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)-----------------------------------------;
- 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));
- limpiarvar(nueva->path,250);
- 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 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
- {
- if(contador==0)
- {
- printf("Primer Insertado\n");
- 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);
- printf("Actual siguiente esta en %d\n",actual.part_next);
- printf("Nuevo inicia en %d\n",ebrNuevo.part_start);
- printf("Nuevo siguiente esta en %d\n\n",ebrNuevo.part_next);
- printf("EBR actual dir->%d\n",actual.part_start);
- fseek(file,actual.part_start+sizeof (MbrDisco),SEEK_SET);
- fwrite(&actual, sizeof(EBR), 1, file);
- printf("EBR nuevo dir->%d\n",ebrNuevo.part_start);
- 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");
- }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);
- printf("Actual siguiente esta en %d\n",actual.part_next);
- printf("Nuevo inicia en %d\n",ebrNuevo.part_start);
- printf("Nuevo siguiente esta en %d\n\n",ebrNuevo.part_next);
- printf("EBR actual dir->%d\n",actual.part_start);
- fseek(file,actual.part_start+sizeof (MbrDisco)+sizeof(EBR),SEEK_SET);
- fwrite(&actual, sizeof(EBR), 1, file);
- printf("EBR nuevo dir->%d\n",ebrNuevo.part_start);
- 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;
- }
- void 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);
- fread(&lec, sizeof(EBR), 1, fp);
- fclose(fp);
- }
- //----------------------------------------------------------------------------------------
- BuscarEspacioLogicaFF(lec,funcion,inicio,mbr,ebr);
- }
- Cadena SepararContenido(char* contenido)
- {
- Cadena cadena;
- cadena.cantidad=-1;
- int indice=0;
- int cont=0;
- int pos=0;
- while(contenido[indice]!='\0')
- {
- if(pos==64)
- {
- pos=0;
- cont++;
- }
- cadena.part[cont].parte[pos]=contenido[indice];
- pos++;
- indice++;
- }
- printf("bloques archivo-> %d\n",cont+1);
- cadena.cantidad=cont;
- return cadena;
- }
- int BuscarApuntadorVacioBloqueCarpeta(int * apuntadores)
- {
- for (int i=0;i<4;i++) {
- if(apuntadores[i]==-1)
- {
- return i;
- }
- }
- }
- int DeterminarTamano(char *nombre)
- {
- int tamano=0;
- for (int i=0;i<1000;i++) {
- if(nombre[i]!='\0')
- {
- tamano++;
- }else {
- return tamano;
- }
- }
- return tamano;
- }
- int crearInodo(Inodo* inodo,int tipo,char*contenido)
- {
- inodo->i_uid=0;
- inodo->I_gid=0;
- inodo->i_size=0;
- limpiarvar(inodo->i_ctime,16);
- limpiarvar(inodo->i_mtime,16);
- limpiarvar(inodo->i_atime,16);
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- inodo->i_ctime[l++]=output[k];
- }
- for (int i=0;i<15;i++) {
- inodo->i_block[i]=-1;
- }
- if(tipo==0)
- {
- inodo->i_type='0';
- }else {
- inodo->i_type='1';
- inodo->i_size=DeterminarTamano(contenido);
- }
- inodo->i_perm=664;
- printf("Se creo el inodo \n");
- }
- int crearBloque(BloqueCarpeta* carpeta,int padre,int actual,int tipo)
- {
- if(tipo==0)
- {
- strcpy(carpeta->b_content[0].b_name,".");
- carpeta->b_content[0].b_inodo=actual;
- strcpy(carpeta->b_content[1].b_name,"..");
- carpeta->b_content[1].b_inodo=padre;
- carpeta->b_content[2].b_inodo=-1;
- carpeta->b_content[3].b_inodo=-1;
- strcpy(carpeta->b_content[2].b_name,"");
- strcpy(carpeta->b_content[3].b_name,"");
- printf("Se creo el bloque carpeta \n");
- }else{
- strcpy(carpeta->b_content[0].b_name,"");
- carpeta->b_content[0].b_inodo=-1l;
- strcpy(carpeta->b_content[1].b_name,"");
- carpeta->b_content[1].b_inodo=-1;
- carpeta->b_content[2].b_inodo=-1;
- carpeta->b_content[3].b_inodo=-1;
- strcpy(carpeta->b_content[2].b_name,"");
- strcpy(carpeta->b_content[3].b_name,"");
- }
- }
- int ExisteInodo(char* bitmap,int pos)
- {
- for (int i=0;i<pos+1;i++) {
- if(i==pos && bitmap[i]!='1')
- {
- return 1;
- }
- }
- return 0;
- }
- void actualizarBloqueLibre()
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- for (int j=0; j<super.s_blocks_count;j++) {
- char v;
- fseek(file,super.s_bm_block_start+j,SEEK_SET);
- fread(&v,1 , 1, file);
- if(v=='0')
- {
- printf("Nuevo bitmap bloque-> %d\n",j);
- super.s_first_blo=j;
- break;
- }
- }
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fwrite(&super,sizeof (SuperBlock) , 1, file);
- fclose(file);
- break;
- }
- }
- }
- }
- void actualizarInodoLibre()
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- for (int j=0; j<super.s_inodes_count;j++) {
- char v;
- fseek(file,super.s_bm_inode_start+j,SEEK_SET);
- fread(&v,1 , 1, file);
- if(v=='0')
- {
- printf("Nuevo inodo libre-> %d\n",j);
- super.s_first_ino=j;
- break;
- }
- }
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fwrite(&super,sizeof (SuperBlock) , 1, file);
- fclose(file);
- break;
- }
- }
- }
- }
- void cambiarBitmapInodo()
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- char c='1';
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- fseek(file,super.s_bm_inode_start+super.s_first_ino,SEEK_SET);
- fwrite(&c,1 , 1, file);
- printf("bitmap inodo en %d ahora es 1\n",super.s_first_ino);
- fclose(file);
- actualizarInodoLibre();
- break;
- }
- }
- }
- }
- void cambiarBitmapBloque()
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- char c='1';
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- fseek(file,super.s_bm_block_start+super.s_first_blo,SEEK_SET);
- fwrite(&c,1 , 1, file);
- printf("bitmap bloque en %d ahora es 1\n",super.s_first_blo);
- fclose(file);
- actualizarBloqueLibre();
- break;
- }
- }
- }
- }
- void buscarEspacioApuntador(int posActual,char* nombre)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- Inodo actual;
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- fseek(file,super.s_inode_start+(posActual*sizeof (Inodo)),SEEK_SET);
- fread(&actual,sizeof (Inodo) , 1, file);
- for (int i=0;i<15;i++) {
- if(actual.i_block[i]==-1)
- {
- printf("Apuntador vacio\n");
- if(i<12)
- {
- BloqueCarpeta bloque;
- crearBloque(&bloque,posActual,super.s_first_ino,1);
- actual.i_block[i]=super.s_first_blo;
- fseek(file,super.s_block_start+(super.s_first_blo*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fseek(file,super.s_inode_start+(posActual*sizeof (Inodo)),SEEK_SET);
- fwrite(&actual,sizeof (Inodo) , 1, file);
- cambiarBitmapBloque();
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fread(&bloque,sizeof (BloqueCarpeta) , 1, file);
- for (int j=0;j<4;j++) {
- if (bloque.b_content[j].b_inodo==-1) {
- bloque.b_content[j].b_inodo=super.s_first_ino;
- strcpy(bloque.b_content[j].b_name,nombre);
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fclose(file);
- return;
- }
- }
- }if (1==12) {
- }
- if (1==13) {
- }
- if (1==14) {
- }
- }
- if(actual.i_block[i]!=-1)
- {
- printf("Apuntador acupado\n");
- if(i<12)
- {
- BloqueCarpeta bloque;
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fread(&bloque,sizeof (BloqueCarpeta) , 1, file);
- for (int j=0;j<4;j++) {
- if (bloque.b_content[j].b_inodo==-1) {
- printf("Apuntador del bloque de carpetas vacio-> %d\n",super.s_first_ino);
- bloque.b_content[j].b_inodo=super.s_first_ino;
- printf("Apuntador del bloque de carpetas vacio-> %d\n",bloque.b_content[j].b_inodo);
- strcpy(bloque.b_content[j].b_name,nombre);
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fclose(file);
- return;
- }
- }
- }if (1==12) {
- }
- if (1==13) {
- }
- if (1==14) {
- }
- }
- }
- return;
- }
- }
- }
- }
- void CortarPegar(int posActual)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- Inodo actual;
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- fseek(file,super.s_inode_start+(posActual*sizeof (Inodo)),SEEK_SET);
- fread(&actual,sizeof (Inodo) , 1, file);
- for (int i=0;i<15;i++) {
- if(actual.i_block[i]==-1)
- {
- printf("Apuntador vacio\n");
- if(i<12)
- {
- BloqueCarpeta bloque;
- crearBloque(&bloque,posActual,super.s_first_ino,1);
- actual.i_block[i]=super.s_first_blo;
- fseek(file,super.s_block_start+(super.s_first_blo*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fseek(file,super.s_inode_start+(posActual*sizeof (Inodo)),SEEK_SET);
- fwrite(&actual,sizeof (Inodo) , 1, file);
- cambiarBitmapBloque();
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fread(&bloque,sizeof (BloqueCarpeta) , 1, file);
- for (int j=0;j<4;j++) {
- if (bloque.b_content[j].b_inodo==-1) {
- bloque.b_content[j].b_inodo=cambioCortar;
- strcpy(bloque.b_content[j].b_name,cambioCortarNom);
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fclose(file);
- return;
- }
- }
- }if (1==12) {
- }
- if (1==13) {
- }
- if (1==14) {
- }
- }
- if(actual.i_block[i]!=-1)
- {
- printf("Apuntador acupado\n");
- if(i<12)
- {
- BloqueCarpeta bloque;
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fread(&bloque,sizeof (BloqueCarpeta) , 1, file);
- for (int j=0;j<4;j++) {
- if (bloque.b_content[j].b_inodo==-1) {
- printf("Apuntador del bloque de carpetas vacio-> %d\n",super.s_first_ino);
- bloque.b_content[j].b_inodo=cambioCortar;
- printf("Apuntador del bloque de carpetas vacio-> %d\n",bloque.b_content[j].b_inodo);
- strcpy(bloque.b_content[j].b_name,cambioCortarNom);
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fclose(file);
- return;
- }
- }
- }if (1==12) {
- }
- if (1==13) {
- }
- if (1==14) {
- }
- }
- }
- return;
- }
- }
- }
- }
- int BuscarCarpetaEnDirectorio(Inodo actual,char* nombre)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- for (int i=0;i<15;i++) {
- if(actual.i_block[i]!=-1)
- {
- if(i<12)
- {
- BloqueCarpeta bloque;
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fread(&bloque,sizeof (BloqueCarpeta) , 1, file);
- for (int j=0;j<4;j++) {
- if (!strcmp(bloque.b_content[j].b_name,nombre)) {
- return bloque.b_content[j].b_inodo;
- }
- }
- }if (1==12) {
- }
- if (1==13) {
- }
- if (1==14) {
- }
- }
- }
- return -1;
- }
- }
- }
- }
- int BuscarCarpetaEnDirectorioYeliminar(Inodo actual,char* nombre)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- for (int i=0;i<15;i++) {
- if(actual.i_block[i]!=-1)
- {
- if(i<12)
- {
- BloqueCarpeta bloque;
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fread(&bloque,sizeof (BloqueCarpeta) , 1, file);
- for (int j=0;j<4;j++) {
- if (!strcmp(bloque.b_content[j].b_name,nombre)) {
- int r=bloque.b_content[j].b_inodo;
- bloque.b_content[j].b_inodo=-1;
- strcpy(bloque.b_content[j].b_name," ");
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fclose(file);
- return r;
- }
- }
- }if (1==12) {
- }
- if (1==13) {
- }
- if (1==14) {
- }
- }
- }
- return -1;
- }
- }
- }
- }
- int BuscarCarpetaEnDirectorioYCambiar(Inodo actual,char* nombre,char * cambio)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- for (int i=0;i<15;i++) {
- if(actual.i_block[i]!=-1)
- {
- if(i<12)
- {
- BloqueCarpeta bloque;
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fread(&bloque,sizeof (BloqueCarpeta) , 1, file);
- for (int j=0;j<4;j++) {
- if (!strcmp(bloque.b_content[j].b_name,nombre)) {
- for(int h=0;h<12;h++) {
- if(bloque.b_content[j].b_name[h]=='.')
- {
- printf("Cambiar Nombre %s->%s\n",bloque.b_content[j].b_name,cambio);
- strcpy(bloque.b_content[j].b_name,cambio);
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fclose(file);
- break;
- }
- }
- return bloque.b_content[j].b_inodo;
- }
- }
- }if (1==12) {
- }
- if (1==13) {
- }
- if (1==14) {
- }
- }
- }
- return -1;
- }
- }
- }
- }
- int BuscarCarpetaEnDirectorioYCortar(Inodo actual,char* nombre,char * cambio)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- for (int i=0;i<15;i++) {
- if(actual.i_block[i]!=-1)
- {
- if(i<12)
- {
- BloqueCarpeta bloque;
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fread(&bloque,sizeof (BloqueCarpeta) , 1, file);
- for (int j=0;j<4;j++) {
- if (!strcmp(bloque.b_content[j].b_name,nombre)) {
- cambioCortar=bloque.b_content[j].b_inodo;
- limpiarvar(cambioCortarNom,50);
- strcpy(cambioCortarNom,bloque.b_content[j].b_name);
- strcpy(bloque.b_content[j].b_name,"");
- bloque.b_content[j].b_inodo=-1;
- fseek(file,super.s_block_start+(actual.i_block[i]*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fclose(file);
- return bloque.b_content[j].b_inodo;
- }
- }
- }if (1==12) {
- }
- if (1==13) {
- }
- if (1==14) {
- }
- }
- }
- return -1;
- }
- }
- }
- }
- int ExisteDir2(char* nombre,int posActual,int eliminar,char* cambio)
- {
- //printf("Verificando existencia-> %s\n",nombre);
- MbrDisco mbr;
- SuperBlock super;
- char* bitmapBloques;
- char* bitmapInodos;
- int particion;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- particion=i;
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- char bitmapB[super.s_blocks_count];
- for (int j=0; j<super.s_blocks_count;j++) {
- char v;
- fseek(file,super.s_bm_block_start+j,SEEK_SET);
- fread(&v,1 , 1, file);
- bitmapB[j]=v;
- }
- bitmapBloques=bitmapB;
- char bitmapI[super.s_inodes_count];
- for (int j=0; j<super.s_inodes_count;j++) {
- char v;
- fseek(file,super.s_bm_inode_start+j,SEEK_SET);
- fread(&v,1 , 1, file);
- bitmapI[j]=v;
- }
- bitmapInodos=bitmapI;
- break;
- }
- }
- if(posActual==-1)
- {
- //printf("Verificando raiz\n");
- int existe=ExisteInodo(bitmapInodos,0);
- if(existe!=0)
- {
- return -1;
- }else
- {
- //printf("Raiz existe\n");
- return 0;
- }
- }else
- {
- printf("Verificando no raiz %s\n",nombre);
- Inodo actual;
- fseek(file,super.s_inode_start+(posActual*sizeof (Inodo)),SEEK_SET);
- fread(&actual,sizeof (Inodo) , 1, file);
- if(eliminar==1)
- {
- return BuscarCarpetaEnDirectorioYeliminar(actual,nombre);
- }if(eliminar==2)
- {
- return BuscarCarpetaEnDirectorioYCambiar(actual,nombre,cambio);
- }if(eliminar==3)
- {
- return BuscarCarpetaEnDirectorioYCortar(actual,nombre,cambio);
- }
- return BuscarCarpetaEnDirectorio(actual,nombre);
- }
- }
- return -1;
- }
- int SepararDirectorio2(Funcion funcion)
- {
- int posActual=-1;
- posActual=ExisteDir2("/",posActual,0,"");
- char* nombre=strtok(funcion.ruta,"/");
- while (nombre!=NULL && posActual!=-1) {
- //printf("%d\n",posActual);
- posActual=ExisteDir2(nombre,posActual,0,"");
- if(posActual==-1)
- {
- return -1;
- }
- nombre=strtok(NULL,"/");
- }
- return posActual;
- }
- void GraficarFile(Funcion funcion)
- {
- int existe=SepararDirectorio2(funcion);
- if(existe!=-1)
- {
- int bandera =0;
- SuperBlock super;
- char nomb[15];
- char path[100];
- strcpy(nomb,obtenerNombre(funcion));
- strcpy(path,obtenerPath(funcion));
- MbrDisco mbr=obtenerMBR(funcion);
- if(mbr.bandera!=-4)
- {
- char dot[100]="\0";
- char pathauxiliar[200];
- char pathauxiliar2[200];
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,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[300];
- limpiarvar(finalizado,300);
- strcpy(finalizado,"cd /\n");
- int indice=0;
- char carpeta[500];
- limpiarvar(carpeta,100);
- 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,100);
- }
- indice++;
- }
- printf("\n%s\n",finalizado);
- system(finalizado);
- int num;
- FILE *fptr;
- fptr = fopen(funcion.path,"w");
- if(fptr == NULL)
- {
- printf("Error!");
- }else {
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nomb,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(path, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&super,sizeof (SuperBlock), 1, fp);
- Inodo inodo;
- fseek(fp,super.s_inode_start+(existe*sizeof (Inodo)),SEEK_SET);
- fread(&inodo,sizeof (Inodo), 1, fp);
- if(inodo.i_type=='1')
- {
- for (int j=0;j<12;j++) {
- if(inodo.i_block[j]!=-1)
- {
- BloqueArchivo bloqueC;
- fseek(fp,super.s_block_start+(inodo.i_block[j]*sizeof (BloqueArchivo)),SEEK_SET);
- fread(&bloqueC,sizeof (BloqueArchivo), 1, fp);
- fprintf(fptr,"%s",bloqueC.b_content);
- }
- }
- }
- fclose(fp);
- ContadorComandosExitosos++;
- }
- break;
- }
- }
- fclose(fptr);
- }
- limpiarvar(funcion.path,100);
- limpiarvar(pathauxiliar2,200);
- limpiarvar(pathauxiliar,200);
- limpiarvar(finalizado,300);
- limpiarvar(carpeta,100);
- limpiarvar(dot,100);
- limpiarvar(path,100);
- limpiarvar(nomb,15);
- }else {
- printf("Error::-> Generar reporte\n");
- ErrorReporte1++;
- }
- }else {
- printf("No existe la ruta\n");
- }
- }
- int esArchivo(char *nombre)
- {
- for (int i=0;i<10;i++) {
- if(nombre[i]=='.')
- {
- return 1;
- }
- if(nombre[i]=='\0')
- {
- break;
- }
- }
- return 0;
- }
- void buscarEspacioApuntadorArchivo(Inodo *inodo)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- char c='1';
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- break;
- }
- }
- for (int i=0;i<15;i++) {
- if(inodo->i_block[i]==-1)
- {
- if(i<12)
- {
- printf("Encontro Espacio para apuntar a bloque archivo\n");
- inodo->i_block[i]=super.s_first_blo;
- break;
- }if(i==12)
- {
- }
- if(i==13)
- {
- }
- if(i==14)
- {
- }
- }
- }
- }
- }
- void EscribirEnJurnal(char operacion,char tipo,char* path,char *cont,char* fecha,char *propietario,char* permisos)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- if(super.s_filesystem_type==3)
- {
- Journal JournalActual;
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock),SEEK_SET);
- fread(&JournalActual,sizeof (Journal) , 1, file);
- while (JournalActual.siguiente!=-1) {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock)+JournalActual.siguiente,SEEK_SET);
- fread(&JournalActual,sizeof (Journal) , 1, file);
- }
- JournalActual.siguiente=JournalActual.posicion+sizeof (Journal);
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock)+JournalActual.posicion,SEEK_SET);
- fwrite(&JournalActual,sizeof (Journal) , 1, file);
- Journal nuevo;
- nuevo.operacion=operacion;
- nuevo.tipo=tipo;
- strcpy(nuevo.path,path);
- strcpy(nuevo.cont,cont);
- strcpy(nuevo.permisos,permisos);
- strcpy(nuevo.fecha,fecha);
- strcpy(nuevo.propietario,propietario);
- nuevo.siguiente=-1;
- nuevo.posicion=JournalActual.siguiente;
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock)+nuevo.posicion,SEEK_SET);
- fwrite(&nuevo,sizeof (Journal) , 1, file);
- }
- fclose(file);
- break;
- }
- }
- }
- }
- int ExisteDir(char* nombre,int posActual,char*contenido,int p)
- {
- printf("Verificando existencia-> %s\n",nombre);
- MbrDisco mbr;
- SuperBlock super;
- char* bitmapBloques;
- char* bitmapInodos;
- int particion;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- particion=i;
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- char bitmapB[super.s_blocks_count];
- for (int j=0; j<super.s_blocks_count;j++) {
- char v;
- fseek(file,super.s_bm_block_start+j,SEEK_SET);
- fread(&v,1 , 1, file);
- bitmapB[j]=v;
- }
- bitmapBloques=bitmapB;
- char bitmapI[super.s_inodes_count];
- for (int j=0; j<super.s_inodes_count;j++) {
- char v;
- fseek(file,super.s_bm_inode_start+j,SEEK_SET);
- fread(&v,1 , 1, file);
- bitmapI[j]=v;
- }
- bitmapInodos=bitmapI;
- break;
- }
- }
- if(posActual==-1)
- {
- printf("Verificando raiz\n");
- int existe=ExisteInodo(bitmapInodos,0);
- if(existe!=0)
- {
- if(p==0)
- {
- printf("Carpeta no existe no se creara\n");
- return -1;
- }else {
- printf("Raiz no existe \n");
- Inodo inodo;
- BloqueCarpeta bloque;
- crearInodo(&inodo,0,contenido);
- crearBloque(&bloque,0,super.s_first_ino,0);
- inodo.i_block[0]=super.s_first_blo;
- fseek(file,super.s_block_start+(super.s_first_blo*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fseek(file,super.s_inode_start+(super.s_first_ino*sizeof (Inodo)),SEEK_SET);
- fwrite(&inodo,sizeof (inodo) , 1, file);
- fclose(file);
- cambiarBitmapInodo();
- cambiarBitmapBloque();
- return 0;
- }
- }else
- {
- printf("Raiz existe\n");
- return 0;
- }
- }else
- {
- printf("Verificando no raiz %s\n",nombre);
- int bandera= esArchivo(nombre);
- if(bandera==0)
- {
- printf("No es un archivo\n");
- Inodo actual;
- fseek(file,super.s_inode_start+(posActual*sizeof (Inodo)),SEEK_SET);
- fread(&actual,sizeof (Inodo) , 1, file);
- int existe=BuscarCarpetaEnDirectorio(actual,nombre);
- if(existe==-1)
- {
- if(p==0)
- {
- printf("Carpeta no existe no se creara\n");
- return -1;
- }else {
- printf("No se encontro carpeta\n");
- Inodo inodo;
- BloqueCarpeta bloque;
- crearInodo(&inodo,0,contenido);
- crearBloque(&bloque,0,super.s_first_ino,0);
- inodo.i_block[0]=super.s_first_blo;
- fseek(file,super.s_block_start+(super.s_first_blo*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&bloque,sizeof (BloqueCarpeta) , 1, file);
- fseek(file,super.s_inode_start+(super.s_first_ino*sizeof (Inodo)),SEEK_SET);
- fwrite(&inodo,sizeof (inodo) , 1, file);
- fclose(file);
- int nuevo=super.s_first_ino;
- cambiarBitmapBloque();
- printf("Entro\n");
- buscarEspacioApuntador(posActual,nombre);
- printf("Salio\n");
- cambiarBitmapInodo();
- return nuevo;
- }
- }else {
- printf("Se encontro carpeta\n");
- return existe;
- }
- }else{
- printf("Es Archivo\n");
- fclose(file);
- Inodo inodoo;
- crearInodo(&inodoo,1,contenido);
- Cadena* cadena=malloc(sizeof (Cadena));
- for (int i=0;i<64;i++) {
- limpiarvar(cadena->part[i].parte,64);
- }
- cadena->cantidad=-1;
- int indice=0;
- int cont=0;
- int pos=0;
- while(contenido[indice]!='\0')
- {
- if(pos==60)
- {
- pos=0;
- cont++;
- printf("\n");
- }
- printf("%c",contenido[indice]);
- sprintf(cadena->part[cont].parte,"%s%c",cadena->part[cont].parte,contenido[indice]);
- pos++;
- indice++;
- }
- printf("bloques archivo-> %d\n",cont+1);
- cadena->cantidad=cont;
- BloqueArchivo block;
- for (int i=0;i<cadena->cantidad+1;i++) {
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int j=0; j<4; j++)
- {
- if(!strcmp(nombG,mbr.particiones[j].part_name))
- {
- particion=i;
- fseek(file,mbr.particiones[j].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- printf("bloque Contiene-> %s\n",cadena->part[i].parte);
- strcpy(block.b_content,cadena->part[i].parte);
- printf("guardo-> %s en %d\n",block.b_content,super.s_first_blo);
- fseek(file,super.s_block_start+(super.s_first_blo*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&block,sizeof (BloqueArchivo) , 1, file);
- buscarEspacioApuntadorArchivo(&inodoo);
- cambiarBitmapBloque();
- fclose(file);
- break;
- }
- }
- }
- }
- free(cadena);
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- particion=i;
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- fseek(file,super.s_inode_start+(super.s_first_ino*sizeof (Inodo)),SEEK_SET);
- fwrite(&inodoo,sizeof (Inodo) , 1, file);
- fclose(file);
- buscarEspacioApuntador(posActual,nombre);
- cambiarBitmapInodo();
- break;
- }
- }
- }
- }
- }
- }
- return -1;
- }
- void SepararDirectorio(Funcion funcion,char* contenido,int tipo)
- {
- char cont[200];
- strcpy(cont,contenido);
- int posActual=-1;
- posActual=ExisteDir("/",posActual,contenido,funcion.p);
- if(posActual==-1)
- {
- printf("No se creo el archivo\n");
- return;
- }
- char* nombre=strtok(funcion.path,"/");
- while (nombre!=NULL) {
- posActual=ExisteDir(nombre,posActual,cont,funcion.p);
- if(posActual==-1)
- {
- printf("No se creo el archivo\n");
- break;
- }
- nombre=strtok(NULL,"/");
- }
- }
- Retornoo obtenerUsuarios()
- {
- MbrDisco mbr;
- SuperBlock super;
- Retornoo retorno;
- limpiarvar(retorno.cadena,800);
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- Inodo inodo;
- BloqueArchivo bloque;
- fseek(file,super.s_inode_start+(sizeof (Inodo)),SEEK_SET);
- fread(&inodo,sizeof (Inodo) , 1, file);
- for (int i=0;i<15;i++) {
- if(i<12)
- {
- if(inodo.i_block[i]!=-1)
- {
- fseek(file,super.s_block_start+(inodo.i_block[i]*sizeof (BloqueArchivo)),SEEK_SET);
- fread(&bloque,sizeof (BloqueArchivo) , 1, file);
- strcat(retorno.cadena,bloque.b_content);
- }
- }
- }
- fclose(file);
- break;
- }
- }
- return retorno;
- }
- }
- Retornoo ObtenerCadena(Funcion funcion)
- {
- Retornoo retorno;
- MbrDisco mbr=obtenerMBR2();
- limpiarvar(retorno.cadena,800);
- int existe=SepararDirectorio2(funcion);
- if(existe!=-1)
- {
- SuperBlock super;
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(pathG, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&super,sizeof (SuperBlock), 1, fp);
- Inodo inodo;
- fseek(fp,super.s_inode_start+(existe*sizeof (Inodo)),SEEK_SET);
- fread(&inodo,sizeof (Inodo), 1, fp);
- if(inodo.i_type=='1')
- {
- for (int j=0;j<12;j++) {
- if(inodo.i_block[j]!=-1)
- {
- BloqueArchivo bloqueC;
- fseek(fp,super.s_block_start+(inodo.i_block[j]*sizeof (BloqueArchivo)),SEEK_SET);
- fread(&bloqueC,sizeof (BloqueArchivo), 1, fp);
- //printf("%s\n",bloqueC.b_content);
- strcat(retorno.cadena,bloqueC.b_content);
- }
- }
- }
- fclose(fp);
- }
- break;
- }
- }
- return retorno;
- }else {
- printf("No existe la ruta\n");
- }
- }
- void ELiminarCuerpo(int ind)
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- Inodo inodo;
- BloqueArchivo bloque;
- fseek(file,super.s_inode_start+(ind*sizeof (Inodo)),SEEK_SET);
- fread(&inodo,sizeof (Inodo) , 1, file);
- char c='0';
- for (int i=0;i<15;i++) {
- if(i<12)
- {
- if(inodo.i_block[i]!=-1)
- {
- fseek(file,super.s_block_start+(inodo.i_block[i]*sizeof (BloqueArchivo)),SEEK_SET);
- fread(&bloque,sizeof (BloqueArchivo) , 1, file);
- fseek(file,super.s_bm_block_start+inodo.i_block[i],SEEK_SET);
- fwrite(&c,1 , 1, file);
- inodo.i_block[i]=-1;
- }
- }
- }
- fseek(file,super.s_inode_start+(ind*sizeof (Inodo)),SEEK_SET);
- fwrite(&inodo,sizeof (Inodo) , 1, file);
- fclose(file);
- actualizarBloqueLibre();
- break;
- }
- }
- }
- }
- void cargarUser(char* usua)
- {
- SuperBlock super;
- MbrDisco mbr;
- Cadena* cadena=malloc(sizeof (Cadena));
- for (int i=0;i<64;i++) {
- limpiarvar(cadena->part[i].parte,64);
- }
- cadena->cantidad=-1;
- int indice=0;
- int cont=0;
- int pos=0;
- while(usua[indice]!='\0')
- {
- if(pos==60)
- {
- pos=0;
- cont++;
- printf("\n");
- }
- printf("%c",usua[indice]);
- cadena->part[cont].parte[pos]=usua[indice];
- pos++;
- indice++;
- }
- printf("bloques archivo-> %d\n",cont+1);
- Inodo inodo;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int j=0; j<4; j++)
- {
- if(!strcmp(nombG,mbr.particiones[j].part_name))
- {
- fseek(file,mbr.particiones[j].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- fseek(file,super.s_inode_start+sizeof (Inodo),SEEK_SET);
- fread(&inodo,sizeof (Inodo) , 1, file);
- fclose(file);
- break;
- }
- }
- }
- cadena->cantidad=cont;
- BloqueArchivo block;
- for (int i=0;i<cadena->cantidad+1;i++) {
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int j=0; j<4; j++)
- {
- if(!strcmp(nombG,mbr.particiones[j].part_name))
- {
- fseek(file,mbr.particiones[j].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- //printf("bloque Contiene-> %s\n",cadena->part[i].parte);
- strcpy(block.b_content,cadena->part[i].parte);
- //printf("guardo-> %s en %d\n",block.b_content,super.s_first_blo);
- fseek(file,super.s_block_start+(super.s_first_blo*sizeof (BloqueCarpeta)),SEEK_SET);
- fwrite(&block,sizeof (BloqueArchivo) , 1, file);
- buscarEspacioApuntadorArchivo(&inodo);
- printf("Salio\n");
- cambiarBitmapBloque();
- fclose(file);
- break;
- }
- }
- }
- }
- file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int j=0; j<4; j++)
- {
- if(!strcmp(nombG,mbr.particiones[j].part_name))
- {
- fseek(file,mbr.particiones[j].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- fseek(file,super.s_inode_start+sizeof (Inodo),SEEK_SET);
- fwrite(&inodo,sizeof (Inodo) , 1, file);
- fclose(file);
- break;
- }
- }
- }
- free(cadena);
- }
- void CrearGrupo(Funcion funcion)
- {
- Retornoo usuarios;
- usuarios=obtenerUsuarios();
- char usua[300];
- strcpy(usua,usuarios.cadena);
- char msg[3];
- usuarios.grupos=1;
- int tipo=0;
- int c=1;
- int us=0;
- int con=0;
- int eli=0;
- char* ptr3=strtok(usuarios.cadena,",");
- while (ptr3!=NULL) {
- //printf("-%s-\n",ptr3);
- if(!strcmp(ptr3,"U"))
- {
- tipo=1;
- c=1;
- }
- if(!strcmp(ptr3,"G"))
- {
- tipo=0;
- usuarios.grupos++;
- c=1;
- }
- if(!strcmp(ptr3,"0"))
- {
- eli=1;
- }
- if(tipo==0 && c==2)
- {
- //printf("%s vs %s",ptr3,funcion.usr);
- if(!strcmp(ptr3,funcion.name) && eli==0 )
- {
- us=1;
- }
- }
- if(tipo==0 && c==2)
- {
- eli=0;
- }
- if(tipo==1 && c==4)
- {
- eli=0;
- }
- c++;
- ptr3=strtok(NULL,",");
- }if(us==0)
- {
- sprintf(msg, "%d", usuarios.grupos);
- strcat(usua,msg);
- strcat(usua,",G,");
- strcat(usua,funcion.name);
- strcat(usua,",");
- printf("%s\n",usua);
- ELiminarCuerpo(1);
- cargarUser(usua);
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- EscribirEnJurnal('2','1',"-",funcion.name,time,"-","-");
- }else {
- printf("Error::->Nombre del grupo ya existe\n");
- }
- limpiarvar(usua,300);
- }
- void EliminarGrupo(Funcion funcion)
- {
- Retornoo usuarios;
- usuarios=obtenerUsuarios();
- char usua[300];
- char msg[3];
- char concatena[300];
- char a[50];
- usuarios.grupos=0;
- usuarios.usuarios=0;
- int tipo=0;
- int c=0;
- int us=0;
- int con=0;
- int eli=0;
- char n[3];
- char t[3];
- char gr[10];
- char usu[10];
- char cont[10];
- char* ptr3=strtok(usuarios.cadena,",");
- while (ptr3!=NULL) {
- if(c==0)
- {
- strcpy(n,ptr3);
- }else if (c==1) {
- strcpy(t,ptr3);
- }
- else if (c==2) {
- strcpy(gr,ptr3);
- }
- else if (c==3) {
- strcpy(usu,ptr3);
- }
- else if (c==4) {
- strcpy(cont,ptr3);
- }
- if(!strcmp(ptr3,"U"))
- {
- usuarios.usuarios++;
- tipo=1;
- c=1;
- }
- else if(!strcmp(ptr3,"G"))
- {
- tipo=0;
- usuarios.grupos++;
- c=1;
- }
- if(!strcmp(ptr3,"0"))
- {
- eli=1;
- }
- if(tipo==0 && c==2)
- {
- if(!strcmp(ptr3,funcion.name) && eli==0 )
- {
- sprintf(a,"0,G,%s,",funcion.name);
- strcat(concatena,a);
- limpiarvar(a,50);
- us=1;
- }else {
- sprintf(a,"%s,G,%s,",n,gr);
- strcat(concatena,a);
- limpiarvar(a,50);
- }
- eli=0;
- c=-1;
- }
- if(tipo==1 && c==4)
- {
- sprintf(a,"%s,U,%s,%s,%s,",n,gr,usu,cont);
- strcat(concatena,a);
- limpiarvar(a,50);
- eli=0;
- c=-1;
- }
- c++;
- ptr3=strtok(NULL,",");
- }
- if(us==1)
- {
- strcpy(usua,concatena);
- printf("%s\n",usua);
- ELiminarCuerpo(1);
- cargarUser(usua);
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- EscribirEnJurnal('3','1',"-",funcion.name,time,"-","-");
- }else {
- printf("Error::->Nombre del grupo no existe\n");
- }
- limpiarvar(usua,300);
- limpiarvar(concatena,300);
- limpiarvar(a,50);
- }
- void CrearUsuario(Funcion funcion)
- {
- Retornoo usuarios;
- usuarios=obtenerUsuarios();
- char usua[300];
- strcpy(usua,usuarios.cadena);
- char msg[3];
- usuarios.usuarios=1;
- usuarios.grupos=1;
- int tipo=0;
- int c=1;
- int us=0;
- int con=0;
- int eli=0;
- char* ptr3=strtok(usuarios.cadena,",");
- while (ptr3!=NULL) {
- //printf("-%s-\n",ptr3);
- if(!strcmp(ptr3,"U"))
- {
- tipo=1;
- c=1;
- usuarios.usuarios++;
- }
- if(!strcmp(ptr3,"G"))
- {
- tipo=0;
- usuarios.grupos++;
- c=1;
- }
- if(!strcmp(ptr3,"0"))
- {
- eli=1;
- }
- if(tipo==1 && c==3)
- {
- //printf("%s vs %s",ptr3,funcion.usr);
- if(!strcmp(ptr3,funcion.usr) && eli==0 )
- {
- us=1;
- }
- }if(tipo==0 && c==2)
- {
- eli=0;
- }
- if(tipo==1 && c==4)
- {
- eli=0;
- }
- c++;
- ptr3=strtok(NULL,",");
- }if(us==0)
- {
- sprintf(msg, "%d", usuarios.usuarios);
- strcat(usua,msg);
- strcat(usua,",U,");
- strcat(usua,funcion.grp);
- strcat(usua,",");
- strcat(usua,funcion.usr);
- strcat(usua,",");
- strcat(usua,funcion.pwd);
- strcat(usua,",");
- printf("%s\n",usua);
- ELiminarCuerpo(1);
- cargarUser(usua);
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- EscribirEnJurnal('4','1',funcion.name,funcion.grp,time,funcion.pwd,"-");
- }else {
- printf("Error::->Nombre del grupo ya existe\n");
- }
- limpiarvar(usua,300);
- }
- void EliminarUsuario(Funcion funcion)
- {
- Retornoo usuarios;
- usuarios=obtenerUsuarios();
- char usua[300];
- char msg[3];
- char concatena[300];
- char a[50];
- usuarios.grupos=0;
- usuarios.usuarios=0;
- int tipo=0;
- int c=0;
- int us=0;
- int con=0;
- int eli=0;
- char n[3];
- char t[3];
- char gr[10];
- char usu[10];
- char cont[10];
- char* ptr3=strtok(usuarios.cadena,",");
- while (ptr3!=NULL) {
- if(c==0)
- {
- strcpy(n,ptr3);
- }else if (c==1) {
- strcpy(t,ptr3);
- }
- else if (c==2) {
- strcpy(gr,ptr3);
- }
- else if (c==3) {
- strcpy(usu,ptr3);
- }
- else if (c==4) {
- strcpy(cont,ptr3);
- }
- if(!strcmp(ptr3,"U"))
- {
- usuarios.usuarios++;
- tipo=1;
- c=1;
- }
- else if(!strcmp(ptr3,"G"))
- {
- tipo=0;
- usuarios.grupos++;
- c=1;
- }
- if(!strcmp(ptr3,"0"))
- {
- eli=1;
- }
- if(tipo==0 && c==2)
- {
- sprintf(a,"%s,G,%s,",n,gr);
- strcat(concatena,a);
- limpiarvar(a,50);
- eli=0;
- c=-1;
- }
- if(tipo==1 && c==4)
- {
- if(!strcmp(usu,funcion.usr) && eli==0 )
- {
- sprintf(a,"0,U,%s,%s,%s,",gr,usu,cont);
- strcat(concatena,a);
- limpiarvar(a,50);
- us=1;
- }else {
- sprintf(a,"%s,U,%s,%s,%s,",n,gr,usu,cont);
- strcat(concatena,a);
- limpiarvar(a,50);
- }
- eli=0;
- c=-1;
- }
- c++;
- ptr3=strtok(NULL,",");
- }
- if(us==1)
- {
- strcpy(usua,concatena);
- printf("%s\n",usua);
- ELiminarCuerpo(1);
- cargarUser(usua);
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- EscribirEnJurnal('5','1',"-",funcion.usr,time,"-","-");
- }else {
- printf("Error::->Nombre del grupo no existe\n");
- }
- limpiarvar(usua,300);
- limpiarvar(concatena,300);
- limpiarvar(a,50);
- }
- void Login(Funcion funcion)
- {
- strcpy(nombG,obtenerNombre(funcion));
- strcpy(pathG,obtenerPath(funcion));
- MbrDisco *mbr=BuscarDisco(funcion);
- if(mbr!=NULL)
- {
- printf("Nombre: %s\n",nombG);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr->particiones[i].part_name))
- {
- if(mbr->bandera==1)
- {
- Retornoo usuario;
- usuario=obtenerUsuarios();
- printf("cadena-> %s\n",usuario.cadena);
- int tipo=0;
- int c=1;
- int us=0;
- int con=0;
- int eli=0;
- char* ptr3=strtok(usuario.cadena,",");
- while (ptr3!=NULL) {
- //printf("-%s-\n",ptr3);
- if(!strcmp(ptr3,"U"))
- {
- tipo=1;
- c=1;
- }
- if(!strcmp(ptr3,"G"))
- {
- tipo=0;
- c=1;
- }
- if(!strcmp(ptr3,"0"))
- {
- eli=1;
- }
- if(tipo==1 && c==3)
- {
- //printf("%s vs %s",ptr3,funcion.usr);
- if(!strcmp(ptr3,funcion.usr))
- {
- us=1;
- }
- }
- if(tipo==1 && c==4)
- {
- //printf("%s vs %s\n",ptr3,funcion.pwd);
- if(!strcmp(ptr3,funcion.pwd) && eli==0)
- {
- con=1;
- }
- }
- c++;
- eli=0;
- ptr3=strtok(NULL,",");
- }
- if(us==1 && con==1)
- {
- if(logu==0)
- {
- printf("LOGUEADO\n");
- strcpy(NombreUsuario,funcion.usr);
- logu=1;
- if(!strcmp(funcion.usr,"root"))
- {
- root=1;
- }
- }else {
- printf("Ya existe un usuario logueado\n");
- }
- }else {
- printf("Usuario y/o contrasena incorrectas\n");
- }
- }else {
- printf("Disco no tiene sistema de archivos\n");
- }
- break;
- }
- }
- }
- }
- void formatearParticion(Funcion funcion)
- {
- strcpy(nombG,obtenerNombre(funcion));
- strcpy(pathG,obtenerPath(funcion));
- MbrDisco mbr=obtenerMBR(funcion);
- if(mbr.bandera!=-4)
- {
- printf("Nombre: %s\n",nombG);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- printf("Encontro Particion\n");
- if(!strcmp(funcion.typeFormatear,"fast"))
- {
- printf("Formateo fast...\n");
- printf("'FORMATEO FAST REALIZADO EXITOSAMENTE'\n");
- }else
- {
- printf("Formateo full...\n");
- FILE* file= fopen(pathG, "rb+");
- // estableciendo puntero al inicio
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- int fin=(mbr.particiones[i].part_size/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, file);
- j++;
- }
- fclose(file);
- printf("'FORMATEO FULL REALIZADO EXITOSAMENTE'\n");
- }
- }
- if(!strcmp(funcion.fs,"2fs"))
- {
- double tamano=mbr.particiones[i].part_size;
- double super=sizeof (SuperBlock);
- double inodo=sizeof (Inodo);
- double bloque=sizeof (Bloque);
- double nP=(tamano-super)/(1+3+inodo+(3*bloque));
- int n=floor(nP);
- int cInodos=n;
- int cBloques=3*n;
- Inodo inodoNuevo;
- char bitmapI[cInodos];
- for (int i=0; i<cInodos;i++) {
- bitmapI[i]='0';
- }
- char bitmapB[cBloques];
- for (int i=0; i<cBloques;i++) {
- bitmapB[i]='0';
- }
- printf("Estructuras: %d\n",n);
- printf("Inodos %d \n",cInodos);
- printf("Bloques %d \n",cBloques);
- SuperBlock superB;
- superB.s_filesystem_type=2;
- superB.s_inodes_count=cInodos;
- superB.s_blocks_count=cBloques;
- superB.s_free_blocks_count=cBloques;
- superB.s_free_inodes_count=cInodos;
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- superB.s_mtime[l++]=output[k];
- }
- superB.s_umtime[0]='-';
- superB.s_mnt_count=1;
- superB.s_magic=0;
- superB.s_inode_size=sizeof (Inodo);
- superB.s_block_size=sizeof (BloqueCarpeta);
- superB.s_first_ino=0;
- superB.s_first_blo=0;
- superB.s_bm_inode_start=sizeof (MbrDisco)+mbr.particiones[i].part_start+sizeof (SuperBlock);
- superB.s_bm_block_start=superB.s_bm_inode_start+sizeof (bitmapI);
- superB.s_inode_start=superB.s_bm_block_start+sizeof (bitmapB);
- superB.s_block_start=superB.s_inode_start+(sizeof (Inodo)*cInodos);
- FILE* file= fopen(pathG, "rb+");
- // estableciendo puntero al inicio
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fwrite(&superB,sizeof (SuperBlock) , 1, file);
- fseek(file,superB.s_bm_inode_start,SEEK_SET);
- fwrite(&bitmapI,sizeof (bitmapI) , 1, file);
- fseek(file,superB.s_bm_block_start,SEEK_SET);
- fwrite(&bitmapB,sizeof (bitmapB) , 1, file);
- actual=0;
- printf("Se crearon las partes del sistema de archivos\n");
- char contenido[200];
- strcpy(contenido,"1,G,root,1,U,root,root,123,");
- strcpy(funcion.path,"/user.txt");
- funcion.p=1;
- SepararDirectorio(funcion,contenido,2);
- mbr.bandera=1;
- fseek(file,0,SEEK_SET);
- fwrite(&mbr,sizeof (MbrDisco) , 1, file);
- fclose(file);
- limpiarvar(contenido,200);
- printf("'SISTEMA DE ARCHIVOS CREADO SATISFACTORIAMENTE'\n");
- }
- }
- if(!strcmp(funcion.fs,"3fs"))
- {
- printf("ext3\n");
- double tamano=mbr.particiones[i].part_size;
- double super=sizeof (SuperBlock);
- double inodo=sizeof (Inodo);
- double bloque=sizeof (Bloque);
- double journal=sizeof (Journal);
- double nP=(tamano-super)/(1+journal+3+inodo+(3*bloque));
- Inodo inodoNuevo;
- int n=floor(nP);
- int cInodos=n;
- int cBloques=3*n;
- char bitmapI[cInodos];
- for (int i=0; i<cInodos;i++) {
- bitmapI[i]='0';
- }
- char bitmapB[cBloques];
- for (int i=0; i<cBloques;i++) {
- bitmapB[i]='0';
- }
- printf("Estructuras: %d\n",n);
- printf("Inodos %d \n",cInodos);
- printf("Bloques %d \n",cBloques);
- SuperBlock superB;
- superB.s_filesystem_type=3;
- superB.s_inodes_count=cInodos;
- superB.s_blocks_count=cBloques;
- superB.s_free_blocks_count=cBloques;
- superB.s_free_inodes_count=cInodos;
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- superB.s_mtime[l++]=output[k];
- }
- superB.s_umtime[0]='-';
- superB.s_mnt_count=1;
- superB.s_magic=0;
- superB.s_inode_size=sizeof (Inodo);
- superB.s_block_size=sizeof (BloqueCarpeta);
- superB.s_first_ino=0;
- superB.s_first_blo=0;
- superB.s_bm_inode_start=sizeof (MbrDisco)+(sizeof (Journal)*400)+mbr.particiones[i].part_start+sizeof (SuperBlock);
- superB.s_bm_block_start=superB.s_bm_inode_start+sizeof (bitmapI);
- superB.s_inode_start=superB.s_bm_block_start+sizeof (bitmapB);
- superB.s_block_start=superB.s_inode_start+(sizeof (Inodo)*cInodos);
- FILE* file= fopen(pathG, "rb+");
- // estableciendo puntero al inicio
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- Journal j;
- j.siguiente=-1;
- j.posicion=0;
- j.operacion='-';
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock),SEEK_SET);
- fwrite(&j,sizeof (Journal) , 1, file);
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fwrite(&superB,sizeof (SuperBlock) , 1, file);
- fseek(file,superB.s_bm_inode_start,SEEK_SET);
- fwrite(&bitmapI,sizeof (bitmapI) , 1, file);
- fseek(file,superB.s_bm_block_start,SEEK_SET);
- fwrite(&bitmapB,sizeof (bitmapB) , 1, file);
- mbr.bandera=1;
- fseek(file,0,SEEK_SET);
- fwrite(&mbr,sizeof (MbrDisco) , 1, file);
- printf("Se crearon las partes del sistema de archivos\n");
- char contenido[200];
- strcpy(contenido,"1,G,root,1,U,root,root,123,");
- strcpy(funcion.path,"/user.txt");
- funcion.p=1;
- SepararDirectorio(funcion,contenido,3);
- mbr.bandera=1;
- fseek(file,0,SEEK_SET);
- fwrite(&mbr,sizeof (MbrDisco) , 1, file);
- fclose(file);
- limpiarvar(contenido,200);
- printf("'SISTEMA DE ARCHIVOS CREADO SATISFACTORIAMENTE'\n");
- }
- }
- break;
- }
- }
- }
- }
- void CrearArchivo(Funcion funcion)
- {
- char contenido[600];
- limpiarvar(contenido,600);
- int caracter=0;
- char car[10];
- for (int i=0;i<funcion.size;i++) {
- sprintf(car,"%d",caracter);
- strcat(contenido,car);
- caracter++;
- if(caracter==10)
- {
- caracter=0;
- }
- }
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- char p;
- if(funcion.p==1)
- {
- p='1';
- }else {
- p='0';
- }
- char s[3];
- sprintf(s,"%d",funcion.size);
- EscribirEnJurnal('6',p,funcion.path,s,time,"-","-");
- SepararDirectorio(funcion,contenido,2);
- }
- void CrearDireccion(Funcion funcion)
- {
- char contenido[600];
- limpiarvar(contenido,600);
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- char p;
- if(funcion.p==1)
- {
- p='1';
- }else {
- p='0';
- }
- EscribirEnJurnal('B',p,funcion.path,"-",time,"-","-");
- SepararDirectorio(funcion,contenido,2);
- }
- void CrearArchivoCont(Funcion funcion)
- {
- char contenido[600];
- limpiarvar(contenido,600);
- char caracter;
- FILE *archivo;
- archivo = fopen(funcion.cont,"r");
- if (archivo == NULL)
- {
- printf("\nError de apertura del archivo. \n\n");
- }
- else
- {
- printf("\nEl contenido del archivo de prueba es \n\n");
- int c=0;
- while((caracter = fgetc(archivo)) != EOF)
- {
- contenido[c]=caracter;
- c++;
- }
- }
- fclose(archivo);
- printf("%s\n",contenido);
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- char p;
- if(funcion.p==1)
- {
- p='1';
- }else {
- p='0';
- }
- EscribirEnJurnal('7',p,funcion.path,funcion.cont,time,"-","-");
- SepararDirectorio(funcion,contenido,2);
- }
- void ModificarArchivo(Funcion funcion)
- {
- char contenido[600];
- limpiarvar(contenido,600);
- int caracter=0;
- char car[10];
- for (int i=0;i<funcion.size;i++) {
- sprintf(car,"%d",caracter);
- strcat(contenido,car);
- caracter++;
- if(caracter==10)
- {
- caracter=0;
- }
- }
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- char s[3];
- sprintf(s,"%d",funcion.size);
- EscribirEnJurnal('9','0',"-",s,time,"-","-");
- SepararDirectorio(funcion,contenido,2);
- }
- void ModificarArchivoCont(Funcion funcion)
- {
- char contenido[600];
- limpiarvar(contenido,600);
- char caracter;
- FILE *archivo;
- archivo = fopen(funcion.cont,"r");
- if (archivo == NULL)
- {
- printf("\nError de apertura del archivo. \n\n");
- }
- else
- {
- printf("\nEl contenido del archivo de prueba es \n\n");
- int c=0;
- while((caracter = fgetc(archivo)) != EOF)
- {
- contenido[c]=caracter;
- c++;
- }
- }
- fclose(archivo);
- printf("%s\n",contenido);
- SepararDirectorio(funcion,contenido,2);
- }
- void MostrarCat(Funcion funcion,int c)
- {
- for (int i=0;i<c;i++) {
- Funcion nuevaF;
- limpiarvar(nuevaF.ruta,100);
- strcpy(nuevaF.ruta,funcion.fileN[i].nombre);
- Retornoo ret;
- limpiarvar(ret.cadena,800);
- ret=ObtenerCadena(nuevaF);
- printf("->%s\n\n",ret.cadena);
- }
- }
- void EliminarArchivoCarpeta(Funcion funcion)
- {
- int posActual=-1;
- posActual=ExisteDir2("/",posActual,1,"");
- printf("%d\n",posActual);
- char* nombre=strtok(funcion.path,"/");
- while (nombre!=NULL && posActual!=-1) {
- posActual=ExisteDir2(nombre,posActual,1,"");
- printf("%d\n",posActual);
- if(posActual==-1)
- {
- break;
- }
- nombre=strtok(NULL,"/");
- }
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- EscribirEnJurnal('8','1',funcion.path,"-",time,"-","-");
- }
- void CambiarNombre(Funcion funcion)
- {
- int cont=0;
- char pathh[100];
- strcpy(pathh,funcion.path);
- char pathH[100];
- strcpy(pathH,funcion.path);
- char* nombre=strtok(pathh,"/");
- while (nombre!=NULL) {
- cont++;
- nombre=strtok(NULL,"/");
- }
- printf("%d\n",cont);
- int c=0;
- int posActual=-1;
- posActual=ExisteDir2("/",posActual,4,funcion.name);
- printf("%d\n",posActual);
- char* nombre2=strtok(funcion.path,"/");
- while (nombre2!=NULL && posActual!=-1) {
- c++;
- printf("%d-%d\n",c,cont);
- if(c==cont)
- {
- posActual=ExisteDir2(nombre2,posActual,2,funcion.name);
- }else {
- posActual=ExisteDir2(nombre2,posActual,4,funcion.name);
- }
- printf("%d\n",posActual);
- if(posActual==-1)
- {
- break;
- }
- nombre2=strtok(NULL,"/");
- }
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- EscribirEnJurnal('A','0',pathH,funcion.name,time,"-","-");
- }
- void Cortar(Funcion funcion)
- {
- int cont=0;
- char pathh[100];
- strcpy(pathh,funcion.path);
- char patH[100];
- strcpy(patH,funcion.path);
- char* nombre=strtok(pathh,"/");
- while (nombre!=NULL) {
- cont++;
- nombre=strtok(NULL,"/");
- }
- printf("%d\n",cont);
- int c=0;
- int posActual=-1;
- posActual=ExisteDir2("/",posActual,4,funcion.name);
- printf("%d\n",posActual);
- char *nombre2=strtok(funcion.path,"/");
- while (nombre2!=NULL && posActual!=-1) {
- c++;
- if(c==cont)
- {
- posActual=ExisteDir2(nombre2,posActual,3,funcion.name);
- }else {
- posActual=ExisteDir2(nombre2,posActual,4,funcion.name);
- }
- printf("%d\n",posActual);
- if(posActual==-1)
- {
- break;
- }
- nombre2=strtok(NULL,"/");
- }
- char destH[100];
- strcpy(destH,funcion.dest);
- posActual=-1;
- posActual=ExisteDir2("/",posActual,4,funcion.name);
- printf("%d\n",posActual);
- nombre=strtok(funcion.dest,"/");
- while (nombre!=NULL && posActual!=-1) {
- posActual=ExisteDir2(nombre,posActual,4,funcion.name);
- printf("%d\n",posActual);
- if(posActual==-1)
- {
- break;
- }
- nombre=strtok(NULL,"/");
- }
- CortarPegar(posActual);
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- char time[16];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- time[l++]=output[k];
- }
- char s[3];
- sprintf(s,"%d",funcion.size);
- EscribirEnJurnal('C','0',patH,destH,time,"-","-");
- }
- void Loss()
- {
- MbrDisco mbr;
- SuperBlock super;
- FILE* file= fopen(pathG, "rb+");
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fread(&mbr,sizeof (MbrDisco) , 1, file);
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fread(&super,sizeof (SuperBlock) , 1, file);
- super.s_first_blo=0;
- super.s_first_ino=0;
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fwrite(&super,sizeof (SuperBlock) , 1, file);
- fseek(file,sizeof (MbrDisco)+(sizeof (Journal)*400)+mbr.particiones[i].part_start+sizeof (SuperBlock),SEEK_SET);
- int inicio=sizeof (MbrDisco)+(sizeof (Journal)*400)+mbr.particiones[i].part_start+sizeof (SuperBlock);
- int fin1=mbr.particiones[i].part_start+mbr.particiones[i].part_size;
- int tamano=fin1-inicio;
- 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, file);
- j++;
- }
- fclose(file);
- break;
- }
- }
- }
- }
- void Recovery()
- {
- Funcion funcion;
- MbrDisco mbr=obtenerMBR2();
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- printf("ext3\n");
- double tamano=mbr.particiones[i].part_size;
- double super=sizeof (SuperBlock);
- double inodo=sizeof (Inodo);
- double bloque=sizeof (Bloque);
- double journal=sizeof (Journal);
- double nP=(tamano-super)/(1+journal+3+inodo+(3*bloque));
- Inodo inodoNuevo;
- int n=floor(nP);
- int cInodos=n;
- int cBloques=3*n;
- char bitmapI[cInodos];
- for (int i=0; i<cInodos;i++) {
- bitmapI[i]='0';
- }
- char bitmapB[cBloques];
- for (int i=0; i<cBloques;i++) {
- bitmapB[i]='0';
- }
- printf("Estructuras: %d\n",n);
- printf("Inodos %d \n",cInodos);
- printf("Bloques %d \n",cBloques);
- SuperBlock superB;
- superB.s_filesystem_type=3;
- superB.s_inodes_count=cInodos;
- superB.s_blocks_count=cBloques;
- superB.s_free_blocks_count=cBloques;
- superB.s_free_inodes_count=cInodos;
- time_t tiempo = time(0);
- struct tm *tlocal = localtime(&tiempo);
- char output[128];
- strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
- int l=0;
- for(int k=0;k<16;k++)
- {
- superB.s_mtime[l++]=output[k];
- }
- superB.s_umtime[0]='-';
- superB.s_mnt_count=1;
- superB.s_magic=0;
- superB.s_inode_size=sizeof (Inodo);
- superB.s_block_size=sizeof (BloqueCarpeta);
- superB.s_first_ino=0;
- superB.s_first_blo=0;
- superB.s_bm_inode_start=sizeof (MbrDisco)+(sizeof (Journal)*400)+mbr.particiones[i].part_start+sizeof (SuperBlock);
- superB.s_bm_block_start=superB.s_bm_inode_start+sizeof (bitmapI);
- superB.s_inode_start=superB.s_bm_block_start+sizeof (bitmapB);
- superB.s_block_start=superB.s_inode_start+(sizeof (Inodo)*cInodos);
- FILE* file= fopen(pathG, "rb+");
- // estableciendo puntero al inicio
- if (file==NULL)
- {
- printf("\nError::->Imposible escribir en el archivo \n\n");
- }
- else
- {
- fseek(file,mbr.particiones[i].part_start+sizeof (MbrDisco),SEEK_SET);
- fwrite(&superB,sizeof (SuperBlock) , 1, file);
- fseek(file,superB.s_bm_inode_start,SEEK_SET);
- fwrite(&bitmapI,sizeof (bitmapI) , 1, file);
- fseek(file,superB.s_bm_block_start,SEEK_SET);
- fwrite(&bitmapB,sizeof (bitmapB) , 1, file);
- mbr.bandera=1;
- fseek(file,0,SEEK_SET);
- fwrite(&mbr,sizeof (MbrDisco) , 1, file);
- printf("Se crearon las partes del sistema de archivos\n");
- char contenido[200];
- strcpy(contenido,"1,G,root,1,U,root,root,123,");
- strcpy(funcion.path,"/user.txt");
- funcion.p=1;
- SepararDirectorio(funcion,contenido,3);
- mbr.bandera=1;
- fseek(file,0,SEEK_SET);
- fwrite(&mbr,sizeof (MbrDisco) , 1, file);
- fclose(file);
- limpiarvar(contenido,200);
- printf("'SISTEMA DE ARCHIVOS CREADO SATISFACTORIAMENTE'\n");
- }
- break;
- }
- }
- SuperBlock super;
- mbr=obtenerMBR2();
- for(int i=0; i<4; i++)
- {
- if(!strcmp(nombG,mbr.particiones[i].part_name))
- {
- FILE *fp;
- fp = fopen(pathG, "rb");
- fseek(fp,sizeof (MbrDisco)+mbr.particiones[i].part_start,SEEK_SET);
- if(fp == NULL)
- {
- printf("\n Error::-> No se encontro el disco\n");
- }else {
- fread(&super,sizeof (SuperBlock), 1, fp);
- if (super.s_filesystem_type==3) {
- Journal Jactual;
- fseek(fp,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock),SEEK_SET);
- fread(&Jactual,sizeof (Journal), 1, fp);
- while (Jactual.siguiente!=-1) {
- fseek(fp,mbr.particiones[i].part_start+sizeof (MbrDisco)+sizeof (SuperBlock)+Jactual.siguiente,SEEK_SET);
- fread(&Jactual,sizeof (Journal), 1, fp);
- Funcion nuevaFuncion;
- if(Jactual.operacion=='2')
- {
- printf("---------------------Crear Grupo-----------------------------\n");
- strcpy(nuevaFuncion.name,Jactual.cont);
- printf("name->%s\n",nuevaFuncion.name);
- CrearGrupo(nuevaFuncion);
- printf("-------------------------------------------------------------\n");
- }if(Jactual.operacion=='3')
- {
- strcpy(nuevaFuncion.name,Jactual.cont);
- printf("name->%s\n",nuevaFuncion.name);
- EliminarGrupo(nuevaFuncion);
- printf("-------------------------------------------------------------\n");
- }if(Jactual.operacion=='4')
- {
- printf("--------------------Crear Usuario----------------------------\n");
- strcpy(nuevaFuncion.grp,Jactual.cont);
- strcpy(nuevaFuncion.pwd,Jactual.propietario);
- strcpy(nuevaFuncion.name,Jactual.path);
- printf("grp->%s\n",nuevaFuncion.grp);
- printf("pwd->%s\n",nuevaFuncion.pwd);
- printf("name->%s\n",nuevaFuncion.name);
- CrearUsuario(nuevaFuncion);
- printf("-------------------------------------------------------------\n");
- }if(Jactual.operacion=='5')
- {
- printf("--------------------Eliminar Usuario-------------------------\n");
- strcpy(nuevaFuncion.usr,Jactual.cont);
- printf("usr->%s\n",nuevaFuncion.usr);
- EliminarUsuario(nuevaFuncion);
- printf("-------------------------------------------------------------\n");
- }if(Jactual.operacion=='6')
- {
- printf("--------------------Crear Archivo----------------------------\n");
- nuevaFuncion.size=atoi(Jactual.cont);
- nuevaFuncion.p=Jactual.tipo-'0';
- strcpy(nuevaFuncion.path,Jactual.path);
- printf("size->%d\n",nuevaFuncion.size);
- printf("p->%d\n",nuevaFuncion.p);
- printf("path->%s\n",nuevaFuncion.path);
- CrearArchivo(nuevaFuncion);
- printf("-------------------------------------------------------------\n");
- }if(Jactual.operacion=='7')
- {
- printf("------------------Crear Archivo Cont-------------------------\n");
- strcpy(nuevaFuncion.cont,Jactual.cont);
- nuevaFuncion.p=Jactual.tipo-'0';
- strcpy(nuevaFuncion.path,Jactual.path);
- printf("cont->%s\n",nuevaFuncion.cont);
- printf("path->%s\n",nuevaFuncion.path);
- printf("p->%d\n",nuevaFuncion.p);
- CrearArchivoCont(nuevaFuncion);
- }if(Jactual.operacion=='A')
- {
- printf("------------------Cambiar Nombre-----------------------------\n");
- strcpy(nuevaFuncion.path,Jactual.path);
- strcpy(nuevaFuncion.name,Jactual.cont);
- printf("path->%s\n",nuevaFuncion.path);
- printf("name->%s\n",nuevaFuncion.name);
- CambiarNombre(nuevaFuncion);
- printf("-------------------------------------------------------------\n");
- }if(Jactual.operacion=='B')
- {
- printf("------------------Crear Direccion-----------------------------\n");
- strcpy(nuevaFuncion.path,Jactual.path);
- printf("path->%s\n",nuevaFuncion.path);
- CrearDireccion(nuevaFuncion);
- printf("-------------------------------------------------------------\n");
- }if(Jactual.operacion=='C')
- {
- printf("------------------Cortar-------------------------------------\n");
- strcpy(nuevaFuncion.path,Jactual.path);
- strcpy(nuevaFuncion.dest,Jactual.cont);
- printf("path->%s\n",nuevaFuncion.path);
- printf("dest->%s\n",nuevaFuncion.dest);
- Cortar(nuevaFuncion);
- printf("-------------------------------------------------------------\n");
- }
- }
- }
- else {
- printf("No es ext3\n");
- }
- ContadorComandosExitosos++;
- fclose(fp);
- }
- }
- }
- }
- void Interprete(char entrada[])
- {
- Funcion nuevafuncion;
- nuevafuncion.size=0;
- int size=0;
- int Files=0;
- int unit=0;
- int path=0;
- int type=0;
- int name=0;
- int contenido=0;
- int delete_=0;
- int add=0;
- int dest=0;
- int fit=0;
- int fs=0;
- int grp=0;
- int id=0;
- int pwd=0;
- int usr=0;
- int numeroparametros=0;
- int contador=0;
- int p=0;
- int cont=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;
- dest=0;
- unit=0;
- path=0;
- type=0;
- fit=0;
- grp=0;
- Files=0;
- pwd=0;
- usr=0;
- p=0;
- delete_=0;
- name=0;
- add=0;
- numeroparametros=0;
- id=0;
- cont=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]!='~' && entrada[contador]!=' ' && entrada[contador]!='\n'&& entrada[contador]!='\0'&& entrada[contador]!='1'&& entrada[contador]!='2'&& entrada[contador]!='3'&& entrada[contador]!='4'&& entrada[contador]!='5'&& entrada[contador]!='6'&& entrada[contador]!='7'&& entrada[contador]!='8'&& entrada[contador]!='9')//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(strcmp(nombreparametro,"p") && strcmp(nombreparametro,"P")){
- 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;
- }
- if(entrada[contador+1]=='~' && entrada[contador+2]==':' && entrada[contador+3]=='~'){
- //si encuentra los simbolos
- //pa=1;
- contador=contador+4;//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("P::= Activo\n");
- }
- //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;
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.path,sincomillas);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"dest"))//------------Reconocio dest----------------------------------------------------------------------------------------------
- {
- dest=1;
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.dest,sincomillas);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"cont"))//------------Reconocio cont----------------------------------------------------------------------------------------------
- {
- cont=1;
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.cont,sincomillas);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"file"))//------------Reconocio file----------------------------------------------------------------------------------------------
- {
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.fileN[Files].nombre,sincomillas);
- Files++;
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"ruta"))//------------Reconocio ruta----------------------------------------------------------------------------------------------
- {
- cont=1;
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.ruta,sincomillas);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"p"))//------------p----------------------------------------------------------------------------------------------
- {
- p=1;
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"usr"))//------------Reconocio usr----------------------------------------------------------------------------------------------
- {
- usr=1;
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.usr,sincomillas);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"pwd"))//------------Reconocio pwd----------------------------------------------------------------------------------------------
- {
- pwd=1;
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.pwd,sincomillas);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- }else if(!strcmp(nombreparametro,"grp"))//------------Reconocio grp----------------------------------------------------------------------------------------------
- {
- grp=1;
- char env[1000];
- strcpy(env,parametro);
- quitarComillas(env);
- strcpy(nuevafuncion.grp,sincomillas);
- 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,"fs"))//---------------Reconocio fs--------------------------------------------------------------------------------------------------
- {
- if(!strcmp(parametro,"2fs") || !strcmp(parametro,"3fs"))
- {
- strcpy(nuevafuncion.fs,parametro);
- limpiarvar(parametro,1000);
- limpiarvar(nombreparametro,100);
- fs=1;
- }
- else
- {
- fs=0;
- printf("\nError::-> Parametro 'fs' Invalido \n\n");
- ErrorInterprete++;
- }
- }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')
- {
- printf("Eliminando Particion...\n");
- EliminarParticion(nuevafuncion);
- limpiarvar(instruccion,100);
- 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)-----------------------------------------;
- 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,"logout")){//--------------------------------------------------------LOGOUT-----------------------------------------
- printf("////LOGOUT////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(numeroparametros==0 )
- {
- if(logu==0)
- {
- printf("Error::-> No existe usuario logueado\n");
- }else {
- printf("Cerrando sesion...\n");
- logu=0;
- root=0;
- }
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"pause")){//--------------------------------------------------------pause-----------------------------------------
- printf("////PAUSA////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(numeroparametros==0 )
- {
- char i[50];
- scanf("%s",i);
- scanf("%s",i);
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"edit")){//--------------------------------------------------------EDIT-----------------------------------------
- printf("////EDIT////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(path==1)
- {
- nuevafuncion.p=p;
- if(logu==0)
- {
- printf("Error::-> No hay usuario logueado\n");
- }else {
- if(1==1)
- {
- if(cont==0)
- {
- if(nuevafuncion.size<0)
- {
- printf("Error::-> Size no puede ser negativo\n");
- }else {
- printf("Creando Archivo...\n");
- ModificarArchivo(nuevafuncion);
- }
- }else {
- ModificarArchivoCont(nuevafuncion);
- }
- }else {
- printf("Error::-> Usuario no tiene permisos\n");
- }
- }
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"mkgrp")){//--------------------------------------------------------MKGRP-----------------------------------------
- printf("////MKGRP////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(numeroparametros==1 && name==1 )
- {
- if(root==0)
- {
- printf("Error::-> Usuario root no esta logueado\n");
- }else {
- printf("Creando grupo...\n");
- CrearGrupo(nuevafuncion);
- }
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"mkfile")){//--------------------------------------------------------MKFILE-----------------------------------------
- printf("////MKFILE////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(path==1)
- {
- nuevafuncion.p=p;
- if(logu==0)
- {
- printf("Error::-> No hay usuario logueado\n");
- }else {
- if(1==1)
- {
- if(cont==0)
- {
- if(nuevafuncion.size<0)
- {
- printf("Error::-> Size no puede ser negativo\n");
- }else {
- printf("Creando Archivo...\n");
- CrearArchivo(nuevafuncion);
- }
- }else {
- CrearArchivoCont(nuevafuncion);
- }
- }else {
- printf("Error::-> Usuario no tiene permisos\n");
- }
- }
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"rmgrp")){//--------------------------------------------------------RMGRP-----------------------------------------
- printf("////RMGRP////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(numeroparametros==1 && name==1 )
- {
- if(root==0)
- {
- printf("Error::-> Usuario root no esta logueado\n");
- }else {
- printf("ELiminando grupo...\n");
- EliminarGrupo(nuevafuncion);
- }
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"mkusr")){//--------------------------------------------------------MKUSR-----------------------------------------
- printf("////MKUSR////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(numeroparametros==3 && usr==1 && pwd==1 && grp==1 )
- {
- if(root==0)
- {
- printf("Error::-> Usuario root no esta logueado\n");
- }else {
- printf("Creando Usuario...\n");
- CrearUsuario(nuevafuncion);
- }
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"mkdir")){//--------------------------------------------------------MKDIR-----------------------------------------
- printf("////MKFILE////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(path==1)
- {
- nuevafuncion.p=p;
- if(logu==0)
- {
- printf("Error::-> No hay usuario logueado\n");
- }else {
- if(1==1)
- {
- printf("Creando Archivo...\n");
- CrearDireccion(nuevafuncion);
- }else {
- printf("Error::-> Usuario no tiene permisos\n");
- }
- }
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"rmusr")){//--------------------------------------------------------RMUSR-----------------------------------------
- printf("////RMUSR////\n");
- ContadorInstrucciones++;
- //montar una particion del disco en el sistema
- if(numeroparametros==1 && usr==1)
- {
- if(root==0)
- {
- printf("Error::-> Usuario root no esta logueado\n");
- }else {
- printf("Eliminando usuario...\n");
- EliminarUsuario(nuevafuncion);
- }
- }else{
- printf("\nError::-> Parametros\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"mkfs")){//--------------------------------------------------------MKFS-----------------------------------------
- printf("////MKFS////\n");
- ContadorInstrucciones++;
- //formateando particion
- if(id==1)
- {
- if(type==0)
- {
- printf("SE colocara formateo completo\n");
- strcpy(nuevafuncion.typeFormatear,"full");
- }
- if(fs==0)
- {
- printf("Se colocara ext2\n");
- strcpy(nuevafuncion.fs,"2fs");
- }
- formatearParticion(nuevafuncion);
- }else {
- printf("\nError::-> Parametros Obligatorios 'mkfs' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"login")){//--------------------------------------------------------LOGIN-----------------------------------------
- printf("////LOGIN////\n");
- ContadorInstrucciones++;
- //formateando particion
- if(usr==1 && pwd==1 && id==1)
- {
- Login(nuevafuncion);
- }else {
- printf("\nError::-> Parametros Obligatorios 'login' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"rem")){//--------------------------------------------------------REM-----------------------------------------
- printf("////REM////\n");
- ContadorInstrucciones++;
- if(path==1)
- {
- EliminarArchivoCarpeta(nuevafuncion);
- }else {
- printf("\nError::-> Parametros Obligatorios 'rem' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"ren")){//--------------------------------------------------------REN-----------------------------------------
- printf("////REN////\n");
- ContadorInstrucciones++;
- if(path==1)
- {
- CambiarNombre(nuevafuncion);
- }else {
- printf("\nError::-> Parametros Obligatorios 'ren' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"mv")){//--------------------------------------------------------MV-----------------------------------------
- printf("////MV////\n");
- ContadorInstrucciones++;
- if(path==1 && dest==1)
- {
- Cortar(nuevafuncion);
- }else {
- printf("\nError::-> Parametros Obligatorios 'ren' no ingresados\n\n");
- ErrorComando++;
- }
- }else if(!strcmp(instruccion,"loss")){//--------------------------------------------------------LOSS-----------------------------------------
- printf("////LOSS////\n");
- Loss();
- }else if(!strcmp(instruccion,"recovery")){//--------------------------------------------------------RECOVERY-----------------------------------------
- printf("////RECOVERY////\n");
- Recovery();
- }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,"cat")){//--------------------------------------------------------CAT-----------------------------------------
- printf("////CAT////\n");
- ContadorInstrucciones++;
- //eliminar archivo que representa a un disco duro
- if(Files>0)
- {
- printf("Mostrando archivos... \n");
- MostrarCat(nuevafuncion,Files);
- limpiarvar(instruccion,100);
- }
- else{
- printf("\nError::-> No se ingreso ninguna direccion\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)
- {
- if(!strcmp(nuevafuncion.name,"mbr"))
- {
- printf("Generando Reporte MBR... \n");
- Graficar(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"disk"))
- {
- printf("Generando Reporte Disk...\n");
- Graficar2(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"inode"))
- {
- printf("Generando Reporte Inodos...\n");
- GraficarInodos(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"journaling"))
- {
- printf("Generando Reporte Journal...\n");
- GraficarJournal(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"block"))
- {
- printf("Generando Reporte bloques...\n");
- GraficarBloques(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"bm_inode"))
- {
- printf("Generando Reporte bm_inode... \n");
- GraficarBitInodo(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"bm_block"))
- {
- printf("Generando Reporte bm_block... \n");
- GraficarBitBloque(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"tree"))
- {
- printf("Generando Reporte tree... \n");
- GraficarTree(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"sb"))
- {
- printf("Generando Reporte SB... \n");
- GraficarSB(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"file"))
- {
- printf("Generando Reporte file... \n");
- GraficarFile(nuevafuncion);
- }
- else if(!strcmp(nuevafuncion.name,"ls"))
- {
- }else {
- printf("Error::-> Nombre imcorrecto");
- }
- limpiarvar(instruccion,100);
- }
- 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 (){
- char comando[150];
- 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);
- comentario=0;
- fin=0;
- ErrorInterprete=0;
- printf("--------------------------------------------------------\n");
- printf("%s\n", "");
- printf("%s\n", "");
- printf("Linea ->%s\n",comando);
- Interprete(comando);
- /*----------------------------------------------------------------------*/
- }
- }
- int main()
- {
- ContadorInstrucciones=0;
- ContadorComandosExitosos=0;
- logu=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