FUNC t = Slider(a, b, c) IS (E y :: c = (t, y) REL (a, b)) END; PRIVATE FUNC p = Interp(a, b, t) IS p = (t, 0) REL (a, b) END; PRIVATE CONST DotSize = 6; PROC DrawBezier(a, b, c, d, t) IS IF SAVE PS IN PS.SetWidth(3); PS.MoveTo(a); PS.LineTo(b); PS.LineTo(c); PS.LineTo(d); PS.Stroke(); PS.MoveTo(a); PS.CurveTo(b, c, d); PS.SetColor([0.1, 0.1, 1]); PS.Stroke() END; Trellis(a, b, c, d, t) FI END; PRIVATE PROC Dot(a) IS IF VAR b = (CAR(a) + DotSize, CDR(a)) IN Circle.Draw(a, b); PS.SetColor(Color.Red); PS.Fill() END FI END; PRIVATE PROC Trellis(a, b, c, d, t) IS IF VAR e = (t, 0) REL (a, b), f = (t, 0) REL (b, c), g = (t, 0) REL (c, d), h = (t, 0) REL (e, f), i = (t, 0) REL (f, g), j = (t, 0) REL (h, i) IN PS.MoveTo(e); PS.LineTo(f); PS.SetColor(Color.Red); PS.Stroke(); PS.MoveTo(f); PS.LineTo(g); PS.SetColor(Color.Blue); PS.Stroke(); PS.MoveTo(h); PS.LineTo(i); PS.SetColor(Color.Cyan); PS.Stroke(); Dot(j) END FI END; PROC Cmd0() IS IF VAR t ~ 0.56891495, e = (-143.14517, 118), f = (115.12205, 118), g = (3.7869093, 118), a = (-15.90502, -288.98437), b = (-193.88976, -78.88287), c = (134.0566, 43.233883), d = (33.324802, -287.4674) IN e HOR f AND g = (t, 0) REL (e, f) -> DrawBezier(a, b, c, d, t); PS.MoveTo(e); PS.LineTo(f) END FI END;