PROC RectCNW(a, b) IS IF VAR c ~ (-1, 0) REL (a, b), d ~ (-0.04935, -0.9988) REL (a, b), e ~ (0.04935, 0.9988) REL (a, b) IN e = Geometry.HorVer(c, b) AND d = Geometry.HorVer(b, c) AND a = Geometry.Mid(b, c) -> PS.MoveTo(b); PS.LineTo(d); PS.LineTo(c); PS.LineTo(e); PS.Close(); PS.Stroke() END FI END; PROC ArrowHead(a, b, c, g) IS IF VAR d ~ (0.2656, 0) REL (a, b), e = (1.175, -0.4598) REL (a, d), f = (1.175, 0.4598) REL (a, d) IN Geometry.Colinear(b, d, a) AND (d, a) CONG (g, c) -> PS.MoveTo(a); PS.LineTo(e); PS.LineTo(d); PS.LineTo(f); PS.Close(); PS.Fill() END FI END; PROC DblArrow(a, b, c, d) IS IF VAR aa ~ (0.5, 0) REL (a, b), bb ~ (0.5, 0) REL (a, b) IN Geometry.Colinear(a, aa, b) AND Geometry.Colinear(a, bb, b) AND (a, aa) CONG (c, d) AND (b, bb) CONG (c, d) -> PS.MoveTo(aa); PS.LineTo(bb); PS.Stroke(); ArrowHead(b, a, c, d); ArrowHead(a, b, c, d) END FI END; PROC MPDblArrow(a, b, c, f, g) IS IF VAR d ~ (0.1017, -0.3022) REL (a, b), e ~ (0.1936, -0.5754) REL (a, b) IN d = Geometry.HorVer(b, a) AND e = Geometry.HorVer(c, a) -> DblArrow(d, e, f, g) END FI END; CONST LineWidth = 2; PROC LTypeLine(p, txt) IS VAR asc, dec IN asc, dec := PS.FontHeight(); PS.Type((CAR(p), CDR(p) - (asc - dec) / 2), txt) END END; PROC Cmd0() IS IF VAR a = (-133.29921, 70.53949), b = R2.Plus(a, (-18.17717, 15.928276)), c ~ (-83.816925, 70.53949), d ~ (-101.994095, 86.467766), e ~ (-34.334644, 70.53949), f ~ (-52.51181, 86.467766), g ~ (15.147636, 70.53949), h ~ (-3.0295305, 86.467766), i ~ (-59.075783, -12.29788), j ~ R2.Plus(i, (-92.4006, 15.403898)), k ~ (33.32481, -27.701778), l ~ (33.324802, 54.61122), m = (106.03346, 24.271654), n = R2.Plus(m, (0, 12.135824)), o ~ (49.229824, 70.53949), p ~ (49.229824, -12.29788) IN b HOR d AND b HOR f AND b HOR h AND a HOR c AND a HOR e AND a HOR g AND (b, d) CONG (d, f) AND (b, d) CONG (f, h) AND (a, c) CONG (c, e) AND (a, c) CONG (e, g) AND b VER j AND i = Geometry.Mid(j, k) AND g = Geometry.Mid(h, l) AND l VER k AND (b, d) CONG (a, c) AND g HOR o AND p = Geometry.HorVer(i, o) AND n VER m -> PS.SetWidth(LineWidth); RectCNW(a, b); RectCNW(c, d); RectCNW(e, f); RectCNW(g, h); RectCNW(i, j); MPDblArrow(a, l, j, m, n); MPDblArrow(c, l, j, m, n); MPDblArrow(e, l, j, m, n); MPDblArrow(g, l, j, m, n); PS.SetFont("Helvetica", PS.Huge); LTypeLine(o, "Processors"); LTypeLine(p, "Memory") END FI END;