From 277baef5df7fe7f54cfb622b9e5bd971836b2af4 Mon Sep 17 00:00:00 2001 From: MyShinyDiamonds Date: Tue, 25 Feb 2025 13:34:21 +0000 Subject: [PATCH 1/9] Create TASK4-helper.c Stupid annoying code don't use yet pls --- Code/TASK4-helper.c | 139 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 Code/TASK4-helper.c diff --git a/Code/TASK4-helper.c b/Code/TASK4-helper.c new file mode 100644 index 0000000..c6d5c0a --- /dev/null +++ b/Code/TASK4-helper.c @@ -0,0 +1,139 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "helper.h" + +extern char original_path[1024]; + +void prompt() { + char input[1024]; + char *tokens[512]; + + printf("> "); + char *detected_input = fgets(input, sizeof input, stdin); + + if(detected_input == NULL) { + exitProgram(); + } else { + if(strlen(input) > 512) { + printf("Too many characters! (> 512)\n"); + return; + } else if(input[0] == '\n') { + return; + } else { + removeTrailingWhitespaces(input); + tokenizeInput(input, tokens); + + // Print out tokens to console (for debugging or visibility) + for(int i = 0; tokens[i] != NULL; i++) { + printf("%d => \"%s\"\n", i, tokens[i]); + } + + if (tokens[0] != NULL) { + // Check for built-in commands + if(strcmp(tokens[0], "exit") == 0) { + exitProgram(); + } else if(strcmp(tokens[0], "getpath") == 0) { + getPath(); + } else if(strcmp(tokens[0], "setpath") == 0) { + setPath(tokens); + } else if(strcmp(tokens[0], "cd") == 0) { + changeDir(tokens); + } else { + // Only execute the first token, ignore the rest + executeInput(tokens); + } + } + } + } +} + +void executeInput(char **tokens) { + pid_t pid = fork(); + if (pid < 0) { + printf("Error: Forking failed.\n"); + exit(EXIT_FAILURE); + } + if(pid == 0) { // Child process + // Ignore the default "command not found" error message entirely + if (execvp(tokens[0], tokens) == -1) { + // Simply exit the child without printing anything + exit(EXIT_FAILURE); + } + } else { // Parent process + wait(NULL); + } +} + +void removeTrailingWhitespaces(char *string) { + int i = 0, j = 0; + while(string[i] == ' ' || string[i] == '\t' || string[i] == '|' || + string[i] == '<' || string[i] == '>' || string[i] == '&' || string[i] == ';') i++; + if(string[i+1] == '\0') { + printf("Empty String!\n"); + return; + } + while((string[j++] = string[i++])); + string[strlen(string)-1] = '\0'; +} + +void tokenizeInput(char *inp, char **out) { + int i = 0; + char *token = strtok(inp, " \t|<>&;\n"); + while(token != NULL) { + out[i] = token; + i++; + token = strtok(NULL, " \t|<>&;\n"); + } + out[i] = NULL; +} + +void getPath() { + char *path = getenv("PATH"); + printf(path ? "Current PATH: %s\n" : "Error: Could not get PATH\n", path); +} + +void setPath(char **tokens) { + if (tokens[1] == NULL) { + printf("Error: setpath requires a path argument\n"); + return; + } + if (setenv("PATH", tokens[1], 1) != 0) { + printf("Error: Could not set PATH\n"); + } else { + printf("PATH set to: %s\n", tokens[1]); + } +} + +void changeDir(char **tokens) { + + if(tokens[1] != NULL) { + if(chdir(tokens[1]) == 0) { + printf("Changed to -> %s!\n", tokens[1]); + } + + else { + printf("Error: Cannot find directory: \"%s\"", tokens[1]); + } + } + + else { + chdir("../"); + } +} + +void exitProgram() { + printf("\nRestoring original PATH...\n"); + if (setenv("PATH", original_path, 1) == 0) { + printf("Original PATH restored: %s\n", original_path); + } else { + printf("Error: Could not restore original PATH\n"); + } + printf("Exiting Shell...\n"); + exit(0); +} From 2c7d03806d6af2a5495bf54ac077536b851a3397 Mon Sep 17 00:00:00 2001 From: MyShinyDiamonds Date: Tue, 25 Feb 2025 13:34:51 +0000 Subject: [PATCH 2/9] Create TASK4-helper.h Stupid --- Code/TASK4-helper.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Code/TASK4-helper.h diff --git a/Code/TASK4-helper.h b/Code/TASK4-helper.h new file mode 100644 index 0000000..46461cf --- /dev/null +++ b/Code/TASK4-helper.h @@ -0,0 +1,15 @@ +#ifndef HELPER_H +#define HELPER_H + +void prompt(); +void removeTrailingWhitespaces(char *string); +void tokenizeInput(char *inp, char **out); +void exitProgram(); +void getPath(); +void setPath(char **tokens); +void executeInput(char **tokens); +void changeDir(char **tokens); + +extern char original_path[1024]; + +#endif From b6108708316365366578b7168463624198a86652 Mon Sep 17 00:00:00 2001 From: TurtleHelm <89736173+TurtleHelm@users.noreply.github.com> Date: Sun, 2 Mar 2025 14:42:31 +0000 Subject: [PATCH 3/9] Properly implemented Task 4 Added Command struct for more succinct token checks. Removed unnecessary files. Moved directory setting & checks from main into separate function. Added Task 4 work for cd'ing into a directory --- Code/TASK4-helper.h | 15 ---- Code/Task 1/main.c | 110 ----------------------- Code/Task 1/main.h | 16 ---- Code/Task 2/helper.c | 100 --------------------- Code/Task 2/helper.h | 16 ---- Code/Task 2/main.c | 21 ----- Code/{TASK4-helper.c => helper.c} | 128 ++++++++++++++++++--------- Code/helper.h | 36 ++++++++ Code/main.c | 43 +++++++++ Documentation/BugFixes.md | 15 ---- Documentation/Task Specification.pdf | Bin 150374 -> 0 bytes README.md | 20 ----- 12 files changed, 166 insertions(+), 354 deletions(-) delete mode 100644 Code/TASK4-helper.h delete mode 100644 Code/Task 1/main.c delete mode 100644 Code/Task 1/main.h delete mode 100644 Code/Task 2/helper.c delete mode 100644 Code/Task 2/helper.h delete mode 100644 Code/Task 2/main.c rename Code/{TASK4-helper.c => helper.c} (52%) create mode 100644 Code/helper.h create mode 100644 Code/main.c delete mode 100644 Documentation/BugFixes.md delete mode 100644 Documentation/Task Specification.pdf delete mode 100644 README.md diff --git a/Code/TASK4-helper.h b/Code/TASK4-helper.h deleted file mode 100644 index 46461cf..0000000 --- a/Code/TASK4-helper.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef HELPER_H -#define HELPER_H - -void prompt(); -void removeTrailingWhitespaces(char *string); -void tokenizeInput(char *inp, char **out); -void exitProgram(); -void getPath(); -void setPath(char **tokens); -void executeInput(char **tokens); -void changeDir(char **tokens); - -extern char original_path[1024]; - -#endif diff --git a/Code/Task 1/main.c b/Code/Task 1/main.c deleted file mode 100644 index 96f43e0..0000000 --- a/Code/Task 1/main.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include - -#include "main.h" - -void tokenizeInput(char *inp, char **out) { - int i = 0; // Pointer counter - - // Can be 1 big string, but easier to see the delimiters this way - char delims[] = {' ', '\t', '|', '<', '>', '&', ';'}; - - // Get 1st token - char *token = strtok(inp, delims); - - // Whilst there are tokens - while(token != NULL) { - out[i] = token; // Store token in string - i++; - - token = strtok(NULL, delims); // Get next token - } - - out[i] = NULL; // Null terminate -} - -void removeTrailingWhitespaces(char *string) { - int i = 0, j = 0; - - // Skip leading whitespaces - while(string[i] == ' ' || - string[i] == '\t' || - string[i] == '|' || - string[i] == '<' || - string[i] == '>' || - string[i] == '&' || - string[i] == ';') i++; - - - if(string[i+1] == '\0') { - printf("Empty String!\n"); - return; - } - - while((string[j++] = string[i++])); // Shift chars over - - // Remove trailing newline on the input string - string[strlen(string)-1] = '\0'; -} - -void exitProgram() { - printf("\nExiting Shell...\n"); - exit(0); -} - -void prompt() { - char input[1024]; // Capture user input - char *tokens[512]; // Truncate string to right size in case of chars exceeding limit - - printf("> "); // Display prompt - - // Get user input & store it - char *detected_input = fgets(input, sizeof input, stdin); - - // Check for EOF (CTRL + D on Linux, CTRL + C on Windows) - if(detected_input == NULL) { - exitProgram(); - } - - // If no EOF, check user input string - else { - // Check to see if we exceed the character limit, if we do print message & return - if(strlen(input) > 512) { - printf("Too many characters! (> 512)\n"); - return; - } - - // Empty string? Return - else if(input[0] == '\n') { - return; - } - - // No issues with the initial input, continue to processing - else { - removeTrailingWhitespaces(input); - tokenizeInput(input, tokens); - - // Print out tokens to console - for(int i = 0; tokens[i] != NULL; i++) { - printf("%d => \"%s\"\n", i, tokens[i]); - } - - // if the 1st token is the exit command - if(strcmp(tokens[0], "exit") == 0) { - exitProgram(); - } - } - } -} - -// ? MAIN LOOP - -int main(void) { - // Infinite loop until exit - while(1) { - prompt(); - }; - - return 0; -} \ No newline at end of file diff --git a/Code/Task 1/main.h b/Code/Task 1/main.h deleted file mode 100644 index ffeadc3..0000000 --- a/Code/Task 1/main.h +++ /dev/null @@ -1,16 +0,0 @@ -/** @brief Take a string, tokenize it & return it - * @param inp The string to tokenize - * @param out The string to return through -*/ -void tokenizeInput(char *inp, char **out); - -/** @brief Remove all trailing illegal/whitespace characters from a string - * @param string The string to remove the illegal/whitespace characters from -*/ -void removeTrailingWhitespaces(char *string); - -/** @brief Exit the shell */ -void exitProgram(); - -/** @brief Display the shell prompt & process user input */ -void prompt(); \ No newline at end of file diff --git a/Code/Task 2/helper.c b/Code/Task 2/helper.c deleted file mode 100644 index e700796..0000000 --- a/Code/Task 2/helper.c +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include - -#include "external.h" - -void tokenizeInput(char *inp, char **out) { - int i = 0; // Pointer counter - - // Can be 1 big string, but easier to see the delimiters this way - char delims[] = {' ', '\t', '|', '<', '>', '&', ';'}; - - // Get 1st token - char *token = strtok(inp, delims); - - // Whilst there are tokens - while(token != NULL) { - out[i] = token; // Store token in string - i++; - - token = strtok(NULL, delims); // Get next token - } - - out[i] = NULL; // Null terminate -} - -void removeTrailingWhitespaces(char *string) { - int i = 0, j = 0; - - // Skip leading whitespaces - while(string[i] == ' ' || - string[i] == '\t' || - string[i] == '|' || - string[i] == '<' || - string[i] == '>' || - string[i] == '&' || - string[i] == ';') i++; - - - if(string[i+1] == '\0') { - printf("Empty String!\n"); - return; - } - - while((string[j++] = string[i++])); // Shift chars over - - // Remove trailing newline on the input string - string[strlen(string)-1] = '\0'; -} - -void exitProgram() { - printf("\nExiting Shell...\n"); - exit(0); -} - -void prompt() { - char input[1024]; // Capture user input - char *tokens[512]; // Truncate string to right size in case of chars exceeding limit - - printf("> "); // Display prompt - - // Get user input & store it - char *detected_input = fgets(input, sizeof input, stdin); - - // Check for EOF (CTRL + D on Linux, CTRL + C on Windows) - if(detected_input == NULL) { - exitProgram(); - } - - // If no EOF, check user input string - else { - // Check to see if we exceed the character limit, if we do print message & return - if(strlen(input) > 512) { - printf("Too many characters! (> 512)\n"); - return; - } - - // Empty string? Return - else if(input[0] == '\n') { - return; - } - - // No issues with the initial input, continue to processing - else { - removeTrailingWhitespaces(input); - tokenizeInput(input, tokens); - - // Print out tokens to console - for(int i = 0; tokens[i] != NULL; i++) { - printf("%d => \"%s\"\n", i, tokens[i]); - } - - // if the 1st token is the exit command - if(strcmp(tokens[0], "exit") == 0) { - exitProgram(); - } - } - } -} - diff --git a/Code/Task 2/helper.h b/Code/Task 2/helper.h deleted file mode 100644 index ffeadc3..0000000 --- a/Code/Task 2/helper.h +++ /dev/null @@ -1,16 +0,0 @@ -/** @brief Take a string, tokenize it & return it - * @param inp The string to tokenize - * @param out The string to return through -*/ -void tokenizeInput(char *inp, char **out); - -/** @brief Remove all trailing illegal/whitespace characters from a string - * @param string The string to remove the illegal/whitespace characters from -*/ -void removeTrailingWhitespaces(char *string); - -/** @brief Exit the shell */ -void exitProgram(); - -/** @brief Display the shell prompt & process user input */ -void prompt(); \ No newline at end of file diff --git a/Code/Task 2/main.c b/Code/Task 2/main.c deleted file mode 100644 index 3810c15..0000000 --- a/Code/Task 2/main.c +++ /dev/null @@ -1,21 +0,0 @@ -#include - -#include "helper.h" - -// ? IMPORTANT INFORMATION - TASK 2 -// ? STEP 1 - Modify existing code to sort tokens into an array of Strings (max array size of 50) -// ? STEP 2 - fork(), exec() & wait() functions -// ? STEP 2.1 - Figure out how to execute fork() & make the parent process wait() -// ? STEP 2.2 - Figure out how to call exec() on external programs through C -// ? STEP 2.3 - Make sure exec() is only searching through PATH variables(?) - -// MAIN LOOP - -int main(void) { - // Infinite loop until exit - while(1) { - prompt(); - }; - - return 0; -} \ No newline at end of file diff --git a/Code/TASK4-helper.c b/Code/helper.c similarity index 52% rename from Code/TASK4-helper.c rename to Code/helper.c index c6d5c0a..aa63307 100644 --- a/Code/TASK4-helper.c +++ b/Code/helper.c @@ -10,118 +10,157 @@ extern char original_path[1024]; +struct Command { + const char *command; + void (*function)(char **tokens); +}; + +struct Command commands[] = { + {"exit", (void (*)(char **))exitProgram}, + {"getpath", (void (*)(char **))getPath}, + {"setpath", (void (*)(char **))setPath}, + {"cd", (void (*)(char **))changeDir}, + {NULL, NULL} // Sentinel value to mark the end of the array +}; + void prompt() { + // Initial input & token array char input[1024]; char *tokens[512]; printf("> "); - char *detected_input = fgets(input, sizeof input, stdin); + + char *detected_input = fgets(input, sizeof(input), stdin); if(detected_input == NULL) { - exitProgram(); - } else { + printf("Error - Input was empty"); + return; + } + + else { if(strlen(input) > 512) { printf("Too many characters! (> 512)\n"); return; - } else if(input[0] == '\n') { + } + + else if(input[0] == '\n') { return; - } else { - removeTrailingWhitespaces(input); + } + + else { tokenizeInput(input, tokens); // Print out tokens to console (for debugging or visibility) for(int i = 0; tokens[i] != NULL; i++) { printf("%d => \"%s\"\n", i, tokens[i]); } - - if (tokens[0] != NULL) { - // Check for built-in commands - if(strcmp(tokens[0], "exit") == 0) { - exitProgram(); - } else if(strcmp(tokens[0], "getpath") == 0) { - getPath(); - } else if(strcmp(tokens[0], "setpath") == 0) { - setPath(tokens); - } else if(strcmp(tokens[0], "cd") == 0) { - changeDir(tokens); - } else { - // Only execute the first token, ignore the rest - executeInput(tokens); + + if(tokens[0] != NULL) { + int i = 0; + + while(commands[i].command != NULL) { + if(strcmp(tokens[0], commands[i].command) == 0) { + commands[i].function(tokens); + return; + } + + i++; } } + + // No match so we execute as normal + executeInput(tokens); } } } void executeInput(char **tokens) { + // Make fork pid_t pid = fork(); + + // Error when forking if (pid < 0) { printf("Error: Forking failed.\n"); exit(EXIT_FAILURE); } - if(pid == 0) { // Child process + + // Child process + if(pid == 0) { // Ignore the default "command not found" error message entirely - if (execvp(tokens[0], tokens) == -1) { + if(execvp(tokens[0], tokens) == -1) { // Simply exit the child without printing anything exit(EXIT_FAILURE); } - } else { // Parent process + } + + // Parent process + else { wait(NULL); } } -void removeTrailingWhitespaces(char *string) { - int i = 0, j = 0; - while(string[i] == ' ' || string[i] == '\t' || string[i] == '|' || - string[i] == '<' || string[i] == '>' || string[i] == '&' || string[i] == ';') i++; - if(string[i+1] == '\0') { - printf("Empty String!\n"); - return; - } - while((string[j++] = string[i++])); - string[strlen(string)-1] = '\0'; -} - void tokenizeInput(char *inp, char **out) { + // Counter int i = 0; + + // Get the first token in the String char *token = strtok(inp, " \t|<>&;\n"); + + // While we have tokens while(token != NULL) { + // Set the token to the array index out[i] = token; + + // Increment counter i++; + + // Get new token, if any, from String token = strtok(NULL, " \t|<>&;\n"); } + out[i] = NULL; } void getPath() { + // Get the current path & print it, if there is an error also print that char *path = getenv("PATH"); + printf(path ? "Current PATH: %s\n" : "Error: Could not get PATH\n", path); } void setPath(char **tokens) { - if (tokens[1] == NULL) { + // If there is no path argument + if(tokens[1] == NULL) { printf("Error: setpath requires a path argument\n"); return; } - if (setenv("PATH", tokens[1], 1) != 0) { + + // If we fail to set the path + if(setenv("PATH", tokens[1], 1) != 0) { printf("Error: Could not set PATH\n"); - } else { + } + + // Otherwise, we assume it has worked + else { printf("PATH set to: %s\n", tokens[1]); } } void changeDir(char **tokens) { - + // If there is a path after the command if(tokens[1] != NULL) { + // If we change directories successfully if(chdir(tokens[1]) == 0) { printf("Changed to -> %s!\n", tokens[1]); } + // If something goes wrong when changing else { printf("Error: Cannot find directory: \"%s\"", tokens[1]); } } + // If there is no path after the command, just go back 1 directory else { chdir("../"); } @@ -129,11 +168,18 @@ void changeDir(char **tokens) { void exitProgram() { printf("\nRestoring original PATH...\n"); + + // Set the path to the original one before the program started if (setenv("PATH", original_path, 1) == 0) { printf("Original PATH restored: %s\n", original_path); - } else { + } + + // If we can't, send an error msg + else { printf("Error: Could not restore original PATH\n"); } + + // Exit shell printf("Exiting Shell...\n"); exit(0); -} +} \ No newline at end of file diff --git a/Code/helper.h b/Code/helper.h new file mode 100644 index 0000000..846e4cf --- /dev/null +++ b/Code/helper.h @@ -0,0 +1,36 @@ +#ifndef HELPER_H +#define HELPER_H + +/** @brief Display the shell prompt & process user input */ +void prompt(); + +/** @brief Take a string, tokenize it & return it + * @param inp The string to tokenize + * @param out The string to return through +*/ +void tokenizeInput(char *inp, char **out); + +/** @brief Exit the shell */ +void exitProgram(); + +/** @brief Get the current working directory */ +void getPath(); + +/** @brief Set the current working directory + * @param tokens The tokenized command String +*/ +void setPath(char **tokens); + +/** @brief Execute a system command + * @param tokens The tokenized command String + */ +void executeInput(char **tokens); + +/** @brief Change the working directory + * @param tokens The tokenized command String + */ +void changeDir(char **tokens); + +extern char original_path[1024]; + +#endif \ No newline at end of file diff --git a/Code/main.c b/Code/main.c new file mode 100644 index 0000000..ac1e535 --- /dev/null +++ b/Code/main.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include + +#include "helper.h" + +// MAIN LOOP + +char original_path[1024]; + +void setupShell(void) { + char *path = getenv("PATH"); + + if(path != NULL) { + strcpy(original_path, path); + } + + char *home = getenv("HOMe"); + + if(home != NULL) { + if(chdir(home) != 0) { + printf("Error: Could not change to HOME directory\n"); + } + } + + char cwd[1024]; + + if(getcwd(cwd, sizeof(cwd)) != NULL) { + printf("Current working directory: %s\n", cwd); + } +} + +int main(void) { + setupShell(); + + // Infinite loop until exit + while(1) { + prompt(); + }; + + return 0; +} \ No newline at end of file diff --git a/Documentation/BugFixes.md b/Documentation/BugFixes.md deleted file mode 100644 index 40823a3..0000000 --- a/Documentation/BugFixes.md +++ /dev/null @@ -1,15 +0,0 @@ -# Bug Fixes - -This file keeps logs on what bugs were encountered during development and how we fixed them. -Please keep a running log when developing to ensure comprehensive documentation is retained. - ---- - -| Bug | Issue | Solution(s) | -| -------------------------------------- | ----- | ----------- | -| "exit" command not working as intended | Last token in input string always contained a newline character | Preemptively remove the newline from the string by setting the last character to a null terminator before tokenization | -| `ctrl + D` not working | `ctrl + d` keyboard command does not exit the shell program as expected | added new variable to hold `fgets()` output & check for EOF/NULL, exit if detected. Otherwise, continue on with the program as normal | -| String of delimiters crashes shell | Having a string of only delimiters crashes the shell somehow | Added a check for an empty string before doing anything else to the string | - - - diff --git a/Documentation/Task Specification.pdf b/Documentation/Task Specification.pdf deleted file mode 100644 index 51b80f70204d14bce6a4cf48efec12a087bf7765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150374 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

