[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Practicas SO2




#include <stdio.h>
#include <stdlib.h>  
#include <string.h>
#include <unistd.h>
#define MAXSIZE 255
#define MAXSEARCH 1024


char prompt[8]="->";
char cadena[MAXSIZE];
char *param[50];
char search[MAXSEARCH];
extern char **environ;


void entrarcomando(void){

 //lee un comando

 char *c;
 int i=1;

     write(1,prompt,strlen(prompt));
     read(0,cadena,MAXSIZE);
     c=strchr(cadena,'\n');
     *c='\0';
     param[0]=strtok(cadena," ");
     while((param[i]=strtok(NULL," "))!= NULL)
         i++;
}

int opcioncomando(void){

//En caso de ejecutar el comando "+search"
// devolver 1 y asi sucesivamente ...

    if(param[0] == NULL)
        return(0);
    else if(!strcmp("+search",param[0]))
	return (1);
    else if(!strcmp("-search",param[0]))
	return (2);
    else if(!strcmp("search",param[0]))
	return (3);
    else if (!strcmp("newsearch",param[0]))
	return (4);
    else if(!strcmp("env",param[0]))
	return (5);
    else if(!strcmp("environ",param[0]))
	return (6);
    else if(!strcmp("setenv",param[0]))
        return (7);
    else if(!strcmp("putenv",param[0]))
        return (8);
    else if(!strcmp("get",param[0]))
        return (9);
    else if(!strcmp("prompt",param[0]))
        return (10);
    else if(!strcmp("where",param[0]))
        return (11);
    else if(!strcmp("x",param[0]))
        return (12);
    else if(!strcmp("xe",param[0]))
	return (13);
    else if(!strcmp("setenviron",param[0]))
	return (14);
    else if((!strcmp("quit",param[0])) || (!strcmp("exit",param[0])))
        return (15);
    else
	return(-1);
}

void maisearch (void){

	if(param[1] != NULL){
    		strcat(search,param[1]);
    		strcat(search,":");
  	}
}

void menosearch (void){

  	if(param[1] != NULL){  
		int i=0,j=1,k=0;
    		char aux[MAXSEARCH];
    		char *dirs[50];

    		dirs[0]=strtok(search,":");
    		while((dirs[j]=strtok(NULL,":")) != NULL)
			j++;

    		while((i<j) && (strcmp(param[1],dirs[i])))
			i++;
    		aux[0]='\0';
    		while(k<j){
			if (k != i){
	    			strcat(aux,dirs[k]);
	    			strcat(aux,":");
			}
		k++;
    		}
    		strcpy(search,aux);
	}
}

void listarsearch(void){

	printf("%s\n",search);
}

void newsearch(void){

	if((param[1] != NULL) && (!strcmp(param[1],"-p"))){
		search[0]='\0';
		strcpy(search,getenv("PATH"));
	}
	else{
		search[0]='\0';
	}
}

void promptcad(void){

	if(param[1] != NULL)
		strcpy(prompt,param[1]);
	
}

main (int argc,char *argv[], char *env[]){

int seguir=1,i;



while(seguir){

     entrarcomando();
     switch (opcioncomando()) {
     case 1:
	 maisearch();
         break;
     case 2:
	 menosearch();
         break;
     case 3:
	 listarsearch();
         break;
     case 4:
	 newsearch();
         break;
     case 5:
	 i=0;
	 while(env[i] != NULL){		
		printf("%s %p %p\n",env[i],env[i],&env[i]);
		i++;
	 }
         break;
     case 6:
	 i=0;
	 while(environ[i] != NULL){
	 	printf("%s %p %p\n",environ[i],env[i],&env[i]);
		i++;
	 }
         break;
     case 7:
	 printf("ejecutar setenv\n");
         break;
     case 8:
	 printf("ejecutar putenv\n");
         break;
     case 9:
	 printf("ejecutar get\n");
         break;
     case 10:
	 printf("ejecutar prompt\n");
	 promptcad();
         break;
     case 11:
	 printf("ejecutar where\n");
         break;
     case 12:
	 printf("ejecutar x\n");
         break;
     case 13:
	 printf("ejecutar xe\n");
         break;
     case 14:
	 printf("ejecutar setenviron\n");
	 break;
     case 15:
	 printf("DEICA LOGO\n");
         exit(1);
     default:
	 printf("Comando desconocido\n");
         break;

     }

 }

}



Reply to: