GIF89a;
Mass Deface = 0)) { dotty.message (0, concat ('cannot run command: ', name)); return null; } } else return null; return fd; }; dotty.pushbusy = function (gt, views) { local vid; if (gt.busy == 0) for (vid in gt.views) setwidgetattr (vid, ['cursor' = 'watch';]); gt.busy = gt.busy + 1; }; dotty.popbusy = function (gt, views) { local vid; gt.busy = gt.busy - 1; if (gt.busy == 0) for (vid in gt.views) setwidgetattr (vid, ['cursor' = 'default';]); }; dotty.message = function (level, text) { if (level <= dotty.mlevel) echo ('dotty.lefty: ', text); }; # # printing or saving to file # dotty.protogt.printorsave = function (gt, vt, otype, name, mode, ptype) { local pr, wrect, vsize, xy, psize, canvas, pscanvas, cid, cname, t; local graph, edgehandles, fontmap, eid, edge, nid, node, gid, sgraph; local did, draw, i; if (~otype) if (~(otype = ask ('print to', 'choice', 'file|printer'))) return; if (otype == 'printer') { if (~getenv ('TMPDIR')) name = concat (getenv ('HOME'), '/.dottyout.ps'); else name = concat (getenv ('TMPDIR'), '/.dottyout.ps', random (10000)); if (getenv ('LEFTYWINSYS') ~= 'mswin' & ~pr) if (~(pr = ask ('printer command', 'string', 'lpr'))) return; } if (~name) if (~(name = ask ('postscript file', 'file', 'out.ps'))) return; if (~ptype) if (~(ptype = ask ('page size', 'choice', '8.5x11|11x17|36x50'))) return; if (~mode) if (~(mode = ask ('mode', 'choice', 'portrait|landscape|best fit'))) return; wrect = copy (vt.wrect); wrect[0].x = wrect[0].x - 1; wrect[1].x = wrect[1].x + 1; wrect[0].y = wrect[0].y - 1; wrect[1].y = wrect[1].y + 1; vsize = copy (vt.vsize); if (vsize.x == 0) vsize.x = 1; if (vsize.y == 0) vsize.y = 1; xy = vsize.x / vsize.y; if (mode == 'best fit') { if (xy < 1) mode = 'portrait'; else mode = 'landscape'; } psize = dotty.pagesizes[ptype]; if (mode == 'portrait') { if (xy < psize.x / psize.y) { vsize.y = psize.y * 300; vsize.x = vsize.y * xy; } else { vsize.x = psize.x * 300; vsize.y = vsize.x / xy; } } else { if (xy < psize.y / psize.x) { vsize.y = psize.x * 300; vsize.x = vsize.y * xy; } else { vsize.x = psize.y * 300; vsize.y = vsize.x / xy; } } if (~((pscanvas = createwidget (-1, [ 'type' = 'ps'; 'origin' = ['x' = 0; 'y' = 0;]; 'size' = vsize; 'mode' = mode; 'name' = name; ])) >= 0)) { dotty.message (0, 'cannot open printer device'); return; } for (cname in vt.colors) { cid = vt.colors[cname]; if (cname == '_bgcolor_') setwidgetattr (pscanvas, ['color' = [0 = cid;];]); else if (setwidgetattr (pscanvas, ['color' = [cid = cname;];]) ~= 1) { t = split (cname, ' '); if (tablesize (t) ~= 3 | setwidgetattr (pscanvas, [ 'color' = [cid = [ 'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]); ];]; ]) ~= 1) { dotty.message ( 0, concat ('unknown color ', cname, ' using #1') ); } } } setwidgetattr (pscanvas, ['window' = wrect;]); graph = copy (gt.graph); canvas = vt.canvas; vt.canvas = pscanvas; edgehandles = gt.edgehandles; gt.edgehandles = 0; fontmap = dotty.maps[getenv ('LEFTYWINSYS')].psfontmap; for (eid in graph.edges) { edge = graph.edges[eid]; edge.fontname = fontmap[edge.attr.fontname]; for (did in edge.draws) { if (did == 'ep') continue; draw = edge.draws[did]; for (i = 0; draw[i]; i = i + 1) if (draw[i].type == 'F') draw[i].fn = fontmap[draw[i].ofn]; } gt.drawedge (gt, [0 = vt;], edge); } for (nid in graph.nodes) { node = graph.nodes[nid]; node.fontname = fontmap[node.attr.fontname]; for (did in node.draws) { if (did == 'ep') continue; draw = node.draws[did]; for (i = 0; draw[i]; i = i + 1) if (draw[i].type == 'F') draw[i].fn = fontmap[draw[i].ofn]; } gt.drawnode (gt, [0 = vt;], node); } for (gid in graph.graphs) { sgraph = graph.graphs[gid]; sgraph.fontname = fontmap[sgraph.graphattr.fontname]; for (did in sgraph.draws) { if (did == 'ep') continue; draw = sgraph.draws[did]; for (i = 0; draw[i]; i = i + 1) if (draw[i].type == 'F') draw[i].fn = fontmap[draw[i].ofn]; } gt.drawsgraph (gt, [0 = vt;], sgraph); } graph.fontname = fontmap[graph.graphattr.fontname]; gt.drawsgraph (gt, [0 = vt;], graph); gt.edgehandles = edgehandles; vt.canvas = canvas; destroywidget (pscanvas); if (otype == 'printer' & getenv ('LEFTYWINSYS') ~= 'mswin') system (concat (pr, ' ', name, '; rm ',name)); };