summaryrefslogtreecommitdiff
path: root/appl/cmd/env.b
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
commit37da2899f40661e3e9631e497da8dc59b971cbd0 (patch)
treecbc6d4680e347d906f5fa7fca73214418741df72 /appl/cmd/env.b
parent54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff)
20060303a
Diffstat (limited to 'appl/cmd/env.b')
-rw-r--r--appl/cmd/env.b53
1 files changed, 53 insertions, 0 deletions
diff --git a/appl/cmd/env.b b/appl/cmd/env.b
new file mode 100644
index 00000000..e6fd8889
--- /dev/null
+++ b/appl/cmd/env.b
@@ -0,0 +1,53 @@
+implement Envcmd;
+
+#
+# Copyright © 2000 Vita Nuova Limited. All rights reserved.
+#
+
+include "sys.m";
+ sys: Sys;
+
+include "draw.m";
+
+include "env.m";
+
+include "readdir.m";
+
+Envcmd: module
+{
+ init: fn(nil: ref Draw->Context, argv: list of string);
+};
+
+init(nil: ref Draw->Context, argv: list of string)
+{
+ sys = load Sys Sys->PATH;
+ stdout := sys->fildes(1);
+ if (tl argv != nil) {
+ sys->fprint(stderr(), "Usage: env\n");
+ raise "fail:usage";
+ }
+ env := load Env Env->PATH;
+ if(env == nil)
+ error(sys->sprint("can't load %s: %r", Env->PATH));
+ readdir := load Readdir Readdir->PATH;
+ if(readdir == nil)
+ error(sys->sprint("can't load %s: %r", Readdir->PATH));
+ (a, n) := readdir->init("/env",
+ Readdir->NONE | Readdir->COMPACT | Readdir->DESCENDING);
+ for(i := 0; i < len a; i++){
+ s := a[i].name+"="+env->getenv(a[i].name)+"\n";
+ b := array of byte s;
+ sys->write(stdout, b, len b);
+ }
+}
+
+error(s: string)
+{
+ sys->fprint(stderr(), "env: %s\n", s);
+ raise "fail:error";
+}
+
+stderr(): ref Sys->FD
+{
+ return sys->fildes(2);
+}