ref: babf901b4a508c3ec5d1f89655f10377bbdf9637
dir: /appl/cmd/install/info.b/
implement Info;
include "sys.m";
sys: Sys;
include "draw.m";
include "bufio.m";
bufio: Bufio;
Iobuf: import bufio;
include "daytime.m";
daytime: Daytime;
include "arg.m";
arg: Arg;
include "wrap.m";
wrap : Wrap;
Info: module{
init: fn(nil: ref Draw->Context, nil: list of string);
};
root : string;
TYPLEN : con 4;
typestr := array[TYPLEN] of { "???", "package", "update", "full update" };
fatal(err : string)
{
sys->fprint(sys->fildes(2), "%s\n", err);
raise "fail:error";
}
init(nil: ref Draw->Context, args: list of string)
{
sys = load Sys Sys->PATH;
bufio = load Bufio Bufio->PATH;
daytime = load Daytime Daytime->PATH;
arg = load Arg Arg->PATH;
wrap = load Wrap Wrap->PATH;
wrap->init(bufio);
arg->init(args);
while ((c := arg->opt()) != 0) {
case c {
'r' =>
root = arg->arg();
if (root == nil)
fatal("missing root name");
* =>
fatal(sys->sprint("bad argument -%c", c));
}
}
args = arg->argv();
if (args == nil || tl args != nil)
fatal("usage: install/info [-r root] package");
w := wrap->openwraphdr(hd args, root, nil, 0);
if (w == nil)
fatal("no such package found");
tm := daytime->text(daytime->local(w.tfull));
sys->print("%s (complete as of %s)\n", w.name, tm[0:28]);
for (i := w.nu; --i >= 0;) {
typ := w.u[i].typ;
if (typ < 0 || typ >= TYPLEN)
sys->print("%s", typestr[0]);
else
sys->print("%s", typestr[typ]);
sys->print(" %s", wrap->now2string(w.u[i].time, 0));
if (typ & wrap->UPD)
sys->print(" updating %s", wrap->now2string(w.u[i].utime, 0));
if (w.u[i].desc != nil)
sys->print(": %s", w.u[i].desc);
sys->print("\n");
}
wrap->end();
}