l#gbm~X-E84?xvnl= z^YT59gG6J$gX1*w$+}wxlIy6-U;rm!ng;WSy3KbmObHdpqbdg{<>i~hI*#Z>#Sg}M zfD->@p$LvD9*_hlg>@P#U9cn-|DotAJ4N5tBpSzb1(D}a?3W1WmJ2XgI3)@cq%Nt! zyb2)Cs_LWuv^c#{$j{ebf(g7Ek~WsWn1l9nc+vwzZ@^2vEdr1w& zU-t^K6jKK?BQr3R?$Juq%>(LT7RFoL1`6U`MnE*_frZ6*R5QS2)ReaCk6U)eo;@HFuVxzfhk40Fv>|;>`%36TbB1N9$>Sw939Z$mqhDk37O2PFaD+-b zyKS>Q_i*ysrJ?uzWhgrNP}!>%bu@c%F@5g&kf1e6n_8=ezmjXaUBgF|)B@XE^X={S zwD`{4J;Qs$uz__n4YXx92QSziaz(Qf^RjW{=WLlMkf%k;cN8Wzmbo;|nzFH?&u6EnXI;Zay>ByU9Sdw9cTD_9UF0?L2`GL_dL5(sVL|B9M*1%Zfc?daxBV_5gyjify1F7mk zSYx@!Mh5z~d>Ct?L?vHf^onxUN5A>UP@rNrPSTdn-N&zarPY6=Ppw)__Tm@a80+&H zAW!Th9b~{e>8y9*q+!h7`CQWJH3D7;YoO-nz?al5)Df&O;zwc|#pC;l^36Tw#C`x3 zN+|!(`5Y+dXSdT@Vz0R2cWPVJkC;CbR*A~h7;B*DLx$`aTeOre`T*XTWKhPu<+GGL z6ft6_nc{aQkzo~K4r(o`D6+;Hh&ndh5?Uj^Qrkd8ak1eF;PXqHRb0B3HB3%*sK`^u zxKuF31SicQpn=DkFomYWre;z6tDk z1`eo}O7SH(w!<1afXQ(w&d3?I@8&rwNbwCLee?;ja-vk+@#Je^qFds367LWsw~!M) zQa|kjXTfjGM|8f)@LfQ9FW(j0Kv|_IYM&ygaVGwLsoj#Qo%hYdKz^}1`t2HuG?prP z&I4!^5>-k@71vO*J=UWs4uQWwQJ#r{gV9L>y@21jSz|8^4mFNbqZ7k2M;y6%n|#0c>r0YVXeBl9 z{u0(F>Qh2{%B&%0m?^SxxY!?gL=K*0_o)kqY?V)Ov|vXgDE>z~>uA8ISo8=i-$%k=KtwF_AC&YXPz zKw2m$bx}eGAOpd85&=nVZCn^2e}REOf_MZ@@=`>g6PO=t@)MQ-<2ncwrF(u1DGUyf zu+d~f4jx795D;@7XE6U?tPrE*t*#^j1OW(;AN*@0CqNy+tNz)y zh(3uBfgh-_0Yfr0R^X!u!4;q@gc*l`x~eq7Nx%WPKzs|jNH{ZENL*N(Ai@j+Mb2%d zGlYPuAU;69+iNL54NQ>0L0zCm@PlYvUlhx$jhf&(RlbhSt^`i%X93?I5HPsGn@;lE z**z{o#cPS1URrLDh2`r4*o`prJVvCwcZ8an&#<7dv7eZ=K?eZE_*Y#+2StEQRDc(M zP5^o|hI^4gKhA!1h8}QzI~FL|y1`b!7tz)JJO0CMjc{xn|3RMM56_>{gIqLD44696 zK6?O)O}qe-A2(MXnAQ)QgIWBbTY$eoxA(xn0_eGZyqf!{rcpv%Uf-GD7vTYx8Kxzs zQr>=A-)YKpegQwTo zzSld!Kcnytf*fAohP%Zd2x0iZHYmOr@jtSxAwM~~Hf^-~`ICNLOAZL1925jscZp~K zQ4oP5z6TIhR0F`am0^ATIKGp|?6%&F_A?M9I`AQ)Iy#K66bPri-mjEFoO`v1Ge|$oZq*1sT6(K(fG>RZKL$R4)s6@ z6gYgKzL!hrI$^^xdN?f^2!N*Ew#nNKf49#O0f4**QA9sr145qtyUEYd{kkv=n4S*( zihlLy)~^dZ|3ThehWj{VioYs##;W!Yh9N+WoqhLtEO%<>dp?8#{od3{I%yN(PeNUW zYRAdP&`WXI2CCGfYPg~+gO_XLxHrX?Em-miK7edXs$Oj7mqTyg#q}UJz^NO^DzG5( zvPr0Rl4yn<5RV##WgBCM)>oY{oaNr%73Z()djyMz#P$m!wWND z9pa`Hb4};8z1plJ!-4Kc22_Q!3PH`tAuG$)?%FjcM%IOz@S)XU8X8#i2Qq^p8{ z{q9%|i@8PT$nw9NT`3Y9@@t0HB2T;xkl-3gu`I#snQIHPRdQH{gc&)?#<+tI{P>n7 zWts3U;7$)#qmx-FG(Jz&N8Y#xrsz_ukLsdK(}_^{K4h~UwYqbSws0p^XFk{QjLL*g zcPe3~#A^c<5xZnRA1ng{$+qGDm=3J^*6DfGp{Aa@yG3Slu9})C9A(>6#R-kg3%idi zOMMm|a`Ef}0_>~|EK=sB^seckKlqODpi{MY>B@k1lxj`U=cnH!Ge+krBmuOaAD))S zb}_*EOTssbbJ4g5Uu;tlM%Ix~E)IKmwqf)9R$?s45Xju9;lla0Z@IPzWWZ133$41s z^-s5c{a+T%=ocQ#qJk732|u4<*2akOZj7?%$+N z#_Fp%=@#V5$5@#jQLG!Bk2rsP4mydVB)>Nu+zftFI&2mS+SCxZs^HD%I(D#TfK!vuj zm|AxEzpgfM450|(-!*k+g4*;?wF|^X>{MPOZ$9xfk@x1D_nB+p-$zHiCeYKq%NUq! z*$zMfaHiLh-59x|-7#ryXo_N8PPH~@jrJW)R(e2odnXX2HJsLUEk9aV z>FUJP@NZQXt_0ZnV)f#)*jhB_2oqJo2PNfDpU1VZ6L`^kfSZ?a_=MH@VB+i4QHx%R zyl>k3Yo7CkPBYw!UBwy`r_gtkqfBxdl?dFA-xq-#xyN=zgZyht@!{k^5v~;MLIcOxV-l<^^yi{WQKEF>bU`wX`c=tQI`uN8>7Q^<>`FCSp$%flktFA-;gX?IIO%wHC1P^Ndei|&S z*bTYIc2UaA&@u!k*_jqAJqW9!Q;V*TQPvU)(+w>*8t@b?rC-fqV1_mrtYhjcpQvAl z#mDeQfSw3jBHMjrN~hzVn@8Js%~i8pfeXaIvh}K^UQe@HEQ${*AE#gSK lqGEkoDJBkg49Obug6X0786- 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⁢hQ0~Qd<>hLm#P#v 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�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

