with Source_Instrumenter_Declarations;
use Source_Instrumenter_Declarations;
with Lists;
with Type_Definitions;
use Type_Definitions;
package User_Interface is

    --|  Overview
    --|
    --|  This package performs the user interface function for the source
    --|  instrumenter.  It queries the user for the information neccesary for
    --|  instrumenting a program.  The definitons of possible tracing modes(type and

    type Trace_Modes is (Entry_Exit, Decision_Point, All_Statements, Mixed);
    --|  The possible trace modes.  Mixed mode means that the user specifies
    --|  a trace level for each program unit in a compilation.

    subtype Trace_Level is Trace_Modes range Entry_Exit .. All_Statements;
    --|  The possible trace levels for a program unit.  Mixed mode can only
    --|  be for a compilation unit.  Each program unit must have a trace level

    subtype Unit_Specification is String;
    --|  The string containing the specification unit of a unit used for printing

    procedure Get_Instrumenting_Instructions (Tracing_Mode : out Trace_Modes;
                                              Type_Tracing_Mode : out Boolean);

    --|  Overview
    --|
    --|  This unit gets the instrumenting instructions for a compilation unit.  The
    --|  statement trace level and type tracing are both returned.  These are used
    --|  throughtout the compilation unit.  If the user picks mixed statement
    --|  mode then each program unit in the compilation unit gets its own statement
    --|  trace level.

    procedure Get_Unit_Instructions (Current_Unit : in Unit_Specification;
                                     Is_Package_Spec : in Boolean;
                                     Requested_Trace_Level : out Trace_Level;
                                     Scope_Name : in String;
                                     List_Of_Variables : out String_List);

    --|  Overview
    --|
    --|  This procedure will get the instrumenting instructions for an individual
    --|  unit.  This procedure is called only when type tracing is being
    --|  done or statment trace mode is mixed.  In these cases, This unit is
    --|  called to get either the variables to trace, the trace level for the
    --|  unit, or both.

end User_Interface;