diff --git a/kernel/kernel/kernel.cpp b/kernel/kernel/kernel.cpp index 71b8eab69..b1df11d8a 100644 --- a/kernel/kernel/kernel.cpp +++ b/kernel/kernel/kernel.cpp @@ -180,7 +180,7 @@ static void init2(void* tty1) ((TTY*)tty1)->initialize_device(); - MUST(Process::create_userspace("/usr/bin/cat"sv)); + MUST(Process::create_userspace("/usr/bin/Shell"sv)); return; Process::create_kernel( diff --git a/userspace/CMakeLists.txt b/userspace/CMakeLists.txt index add6c6be0..0138f20e0 100644 --- a/userspace/CMakeLists.txt +++ b/userspace/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.26) project(userspace CXX) set(USERSPACE_PROJECTS + Shell cat test yes diff --git a/userspace/Shell/CMakeLists.txt b/userspace/Shell/CMakeLists.txt new file mode 100644 index 000000000..0d742bf91 --- /dev/null +++ b/userspace/Shell/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.26) + +project(Shell CXX) + +set(SOURCES + main.cpp +) + +add_executable(Shell ${SOURCES}) +target_compile_options(Shell PUBLIC -O2 -g) +add_dependencies(Shell libc-install) +target_link_options(Shell PUBLIC -nodefaultlibs) +target_link_libraries(Shell PUBLIC ${BANAN_LIB}/libc.a) + +add_custom_target(Shell-install + COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/Shell ${BANAN_BIN}/ + DEPENDS Shell +) diff --git a/userspace/Shell/main.cpp b/userspace/Shell/main.cpp new file mode 100644 index 000000000..a0eaf2ee1 --- /dev/null +++ b/userspace/Shell/main.cpp @@ -0,0 +1,27 @@ +#include +#include + +struct termios old_termios, new_termios; + +int main(int argc, char** argv) +{ + for (int i = 0; i < argc; i++) + printf("%s\n", argv[i]); + + tcgetattr(0, &old_termios); + + new_termios = old_termios; + new_termios.c_lflag &= ~(ECHO | ICANON); + tcsetattr(0, TCSANOW, &new_termios); + + while (true) + { + char c; + fread(&c, 1, sizeof(char), stdin); + fputc(c, stdout); + fflush(stdout); + } + + tcsetattr(0, TCSANOW, &old_termios); + return 0; +} diff --git a/userspace/cat/main.cpp b/userspace/cat/main.cpp index ce1d3da91..31473283c 100644 --- a/userspace/cat/main.cpp +++ b/userspace/cat/main.cpp @@ -21,10 +21,6 @@ int main(int argc, char** argv) { int ret = 0; - printf("argc %d, argv %p\n", argc, argv); - for (int i = 0; i < argc; i++) - printf("%s\n", argv[i]); - if (argc > 1) { for (int i = 1; i < argc; i++)