<> <> <> <> DIRECTORY PointDefs USING [ScrPt, ObjPt, ObjPtSequence], GriffinEncoding USING [EdgeEncoding,AreaEncoding, Link], StyleDefs USING [StyleHandle], XFormDefs USING[XFMDescriptor], CubicSplines USING [SplineType], Imager USING [Context], Rope USING [ROPE]; ObjectDefs: CEDAR DEFINITIONS = BEGIN ScrPt: TYPE = PointDefs.ScrPt; ObjPt: TYPE = PointDefs.ObjPt; ObjPtSequence: TYPE = PointDefs.ObjPtSequence; StyleHandle: TYPE = StyleDefs.StyleHandle; ObjectType: TYPE = {shape,caption,token, selectToken, menu}; ObjectHandle: TYPE = REF Object; TokenType: TYPE = {CP,open, center, hgrid, vgrid}; tokenSize: INT = 5; View: TYPE = {main,alternate}; MenuOrientation: TYPE = {horizontal, vertical}; ClusterID: TYPE = [0..1023]; OpenCluster: ClusterID = 1; Object: TYPE = RECORD [ link: ObjectHandle _ NIL, backLink: ObjectHandle _ NIL, style: StyleHandle _ NIL, cluster: ClusterID _ 0, view: View _ main, deleted: BOOLEAN _ FALSE, visible: BOOLEAN _ TRUE, selected: BOOLEAN _ FALSE, cull: {inside,outside,partial} _ partial, <> validEncoding: BOOLEAN _ FALSE, tl,br: ScrPt _ [0,0], body: SELECT objectType: ObjectType FROM shape => [ closed: BOOLEAN _ FALSE, trajectory: TrajectoryHandle _ NIL, edgeEncoding: GriffinEncoding.EdgeEncoding _ NIL, areaEncoding: GriffinEncoding.AreaEncoding _ NIL ], caption => [ p0: ObjPt _ [-1,-1], text: Rope.ROPE _ NIL ], token => [ tokenType: TokenType _ CP, p0: ObjPt _ [0,0] ], selectToken => [ p0: ObjPt _ [0,0], located: BOOLEAN _ FALSE, selectedObj: ObjectHandle _ NIL ], menu => [ orientation: MenuOrientation _ vertical, head: REF ANY _ NIL --MenuDefs.MenuItemHandle. There is a loop ], ENDCASE ]; TrajectoryHandle: TYPE = REF Trajectory; Trajectory: TYPE = RECORD [splineType: CubicSplines.SplineType, traj: SELECT type:* FROM linked => [links: REF Link _ NIL], cyclic => [knots: ObjPtSequence _ NIL], ENDCASE ]; Link: TYPE = RECORD [link: REF Link _ NIL, degree: {D0,D1,D2,D3}, knots: ObjPtSequence _ NIL ]; ObjectProc: TYPE = PROCEDURE [obj: ObjectHandle] RETURNS [stop: BOOLEAN _ FALSE]; <> InitObjectFns: PROC; <> GetCurrentView: PROCEDURE RETURNS [View]; SetCurrentView: PROCEDURE[view: View]; Visible: PROCEDURE[object: ObjectHandle] RETURNS[BOOLEAN]; GetNextClusterID: PROCEDURE RETURNS[id: ClusterID]; GetNextObject: PROCEDURE [obj: ObjectHandle] RETURNS [ObjectHandle]; ForAllObjects: PROCEDURE [proc: ObjectProc]; <> ForAllObjectsReversed: PROCEDURE [proc: ObjectProc]; <> ForAllPictureObjects: PROCEDURE [proc: ObjectProc]; ForAllVisibleObjects: PROCEDURE [proc: ObjectProc] ; ForAllVisiblePictureObjects: PROCEDURE [proc: ObjectProc] ; ForAllObjectsThroughObject: PROCEDURE [proc: ObjectProc, lastObj: ObjectHandle]; GetTopPictureObj: PROCEDURE RETURNS [ObjectHandle]; ForAllInBoxDo: PROCEDURE[tl,br: ScrPt,proc: ObjectProc] RETURNS [BOOLEAN]; ForAllPictureObjectsInBoxDo: PROCEDURE[tl,br: ScrPt,proc: ObjectProc] RETURNS [BOOLEAN]; ForAllInCluster: PROCEDURE [id: ClusterID,proc: ObjectProc] ; StartObject: PROCEDURE[type: ObjectType] RETURNS [ObjectHandle]; AppendLink: PROCEDURE[obj: REF shape Object,link: REF Link] RETURNS [GriffinEncoding.Link]; RemoveLastLink: PROCEDURE[obj: REF shape Object] RETURNS [GriffinEncoding.Link]; CopyObject: PROCEDURE [object: ObjectHandle] RETURNS [ObjectHandle]; DeleteObject: PROCEDURE[object: ObjectHandle]RETURNS [next: ObjectHandle]; ExpungeObjects: PROCEDURE; FloatObject: PROCEDURE [object: ObjectHandle]; SinkObject: PROCEDURE [object: ObjectHandle]; FlipUpObject: PROCEDURE [object: ObjectHandle]; FlipDownObject: PROCEDURE [object: ObjectHandle]; AddToken: PROCEDURE[pt: ScrPt,type: TokenType] ; GetTokenBoundingBox: PROC[token: REF token Object] RETURNS [tl,br: ScrPt]; GetSelectTokenBoundingBox: PROC[token: REF selectToken Object] RETURNS [tl,br: ScrPt]; DeleteAllCPs: PROCEDURE; ReadCPs: PROCEDURE RETURNS[array: ObjPtSequence]; SelectObject: PUBLIC PROCEDURE[obj: ObjectHandle] RETURNS [ObjectHandle]; DeSelectObject: PROCEDURE [object: ObjectHandle]; SelectCluster: PROCEDURE[id: ClusterID] RETURNS [ObjectHandle]; DeSelectCluster: PUBLIC PROCEDURE[id: ClusterID]; ReturnSelectToken: PUBLIC PROCEDURE[object: ObjectHandle] RETURNS[REF Object[selectToken]]; ForAllSelectedDo: PUBLIC PROCEDURE[do: ObjectProc]; <> ReplotAllObjects: PROCEDURE[dc: Imager.Context]; ObjectsToInterpress: PROCEDURE[s: Rope.ROPE]; ReplotBox: PROCEDURE [tl,br: ScrPt, dc: Imager.Context]; ReplotBoxFromObject: PROC [tl,br: ScrPt,object: ObjectHandle, dc: Imager.Context]; ReplotFromObject: PROCEDURE[startObj: ObjectHandle, dc: Imager.Context]; PlotObject: PROCEDURE [object: ObjectHandle, dc: Imager.Context]; <<>> <> PlotOneObject: PROCEDURE [object: ObjectHandle]; EraseObject: PROCEDURE [object: ObjectHandle]; PlotLink: PUBLIC PROCEDURE[link: GriffinEncoding.Link, style: StyleHandle]; EraseLink: PUBLIC PROCEDURE[link: GriffinEncoding.Link]; <> <> EncodeObject: PROCEDURE[shape: REF shape Object]; AdjustBoxForStyle: PROC[object: ObjectHandle]; <<>> <> GetObjectHandle: PROCEDURE [pt: ScrPt] RETURNS [ObjectHandle]; GetObjectHandleBetweenObjects: PROCEDURE [pt: ScrPt,topObject,bottomObject: ObjectHandle] RETURNS [ObjectHandle] ; <> MoveObject: PROCEDURE[object: ObjectHandle, from,to: ScrPt]; XFormObject: PROCEDURE[object: ObjectHandle, matrix: XFormDefs.XFMDescriptor]; END.