diff --git a/334/.gitignore b/334/.gitignore index ba077a4..e8fd3f1 100644 --- a/334/.gitignore +++ b/334/.gitignore @@ -1 +1,4 @@ bin +msh +*txt +*sh diff --git a/334/Makefile b/334/Makefile index 54e2d8c..37fdc95 100644 --- a/334/Makefile +++ b/334/Makefile @@ -1,7 +1,7 @@ # Single make file for everything becauz lazy object=homework/msh/msh.c cc=gcc -output=bin +output=msh default: $(cc) $(object) -o $(output) diff --git a/334/homework/msh/msh.c b/334/homework/msh/msh.c index 73e6511..17a9acd 100644 --- a/334/homework/msh/msh.c +++ b/334/homework/msh/msh.c @@ -21,12 +21,22 @@ void remove_newline(char*); void exit_branch(const char*); int builtin_response(char*); - -int main(void) { +int main(int argc, char** argv) { + FILE* file = NULL; + if(argc == 2) { + file = fopen(argv[1], "r"); + } char buffer[MAX_BUF]; while(1) { - printf("%s", PROMPT); - fgets(buffer, MAX_BUF, stdin); + // determine if we're reading from stdin or a stream of some sort + if(file == NULL && isatty(STDIN_FILENO)) { + printf("%s", PROMPT); + fgets(buffer, MAX_BUF, stdin); + } + else { + fgets(buffer, MAX_BUF, file); + } + // Deal with EOF input if(!strlen(buffer)) { exit(0); @@ -109,3 +119,4 @@ int builtin_response(char* buffer) { } } +