<> <> <> <> DIRECTORY IO USING [STREAM, Value], Rope USING [ROPE]; TerminalIO: CEDAR DEFINITIONS = BEGIN <<>> <> <> <> <> <<>> <<>> <> <> <> <> <> TOS: PROC [] RETURNS [stream: IO.STREAM]; <> <> <> <> <> TIS: PROC [] RETURNS [stream: IO.STREAM]; <> <> <> <> PutRope: PROC [text: Rope.ROPE]; PutRopes: PROC [t1, t2, t3: Rope.ROPE¬NIL]; PutF: PROC [format: Rope.ROPE ¬ NIL, v1, v2, v3: IO.Value ¬ [null[]]]; PutF1: PROC [format: Rope.ROPE ¬ NIL, value: IO.Value ¬ [null[]]]; PutFL: PROC [format: Rope.ROPE ¬ NIL, list: LIST OF IO.Value]; <> <> <<(one that will not confuse users) clients must follow the convention below:>> <> UserAbort: SIGNAL; TimeOut: SIGNAL; RequestRope: PROC [prompt: Rope.ROPE¬NIL, timeOut: NAT¬0] RETURNS [Rope.ROPE]; <> <> <> <> RequestInt: PROC [prompt: Rope.ROPE ¬ NIL, timeOut: NAT¬0] RETURNS [INT]; <> Confirm: PROC [text: Rope.ROPE, help: Rope.ROPE¬NIL, timeOut: NAT ¬ 0, dontLog: BOOL¬FALSE] RETURNS [BOOL]; <> <> <> RequestSelection: PROC [ header: Rope.ROPE ¬ NIL, choice: LIST OF Rope.ROPE, headerDoc: Rope.ROPE ¬ NIL, choiceDoc: LIST OF Rope.ROPE ¬ NIL, default: NAT ¬ 0, timeOut: NAT ¬ 0, position: REF ¬ NIL, dontLog: BOOL ¬ FALSE ] RETURNS [INT]; <> <> << 0 if selected outside menu or on header-line>> << -1 if timed out>> <> <> <> <> <> <> <> <> <> AddLock: PRIVATE PROC [lock, free: PROC]; <> <> <> <> <> <> <> END.