CONST Gap = 2, Num = 60, Total = Gap * Num + 1; PROC DrawLines(a, i, xK, yK) IS VAR x, y IN x := i * Gap * xK; y := Total * yK; PS.MoveTo(R2.Plus(a, (x, 0))); PS.LineTo(R2.Plus(a, (x, y))); x := Total * xK; y := i * Gap * yK; PS.MoveTo(R2.Plus(a, (0, y))); PS.LineTo(R2.Plus(a, (x, y))); PS.Stroke() END END; PROC Grid(a) IS VAR x, y, i = 0 IN x, y := Unit.Pixel(); PS.SetWidth(0); DO i <= Num -> DrawLines(a, i, x, y); i := i + 1 OD END END; UI PointTool(Grid); PROC Square(a, sz, label) IS VAR b IN b := R2.Plus(a, (sz, sz)); Rect.Draw(a, b); PS.Stroke(); TypeLinesC.Center(Geometry.Mid(a, b), label) END END; PROC Cmd0() IS IF VAR a ~ (51.31, 50.62), b ~ (175.2, 48.52), c ~ (48.38, 155.4), d ~ (160.5, 138.5) IN Grid(a); Square(b, Unit.In * 1, "1 in"); Square(c, Unit.Cm * 3, "3 cm"); Square(d, Unit.Mm * 40, "40 mm") END FI END;