<<>> <> <> <> <<>> <> <> DIRECTORY Commander USING [Handle], IO USING [STREAM], Rope USING [ROPE]; CommanderOps: CEDAR DEFINITIONS = BEGIN <> ROPE: PRIVATE TYPE = Rope.ROPE; ArgumentVector: TYPE = REF ArgHandleObject; <> <<>> ArgHandleObject: TYPE = RECORD [s: SEQUENCE argc: NAT OF ROPE]; Failed: ERROR [errorMsg: ROPE]; <> <> <> <> <<>> QuoteTreatment: TYPE ~ {stripQuotes, leaveQuotes}; ParseToList: PROC [cmd: Commander.Handle, quoteTreatment: QuoteTreatment ¬ stripQuotes] RETURNS [list: LIST OF ROPE, length: NAT]; <> <> <<>> Parse: PROC [cmd: Commander.Handle, quoteTreatment: QuoteTreatment ¬ stripQuotes] RETURNS [argv: ArgumentVector]; <> <> NumArgs: PROC [cmd: Commander.Handle] RETURNS [INT]; <> <<>> NextArgument: PROC [cmd: Commander.Handle, quoteTreatment: QuoteTreatment ¬ stripQuotes] RETURNS [ROPE]; <> <<>> ArgN: PROC [cmd: Commander.Handle, n: INT, quoteTreatment: QuoteTreatment ¬ stripQuotes] RETURNS [ROPE]; <> <<>> Token: TYPE ~ RECORD [value, literal: ROPE, start: INT]; nullToken: Token ~ [NIL, NIL, 0]; GetCmdToken: PROC [stream: IO.STREAM] RETURNS [Token]; <> <> <> <> <> <<>> <> DoCommand: PROC [commandLine: ROPE, parent: Commander.Handle] RETURNS [result: REF]; <> <<>> DoCommandRope: PROC [commandLine, in: ROPE ¬ NIL, parent: Commander.Handle] RETURNS [out: ROPE, result: REF]; <> <<>> ExecuteCommand: PROC [cmd: Commander.Handle, wholeCommandLine: ROPE] RETURNS [result: REF, msg: ROPE]; <> <> <> <<>> PutProp: PROC [cmd: Commander.Handle, key, val: REF]; GetProp: PROC [cmd: Commander.Handle, key: REF] RETURNS [REF]; <> CreateFromStreams: PROC [in, out, err: IO.STREAM ¬ NIL, parentCommander: Commander.Handle ¬ NIL] RETURNS [cmd: Commander.Handle]; ReadEvalPrintLoop: PROC [cmd: Commander.Handle] RETURNS [hadFailure: BOOL]; <> <> <> <<[in: in, out: out] _ ViewerIO.CreateViewerStreams[name: "CommanderOps"];>> <> <<};>> <<>> <> END.