xref: /inferno-os/appl/cmd/env.b (revision 3f1f06c5d12b24c4061e5123acabf72348ff45a2)
1implement Envcmd;
2
3#
4# Copyright © 2000 Vita Nuova Limited.  All rights reserved.
5#
6
7include "sys.m";
8	sys: Sys;
9
10include "draw.m";
11
12include "env.m";
13
14include "readdir.m";
15
16Envcmd: module
17{
18	init: fn(nil: ref Draw->Context, argv: list of string);
19};
20
21init(nil: ref Draw->Context, argv: list of string)
22{
23	sys = load Sys Sys->PATH;
24	stdout := sys->fildes(1);
25	if (tl argv != nil) {
26		sys->fprint(stderr(), "Usage: env\n");
27		raise "fail:usage";
28	}
29	env := load Env Env->PATH;
30	if(env == nil)
31		error(sys->sprint("can't load %s: %r", Env->PATH));
32	readdir := load Readdir Readdir->PATH;
33	if(readdir == nil)
34		error(sys->sprint("can't load %s: %r", Readdir->PATH));
35	(a, nil) := readdir->init("/env", Readdir->NONE | Readdir->COMPACT | Readdir->DESCENDING);
36	for(i := 0; i < len a; i++){
37		s := a[i].name+"="+env->getenv(a[i].name)+"\n";
38		b := array of byte s;
39		sys->write(stdout, b, len b);
40	}
41}
42
43error(s: string)
44{
45	sys->fprint(stderr(), "env: %s\n", s);
46	raise "fail:error";
47}
48
49stderr(): ref Sys->FD
50{
51	return sys->fildes(2);
52}
53