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: