From 37da2899f40661e3e9631e497da8dc59b971cbd0 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Fri, 22 Dec 2006 17:07:39 +0000 Subject: 20060303a --- appl/wm/about.b | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 appl/wm/about.b (limited to 'appl/wm/about.b') diff --git a/appl/wm/about.b b/appl/wm/about.b new file mode 100644 index 00000000..615f106b --- /dev/null +++ b/appl/wm/about.b @@ -0,0 +1,72 @@ +implement WmAbout; + +include "sys.m"; + sys: Sys; + +include "draw.m"; + draw: Draw; + Display, Image: import draw; + +include "tk.m"; + tk: Tk; + +include "tkclient.m"; + tkclient: Tkclient; + +WmAbout: module +{ + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +tkcfg(version: string): array of string +{ + return array[] of { + "frame .f -bg black -borderwidth 2 -relief ridge", + "label .b -bg black -bitmap @/icons/inferno.bit", + "label .l1 -bg black -fg #ff5500 -text {Inferno "+ version + "}", + "pack .b .l1 -in .f", + "pack .f -ipadx 4 -ipady 2", + "pack propagate . 0", + "update", + }; +} + +init(ctxt: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + if (ctxt == nil) { + sys->fprint(sys->fildes(2), "about: no window context\n"); + raise "fail:bad context"; + } + + draw = load Draw Draw->PATH; + tk = load Tk Tk->PATH; + tkclient= load Tkclient Tkclient->PATH; + + tkclient->init(); + (t, menubut) := tkclient->toplevel(ctxt, "", "About Inferno", 0); + + tkcmds := tkcfg(rf("/dev/sysctl")); + for (i := 0; i < len tkcmds; i++) + tk->cmd(t,tkcmds[i]); + + tkclient->onscreen(t, nil); + tkclient->startinput(t, "ptr"::nil); + stop := chan of int; + spawn tkclient->handler(t, stop); + while((menu := <-menubut) != "exit") + tkclient->wmctl(t, menu); + stop <-= 1; +} + +rf(name: string): string +{ + fd := sys->open(name, Sys->OREAD); + if(fd == nil) + return nil; + buf := array[128] of byte; + n := sys->read(fd, buf, len buf); + if(n < 0) + n = 0; + return string buf[0:n]; +} -- cgit v1.2.3