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