diff --git a/Microshell/Makefile b/Microshell/Makefile new file mode 100644 index 0000000..15f9ce4 --- /dev/null +++ b/Microshell/Makefile @@ -0,0 +1,4 @@ +microshell: microshell.c + gcc -Wall -ansi -o microshell microshell.c +clean: + rm microshell diff --git a/Microshell/microshell.c b/Microshell/microshell.c new file mode 100644 index 0000000..6cf3abb --- /dev/null +++ b/Microshell/microshell.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include + +const int max = 1000; + +int cut(char **argv, char *command){ + int i=0; + return i; +} + +int main (){ + while (1){ + char komenda[max], directory[max]; + if (getcwd(directory, sizeof(directory)) == NULL){ + perror("getcwd() error"); + return 1; + } + printf("[%s]$ ", directory); + fgets(komenda, max, stdin); + if (!strcmp(komenda, "exit\n")) + break; + + else{ + int i = 0, z, w = 0, x = 0; + char polecenie[100], argument[100]; + char* argv[100]; + while (1){ + if(komenda[i] == 10){ + argv[w] = NULL; + execvp(polecenie, argv); + break; + } + else if (komenda[i] == 32){ + i+=1; + x=0; + continue; + } + else if(w==0){ + w=1; + while(komenda[i] != 32 && komenda[i]!=10){ + polecenie[x]=komenda[i]; + i+=1; + x+=1; + } + polecenie[x] = '\0'; + printf("%s\n", polecenie); + argv[w-1]=malloc(x+1 * sizeof(char)); + strcpy(argv[w-1], polecenie); + continue; + } + else{ + while(komenda[i] != 32 && komenda[i]!=10){ + argument[x]=komenda[i]; + x+=1; + i+=1; + } + argument[x] = '\0'; + argv[w]=malloc(x+1 * sizeof(char)); + strcpy(argv[w], argument); + w+=1; + } + } + } +} + return 0; +}