Charles.Forsyth20060303a828770d19 years agoHistory
72 lines · 1.4 KB · Brainfuck
RawDownload
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];}