diff --git a/334/.gitignore b/334/.gitignore index e8fd3f1..e5eff58 100644 --- a/334/.gitignore +++ b/334/.gitignore @@ -2,3 +2,4 @@ bin msh *txt *sh +homework/ diff --git a/334/homework/1/bindec.c b/334/bleh/1/bindec.c similarity index 100% rename from 334/homework/1/bindec.c rename to 334/bleh/1/bindec.c diff --git a/334/homework/1/binhex.txt b/334/homework/1/binhex.txt deleted file mode 100644 index 573c944..0000000 --- a/334/homework/1/binhex.txt +++ /dev/null @@ -1,47 +0,0 @@ - -# Problem lines begin with #@. -# For each problem, put your answer on -# the line following the problem line. -# Do not modify this file in any way -# except to insert your answers. - -#@ 1 -- enter a number -22 -#@ 2 -- enter a number -7 -#@ 3 -- enter a number -3 -#@ 4 -- enter a number -25 -#@ 5 -- enter a number -255 -#@ 6 -- enter a binary number -1101 -#@ 7 -- enter a binary number -10101 -#@ 8 -- enter a binary number -10000 -#@ 9 -- enter a binary number -110111 -#@ 10 -- enter a binary number -1010000 -#@ 11 -- enter a number -44 -#@ 12 -- enter a number -18 -#@ 13 -- enter a number -471 -#@ 14 -- enter a number -255 -#@ 15 -- enter a number -123 -#@ 16 -- enter a hex number (beginning with 0x) -0x12 -#@ 17 -- enter a hex number -0x05 -#@ 18 -- enter a hex number -0x58 -#@ 19 -- enter a hex number -0x7b -#@ 20 -- enter a hex number -0x64 diff --git a/334/homework/1/os-intro.txt b/334/homework/1/os-intro.txt deleted file mode 100644 index eb32a76..0000000 --- a/334/homework/1/os-intro.txt +++ /dev/null @@ -1,19 +0,0 @@ - -# Homework 1 answer sheet. -# -# Problem lines begin with #@. -# For each problem, put your answer on -# the line following the problem line. -# Do not modify this file in any way -# except to insert your answers. - -#@ 1 -- enter 'a', 'b', or 'c' (don't use quotes in any answer) -a -#@ 2 -- enter 'a', 'b', or 'c' -b -#@ 3 -- enter one or more letters, separated by commas -b -#@ 4 -- enter 'a' or 'b' -a -#@ 5 -- enter 'a', 'b', or 'c' -b diff --git a/334/homework/2/processes.txt b/334/homework/2/processes.txt deleted file mode 100644 index 117ecdb..0000000 --- a/334/homework/2/processes.txt +++ /dev/null @@ -1,22 +0,0 @@ -# Instructions: edit this file to provide your homework answers. -# -# Problem numbers are shown on lines that begin with #@. -# Please put your solution to a problem on the line *after* the -# line with the problem number. -# -# Do not modify this file *except* to add lines as needed after each problem. -# Blank lines are ignored. You don't need to put your name in the file. -# -# No points will be awarded to incorrectly-formatted files. -# - -#@ 1 -- enter 'a', 'b', or 'c' (don't use quotes in any answer) -b -#@ 2 -- enter 'a', 'b', or 'c' -c -#@ 3 -- enter 'a' or 'b' -b -#@ 4 -- enter 'a' or 'b' -b -#@ 5 -- enter 'a', 'b', or 'c' -c diff --git a/334/homework/2/puzzle.txt b/334/homework/2/puzzle.txt deleted file mode 100644 index 2f0daeb..0000000 --- a/334/homework/2/puzzle.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Instructions: edit this file to provide your homework answers. -# -# Problem numbers are shown on lines that begin with #@. -# Please put your solution to a problem on the line *after* the -# line with the problem number. -# -# Do not modify this file *except* to add lines as needed after each problem. -# Blank lines are ignored. You don't need to put your name in the file. -# -# No points will be awarded to incorrectly-formatted files. -# - -#@ 1 -- enter a single number -1 -#@ 2 -- enter 'Y' or 'N' -2 -#@ 3 -- enter 'Y' or 'N' -Y -#@ 4 -- enter 'Y' or 'N' -N -#@ 5 -- enter text on a single line -some stuff -#@ 6 -- enter 'Y' or 'N' -Y -#@ 7 -- enter text on a single line -stuff -#@ 8 -- enter 'Y' or 'N' -N -#@ 9 -- enter text on a single line -some stuff -#@ 10 -- enter 'Y' or 'N' -Y diff --git a/334/homework/3/chap5.txt b/334/homework/3/chap5.txt deleted file mode 100644 index a98d582..0000000 --- a/334/homework/3/chap5.txt +++ /dev/null @@ -1,14 +0,0 @@ -# -# Problem lines begin with "#@". -# For each problem line, enter your answer on the following line. -# Do not modify this file in any way except to enter your answers. -# - -#@ 1 -- enter 'a', 'b', or 'c' (don't use quotes in any answer) -b -#@ 2 -- enter 'a', 'b', or 'c' -a -#@ 3 -- enter 'a', 'b', or 'c' -b -#@ 4 -- enter 'a', 'b', or 'c' -a diff --git a/334/homework/3/chap6.txt b/334/homework/3/chap6.txt deleted file mode 100644 index c874cce..0000000 --- a/334/homework/3/chap6.txt +++ /dev/null @@ -1,14 +0,0 @@ -# -# Problem lines begin with "#@". -# For each problem line, enter your answer on the following line. -# Do not modify this file in any way except to enter your answers. -# - -#@ 1 -- enter 'a' or 'b' (don't use quotes in any answer) -b -#@ 2 -- enter 'a', 'b', or 'c' -a -#@ 3 -- enter 'T' or 'F' -F -#@ 4 -- enter 'T' or 'F' -F diff --git a/334/homework/msh/msh.c b/334/homework/msh/msh.c deleted file mode 100644 index 0110465..0000000 --- a/334/homework/msh/msh.c +++ /dev/null @@ -1,151 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#define PROMPT "msh> " -#define EXIT_CMD "exit" -#define MAX_BUF 121 - -// Statuses from builtin responses -#define RESP_HELP 1 -#define RESP_DATE 2 -#define RESP_ECHO 3 -#define RESP_SHELL 4 -#define RESP_CD_FAIL -1 -#define RESP_CD_SUCCESS 6 - -// Sub statuses that are generally nice to have -#define CD_NOP 0x1 - -void echo(const char*); -void remove_newline(char*); -void exit_branch(const char*); -int builtin_response(char*); -int cd_handler(char**, const int); - -int main(int argc, char** argv) { - FILE* file = NULL; - if(argc == 2) { - file = fopen(argv[1], "r"); - if(!file) { return 1; } - } - char buffer[MAX_BUF]; - while(1) { - // 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); - printf("buffer: %s\n", buffer); - } - - // Deal with EOF input - if(!strlen(buffer)) { - exit(0); - } - exit_branch(buffer); - - remove_newline(buffer); - int status = builtin_response(buffer); - // the switch in case we need to add more response flags later - switch(status) { - case RESP_ECHO: - echo(buffer); - case RESP_SHELL: // shell command handler was used - continue; - case RESP_CD_FAIL: - printf("msh: cd: No such file or directory\n"); - } - memset(buffer, 0x00, MAX_BUF); // reset buffer after each usage - } - return 0; -} - -void echo(const char* buf) { - printf("%s\n", buf); -} - - -void remove_newline(char* buf) { - char* c = buf; - while(*c != '\n') { c++; } - *c='\0'; -} - -void exit_branch(const char* buf) { - if(!strcmp(buf, EXIT_CMD)) { - exit(0); - } -} - -int builtin_response(char* buffer) { -#define STRING_DELIMITER " " -#define TIME_FMT "%D" - exit_branch(buffer); // exit is builtin so here we are - if(!strcmp(buffer, "help")) { - echo("enter Linux commands, or ‘exit’ to exit"); - return RESP_HELP; - } - - // Printout the date today - if(!strcmp(buffer, "date")) { - static char date[64]; - time_t now = time(0); - strftime(date, sizeof(date), TIME_FMT, localtime(&now)); - echo(date); - return RESP_DATE; - } - - - - // Populate tokens - char *tokens[64]; - int idx = 0; - for(char* cur = strtok(buffer, STRING_DELIMITER); cur != NULL; cur=strtok(NULL, STRING_DELIMITER)) { -#ifdef DBG_LINE - printf("%s ", cur); -#endif - tokens[idx] = cur; - idx++; - } - - // Handling director changes - int cd_result = cd_handler(tokens, idx); - if(cd_result != CD_NOP) { - return cd_result; - } - - // Execute child process - pid_t child = fork(); - if(child != 0) { - int status_child = wait(NULL); - if(status_child == 127) { - printf("msh: %s: %d", tokens[0], status_child); - } - } - else { - execvp(tokens[0], tokens); - } - // Cleanup pointers - for(int i = 0; i< 64; i++) { - tokens[i] = NULL; - } - -} - -int cd_handler(char** tokens, const int t_count) { - if(!strcmp(tokens[0], "cd")) { - if(t_count < 2) { - int ret = chdir(getenv("HOME")); - return ret; - } - return chdir(tokens[1]); - } - return CD_NOP; -}