<> <> DIRECTORY IO, Rope, ViewerClasses; CharDisplays: CEDAR DEFINITIONS = { ROPE: TYPE = Rope.ROPE; Viewer: TYPE = ViewerClasses.Viewer; DisplayDestroyed: ERROR [cd: CharDisplay]; CharDisplay: TYPE = REF CharDisplayRep; CharDisplayRep: TYPE = RECORD [ class: CharDisplayClass, det: DisplayDetails, name: ROPE, viewer: Viewer _ NIL, fromDisplay: IO.STREAM _ NIL, line, col: INT _ 0, emphs: Emphs, otherInstanceData: REF ANY _ NIL]; DisplayDetails: TYPE = RECORD [ lines: NAT _ 24, columns: NAT _ 80, autoMargins, scrolls: BOOL _ TRUE, autoMarginsVariable, scrollsVariable: BOOL _ FALSE]; CharDisplayClass: TYPE = REF CharDisplayClassRep; CharDisplayClassRep: TYPE = RECORD [ name: ROPE, Init: PROC [cd: CharDisplay, initData: REF ANY], ChangeDetails: PROC [cd: CharDisplay, new: DisplayDetails], DeleteChar: PROC [cd: CharDisplay], TakeChar: PROC [cd: CharDisplay, char: CHAR, insert: BOOL --_ FALSE--], CursorMove: PROC [cd: CharDisplay, line, col: INT, relative: BOOL --_ FALSE--, doLine, doCol: BOOL --_ TRUE--], Line: PROC [cd: CharDisplay, insert: BOOL], <> ClearTo: PROC [cd: CharDisplay, where: Where], ClearAll: PROC [cd: CharDisplay], SetEmph: PROC [cd: CharDisplay, emph: Emph, on: BOOL], Emphasize: PROC [cd: CharDisplay, emph: Emph, on: BOOL], <> SetFont: PROC [cd: CharDisplay, font: ROPE], Beep: PROC [cd: CharDisplay], Flush: PROC [cd: CharDisplay] _ NIL, <> <> Destroyed: PROC [cd: CharDisplay] RETURNS [BOOL] ]; SimplyChange: PROC [cd: CharDisplay, new: DisplayDetails]; Where: TYPE = {EndOfLine, EndOfScreen}; Emph: TYPE = {underline, bold, italic, inverse}; Emphs: TYPE = ARRAY Emph OF BoolDefaultsFalse; BoolDefaultsFalse: TYPE = BOOL _ FALSE; EmphOp: TYPE = {add, subtract, set}; GetClass: PROC [name: ROPE] RETURNS [cdc: CharDisplayClass]; RegClass: PROC [cdc: CharDisplayClass]; Create: PROC [class: CharDisplayClass, name: ROPE _ NIL, det: DisplayDetails _ [], initData: REF ANY _ NIL] RETURNS [cd: CharDisplay]; Split: PROC [l: CharDisplayList, name: ROPE _ NIL] RETURNS [s: CharDisplay]; CharDisplayList: TYPE = LIST OF CharDisplay; }.