From 37ad1f25ebc246dd82e56be869f5fcb6abeba698 Mon Sep 17 00:00:00 2001 From: Wesley Strong Date: Thu, 13 Oct 2016 00:18:25 -0500 Subject: [PATCH] Added alias support --- .alias.dat | 4 + .eval.dat | 1 - .harambe_shell.c.swp | Bin 16384 -> 0 bytes harambe_shell | Bin 19168 -> 24160 bytes harambe_shell.c | 202 +++++++++++++++++++++++++++++++++---------- 5 files changed, 158 insertions(+), 49 deletions(-) create mode 100644 .alias.dat delete mode 100644 .harambe_shell.c.swp diff --git a/.alias.dat b/.alias.dat new file mode 100644 index 0000000..a6aa5c9 --- /dev/null +++ b/.alias.dat @@ -0,0 +1,4 @@ +ls=ls --color +test=ls -a -l --color +ll=ls -l --color +la=ls -a --color diff --git a/.eval.dat b/.eval.dat index a6c6b1a..89023b8 100644 --- a/.eval.dat +++ b/.eval.dat @@ -1,3 +1,2 @@ ls:ls --color test:testing - diff --git a/.harambe_shell.c.swp b/.harambe_shell.c.swp deleted file mode 100644 index 36d9659bf18cb5c6916cd027e4eca54f1ab9a748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 TE&{>x!", redirect ">" //and system programs as well as there arguments. +//New additions: +//alias support +//Piping support +//System control +// //Author: Wesley Strong //NetID: wfs51 //Date: 9/21/16 @@ -8,6 +13,7 @@ //to gain a better understanding as to how a shell functinos thus some things may be similar. //https://brennan.io/2015/01/16/write-a-shell-in-c/ +//Declarations #include #include #include @@ -32,73 +38,126 @@ //List of built in shell commands. char *builtin[] = {"cd","exit"}; - +//Creates a file ".alias.dat" void create_file() { + //Because im lazy i did not pass the name of the file here FILE *file; - - file = fopen(".eval.dat", "ab+"); - + file = fopen(".alias.dat", "ab+"); + if (file == NULL) + { + printf("%s\n", "Weaning: Harambe could not create .alias.dat"); + } + printf("Succfully created .alias.dat\n"); fclose(file); - - //close(file); - } -FILE *open_file() +//Opens ".alias.dat" +FILE *open_file(FILE *file) { - FILE *file; - - file = fopen(".eval.dat", "r"); - + file = fopen(".alias.dat", "r"); + if (file == NULL) + { + printf("%s\n", "Warning: .alias.dat not found!"); + printf("%s\n", "Harambe is attempting to create new file..."); + create_file(); + file = open_file(file); + return file; + } return file; } +//Reads a single line from a file that is passed to it and then returns the line char *read_line(FILE *file) { char *buff; buff = (char *) malloc(266); - - fgets(buff,266,(FILE* )file); - + + if (fgets(buff,266,file) == NULL){ + printf("%s\n", "Error reading file!"); + + return NULL; + } return buff; } -void print_file() +//Gets number of lines in file and returns them +//Src: +int num_line_in_file(FILE *file) { - FILE *file; - file = open_file(); - - char *line; - line = (char *) malloc(266); - line = read_line(file); - printf("%s\n",line); - line = read_line(file); - printf("%s\n", line); - fclose(file); + int lines = 0; + char b; + while(!feof(file)) + { + b = fgetc(file); + if(b == '\n') { + lines++; + } + } + return lines; } +//Gets all lines in a file the returns them +char **get_file(int *lines) +{ + FILE *file; + char **args; + //Open file + file = open_file(file); + //Get lines in file + *lines = num_line_in_file(file); + //This is for that behavor thing below + file = open_file(file); + //allocate memory + args = (char **) malloc(80*sizeof(char *)); + + //Build array + for (int i = 0 ; i != *lines ; i++) + { + args[i] = read_line(file); + } + //Having some very bizzare behivor here + //When file is closed the command prompt will contain random symbols in random places... + //fclose(file); + return args; +} + +//Stores data in hash from .alias.dat file void store_hash() { + //Initalize varables for hash then allocate memory ENTRY e, *ep; - int i = 0; - char *test[] = {"test","testing"}; - - hcreate(30); - - e.data = (void *) i; - e.key = test[0]; - e.data = (void *) i + 1; - e.key = test[1]; - - ep = hsearch(e, ENTER); - ep = hsearch(e, FIND); + char **args; + int *lines = 0; + args = (char **) malloc(80*sizeof(char *)); + args = get_file(&lines); + char *token; + //create the hash table base on how many lines are in the file plus 2 incase something happens + hcreate(lines + 2); - printf("%s\n", e.key); - - hdestroy(); - - + //Build hash table and seprate out the key and data from file + //alias.dat sytax + //command=replace with + //EX + //ls=ls -a -l + //Note: No spaces at end of line as well as no extra lines + for (int j = 0 ; j != lines ; j++) + { + token = strtok(args[j],"="); + e.key = token; + token = strtok(NULL, "="); + token[strlen(token) - 1] = 0; + e.data = token; + ep = hsearch(e, ENTER); + } +} +//Searches the hash tabe for a match if non then returns NULL +char *find_hash(char *to_find) +{ + ENTRY e, *ep = NULL; + e.key = to_find; + ep = hsearch(e, FIND); + return ep ? ep->data : NULL; } //If cd is left NULL then returns to home dir otherwise go to distination. @@ -131,6 +190,7 @@ int harambe_cd(char **args) //Exits shell int harambe_exit(char **args) { + hdestroy(); exit(0); return 0; } @@ -152,6 +212,51 @@ void harambe_redirect(char **args, char output[64]) close(fd1); } +//Rebuilds args if an alias was found in has +char **alias(char **args) +{ + char *replace; + char *token; + char **to_replace; + + //Not sure why malloc here + replace = malloc(300); + //I am sure here however... + to_replace = (char **) malloc(900*sizeof(char *)); + + //checks if alias was found + if (find_hash(args[0]) != NULL ){ + //cant rember why i did this... + strcpy(replace, find_hash(args[0])); + //rebuild form alis gotten from file + token = strtok(replace , " \n"); + int i = 0; + to_replace[i++] = token; + + while ( (token = strtok(NULL, " \n")) != NULL ) + { + to_replace[i++] = token; + } + + int j = 0; + + //If there were additional paremter, append them to the list + for (j = 1 ; args[j] != NULL ; j++) + { + to_replace[i++] = args[j]; + } + + //Total number of tokens, then set end of file to NULL + j = j + i; + to_replace[j] = (char *) NULL; + + return to_replace; + } + else { + return args; + } +} + //Builds the args variable to contain no spaces. char **build_args(char **args, char line[81]) { @@ -251,7 +356,7 @@ char *harambe_build_prompt() { char *cwd = get_current_dir_name(); size_t sizex; - const char *user = getenv("USER"); + char *user = getenv("USER"); char hostname[50]; char *prompt; @@ -303,12 +408,10 @@ int main() char output[50]; char *prompt; - print_file(); store_hash(); + prompt = harambe_build_prompt(); - prompt = harambe_build_prompt(); - - //max 80 tokens in line + //max 80 tokens in line args = (char **) malloc(80*sizeof(char *)); //print inital prompt. @@ -316,6 +419,7 @@ int main() while (fgets(line, 80, stdin) != NULL) { args = build_args(args, line); + args = alias(args); harambe_builtin(args, ¬_builtin, &out, output); harambe_fork(args,¬_builtin, &out, line, output, status); @@ -323,5 +427,7 @@ int main() prompt = harambe_build_prompt(); fprintf(stderr, "%s", prompt); } + //Delete hash cleanin up :) + hdestroy(); exit(0); } //end main