From 33f618631a5bff43c0beb3b3ba87b1de0b9b6917 Mon Sep 17 00:00:00 2001 From: xiaoyi1212 Date: Sun, 8 Sep 2024 10:37:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dshell=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E8=8E=B7=E5=8F=96=E8=BE=93=E5=85=A5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/shell/shell.c | 11 ++++++++++- src/kernel/kernel.c | 6 +++--- src/kernel/tty.c | 2 +- src/sysapp/shell.c | 10 +++++++++- src/util/printf.c | 2 -- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/apps/shell/shell.c b/apps/shell/shell.c index 5b9e312..d23ac5d 100644 --- a/apps/shell/shell.c +++ b/apps/shell/shell.c @@ -5,12 +5,21 @@ extern void print_info(); +int shell_getc(){ + char c; + do{ + c = syscall_getch(); + if(c == '\b' || c == '\n') break; + } while (!isprint(c)); + return c; +} + static int gets(char *buf) { int index = 0; char c; - while ((c = syscall_getch()) != '\n') { + while ((c = shell_getc()) != '\n') { if (c == '\b') { if (index > 0) { index--; diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index a67d401..f31be77 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -163,9 +163,9 @@ void kernel_main(multiboot_t *multiboot) { clock_sleep(25); vfs_change_path("apps"); - klogf(user_process("init.bin","InitService") != -1,"Init service process init.\n"); - // int pid = user_process("shell.bin","UserShell"); - //kernel_thread(check_task_usershell,&pid,"CTU"); + // klogf(user_process("init.bin","InitService") != -1,"Init service process init.\n"); + int pid = user_process("shell.bin","UserShell"); + kernel_thread(check_task_usershell,&pid,"CTU"); // int pid = kernel_thread(setup_shell,NULL,"CPOS-Shell"); // klogf(pid != -1,"Launch kernel shell.\n"); diff --git a/src/kernel/tty.c b/src/kernel/tty.c index c8123ed..68008a6 100644 --- a/src/kernel/tty.c +++ b/src/kernel/tty.c @@ -394,7 +394,7 @@ void init_default_tty(struct task_struct *task){ task->tty->is_using = true; task->tty->print = tty_print; task->tty->clear = clear_TextMode; - task->tty->putchar = putchar_TextMode; + task->tty->putchar = vbe_putchar; task->tty->gotoxy = tty_gotoxy; task->tty->screen_ne = screen_ne_TextMode; task->tty->vram = screen; diff --git a/src/sysapp/shell.c b/src/sysapp/shell.c index a2567f1..69898ca 100644 --- a/src/sysapp/shell.c +++ b/src/sysapp/shell.c @@ -14,8 +14,16 @@ extern Queue *key_char_queue; extern vdisk vdisk_ctl[10]; extern bool hasFS; +static inline int isprint_syshell(int c) { + return (c > 0x1F && c < 0x7F); +} + char getc() { - char c = kernel_getch(); + char c; + do{ + c = kernel_getch(); + if(c == '\b' || c == '\n') break; + } while (!isprint_syshell(c)); return c; } diff --git a/src/util/printf.c b/src/util/printf.c index f759db0..c4bd6e7 100644 --- a/src/util/printf.c +++ b/src/util/printf.c @@ -338,8 +338,6 @@ void print(char *message) { return; } - logk(message); - if(vbe_status){ vbe_writestring(message); } else vga_writestring(message);