MODULE Offset; CONST DefaultHor = 0, DefaultVer = 0; PRIVATE VAR hor := DefaultHor, ver := DefaultVer; (* This module maintains a current horizontal and vertical offset. The offset values are used by other modules. *) PROC h, v := GetHorVer() IS h, v := hor, ver END; PROC h := GetHor() IS h := hor END; PROC v := GetVer() IS v := ver END; PROC SetHorVer(h, v) IS hor, ver := h, v END; PROC SetHor(h) IS hor := h END; PROC SetVer(v) IS ver := v END; UI SetTool(SetHor); UI SetTool(SetVer); (* Get/set the horizontal and vertical offset values. *) UI Param(SetHor, DefaultHor); UI Param(SetHor, 0); UI Param(SetHor, 2); UI Param(SetHor, 4); UI Param(SetHor, 6); UI Param(SetHor, 10); UI Param(SetVer, DefaultVer); UI Param(SetVer, 0); UI Param(SetVer, 2); UI Param(SetVer, 4); UI Param(SetVer, 6); UI Param(SetVer, 10); PRIVATE VAR history := NIL; PROC Save() IS history := ((hor, ver), history) END; PROC Restore() IS VAR head IN head := CAR(history); hor, ver := CAR(head), CDR(head); history := CDR(history) END END; UI PointTool(Save); UI PointTool(Restore); (* Save/restore the current offset values. *)