From 37da2899f40661e3e9631e497da8dc59b971cbd0 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Fri, 22 Dec 2006 17:07:39 +0000 Subject: 20060303a --- appl/cmd/sh/test.b | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 appl/cmd/sh/test.b (limited to 'appl/cmd/sh/test.b') diff --git a/appl/cmd/sh/test.b b/appl/cmd/sh/test.b new file mode 100644 index 00000000..d8a6b62a --- /dev/null +++ b/appl/cmd/sh/test.b @@ -0,0 +1,96 @@ +implement Shellbuiltin; + +include "sys.m"; + sys: Sys; +include "draw.m"; +include "sh.m"; + sh: Sh; + Listnode, Context: import sh; + myself: Shellbuiltin; +include "itslib.m"; + itslib: Itslib; + Tconfig, S_INFO, S_WARN, S_ERROR, S_FATAL: import itslib; + +tconf: ref Tconfig; + +initbuiltin(ctxt: ref Context, shmod: Sh): string +{ + sys = load Sys Sys->PATH; + itslib = load Itslib Itslib->PATH; + if (itslib != nil) + tconf = itslib->init(); + sh = shmod; + myself = load Shellbuiltin "$self"; + if (myself == nil) + ctxt.fail("bad module", sys->sprint("its: cannot load self: %r")); + ctxt.addbuiltin("report", myself); + return nil; +} + +getself(): Shellbuiltin +{ + return myself; +} + + +whatis(nil: ref Sh->Context, nil: Sh, nil: string, nil: int): string +{ + return nil; +} + + + +runbuiltin(ctxt: ref Sh->Context, nil: Sh, + cmd: list of ref Sh->Listnode, nil: int): string +{ + case (hd cmd).word { + "report" => + if (len cmd < 4) + rusage(ctxt); + cmd = tl cmd; + sevstr := (hd cmd).word; + sev := sevtran(sevstr); + if (sev < 0) + rusage(ctxt); + cmd = tl cmd; + verb := (hd cmd).word; + cmd = tl cmd; + mtext := ""; + i := 0; + while (len cmd) { + msg := (hd cmd).word; + cmd = tl cmd; + if (i++ > 0) + mtext = mtext + " "; + mtext = mtext + msg; + } + if (tconf != nil) + tconf.report(int sev, int verb, mtext); + else + sys->fprint(sys->fildes(2), "[itslib missing] %s %s\n", sevstr, mtext); + } + return nil; +} + + +runsbuiltin(nil: ref Sh->Context, nil: Sh, + nil: list of ref Sh->Listnode): list of ref Listnode +{ + return nil; +} + + +sevtran(sname: string): int +{ + SEVMAP := array[] of {"INF", "WRN", "ERR", "FTL"}; + for (i:=0; i