This commit is contained in:
p-w-rs
2022-09-15 14:40:38 -05:00
parent 59e3d32e38
commit 742bdd74d2

View File

@@ -1,9 +1,9 @@
/************************************* /*************************************
* *
* Class: CS3840 - YOUR SECTION HERE * Class: CS3840 - YOUR SECTION HERE
* *
* Name(s): YOUR NAME(S) HERE * Name(s): YOUR NAME(S) HERE
* *
* Lab: Teeny Tiny Shell * Lab: Teeny Tiny Shell
* *
*************************************/ *************************************/
@@ -17,24 +17,26 @@
/* read_cmd_string() /* read_cmd_string()
* Reads a line of text from the user * Reads a line of text from the user
* Parameters: dest - target location for the input * Parameters: dest - target location for the input
* Returns: int - 0 on success or * Returns: int - 0 on success or
* -1 on error * -1 on error
*/ */
int read_cmd_string(char dest[INPUT_MAX]) int read_cmd_string(char dest[INPUT_MAX])
{ {
// Read user input // Read user input
if(fgets(dest, INPUT_MAX, stdin) == NULL) { if (fgets(dest, INPUT_MAX, stdin) == NULL)
fprintf(stderr, "Unable to read user input\n"); {
return -1; fprintf(stderr, "Unable to read user input\n");
} return -1;
}
// Remove trailing return character // Remove trailing return character
int len = strlen(dest); int len = strlen(dest);
if(dest[len-1] == '\n') { if (dest[len - 1] == '\n')
dest[len - 1] = '\0'; {
} dest[len - 1] = '\0';
}
return 0; return 0;
} }
/* parse_commands() /* parse_commands()
@@ -46,57 +48,61 @@ int read_cmd_string(char dest[INPUT_MAX])
*/ */
int parse_commands(char input[INPUT_MAX], char cmd_strs[CMD_MAX][INPUT_MAX]) int parse_commands(char input[INPUT_MAX], char cmd_strs[CMD_MAX][INPUT_MAX])
{ {
// Chop the input into command strings // Chop the input into command strings
int cmd_count = 0; int cmd_count = 0;
char* cmd_ptr = strtok(input, ";"); char *cmd_ptr = strtok(input, ";");
while(cmd_ptr) { while (cmd_ptr)
if(cmd_count >= CMD_MAX) { {
fprintf(stderr, "Too many commands\n"); if (cmd_count >= CMD_MAX)
return -1; {
} fprintf(stderr, "Too many commands\n");
strncpy(cmd_strs[cmd_count], cmd_ptr, INPUT_MAX); return -1;
cmd_count++; }
cmd_ptr = strtok(NULL, ";"); strncpy(cmd_strs[cmd_count], cmd_ptr, INPUT_MAX);
} cmd_count++;
cmd_ptr = strtok(NULL, ";");
}
return cmd_count; return cmd_count;
} }
int main() int main()
{ {
char user_input[INPUT_MAX]; char user_input[INPUT_MAX];
char cmd_strs[CMD_MAX][INPUT_MAX]; char cmd_strs[CMD_MAX][INPUT_MAX];
// TODO need to be able to get input from // TODO need to be able to get input from
// the user in a loop // the user in a loop
// Print the input prompt // Print the input prompt
printf("$> "); printf("$> ");
// Read user input // Read user input
if(read_cmd_string(user_input) == -1) { if (read_cmd_string(user_input) == -1)
return 1; {
} return 1;
}
// TODO: Figure out how to handle the 'quit' command // TODO: Figure out how to handle the 'quit' command
// Chop the input into command strings // Chop the input into command strings
int cmd_count = parse_commands(user_input, cmd_strs); int cmd_count = parse_commands(user_input, cmd_strs);
if(cmd_count == -1) { if (cmd_count == -1)
return 1; {
} return 1;
}
// Chop the commands into arguments and execute one at a time // Chop the commands into arguments and execute one at a time
for(int i = 0; i < cmd_count; i++) { for (int i = 0; i < cmd_count; i++)
{
// TODO:
// 1) Chop the command into command line arguments
// need to handle up to 10 arguments
// NOTE: the command name is always the first argument
// 2) fork a process
// 3) execute the command with execvp
} // TODO:
// 1) Chop the command into command line arguments
return 0; // need to handle up to 10 arguments
// NOTE: the command name is always the first argument
// 2) fork a process
// 3) execute the command with execvp
}
return 0;
} }