PRIVATE CONST Size = 100, Aspect = 0.35; PROC New(a) IS IF VAR b = (CAR(a) + Size, CDR(a)), c ~ (1, -Aspect) REL (a, b), d ~ (0, -Aspect) REL (a, b), e ~ (0.5, 0) REL (a, b), f ~ (0.5, -Aspect) REL (a, b) IN PS.MoveTo(a); PS.LineTo(b); PS.LineTo(c); PS.LineTo(d); PS.LineTo(a); PS.MoveTo(e); PS.LineTo(f); PS.Stroke() END FI END; FUNC b = NE(a) IS b = (CAR(a) + Size, CDR(a)) END; FUNC c = SE(a) IS c = (1, -Aspect) REL (a, NE(a)) END; FUNC d = SW(a) IS d = (0, -Aspect) REL (a, NE(a)) END; FUNC n = North(a) IS n = Geometry.Mid(a, NE(a)) END; FUNC s = South(a) IS s = Geometry.Mid(SW(a), SE(a)) END; FUNC e = East(a) IS e = Geometry.Mid(NE(a), SE(a)) END; FUNC w = West(a) IS w = Geometry.Mid(a, SW(a)) END; FUNC c = Car(a) IS c = Geometry.Mid(a, South(a)) END; FUNC c = Cdr(a) IS c = Geometry.Mid(NE(a), South(a)) END; PROC Cmd0() IS IF VAR a = (-151.15395, 54.61122), b = (-14.253652, 54.61122), c ~ (-39.25365, -17.835535), d ~ (-76.153946, 37.11122), e ~ (-14.253652, 37.11122), f ~ (10.746347, 37.11122), g ~ (10.746347, -17.835535), h ~ (-101.153946, 54.61122), i ~ (60.746346, 37.11122), j ~ (137.08612, 37.11122), k ~ (-101.153946, 91.0187), l ~ (154.5059, 146.38841), m ~ (-46.637302, 122.39632), n ~ (-87.766396, 117.490486), o ~ (85.746346, 37.11122), p ~ (60.746346, -17.835535), q ~ (10.746349, -52.835533), r ~ (-39.253654, -52.835533), s ~ (-126.153946, 37.11122), t ~ (-126.153946, -17.835535) IN d = Cdr(a) AND e = West(b) AND a HOR b AND f = Car(b) AND g = North(c) AND f VER g AND h = North(a) AND i = Cdr(b) AND Geometry.Colinear(l, m, n) AND h VER k AND i HOR j AND o = East(b) AND p = NE(c) AND q = South(c) AND r = SW(c) AND s = Car(a) AND s VER t AND t HOR g -> PS.SetWidth(2.5); New(a); New(b); New(c); Arrow.Straight(d, e); Arrow.Straight(f, g); PS.MoveTo(i); PS.LineTo(o); PS.CurveTo(j, l, m); Arrow.Curved(m, n, k, h); PS.MoveTo(p); PS.LineTo(q); PS.MoveTo(g); PS.LineTo(r); PS.Stroke(); Arrow.Straight(s, t); TypeLinesC.North(t, "foo") END FI END;