-- FILE: Parse.mesa
-- Last edited by Ousterhout, January 24, 1984 1:04 pm

-- This file contains definitions for a whole bunch of procedures
-- used to parse commands.

DIRECTORY
    Globals,
    IO,
    Rope;

Parse: CEDAR DEFINITIONS =
BEGIN
OPEN Globals;

Args: PROC[line: Rope.ROPE] RETURNS [Arg];
    -- This procedure chops up a line of text into arguments.  Each
    -- argument is just the information between areas of white space,
    -- with one exception.  If an argument is a switch (it starts with
    -- a "-"), and more than one character follows the "-", then all
    -- characters after the first are moved to a separate argument.

Real: PROC[arg: Arg] RETURNS [parseOK: BOOLEAN, val: REAL];
    -- This procedure turns an argument into a real number.  If
    -- the argument doesn't exist or the number cannot be parsed
    -- then parseOK is FALSE and val is 0.

Int: PROC[arg: Arg] RETURNS [parseOK:  BOOLEAN, val: INT];
    -- This procedure turns an argument into an interger.  If the
    -- argument doesn't exist or the number cannot be parsed then
    -- parseOK is FALSE, and val is 0.

Lookup: PROC[rope: Rope.ROPE,
    table: DESCRIPTOR FOR ARRAY OF Rope.ROPE]
    RETURNS [index: INT];
    -- The rope is looked up in the table to find a matching entry.
    -- The table must be in a monotonic order (e.g. sorted forwards
    -- or backwards).  The return value is the index in the table
    -- of the matching entry.  The rope matches an entry if it
    -- is a unique abbreviation for the entry.  If the rope is an
    -- ambiguous abbreviation, then -1 is returned.  If the rope just
    -- doesn't match anything, -2 is returned.

WhiteSpace: IO.BreakProc;
    -- A replacement for IO.WhiteSpace, which got chopped from
    -- Cedar 5.0.  It returns sepr on SP, TAB, CR, or LF.  Otherwise
    -- it returns other.

END.