<> <> <> <> <> <> DIRECTORY Interpress USING [Master], Rope USING [ROPE]; IPInstructions: CEDAR DEFINITIONS = BEGIN <> Cardinal: TYPE ~ INT --[0..maxCardinal]--; ROPE: TYPE ~ Rope.ROPE; StackOpProcs: TYPE = RECORD [ pushIdentifier: PROCEDURE [id: ATOM]_ NIL, pushInteger: PROCEDURE [int: INT] _ NIL, pushNothing: PROCEDURE -- No value or NOP -- _ NIL, pushRational: PROCEDURE [n, d: INT]_ NIL, pushReal: PROCEDURE [r: REAL]_ NIL, pushString: PROCEDURE [s: ROPE]_ NIL, makeVec: PROCEDURE [cnt: Cardinal]_ NIL ]; StackOps: TYPE = REF StackOpProcs; InstPtr: TYPE = REF; -- to external or default instructions as defined by client InputProc: TYPE = PROCEDURE [ instr: InstPtr, default: BOOLEAN, instID: ATOM, ops: StackOps]; InstructionsRecord: TYPE = RECORD [-- opaque type referenced in Interpress instr: InstPtr _ NIL, inputProc: InputProc]; Instructions: TYPE = REF InstructionsRecord; <> BaseTypes: TYPE = {number, identifier, vector}; Any: TYPE = REF; -- to instructions as defined internally Vector: TYPE = REF; -- to internal representation of a vector GetInstruction: PROCEDURE [master: Interpress.Master, page: CARDINAL, id: ATOM] RETURNS [ref: Any, type: BaseTypes]; GetProperty: PROCEDURE [id: ATOM, vec: Vector] RETURNS [ref: Any, type: BaseTypes]; Get: PROCEDURE [ix: Cardinal, vec: Vector] RETURNS [ref: Any, type: BaseTypes]; RunGet: PROCEDURE [ix: Cardinal, vec: Vector] RETURNS [ref: Any, type: BaseTypes]; RunSize: PROCEDURE [vec: Vector] RETURNS [Cardinal]; VectorShape: PROCEDURE [vec: Vector] RETURNS [lowerBound: Cardinal, size: INT -- [0..maxCardinal+1] --]; VectorFromAny: PROCEDURE [a: Any] RETURNS [Vector]; CardinalFromAny: PROCEDURE [a: Any] RETURNS [Cardinal]; RealFromAny: PROCEDURE [a: Any] RETURNS [REAL]; IdentifierFromAny: PROCEDURE [a: Any] RETURNS [ATOM]; END. LOG 17Dec86 - castillo.