Copyright (C) 1994, Digital Equipment Corp.
MODULE ZeusDataView;
<* PRAGMA LL *>
IMPORT Algorithm, Axis, DataView, Filter, FormsVBT, Rd, Rsrc, TextVBT, Thread,
VBT, View, Zeus, ZeusClass;
<* FATAL Rd.Failure, Thread.Alerted, FormsVBT.Error *>
REVEAL
T = View.T BRANDED OBJECT
tc: CARDINAL;
slate: TextVBT.T;
OVERRIDES
isCompat := IsCompat;
startrun := Startrun;
shape := Shape;
END;
PROCEDURE IsCompat (<* UNUSED *> v: T; alg: ZeusClass.T):
BOOLEAN =
<* LL = arbitrary *>
BEGIN
RETURN NARROW(alg, Algorithm.T).varRsrc # NIL
END IsCompat;
PROCEDURE Startrun (view: T) =
<* LL.sup < VBT.mu *>
<* FATAL Rsrc.NotFound *>
VAR
alg := Zeus.Resolve(view).alg;
ch : VBT.T;
BEGIN
LOCK VBT.mu DO
(* This code is serialized among all data views. Just
before Zeus calls Startrun, it NILs alg.varView. Thus,
only the first data view whose Startrun executes will
actually install the varRsrc form. *)
IF alg.varRsrc = NIL THEN
(*
TextVBT.Put(view.slate,
"No variable-view form specified in this algorithm.");
ch := view.slate;
*)
<* ASSERT FALSE *>
ELSIF alg.varView # NIL THEN
TextVBT.Put(
view.slate,
"Another variable-view installed.");
ch := view.slate;
ELSE
alg.varView :=
NEW(DataView.T).initFromRsrc(alg.varRsrc, alg.varPath);
ch := alg.varView;
END;
IF ch # Filter.Child(view) THEN
EVAL Filter.Replace(view, ch)
END
END;
View.T.startrun(view);
END Startrun;
CONST
DefaultShape =
VBT.SizeRange{lo := VBT.DefaultShape.lo,
pref := 300,
hi := VBT.DefaultShape.hi};
PROCEDURE Shape (<* UNUSED *> v : VBT.T;
<* UNUSED *> axis: Axis.T;
<* UNUSED *> n : CARDINAL): VBT.SizeRange =
BEGIN
RETURN DefaultShape
END Shape;
PROCEDURE New (): View.T =
<* LL.sup <= VBT.mu *>
VAR ch := TextVBT.New ("");
BEGIN
RETURN NEW (T, slate := ch).init (ch);
END New;
BEGIN
END ZeusDataView.