X&xVAHdJ@M(+#EpLL$ut<7TQJV$spjq8{%j z8gKkMBR{#c(W8TuMeUdN5{#b>o@z$Ymvl0TxaU|`>h}~l zLt^ohc3oL2>{As0z%L?_(vv)ZexdsJZ!_<%Wl}-qPX;Q=!9|xOS;R zTOtM>s3)8i*|K^CR7{K8y82tjQg{NfHK^~jJ!aL7X$%@W1pyL$Sv={Vbpssg>_~N{ z0h1~Y@}0h30aI&%$%Al#c1%NqvkSO4unAaI#8uJ0n5d3xa^DVOs?JvsRf#!xOwU^J z)ao~9tky41!zz*SGFc-bg@<846tbH8My8tdod9aG>j^ayUv^tO${>P@oCJu9!F;+^ zje~*|W2cYH<`s9qvD4%E;E;8Kp)>cUv8JwNDJ@T%SY$h;CVH9PuB;-3&Pa%LKvk>^ zlo?h!DlQ7HyWFzf#AWy0ZPq++!ei=)P+VqUs0~9%2`E_Jvr~ZP&MKrh6_6s18g*oU zt_^%0M-c-ybB;lxuQDoctO_D%lK{Y=xn*LF?X4P2AgsC@XX`hi%+g9zYIa3`Vc$kC zAuy7U5Pp`qdtv>Z*MgZn>E&VUVqda^f!gYHeE|ED39fy9LXcfq*l+z2LeT#s&m>MZ zVNr5H6$d7nubWVoh5l6Q$a|Y7`kPshbJN^5GWs?M^G{skt0rhvdP@K$lIkNOEVQSM$QqZ2OJ0I}z~rK`v15cjNkB+D6CkTP@r z%{E-K&6O%u-dvi2*QfDnhDq_jdG(}Xhvy*1bOy$hx?9ijDZ~vh~D5@qD*~!Z+k$|{cC!!%#Qe>{`vg; zspx7SV+7R$YkXSkdkjvdGQvQWZ>H<>%kO^sbyKKsq+KB~O8Umb$JQNNbi6oiIqHMu zv@Wr4hVnW^<~yRYaE0X+3r`Il!_V!6+;Bl?(O2(<4ZGk1fqTfKXj61M=s3vI$X1~m z7<5B7vafuKm!~<{bt)b~DXeAu&{SKSfOwhB1=HXLyTj-7l5W%iHTMhd$Q%*LrtqOI z=SC^L_Xq~fa`*$zZBpols11Sy?8Gjm-C3q$#`DqR#YYHgGvuX!H&|2}fzxdvfnBRR z5=awv)HlACy;l5M`351+k>b;t$C|<0QMZdg;r3H@r%QvGxt*o30ww&dHFv?X^EU<}Mn9bt1?A9EW& zLBZ-2MFYvS$Vta=SM8H`-HF@jG*#9fC{iZP?x)Yb(ovQ#k07o@b@v!oQkzWY(oK(w zH*7CXmK%7gImI|!0CP71=fK^k#`HN|+u{jFBYB#Oq^$Kz&o}c)MT^W$G8&WB zy_r7QNNtGm#bV)TZwaaam*ZLtidmUOQ~weAVD$po16)maNG^I*{(a zF-WOblXWj=w5Q`B*da8n*u>B^u5LbP@2+>JU$DCft;}Zcs{6-Irj88J$f+a-GT1Wgn&+5cesjJ_QJ=PMStfp_qXc9E{BY$ki@H{W^ zQbi)ITVjXo<@#OZ9CCYkt}bSIEDuG0somcLTb{Rv=Y13;;ck~VfagpV|GIyE z7v{Bh_shH}nvZD1&v`kRl+e6Z86nO_WFmY>4@ZpF$Fdp=s67?`ox4SnB4|7{d!K#1 zmcx_R;Ymh~^o^WUsPOyM&oUde&4hflPJcHDo6ZmS%RMn$uW|YIj2}zv@m}3`X8wF@ zJ|Km}7K~N6(EA$K4=E#rj3{#=<|kDwrA5Q1W{VshIa7h=~?Q)Q-mPQ*Zo= zP$7AKi~FcAiTgrfq&Wdi|9G^8By)xau=+mbBsgI{qpv)z&o5f0*t7FQwFY6*(g5*) zuiIp>9!|qn^0?=9$HE>eyl3azu+#Z<@KbnSgvx5tr6lnp5bP_HwPNvtI+3x?70lyE zb~H|wzaN}o)CGpE_g$<_m{(2x^C$-+A3Wlwem4pXXaQ6FjWC>>WC`xpTZQ9G7)~Xx z99TCy^#ox_38CGsGh+*wTJ{zSNodkiNm!$Mt>$}i*Mg6q@jablR?wWWz~i%)M2?;p zNnu&Nal#-KDMHx{?H;Dl&F^8$){zEr8JmF^N_!J_qu=$4g#K~$&n~{8OCE$g3AFyo z9LhP`H=rqFQHD~#&S)aoW_n7|7Z!R&fXc?Kca7xHS6`x1K=wbc>^jQOjzRXx^vOzi z#<16%KCEh)Kv4m`cWYsEx)8VjfwyN(-7wYf5XSl2P8HXw(C@v{KN`R}&V%W~D0~Cs z{+OA|;q(POkB_8NeHNG!<0)@gYq$?SpSQ&Emby_h;EES8)BEv7*8BSeoGfE&ksw7< z;GQWHLY8OY2firz5gAekNy9JnkI7!SMZ(GNDj4@e5AEgkbM99>h*fl+JXs ziHSPuD7#05Ips3W4*_I?poqR&!#n{V4^TcFBKsR9SP$lg5oV#7Bu3b`p=ZS&YGk=f zQd~8M1k3Ufh)TBw?QR_dP|%ER8uY9(A;y4hA-F6PahHW+a6R{yD6T(im+!tym=zVM zEkq(%5A*Ws*=U*!%*n>ia?dV2foa~-am?nBKkAGe7#*#F)`lL}K{SAbJwfmtTxpi_ zf~k=m_T#zoBfmdj!ITkr3IFnYcZv@kioU;7FpV4(6;Cd~a}O6WFK{f6>ezWTU*ng6 zWb5j3kw*~@wUMA9`FJ#H_p=N#0n_!P@5UN*=-#~7HOJSr6Da`h=9R}t6xJ&1^#U$@ z-5XT9AN33n_`vtYGh|PSQ&rwebG+yyUd)yLPOQckUkv9S4ScJ-IZ z1@k8;Sx#h5e*GfB#W}ax9BS;ji+dZMz+~DN=84L~`zG@(&eCep;u}*BxSn?ChJ`t6 zxu*g2{`ua%ii6z`(q*Xdxd&R}9&1szb~fqI7L4wjg?CQ8&iGyq-=ehHJA~6t2SqvD z^wvEi5`QAk?7*v6E=RfYu2eky3=wIbS<>2VW^#Wqn6k;)I-TxE>#_3VX}7Io$VsBh z#qJ*_$vfD@t{eHrJCz%bEbslAnO#Yyc!<$z83CtA#_&njT%Bn)znNTEzgrK;qjCJg zlyM>vYr^r@;gTn_>(DG0LVqciA#`>3p5Zhr|Lx_+t3J-(mh~pB4k7;XHF8*Din0eP zWaSM#g|6L($4dmS*e8LrUqG@g`A~2X`v7zxx?9WU6Z>~J_l9e#s=bUK>Zn2YBL(yM8x^h41lb4VIt6}o(mZ+>4Fxwa(D24L;pBE%wl~RgWaPf(Qt=FS z67(>cG3ouv(oat-0L_D?<3L_vR52FCi7~9X45~)+gE?Vi zrXDAuG;UjtpDq@}!n?=J$*!@|^Hr0hDtg7D6WLj25N};$sg`lCErS`{g9G!jzRnE2 z!H?+rToh!HAq>2;L?Nm*)B1fI?sOuhuQJ*1`Pck&zp!ol0$yNwMAKd!@({7q3_*Wh zTCsp*znp*M%!JdOs3Vz3w|m;FEU%?WflxASj$(7gkA1P7qv`|6imhu#q}iV>ZrEmh zqPPwNwQTLRXwQ^F+|ddm?5g+~Sk4ArG{)$#+17?&s5rIPr_IlqU-w=(bSMV}POiFw=ev17KCY$BMewhV0wdGmr7X^PwcqphGRFktVvlbl&m zL3zaJogc#X8KdTQ-qtEvLXnvV2r7Uh1M(#T=5_hNV`9sRiden$ht0y;E15}}WJ!)! z9(@lW?o$hy(q$*;K8ne5T+_ZnBZ7i`mM0;L!I(E`Vz!<_zjV#REw|*P-kkjbyoa12 zIFq?uvq+vo8{t7Gf9$fN5}Ulgf?uCB3Bn&_yImqW8(4@7ey$(~Hu3;J4g^d(j~t)i z>UsIuTe+S)yzB$xkXgJ6b!DhDs=v{=slrwxfvy)8 zzqf(dS+T4k{`^El=*UICAU`3%0a*w+TJ1{qa*3$x`3F6%Y&$(6HA)a$(azRG(In#O zk51ViYGK-ZZD@}oZ9Mnt8Rp<*#^$6-E)p|}qZwf`FwWWOgY&{lCd0V9cwE_VXkt04 zGbWe*Mg`tyucp}k;<=UX;SHTyf>CyQlDTip!)ijlhRtRRB0zEu&IIyoX5Cd(h2doG zva9rxJ~&4E2rNO^H*C}ULq)^p6RHe*WhY^SwnLQeXucXVjyD|4!5ii}W#&~FlpeL^ zIn}t2RY*yZ<5=NyIM@W>K@pvlp(X<-h+)oXhIgvNzY>moYskd&N59G$*c;Hs=8tQB zZPQuk(tb8hVYdl9Vc_YzuQYPEvV8~9+S3i~Y0(!1*CAY0+6#Sj+Y~U`#U~*jrAb|n z^uineS|{zi8U0hAp(QJh`(;P$xpLBtAXv)3@CK^`T6Lz%S)PTZMbWp{5iFxNYI9<} zFpE>Py*|?ZEiOSBFsk_D018;APvjAgWX(!#$;sKj`Di08&KS_ODnTcQeUT*$E4f4> zQg12o;Tui?OoS}R=AZ5tWgCjL%7*>xY!{-@z0@_8XNXWEiw+dPpg`(56Ce`&Woi}F zOHx-B+^}$>6~*@4{Fo2Wgw&rO3)v~jXV!q5Et39COqp8TmEj{1^A@agM-l6G}GuqetgODF)%dp(QcWc~Xs?uM^A7xJ>XK1FSgt)(6 zn8%g4?ac5IqlQPy^ZO)LK~>r{FF5L{Gm=aSSiNEX4ls{7797fz>Y1!QxFx~k3o#N` z(Gc1SY(<-&Y+P7$C@p{dnjs>t?iEMy1Rrqq)R|g%oIg#slb${Y)QcIp$m|Kb-p+pZ z+r!&fH0%0zwHmD90GAL^od{jLNqso6Fb1%a&6>^zg5=ZH4+D|y)tE>5Uh z%CVah+T!=5^t;(hjGL@yxiMIH6|gTXw}L)8Z)yNo$kY~MQQxSFfQ#QvzO^EddDp+K z$7&wyLZY|ER^zTbo~IiZ@+1XvP}(>63+Sq-Vnr%y?q>(jD(sr9HWGYsc`4v=Ov!*!KkU^Vs10tR}(<;#PD01sun3gXPvfuClrN15(n$ zYWeRbEwlg2q-7#j4%WY>BL6#+k*$=ZZFU%tIu2D`5ffHG2M9_1V2GEYW7#b=6U-Y_ z#iZC!#O0tu-e2x;QOi|$kfbv=$J?)99Ue}dxTckxno#eCm(zG$k~-_-&K`cFt*`HE zyO~*XacgQWn{)H<)hu>WH#zG*ER%26-(7AEr!{ixP;u3IlViWgH~IPVp1rTXXT(b@ z!tySEKiQRQLPfat;K9Q`9&$MNc8_ite>-%4*lLlL?7ElErMs@8zNj1Fz}z9BH!HuE zV_o)M8giaPhw@X|i9>7iNS*aJZ%q3eH)7**eF&Wf-SX`({LGN|IA&g<*`&@|uXXS0 zm#Uey>3e%ld|E>Wf(n)LT1eIDUmxujG->bbyOB5VZnaV~ZI`X1m9>YnmGy6xZ`IR3 zZ_qU{2B>PS?#`v`vugPw*5>S<@DK}j6F}j1Sb#;?zh$TX;E4hH7IsNV4p|M94L!^b zG>6mziRRlopx{d6TvJGc$$PJey4s^nr-gbB8ZgO+gI_A^% zegdZon{PK9^D~b+i6D#QJ^=&bYJA9|e***_o-S0s)FC6<{um=DKNWl%`~ai>Fj)V> zDoX9SGf;AqZKy$PlT8%=_yr^IrPEp;vxt`*!F+TnreV)1-LI-08|69S3b3Y<@{q8z zwhO+~Fcd25L^_{k=c9Urt4L1<@X&h1auvWM_AQ!|q%ajLNm80hJje`alPE!$^qZ`5 z23cG??cuRNew|@_EKt6bob>fNnzf&Vg)1S zZCkjw@Pb{kym==)yL_UUZiK_WUp4c|YNxYoHiqo{u3UFH)W(zDG&nQx(dO|+=PUAh zz>?kRbTcI!+`i=?GM)U-;*Q~h-H<{H)(a%J?LCQ1LDnwCIzmdox{Yurc5D?Rv1dF?}-mX;?IF{B9! zM*yQN;b>Q~H2L78b6ptlVLPZfG5bOcBfS~s=Jdi#fVfI0vwFpXAxWvK-?CgD#(wWp zVK$_h`Mt8mX*5CldD>mRBCKGBQYF}T1%v`v32X_)7kmrIwF`I)7;GaKI6KqaEgZ5M zqMEoHcxnzPp+N%+Xs(-a3rLRVOQD7#)*ORYUw~+df>usbJSANsIwRG@RIwg$pmIBS zKTUAm+^X1Rb+#@wggMYuA01FL3lOBtM9sIOo$8}06-ipuEnwFyvfJb}Cd5>-Z2oHX zSzq^@iByO=C|(O3Ig;|aLf|``6c#H6)jXTj!oJQ-^NPx%wYR1Wy5K2|oG2wyH6Z#D zN^8mk5>>RMKpTpKIGb(-jSX0AQpsFf=ATg-jkNkZS`~o8wQ7ky=mWVgqF1qMbMoc> zW=QnxkgXOYI=;Ocb`hK!4iO!x9Px(PsTBfGuu+to4pL9F7vO9i2d;j}lM;SuIh`}Q zReG5t9hAleBc#C%KY;-$%`k@3VFsmw8rXtQ+<9Q1Hb7$3s6`te;1YqiE&{#^Z9l9XkOjpSA8HT9@T zg~a#{T_*^nsD>NpO>4NyWwb#BGkf#T3$XURB~`~K?O&X7-n!A-5qMWMiS`;%c68Ri z0NO+FLtBa;2iWu_2%B;VZx>GYU2MxAo#XEh%J*GO%O4v?A1|CQe8XoS*|i@56Yq%R zFMRRKAH;?qA>=Pz0Jp@#_FrO6>DDaoExVMh9k}amsWWi`7w8>mt|Y;Ljm-MKcVF#W zQJd|%tAWL6=_|fUwG)EBftr=!U!i8@;Q05UR_d|N`&73Z^bNs+`V#@)yXRcraDsH$Yw)b9VA_v0rCP-EOI6gfqKLi8AT}| z#vKJ9$#41;nGPfw*(Jh_;F1(%WPJS)IOE@!A6y!k51yFfd5Ro$d?v91eb-2Tjm#5WY+u{^?q_>Aow=Kc0 zv;pH=QBeg5uPYMm0_hUz#5&?|)0`$I(okhAyBzsA2W-e9Y~zF?5kA{8)tO%E9$w_{ zm;oYj!?=Mj#&qen(}s8!2j8J5(sRRQKn568L^&3p7e{M+4yVwcT_E3uBqN^6`>~nT z`gjB%^#n)!2op^hDVf!LD6)SI+UqkEq0>7=Ju#m^;aCnfln+&cg+Po!_Vur!K9A^E zYL7*XYua-MOw2iaP8qp~L^P&q_>7K^aqe`t;yjoWRvJHSwj@%hCpdV(rQP6@*{qzrDYOAjKg6jY7V5Jox8$3+{$fEl1p1Bn+WFU0#(kF!rAFDQhTRE0 zTY74xm)wDlg>-jo#m#T1^&;JqmU%}d2h$bzOOQG0Juq@5C&i4nu&nu5xNleYyN=F7 z(jG_t0|L_DO>Z1O8^SGXGkD>cvoW8iwRV(#ar8KTae)MvfE+6*UH40!E{}f6Q=GjJ z)NXPi>`)}GiYzW^UCDU%+7I@6Iq(l!kZhnBGum2tUd;?G*t=smAdfFQbWKiCN2wOk zVq~C)Vo21Fn<0UV!v-c^3DGK|BnQH_qx2;s0-#N{#L7&~eOdJU*XTC=VAP@>QRQ zQ}JyXaS!y-NiF}9G+rL%`G)gZORznW-`G}kNCDE@icE)ChHL_>#oLvfvUe?zMz``K&@#?cScclju7je;HrO_aEAvq9&PPfw5kG57~vchFX8)}fI2@4ofaia zFWi-`vTT~J-uq8V;NC%k4(&bujs?blWr6Mgi`o0{b>S}-pneK|cpv^^mu}Pk)P8#B{2vz1 zmD(H@KH^kJUo^4C=)N@s^6STSri`%@C`V4=lDe9OEB zYPI!gJJ+{oEGeFj)J*X6v_^txpptY=-<_558Bmg#mA@} zc+q`a7H!alh=S+AgkhWhiEt+ z##`zGkaB2>Z*7SYAoZsp4&l`-`ANfcpX~~yfNCX?MF4P|T*#+&O!Ham-*|n$hX}*S z3Sg7v@KxoF;p{ZPF$QpPCURa{P+!5=QP~B%k^zKH(=%9z%NHUJW6YB`g|OBce6RrT zps)X|94@q+F!cha18Rk=*}_?1!N_#2S8Xfn?UhdQgB@MT}zP% zL7XCj*DtHdz#Y`@7)=1OMDY0oel;iFEhTJC=|1TuCwmC+sgE~Uq{O;OMwv{dxYO+w zd2c@I7AlN2ANuo^913L3Ic%>L20cPl#<%RGJG_1cuPjH}e2fSSd3U%gLL{WCOp1QV z=7a~;M)!ogqV>J#GFu;FnRnqSeVlw)eL@*H$@zpKRKc(E4=A@q@H>(sw@hB7up2 z>Vo!uu=an|h1AdjBOfda)Y5qe?(uONXf+Z#>|{(ZEXf-2W8~nG2w$XK!QZo=C-ksp zv~H9btgu6Fv9DO>@>V@45|TLb=@VEC96(C>3VL5a7{`b0Gh_8cg53tRd|80OO&1m9 zeVw&+H~-Rw(tqf}$$!xW`2V8|6`vl7`+1yLXH4XeF3kLQx}f*AB52%x*%tZmwYG@y5w-%=UgqymVE*4j;cq?Ce?{TH_efg* z;*rq*;gM=iK7{}BNM!%?NDmhQ_~f^<#j7lbE*c-5`4p;)T6V|(u1E43oIDYO$aZ_N z<80e4~Q zf*Xegi6~ggzlG{E6#4e!iul1S4Emd}7K|>m7~FsZK|U&6Lvf=nbOBi;g^USYG9D0> zLJ0#hFt)KF$K)^rNng7@U3aQ4NWDeLr!vr0+aNav-=fU#hXH@?#)-0*BA7o9wT2+0 z5E{NW&)I?W-pHKlGd}wgo zU*NS0eEj~S3N?Jxb`bCjm*Ys@OLFF0A^SZ4$s#TN=eW@E|HcLGKXKu=_837*)1E6t z#-|K;oowO~jw`uiKWJTkVvzh98PZqlkv6*%7**39B0uuG6VP{Xv*fR)d@A2>xBCY6 z?K==k#~7xhd)SaRK_1`J7PRS0I!~tud^*<$Ur?9-#07eO`^>*Xf#vT|`2Q_B|06EM z{7)7MzisxfxUdMRsw%9Sfl!J64~yi{t{5$-YPJ4Pi*yzICptTqu5w2@l+jMK>X1}_-;f1&?IHO7t2Cu+Nzm!(e*FtS%njZg84hjF| zFIhPGPjMm3YPRXz>j7jgSBIW!d@Z=f>|_gO(OgpqD%j1vSmP$0-c}9{wQ- zOamO6<2n)P=wFDjj6stVpN~9n9042$`b~rioBRurU^LAk0k*s0k?J_O8mgSHGcER~ zHhd1;>RE`<$7)w%Wq%s2q%RTrSdPwL7EDY^`P%$Efw~aF(J})WB?NqQM3Y$hEwBwC zTpVefwiZ=((07z};I1U}e=KltSqP|AU{4ayGjxSAwCcSx=)a=6_}`t)uADMmslwq% zf8m09_@%|Zojbz5Fy4id&LNDM0T!lL9%Wy7w>nz0`6n)H{3Q##f3aXY`G*DjPZm<7 zVBi-BVNC04(y_+P2FB72cq2LeA=2zjXeb=y^@)urP1f3qLaS4k%8mqGr`Z|Esme>N$GuV zLgZrRXi8-2W@}_`Z)8kKFKOiFVq_$zIRa*2wU)dW@c>gAok9oRY8_orsgArM{lE^`C=QGBtA``n>() z;Ax0djO-mgKaPlr4!{gx;b3HCVWMTEWBreB^|`_4@k*IF8xegT2@}1wnX8QhosGQ- zC6R@#o};OQksgurKX<`O$3*w}Gkn&nF|s!NV<&D)}k%*a@{r@;mMh-^Ce^}4|xf0H~hNiw6l#G>I#nH8Sl?;2x1aMP9^E*zdu`1e6h2&z09CSAcG}S8w_-m!X;0x z4ihK$*N4f*?$dJs7Rm+C~mXp<>(2TEH@6K8^cO0RDgH5wO}nbY zUGjnm@6Sk%)?BzV%}o-zOY=)JNwt|4MLVnG2ak-FHDs}l(!PfK+xq?Ey@rF{3seq8OlhyIob zJx3;)hOmsp8ZIXh;i!qg%Bazn`Gs?^i2`t3F+xLkcQe<3ftmZJ{Jb(U!^a;-uOAeG zr@c`!A0K>jw=?Id(2bRc0i368|C%#PVjx*x!dz%#E+1;m3=E`JUrUwUEdd7SCzNDa zo^y}uRr5I~-32erKgw8~mKP1tJH$1o^JZtYS+|CRo2sxw+=m-ider#J>fJXbiO=Wt z^6GM^Z+2GoOJ6@xR~nS1nH1hIVLA-mvY?eVrqx0mzyojuL(Zu88{ot7vfH@ZnlY(0%N(G7v|YzkzbWJ z8yBZHmPq&WDo^?J9IBVsL2p5hoXbKn?R2!lFRtg29 z*d&Vk`Bqd(^QECu`K>`pO<9kU-lLPLsmn#C_s7>qzfO0R>K+ExJv)s3zo0a9f1&Cy zH8oC6ZBb%6XEiNU91!~`(5HVyj^_$?x5?hp^d8*2a`5h+(W^x=BLAIi8! zZ(gQN>-rA)V}3t)^2Lnq;D7J7d9wPj=()g{_L{utio6IXzPQH2IA??R5haVSse10+hz7-(L`vVUvXCo{sym~%pOKwgf{jL(jv@&Nu1yOl zA}|rz&}ar2HYn7_Ts!c8eVvYp)Gc7gzeg?%*QMRPl0^6W-otUu_Z!FKKwSB4{pxu6 zbgU3{BbwkEUZxrYv7#k2k+IbO!$WU+vOxTK*pUPk;>2EMg>LlXzL0}3+|Wvyz}#c z{jwxX>B*n4tgZ`2@jAgWWcf)lr7)bG!6pIb`AMeA3Du?&o;w;az6BQ18uOhrfP`r4 z#Ue2c=XX=gOcv2y*}jdVLcVs;rT23yVA;Dc$`_ivNl4R|Qi|?0Pp{EA$X*nUomMAn z(QTUONX9j)ab=qL4Kn({ZsLc;sHj+sJ~{|~xDZAOgLLJ?UpsrDA?j|g^F!MBhU_)C zX7;tI6ysx@s#6V@h~tp&vEXU_CY_hvR>}uH7HV%}y}!e^gs$csMP?V5olfRk&^ufk za0-8fKi$zFg#Kve7%mci&2%cTvKDfB<;?gj6Z;Z(9MKDv;TF<0QubMm-0Ns_{CCmS z>eH|XpcSvzpAC%wH)^-yhsL=zZmbyzN-nT?e#{wF{-vWBZrVI6YmnW+F?e2JbwY9df7%# zjjLQTs0B>iC;y}b#w!Rh_Xp!I0t5G_blJCgMtoDZ=mTGcDYX|c=#U1}2c`T8*c(Gb zc{GCQ*0uauGqBWnMblX7wh&;ac8a1-V2~97TCK7)cnP^opD&n9-yBagyk$&_bJn1% z!LKOOjV3UxL=Zu22ny_oLM2I2Km65zX8IV0hCv;7TE8pRgy+lBO8#@t!UDO$(cTQ; z?9hoZ_|4O(+H5*+;hfO0Phkk1dx_Ra)2}`~U_H`&EJ$~ERjAlh1*uzz)dE%TEA@)d zw_0jlTy~ssO`^DCElut-6V<7nAJ*VdG{=VFVwpBoiN1Sl#{JG!BkkBVfjru)nJ6Bu z2|RkTHY-9)O!bj8dXrNN(jbaUmWI94x*H(a_i*RUG1Vq&)1dcoRy@VE4chsPqeqPd zR0l0f5zFT+Eo=rVdjsQ*Y}x&jD&2C|CRW<OVhT3F=MSlCX?mw>3aitl2I^L#~=Yq;6fpMz{w+-l(D?Q3y za`QCPUHl0Tr7RBUAcrpH;@(c-mmMdI+CQu2Zre&ypaeEyd7q2Q6AVmU#Xlnq3V*gRw)tH8 zld=9R2@z>>GqN*t09XN^cOoK!?CeZ}tn3UNOzfW_NCY6j!oK*li>junC6Hygl46RHum6NnG8wzabL(86J> zWCqZAg6=N#LvF!G06P5vgXkL{hX+XxZJnhaWzS4ZtK;Ke0%+yphJT&E1p_$ttW~Cd zYE`ZgkoVT$-q)-_H(0~-p;ZRBFTt#4``KbDk}&f#p=Ae^WmG2_QP=ZxId(e}{k-sf zo7!J^64Cq(f)Ib|=?)_b8}yRBTJb2lO+X<)kLQ~wXOF9)xJQKN@68S;stY8dH&ww{ zX^S1aBu%)36^FnKM`DXIxK{Xa61B^KfNJZ{bt_V&H&gMf*aDO8AI`Afc&&~((XGx7 zdAJQS-b2>Z0KQ+S2SL||o*aa0JAeL!x__{ZqZI<)46EFf^uaeGtrnp@+8CL1#cu~$mWGzDm)w%|w+BdR{7iJrS-^85>KjR@Ux|<# zE1*3dOH*2kTQL~{93O@g&5@#5J>K^j><;<_b?$4itXx*M1ptcq>l|J}a3`2osQe`P q;;c1O)fu5rh0@Bu{(~JH_3Ry8KjSyd=iiK#nFWT7OjuR~=KldRT9AnV diff --git a/README.md b/README.md deleted file mode 100644 index 50089ce..0000000 --- a/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# CS210-Shell-Project - -CS210 Simple Shell Project for Semester 2 - -## Repo Structure - -- Code - - This directory contains all the current files for the shell project on the branch - -- Documentation - - This directory contains all the files for documentation of the project. - - Task Specification >> The original PDF of the task, all stages & testing parameters - - Bug Fixes >> A table for all the bugs encountered during development, how they affected the program & how we fixed it - -## HOW TO RUN - -- Open your terminal window -- Navigate to the directory containing the c files, e.g. `cd tasks\task2` -- Run gcc & compile the c files into an executable, e.g. `gcc main.c` or `gcc helper.c main.c` for more than 1 file -- Run the compiled executable, e.g. `a.out` or `a.exe` From 4fe74051c5cced5dcd27a9a83f1c4107a5e4885b Mon Sep 17 00:00:00 2001 From: TurtleHelm <89736173+TurtleHelm@users.noreply.github.com> Date: Tue, 4 Mar 2025 00:33:50 +0000 Subject: [PATCH 4/9] UNSTABLE Completely reworked codebase & structuring. Added task 5 command history --- Code/helper.c | 185 ----------------------------------------- Code/helper.h | 36 -------- Code/main.c | 57 +++++++++++-- Code/utils/commands.c | 73 ++++++++++++++++ Code/utils/commands.h | 22 +++++ Code/utils/history.c | 80 ++++++++++++++++++ Code/utils/history.h | 28 +++++++ Code/utils/userinput.c | 181 ++++++++++++++++++++++++++++++++++++++++ Code/utils/userinput.h | 31 +++++++ 9 files changed, 464 insertions(+), 229 deletions(-) delete mode 100644 Code/helper.c delete mode 100644 Code/helper.h create mode 100644 Code/utils/commands.c create mode 100644 Code/utils/commands.h create mode 100644 Code/utils/history.c create mode 100644 Code/utils/history.h create mode 100644 Code/utils/userinput.c create mode 100644 Code/utils/userinput.h diff --git a/Code/helper.c b/Code/helper.c deleted file mode 100644 index aa63307..0000000 --- a/Code/helper.c +++ /dev/null @@ -1,185 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "helper.h" - -extern char original_path[1024]; - -struct Command { - const char *command; - void (*function)(char **tokens); -}; - -struct Command commands[] = { - {"exit", (void (*)(char **))exitProgram}, - {"getpath", (void (*)(char **))getPath}, - {"setpath", (void (*)(char **))setPath}, - {"cd", (void (*)(char **))changeDir}, - {NULL, NULL} // Sentinel value to mark the end of the array -}; - -void prompt() { - // Initial input & token array - char input[1024]; - char *tokens[512]; - - printf("> "); - - char *detected_input = fgets(input, sizeof(input), stdin); - - if(detected_input == NULL) { - printf("Error - Input was empty"); - return; - } - - else { - if(strlen(input) > 512) { - printf("Too many characters! (> 512)\n"); - return; - } - - else if(input[0] == '\n') { - return; - } - - else { - tokenizeInput(input, tokens); - - // Print out tokens to console (for debugging or visibility) - for(int i = 0; tokens[i] != NULL; i++) { - printf("%d => \"%s\"\n", i, tokens[i]); - } - - if(tokens[0] != NULL) { - int i = 0; - - while(commands[i].command != NULL) { - if(strcmp(tokens[0], commands[i].command) == 0) { - commands[i].function(tokens); - return; - } - - i++; - } - } - - // No match so we execute as normal - executeInput(tokens); - } - } -} - -void executeInput(char **tokens) { - // Make fork - pid_t pid = fork(); - - // Error when forking - if (pid < 0) { - printf("Error: Forking failed.\n"); - exit(EXIT_FAILURE); - } - - // Child process - if(pid == 0) { - // Ignore the default "command not found" error message entirely - if(execvp(tokens[0], tokens) == -1) { - // Simply exit the child without printing anything - exit(EXIT_FAILURE); - } - } - - // Parent process - else { - wait(NULL); - } -} - -void tokenizeInput(char *inp, char **out) { - // Counter - int i = 0; - - // Get the first token in the String - char *token = strtok(inp, " \t|<>&;\n"); - - // While we have tokens - while(token != NULL) { - // Set the token to the array index - out[i] = token; - - // Increment counter - i++; - - // Get new token, if any, from String - token = strtok(NULL, " \t|<>&;\n"); - } - - out[i] = NULL; -} - -void getPath() { - // Get the current path & print it, if there is an error also print that - char *path = getenv("PATH"); - - printf(path ? "Current PATH: %s\n" : "Error: Could not get PATH\n", path); -} - -void setPath(char **tokens) { - // If there is no path argument - if(tokens[1] == NULL) { - printf("Error: setpath requires a path argument\n"); - return; - } - - // If we fail to set the path - if(setenv("PATH", tokens[1], 1) != 0) { - printf("Error: Could not set PATH\n"); - } - - // Otherwise, we assume it has worked - else { - printf("PATH set to: %s\n", tokens[1]); - } -} - -void changeDir(char **tokens) { - // If there is a path after the command - if(tokens[1] != NULL) { - // If we change directories successfully - if(chdir(tokens[1]) == 0) { - printf("Changed to -> %s!\n", tokens[1]); - } - - // If something goes wrong when changing - else { - printf("Error: Cannot find directory: \"%s\"", tokens[1]); - } - } - - // If there is no path after the command, just go back 1 directory - else { - chdir("../"); - } -} - -void exitProgram() { - printf("\nRestoring original PATH...\n"); - - // Set the path to the original one before the program started - if (setenv("PATH", original_path, 1) == 0) { - printf("Original PATH restored: %s\n", original_path); - } - - // If we can't, send an error msg - else { - printf("Error: Could not restore original PATH\n"); - } - - // Exit shell - printf("Exiting Shell...\n"); - exit(0); -} \ No newline at end of file diff --git a/Code/helper.h b/Code/helper.h deleted file mode 100644 index 846e4cf..0000000 --- a/Code/helper.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef HELPER_H -#define HELPER_H - -/** @brief Display the shell prompt & process user input */ -void prompt(); - -/** @brief Take a string, tokenize it & return it - * @param inp The string to tokenize - * @param out The string to return through -*/ -void tokenizeInput(char *inp, char **out); - -/** @brief Exit the shell */ -void exitProgram(); - -/** @brief Get the current working directory */ -void getPath(); - -/** @brief Set the current working directory - * @param tokens The tokenized command String -*/ -void setPath(char **tokens); - -/** @brief Execute a system command - * @param tokens The tokenized command String - */ -void executeInput(char **tokens); - -/** @brief Change the working directory - * @param tokens The tokenized command String - */ -void changeDir(char **tokens); - -extern char original_path[1024]; - -#endif \ No newline at end of file diff --git a/Code/main.c b/Code/main.c index ac1e535..4455a56 100644 --- a/Code/main.c +++ b/Code/main.c @@ -3,12 +3,12 @@ #include #include -#include "helper.h" - -// MAIN LOOP +#include "utils/userinput.h" +#include "utils/history.h" char original_path[1024]; +/** @brief Setup the initial values for the shell */ void setupShell(void) { char *path = getenv("PATH"); @@ -16,7 +16,7 @@ void setupShell(void) { strcpy(original_path, path); } - char *home = getenv("HOMe"); + char *home = getenv("HOME"); if(home != NULL) { if(chdir(home) != 0) { @@ -29,15 +29,56 @@ void setupShell(void) { if(getcwd(cwd, sizeof(cwd)) != NULL) { printf("Current working directory: %s\n", cwd); } + + // TASK 6 GOES HERE + // Read saved history from file } +// MAIN LOOP + +/** @brief Display the shell prompt & process user input */ int main(void) { + // Set PATH initially setupShell(); - // Infinite loop until exit - while(1) { - prompt(); - }; + // Get command history + struct CommandHistory *history = getCommandHistory(); + char input[1024]; + char *tokens[512]; + + while(1) { + // Print prompt + printf("> "); + + // Get & check user input for NULL + if(fgets(input, sizeof(input), stdin) == NULL) { + break; // EOF (Ctrl + D OR Ctrl + D) + } + + // Input validation + if(strlen(input) > 512 || input[0] == '\n') { + printf("Error occurred with the input\n"); + break; + } + + // Duplicate input as tokenizeInput irreversibly changes input when used + char *dupe_input = malloc(strlen(input) + 1); + strcpy(dupe_input, input); + + // Tokenize input String into tokens + tokenizeInput(input, tokens); + + // Check for NULL command name + if(tokens[0] == NULL) { + printf("Command is NULL"); + break; + } + + // Check the tokens against known commands + checkForCommands(tokens, history, dupe_input); + free(dupe_input); // Free duplicated input upon completion + } + return 0; } \ No newline at end of file diff --git a/Code/utils/commands.c b/Code/utils/commands.c new file mode 100644 index 0000000..c755fac --- /dev/null +++ b/Code/utils/commands.c @@ -0,0 +1,73 @@ +#include +#include +#include + +#include "commands.h" + +extern char original_path[1024]; + +void getPath(void) { + // Get the current path & print it, if there is an error also print that + char *path = getenv("PATH"); + + printf(path ? "Current PATH: %s\n" : "Error: Could not get PATH\n", path); +} + +void setPath(char **tokens) { + // If there is no path argument + if(tokens[1] == NULL) { + printf("Error: setpath requires a path argument\n"); + return; + } + + // If we fail to set the path + if(setenv("PATH", tokens[1], 1) != 0) { + printf("Error: Could not set PATH\n"); + } + + // Otherwise, we assume it has worked + else { + printf("PATH set to: %s\n", tokens[1]); + } +} + +void changeDir(char **tokens) { + // If there is a path after the command + if(tokens[1] != NULL) { + // If we change directories successfully + if(chdir(tokens[1]) == 0) { + printf("Changed to -> %s!\n", tokens[1]); + } + + // If something goes wrong when changing + else { + printf("Error: Cannot find directory: \"%s\"\n", tokens[1]); + } + } + + // If there is no path after the command, just go back 1 directory + else { + chdir("../"); + } +} + +void exitProgram(void) { + printf("\nRestoring original PATH...\n"); + + // Set the path to the original one before the program started + + setenv("PATH", original_path, 1); + + // if (setenv("PATH", original_path, 1) == 0) { + // printf("Original PATH restored: %s\n", original_path); + // } + + // If we can't, send an error msg + // else { + // printf("Error: Could not restore original PATH\n"); + // } + + // Exit shell + printf("Exiting Shell...\n"); + exit(0); +} diff --git a/Code/utils/commands.h b/Code/utils/commands.h new file mode 100644 index 0000000..17b1c7e --- /dev/null +++ b/Code/utils/commands.h @@ -0,0 +1,22 @@ +#ifndef COMMANDS_H +#define COMMANDS_H + +extern char original_path[1024]; + +/** @brief Get the current working directory */ +void getPath(void); + +/** @brief Set the current working directory + * @param tokens The tokenized command String +*/ +void setPath(char **tokens); + +/** @brief Change the working directory + * @param tokens The tokenized command String +*/ +void changeDir(char **tokens); + +/** @brief Exit the shell */ +void exitProgram(void); + +#endif \ No newline at end of file diff --git a/Code/utils/history.c b/Code/utils/history.c new file mode 100644 index 0000000..7c2eaa4 --- /dev/null +++ b/Code/utils/history.c @@ -0,0 +1,80 @@ +#include +#include +#include + +#include "history.h" + +struct CommandHistory *getCommandHistory(void) { + // DO CHECK FOR TASK 6 HERE & RETURN IT + // if(history in file) { return CommandHistory{hist}; } + // else { return ...; } + + struct CommandHistory *history = malloc(sizeof(struct CommandHistory)); + + if(history == NULL) { + fprintf(stderr, "Failed to allocate memory for history\n"); + exit(EXIT_FAILURE); + } + + history -> count = 0; + history -> index = 0; + + for(int i = 0; i < MAX_HISTORY; i++) { + history -> commands[i] = NULL; + } + + return history; +} + +void addHistory(struct CommandHistory *hist, char *input) { + // Free oldest command if its there + if(hist -> commands[hist -> index] != NULL) { + free(hist -> commands[hist -> index]); + } + + // Store new command + hist -> commands[hist -> index] = strdup(input); + + // Move index forward + hist -> index = (hist -> index + 1) % MAX_HISTORY; + + // If haven't filled up history, increment count + if(hist -> count < MAX_HISTORY) { + hist -> count++; + } +} + +void clearCommandHistory(struct CommandHistory *hist) { + for(int i = 0; i < hist -> count; i++) { + free(hist -> commands[i]); + } + + hist -> count = 0; + hist -> index = 0; +} + +char *executeHistory(struct CommandHistory *hist, int index) { + // Check if index is within the bounds of the array + if(index < 1 || index > hist -> count) { + printf("Error - Invalid history index\n"); + return NULL; + } + + // Make memory for tokens + char *input = hist -> commands[index - 1]; + + if(input == NULL) { + printf("Error - Couldn't find command in history\n"); + return NULL; + } + + return input; +} + +void printHistory(struct CommandHistory *hist) { + for(int i = 0; i < hist -> count; i++) { + printf("%d %s", i, hist -> commands[i]); + } + + printf("Total Count: %d\n", hist -> count); +} \ No newline at end of file diff --git a/Code/utils/history.h b/Code/utils/history.h new file mode 100644 index 0000000..6a07692 --- /dev/null +++ b/Code/utils/history.h @@ -0,0 +1,28 @@ +#ifndef HISTORY_H +#define HISTORY_H + +#define MAX_HISTORY 20 + +struct CommandHistory { + char *commands[MAX_HISTORY]; // List of commands + int index; // Insertion point + int count; // Total commands in history +}; + +/** @brief Checks for prior command history, if none return a new struct + * @return A CommandHistory struct +*/ +struct CommandHistory *getCommandHistory(void); + +/** @brief Add to the saved history */ +void addHistory(struct CommandHistory *hist, char *input); + +/** @brief Clear out the saved history & free all memory */ +void clearCommandHistory(struct CommandHistory *hist); + +/** @brief Get & return a previous command string */ +char *executeHistory(struct CommandHistory *hist, int index); + +void printHistory(struct CommandHistory *hist); + +#endif \ No newline at end of file diff --git a/Code/utils/userinput.c b/Code/utils/userinput.c new file mode 100644 index 0000000..ae3099d --- /dev/null +++ b/Code/utils/userinput.c @@ -0,0 +1,181 @@ +#include +#include +#include +#include +#include +#include + +#include "commands.h" +#include "userinput.h" +#include "history.h" + +struct Command { + const char *command; + void (*function)(char **tokens); +}; + +struct Command commands[] = { + {"exit", (void (*)(char **))exitProgram}, + {"getpath", (void (*)(char **))getPath}, + {"setpath", (void (*)(char **))setPath}, + {"cd", (void (*)(char **))changeDir}, + {NULL, NULL} // Marks the end of the array +}; + +void executeSystemCommand(char **tokens) { + // Make fork + pid_t pid = fork(); + + // Error when forking + if (pid < 0) { + printf("Error: Forking failed.\n"); + exit(EXIT_FAILURE); + } + + // Child process + if(pid == 0) { + // Ignore the default "command not found" error message entirely + if(execvp(tokens[0], tokens) == -1) { + // Simply exit the child without printing anything + exit(EXIT_FAILURE); + } + } + + // Parent process + else { + wait(NULL); + } +} + +int executeCommand(char **tokens) { + int i = 0; + + while(commands[i].command != NULL) { + if(strcmp(tokens[0], commands[i].command) == 0) { + commands[i].function(tokens); + return 1; + } + + i++; + } + + return 0; +} + +void tokenizeInput(char *inp, char **out) { + // Counter + int i = 0; + + // Get the first token in the String + char *token = strtok(inp, " \t|<>&;\n"); + + // While we have tokens + while(token != NULL) { + // Set the token to the array index + out[i] = token; + + // Increment counter + i++; + + // Get new token, if any, from String + token = strtok(NULL, " \t|<>&;\n"); + } + + out[i] = NULL; +} + +void checkForCommands(char **tokens, struct CommandHistory *hist, char *input) { + // Do command at index x + if(tokens[0][0] == '!' && isdigit(tokens[0][1])) { + // Get user inputted index + int history_num = atoi(&tokens[0][1]); // Get history index + + // Get tokens in history + char *hist_input = executeHistory(hist, history_num); + + if(hist_input == NULL) { + printf("Error when retrieving history command\n"); + return; + } + + char *hist_tokens[512]; + + // Tokenize history command String + tokenizeInput(hist_input, hist_tokens); + + // Execute command with history tokens + int executed = executeCommand(hist_tokens); + + if(!executed) { + executeSystemCommand(hist_tokens); + } + + free(hist_input); + return; + } + + // Do command at index x (with dash) + else if(tokens[0][0] == '!' && tokens[0][1] == '-' && isdigit(tokens[0][2])) { + int history_num = atoi(&tokens[0][2]); // Get history index + + char *hist_input = executeHistory(hist, history_num); + + if(hist_input == NULL) { + printf("Error when retrieving history command\n"); + return; + } + + char *hist_tokens[512]; + + tokenizeInput(hist_input, hist_tokens); + + int executed = executeCommand(hist_tokens); + + if(!executed) { + executeSystemCommand(hist_tokens); + } + + free(hist_input); + return; + } + + // Do last command only + else if(tokens[0][0] == '!' && tokens[0][1] == '!') { + char *hist_input = executeHistory(hist, 0); + + if(hist_input == NULL) { + printf("Error when retrieving history command\n"); + return; + } + + char *hist_tokens[512]; + + tokenizeInput(hist_input, hist_tokens); + + int executed = executeCommand(hist_tokens); + + if(!executed) { + executeSystemCommand(hist_tokens); + } + + free(hist_input); + return; + } + + else if(strcmp(tokens[0], "history") == 0) { + printHistory(hist); + } + + // Its not a history call, so execute normal command + else { + // Execute regular command + int executed = executeCommand(tokens); + + addHistory(hist, input); + + // If there is no reference to the command in our struct, assume its a system command + if(!executed) { + executeSystemCommand(tokens); + } + } +} \ No newline at end of file diff --git a/Code/utils/userinput.h b/Code/utils/userinput.h new file mode 100644 index 0000000..3117e40 --- /dev/null +++ b/Code/utils/userinput.h @@ -0,0 +1,31 @@ +#ifndef USERINPUT_H +#define USERINPUT_H + +#ifndef COMMANDS_H +#define COMMANDS_H + +#include "history.h" + +/** @brief Execute a system command + * @param tokens The tokenized command String +*/ +void executeSystemCommand(char **tokens); + +/** @brief Execute a command + * @param tokens The tokenzied command String +*/ +int executeCommand(char **tokens); + +/** @brief Take a string, tokenize it & return it + * @param inp The string to tokenize + * @param out The string to return through +*/ +void tokenizeInput(char *inp, char **out); + +/** @brief Take the tokens & check for specific commands + * @param tokens The tokens to check +*/ +void checkForCommands(char **tokens, struct CommandHistory *hist, char *input); + +#endif +#endif \ No newline at end of file From 6bb52567c3b003e4c661469601240b7023d0a324 Mon Sep 17 00:00:00 2001 From: Helm <89736173+TurtleHelm@users.noreply.github.com> Date: Tue, 11 Mar 2025 12:56:40 +0000 Subject: [PATCH 5/9] Fixed Core Dump when retrieving specific history index more than once Simply needed to malloc the size to command and use strcpy to get copy of string instead of direct reference because tokenizeInput destroys input strings --- Code/utils/history.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/utils/history.c b/Code/utils/history.c index 7c2eaa4..bebfb00 100644 --- a/Code/utils/history.c +++ b/Code/utils/history.c @@ -61,7 +61,8 @@ char *executeHistory(struct CommandHistory *hist, int index) { } // Make memory for tokens - char *input = hist -> commands[index - 1]; + char *input = malloc(sizeof(hist -> commands[index-1]); + strcpy(input, hist -> commands[index - 1]); if(input == NULL) { printf("Error - Couldn't find command in history\n"); @@ -77,4 +78,4 @@ void printHistory(struct CommandHistory *hist) { } printf("Total Count: %d\n", hist -> count); -} \ No newline at end of file +} From 0daf5a65e02cd06262093432a4dabe8ff77424b8 Mon Sep 17 00:00:00 2001 From: MyShinyDiamonds Date: Thu, 13 Mar 2025 18:33:07 +0000 Subject: [PATCH 6/9] Update history.c Added error fix in executeHistory function --- Code/utils/history.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/utils/history.c b/Code/utils/history.c index bebfb00..7e540c3 100644 --- a/Code/utils/history.c +++ b/Code/utils/history.c @@ -61,7 +61,7 @@ char *executeHistory(struct CommandHistory *hist, int index) { } // Make memory for tokens - char *input = malloc(sizeof(hist -> commands[index-1]); + char *input = malloc(sizeof(hist -> commands[index-1])); strcpy(input, hist -> commands[index - 1]); if(input == NULL) { From b290896b41d824da4035035b1dd5a98902e19df5 Mon Sep 17 00:00:00 2001 From: MyShinyDiamonds Date: Sat, 15 Mar 2025 17:29:42 +0000 Subject: [PATCH 7/9] Added saveHistory and loadHistory functions. Added saveHistory and loadHistory functions to history.c, and added a bit to exitProgram in commands.c so that the history is saved and memory returned before exiting. (THIS IS ALL UNTESTED) --- Code/.hist_list.txt | 0 Code/main.c | 2 ++ Code/utils/commands.c | 8 ++++++ Code/utils/history.c | 64 +++++++++++++++++++++++++++++++++++++------ Code/utils/history.h | 6 ++++ 5 files changed, 72 insertions(+), 8 deletions(-) create mode 100644 Code/.hist_list.txt diff --git a/Code/.hist_list.txt b/Code/.hist_list.txt new file mode 100644 index 0000000..e69de29 diff --git a/Code/main.c b/Code/main.c index 4455a56..5d3a66e 100644 --- a/Code/main.c +++ b/Code/main.c @@ -5,6 +5,7 @@ #include "utils/userinput.h" #include "utils/history.h" +#include "utils/commands.h" char original_path[1024]; @@ -32,6 +33,7 @@ void setupShell(void) { // TASK 6 GOES HERE // Read saved history from file + // History is loaded using getCommandHistory() in main } // MAIN LOOP diff --git a/Code/utils/commands.c b/Code/utils/commands.c index c755fac..bb2396a 100644 --- a/Code/utils/commands.c +++ b/Code/utils/commands.c @@ -3,7 +3,9 @@ #include #include "commands.h" +#include "history.h" +extern struct CommandHistory *history; extern char original_path[1024]; void getPath(void) { @@ -67,7 +69,13 @@ void exitProgram(void) { // printf("Error: Could not restore original PATH\n"); // } + //Save the history to the .hist_list file, clear it, then free the memory it was using + saveHistory(history); + clearCommandHistory(history); + free(history); + // Exit shell + printf("Exiting Shell...\n"); exit(0); } diff --git a/Code/utils/history.c b/Code/utils/history.c index bebfb00..8f2a00f 100644 --- a/Code/utils/history.c +++ b/Code/utils/history.c @@ -5,9 +5,6 @@ #include "history.h" struct CommandHistory *getCommandHistory(void) { - // DO CHECK FOR TASK 6 HERE & RETURN IT - // if(history in file) { return CommandHistory{hist}; } - // else { return ...; } struct CommandHistory *history = malloc(sizeof(struct CommandHistory)); @@ -16,11 +13,23 @@ struct CommandHistory *getCommandHistory(void) { exit(EXIT_FAILURE); } - history -> count = 0; - history -> index = 0; + /*Opens .hist_list.txt and if it is not empty, loads the history. + If the file is empty, initialise an empty history*/ + FILE *histFile; + histFile = fopen(".hist_list.txt", "r"); + if(histFile != NULL) { + loadHistory(history); + fclose(histFile); + return history; + } - for(int i = 0; i < MAX_HISTORY; i++) { - history -> commands[i] = NULL; + else { + history -> count = 0; + history -> index = 0; + + for(int i = 0; i < MAX_HISTORY; i++) { + history -> commands[i] = NULL; + } } return history; @@ -61,7 +70,7 @@ char *executeHistory(struct CommandHistory *hist, int index) { } // Make memory for tokens - char *input = malloc(sizeof(hist -> commands[index-1]); + char *input = malloc(sizeof(hist -> commands[index-1])); strcpy(input, hist -> commands[index - 1]); if(input == NULL) { @@ -79,3 +88,42 @@ void printHistory(struct CommandHistory *hist) { printf("Total Count: %d\n", hist -> count); } + +void saveHistory(struct CommandHistory *hist) { + FILE *histFile; + histFile = fopen(".hist_list.txt", "w"); + + if(histFile == NULL) { + printf("Error - History file not found or could not be opened.\n"); + return; + } + + fprintf(histFile, "%d\n", hist->index); + fprintf(histFile, "%d\n", hist->count); + + for(int i = 0; i < hist->count; ++i){ + fprintf(histFile, "%s\n", hist->commands[i]); + } + + fclose(histFile); +} + +void loadHistory(struct CommandHistory *hist) { + FILE *histFile; + histFile = fopen(".hist_list.txt", "r"); + + if(histFile == NULL) { + printf("Error - History file not found or could not be opened.\n"); + return; + } + + fscanf(histFile, "%d\n", &hist->index); + fscanf(histFile, "%d\n", &hist->count); + + for(int i = 0; i < hist->count; ++i){ + fgets(hist->commands[i], 1024, histFile); + hist->commands[i][strcspn(hist->commands[i], "\n")] = '\0'; + } + + fclose(histFile); +} \ No newline at end of file diff --git a/Code/utils/history.h b/Code/utils/history.h index 6a07692..a7b5f8c 100644 --- a/Code/utils/history.h +++ b/Code/utils/history.h @@ -25,4 +25,10 @@ char *executeHistory(struct CommandHistory *hist, int index); void printHistory(struct CommandHistory *hist); +/** @brief Save the history to the .hist_list file */ +void saveHistory(struct CommandHistory *hist); + +/** @brief Load the history from the .hist_list file */ +void loadHistory(struct CommandHistory *hist); + #endif \ No newline at end of file From a1be9ac39a0de1b5704eb64aecb1f2f214778eea Mon Sep 17 00:00:00 2001 From: MyShinyDiamonds Date: Sat, 15 Mar 2025 19:36:56 +0000 Subject: [PATCH 8/9] Added saveHistory and loadHistory (TESTED - BUGGY AS AN ANT HILL IN MID JULY) Code has been commented but is only partially functional. I encountered an issue where if I change directory when using our shell, the hist_list.txt file ends up saved in that directory instead of home, resulting in the loadHistory function failing and a blank history being created. --- Code/main.c | 2 +- Code/utils/commands.c | 17 ++++++++------- Code/utils/history.c | 49 ++++++++++++++++++++++++++----------------- Code/utils/history.h | 2 ++ 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/Code/main.c b/Code/main.c index 5d3a66e..79515df 100644 --- a/Code/main.c +++ b/Code/main.c @@ -44,7 +44,7 @@ int main(void) { setupShell(); // Get command history - struct CommandHistory *history = getCommandHistory(); + history = getCommandHistory(); // Makes use of history global variable char input[1024]; char *tokens[512]; diff --git a/Code/utils/commands.c b/Code/utils/commands.c index bb2396a..8ec15d9 100644 --- a/Code/utils/commands.c +++ b/Code/utils/commands.c @@ -3,9 +3,8 @@ #include #include "commands.h" -#include "history.h" +#include "history.h" // Allows us to use the global variable history -extern struct CommandHistory *history; extern char original_path[1024]; void getPath(void) { @@ -69,11 +68,15 @@ void exitProgram(void) { // printf("Error: Could not restore original PATH\n"); // } - //Save the history to the .hist_list file, clear it, then free the memory it was using - saveHistory(history); - clearCommandHistory(history); - free(history); - + // Save the history to the .hist_list file, clear history, then free the memory history was using + // Uses the global variable history + if (history != NULL){ + saveHistory(history); + clearCommandHistory(history); + free(history); + history = NULL; + } + // Exit shell printf("Exiting Shell...\n"); diff --git a/Code/utils/history.c b/Code/utils/history.c index 8f2a00f..b38f450 100644 --- a/Code/utils/history.c +++ b/Code/utils/history.c @@ -4,17 +4,19 @@ #include "history.h" +struct CommandHistory *history; //Made history a global variable so it can be used by main.c and commands.c + struct CommandHistory *getCommandHistory(void) { - struct CommandHistory *history = malloc(sizeof(struct CommandHistory)); + history = malloc(sizeof(struct CommandHistory)); if(history == NULL) { - fprintf(stderr, "Failed to allocate memory for history\n"); + fprintf(stderr, "Failed to allocate memory for history.\n"); exit(EXIT_FAILURE); } - /*Opens .hist_list.txt and if it is not empty, loads the history. - If the file is empty, initialise an empty history*/ + /*Opens .hist_list.txt and if it is there, loads the history. + If the .hist_list.txt file is not there, initialise an empty history*/ FILE *histFile; histFile = fopen(".hist_list.txt", "r"); if(histFile != NULL) { @@ -65,7 +67,7 @@ void clearCommandHistory(struct CommandHistory *hist) { char *executeHistory(struct CommandHistory *hist, int index) { // Check if index is within the bounds of the array if(index < 1 || index > hist -> count) { - printf("Error - Invalid history index\n"); + printf("Error - Invalid history index.\n"); return NULL; } @@ -74,7 +76,7 @@ char *executeHistory(struct CommandHistory *hist, int index) { strcpy(input, hist -> commands[index - 1]); if(input == NULL) { - printf("Error - Couldn't find command in history\n"); + printf("Error - Couldn't find command in history.\n"); return NULL; } @@ -89,40 +91,49 @@ void printHistory(struct CommandHistory *hist) { printf("Total Count: %d\n", hist -> count); } +// Save the history to the .hist_list file. +// This function is called from commands.c in the exitProgram() function +/* At present this is having issues where it saves .hist_list.txt in the current directory the shell is in. + As a result, it does not load the history correctly (because it can't find it) if you have succesfully changed directory using our shell and dont return to home before exiting.*/ void saveHistory(struct CommandHistory *hist) { FILE *histFile; - histFile = fopen(".hist_list.txt", "w"); + histFile = fopen(".hist_list.txt", "w"); // Opens the file in write mode, overwriting anything previous - if(histFile == NULL) { + if(histFile == NULL) { // If the file can't be opened, print an error message printf("Error - History file not found or could not be opened.\n"); return; } - fprintf(histFile, "%d\n", hist->index); - fprintf(histFile, "%d\n", hist->count); + fprintf(histFile, "%d\n", hist->index); // Saves the index value + fprintf(histFile, "%d\n", hist->count); // Saves the count value - for(int i = 0; i < hist->count; ++i){ - fprintf(histFile, "%s\n", hist->commands[i]); + for(int i = 0; i < hist->count; ++i){ // loops through the history and saves each command + fprintf(histFile, "%s", hist->commands[i]); } fclose(histFile); } +// Load the history from the .hist_list file void loadHistory(struct CommandHistory *hist) { FILE *histFile; - histFile = fopen(".hist_list.txt", "r"); + histFile = fopen(".hist_list.txt", "r"); // Opens the file in read mode - if(histFile == NULL) { + if(histFile == NULL) { // Again if the file can't be opened, print an error message printf("Error - History file not found or could not be opened.\n"); return; } - fscanf(histFile, "%d\n", &hist->index); - fscanf(histFile, "%d\n", &hist->count); + fscanf(histFile, "%d\n", &hist->index); // Reads the index value + fscanf(histFile, "%d\n", &hist->count); // Reads the count value - for(int i = 0; i < hist->count; ++i){ - fgets(hist->commands[i], 1024, histFile); - hist->commands[i][strcspn(hist->commands[i], "\n")] = '\0'; + for(int i = 0; i < hist->count; ++i){ // loops through the history + hist->commands[i] = malloc(1024); // Allocates memory for each command + if(hist->commands[i] == NULL) { + printf("Error - Could not allocate memory for history command.\n"); + return; + } + fgets(hist->commands[i], 1024, histFile); // Reads and loads each command into history } fclose(histFile); diff --git a/Code/utils/history.h b/Code/utils/history.h index a7b5f8c..371f5aa 100644 --- a/Code/utils/history.h +++ b/Code/utils/history.h @@ -3,6 +3,8 @@ #define MAX_HISTORY 20 +extern struct CommandHistory *history; // The global variable for history + struct CommandHistory { char *commands[MAX_HISTORY]; // List of commands int index; // Insertion point From d9a943cc57b5ef425c9f612e903adaa92947de55 Mon Sep 17 00:00:00 2001 From: MyShinyDiamonds Date: Mon, 17 Mar 2025 16:52:58 +0000 Subject: [PATCH 9/9] Fix for weird saving Fixed the bug where it was saving a new history file in whatever the cwd was instead of the same place each time. Used the same code that forces the shell to home directory. Then it saves there, the same place it loads from every time. --- Code/utils/commands.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/Code/utils/commands.c b/Code/utils/commands.c index 8ec15d9..1f1382b 100644 --- a/Code/utils/commands.c +++ b/Code/utils/commands.c @@ -55,6 +55,24 @@ void changeDir(char **tokens) { void exitProgram(void) { printf("\nRestoring original PATH...\n"); + //sets cwd to home + char *home = getenv("HOME"); + + if(home != NULL) { + if(chdir(home) != 0) { + printf("Error: Could not change to HOME directory\n"); + } + } + + // Save the history to the .hist_list file, clear history, then free the memory history was using + // Uses the global variable history + if (history != NULL){ + saveHistory(history); + clearCommandHistory(history); + free(history); + history = NULL; + } + // Set the path to the original one before the program started setenv("PATH", original_path, 1); @@ -67,16 +85,7 @@ void exitProgram(void) { // else { // printf("Error: Could not restore original PATH\n"); // } - - // Save the history to the .hist_list file, clear history, then free the memory history was using - // Uses the global variable history - if (history != NULL){ - saveHistory(history); - clearCommandHistory(history); - free(history); - history = NULL; - } - + // Exit shell printf("Exiting Shell...\n");