MODULE ObxUnitConv;
(**
project = "BlackBox"
organization = "www.oberon.ch"
contributors = "Oberon microsystems"
version = "System/Rsrc/About"
copyright = "System/Rsrc/About"
license = "Docu/BB-License"
changes = ""
issues = ""
**)
IMPORT Ports, Dialog;
VAR
par*: RECORD metric*, inch*, point*: REAL; metricUnit*: Dialog.List END;
metricUnits: ARRAY 4 OF INTEGER;
PROCEDURE NotifyMetric* (op, from, to: INTEGER);
VAR units: REAL;
BEGIN
units := par.metric * metricUnits[par.metricUnit.index] * Ports.mm;
par.inch := units / Ports.inch; par.point := units / Ports.point;
Dialog.Update(par)
END NotifyMetric;
PROCEDURE NotifyInch* (op, from, to: INTEGER);
VAR units: REAL;
BEGIN
units := par.inch * Ports.inch;
par.metric := units / metricUnits[par.metricUnit.index] / Ports.mm; par.point := units / Ports.point;
Dialog.Update(par)
END NotifyInch;
PROCEDURE NotifyPoint* (op, from, to: INTEGER);
VAR units: REAL;
BEGIN
units := par.point * Ports.point;
par.metric := units / metricUnits[par.metricUnit.index] / Ports.mm; par.inch := units / Ports.inch;
Dialog.Update(par)
END NotifyPoint;
BEGIN
par.metricUnit.SetLen(4);
par.metricUnit.SetItem(0, "mm"); metricUnits[0] := 1;
par.metricUnit.SetItem(1, "cm"); metricUnits[1] := 10;
par.metricUnit.SetItem(2, "m"); metricUnits[2] := 1000;
par.metricUnit.SetItem(3, "km"); metricUnits[3] := 1000000
END ObxUnitConv.