/* mush.c * by Douglas Jones * a Minimally Usable SHell */ #include #include char command[100]; char *argv[100]; void getcommand(){ char ch; int i = 0; putchar('>'); do { ch = getchar(); command[i] = ch; i++; } while (ch != '\n'); command[i-1] = '\000'; } void parseargv(){ int i = 0; /* argv index */ int j = 0; /* text index */ for (;;) { while (command[j] == ' ') j++; if (command[j] == '\000') break; argv[i] = &command[j]; i++; while ((command[j] != ' ') &&(command[j] != '\000')) { j++; } if (command[j] == '\000') break; command[j] = '\000'; j++; } argv[i] = NULL; } void launch(){ if (fork() == 0) { /*child*/ execve(argv[0], argv, NULL); printf("no such command\n"); } else { /*parent*/ wait( NULL ); } } main(){ for (;;) { getcommand(); parseargv(); launch(); } }