X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/b3b42765712afed5a35c9be5c832f4a06bd85e7a..6d75e31596b5ac2e638c8a31c6c2185ee4053b6b:/lunaix-os/kernel/demos/simple_sh.c diff --git a/lunaix-os/kernel/demos/simple_sh.c b/lunaix-os/kernel/demos/simple_sh.c index 036550a..195117a 100644 --- a/lunaix-os/kernel/demos/simple_sh.c +++ b/lunaix-os/kernel/demos/simple_sh.c @@ -8,6 +8,7 @@ #include char pwd[512]; +char cat_buf[1024]; /* Simple shell - (actually this is not even a shell) @@ -55,6 +56,9 @@ sh_printerr() case ENOMEM: printf("Error: Out of memory\n"); break; + case EISDIR: + printf("Error: This is a directory\n"); + break; default: printf("Error: Fail to open (%d)\n", errno); break; @@ -67,9 +71,11 @@ sh_main() char buf[512]; char *cmd, *argpart; + printf("\n Simple shell. Use or to scroll.\n\n"); + while (1) { getcwd(pwd, 512); - printf("%s> ", pwd); + printf("[\033[2m%s\033[39;49m]$ ", pwd); size_t sz = read(stdin, buf, 512); if (sz < 0) { printf("fail to read user input (%d)\n", geterrno()); @@ -77,6 +83,9 @@ sh_main() } buf[sz - 1] = '\0'; parse_cmdline(buf, &cmd, &argpart); + if (cmd[0] == 0) { + goto cont; + } if (streq(cmd, "cd")) { if (chdir(argpart) < 0) { sh_printerr(); @@ -97,9 +106,27 @@ sh_main() close(fd); } + } else if (streq(cmd, "cat")) { + int fd = open(argpart, 0); + if (fd < 0) { + sh_printerr(); + } else { + int sz; + while ((sz = read(fd, cat_buf, 1024)) == 1024) { + write(stdout, cat_buf, 1024); + } + if (sz < 0) { + sh_printerr(); + } else { + write(stdout, cat_buf, sz); + } + close(fd); + printf("\n"); + } } else { printf("unknow command"); } + cont: printf("\n"); } } \ No newline at end of file