<<>> <> <> <> <> <> <> <> <<>> DIRECTORY Menus USING [Menu, MenuLine, MenuProc], Tioga USING [Node], ViewerClasses USING [Viewer]; LineNumber: CEDAR DEFINITIONS ~ { <> Line: TYPE ~ CARD ¬ defaultLine; defaultLine: Line ~ 0; Offset: TYPE ~ INT[-1 .. INT.LAST]; <> noOffset: Offset ~ -1; OffsetRange: TYPE ~ RECORD [first, last: Offset ¬ noOffset]; <> <<[s, e] identifies characters [s..e] of the line.>> <<[o, noOffset] identifies the character o chars into the line.>> <<[noOffset, noOffset] identifies the whole line.>> Position: TYPE ~ INT[0 .. INT.LAST] ¬ defaultPosition; <> <> defaultPosition: Position ~ 0; firstPosition: Position ~ 0; <> lastPosition: Position ~ INT.LAST; <> PositionRange: TYPE ~ RECORD[initialPosition, finalPosition: Position] ¬ [initialPosition: defaultPosition, finalPosition: defaultPosition]; LaO: TYPE ~ RECORD [line: Line, offset: Offset ¬ noOffset]; <> <> LaORange: TYPE ~ RECORD [first, last: LaO]; SelectionId: TYPE ~ { primary, secondary, feedback }; <> EnumProc: TYPE ~ PROCEDURE [ line: Line, positionRange: PositionRange] RETURNS [quit: BOOLEAN ¬ FALSE]; <> ToFeedbackSelection: PROCEDURE [ viewer: ViewerClasses.Viewer, line: Line, offsetRange: OffsetRange ¬ [], skipCommentNodes: BOOLEAN ¬ FALSE] RETURNS []; <> ToPositionRange: PROCEDURE [ branch: Tioga.Node, line: Line, offsetRange: OffsetRange ¬ [], skipCommentNodes: BOOLEAN ¬ FALSE] RETURNS [PositionRange]; <> <> ToSelectionRange: PROC [viewer: ViewerClasses.Viewer, lines: LaORange, skipCommentNodes: BOOL ¬ FALSE, which: SelectionId ¬ feedback]; LinesToPositions: PROC [branch: Tioga.Node, lines: LaORange, skipCommentNodes: BOOL ¬ FALSE] RETURNS [PositionRange]; PositionsToLines: PROC [branch: Tioga.Node, positions: PositionRange, skipCommentNodes: BOOL ¬ FALSE] RETURNS [LaORange]; ToLine: PROCEDURE [ branch: Tioga.Node, position: Position, skipCommentNodes: BOOLEAN ¬ FALSE] RETURNS [LaO]; <> Enumerate: PROCEDURE [ branch: Tioga.Node, enumProc: EnumProc, skipCommentNodes: BOOLEAN ¬ FALSE] RETURNS [quit: BOOLEAN ¬ FALSE]; <> AppendMenuButton: PROCEDURE [ menu: Menus.Menu, line: Menus.MenuLine ¬ 0]; <> MenuProc: Menus.MenuProc; <> }.