diff --git a/kernel32.c b/kernel32.c index 5631edd..6fc3b6b 100644 --- a/kernel32.c +++ b/kernel32.c @@ -25,11 +25,10 @@ int main() { buffer[i] = 0; readline(128, buffer); - char* argv[32]; - int argc = string_split(' ', buffer, argv); + char* rest = split_on_first(' ', buffer); - if (strcmp(argv[0], "help", 4)) { + if (strcmp(buffer, "help", 4)) { printf( "XnoeOS 32 Bit Mode Help.\n" "------------------------\n" @@ -37,15 +36,16 @@ int main() { ": Shows this message\n" "- clear\n" ": Clears the screen\n" + " - echo\n" + ": Repeats the text written afterwards\n" ); - } else if (strcmp(argv[0], "clear", 5)) { + } else if (strcmp(buffer, "clear", 5)) { clear_screen(); set_curpos(0, 0); - } else if (strcmp(argv[0], "echo", 4)) { - int index = 0; - while (++index <= argc) - printf("%s ", argv[index]); - printf("\n"); + } else if (strcmp(buffer, "echo", 4)) { + printf("%s\n", rest); + } else { + printf("Bad Command or filename!\n"); } } } \ No newline at end of file diff --git a/strings.c b/strings.c index 373e057..4d23fc4 100644 --- a/strings.c +++ b/strings.c @@ -10,6 +10,20 @@ bool strcmp(char* a, char* b, int max) { return true; } +char* split_on_first(char delimeter, char* string) { + int index = 0; + char current; + + while (current = string[index++]) { + if (current == delimeter) { + string[index-1] = 0; + return string+index; + } + } + + return 0; +} + int string_split(char delimeter, char* string, char** pointer_array) { int index = 0; int last_split_index = 0; diff --git a/strings.h b/strings.h index 8045227..8505e88 100644 --- a/strings.h +++ b/strings.h @@ -4,6 +4,7 @@ #include bool strcmp(char* a, char* b, int max); +char* split_on_first(char delimeter, char* string); int string_split(char delimeter, char* string, char** pointer_array); #endif \ No newline at end of file