Copyright (C) 1994, Digital Equipment Corp.
<*PRAGMA LL*> MODULE; IMPORT ScrnPaintOp, JoinScreen, Palette, PaintOp, VBTRep, PlttFrnds; PROCEDURE JoinPaintOp New (st: JoinScreen.T): Oracle = BEGIN RETURN NEW(Oracle, st := st) END New; PROCEDUREResolve (st: JoinScreen.T; op: PaintOp.T) = VAR i: INTEGER; t := st.succ(NIL, i); BEGIN WHILE t # NIL DO EVAL Palette.ResolveOp(t, op); t := st.succ(t, i) END END Resolve; PROCEDUREApply ( st: JoinScreen.T; <*UNUSED*> cl: Palette.OpClosure; op: PaintOp.T ): ScrnPaintOp.T = VAR res := st.ops[op.op]; BEGIN Resolve(st, op); IF res # NIL AND res # PlttFrnds.noOp THEN RETURN res END; RETURN NEW(T, id := 2 * op.op + 1, st := st); END Apply; REVEAL Oracle = ScrnPaintOp.Oracle BRANDED OBJECT st: JoinScreen.T; (* OVERRIDES opaque := Opaque; bgfg := Bgfg; swap := Swap; transparent := Transparent; copy := Copy; builtIn := OpBuiltIn; *) END; TYPE T = ScrnPaintOp.T OBJECT st: JoinScreen.T; END;
PROCEDURE OpBuiltIn(orc: OpOracle; op: PaintOp.Predefined) : ScrnPaintOp.T = BEGIN IF orc.st.sts = NIL THEN Crash(); END; IF orc.st.sts[0].ops[op] = PlttFrnds.noOp THEN EVAL Palette.ResolveOp(orc.st.sts[0], PaintOp.T{op}); END; (* if
RETURN orc.st.sts[0].ops[op];
END OpBuiltIn;
PROCEDURE Bgfg(orc: OpOracle;
bg, fg: ScrnPaintOp.T): ScrnPaintOp.T
RAISES {ScrnPaintOp.Failure} =
BEGIN
IF orc.st.sts = NIL THEN Crash(); END;
RETURN orc.st.sts[0].op.bgfg(bg, fg);
END Bgfg;
PROCEDURE Copy(orc: OpOracle): ScrnPaintOp.T RAISES {} =
BEGIN
IF orc.st.sts = NIL THEN Crash(); END;
RETURN orc.st.sts[0].op.copy();
END Copy;
PROCEDURE Opaque(orc: OpOracle; pix: ScrnPaintOp.Pixel)
: ScrnPaintOp.T RAISES {} =
BEGIN
IF orc.st.sts = NIL THEN Crash(); END;
RETURN orc.st.sts[0].op.opaque(pix);
END Opaque;
PROCEDURE Swap(orc: OpOracle; p,q: ScrnPaintOp.Pixel)
: ScrnPaintOp.T RAISES {} =
BEGIN
IF orc.st.sts = NIL THEN Crash(); END;
RETURN orc.st.sts[0].op.swap(p, q);
END Swap;
PROCEDURE Transparent(orc: OpOracle): ScrnPaintOp.T RAISES {}=
BEGIN
IF orc.st.sts = NIL THEN Crash(); END;
RETURN orc.st.sts[0].op.transparent();
END Transparent;
EXCEPTION FatalError;
PROCEDURE Crash () =
<* FATAL FatalError *>
BEGIN
RAISE FatalError;
END Crash;
*)
BEGIN END JoinPaintOp.