<> <> <> <<>> DIRECTORY ViewerClasses, Rope USING [ROPE]; ViewerConstraints: CEDAR DEFINITIONS ~ BEGIN ROPE: TYPE ~ Rope.ROPE; Viewer: TYPE ~ ViewerClasses.Viewer; ConstraintClass: TYPE ~ REF ConstraintClassRep; ConstraintClassRep: TYPE; Constraint: TYPE ~ REF ConstraintRep; ConstraintRep: TYPE; Error: ERROR [type: ErrorType, reason: ROPE]; ErrorType: TYPE ~ {invalidConstraintClass, invalidConstraint, constraintConflict}; CreateConstraintClass: PROC [enforce: EnforceProc, nFrom, nTo: NAT, classData: REF _ NIL] RETURNS [class: ConstraintClass]; EnforceProc: TYPE ~ PROC [from, to: Values, classData, instanceData: REF]; EstablishConstraint: PROC [class: ConstraintClass, fetch: InitProc, instanceData: REF _ NIL] RETURNS [constraint: Constraint]; InitProc: TYPE ~ PROC [i: NAT, from: BOOL] RETURNS [e: Edge]; <> <> <<>> EnforceConstraintSystem: PROC [v: Viewer]; <> <<>> PaintConstraintSystem: PROC [v: Viewer, fork: BOOL _ TRUE]; <> <<>> BreakConstraint: PROC [constraint: Constraint]; Suspect: PROC [e: Edge]; <> <<>> WhatNeedsPainting: PROC [v: Viewer, clear: BOOL _ TRUE] RETURNS [l: LIST OF Viewer _ NIL]; <> Values: TYPE ~ REF ValuesRep; ValuesRep: TYPE ~ RECORD [SEQUENCE n: NAT OF LASTINTEGER]; LASTINTEGER: TYPE ~ INTEGER _ INTEGER.LAST; EdgeType: TYPE ~ {left, right, top, bottom}; Edge: TYPE ~ RECORD [v: Viewer, et: EdgeType]; END.