This interface reveals those aspects of the RasterModeProp module that are related to proxied objects and to interfacing with an embedded language such as Obliq. It should be imported only by modules that implement this embedded language.
INTERFACEProxy Maker (PM) procedures for the various proxied object types are registered by assigning them to these variables. These variables could be put in their own interface.RasterModePropProxy ; IMPORT Prop, ProxiedObj; FROM RasterModeProp IMPORT Kind, Name, Val, ConstBeh, SyncBeh, AsyncBeh, DepBeh, Request;
VAR NamePM : PROCEDURE (x : Name) := NIL; ValPM : PROCEDURE (x : Val) := NIL; ConstBehPM : PROCEDURE (x : ConstBeh) := NIL; SyncBehPM : PROCEDURE (x : SyncBeh) := NIL; AsyncBehPM : PROCEDURE (x : AsyncBeh) := NIL; DepBehPM : PROCEDURE (x : DepBeh) := NIL; RequestPM : PROCEDURE (x : Request) := NIL;The
AsyncBeh and DepBeh types are abstract supertypes; concrete
   asynchronous and dependent behaviors are created by overriding the value
   method. We want to be able to do this not only from Modula-3, but also from
   the embedded language (e.g. Obliq). This is achieved by providing special
   proxy types.
   The proxy field of AsyncBeh and DepBeh must contain either NIL or
   an object of type AsyncBehProxy or DepBehProxy.
TYPE
  AsyncBehProxy = ProxiedObj.Proxy OBJECT
  METHODS
    compute (time : LONGREAL) : Kind RAISES {Prop.BadMethod};
  END;
  DepBehProxy = ProxiedObj.Proxy OBJECT
  METHODS
    compute (time : LONGREAL) : Kind RAISES {Prop.BadMethod};
  END;
  RequestProxy = ProxiedObj.Proxy OBJECT
  METHODS
    value (startval : Kind; reltime : REAL) : Kind
        RAISES {Prop.BadMethod};
  END;
END RasterModePropProxy.