X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/c4510182f3c02e390184bee518940e325f064b20..6d75e31596b5ac2e638c8a31c6c2185ee4053b6b:/lunaix-os/kernel/demos/simple_sh.c?ds=sidebyside diff --git a/lunaix-os/kernel/demos/simple_sh.c b/lunaix-os/kernel/demos/simple_sh.c index 8243ae1..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; @@ -71,7 +75,7 @@ sh_main() 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()); @@ -102,6 +106,23 @@ 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"); }