implement Pimpl; include "sys.m"; sys: Sys; sprint, fprint: import sys; include "styx.m"; include "styxservers.m"; Styxserver: import Styxservers; include "daytime.m"; include "dat.m"; dat: Dat; mnt, evc, Qdir, debug, appl, slash: import dat; include "string.m"; str: String; splitl: import str; include "names.m"; names: Names; dirname: import names; include "error.m"; err: Error; checkload, panic, stderr: import err; include "tbl.m"; tbl: Tbl; Table: import tbl; include "mpanel.m"; Atag, Amax, Panel, Repl, Tappl, Trepl: import Panels; Aorder, Arow, Aspace: con Amax + iota; init(d: Dat): list of string { dat = d; sys = dat->sys; err = dat->err; str = dat->str; names = dat->names; return list of {"row:", "col:"}; } pinit(p: ref Panel) { p.container = 1; } rinit(p: ref Panel, r: ref Repl) { (t, nil) := splitl(p.name, ":"); rowcol: string; case t { "row" => rowcol = "row"; * => rowcol = "col"; } r.attrs[Atag] = "tag"; attrs := array[] of { "order", rowcol , "space 0"}; nattrs := array[len r.attrs + len attrs] of string; nattrs[0:] = r.attrs; nattrs[len r.attrs:] = attrs; r.attrs = nattrs; } newdata(nil: ref Panels->Panel): string { return "not to a container"; } space(p: ref Panels->Panel, r: ref Panels->Repl, ctl: list of string): (int, string) { n := int hd tl ctl; if (n < 0) return (0, "negative space"); if (r.id == 0){ r.attrs[Aspace] = sprint("space %d", n); for (rn := 0; rn < len p.repl; rn++) if ((pr := p.repl[rn]) != nil) pr.attrs[Aspace] = r.attrs[Aspace]; return (1, nil); } else return (0, "only allowed in application tree"); } rowcol(p: ref Panels->Panel, r: ref Panels->Repl, ctl: list of string): (int, string) { r.attrs[Arow] = hd ctl; if (r.id == 0){ for (rn := 0; rn < len p.repl; rn++) if ((pr := p.repl[rn]) != nil) pr.attrs[Arow] = r.attrs[Arow]; return (1, nil); } else return (0, nil); } ctl(p: ref Panels->Panel, r: ref Panels->Repl, ctl: list of string): (int, string) { case hd ctl { "space" => if (len ctl != 2) return (0, "1 argument needed"); return space(p, r, ctl); "row" or "col" => if (len ctl != 3) return (0, "3 arguments needed"); return rowcol(p, r, ctl); * => # order is handled by the tree, not by us. return (0, "not mine"); } }