DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ S T

⟦b16086715⟧ TextFile

    Length: 483569 (0x760f1)
    Types: TextFile
    Names: »SJM_HELP«

Derivation

└─⟦5f3412b64⟧ Bits:30000745 8mm tape, Rational 1000, ENVIRONMENT 12_6_5 TOOLS 
    └─ ⟦91c658230⟧ »DATA« 
        └─⟦f6fec0485⟧ 
            └─⟦this⟧ 
└─⟦d10a02448⟧ Bits:30000409 8mm tape, Rational 1000, ENVIRONMENT, D_12_7_3
    └─ ⟦fc9b38f02⟧ »DATA« 
        └─⟦f95d63c89⟧ 
            └─⟦this⟧ 

TextFile


 @node !Commands.Job

 Package Job provides commands for controlling jobs associated with user
 sessions. The commands in this package can be used to manage job priority
 (foreground or background) and job connections to sessions (attached or
 detached). Thus, commands in this package change the class and kind of
 user-initiated jobs.

 As with most commands in the world !Commands, commands from package Job
 are intended for interactive use, although they can be used
 programmatically within Ada procedures. For more information about jobs,
 see also:

 *  The Key Concepts of this book for information about changing the
    behavior of a job, such as how it responds to errors

 *  Package Program for operations for programmatic job control, such as
    spawning new jobs from existing jobs

 *  Package Remote for operations for executing jobs across R1000s on the
    same network

 *  The System Management Utilities (SMU) book, package Scheduler, for
    information about managing the way the Environment allocates resources
    to jobs


 RESOURCES IN PACKAGE JOB

 The commands in package Job fall into several functional groups. Types and
 constants are not included in this list.

 Putting a job in the background:          Disconnect, Interrupt

 Bringing a job into the foreground:       Connect

 Temporarily stopping a job:               Disable

 Restarting a stopped job:                 Enable

 Terminating a job:                        Kill

 Displaying a message at the end of a job: Set_Termination_Message


 KEY CONCEPTS FOR PACKAGE JOB

 A job consists of one or more commands that are executed together. For
 example, executing multiple commands in a command window constitutes a
 single job.

 A job is initiated when commands are executed through a key combination or
 a command window. Jobs also can be initiated programmatically from other
 jobs using commands in package Program (see package Program in this book).

 When a job is created, the Environment assigns it a job identification
 number (job number). The Environment assigns job numbers uniquely for each
 session. The range is 0 through 255.

 For further information about job characteristics and job behavior, see
 the Key Concepts of this book. The remainder of this package introduction
 contains information about using commands in this package to control job
 priority and to control the connection between jobs and sessions.


 USING COMMANDS IN PACKAGE JOB

 Using commands in package Job, you can interactively manage the priority
 (percent of processor time) assigned to user-initiated jobs. You can
 also manipulate the job connection to your session.

 You can use commands in package Job to manage jobs that were started under
 any of the sessions associated with your username. However, to manipulate
 a job that belongs to another user, you must have operator capability. See
 the System Management Utilities (SMU) book, package Operator, for
 information about operator capability.

 The following subsections contain information about:

 *  Placing a job in the background

 *  Temporarily stopping a job

 *  Terminating a job

 *  Obtaining information about jobs


 Placing a Job in the Background

 Normally, user-initiated jobs are run in the foreground as attached jobs
 (or connected jobs). Because foreground jobs are typically highly
 interactive and require fast response, they are allocated the majority of
 system resources. An attached job maintains control of your session,
 preventing you from entering other commands until the job finishes.

 However, you can cause user-initiated jobs to execute in the background,
 making them detached jobs (or disconnected jobs). Background jobs are
 allocated the remaining resources after foreground jobs are handled.
 Detaching a job and placing it in the background allows you to enter other
 commands while the job continues executing.

 Four commands control whether user-initiated jobs execute as background
 jobs or foreground jobs:

 *  Interrupt

 *  Disconnect

 *  !Commands.Command.Spawn

 *  Connect

 The Interrupt procedure is generally bound to a key combination 
 ([Control][G] under the standard key bindings). This procedure enables 
 you to detach from the current job while the job is running.

 The Disconnect procedure performs the same operation as the Interrupt
 procedure, except that it should be used programmatically within Ada
 procedures. For example, calling the Disconnect procedure as the first
 statement in a program causes that program to always run in the
 background. You can also use the Disconnect procedure to specify that a
 program begin in the foreground and then run in the background after
 certain operations have been performed.

 The !Commands.Command.Spawn procedure allows you to execute the contents
 of a command window in the background from the start. Thus, it essentially
 performs the same operation as promoting the job in the command window
 with !Commands.Common.Promote and then using the Interrupt procedure.

 The Connect procedure can be used to reconnect to a disconnected job.
 Reconnecting to a job makes the session unavailable for other operations
 and causes the job to run in the foreground.


 Temporarily Stopping a Job

 Package Job provides two commands for temporarily stopping and restarting
 userinitiated jobs:

 *  Disable

 *  Enable

 The Disable procedure can be used to temporarily stop a job from
 executing. A disabled job is not terminated, but it is prevented from
 executing by the Environment. A disabled job has been rendered
 ineligible for processor time.

 The Enable procedure can be used to restart a disabled job. Enabling a job
 allows the job to resume executing at the discretion of the scheduler.


 Terminating a Job

 To permanently stop a job from executing, use the Kill procedure. The Kill
 procedure causes the job to be terminated.

 When you kill a job, all files declared as Current_Output, Current_Input,
 or Current_Error, or files on the current-output, current-input, or
 current-error stacks, are closed (see package Log for more information
 about these stacks). All other files are abandoned, and temporary files are
 deleted.


 Obtaining Information about Jobs

 To obtain information about the jobs currently active on the system, you
 can use the What.Users or What.Jobs procedure.

 The What.Users procedure generates a static list of active jobs and
 information about those jobs, including:

 *  User and session under which the job was started

 *  Job number

 *  Job state (Run, Idle, Wait, Disabled, or Queued)

 *  Elapsed time since the job began

 *  Name of the job

 By default, this list is sent to an Environment output window.

 The What.Jobs procedure generates a dynamic listing of jobs active on the
 system. The window produced by this procedure is continually monitored by
 the system and updated periodically (as determined by the Interval
 parameter). In addition to the information displayed by the What.Users
 procedure, for each active job the What.Jobs procedure lists:

 *  Total amount of CPU time the job has used since it began executing

 *  Percentage of CPU time over the last interval (as determined by the
    Interval parameter) that was consumed by the job

 *  Number of pages of memory the job is currently using

 *  Number of times the job has had to wait for the disk since it began

 Note that you can control your jobs directly through the What.Jobs
 display, using commands from package !Commands.Common (generally bound to
 keys). In particular, you can disable, enable, or kill jobs that belong to
 your username. You can also connect to a previously disconnected job. Note
 that the What.Jobs display is updated at specified intervals until it is
 released or abandoned. See package What for more information about the
 What.Jobs display.

 To obtain even more information about active jobs, you can use the
 !Commands.System_Maintenance'Spec_View.Units.Show_Jobs or the
 !Commands.System_Maintenance'Spec_View.Units.Show_Job_Names procedure.
     


 @node !Commands.Job.Connect

 procedure Connect (The_Job : Id := 0);

 
 DESCRIPTION

 Connects the current session to the specified job.

 This procedure connects (attaches) the current session to a previously
 disconnected (detached) job. Connecting the session to a job causes the
 job to run in the foreground. As a result, connecting the session to a
 job effectively suspends input from the keyboard until the job
 completes. However, connected jobs can read keyboard input with
 facilities in package Window_Io (see the Data and Device Input/Output
 (DIO) book). Connected jobs also can bring windows onto the screen.

 To interactively disconnect a session from a job, use the Interrupt
 procedure. To programmatically set a job to disconnect from the session at
 a specific point, use the Disconnect procedure.


 PARAMETERS

 The_Job : Id := 0;

 Specifies the number of the job to be connected. The job must be associated
 with the current session. The default, 0, connects you to the most
 recently interrupted job for the current session.


 EXAMPLES

 Assume that a user called MAT has two jobs associated with his session
 S_1, as shown in the following What.Users display:

   User Status on June 30, 1991 at 04:22:52 PM

     User    Line  Job   S      Time                  Job Name
   ========  ====  ====  ====  =========  ==========================
    MAT        21        RUN    53:04.96  session'(S_1)
                    232  IDLE   00:02.45  !USERS.MAT % COMPILATION.MAKE
                    218  IDLE   02:37:01  !USERS.MAT % WHAT.LOCKS

 The following command reconnects the terminal on which MAT is working to
 job 232 in the current session:

   Job.Connect (The_Job => 232);
 

 REFERENCES

 procedure Disconnect
 procedure Interrupt



 @node !Commands.Job.Disable

 procedure Disable (The_Job     : Id;
                    The_Session : String := "");
   

 DESCRIPTION

 Temporarily stops execution of the specified job.

 This procedure temporarily stops the specified job. The job is not
 terminated but is prevented from executing by the Environment. The job
 identifier 0 can be used to disable all jobs for the specified session. To
 disable jobs associated with sessions other than your current session, you
 must supply the pathname of the session associated with the job (for
 example, !Users.Mat.S_2).

 To restart a disabled job, use the Enable procedure.

 To terminate a job, use the Kill procedure.


 PARAMETERS

 The_Job : Id;

 Specifies the job number for the job to be disabled. A value of 0 stops all
 jobs for the specified session, provided that session belongs to the
 current user; the value 0 cannot be used to stop all jobs for a session
 that belongs to another user.


 The_Session : String := "";

 Specifies the session with which the job is associated. Special names,
 wildcards, and context characters can be used if they resolve to a single
 object. The name supplied to this parameter is resolved with respect to
 the current library. The name must resolve to a session object--for
 example, !Users.Robinson.S_1. The default value, the null string, specifies
 the current session.


 RESTRICTIONS

 To disable jobs that belong to another user, you must have read access to
 that user's home world or be operating in privileged mode (belong to the
 access-control group Privileged and have enabled privileges).


 ERRORS

 The name specified in the Session parameter is resolved with respect to the
 current library. If a simple name is provided and you are not in the
 library that contains the session object, an error such as the following
 is produced:

   "s_1" is not an accessible session
                    

 EXAMPLES

 Assume that a user named MAT has two jobs associated with his current
 session, S_1, as shown in the following What.Users display:

   User Status on June 30, 1991 at 04:22:52 PM

     User    Line  Job    S      Time                  Job Name
   ========  ====  ===   ====  =========  ==========================
    MAT        21        RUN    53:04.96  session'(S_1)
                   232   IDLE   00:02.45  !USERS.MAT % COMPILATION.MAKE
                   218   IDLE   02:37:01  !USERS.MAT % WHAT.LOCKS

 The following command temporarily stops job 232 in the current session:

   Job.Disable (The_Job => 232, The_Session => "");
   

 REFERENCES

 procedure Enable
 procedure Kill



 @node !Commands.Job.Disconnect

 procedure Disconnect (The_Job : Id := 0);
   

 DESCRIPTION

 Disconnects the current session from the specified job.

 This procedure disconnects (detaches) the current session from the
 specified job, causing that job to run in the background. Control of the
 keyboard is returned to the user.

 Note that the position of the cursor is cached at the beginning of a job.
 Thus, a job that requires knowledge of cursor position can be interrupted,
 leaving the user free to perform other commands. The same applies for
 resolution of any special names.

 This procedure is the programmatic equivalent to the Interrupt procedure;
 it should be used within an Ada procedure or from a command window. If you
 want to bind a key so that you can interactively disconnect from the
 current job, use the Interrupt procedure.

 To reconnect a session to a disconnected job, use the Connect procedure.


 PARAMETERS

 The_Job : Id := 0;

 Specifies the job number for a job associated with the current session. The
 default, 0, disconnects from the current job.


 RESTRICTIONS

 This procedure is not intended to be bound to a key. Use the Interrupt
 procedure instead.


 EXAMPLES

 Example 1

 The Disconnect procedure can be used to force any program to run in the
 background, even if it started to run in the foreground. For example, a
 program of the following form always runs in the background, even if it is
 executed from a command window:

   procedure Main is
   begin
       Job.Disconnect;
       ...
   end Main;

 This program performs basically the same as if a program had been executed
 from a command window and then was interrupted by the Interrupt procedure.

 Example 2

 The Disconnect procedure also can be used to force a program to run in the
 background after running in the foreground. For example, a program of the
 following form begins in the foreground and then runs in the background
 after gathering statistical information to be processed:

   procedure Main is
   begin
       ... -- gather statistics
       Job.Disconnect;
       ... -- process information
   end Main;


 REFERENCES

 procedure Connect
 procedure Interrupt



 @node !Commands.Job.Enable

 procedure Enable (The_Job     : Id;
                   The_Session : String := "");
   

 DESCRIPTION

 Restarts the specified disabled job.

 This procedure restarts execution of the specified job. The job identifier 0
 can be used to enable all jobs for the specified session. To enable jobs
 associated with sessions other than your current session, you must supply
 the pathname of the session associated with the job (for example,
 !Users.Mat.S_2).

 To temporarily stop a job, use the Disable procedure.


 PARAMETERS

 The_Job : Id;

 Specifies the job number for the job to be enabled. A value of 0 stops all
 jobs for the specified session, provided that session belongs to the
 current user; the value 0 cannot be used to enable all jobs for a session
 that belongs to another user.


 The_Session : String := "";

 Specifies the session with which the job is associated. Special names,
 wildcards, and context characters can be used if they resolve to a single
 object. The name supplied to this parameter is resolved with respect to
 the current library. The name must resolve to a session object--for
 example, !Users.Robinson.S_1. The default value, the null string, specifies
 the current session.


 RESTRICTIONS

 To enable jobs that belong to another user, you must have read access to
 that user's home world or be operating in privileged mode (belong to the
 accesscontrol group Privileged and have enabled privileges).


 EXAMPLES

 Assume that user MAT has two jobs associated with his current session,
 S_1, as shown in the following What.Users display:

   User Status on June 30, 1991 at 04:22:52 PM

   User     Line  Job   S      Time                  Job Name
   ======   ====  ===  ====  =========  ==============================
   MAT        21       RUN    53:04.96  session'(S_1)
                  232  IDLE   00:02.45  !USERS.MAT % COMPILATION.MAKE
                  213  IDLE   02:37:01  !USERS.MAT WHAT.LOCKS

 The following command restarts job 232 associated with MAT's current
 session:

   Job.Enable (The_Job => 232, The_Session => "");
                   

 REFERENCES

 procedure Disable



 @node !Commands.Job.Id

 subtype Id is Machine.Job_Id;
   

 DESCRIPTION

 Defines a subtype that identifies jobs.

 This subtype defines the integers used to identify jobs. These
 identification numbers are assigned by the Environment to each job when
 the job begins. The range is 0 through 255.

 To determine the ID for a particular job, use What.Users or What.Jobs to
 list the jobs currently active on the system.



 @node !Commands.Job.Interrupt

 procedure Interrupt;
 

 DESCRIPTION

 Disconnects the current session from the current job.

 This procedure disconnects the current session from the current job,
 causing that job to run in the background. Control of the keyboard is
 returned to the user.

 Note that the position of the cursor is cached at the beginning of a job.
 Thus, a job that requires knowledge of cursor position can be interrupted,
 leaving the user free to perform other commands. The same applies to the
 resolution of any special names.

 This procedure is the interactive equivalent to the Disconnect procedure;
 it can be bound to a key so that you can interactively disconnect from the
 current job. To programmatically disconnect from a specified job, use the
 Disconnect procedure.

 To reconnect to a disconnected job, use the Connect procedure.


 RESTRICTIONS

 This procedure should be bound to a key. Use the Disconnect procedure from
 programs or command windows.


 REFERENCES

 procedure Connect
 procedure Disconnect



 @node !Commands.Job.Kill

 procedure Kill (The_Job     : Id;
                 The_Session : String := "");
 

 DESCRIPTION

 Terminates the specified job.

 This procedure terminates execution of the specified job. All files declared
 as Current_Output, Current_Input, or Current_Error, or files on the
 current-output, current-input, or current-error stacks, are closed (see
 package Log for more information about these stacks). All other files are
 abandoned, and temporary files are deleted.

 To temporarily stop execution of a job, use the Disable procedure.


 PARAMETERS

 The_Job : Id;

 Specifies the job number of the job to be killed.

 Unlike other commands in this package, the Kill command does not accept
 the value 0 to specify all jobs in the current user's session.


 The_Session : String := "";

 Specifies the session with which the job is associated. Special names,
 wildcards, and context characters can be used if they resolve to a single
 object. The name supplied to this parameter is resolved with respect to
 the current library. The name must resolve to a session object--for
 example, !Users.Robinson.S_1. The default value, the null string, specifies
 the current session.


 RESTRICTIONS

 To kill a job that belongs to another user, you must have read access to
 that user's home world or be operating in privileged mode (belong to the
 access-control group Privileged and have enabled privileges).

 To kill certain jobs (such as core-editor jobs), you may need operator
 capability. For information about operator capability, see package
 Operator in the System Management Utilities (SMU) book.


 EXAMPLES

 Assume that a user named MAT has two jobs associated with his current
 session, S_1, as shown in the following What.Users display:

   User Status on June 30, 1991 at 04:22:52 PM

     User    Line  Job    S      Time                  Job Name
   ========  ====  ===  ====  =========  ==============================
   MAT        21        RUN    53:04.96  session'(S_1)
                   232  IDLE   00:02.45  !USERS.MAT % COMPILATION.MAKE
                   218  IDLE   02:37:01  !USERS.MAT % WHAT.JOBS

 The following command kills job 218 in the current session:

   Job.Kill (The_Job => 218, The_Session => "");
                 

 REFERENCES

 procedure Disable
 package Log



 @node !Commands.Job.Set_Termination_Message

 procedure Set_Termination_Message (S : String := "");
   

 DESCRIPTION

 Defines the message that is to be displayed when the job terminates.

 This message is sent to Standard_Error, which is the Environment message
 window.


 PARAMETERS

 S : String := "";

 Specifies the message to be displayed. The default is no termination
 message.


 EXAMPLES

 The following command defines a termination message:

   Job.Set_Termination_Message (S => "Terminated with no errors");
                                                                           
 When placed inside a program called Check_Sum and executed by user RJB,
 the command produces the following termination message in the message
 window:

   !USERS.RJB % Check_Sum terminated: Terminated with no errors



 @node !Commands.Log

 Package Log provides procedures for manipulating the logs that are
 generated by many Environment-defined commands. The procedures in this
 package can be used to write logs to text files where they can be saved for
 future reference. They can also be used to copy and filter existing log
 files. User-written commands can use the Environment's log facilities by
 writing output with any of the Put_Line procedures defined in this package.

 Note that the procedures in package Log are intended only for manipulating
 log output. For information about controlling other types of job output,
 see Chapter 2, "Job Characteristics and Behavior."


 RESOURCES IN PACKAGE LOG

 The commands in package Log fall into several functional groups. Types and
 constants are not included in this list.

 Setting the log file:                     Set_Error, Set_Log, Set_Output

 Copying and filtering existing log files: Copy, Filter, Filter_Errors,
                                           Summarize

 Managing Current_Input files:             Pop_Input, Reset_Input, Set_Input

 Managing Current_Error files:             Pop_Error, Reset_Error, Set_Error

 Managing Current_Output files:            Pop_Output, Reset_Log,
                                           Reset_Output, Set_Log, Set_Output

 Writing messages into log files:          Put_Condition, Put_Errors,
                                           Put_Job_Messages, Put_Line,
                                           Put_Line_Generic,
                                           Put_System_Messages

 Forcing buffered output into log files:   Flush

 Saving log files:                         Save

 Identifying a message kind's prefix:      Image


 KEY CONCEPTS FOR PACKAGE LOG

 Many commands report progress and error information in log messages. When
 you execute a command, the Environment collects all of the log messages
 from that command into a single log, which it then writes to a log file.
 For example, the following log was generated by the Compilation.Promote
 procedure:


   91/06/07 14:31:26 ::: [Compilation.Promote ("<S>", ALL_PARTS, CODED,
   91/06/07 14:31:27 ... "<WORLDS>", FALSE, PERSEVERE);].
   91/06/07 14:31:27 ::: !USERS.JAF.PLAYGROUND.FACTORIAL'SPEC is already
   91/06/07 14:31:27 ... INSTALLED.
   91/06/07 14:31:27 ::: !USERS.JAF.PLAYGROUND.FACTORIAL'BODY is already
   91/06/07 14:31:28 ... INSTALLED.
   91/06/07 14:31:28 ::: !USERS.JAF.PLAYGROUND.FACTORIAL'SPEC is already 
   91/06/07 14:31:28 ... CODED.
   91/06/07 14:31:33 --- Messages generated while promoting !USERS.JAF.
   91/06/07 14:31:33 ... PLAYGROUND.FACTORIAL'BODY to CODED.
   91/06/07 14:31:34 ---      33  instructions for subprog FACTORIAL.
   91/06/07 14:31:34 ---      83  instructions for segment 4427009.
   91/06/07 14:31:34 +++ !USERS.JAF.PLAYGROUND.FACTORIAL'BODY has been 
   91/06/07 14:31:34 ... CODED.
   91/06/07 14:31:34 :::  2 units were already INSTALLED.
   91/06/07 14:31:34 :::  1 unit was already CODED.
   91/06/07 14:31:34 +++  1 unit was CODED.
   91/06/07 14:31:34 ::: [End of Compilation.Promote Command].

   Figure 1   Log Messages Produced by the Compilation.Promote Command
   

 Log messages differ from other types of job output in the type of
 information they contain and in how they are generated:

 *  Log messages generally provide progress, error, notes, and other
    information about the execution of a command. In contrast, job reports
    provide information specifically requested by the user, such as a list
    of jobs currently active on the system.

 *  Log messages are subject to the default characteristics you set in
    session and job response profiles. Specifically, you can set:

    -  The kinds of messages that are to be included in the log

    -  The log file to which the log is to be written

    -  The prefixes to precede each line in the log

    -  The width (number of columns) allowed for each line in the log

    Other types of output are controlled completely by the command
    generating the output.

 The remainder of this "Key Concepts" section discusses the various
 characteristics of log messages and the commands in this package that
 affect those characteristics. For information about other types of job
 output, see Chapter 2, "Job Characteristics and Behavior."


 Message Kinds

 Commands may produce a number of different kinds of log messages, where
 each kind of message conveys a characteristic kind of information and is
 preceded by a characteristic set of symbols. Environment-defined commands
 write nine kinds of messages. Three additional message kinds are provided
 for user-defined purposes. All twelve message kinds are described in Table
 1. For further information about message kinds, see type Profile.Msg_Kind
 in this book.


                        Table 1    Log Message Kinds
              -----------------------------------------------------
             |             |      |                                |
             |Kind         |Symbol|Description                     |
             |             |      |                                |
              ----------------------------------------------------- 
             |             |      |                                |
             |At_Msg       |@@@   |Has no predefined meaning. At   |
             |             |      |messages are not used by the    |
             |             |      |Environment but can be used by  |
             |             |      |users to insert messages into   |
             |             |      |the log files for user-defined  |
             |             |      |purposes.                       |
              ----------------------------------------------------- 
             |             |      |                                |
             |Auxiliary_Msg|:::   |Indicates a general message.    |
             |             |      |Auxiliary messages are pro-     |
             |             |      |vided by the Environment as     |
             |             |      |commentary on the execution of  |
             |             |      |commands.                       |
              ----------------------------------------------------- 
             |             |      |                                |
             |Debug_Msg    |???   |Indicates a debugging message.  |
             |             |      |Debug messages (also called     |
             |             |      |diagnostic messages) are        |
             |             |      |provided by the Environment as  |
             |             |      |an aid in debugging commands.   |
              -----------------------------------------------------
             |             |      |                                |
             |Dollar_Msg   |$$$   |Has no predefined meaning.      |
             |             |      |Dollar messages are not used by |
             |             |      |the Environment but can be used |
             |             |      |by users to insert messages into|
             |             |      |the log files for user-defined  |
             |             |      |purposes.                       |
              -----------------------------------------------------
             |             |      |                                |
             |Error_Msg    |***   |Indicates a serious error. Error|
             |             |      |messages indicate that the      |
             |             |      |operation has found some        |
             |             |      |condition that prevents it from |
             |             |      |completing successfully. This   |
             |             |      |condition usually causes the    |
             |             |      |error reaction to be taken by   |
             |             |      |the command. An error message   |
             |             |      |may be accompanied by a negative|
             |             |      |message.                        |
              -----------------------------------------------------
             |             |      |                                |
             |Exception_Msg|%%%   |Indicates that an exception was |
             |             |      |raised during the execution of  |
             |             |      |the command. Exception messages |
             |             |      |indicate that the operation     |
             |             |      |has found some condition that   |
             |             |      |prevents it from continuing.    |
             |             |      |This condition usually causes   |
             |             |      |the error reaction to be taken  |
             |             |      |by the command. An exception    |
             |             |      |message may be accompanied by   |
             |             |      |a negative message.             |
              ----------------------------------------------------- 
             |             |      |                                |
             |Negative_Msg |++*   |Indicates negative progress.    |
             |             |      |Negative messages are provided  |
             |             |      |by the Environment when         |
             |             |      |operations do not complete suc- |
             |             |      |cessfully. A negative message is|
             |             |      |usually accompanied by an error |
             |             |      |or exception message indicating |
             |             |      |the condition that prevented    |
             |             |      |the operation from completing   |
             |             |      |successfully.                   |
              ----------------------------------------------------- 
             |             |      |                                |
             |Note_Msg     |---   |A general message. Note messages|
             |             |      |are provided by the Environment |
             |             |      |as commentary on the execution  |
             |             |      |of commands.                    |
              ----------------------------------------------------- 
             |             |      |                                |
             |Position_Msg |>>>   |Indicates the position in some  |
             |             |      |object where an event, ex-      |
             |             |      |plained by another message, has |
             |             |      |occurred. Position messages     |
             |             |      |are provided by the Environment |
             |             |      |as an aid in locating errors and|
             |             |      |other events in large objects.  |
              ----------------------------------------------------- 
             |             |      |                                |
             |Positive_Msg |+++   |Indicates positive progress.    |
             |             |      |Positive messages are provided  |
             |             |      |by the Environment when         |
             |             |      |operations complete             |
             |             |      |successfully.                   |
              ----------------------------------------------------- 
             |             |      |                                |
             |Sharp_Msg    |###   |Has no predefined meaning. Sharp|
             |             |      |messages are not used by the    |
             |             |      |Environment but can be used by  |
             |             |      |users to insert messages into   |
             |             |      |the log files for user-defined  |
             |             |      |purposes.                       |
              ----------------------------------------------------- 
             |             |      |                                |
             |Warning_Msg  |!!!   |Warns of some minor error.      |
             |             |      |Warning messages indicate that  |
             |             |      |the operation has found some    |
             |             |      |condition that is not quite     |
             |             |      |correct but is not serious      |
             |             |      |enough to prevent the operation |
             |             |      |from continuing.                |
              ----------------------------------------------------- 


 Log Filters

 When you execute a command, you can cause the command to filter the
 messages so that only certain kinds of messages are written into the log
 file. For example, you may not be interested in auxiliary or note messages
 but want to see all error and negative messages.

 You can set the log filter through one of several mechanisms:

 *  To set the default log filter for all commands executed under a
    particular session, you can set the Profile.Log_Kind_Msgs session
    switches for that session. Setting these switches sets the session
    response profile for the current session (see "Default Log
    Characteristics," page nn).

 *  To set the default log filter for multiple commands in a single job, you
    can call one of the following procedures from within the job (for
    example, from the same command window as other commands):

    -  Log.Set_Log

    -  Profile.Include

    -  Profile.Set_Filter

    These procedures set the log-filter component of the job response profile
    of the current job. The Set_Log procedure also sets the log-file
    component. For further information, see "Default Log Characteristics,"
    page nn.

 *  To set the log filter for a single command, use the Response parameter
    of that command (see Parameter-Value Conventions in the Reference
    Summary (RS) book).

 You can also have the Environment filter existing log files while copying
 them, so that only certain kinds of messages are included in the new file.
 Filtering an existing log file is especially useful when you want to
 compare the file to another file or a template. For further information
 about filtering existing log files, see "Copying and Filtering Existing Log
 Files," page nn. For information about comparing log files and using
 templates, see the Library Management (LM) book, package File_Utilities.


 Log Files

 Logs are ultimately written into one of three destinations:

 *  Standard_Error (the message window)

 *  Standard_Output (an Environment output window)

 *  A text file

 Logs can be sent directly to Standard_Output or Standard_Error, or they
 can be sent to any of the three destinations through one of the following
 redirectable files:

 *  Current_Output, which, by default, redirects output to Standard_Output

 *  Current_Error, which, by default, redirects output to Standard_Error

 Although Current_Output and Current_Error are referred to as "files," they
 are really pointers to one of the three destinations listed above. For
 example, if the log file is set to be Current_Output (the system default), 
 you can then redirects the log by changing the file pointed to by 
 Current_Output, as shown in Figure 2.
                            

                         STEP 1               STEP 2
                      YOU SET THE           YOU REDIRECT
                     LOG FILE TO BE:      CURRENT_OUTPUT OR
                                          CURRENT_ERROR TO:
                   |- Standard_Output
                   |
                   |- Standard_Error
   Log messages -> |
                   |- Current_Output  -> |- Text file
                   |                     |
                   |- Current_Error   -> |- Standard_Output
                                         |
                                         |- Standard_Error
                                         |
                                         |- Current_Output  ->
                                         |
                                         |- Current_Error   ->
   
   Figure 2   Directing Log Messages to a Destination

 
 You can change the log file through one of several mechanisms:

 *  To set the default log file for all commands executed under a particular
    session, you can set the Profile.Log_File session switch for that
    session. Setting this switch sets the log-file component of the session
    response profile for the current session (see "Default Log
    Characteristics," below).

 *  To set the default log file for multiple commands in a single job, you
    can call one of the following procedures from within the job (for
    example, from the same command window as other commands):

    -  Log.Set_Output

    -  Log.Set_Log

    -  Log.Set_Error

    -  !Tools.Profile.Set_Log_File

    These procedures set the log-file component of the job response profile
    of the current job. Procedures from package Log also set Current_Output
    or Current_Error. Additionally, the Set_Log procedure sets the
    log-filter for the current job. For further information, see "Setting
    the Default Log File for a Job," page nn.

 *  To set the log file for a single command, you can use the Response
    parameter of that command (see Parameter-Value Conventions in the 
    Reference Summary (RS) book).

 For further information about directing log files and other types of job
 output, see Chapter 2, "Job Characteristics and Behavior." Chapter 2 also
 contains information about redirecting Current_Output or Current_Error
 without changing the log file.


 Default Log Characteristics

 Log characteristics for Environment commands are determined by the job
 response profile for the job in which the command is executing. The job
 response profile gets it values from the session response profile for the
 current session, which gets its values from the system default profile.

 Most Enviroment commands have a Response parameter through which you can
 override the log characteristics set by the job response profile; however,
 even commands that do not have a Response parameter are subject to the
 response profile for the current job.

 The following subsections describe the default log characteristics used by
 Environment commands and how they are set.

 For further information about response characteristics and profiles, see
 Chapter 2, "Job Characteristics and Behavior," or package Profile in this
 book. For information about using the Response parameter to set the log
 characteristics for a single command, see Parameter-Value Conventions in
 the Reference Summary (RS) book.


 System Default Log Characteristics

 The system default profile defines the log characteristics that are
 delivered as part of the standard Environment. Environment-defined commands
 use these log characteristics unless you explicitly have set other log
 characteristics for the current session, current job, or the command
 itself (using the Response parameter of the command).

 In particular, the system default log characteristics cause commands to:

 *  Write log output to Current_Output (as indicated by the value
    Use_Output)

 *  Include all log messages except debug messages (denoted by the prefix
    ???) in the log file

 *  Precede each line of the log with the date, time, and symbol indicating
    the message kind

 *  Allow a width of 77 columns for each line in the log

 These system default characteristics are shown in Figure 1 at the
 beginning of this package introduction.


 Default Log Characteristics for a Session

 The default log characteristics for a session are defined in the session
 response profile for that session. The log characteristics in a session
 response profile override those in the system default profile.
 Environment-defined commands use these log characteristics unless you
 explicitly set other characteristics for the current job or the command
 itself.

 The initial values of the session response profile for your default
 session, S_1, are copied from the system default profile. Subsequent
 sessions copy their response-profile values from the session response
 profile for session S_1.

 You can set the component values of a session response profile through
 session switches with the prefix "Profile." Specifically, the following
 session switches determine the log characteristics in the session
 response profile:

 Log_At_Sign_Msgs             Log_Auxiliary_Msgs
 Log_Diagnostic_Msgs          Log_Dollar_Msgs
 Log_Error_Msgs               Log_Exception_Msgs
 Log_File                     Log_Line_Width
 Log_Negative_Msgs            Log_Note_Msgs
 Log_Prefix_1                 Log_Prefix_2
 Log_Prefix_3                 Log_Position_Msgs
 Log_Positive_Msgs            Log_Sharp_Msgs
 Log_Warning_Msgs

 Session response profiles persist across logins, lasting until you change
 any of the relevant session-switch values.

 For further information about these switches, including the values
 accepted by each, see Session Switches in this book or the online help for
 each switch (obtained by selecting the desired switch and executing the
 !Commands.Common.Explain command, which is generally bound to a key or
 key combination).

 For information about editing these switches directly, see Session
 Switches in this book. For information about changing these switch values
 programmatically, see package Profile, also in this book.


 Default Log Characteristics for a Job

 The default log characteristics for all the commands in a job are defined
 in the job response profile for that job. The log characteristics in the
 job response profile for the current job override those in both the system
 default and session response profiles. Environment-defined commands use the
 log characteristics in the job response profile for the current job
 unless you specify other characteristics through the command's Response
 parameter. Environment-defined commands that do not have a Response
 parameter always use the log characteristics set in the job response
 profile for the current job.

 The initial values of a job response profile are copied from the session
 response profile for the current session; however, you can set other log
 characteristics in the job response profile for the current job. Setting
 the default log characteristics for a job allows you to:

 *  Override one or more log characteristics from the session response
    profile for the duration of the current job

 *  Set the log file to be a specific text file rather than an
    Environment-defined "file" (such as Current_Output)

 *  Change the log characteristics for several commands in the same job
    through a single operation

 To set the job response profile for the current job, you can call any of
 the procedures listed in Table 2 from the same command window as (and
 preceding the commands in) the job you want to affect.
                               

  Table 2   Commands for Setting the Default Log Characteristics for a Job
             -------------------------------------------------------- 
            |              |                                         |
            |Characteristic|Commands for Setting This Characteristic |
            |              |                                         |
             -------------------------------------------------------- 
            |              |                                         |
            |Log file      |Log.Set_Log, Log.Set_Output,             |
            |              |Log.Set_Error, Profile.Set_Log_File      |
             -------------------------------------------------------- 
            |              |                                         |
            |Log filter    |Log.Set_Log, Profile.Set_Filter          |
            |              |                                         |
             -------------------------------------------------------- 
            |              |                                         |
            |Log prefixes  |Profile.Set_Prefixes                     |
            |              |                                         |
             -------------------------------------------------------- 
            |              |                                         |
            |Log width     |Profile.Set_Width                        |
            |              |                                         |
             -------------------------------------------------------- 


 These procedures can also be called from within your programs to set
 specific log characteristics that will always be used when that command
 executes. Setting specific log characteristics is especially useful for
 servers that may be started by different users but that should always
 log information using the same format and filter.

 For further information about setting the log file, see "Setting the
 Default Log File for a Job," page nn. For further information about
 setting other log characteristics in the job response profile for the
 current job, see the introduction to package Profile in this book.


 USING COMMANDS IN PACKAGE LOG

 The following subsections contain information about using commands in
 package Log interactively to:

 *  Set the default log file for the current job

 *  Copy and filter existing log files

 They also contain information about calling procedures in package Log from
 your applications to:

 *  Manage stacks of current output, error, and input files

 *  Write messages to the log file


 Setting the Default Log File for a Job

 You can set the default log file for all the commands in a single job by
 calling one of three procedures from package Log:

 *  Set_Error

 *  Set_Output

 *  Set_Log

 Each of these procedures performs two operations:

 *  Sets the log file for the current job to be one of two redirectable
    "files":

    -  Set_Output and Set_Log set the log file to be Current_Output.

    -  Set_Error sets the log file to be Current_Error.

 *  Redirects Current_Output or Current_Error to be the specified file,
    pushing the file onto a stack of Current_Output or Current_Error
    files (see "Managing Current Output, Error, and Input Files," page
    nn).

 Procedures in package Log differ from the Profile.Set_Log_File procedure,
 which sets only the log file, and procedures from package !Io.Io, which set
 only Current_Output or Current_Error.

 By setting both the log file and the Current_Output (or Current_Error) file,
 procedures in package Log ensure that any other type of job output sent
 to Current_Output is redirected along with the log file. Procedures in
 package Log are especially useful when:

 *  You are executing a command such as Library.Resolve that produces both
    log messages and a job report or display that is not part of the log
    and you want to redirect both types of output.

 *  You are executing several commands in a single command window and want
    to redirect the logs for all the commands.

 *  You are executing a command that does not have a Response parameter and
    you want to redirect the log.

 Note that if you want to set the log file for a single command, you can use
 the Response parameter of that command (see Parameter-Value Conventions in
 the Reference Summary (RS) book).


 Copying and Filtering Existing Log Files

 Sometimes you may want to keep a series of logs from similar operations so
 that you can compare progress and error information. You may want to
 compare these logs to each other or construct a template against which to
 compare all the logs. In either case, ensuring that the logs include the
 same set of message kinds makes the comparisons easier.

 Specifying that the Environment use the same filter when creating the logs
 is one way to ensure that the logs contain the same set of messages.
 Alternatively, you can have the Environment write the full set of log
 messages into a text file and then copy the log into another file,
 instructing the Environment to filter the messages while copying. Writing
 the complete log into a file allows you to create several additional files,
 using different filters.

 You can use the following commands from package Log to copy text files that
 contain log messages and filter the messages in the process:

 *  Copy

 *  Filter

 *  Filter_Errors

 *  Summarize

 The filtered copy can be directed to another text file or to Current_Output.
 Note that if the original log does not contain a particular kind of
 message, the new log will not contain that kind of message, even if that
 message kind is included in the specified filter.

 The Copy, Filter, Filter_Errors, and Summarize procedures differ only in
 how you specify the log filter to be used. The following subsections
 discuss how to:

 *  Copy a predefined set of message kinds

 *  Copy an arbitrary set of message kinds


 Copying a Predefined Set of Message Kinds

 The Copy command allows you to use an existing filter when copying a log
 file. By default, the Copy command uses the log-filter specified in the job
 response profile for the current job (by default, the filter specified
 through the Profile.Log_Kind_Msgs session switches for the current
 session). However, you can specify any value of type Profile.Log_Filter,
 including those constants defined in package Profile. These constants are
 described in Table 3, beginning with the filter that includes the fewest
 kinds of messages.

 For example, assume that you have a file called Test_6_3_91, which contains
 the full set of log messages from the execution of an application you are
 developing.
                   

                          Table 3    Predefined Filters
             -------------------------------------------------------- 
            |               |                                        |
            |Filter         |Description                             |
             -------------------------------------------------------- 
            |               |                                        |
            |Profile.Quiet  |Specifies that no messages are to be    |
            |               |included in the log file.               |
             -------------------------------------------------------- 
            |               |                                        |
            |Profile.Summary|Specifies that only positive (+++) and  |
            |               |negative (++*) messages summarizing     |
            |               |command progress are to be included in  |
            |               |the log file.                           |
             -------------------------------------------------------- 
            |               |                                        |
            |Profile.Errors |Specifies that only messages indicating |
            |               |various degrees of errors are to be     |
            |               |included in the log file. Specifically, |
            |               |this filter includes negative (++*),    |
            |               |warning (!!!), error (***), and         |
            |               |exception (%%%) messages.               |
             -------------------------------------------------------- 
            |               |                                        |
            |Profile.Terse  |Specifies that the minimal set of       |
            |               |messages that includes progress, error, |
            |               |and user-defined messages be included   |
            |               |in the log file. Specifically, this     |
            |               |filter includes at (@@@), dollar ($$$), |
            |               |error (***), exception (%%%), negative  |
            |               |(++*), position (>>>), positive (+++),  |
            |               |sharp (###), and warning (!!!)          |
            |               |messages. This filter does not include  |
            |               |auciliary (:::), debug (???), or note   |
            |               |(---) messages.                         |
             -------------------------------------------------------- 
            |               |                                        |
            |Profile.Full   |Specifies that all messages except      |
            |               |debug messages (denoted by ???) are to  |
            |               |be included in the log file.            |
             -------------------------------------------------------- 


 Suppose that you want to copy only any negative, warning, error, or
 exception messages from that file into a new file called Test_6_3_91_Errors.
 To do so, you could execute the following command:

   Log.Copy (Log_File    => "Test_6_3_91_Full",
             Destination => "Test_6_3_91_Errors",
             Filter      => Profile.Errors);


 Copying an Arbitrary Set of Message Kinds

 The Filter, Filter_Errors, and Summarize procedures perform the same
 operation as the Copy procedure; however, they allow you to specify the 
 filter as a set of Boolean values, one for each message kind. They are 
 especially useful if none of the predefined filters contain the set of 
 message kinds you want to include in the new log file.

 For example, assume that you want to copy any negative, warning, error,
 exception, or position messages from a log file called called
 Test_6_3_91_Full into a new file called Test_6_3_91_Errors. The
 Profile.Errors filter includes the first four of these message kinds, but it
 does not include position messages indicating where the error may have
 occurred. For this reason, you cannot use the Copy command discussed
 above. Instead, you could use the following command, which allows you to
 specify any set of message kinds:

   Log.Filter (Log_File    => "Test_6_3_91_Full",
               Destination => "Test_6_3_91_Errors",
               Auxiliaries => False,
               Diagnostics => False,
               Notes       => False,
               Positives   => False,
               Negatives   => True,
               Positions   => True,
               Warnings    => True,
               Errors      => True,
               Exceptions  => True,
               Sharps      => False,
               Dollars     => False,
               Ats         => False);

 The Filter, Filter_Errors, and Summarize procedures differ only in their
 default values. By default:

 *  The Filter procedure includes all message kinds.

 *  The Filter_Errors procedure includes auxiliary (:::), debug (???),
    negative (++*), warning (!!!), and error (***) messages.

 *  The Summarize procedure includes auxiliary (:::), debug (???), positive
    (+++), and negative (++*) messages.


 Managing Current Output, Error, and Input Files

 As described in "Log Files," page nn, you can set the log file to be one of
 two redirectable files:

 *  Current_Output, which, by default, redirects output to Standard_Output
    (an Environment I/O window)

 *  Current_Error, which, by default, redirects output to Standard_Error
    (the message window)

 Similarly, you can read input from a redirectable file:

 *  Current_Input, which, by default, obtains input from Standard_Input (an
    Environment I/O window)

 Although Current_Output, Current_Error, and Current_Input are referred to
 as "files," they are actually pointers to a specific file. Implementing these
 files as pointers allows you to redirect input and output easily. It also
 allows the Environment to offer a stack mechanism for input, output, and
 error files. These stacks are maintained for a particular job and can be
 managed programmatically from within the job using procedures from package
 Log or package !Io.Io.

 Commands from package Log that control stacks of output, error, and input
 files are listed in Table 4. The column under which the procedure is listed
 indicates the stack affected by that procedure; the row indicates the
 operation the procedure performs on the stack.
                 

  Table 4    Commands from Package Log for Input, Error, and Output Stacks
          ---------------------------------------------------------- 
         |               |              |             |             |
         |Operation      |Current_Output|Current_Error|Current_Input|
         |               |              |             |             |
          ---------------------------------------------------------- 
         |               |              |             |             |
         |Push a file    |Set_Output,   |Set_Error    |Set_Input    |
         |               |Set_Log       |             |             |
          ---------------------------------------------------------- 
         |               |              |             |             |
         |Pop a file     |Pop_Output    |Pop_Error    |Pop_Input    |
         |               |              |             |             |
          ---------------------------------------------------------- 
         |               |              |             |             |
         |Reset the stack|Reset_Output, |Reset_Error  |Reset_Input  |
         |               |Reset_Log     |             |             |
         |               |              |             |             |
          ---------------------------------------------------------- 


 The following subsections discuss the implications of setting, popping,
 and resetting files.


 Pushing Files onto the Stacks

 Pushing a file onto the top of the stack sets that file to be the "current"
 file to be used. For example, the following command sets Messages_1_91 to
 be the Current_Output file, causing all output sent to Current_Output to
 be written in that file:

   Log.Set_Output (To_Be => "Messages_1_91");

 When the job completes, Messages_1_91 and any other files on the stack are
 closed and Current_Output is reset to the system default, Standard_Output.


 Popping Files from the Stacks

 Popping a file removes it from the stack, making the previous file the new
 top of the stack and the "current" file.

 Popping a file from the stack does not close the file. You can continue
 writing to the file by setting it to be the current file again, using the
 corresponding Set procedure. In this case, the new output is appended to
 the original output. Note, however, that if you do not set the file back
 on the stack or explicitly close the file, the contents may be lost when
 the job completes.

 For example, assume that there are three files on the stack of output files:
 Output_1 on top, followed by Output_2 and Output_3. The following
 command pops Output_1 off the stack:

   Log.Pop_Output;

 The resulting stack contains only two files: Output_2 and Output_3. Output
 sent to Current_Output is now written to Output_2. Note that Output_1 is
 still open and will not be closed automatically at the end of the job. If
 you do not explicitly close Output_1 before the end of the job, the
 contents of the file may be lost.


 Resetting the Stacks

 Resetting a stack removes the current file from the top of the stack,
 making the previous file the new top of the stack and the "current" file.

 Unlike when you pop a file, when you reset the stack, the removed file is
 closed, ensuring that the contents are saved. If you attempt to write to
 this file after it has been closed--for example, by setting it as the
 current file again--the original contents of the file will be overwritten.


 An Example of Stack Manipulation

 The following procedure starts a server that logs off sessions that have
 been idle for a specified amount of time. Notice that it calls the
 Log.Set_Output procedure to set Current_Output to be a specified file and to
 set the log file to be Current_Output. It then calls Io.Set_Error to set
 Current_Error to also be Current_Output. This combination ensures that all
 output that can be redirected is sent to a single destination--in this
 case a text file called !Machine.Error_Logs.Logoff_Idle_Users_Server_Log.

   with Io;
   with Library;
   with Log;
   with Pipe;
   with Debug_Tools;

   procedure Logoff_Server
                 (Maximum_Idle_Time_In_Minutes : in Natural := 60;
                  Polling_Interval_In_Minutes  : in Natural := 5) is

   begin
       Log.Set_Output
               ("!MACHINE.ERROR_LOGS.LOGOFF_IDLE_USERS_SERVER_LOG");

       Io.Set_Error (Io.Current_Output);
       -- Above procedures set log file to be Current_Output,
       -- redirect Current_Output to text file,
       -- and redirect Current_Error to Current_Output.
       -- This combination ensures that all redirectable output goes
       -- to the specified file.

       Operator.Enable_Privileges (Enable => True);

       if not Operator.Privileged_Mode then
           Log.Put_Line
              (Message  => "Could not enable privileges.  " &
                             "The Idle Users Logoff server was not
                             activated",
               Kind     => Profile.Error_Msg,
               Response => Profile.Verbose);
           Log.Save (Response => Profile.Verbose);
           -- Flushes all output to log and saves log.
           Io.Reset_Output;
           Io.Reset_Error;
           -- Closes output and error files and removes the files
           -- from the stack, making the previous file the new top
           -- of stack before returning to calling job.
       end if;

       --
       -- Parts of the application are omitted from this example.
       --

   exception
       when Terminate_Server =>
           Log.Save (Response => Profile.Verbose);
           Pipe.Close (Pipe => Pipe_To_Server);
           Library.Destroy
              (Existing  => Idle_Users.Context & "." &
                            Name_Of_Pipe_To_Server,
               Threshold => 1,
               Limit     => "<DIRECTORIES>",
               Response  => "<NIL>");
           Io.Reset_Output;
           Io.Reset_Error;

       when others =>
           Log.Put_Line
              (Message  => "Encountered an unexpected exception " &
                           "in the Idle_Users.Logoff_Server on " &
                           Time_Image (For_Time => Calendar.Clock) &
                           " (Exception => " &
                           Debug_Tools.Get_Exception_Name
                                (Fully_Qualify => True,
                                Machine_Info => True) & ")",
               Kind     => Profile.Exception_Msg,
               Kind     => Profile.Exception_Msg,
               Response => Profile.Verbose);
           Log.Save (Response => Profile.Verbose);
           Pipe.Close (Pipe => Pipe_To_Server);
           Library.Destroy
              (Existing  => Idle_Users.Context & "." &
                            Name_Of_Pipe_To_Server,
               Threshold => 1,
               Limit     => "<DIRECTORIES>",
               Response  => "<NIL>");
           Io.Reset_Output;
           Io.Reset_Error;

   end Logoff_Server;


 Writing Messages into Log Files

 You can use the Environment's log-file facilities for your applications by
 calling procedures from package Log that write additional information into
 the log files. These procedures fall into two groups--procedures that
 write:

 *  Additional Environment-generated messages, such as status and error
    information

 *  User-defined messages

 These two groups of procedures are discussed in the following subsections.


 Writing Additional Environment Messages

 Package Log provides four procedures that write information that is
 generated by the Environment but not automatically included in the logs:

 *  Put_Condition writes information of type Simple_Status.Condition.

 *  Put_Errors writes information of type Error_Messages.Error.

 *  Put_Job_Messages writes the contents of the system message log for the
    specified job.

 *  Put_System_Messages write the contents of the system message log for
    the current job.

 The Put_System_Messages and Put_Job_Messages procedures are useful if you
 want additional information about the progress of a specific job.

 The Put_Errors and Put_Condition procedures are useful in combination with
 certain Environment commands, such as the Program.Create_Job procedure,
 that return values of the types indicated above.

 For example, the following program creates a separate job under which to
 start each program named in a file (File_1) and then reports the status of
 each job creation using the Put_Condition procedure:

   with Io, Program, Simple_Status;
   procedure Start_Servers is
       File_1 : Io.File_Type;
       Job    : Program.Job_Id;
       Status : Simple_Status.Condition;
   begin
       Io.Open (File_1, Io.Infile, "Programs_To_Start");
       while not Io.End_Of_File (File_1) loop
           Program.Create_Job
               (S => Io.Get_Line (File_1),
                  Job => Job, Status => Status);
           if Program.Started_Successfully (Status) then
               Io.Put_Line ("Started Job " &
                            Program.Job_Id'Image (Job));
           else
               Log.Put_Condition (Status);
           end if;
       end loop;
       Io.Close (File_1);
   end Start_Servers;


 Writing User-Defined Messages

 Package Profile provides a family of Put_Line procedures that allow
 additional messages, beyond those produced by the Environment, to be
 placed in the log file. In addition to allowing you to specify the message
 text, these procedures allow you to assign a message kind (of type
 Profile.Msg_Kind) to the message.

 You can specify any message kind; however, it is recommended that you
 assign message kinds in a manner consistent with the Environment's use of
 message kinds (see "Message Kinds," page nn). Several message kinds also
 are reserved for user-defined purposes:

 *  At messages (Profile.At_Msg) are denoted by @@@.

 *  Dollar messages (Profile.Dollar_Msg) are denoted by $$$.

 *  Sharp messages (Profile.Sharp_Msg) are denoted by ###.

 Be aware that when a message is written into the log file, only that kind
 of message is included in the log filter specified through the Response
 parameter of the Put_Line procedure. Thus, if your messages are dollar
 messages, you should ensure that the log filter includes dollar messages
 by setting the Response parameter accordingly.

 The various Put_Line procedures differ in how you specify the message to
 be written. In general, you have two options:

 *  You can specify the exact message to be written.

 *  You can specify that the message dynamically reference up to two
    objects.

 These methods are discussed below.


 Specifying the Exact Message to Be Written

 For most purposes, you can use a Put_Line procedure that writes the string
 exactly as you have indicated. For example, most Environment commands call
 this Put_Line procedure to write a log message reporting the final status
 of the command.

 Assume that Operation_Name is a variable of type String that contains the
 name of the procedure being executed, such as:

   Operation_Name : String := "Compilation.Promote";

 The following command writes a completion message, including the name of
 the operation that has completed, into the log file:

   Log.Put_Line (Message  => "[" & Operation_Name &
                             " has completed -- No errors detected]",
                 Kind     => Profile.Auxiliary_Msg,
                 Response => "<PROFILE>");

 The resulting log message appears in Figure 3.
                  

   91/08/20 15:59:50 ::: [Compilation.Promote has completed -- No errors
   91/08/20 15:59:50 ... detected]
   
   Figure 3   Sample Log Message Resulting from Put_Line


 This message is written into the log file specified in the Response
 parameter of the Put_Line procedure. Using the log file specified in the job
 response profile for the current job (indicated by the special value
 "<PROFILE>") ensures that all the log messages for a single job are
 written into the same log file.

 Note that the message is also subject to the log filter, prefixes, and width
 specified in the Response parameter of the Put_Line procedure.

 
 Dynamically Referencing Objects in Messages

 Other Put_Line procedures, including the Put_Line_Generic procedure, allow
 you to dynamically reference up to two Environment objects. The procedures
 compute the names of the specified objects and insert those names into the
 message text. You can also embed symbols in the message text to specify
 how the names are to be computed and where they are to be inserted. For
 more information, see the reference entries for procedures Put_Line and
 Put_Line_Generic.
 


 @node !Commands.Log.Copy

 procedure Copy
            (Log_File    : Name               := "<IMAGE>";
             Destination : Name               := "";
             Filter      : Profile.Log_Filter := Profile.Filter);
 

 DESCRIPTION

 Copies the specified log file into a new file, using the specified log filter.

 This procedure both copies the log from one file into another and filters
 the log messages in the process. Only those messages whose kinds are
 included in the specified filter are included in the new log file. By
 default, the procedure uses the filter that is specified in the job response
 profile for the current job.

 The new log filter is sent to the location specified in the Destination
 parameter. By default, the new log file is sent to Current_Output, which
 is, by default, an Environment output window.

 To copy a log and filter its contents in the process, you can also use the
 Filter, Filter_Errors, and Summarize procedures. Whereas the Copy
 procedure allows you to specify an existing filter, these procedures allow
 you to specify a Boolean value for each message kind, indicating whether
 messages of that kind are to be included in the new log file.


 PARAMETERS

 Log_File : Name := "<IMAGE>";

 Specifies the log file to be copied. The default is the log file in the
 current image.


 Destination : Name := "";

 Specifies the destination for the new log file. The default (the null
 string) sends the log file to Current_Output, which is, by default, an
 Environment output window.


 Filter : Profile.Log_Filter := Profile.Filter;

 Specifies the filter to use when copying the log file. The filter can define
 any subset of messages in the log. Only those messages whose kind is
 included in the filter are copied into the new log file. This parameter
 accepts any value of type Profile.Log_Filter, including those constants
 defined in package Profile:

 Errors               Specifies that only negative (++*), warning (!!!),
                      error (***), and exception (%%%) messages are to be
                      included in the log file.

 Full                 Specifies that all messages except debug messages
                      (denoted by ???) are to be included in the log file.

 Quiet                Specifies that no messages are to be included in the
                      log file.

 Summary              Specifies that only positive (+++) and negative (++*)
                      messages are to be included in the log file.

 Terse                Specifies that the following kinds of messages are to
                      be included in the log file: at (@@@), dollar ($$$),
                      error (***), exception (%%%), negative (++*),
                      position (>>>), positive (+++), sharp (###), and
                      warning (!!!).


 REFERENCES

 procedure Filter
 procedure Filter_Errors
 procedure Summarize
 package Profile
 constant Profile.Errors
 constant Profile.Full
 constant Profile.Quiet
 constant Profile.Summary
 constant Profile.Terse



 @node !Commands.Log.Filter

 procedure Filter (Log_File    : Name    := "<IMAGE>"
                   Destination : Name    := "";
                   Auxiliaries : Boolean := True;
                   Diagnostics : Boolean := True;
                   Notes       : Boolean := True;
                   Positives   : Boolean := True;
                   Negatives   : Boolean := True;
                   Positions   : Boolean := True;
                   Warnings    : Boolean := True;
                   Errors      : Boolean := True;
                   Exceptions  : Boolean := True;
                   Sharps      : Boolean := True;
                   Dollars     : Boolean := True;
                   Ats         : Boolean := True);
             
                   
 DESCRIPTION

 Filters the specified log file based on the specified parameters and then
 writes the result into the specified destination.

 This procedure both copies the log from one file into another and filters
 the log messages in the process. Only those message kinds for which the
 value is True are included in the new log file. By default, all messages
 are included in the new log file.

 The new log filter is written into the location specified in the Destination
 parameter. By default, the new log file is sent to Current_Output, which
 is, by default, an Environment output window.

 This procedure is renamed by the Filter_Errors and Summarize procedures.
 To copy a log and filter its contents in the process, you can also use the
 Copy procedure. Whereas the Filter procedure allows you to specify a
 Boolean value for each message kind, the Copy procedure allows you to
 specify an existing filter.


 PARAMETERS

 Log_File : Name := "<IMAGE>";

 Specifies the log file to be copied and filtered. The default is the log file
 in the current image.


 Destination : Name := "";

 Specifies the destination for the new log file. The default (the null
 string) sends the log file to Current_Output, which is, by default, an
 Environment output window.


 Auxiliaries : Boolean := True;

 Specifies whether to write auxiliary messages (denoted by :::) into the
 destination file. The default, True, is to write them.


 Diagnostics : Boolean := True;

 Specifies whether to write diagnostic or debug messages (denoted by ???)
 into the destination file. The default, True, is to write them.


 Notes : Boolean := True;

 Specifies whether to write note messages (denoted by ---) into the
 destination file. The default, True, is to write them.


 Positives : Boolean := True;

 Specifies whether to write positive messages (denoted by +++) into the
 destination file. The default, True, is to write them.


 Negatives : Boolean := True;

 Specifies whether to write negative messages (denoted by ++*) into the
 destination file. The default, True, is to write them.


 Positions : Boolean := True;

 Specifies whether to write position messages (denoted by >>>) into the
 destination file. The default, True, is to write them.


 Warnings : Boolean := True;

 Specifies whether to write warning messages (denoted by !!!) into the
 destination file. The default, True, is to write them.


 Errors : Boolean := True;

 Specifies whether to write error messages (denoted by ***) into the
 destination file. The default, True, is to write them.


 Exceptions : Boolean := True;

 Specifies whether to write exception messages (denoted by %%%) into the
 destination file. The default, True, is to write them.


 Sharps : Boolean := True;

 Specifies whether to write sharp messages (denoted by ###) into the
 destination file. The default, True, is to write them.


 Dollars : Boolean := True;

 Specifies whether to write dollar messages (denoted by $$$) into the
 destination file. The default, True, is to write them.


 Ats : Boolean := True;

 Specifies whether to write at messages (denoted by @@@) into the
 destination file. The default, True, is to write them.
                                                                          

 REFERENCES

 procedure Copy
 procedure Filter_Errors
 procedure Summarize
 type Profile.Msg_Kind



 @node !Commands.Log.Filter_Errors

 procedure Filter_Errors (Log_File    : Name    := "<IMAGE>"
                          Destination : Name    := "";
                          Auxiliaries : Boolean := True;
                          Diagnostics : Boolean := True;
                          Notes       : Boolean := False;
                          Positives   : Boolean := False;
                          Negatives   : Boolean := True;
                          Positions   : Boolean := False;
                          Warnings    : Boolean := True;
                          Errors      : Boolean := True;
                          Exceptions  : Boolean := False;
                          Sharps      : Boolean := False;
                          Dollars     : Boolean := False;
                          Ats         : Boolean := False)
                                             renames Filter;
                   

 DESCRIPTION

 Filters the specified log file based on the specified parameters and then
 writes the result into the specified destination.

 This procedure both copies the log from one file into another and filters
 the log messages in the process. Only those message kinds for which the
 value is True are included in the new log file. By default, only auxiliary
 (:::), diagnostic (???), negative (++*), warning (!!!), and error (***)
 messages are included in the new log file.

 The new log filter is written into the location specified in the Destination
 parameter. By default, the new log file is sent to Current_Output, which
 is, by default, an Environment output window.

 This procedure renames the Filter procedure. The Summarize procedure also
 renames the Filter procedure, using different default parameter values.
 To copy a log and filter its contents in the process, you can also use the
 Copy procedure. Whereas the Filter_Errors procedure allows you to
 specify a Boolean value for each message kind, the Copy procedure allows
 you to specify an existing filter.


 PARAMETERS

 Log_File : Name := "<IMAGE>";

 Specifies the log file to be copied and filtered. The default is the log file
 in the current image.


 Destination : Name := "";

 Specifies the destination for the new log file. The default (the null
 string) sends the log file to Current_Output, which is, by default, an
 Environment output window.


 Auxiliaries : Boolean := True;

 Specifies whether to write auxiliary messages (denoted by :::) into the
 destination file. The default, True, is to write them.


 Diagnostics : Boolean := True;

 Specifies whether to write diagnostic or debug messages (denoted by ???)
 into the destination file. The default, True, is to write them.


 Notes : Boolean := False;

 Specifies whether to write note messages (denoted by ---) into the
 destination file. The default, False, is not to write them.


 Positives : Boolean := False;

 Specifies whether to write positive messages (denoted by +++) into the
 destination file. The default, False, is not to write them.


 Negatives : Boolean := True;

 Specifies whether to write negative messages (denoted by ++*) into the
 destination file. The default, True, is to write them.


 Positions : Boolean := False;

 Specifies whether to write position messages (denoted by >>>) into the
 destination file. The default, False, is not to write them.


 Warnings : Boolean := True;

 Specifies whether to write warning messages (denoted by !!!) into the
 destination file. The default, True, is to write them.


 Errors : Boolean := True;

 Specifies whether to write error messages (denoted by ***) into the
 destination file. The default, True, is to write them.


 Exceptions : Boolean := False;

 Specifies whether to write exception messages (denoted by %%%) into the
 destination file. The default, False, is not to write them.


 Sharps : Boolean := False;

 Specifies whether to write sharp messages (denoted by ###) into the
 destination file. The default, False, is not to write them.


 Dollars : Boolean := False;

 Specifies whether to write dollar messages (denoted by $$$) into the
 destination file. The default, False, is not to write them.


 Ats : Boolean := False;

 Specifies whether to write at messages (denoted by @@@) into the
 destination file. The default, False, is not to write them.


 REFERENCES

 procedure Copy
 procedure Filter
 procedure Summarize
 type Profile.Msg_Kind



 @node !Commands.Log.Flush

 procedure Flush
           (Response : Profile.Response_Profile := Profile.Get);
 

 DESCRIPTION

 Forces any buffered output into the log file.

 This procedure forces all output from the buffer into the log file. This
 procedure is useful when synchronizing interactive activities to make
 certain that all buffered output has been displayed.

 Note that this procedure need only be used when writing output to a text
 file. Note also that, if the output file is currently displayed, you may
 have to refresh the image of that file to see the flushed output.

 To force all buffered output into the log file and save the file without
 closing it, use the Save procedure.


 PARAMETERS

 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES

 procedure Save
 function Profile.Get



 @node !Commands.Log.Image

 function Image (Kind : Profile.Msg_Kind) return String;
           

 DESCRIPTION

 Returns the three-character prefix associated with the specified kind of log
 message.

 Environment commands produce various kinds of messages as they execute.
 The various kinds of messages are represented by the enumerations of type
 Profile.Msg_Kind. Each kind of message also can be referenced using the
 three-character string prefix associated with it. The Image function
 essentially "translates" enumerations of type Profile.Msg_Kind into the
 corresponding string.


 PARAMETERS

 Kind : Profile.Msg_Kind;

 Specifies the kind of log message.


 return String;

 Returns the three-character string prefix associated with the specified kind
 of log message.


 EXAMPLES

 Assume that you want to know the three-character string prefix associated
 with debugging messages. To find out, you can use the following command:

   Io.Echo (Log.Image (Profile.Debug_Msg));

 As a result, the desired prefix is displayed in the message window:

   ???


 REFERENCES

 package Profile
 type Profile.Msg_Kind



 @node !Commands.Log.Name

 subtype Name is String;
   

 DESCRIPTION

 Defines a name for a log file.

 Strings of this type can use all of the special names, wildcards, context
 prefixes, and attributes that are defined for naming objects in the
 Environment. Strings of this type, however, must be unambiguous; each can
 resolve only to a single object. See Parameter-Value Conventions in the
 Reference Summary (RS) book for more information about naming objects.


 REFERENCES

 Reference Summary (RS), Parameter-Value Conventions



 @node !Commands.Log.Pop_Error

 procedure Pop_Error renames Io.Pop_Error;
 

 DESCRIPTION

 Pops the current-error file off the stack of error files.

 This procedure pops the current value of Current_Error off the stack of
 error files. The current-error file is not closed and will not be closed
 automatically at the end of the job (only files still on the stack are
 closed at the end of the job). Thus, the current-error file can be used
 again with another Set_Error procedure.

 The top of the stack and Current_Error are reset to be the previous file on
 the stack.

 To close the current-error file and pop it off the stack, use the
 Reset_Error procedure.

 To push a file onto the stack of error files, use the Set_Error procedure or
 the Io.Set_Error procedure. Note that the Log.Set_Error and Io.Set_Error
 procedures are not identical. See Set_Error for details.

 For more information about the stack mechanism for managing I/O files, see
 the introduction to this package.


 REFERENCES

 procedure Reset_Error
 procedure Set_Error
 Text Input/Output (TIO), procedure Io.Pop_Error



 @node !Commands.Log.Pop_Input

 procedure Pop_Input renames Io.Pop_Input;
 

 DESCRIPTION

 Pops the current-input file off the stack of input files.

 This procedure pops the current value of Current_Input off the stack of
 input files. The current-input file is not closed and will not be closed
 automatically at the end of the job (only files still on the stack are
 closed at the end of the job). Thus, the current-input file can be used
 again with another Set_Input procedure.

 The top of the stack and Current_Input are reset to be the previous file on
 the stack.

 To close the current-input file and pop it off the stack, use the
 Reset_Input procedure.

 To push a file onto the stack of input files, use the Set_Input procedure.

 For more information about the stack mechanism for managing I/O files, see
 the introduction to this package.


 REFERENCES

 procedure Reset_Input
 procedure Set_Input
 Text Input/Output (TIO), procedure Io.Pop_Input



 @node !Commands.Log.Pop_Output

 procedure Pop_Output renames Io.Pop_Output;
 

 DESCRIPTION

 Pops the current-output file off the stack of output files.

 This procedure pops the current value of Current_Output off the stack of
 output files. The current-output file is not closed and will not be closed
 automatically at the end of the job (only files still on the stack are 
 closed at the end of the job). Thus, the current-output file can be used 
 again with another Set_Output procedure.

 The top of the stack and Current_Output are reset to be the previous file
 on the stack.

 To close the current output file and pop it off the stack, use the
 Reset_Output procedure.

 To push a file onto the stack of error files, use the Set_Output procedure
 or the Io.Set_Output procedure. Note that the Log.Set_Output and
 Io.Set_Output procedures are not identical. See Set_Output for details.

 For more information about the stack mechanism for managing I/O files, see
 the introduction to this package.


 REFERENCES

 procedure Reset_Output
 procedure Set_Output
 Text Input/Output (TIO), procedure Io.Pop_Output
 Text Input/Output (TIO), procedure Io.Set_Output



 @node !Commands.Log.Put_Condition

 procedure Put_Condition
           (Status   : Simple_Status.Condition;
            Response : Profile.Response_Profile := Profile.Get);


 DESCRIPTION

 Converts the value of the Status parameter to a textual representation 
 and writes it into the log file.

 Many commands in the Environment return a value of type
 !Tools.Simple_Status.Condition as an indication of whether the operation
 succeeded or failed. This procedure enables the user to write the results
 returned by a Status parameter into the log file for the current job.


 PARAMETERS

 Status : Simple_Status.Condition;

 Specifies the status value that is to be written into the log file.


 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES

 function Profile.Get
 Programming Tools (PT), package Simple_Status



 @node !Commands.Log.Put_Errors

 procedure Put_Errors
           (Errors   : Error_Messages.Errors;
            Response : Profile.Response_Profile := Profile.Get);
 

 DESCRIPTION

 Enters the specified error messages into the log file.


 PARAMETERS

 Errors : Error_Messages.Errors;

 Specifies the error messages to be entered into the log file.


 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES

 package Profile
 function Profile.Get



 @node !Commands.Log.Put_Job_Messages

 procedure Put_Job_Messages
           (For_Job  : Machine.Job_Id;
            Response : Profile.Response_Profile := Profile.Get);
            

 DESCRIPTION

 Formats and writes the contents of the system message log for the specified
 job into the log file for the current job.

 To write the contents of the system message log for the current job into
 the log file, use the Put_System_Messages procedure.


 PARAMETERS

 For_Job : Machine.Job_Id;

 Specifies the job number for the job whose messages are to be displayed.


 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES

 procedure Put_System_Messages
 function Profile.Get



 @node !Commands.Log.Put_Line

 procedure Put_Line
        (Message  : String;
         Kind     : Profile.Msg_Kind         := Profile.Note_Msg;
         Response : Profile.Response_Profile := Profile.Get);
            

 DESCRIPTION

 Writes the specified message into the log file for the current job.

 This procedure allows additional messages (beyond those written by the
 Environment) to be placed in the log file. These additional messages can
 indicate progress within a sequence of commands or status information
 about the job.

 By default, the specified message is entered into the log as a general note
 message (denoted by the "---" prefix). You can use the Kind parameter to
 specify a different kind of message. Note that messages specified by the
 Put_Line procedure are subject to the filter specified as part of the
 Response parameter. Consequently, if you define the message to be a warning
 message and the Response parameter causes warning messages to be filtered
 out of the log, then the message specified by this procedure is also
 filtered out.

 If the specified message is to be written into the log, it is formatted
 using the log prefixes and line width specified as part of the Response
 parameter.


 PARAMETERS

 Message : String;

 Specifies the message to be placed in the log file.


 Kind : Profile.Msg_Kind := Profile.Note_Msg;

 Specifies the kind of message to be placed into the log file. The default is
 a general note message (denoted by the "---" prefix). For a list of the
 values accepted by this parameter, see type Profile.Msg_Kind.


 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES

 procedure Put_Line
 generic procedure Put_Line_Generic
 type Profile.Msg_Kind



 @node !Commands.Log.Put_Line

 procedure Put_Line
            (Object1  : Directory.Object;
             Message  : String := "";
             Object2  : Directory.Object := Directory.Nil;
             Kind     : Profile.Msg_Kind := Profile.Note_Msg;
             Response : Profile.Response_Profile := Profile.Get);

 procedure Put_Line
            (Object1  : Directory.Version;
             Message  : String := "";
             Object2  : Directory.Version := Directory.Nil;
             Kind     : Profile.Msg_Kind := Profile.Note_Msg;
             Response : Profile.Response_Profile := Profile.Get);

 procedure Put_Line
            (Object1  : Diana.Tree;
             Message  : String := "";
             Object2  : Diana.Tree := Diana.Empty;
             Kind     : Profile.Msg_Kind := Profile.Note_Msg;
             Response : Profile.Response_Profile := Profile.Get);
         

 DESCRIPTION

 Writes the specified message into the log file; the message can reference up
 to two Environment objects.

 By default, the specified message is written into the log as a general note
 message (denoted by the "---" prefix). You can use the Kind parameter to
 specify a different kind of message. Note that messages specified by the
 Put_Line procedure are subject to the filter specified as part of the
 Response parameter. Consequently, if you define the message to be a warning
 message and the Response parameter causes warning messages to be filtered
 out of the log, then the message specified by this procedure is also
 filtered out.

 If the message is accepted into the log, the names of the specified objects
 are computed and inserted into the message text. You can embed the
 following symbols in the message text to specify how the names are to be
 computed and where they are to be inserted:

 *  To request names computed by the Directory.Naming.Unique_Full_Name
    function, use <1> and <2> to indicate where to insert the names for
    Object1 and Object2, respectively.

 *  To request names computed by the Directory.Naming.Get_Simple_Name func-
    tion, use <<1>> and <<2>> to indicate where to insert the names for
    Object1 and Object2, respectively.

 If either Object1 or Object2 resolves to nil, its corresponding symbol in
 the message text is replaced by the null string. If none of the symbols
 listed above appear in the message text, then the object names are
 computed using the Directory.Naming.Unique_Full_Name function, and the
 names for Object1 and Object2 appear at the beginning and end of the
 message, respectively.

 These three Put_Line procedures provide a more convenient and efficient
 alternative to the first Put_Line procedure in this package. The first
 Put_Line procedure has no special parameters for object names, so that
 object names can be specified only as literal text in the message string.
 This means that object names must be computed in advance as part of your
 application, whether or not the message ever needs to be produced. In
 contrast, the three Put_Line procedures documented here compute the object
 names for you (so your application does not have to compute them).
 Furthermore, the object names are computed only when the message is
 actually required.


 PARAMETERS

 Object1 : Directory.Object;
 Object1 : Directory.Version;
 Object1 : Diana.Tree;

 Specifies the first object whose name is to appear in the message.


 Message : String := "";

 Specifies the text of the message to be entered into the log. The text can
 contain the special symbols <1>, <2>, <<1>>, or <<2>> to position the
 names of the first and second objects within the message and to determine
 the method of computing these names.


 Object2 : Directory.Object := Directory.Nil;
 Object2 : Directory.Version := Directory.Nil;
 Object2 : Diana.Tree := Diana.Empty;

 Specifies the second object whose name is to appear in the message.


 Kind : Profile.Msg_Kind := Profile.Note_Msg;

 Specifies the kind of message to be placed into the log file. The default is
 a general note message (denoted by the "---" prefix). For a list of the
 values accepted by this parameter, see the Profile.Msg_Kind type.


 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES
                                                                           
 procedure Put_Line
 generic procedure Put_Line_Generic
 type Profile.Msg_Kind



 @node !Commands.Log.Put_Line_Generic

 generic
     type Object_Type is private;
     with function Full   (Object : Object_Type) return String;
     with function Simple (Object : Object_Type) return String;
     with function Is_Nil (Object : Object_Type) return Boolean;
     with function Nil return Object_Type;

 procedure Put_Line_Generic
          (Object1  : Object_Type;
           Message  : String                   := "";
           Object2  : Object_Type              := Nil;
           Kind     : Profile.Msg_Kind         := Profile.Note_Msg;
           Response : Profile.Response_Profile := Profile.Get);


 DESCRIPTION

 Writes the specified message into the log file; the message can reference up
 to two objects of the specified Object_Type.

 By default, the specified message is written into the log as a general note
 message (denoted by the "---" prefix). You can use the Kind parameter to
 specify a different kind of message. Note that messages specified by the
 Put_Line_Generic procedure are subject to the filter specified in the
 Response parameter. Consequently, if you define the message to be a warning
 message and the current response parameter causes warning messages to be
 filtered out of the log, then the message specified by this procedure is
 also filtered out.

 If the message is accepted into the log, the names of the specified objects
 are computed and inserted into the message text. You can embed the
 following symbols in the message text to specify how the names are to be
 computed and where they are to be inserted:

 *  To request names computed by the Full function, use <1> and <2> to
    indicate where to insert the names for Object1 and Object2,
    respectively.

 *  To request names computed by the Simple function, use <<1>> and <<2>>
    to indicate where to insert the names for Object1 and Object2,
    respectively.

 If the Is_Nil function returns True for either Object1 or Object2, the
 corresponding symbol in the message text is replaced by the null string
 and neither the Full function nor the Simple function is called.

 If the Is_Nil function returns False but no symbols appear in the message
 text to indicate the form or location of the object names, the names for
 Object1 and Object2 are computed using the Full function; these names
 appear at the beginning and end of the message, respectively.


 PARAMETERS

 Object1 : Object_Type;

 Specifies the first object whose name is to appear in the message.


 Message : String := "";

 Specifies the text of the message to be entered into the log. The text can
 contain the special symbols <1>, <2>, <<1>>, or <<2>> to position the
 names of the first and second objects within the message and to determine
 the method of computing these names.


 Object2 : Object_Type := Nil;

 Specifies the second object whose name is to appear in the message.


 Kind : Profile.Msg_Kind := Profile.Note_Msg;

 Specifies the kind of message to be placed into the log file. The default is
 a general note message (denoted by the "---" prefix). For a list of the
 values accepted by this parameter, see the Profile.Msg_Kind type.


 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES

 generic formal function Put_Line_Generic.Full
 generic formal function Put_Line_Generic.Is_Nil
 generic formal function Put_Line_Generic.Nil
 generic formal type Put_Line_Generic.Object_Type
 generic formal function Put_Line_Generic.Simple



 @node !Commands.Log.Put_Line_Generic.Full

 function Full (Object : Object_Type) return String;

 DESCRIPTION
           

 Returns the fully qualified pathname of the specified object.

 This function is used by generic procedure Put_Line_Generic to obtain
 the fully qualified pathname of the object named in the Object1 or
 Object2 parameters. The name returned by this function is inserted into
 the message at the location indicated by the <1> or <2> symbols for the
 names for Object1 and Object2, respectively.

 If the Is_Nil function returns True for either Object1 or Object2, the
 corresponding symbol in the message text is replaced by the null string
 and the Full function is not called.

 If the Is_Nil function returns False but no symbols appear in the message
 text to indicate the form or location of the object names, the names for
 Object1 and Object 2 are computed by the Full function; these names
 appear at the beginning and end of the message, respectively.


 PARAMETERS

 Object : Object_Type

 Specifies the object for which to return the fully qualified pathname.


 return String;

 Returns the fully qualified pathname of the object.


 REFERENCES

 generic procedure Put_Line_Generic
 generic formal function Put_Line_Generic.Simple



 @node !Commands.Log.Put_Line_Generic.Is_Nil

 function Is_Nil (Object : Object_Type) return Boolean;


 DESCRIPTION

 Returns a Boolean value indicating whether or not the specified value is
 the null string.

 This function is used by generic procedure Put_Line_Generic to determine
 whether the value for the Object1 or Object2 parameter is null:

 *  If this function returns True for either Object1 or Object2, the
    corresponding symbol in the message text is replaced by the null string
    and neither the Full function nor the Simple function is called.

 *  If this function returns False for either Object1 or Object2, the
    corresponding symbol in the message text is replaced by the full or
    simple name of the object (that is, the name returned by the Full
    function or the Simple function, as indicated by the replaced
    symbol).

    However, if no symbols appear in the message text to indicate the form
    or location of the object names, the names for Object1 and Object2
    are computed using the Full function; these names appear at the
    beginning and end of the message, respectively.

 For further information about inserting object names into the message, see
 generic procedure Put_Line_Generic.


 PARAMETERS

 Object : Object_Type

 Specifies the value to be checked for the null string.


 return Boolean;

 Returns True if the value of the parameter is the null string; otherwise,
 this function returns False.


 REFERENCES

 generic procedure Put_Line_Generic
 generic formal function Put_Line_Generic.Nil



 @node !Commands.Log.Put_Line_Generic.Nil

 function Nil return Object_Type;


 DESCRIPTION

 Returns a value of type Object_Type that corresponds to the null string.

 This function is used by generic procedure Put_Line_Generic as the default
 value for the Object2 parameter. The Nil function returns a value of type
 Object_Type that is equivalent to the null string. When this function
 appears as the value of a parameter of type Object_Type, the Is_Nil
 function returns True for that parameter.


 PARAMETERS

 return Object_Type;

 Returns a value of type Object_Type that corresponds to the null string.


 REFERENCES

 generic formal function Is_Nil
 generic procedure Put_Line_Generic



 @node !Commands.Log.Put_Line_Generic.Object_Type

 type Object_Type is Private;


 DESCRIPTION

 Defines a type of object.

 Parameter values of this type are used by generic procedure
 Put_Line_Generic to supply object names to be inserted into the message.



 @node !Commands.Log.Put_Line_Generic.Simple

 function Simple (Object : Object_Type) return String;
 

 DESCRIPTION

 Returns the simple name of the specified object.

 This function is used by generic procedure Put_Line_Generic to obtain the
 simple name of the object named in the Object1 or Object2 parameters. The
 simple name of an object is the rightmost name component. The name
 returned by this function is inserted into the message at the location
 indicated by the <<1>> or <<2>> symbols (for the names for Object1 and
 Object2, respectively).

 If the Is_Nil function returns True for either Object1 or Object2, the
 corresponding symbol in the message text is replaced by the null string
 and the Simple function is not called.

 If the Is_Nil function returns False but no symbols appear in the message
 text to indicate the form or location of the object names, the names for
 Object1 and Object2 are computed using the Full function; these names
 appear at the beginning and end of the message, respectively.


 PARAMETERS

 Object : Object_Type

 Specifies the object for which to return the simple name.


 return String;

 Returns the fully qualified pathname of the object.


 REFERENCES

 generic formal function Full
 generic procedure Put_Line_Generic



 @node !Commands.Log.Put_System_Messages

 procedure Put_System_Messages
            (Response : Profile.Response_Profile := Profile.Get);


 DESCRIPTION

 Formats and writes the contents of the system message log for the current
 job into the log file for the current job.

 To write the contents of the system message log for a specified job into
 the log file, use the Put_Job_Messages procedure.


 PARAMETERS

 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES

 procedure Put_Job_Messages
 function Profile.Get



 @node !Commands.Log.Reset_Error

 procedure Reset_Error renames Io.Reset_Error;
            

 DESCRIPTION

 Closes the current-error file and pops it off the stack of error files.

 This procedure pops the current value of Current_Error off the stack of
 error files. The current-error file is also closed; thus, it cannot be used
 again with another Set_Error procedure.

 The top of the stack and Current_Error are reset to be the previous error
 file on the stack.

 To pop the current-error file off the stack without closing it, use the
 Pop_Error procedure.

 To push a file onto the stack of error files, use the Set_Error procedure or
 the Io.Set_Error procedure. Note that the Log.Set_Error and Io.Set_Error
 procedures are not identical. See the Set_Error procedure for details.

 For further information about the stack mechanism for managing I/O files,
 see the introduction to this package.


 REFERENCES

 procedure Pop_Error
 procedure Set_Error
 Text Input/Output (TIO), procedure Io.Reset_Error



 @node !Commands.Log.Reset_Input

 procedure Reset_Input renames Io.Reset_Input;
 

 DESCRIPTION

 Closes the current-input file and pops it off the stack of input files.

 This procedure pops the current value of Current_Input off the stack of
 input files. The current-input file is also closed; thus, it cannot be used
 again with another Set_Input procedure.

 The top of the stack and Current_Input are reset to be the previous input
 file on the stack.

 To pop the current-input file off the stack without closing it, use the
 Pop_Input procedure.

 To push a file onto the stack of input files, use the Set_Input procedure.

 For further information about the stack mechanism for managing I/O files,
 see the introduction to this package.


 REFERENCES

 procedure Pop_Input
 procedure Set_Input
 Text Input/Output (TIO), procedure Io.Reset_Input



 @node !Commands.Log.Reset_Log

 procedure Reset_Log
                 (Filter : Profile.Log_Filter := Profile.Filter);
 

 DESCRIPTION

 Closes the current-output file, pops it off the stack of output files, and
 sets the log filter to the specified value.

 Note: This procedure is the same as the Reset_Output procedure, except
 that this procedure also sets the log filter.

 This procedure pops the current value of Current_Output off the stack of
 output files. The current-output file is also closed; thus, it cannot be
 used again with another Set_Output procedure.

 The top of the stack and Current_Output are reset to be the previous
 output file on the stack.

 This procedure also sets the log-filter component of the job response
 profile to be the specified filter. The default is the filter specified in the
 job response profile for the current job.

 To set the current-output file and the filter, use the Set_Log procedure.

 For further information about the stack mechanism used to manage I/O files,
 see the introduction to this package. For further information about
 profiles and profile components, see package Profile.


 PARAMETERS

 Filter : Profile.Log_Filter := Profile.Filter;

 Specifies the value to which to set the filter component of the job response
 profile. The default is the filter specified in the job response profile for
 the current job.


 REFERENCES

 procedure Reset_Output
 procedure Set_Log
 package Profile



 @node !Commands.Log.Reset_Output

 procedure Reset_Output renames Io.Reset_Output;
                 

 DESCRIPTION

 Closes the current-output file and pops it off the stack of output files.

 Note: This procedure is the same as the Reset_Log procedure, except that
 the Reset_Log procedure also sets the log-filter component in the job
 response profile for the current job.

 This procedure pops the current value of Current_Output off the stack of
 output files. The current-output file is also closed; thus, it cannot be
 used again with another Set_Output procedure.

 The top of the stack and Current_Output are reset to be the previous
 output file on the stack.

 To pop the current-output file off the stack without closing it, use the
 Pop_Output procedure.

 To push a file onto the stack of output files, use the Set_Output procedure
 or the Io.Set_Output procedure. Note that the Log.Set_Output and
 Io.Set_Output procedures are not identical. See the Set_Output procedure
 for details.

 For further information about the stack mechanism for managing I/O files,
 see the introduction to this package.


 REFERENCES

 procedure Pop_Output
 procedure Set_Output
 Text Input/Output (TIO), procedure Io.Reset_Output
 Text Input/Output (TIO), procedure Io.Set_Output



 @node !Commands.Log.Save

 procedure Save
             (Response: Profile.Response_Profile := Profile.Get);
 

 DESCRIPTION

 Forces any buffered output into the log file and then makes the current
 contents of the log file permanent.

 A log file does not become permanent until it is saved or closed. This
 procedure first flushes all buffered output into the file and then commits
 the log file without closing it.

 This procedure should not be used to save log files written to
 Standard_Output (an Environment output window).


 PARAMETERS

 Response : Profile.Response_Profile := Profile.Get;

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 REFERENCES

 procedure Flush
 function Profile.Get



 @node !Commands.Log.Set_Error

 procedure Set_Error (To_Be : Name := ">>FILE NAME<<");
             

 DESCRIPTION

 Sets the current-error file to be the specified file and pushes that file onto
 the stack of error files. This procedure sets the value of Current_Error to
 be the specified file. Any previous values of error files are pushed onto
 the stack of error files. This is the same stack of error files that is
 managed by commands in package Io.

 This procedure also sets the log-file component of the job response profile
 for the current job to Use_Error so that output will be sent to
 Current_Error, as determined by this procedure. Thus, this procedure
 differs from Io.Set_Error, which sets Current_Error but does not change
 the log-file component of the job response profile.

 To pop the current-error file off the stack, use the Pop_Error or
 Reset_Error procedure.

 For further information about the stack mechanism for managing I/O files,
 see the introduction to this package.


 PARAMETERS

 To_Be : Name := ">>FILE NAME<<";

 Specifies the file to which Current_Error is to be set. The default
 parameter placeholder ">>FILE NAME<<" must be replaced or an error will
 result.


 REFERENCES

 procedure Pop_Error
 procedure Reset_Error
 Text Input/Output (TIO), procedure Io.Set_Error



 @node !Commands.Log.Set_Input

 procedure Set_Input (To_Be : Name := "<REGION>")
                            renames Io.Set_Input;
 

 DESCRIPTION

 Sets the current-input file to be the specified file and pushes that file onto
 the stack of input files.

 This procedure sets the value of Current_Input to be the specified file. Any
 previous values of input files are pushed onto the stack of input files.
 This is the same stack of input files that is managed by commands in
 package Io.

 To pop the current-error file off the stack, use the Pop_Input or
 Reset_Input procedure.

 For further information about the stack mechanism for managing I/O files,
 see the introduction to this package.


 PARAMETERS

 To_Be : Name := "<REGION>";

 Specifies the file to which Current_Input is to be set. The default is the
 object in the currently selected region.


 REFERENCES

 procedure Pop_Input
 procedure Reset_Input
 Text Input/Output (TIO), procedure Io.Set_Input



 @node !Commands.Log.Set_Log

 procedure Set_Log (To_Be  : Name               := ">>FILE NAME<<";
                    Filter : Profile.Log_Filter := Profile.Filter);


 DESCRIPTION

 Sets the current-output file to the specified file, pushes that file onto the
 stack of output files, and sets the filter to the specified value.

 Note: This procedure is the same as the Set_Output procedure, except that
 this procedure also sets the log filter.

 This procedure sets the value of Current_Output to be the specified file.
 This value and any previous values of output files are pushed onto the
 stack of output files. This is the same stack of output files that is
 managed by the Set_Output procedure and commands in package Io.

 This procedure also sets the log-filter component of the job response
 profile to be the specified filter. The default is the filter specified in the
 job response profile for the current job.

 Finally, this procedure sets the log-file component of the job response
 profile for the current job to Use_Output so that output will be sent to
 Current_Output, as determined by this procedure. Thus, this procedure
 differs from Io.Set_Output, which sets Current_Output but does not change
 the log-file or log-filter components of the job response profile.

 To pop the current-output file off the stack and set the filter component of
 the job response profile, use the Reset_Log procedure.

 For further information about the stack mechanism used to manage I/O files,
 see the introduction to this package. For further information about
 profiles and profile components, see package Profile.


 PARAMETERS

 To_Be : Name := ">>FILE NAME<<";

 Specifies the file to which Current_Output is to be set. The default
 parameter placeholder ">>FILE NAME<<" must be replaced or an error will
 result.


 Filter : Profile.Log_Filter := Profile.Filter;

 Specifies the value to which to set the filter component of the job response
 profile. The default is the filter specified in the job response profile for
 the current job.


 REFERENCES

 procedure Reset_Log
 procedure Set_Output
 package Profile


                                                                           
 @node !Commands.Log.Set_Output

 procedure Set_Output (To_Be : Name := ">>FILE NAME<<");


 DESCRIPTION

 Sets the current-output file to be the specified file and pushes that file
 onto the stack of output files.

 Note: This procedure is the same as the Set_Log procedure, except that the
 Set_Log procedure also sets the log-filter component in the job response
 profile for the current job.

 This procedure sets the value of Current_Output to be the specified file.
 Any previous values of output files are pushed onto the stack of output
 files. This is the same stack of output files that is managed by the Set_Log
 procedure and commands in package Io.

 This procedure also sets the log-file component of the job response profile
 for the current job to Use_Output so that output will be sent to
 Current_Output, as determined by this procedure. Thus, this procedure
 differs from Io.Set_Output, which sets Current_Output but does not change
 the log-file component of the job response profile.

 To pop the current-output file off the stack, use the Pop_Output or
 Reset_Output procedure.

 For further information about the stack mechanism for managing I/O files,
 see the introduction to this package.


 PARAMETERS

 To_Be : Name := ">>FILE NAME<<";

 Specifies the file to which Current_Output is to be set. The default
 parameter placeholder ">>FILE NAME<<" must be replaced or an error will
 result.


 REFERENCES

 procedure Pop_Output
 procedure Reset_Output
 Text Input/Output (TIO), procedure Io.Set_Output



 @node !Commands.Log.Summarize

 procedure Summarize
           (Log_File    : Name    := "<IMAGE>";
            Destination : Name    := "";
            Auxiliaries : Boolean := True;
            Diagnostics : Boolean := True;
            Notes       : Boolean := False;
            Positives   : Boolean := True;
            Negatives   : Boolean := True;
            Positions   : Boolean := False;
            Warnings    : Boolean := False;
            Errors      : Boolean := False;
            Exceptions  : Boolean := False;
            Sharps      : Boolean := False;
            Dollars     : Boolean := False;
            Ats         : Boolean := False) renames Filter;
 

 DESCRIPTION

 Filters the specified log file based on the specified parameters and then
 writes the result into the specified destination.

 This procedure both copies the log from one file into another and filters
 the log messages in the process. Only those message kinds for which the
 value is True are included in the new log file. By default, only auxiliary
 (:::), diagnostic (???), positive (+++), and negative (++*) messages are
 included in the new log file.

 The new log file is written into the location specified in the Destination
 parameter. By default, the new log file is sent to Current_Output, which
 is, by default, an Environment output window.

 This procedure renames the Filter procedure. The Filter_Errors procedure
 also renames the Filter procedure, using different default parameter
 values. To copy a log and filter its contents in the process, you can also
 use the Copy procedure. Whereas the Summarize procedure allows you to
 specify a Boolean value for each message kind, the Copy procedure allows
 you to specify an existing filter.


 PARAMETERS

 Log_File : Name := "<IMAGE>";

 Specifies the log file to be copied and filtered. The default is the log file
 in the current image.


 Destination : Name := "";

 Specifies the destination for the new log file. The default (the null
 string) sends the log file to Current_Output, which is, by default, an
 Environment output window.


 Auxiliaries : Boolean := True;

 Specifies whether to write auxiliary messages (denoted by :::) into the
 destination file. The default, True, is to write them.


 Diagnostics : Boolean := True;

 Specifies whether to write diagnostic or debug messages (denoted by ???)
 into the destination file. The default, True, is to write them.


 Notes : Boolean := False;

 Specifies whether to write note messages (denoted by ---) into the
 destination file. The default, False, is not to write them.


 Positives : Boolean := True;

 Specifies whether to write positive messages (denoted by +++) into the
 destination file. The default, True, is to write them.


 Negatives : Boolean := True;

 Specifies whether to write negative messages (denoted by ++*) into the
 destination file. The default, True, is to write them.


 Positions : Boolean := False;

 Specifies whether to write position messages (denoted by >>>) into the
 destination file. The default, False, is not to write them.


 Warnings : Boolean := False;

 Specifies whether to write warning messages (denoted by !!!) into the
 destination file. The default, False, is not to write them.


 Errors : Boolean := False;

 Specifies whether to write error messages (denoted by ***) into the
 destination file. The default, False, is not to write them.


 Exceptions : Boolean := False;

 Specifies whether to write exception messages (denoted by %%%) into the
 destination file. The default, False, is not to write them.


 Sharps : Boolean := False;

 Specifies whether to write sharp messages (denoted by ###) into the
 destination file. The default, False, is not to write them.


 Dollars : Boolean := False;

 Specifies whether to write dollar messages (denoted by $$$) into the
 destination file. The default, False, is not to write them.


 Ats : Boolean := False;

 Specifies whether to write at messages (denoted by @@@) into the
 destination file. The default, False, is not to write them.


 REFERENCES

 procedure Copy
 procedure Filter
 procedure Filter_Errors
 type Profile.Msg_Kind



 @node !Tools.Profile

 Package Profile contains procedures and functions for programmatically
 manipulating job response profiles, session response profiles, and the
 system default profile. These profiles can be used by both
 Environment-defined and user-defined commands to determine how to
 respond to errors, how to generate error logs, and which activity,
 remote-passwords file, and remote-sessions file to use. Using
 facilities from this package, you can set, modify, and query for
 information about profiles.

 For further information about controlling job behavior, including how to
 specify the response characteristics to be used by a particular command
 and how to interactively set values in session and job response profiles,
 see Chapter 2, "Job Characteristics and Behavior."


 RESOURCES IN PACKAGE PROFILE

 The commands in package Profile fall into several functional groups. This
 list includes procedures and functions.

 Setting a session response profile:

                Include_In_Default            Set_Default
                Set_Default_Activity          Set_Default_Filter
                Set_Default_Log_File          Set_Default_Prefixes
                Set_Default_Reaction          Set_Default_Remote_Passwords
                Set_Default_Remote_Sessions   Set_Default_Response
                Set_Default_Width

 Setting a job response profile:

                Include                       Set
                Set_Activity                  Set_Filter
                Set_Log_File                  Set_Prefixes
                Set_Reaction                  Set_Remote_Passwords
                Set_Remote_Sessions           Set_Response
                Set_Width

 Obtaining values from job and session response profiles:

                Activity                      Default_Activity
                Default_Remote_Passwords      Default_Remote_Sessions
                Filter                        Get
                Get_Default                   Includes
                Log_File                      Persevere
                Propagate                     Reaction
                Remote_Passwords              Remote_Sessions
                Width

 Representing and obtaining the system default profile:

                Default_Filter                Default_Log_File
                Default_Prefixes              Default_Profile
                Default_Reaction              Default_Width

 Converting between profile representations:

                Convert                       Image
                Value

 Building profiles for use in parameters:

                Ignore                        Nil
                Raise_Exception               Response
                Verbose                       Warn

 This package also contains predefined filters (constants) for use in
 parameters:

                Errors                        Full
                Quiet                          Summary
                Terse


 INTRODUCTION TO PROFILES

 Commands obtain certain information required for execution from their
 response characteristics. In particular, a command's response
 characteristics tell it:

 *  How to respond to errors

 *  Where to generate the logs that summarize command behavior

 *  How to filter and format the messages that are recorded in these logs

 *  Where to find the activity to use (when executing commands that compile
    and/or load programs written in subsystems)

 *  Where to find the remote-passwords file and remote-sessions file to use
    when executing commands on remote systems

 When a command executes, it can be instructed to take its response
 characteristics from a prepackaged set of characteristics called a
 response profile.

 Commands can be "hard-coded" to take their response characteristics from a
 particular profile so that they always use the same characteristics. For
 example, servers often include instructions to write all log messages into
 a particular file.

 Commands also can obtain their response characteristics from a Response
 parameter. Response parameters allow the user executing the command to
 specify the particular set of response characteristics or to specify a
 profile from which to take the response characteristics. This enables each
 user to tailor the command's behavior to his or her needs.

 This section contains information about:

 *  Response profile components

 *  Environment-defined response profiles

 *  User-defined response profiles

 The remainder of this package introduction contains information about:

 *  Response profiles and Environment commands

 *  Response profiles and user-defined commands

 *  Setting the job response profile for the current job

 *  Setting the session response profile for the current session

 *  Obtaining profiles and profile components

 *  Building and using your own profiles

 *  Converting between profile representations

 For information about using the Response parameter to specify response
 characteristics to Environment-defined commands, see Parameter-Value
 Conventions in the Reference Summary (RS) book.


 Response-Profile Components

 Response profiles are stored by the Environment as an aggregate of
 component values. These component values represent each of the response
 characteristics that can be set for commands (see Table 1).
                                                        

                    Table 1   Response-Profile Components
             ------------------------------------------------ 
            |         |                                      |
            |Component|             Description              |
            |         |                                      |
             ------------------------------------------------ 
            |         |                                      |
            |Error    |Specifies (1) whether the job should  |
            |reaction |persevere or quit and (2) whether or  |
            |         |not the job should propagate errors.  |
            |         |Error reactions are enumerations of   |
            |         |type Error_Reaction.                  |
             ------------------------------------------------ 
            |         |                                      |
            |Log      |Specifies the kinds of messages that  |
            |filter   |will be reported in or filtered from a|
            |         |job's output log. Message kinds are   |
            |         |enumerations of type Msg_Kind.        |
             ------------------------------------------------ 
            |         |                                      |
            |Log      |Specifies whether messages are pre-   |
            |prefixes |fixed with the time, date, and/or kind|
            |         |of message. Log prefixes are enumera- |
            |         |tions of type Log_Prefix.             |
             ------------------------------------------------ 
            |         |                                      |
            |Log      |Specifies the width of the log        |
            |width    |display--that is, the maximum number  |
            |         |of characters in a message line. This |
            |         |value is a positive integer.          |
             -------- --------------------------------------- 
            |         |                                      |
            |Log file |Specifies whether the log output is   |
            |         |displayed in an output window or in   |
            |         |the message window, or whether it can |
            |         |be directed to a file. The locations  |
            |         |to which logs can be directed are     |
            |         |enumerations of type Log_Output_File. |
             ------------------------------------------------ 
            |         |                                      |
            |Activity |Specifies the name of the activity to |
            |         |be used when programs written in      |
            |         |subsystems are executed. For          |
            |         |information about activities, see the |
            |         |Project Management (PM) book.         |
             ------------------------------------------------ 
            |         |                                      |
            |Remote   |Specifies the name of the             |
            |passwords|remote-passwords file, used in        |
            |         |networking operations. For information|
            |         |about remote-passwords files, see     |
            |         |package Remote_Passwords in this book.|
             ------------------------------------------------ 
            |         |                                      |
            |Remote   |Specifies the name of the             |
            |sessions |remote-sessions file, used in         |
            |         |networking operations. See type       |
            |         |Remote_Sessions_Type in this package. |
             ------------------------------------------------ 


 Environment-Defined Response Profiles

 Basic Response Profiles

 The Environment provides three basic response profiles from which a command
 can take its response characteristics:

 *  The system default profile, which is provided by the Environment for
    general use.

 *  The session response profile, which is available to any command
    executing in a given session. Every session has a session response
    profile associated with it, whether or not you explicitly set one. The
    components of the session response profile are reflected in session
    switches with the prefix "Profile."

 *  The job response profile, which is available to any command executing in
    the current job. A job response profile is associated with every job,
    whether or not you explicitly set one.

 The component values of each of these response profiles initially are set
 by the Environment. Specifically:

 *  The values of the system default profile are copied into the session
    response profile for your default session, S_1.

 *  The values of the session response profile for S_1 are copied into the
    session response profiles for subsequent sessions.

 *  The values of the session response profile for any session are copied
    into the job response profile for jobs run under that session.

 This cascading initialization is depicted in Figure 1.


       ---------------
       |             |
       |   SYSTEM    |
       |   DEFAULT   |
       |   PROFILE   |
       |             |
       |      ---------------          ---------------
       |      |             |          |             |
       |      |  SESSION    |          |  SESSION    |
    \  -------|  RESPONSE   |          |  RESPONSE   |
     \        |  PROFILE    | -------> |  PROFILES   |
      \       |  FOR S_1    |          |  FOR OTHER  |
       \      |             |          |  SESSIONS   |
        \     |      ---------------   |      ---------------
         \    |      |             |   |      |             |
          \   -------|  JOB        |   -------|  JOB        |
           \         |  RESPONSE   |          |  RESPONSE   |
            \        |  PROFILE(S) |          |  PROFILE(S) |
             \       |             |          |             |
              \      |             |          |             |
               \     |             |          |             |
                V    |             |          |             |
                     ---------------          ---------------
   
   Figure 1   The Three Basic Response Profiles


 By default, Environment commands use the response characteristics specified
 in the job response profile for the job in which the command is executing.
 Because the job response profile gets its initial values from the session
 response profile for the current session, Environment commands are subject
 to the default characteristics you set in the session response profile.
 Thus:

 *  Setting session switches with the prefix "Profile" allows you to
    establish default behavior for commands executed under that session.

 *  Setting the job response profile (by calling commands from packages
    Activity, Log, or Profile as part of the job) allows you to override
    session default behavior for the duration of the job. This is
    especially useful when you want to change the behavior of several
    commands that are part of the same job.

 You can specify the special values listed in Table 2 to any command that
 accepts the string representation of a profile. In particular, you can
 specify these values to the Response parameter of Environment and
 user-defined commands to cause the commands to take their response
 characteristics from one of the basic profiles. You also can specify these
 values to commands in this package that set, obtain values from, and
 convert profiles.
                                                   

           Table 2   Special Values for Specifying Basic Profiles
             ----------------------------------------------------- 
            |             |                                       |
            |Special Value|              Description              |
            |             |                                       |
             ----------------------------------------------------- 
            |             |                                       |
            |"<PROFILE>"  |Specifies the job response profile for |
            |             |the current job. Keep in mind that a   |
            |             |job is any set of commands that are    |
            |             |executed together. For example,        |
            |             |executing multiple commands in a single|
            |             |command window constitutes a single    |
            |             |job.                                   |
             ----------------------------------------------------- 
            |             |                                       |
            |"<SESSION>"  |Specifies the session response profile |
            |             |for the current session.               |
            |             |                                       |
             ----------------------------------------------------- 
            |             |                                       |
            |"<DEFAULT>"  |Specifies the system default profile.  |
            |             |                                       |
            |             |                                       |
             ----------------------------------------------------- 


 Special-Purpose Profiles

 In addition to the three basic response profiles, the Environment provides
 a number of special-purpose profiles from which commands can take their
 response characteristics. The component values of these profiles are preset
 to:

 *  Specify the kinds of log messages commands using the job response
    profile can send to the log file

 *  Specify how commands using the job response profile will respond to
    errors

 You can specify the special values listed in Table 3 to any command that
 accepts the string representation of a profile. In particular, you can
 specify these values to the Response parameter of Environment and
 user-defined commands to cause the commands to take their response
 characteristics from one of the basic profiles. You also can specify these
 values to commands in this package that set, obtain values from, and
 convert profiles.
                                                   

       Table 3   Special Values for Special-Purpose Response Profiles
             ----------------------------------------------- 
            |              |                                |
            |Special Value |    Response Characteristics    |
             ----------------------------------------------- 
            |              |                                |
            |"<ERRORS>"    |Logs only negative, error, and  |
            |              |exception messages (++*, ***,   |
            |              |%%%); perseveres at errors,     |
            |              |without raising an exception;   |
            |              |otherwise, same as job response |
            |              |profile.                        |
             ----------------------------------------------- 
            |              |                                |
            |"<IGNORE>"    |Logs no messages; perseveres at |
            |              |errors, without raising an      |
            |              |exception; otherwise, same as   |
            |              |job response profile.           |
             ----------------------------------------------- 
            |              |                                |
            |"<NIL>"       |Logs no messages; quits at the  |
            |              |first error, without raising an |
            |              |exception; uses no activity,    |
            |              |remote-passwords, or remote-    |
            |              |sessions file; ignores job and  |
            |              |session response profiles.      |
             ----------------------------------------------- 
            |              |                                |
            |"<PROGRESS>"  |Logs only positive, negative,   |
            |              |error, and exception messages   |
            |              |(+++, ++*, ***, %%%); perseveres|
            |              |at errors, without raising an   |
            |              |exception; otherwise, same as   |
            |              |job response profile.           |
             ----------------------------------------------- 
            |              |                                |
            |"<QUIET>"     |Same as "<IGNORE>".             |
             ----------------------------------------------- 
            |              |                                |
            |"<RAISE-      |Raises an exception at the first|
            |  _EXCEPTION>"|error and quits immediately;    |
            |              |otherwise, same as job response |
            |              |profile. (For package Archive   |
            |              |commands, you should use the    |
            |              |string "Raise_Error, <PROFILE>" |
            |              |instead to permit graceful      |
            |              |termination after exception is  |
            |              |raised.)                        |
             ----------------------------------------------- 
            |              |                                |
            |"<VERBOSE>"   |Logs all messages except debug  |
            |              |messages (???); otherwise, same |
            |              |as job response profile.        |
             ----------------------------------------------- 
            |              |                                |
            |"<WARN>"      |Logs only negative, warning,    |
            |              |error, and exception messages   |
            |              |(++*, !!!, ***, %%%); perseveres|
            |              |at errors, without raising an   |
            |              |exception; otherwise, same as   |
            |              |job response profile.           |
             ----------------------------------------------- 


 Note that apart from message filtering and error reaction, these profiles
 provide the same response characteristics as the current job response
 profile. That is, you can think of the special values in Table 3 as being
 variants of the "<PROFILE>" special value.


 User-Defined Profiles

 Occasionally, you may want your application to use a specific set of
 response characteristics instead of taking its response characteristics
 from the Environment-defined defaults.

 For example, assume that you are creating a server that logs off idle
 sessions after a preset amount of time. Also assume that you want this
 server to use the response characteristics in the Environment's system
 default profile for all characteristics except the log file. In
 particular, you want the server to write the log to a text file with
 the name of the server and the current date. In this case, you can
 build a profile within your application and use that profile
 throughout.

 For information about how to do this, see "Building Your Own Profiles,"
 page nn.


 RESPONSE PROFILES AND ENVIRONMENT COMMANDS

 By default, the response characteristics for Environment commands are
 determined by the job response profile for the job in which the command is
 executing. Because the job response profile gets its initial values from
 the session response profile for the current session, Environment
 commands are subject to the default response characteristics you set in
 the session response profile.

 Most Environment commands have a Response parameter through which you can
 override the response characteristics set in the job response profile.
 (Environment-defined commands that do not have a Response parameter always
 use the response characteristics specified in the job response profile.)

 For commands whose Response parameter accepts a string value, you can use
 a special value such as "<PROFILE>", "<WARN>", or "<ERRORS>" to cause the
 command to take its response characteristics from any Environment-defined
 response profile. These special values are described in Tables 2 and 3,
 page nn.

 The Response parameters of some Environment commands accept values of type
 Profile.Response_Profile rather than string values. In this case, you can
 use one of several functions in this package to specify the profile from
 which the command is to take its response characteristics. These functions
 are described in "Obtaining a Complete Profile," page nn.

 For further information about using the Response parameter of Environment-
 defined commands, see Parameter-Value Conventions in the Reference Summary
 (RS) book.


 RESPONSE PROFILES AND USER-DEFINED COMMANDS

 If you are creating a site-specific tool that will run on the R1000, you
 may want it to behave like Environment commands. That is, you may want
 your command to use different response characteristics based on the user
 executing it. You can accomplish this by having your command use the basic 
 response profiles maintained by the Environment.

 There are several guidelines for using response profiles in your commands:

 *  If you define your command to have a Response parameter:

    -  Define command behavior so that it uses the response characteristics
       specified through this parameter. For example, when errors are
       encountered, check the error reaction specified through the Response
       parameter and ensure that your command behaves accordingly.

    -  Make sure that your command is not sensitive to the characteristics
       defined in the job response profile for the calling job or any
       "hard-coded" response characteristics.

 *  If your command calls any procedures or functions, make sure they use
    appropriate response characteristics. In general, they should use the
    same response characteristics as your command; however, you may want
    them to use other response characteristics when:

    -  You want your command to heavily filter messages generated by subpro-
       grams it calls so that users see only messages directly from your
       command and errors from calls to other subprograms.

    -  You want subprograms called by your command to raise an exception if
       they encounter errors so that you have more control over the error
       and exception handling of those subprograms.

    Note that you may not be able to change the response characteristics of
    all the subprograms you call, especially if you call user-defined
    commands that have "hard-coded" response characteristics.

 *  Do not permanently affect anything outside your command. If you modify
    the job or session response profile from within your command, reset the
    profile to the original value before your command completes.

 Following these guidelines, there are basically two methods for using
 response profiles in your commands. Both of these methods suggest that you
 give your command a Response parameter. They differ, however, in that:

 *  Method I entails setting the job response profile to the value specified
    through the Response parameter of your command and then resetting it
    before returning to the calling job.

 *  Method II entails passing the value specified through the Response
    parameter of your command to any other commands it calls, without
    changing the job response profile.

 These two methods are described in more detail in the following
 subsections. Each method is followed by an example using the method in a
 simple program. The example for method II is followed by sections that
 provide more detailed information about the procedures and functions in
 package Profile that you can use to set and obtain values from profiles.


 Method I

 One method for making your commands take their response characteristics
 from a response profile is to set the job response profile for the current
 job, use this profile to determine the response characteristics of your
 command and any subprograms it calls, and then reset the job response
 profile at the end of your command.

 There are two advantages to changing the job response profile:

 *  Most Environment-defined commands with a Response parameter use the job
    response profile by default. Thus, you do not have to change the value
    specified to the Response parameter of subprograms called by your
    command.

 *  Environment-defined commands that do not have a Response parameter
    always use the job response profile. Changing the job response profile is
    the only way to change the response characteristics for these commands.

 Remember that the job response profile exists for the duration of the
 entire job, not just a single command. For this reason, when using this
 method, you must save the job response profile at the time your command was
 called and reset it before returning to the calling job. Otherwise,
 commands in the current job called after yours will be subject to the job
 response profile you have set.


 Instructions for Method I

 The following instructions describe how to use method I in your
 procedures. They are followed by a simple example.

 1. Give your command a Response parameter that accepts a string value. The
    recommended default value is "<PROFILE>", which copies the response
    characteristics from the job response profile for the current job:

      procedure Build_Training_Users
                (First_User_Number : in Positive  := 1;
                 Last_User_Number  : in Positive;
                 Username_Prefix   : in String    := "Advanced";
                 Response          : in String    := "<PROFILE>") is

 2. Save the job response profile for the calling job so that you can reset
    it at the end of your command:

      Old_Job_Profile : Profile.Response_Profile := Profile.Get;

 3. Convert the value of the Response parameter to a variable of type
    Profile.Response_Profile:

      Current_Job_Profile : Profile.Response_Profile :=
                                         Profile.Value (Response);

    You may need this value if you call subprograms, such Profile.Set, that
    accept values of type Profile.Response_Profile.

 4. Set the job response profile to be the one specified in the Response
    parameter of your command:

      Profile.Set (Profile => Current_Job_Profile);

 5. Make sure any subprograms called by your command use appropriate
    response characteristics:

    a. Usually you will want subprograms you call to use the same response
       characteristics as your command. Because you have set the job
       response profile to include the characteristics specified to your
       command, subprograms called by your command should use the job
       response profile, as indicated by the value "<PROFILE>" or
       Profile.Get:

         Log.Put_Line (Message  => "Command has completed",
                       Kind     => Profile.Auxiliary_Msg,
                       Response => Profile.Get);

         Operator.Create_User (User     => User_Name,
                               Password => User_Name,
                               Volume   => 0,
                               Response => "<PROFILE>");

    b. In certain situations, you may want subprograms you call to use
       other response characteristics. For example, you may want them to
       raise an exception if they encounter errors so that you have more
       control over the error and exception handling of those subprograms.

    Note that Environment-defined commands that do not have a Response
    parameter automatically use the response characteristics in the job
    response profile for the current job.

 6. When appropriate, base command behavior on the values in the job
    response profile. For example, you may have something like the following
    in your command so that when your command encounters errors, it bases
    its behavior on the error-reaction component of the job response
    profile:

      if Profile.Reaction (Profile.Get) = Profile.Raise_Error then
          Log.Flush;
          raise Propagate;
      else
          Log.Flush;
          raise Quit;
      end if;

 7. Reset the job response profile at the end of your command:

      Profile.Set (Profile => Original_Job_Profile);

    Remember that your command may exit from a number of places, depending
    on whether or not it encounters errors. Make sure that you reset the
    job response profile at all of these places.


 Example Using Method I

 The following procedure is used by some Rational technical representatives
 to create multiple users for Rational training. The comments indicate how
 facilities from package Profile are used according to the method outlined
 above.

   with Debug_Tools;
   with Directory_Tools;
   with Log;
   with Operator;
   with Profile;
   with String_Utilities;

   -- Step 1: Give your procedure a Response parameter that accepts a
   -- string value, with the default value <PROFILE>.

   procedure Build_Training_Users_Too
                (First_User_Number : in Positive := 1;
                 Last_User_Number  : in Positive;
                 Username_Prefix   : in String   := "Advanced";
                 Response          : in String   := "<PROFILE>") is

       package Naming renames Directory_Tools.Naming;
       package Object renames Directory_Tools.Object;

       -- Step 2: Save the current job response profile.

       Old_Job_Profile : Profile.Response_Profile := Profile.Get;

       -- Step 3: Change the string value in the Response parameter
       -- to a variable of type Profile.Response_Profile.

       Current_Job_Profile : Profile.Response_Profile :=
          Profile.Value (Response);

       Errors_Detected : Boolean := False;
       Quit            : exception;
       Propagate       : exception;

       ----------------------------------------
       procedure Output_Error_Message (User_Name : in String) is
       begin
           Log.Put_Line
              (Message  => "Unable to create user """ & User_Name & """",
               Kind     => Profile.Error_Msg,
               Response => Profile.Get);
       end Output_Error_Message;

       ----------------------------------------
       procedure Output_Closing_Message_For_Errors is
       begin
           Log.Put_Line
              (Message  => "[end of Build_Training_Users--error(s) detected]",
               Kind     => Profile.Auxiliary_Msg,
               Response => Profile.Get);
       end Output_Closing_Message_For_Errors;

       ----------------------------------------
       function Current_Library (Of_Object : String) return String is
           All_Objects : Object.Iterator :=
              Naming.Resolution (Name         => Of_Object,
                                 Context      => Naming.Default_Context,
                                 Objects_Only => True);
           An_Object   : Object.Handle;
       begin
           An_Object := Object.Value (All_Objects);
           return Naming.Unique_Full_Name (The_Object => An_Object);
       end Current_Library;

       ----------------------------------------

   begin

       -- Step 4: Set the job response profile to be the value
       -- specified in the Response parameter of your procedure.

       Profile.Set (Profile => Current_Job_Profile);

       -- Step 5: Make sure subprograms called by your procedure
       -- use the appropriate response characteristics. Generally, you
       -- should cause them to use the job response profile, by specifying
       -- the value <PROFILE> or Profile.Get to their Response parameters.

       Log.Put_Line (Message  =>
                        "[Build_Training_Users (First_User_Number => " &
                           String_Utilities.Number_To_String
                              (First_User_Number) & ", Last_User_Number => " &
                           String_Utilities.Number_To_String
                              (Last_User_Number) &
                           ", Username_Prefix => """ & Username_Prefix &
                           """, Response => """ & Response & """);]",
                     Kind     => Profile.Auxiliary_Msg,
                     Response => Profile.Get);

       declare

           Context              : constant String :=
              String_Utilities.Capitalize (Current_Library ("$"));
           Course               : constant String :=
              String_Utilities.Capitalize
                 (Naming.Simple_Name (Naming.Prefix (Context)));
           Master_Full_Pathname : constant String :=
              String_Utilities.Capitalize ("!Users." & Course & "_Master");

       begin

           -- Enable privileges (required to create users).

           Operator.Enable_Privileges (Enable => True);

           if Operator.Privileged_Mode /= True then
               Log.Put_Line (Message  => "You must have operator capability" &
                                            " to create training users",
                             Kind     => Profile.Error_Msg,
                             Response => Profile.Get);
               Output_Closing_Message_For_Errors;
               --
               -- Step 7: Reset the job response profile at every place
               -- from which your procedure may return to the calling job,
               -- including premature returns when errors are encountered.
               --
               Profile.Set (Profile => Old_Job_Profile);
               return;
           end if;

           if First_User_Number > Last_User_Number then
               Log.Put_Line (Message  =>
                                "The First_User_Number must be 'less than'" &
                                   " or 'equal to' the Last_User_Number",
                             Kind     => Profile.Error_Msg,
                             Response => Profile.Get);
               Output_Closing_Message_For_Errors;
               --
               -- Step 7: Reset the job response profile at every place
               -- from which your procedure may return to the calling job,
               -- including premature returns when errors are encountered.
               --
               Profile.Set (Profile => Old_Job_Profile);
               return;
           end if;

           for User_Count in First_User_Number .. Last_User_Number loop
               declare
                   User_Number         : constant String :=
                      String_Utilities.Number_To_String (User_Count);
                   User_Name           : constant String :=
                      Username_Prefix & "_" & User_Number;
                   Users_Full_Pathname : constant String :=
                      String_Utilities.Capitalize ("!Users." & User_Name);
               begin

                   -- Step 5: Make sure subprograms called by your
                   -- procedure use the appropriate response characteristics.
                   -- Below you want the Operator.Create_User procedure to
                   -- raise an exception when errors are encountered so that
                   -- your command can track the error and generate a message
                   -- indicating exactly which call(s) to Create_User
                   -- resulted in error(s).

                   Operator.Create_User
                      (User     => User_Name,
                       Password => User_Name,
                       Volume   => 0,
                       Response => "Raise_Error, <PROFILE>");

               exception
                   when others =>
                       Errors_Detected := True;
                       --
                       -- Step 6: Define the behavior of your procedure
                       -- based on the values in the job response profile.
                       --
                       case (Profile.Reaction (Profile.Get)) is
                           when Profile.Quit =>
                               Output_Error_Message (User_Name);
                               Output_Closing_Message_For_Errors;
                               raise Quit;
                           when Profile.Propagate =>
                               Output_Error_Message (User_Name);
                               Output_Closing_Message_For_Errors;
                               raise Propagate;
                           when Profile.Persevere =>
                               Output_Error_Message (User_Name);
                           when Profile.Raise_Error =>
                               Output_Error_Message (User_Name);
                       end case;
               end;
           end loop;

           if (Errors_Detected) then
               Output_Closing_Message_For_Errors;
           else
               Log.Put_Line
                  ("[end of Build_Training_Users--no errors detected]",
                   Kind     => Profile.Auxiliary_Msg,
                   Response => Profile.Get);
           end if;

           -- Step 7: Reset the job response profile before returning to
           -- the calling job.

           Profile.Set (Profile => Old_Job_Profile);

       end;

   exception
       --
       -- Step 7: Reset the job response profile at every place
       -- from which your procedure may exit, including when exceptions
       -- are encountered.
       --
       when Propagate =>
           Profile.Set (Profile => Old_Job_Profile);
           raise;
       when Quit =>
           Profile.Set (Profile => Old_Job_Profile);
           null;
       when others =>
           Log.Put_Line (Message  =>
                            "Encountered an unexpected " & "exception: " &
                               Debug_Tools.Get_Exception_Name,
                         Kind     => Profile.Exception_Msg,
                         Response => Profile.Get);
           Output_Closing_Message_For_Errors;
           Profile.Set (Profile => Old_Job_Profile);
           if Profile.Propagate (Response => Profile.Get) then
               raise;
           end if;

   end Build_Training_Users_Too;


 Method II

 Another method for making your commands take their response
 characteristics from a response profile is to base the behavior of your
 command on the value specified through its Response parameter and pass this
 value to any other subprograms called by your command.

 The main advantage of this method is that you do not change the job
 response profile for the current job. Thus, you don't have to save the job
 response profile for the calling job and reset it at the end of your
 command to avoid affecting other commands in the current job.

 However, there are two disadvantages to using this method:

 *  If your command calls Environment subprograms that have a Response
    parameter, you need to pass the response characteristics specified to
    the Response parameter of your command to each of these subprograms.

 *  If your command calls Environment subprograms that do not have a
    Response parameter, those subprograms will not inherit these response
    characteristics. Environment subprograms that do not have Response
    parameters will continue to use the job response profile, which has not
    been changed since your command began.


 Instructions for Method II

 The following instructions describe how to use method II in your
 procedures. They are followed by an example that uses method II in the
 same program shown above under method I.

 1. Give your command a Response parameter that accepts a string value. The
    recommended default value is "<PROFILE>", which copies the response
    characteristics from the job response profile for the current job:

      procedure Build_Training_Users
                (First_User_Number : in Positive  := 1;
                 Last_User_Number  : in Positive;
                 Username_Prefix   : in String    := "Advanced";
                 Response          : in String    := "<PROFILE>") is

 2. Convert the value of the Response parameter to a variable of type
    Profile.Response_Profile:

      Response_Value : Profile.Response_Profile :=
                                           Profile.Value (Response);

    You will need this value if you call subprograms, such as Log.Put_Line,
    that have a Response parameter that accepts only values of type
    Profile.Response_Profile.

 3. Make sure any subprograms called by your command use appropriate
    response characteristics:

    a. Usually you will want subprograms you call to use the same response
       characteristics as your command. In this case, you should pass the
       value specified to the Response parameter of your command to these
       subprograms, using the value Response or Response_Value:

         Operator.Create_User (User     => User_Name,
                               Password => User_Name,
                               Volume   => 0,
                               Response => Response);

         Log.Put_Line (Message  => "Command has completed",
                       Kind     => Profile.Auxiliary_Msg,
                       Response => Response_Value);

    b. In certain situations, you may want subprograms you call to use
       other response characteristics. For example, you may want them to
       raise an exception if they encounter errors so that you have more
       control over the error and exception handling of those subprograms.

    Note that Environment-defined commands that do not have a Response
    parameter automatically use the response characteristics in the job
    response profile for the current job and therefore cannot be instructed
    to use other response characteristics. Similarly, your command may
    call user-defined subprograms for which the response characteristics
    cannot be changed.

 4. When appropriate, base command behavior on the values in the Response
    parameter of your subprogram. For example, you may have something like
    the following in your subprogram so that when it encounters errors, it
    bases its behavior on the error-reaction component of the Response
    parameter:

      if Profile.Reaction (Response_Value) = Profile.Raise_Error
        then
          Log.Flush;
          raise Propagate;
      else
          raise Quit;
      end if;


 Example Using Method II

 The following procedure, used by some Rational technical representatives
 to create multiple users for Rational training, is the same as the one
 shown in the example for method I. The comments indicate how facilities
 from package Profile are used in this version according to method II
 outlined above.

   with Debug_Tools;
   with Directory_Tools;
   with Log;
   with Operator;
   with Profile;
   with String_Utilities;

   -- Step 1: Give your procedure a Response parameter that accepts a
   -- string value, with the default value <PROFILE>.

   procedure Build_Training_Users_Too
                (First_User_Number : in Positive := 1;
                 Last_User_Number  : in Positive;
                 Username_Prefix   : in String   := "Advanced";
                 Response          : in String   := "<PROFILE>") is

       package Naming renames Directory_Tools.Naming;
       package Object renames Directory_Tools.Object;

       -- Step 2: Change the string value in the Response parameter to
       -- a variable of type Profile.Response_Profile.

       Response_Value : Profile.Response_Profile := Profile.Value (Response);

       Errors_Detected : Boolean := False;
       Quit            : exception;
       Propagate       : exception;

       ----------------------------------------
       procedure Output_Error_Message (User_Name : in String) is
       begin
           Log.Put_Line
              (Message  => "Unable to create user """ & User_Name & """",
               Kind     => Profile.Error_Msg,
               Response => Response_Value);
       end Output_Error_Message;

       ----------------------------------------
       procedure Output_Closing_Message_For_Errors is
       begin
           Log.Put_Line
              (Message  => "[end of Build_Training_Users--error(s) detected]",
               Kind     => Profile.Auxiliary_Msg,
               Response => Response_Value);
       end Output_Closing_Message_For_Errors;

       ----------------------------------------
       function Current_Library (Of_Object : String) return String is
           All_Objects : Object.Iterator :=
              Naming.Resolution (Name         => Of_Object,
                                 Context      => Naming.Default_Context,
                                 Objects_Only => True);
           An_Object   : Object.Handle;
       begin
           An_Object := Object.Value (All_Objects);
           return Naming.Unique_Full_Name (The_Object => An_Object);
       end Current_Library;

       ----------------------------------------

   begin

       -- Step 3: Make sure subprograms called by your procedure
       -- use the appropriate response characteristics. Generally, you
       -- should cause them to use the response characteristics specified
       -- to the Response parameter of this procedure. Recall that
       -- Response is the string form and that Response_Value is the
       -- internal (type Profile.Response_Profile) form.

       Log.Put_Line (Message  =>
                        "[Build_Training_Users (First_User_Number => " &
                           String_Utilities.Number_To_String
                              (First_User_Number) & ", Last_User_Number => " &
                           String_Utilities.Number_To_String
                              (Last_User_Number) &
                           ", Username_Prefix => """ & Username_Prefix &
                           """, Response => """ & Response & """);]",
                     Kind     => Profile.Auxiliary_Msg,
                     Response => Response_Value);

       declare

           Context              : constant String :=
              String_Utilities.Capitalize (Current_Library ("$"));
           Course               : constant String :=
              String_Utilities.Capitalize
                 (Naming.Simple_Name (Naming.Prefix (Context)));
           Master_Full_Pathname : constant String :=
              String_Utilities.Capitalize ("!Users." & Course & "_Master");

       begin

           -- Enable privileges (required to create users).

           Operator.Enable_Privileges (Enable => True);

           if Operator.Privileged_Mode /= True then
               Log.Put_Line (Message  => "You must have operator capability" &
                                            " to create training users",
                             Kind     => Profile.Error_Msg,
                             Response => Response_Value);
               Output_Closing_Message_For_Errors;
               return;
           end if;

           if First_User_Number > Last_User_Number then
               Log.Put_Line (Message  =>
                                "The First_User_Number must be 'less than'" &
                                   " or 'equal to' the Last_User_Number",
                             Kind     => Profile.Error_Msg,
                             Response => Response_Value);
               Output_Closing_Message_For_Errors;
               return;
           end if;

           for User_Count in First_User_Number .. Last_User_Number loop
               declare
                   User_Number         : constant String :=
                      String_Utilities.Number_To_String (User_Count);
                   User_Name           : constant String :=
                      Username_Prefix & "_" & User_Number;
                   Users_Full_Pathname : constant String :=
                      String_Utilities.Capitalize ("!Users." & User_Name);

               begin

                   -- Step 3: Make sure subprograms called by your procedure
                   -- use the appropriate response characteristics. Below you 
                   -- want the Operator.Create_User procedure to raise an 
                   -- exception when errors are encountered so that your
                   -- procedure can track the error and generate a message
                   -- indicating exactly which call(s) to Create_User 
                   -- resulted in error(s).

                   Operator.Create_User
                      (User     => User_Name,
                       Password => User_Name,
                       Volume   => 0,
                       Response => "Raise_Error, Response");

               exception
                   when others =>
                       Errors_Detected := True;
                       --
                       -- Step 4: Define the behavior of your procedure
                       -- based on the values specified in its Response
                       -- parameter.
                                                                           

                       --
                       case (Profile.Reaction (Response_Value)) is
                           when Profile.Quit =>
                               Output_Error_Message (User_Name);
                               Output_Closing_Message_For_Errors;
                               raise Quit;
                           when Profile.Propagate =>
                               Output_Error_Message (User_Name);
                               Output_Closing_Message_For_Errors;
                               raise Propagate;
                           when Profile.Persevere =>
                               Output_Error_Message (User_Name);
                           when Profile.Raise_Error =>
                               Output_Error_Message (User_Name);
                       end case;
               end;
           end loop;

           if (Errors_Detected) then
               Output_Closing_Message_For_Errors;
           else
               Log.Put_Line
                  ("[end of Build_Training_Users--no errors detected]",
                   Kind     => Profile.Auxiliary_Msg,
                   Response => Response_Value);
           end if;
       end;

   exception
       when Propagate =>
           raise;
       when Quit =>
           null;
       when others =>
           Log.Put_Line (Message  =>
                            "Encountered an unexpected " & "exception: " &
                               Debug_Tools.Get_Exception_Name,
                         Kind     => Profile.Exception_Msg,
                         Response => Response_Value);
           Output_Closing_Message_For_Errors;
           --
           -- Step 4: Define the behavior of this procedure based on the
           -- the value specified in its Response parameter.
           --
           if Profile.Propagate (Response => Response_Value) then
               raise;
           end if;

   end Build_Training_Users_Too;


 SETTING A JOB RESPONSE PROFILE

 You can use procedures from package Profile to set components of a job
 response profile programmatically within applications you are creating or
 interactively from command windows. When you use procedures from package
 Profile to set a job response profile, the procedure automatically sets the
 job response profile for the current job. This value is discarded when the
 job completes execution.

 Note that only commands that take their response characteristics from the
 job response profile (generally indicated by "<PROFILE>" in the Response
 parameter of the command) are affected by these settings.

 The following subsections describe the commands from package Profile that
 are available for:

 *  Setting a complete job response profile

    -  Through string values that represent profiles or their components

    -  Through the internal representations of profiles or their components

 *  Setting individual components of a job response profile


 Setting a Complete Profile through a String Value

 To set all the components of a job response profile through a string value,
 you can use the Set procedure. The Set procedure accepts string values
 similar to those accepted by the Response parameter of Environment
 commands. This string can:

 *  Specify a predefined profile

 *  Specify an arbitary set of components


 Specifying a Predefined Profile

 The Set command accepts special values such as "<SESSION>", "<DEFAULT>",
 and "<ERRORS>" to cause the job response profile to copy its components
 from an Environment-defined response profile. These special values are 
 described in "Environment-Defined Response Profiles," page nn.


 Specifying an Arbitrary Set of Components

 Sometimes you want to set the job response profile to include a set of
 components for which there is no Environment-defined profile. In this case,
 you can specify a series of option specifications to the Set command,
 indicating a value for each component. You can also combine option
 specifications with a special value to tailor the components from a
 predefined profile. Each option specification overrides an individual
 component in the profile.

 For example, assume that you want the output for a particular job to be
 255 characters wide to allow long messages to fit onto single lines.
 Assume further that this is the only change you want to make to the
 characteristics initially inherited from the session response profile for
 the current session. The following command sets the job response profile
 for the current job accordingly (note that individual option specifications
 and the special value are separated by commas):

   Profile.Set (Profile => "Width=>255, <SESSION>",
                Status  => Profile_Set_Status);

 Note when using options specifications that if you do not include a value
 for a particular component, that component assumes a null value. This may
 cause unwanted (or at least unexpected) command behavior. For this
 reason, it is often a good idea to combine options specifications with a
 special value, such as "<SESSION>".

 Whereas the previous example sets all the components, the following
 command provides the job response profile with only one component--namely,
 that of output width. Because no other components are specified, the job
 response profile assumes the null value for all other components. Thus,
 commands that use the response characteristics in this profile generate
 no messages, have no instructions for responding to errors, and have no
 activity to use (should they need one):

   Profile.Set (Profile => "Width=>255",
                Status  => Profile_Set_Status);

 Notice that when using the Set command, you must supply a value of type
 !Tools.Simple_Status.Condition to the Status parameter. This value is used
 by the Environment to return information if errors are encountered during
 execution. You can use the Log.Put_Condition procedure to write this status
 to the log file (see package Log in this book).

 For further information about specifying a complete set of response
 characteristics through a string value, see the information about the
 Response parameter in Parameter-Value Conventions in the Reference Summary
 (RS) book.


 Setting a Complete Profile through the Internal Representation

 When you are manipulating profiles programmatically, it is often easier to
 set the job response profile for the current job through the internal
 representation. Using the internal representation is especially useful
 when you want to copy the complete profile or some of its components from
 existing profiles.

 In particular, commands in package Profile allow you to:

 *  Specify a predefined profile

 *  Specify an arbitary set of components


 Specifying a Predefined Profile

 Package Profile provides a Set procedure that accepts values of type
 Response_Profile, which is the internal representation of a complete
 profile.

 Using the Set procedure, you can set the job response profile to be a
 profile you have defined in your application or one of the three basic
 Environment-defined profiles. You can specify Environment-defined
 profiles to the Set procedure by using the following functions:

 *  Default_Profile returns the system default profile.

 *  Get_Default returns the session response profile for the current
    session.

 *  Get returns the job response profile for the current job.

 For example, the following procedure sets the job response profile for the
 current job to the system default profile:

   Profile.Set (Profile => Profile.Default_Profile);


 Specifying an Arbitrary Set of Components

 To set the job response profile through an arbitrary set of components, you
 can use the Set_Response procedure. The Set_Response procedure is
 especially useful when you want to take profile components from more than
 one source.

 For example, suppose you want the job response profile for the current job
 to:

 *  Include the Propagate error reaction, which causes commands to stop
    executing at the first error and raise an exception

 *  Include a line width of 255 columns

 *  Obtain the values for all other components from the session response
    profile for the current session

 The following procedure sets the job response profile accordingly:

   Profile.Set_Response
               (Reaction => Profile.Propagate,
                Filter   => Profile.Filter (Profile.Get_Default),
                Prefixes => Profile.Prefixes (Profile.Get_Default),
                Width    => 255,
                Activity => Profile.Activity (Profile.Get_Default),
                Log_File => Profile.Log_File (Profile.Get_Default));

 Note that the Set_Response procedure does not have parameters through
 which you can specify the remote-passwords and remote-sessions files to be
 used. Instead, the profile built by this procedure assumes a null value
 for each of these files. If you need to set a remote-passwords or
 remote-sessions file for a job, you can either use a different procedure to
 set the job response profile or use the Set_Remote_Passwords or
 Set_Remote_Sessions procedures after this procedure.

 For further information about providing parameter values to the
 Set_Response procedure, see "Obtaining Profiles and Profile Components,"
 page nn, or the reference entries for types Activity_Type, Error_Reaction,
 Log_File, Log_Filter, and Log_Prefixes.


 Setting Individual Components

 Package Profile provides a variety of procedures you can use to set
 individual components of the job response profile for the current job:

 Include                      Set_Activity
 Set_Filter                   Set_Log_File
 Set_Prefixes                 Set_Reaction
 Set_Remote_Passwords         Set_Remote_Sessions
 Set_Width

 The Include procedure sets the value for a single message kind in the
 log-filter component of the job response profile. The other procedures set
 the component indicated in the procedure's name. These procedures affect
 only the component indicated; they do not affect any other components in
 the profile.

 For information about using these commands, including information about
 the values accepted by each, see the reference entries in this package.


 SETTING A SESSION RESPONSE PROFILE

 The session response profile for a particular session defines the default
 response characteristics to be used by commands executing in that session.
 More specifically, the session response profile for a session is used to
 initialize each job response profile associated with a job running under
 that session. Since most commands use the response characteristics
 defined in the job response profile for the current job, the session
 response profile serves to provide the default response characteristics for
 most commands.

 The component values of a session response profile are represented by a
 group of session switches with the prefix "Profile." Thus, to set your
 session response profile interactively, edit the appropriate session 
 switches. For further information, see Chapter 2, "Job Characteristics 
 and Behavior," or Session Switches in this book.

 To set a session response profile from within applications you are
 creating, you can call commands from this package. When you use commands
 from package Profile to set a session response profile, the command
 automatically sets the profile for the current session. This value is
 reflected in the switch file for that session and is saved and available
 for use in subsequent logins. Most profile components take effect
 immediately; however, the remote-passwords and remote-sessions files take
 effect only at login.

 Note that only commands that take their response characteristics from a
 job response profile that has not been changed since the job began or
 that take their response characteristics directly from the session
 response profile (generally indicated by "<SESSION>" in the Response
 parameter of the command) are affected by these settings.

 The following subsections describe the commands from package Profile for:

 *  Setting a complete session response profile

 *  Setting individual components of a session response profile


 Setting a Complete Session Response Profile

 Package Profile provides three procedures for setting all the components of
 a session response profile in a single step:

 *  The Set_Default procedure accepts string values similar to those
    accepted by the Response parameter of many Environment commands.

 *  Two procedures accept the internal representations of profiles or their
    components:

    -  A Set_Default procedure accepts values of type Response_Profile,
       which is the internal representation of a complete profile.

    -  The Set_Default_Response procedure accepts a set of values, each
       representing an individual component.

 As noted, these procedures differ only in the way you specify the new
 profile. Each procedure is similar to the corresponding Set or Set_Response
 command used for setting a job response profile. For more information about
 the values accepted by these procedures, see "Setting a Job Response
 Profile," page nn.


 Setting Individual Components of a Session Response Profile

 Package Profile provides a variety of procedures you can use to set
 individual components of the session response profile for the current
 session:

 Include_In_Default                Set_Default_Activity
 Set_Default_Filter                Set_Default_Log_File
 Set_Default_Prefixes              Set_Default_Reaction
 Set_Default_Remote_Passwords      Set_Default_Remote_Sessions
 Set_Default_Width

 These procedures are similar to the commands used for setting individual
 components of a job response profile. For more information about using
 these commands and the values they accept, see the reference entries in
 this package.


 OBTAINING PROFILES AND PROFILE COMPONENTS

 Package Profile provides a variety of functions that return a complete
 profile or a particular component of a profile. You can use these functions
 in your applications to query the job and session response profiles and
 determine behavior accordingly. You also can use these functions to
 supply values to the procedures that set profiles and profile components.

 The following subsections contain information about:

 *  Obtaining a complete response profile

 *  Obtaining a single component of a response profile

 *  Querying about particular components of a profile


 Obtaining a Complete Profile

 Package Profile provides several functions that return a complete response
 profile:

 *  Get returns either the string or the internal representation of the job
    response profile for the current job.

 *  Get_Default returns either the string or the internal representation of
    the session response profile for the current session.

 *  Default_Profile returns the internal representation of the system
    default profile.

 *  Response and its renames (Ignore, Nil, Raise_Exception, Response,
    Verbose, and Warn) build a profile from the component values you
    specify and return the internal representation of that profile (see
    "Building Your Own Profiles," page nn).

 Notice that there are two forms each of the Get and Get_Default functions.
 One form of the function returns a string value suitable for writing to a
 file or passing to another command that requires the string representation
 of a profile. For example, if you wanted to write the session response
 profile for your current session to the message window, you could execute
 the following command:

   Io.Echo (Profile.Get_Default);

 The other form of the Get and Get_Default functions returns a value of
 type Response_Profile suitable for providing to most of the procedures
 and functions in this package. Functions that return the internal
 representation of a profile are especially useful for specifying a profile
 to functions that return individual profile components (described in the
 following subsection).


 Obtaining Individual Components of a Profile

 Package Profile provides a set of functions that return the component
 indicated in the name of the function:

 Activity                        Default_Activity
 Default_Remote_Passwords        Default_Remote_Sessions
 Filter                          Log_File
 Prefixes                        Reaction
 Remote_Passwords                Remote_Sessions
 Width

 Functions that have names beginning with the word "Default" return the
 indicated component of the session response profile for the current
 session. All other functions return the indicated component of the
 specified profile (by default, the job response profile for the current job).

 These functions are especially useful:

 *  To determine particular aspects of behavior within your application,
    such as error reaction, based on the job or session response profile
    of the executing user

 *  As parameter values for:

    -  Procedures such as Set_Response that set profiles through a series of
       components

    -  Other functions such as Response that build profiles from a series of
       components.

 For example, when your application encounters an error, you may want it to
 determine behavior based on the error-reaction characteristic specified
 in the job response profile for the current job. Assume that, at the very
 least, you want it to generate a different closing message depending on
 whether errors were encountered and raise an exception if the job
 response profile specifies that it should. In this case, you could include a
 series of if statements such as the following:

   if <errors were detected> then
       if Profile.Reaction (Profile.Get) = Profile.Raise_Error then
           Log.Flush (Response => Profile.Get);
           Profile.Set (Response => Old_Job_Profile);
           raise Propagate;
       end if;

   else

       Log.Put_Line (Message  => "[Operation has completed " &
                                 "-- no errors detected]",
                     Kind     => Profile.Auxiliary_Msg,
                     Response => Profile.Get);
   end if;

   Log.Flush (Response => Profile.Get);
   Profile.Set (Response => Old_Job_Profile);
   raise Quit;


 Querying about Particular Components of a Profile

 Package Profile also provides procedures that query about particular
 components of a response profile:

 *  Propagate returns True if commands that use the specified profile raise
    an exception when errors are encountered--that is, if the
    error-reaction component of the specified profile is Propagate or
    Raise_Error.

 *  Persevere returns True if commands that use the specified profile
    continue executing when errors are encountered--that is, if the
    error-reaction component of the specified profile is Persevere or
    Raise_Error.

 *  Includes returns True if the log-filter component of the specified profile
    contains the specified message kind.


 BUILDING YOUR OWN PROFILES

 In addition to the three basic profiles, the Environment allows you to
 build your own profiles for use in your applications. You can define your
 profiles through either the string or the internal representation.


 Through a String Value

 You can build your own profiles using string values similar to those
 accepted by the Response parameter of Environment-defined commands. For
 example, at the beginning of your application, you can define your own
 profile, Local_Profile, as shown below:

   Local_Profile : String :=
             ("PROPAGATE, ***, ++*, %%%, !!!," &
              "Width=>80, Use_Error, Prefixes=>Symbols," &
              "Activity=>!Machine.Release.Current.Activity," &
              "Remote_Passwords => <NIL>, Remote_Sessions => <NIL>");

 Within your application, you can then set this profile to be the job
 response profile (as in method I on page nn), or you could pass this
 profile to subprograms you call (as in method II on page nn).

 Note that if you do not include a value for a particular component, that
 component assumes a null value. This may cause unwanted (or at least
 unexpected) command behavior.

 For further information about the string representation of profiles, see
 the discussion of the Response parameter in Parameter-Value Conventions
 in the Reference Summary (RS) book.


 Through the Internal Representation

 You can use the Response function to build your own profiles using the
 internal representation of profile components. The Response function builds
 a profile from the series of component values you specify and then returns
 the internal representation of that profile.

 By default, the Response function builds a profile that has the same
 components as the job response profile for the current job; however, you
 can specify other component values. You also can use the following
 functions, which rename the Response function with different default
 values:

 *  Ignore

 *  Nil

 *  Raise_Exception

 *  Verbose

 *  Warn

 The Response function and its renames are especially useful when you want
 to combine profile components from several other profiles into a new profile.

 For example, suppose you want a profile that copies all of its components
 from the job response profile for the current job except the error reaction
 and the line width. Instead, the profile is to include the Propagate error
 reaction and a line width of 255 columns. The following procedure builds
 the profile accordingly and assigns it to a variable of type
 Response_Profile:

   Local_Profile : Profile.Response_Profile := Response
                   (Reaction => Profile.Propagate,
                    Filter   => Profile.Filter (Profile.Get),
                    Prefixes => Profile.Prefixes (Profile.Get),
                    Width    => 255,
                    Activity => Profile.Activity (Profile.Get));

 Within your application, you then can set this profile to be the job
 response profile (as in method I on page nn), or you could pass this
 profile to subprograms you call (as in method II on page nn).

 Note: You cannot set a remote-passwords or a remote-sessions file through
 these functions. To set remote-passwords and remote-sessions files, you can
 use the Set_Remote_Passwords and Set_Remote_Sessions procedures.


 CONVERTING BETWEEN PROFILE REPRESENTATIONS

 Several commands in package Profile have two forms: one that manipulates
 the profile through the string representation and one that manipulates the
 profile through the internal representation. For example, the Get function,
 which returns the job response profile for the current job, returns either
 a string value or a value of type Response_Profile, depending on how it is
 used.

 However, many other commands do not have two forms. When using these com-
 mands, you may need to convert between the string and internal
 representations of a profile. To do so, you can use one of three commands:

 *  Image returns the string representation of the specified profile.

 *  Convert returns the internal representation of the specified profile.

 *  Value is the functional form of the Convert procedure.

 For example, assume that you need the string representation of the system
 default profile. Package Profile provides only the Default_Profile function,
 which returns a value of type Response_Profile. To convert this value to a
 string value and write it to the message window, you could execute the
 following command:

   Io.Echo (Profile.Image (Profile.Default_Profile));

 In contrast, assume that you want to create your own profile and assign it
 to a variable of type Response_Profile that can be easily referenced
 programmatically. You could define your own profile, Current_Profile, as
 shown below:

   Current_Profile : Profile.Response_Profile := Profile.Value
                   ("Width=>70, ~:::," &
                    "Activity=>!Machine.Release.Current.Activity," &
                    "<DEFAULT>");
                          


 @node !Tools.Profile.Activity

 function Activity (Response : Response_Profile := Profile.Get)
                                            return Activity_Type;


 DESCRIPTION

 Returns the value of the activity component of the specified profile.

 The activity component specifies the activity file to be used for mapping
 between subsystems and specific releases of those subsystems. For further
 information about activities, see the Project Management (PM) book.

 To obtain the value of the activity component in the session response
 profile, use the Default_Activity function.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile from which to return the activity component. The
 default is the job response profile for the current job.


 return Activity_Type;

 Returns the value of the activity component.


 REFERENCES

 subtype Activity_Type
 function Default_Activity
 procedure Set_Activity
 procedure Set_Default_Activity
 Project Management (PM)



 @node !Tools.Profile.Activity_Type

 subtype Activity_Type is Directory.Object;


 DESCRIPTION

 Defines a representation for an activity.

 This subtype defines the value for the activity component of a response
 profile. It is a subtype of type !Implementation.Directory.Object, which is
 an implementation detail of the Environment library system. For further
 information, see your Rational technical representative.

 An activity defines mappings between subsystems and specific releases of
 those subsystems. For further information about activities, see the
 Project Management (PM) book.


 REFERENCES

 Project Management (PM)



 @node !Tools.Profile.Cached_Selected_Text
                                                                          
 function Cached_Selected_Text return String;


 DESCRIPTION

 Returns a string representing the selected text as cached at job
 initialization.

 Certain information is cached at job initialization. For example, the
 resolutions of the special names are cached. This function can be used to
 obtain the resolution of the selected text. The cursor need not be in the
 selection.


 PARAMETERS

 return String;

 Returns a string representing the selected text.


 REFERENCES

 procedure Get_Cached_Resolution



 @node !Tools.Profile.Convert

 procedure Convert (Image    :        String;
                    Response :    out Response_Profile;
                    Status   : in out Simple_Status.Condition);


 DESCRIPTION

 Converts from the string representation of a profile to the internal
 representation.

 The functional version of this operation is called Value. To convert from
 the internal representation of a profile to the string representation, use
 the Image procedure.

 For further information about the representation of profiles, see the
 introduction to this package.


 PARAMETERS

 Image : String;

 Specifies the string representation of a profile.


 Response : out Response_Profile;

 Specifies the internal representation of the profile specified by the Image
 parameter.


 Status : in out Simple_Status.Condition;

 Returns the status indicating that the procedure has executed correctly
 or, if there is an error, a message indicating the type of error. To
 convert the status to a string representation and enter it into the log
 file, use the Log.Put_Condition procedure.


 REFERENCES

 procedure Image
 function Value
 procedure Log.Put_Condition
 Programming Tools (PT), package Simple_Status



 @node !Tools.Profile.Default_Activity

 function Default_Activity return Activity_Type;


 DESCRIPTION

 Returns the value of the activity component of the session response profile
 for the current session.

 An activity defines mappings between subsystems and specific releases of
 those subsystems. For further information about activities, see the
 Project Management (PM) book.

 To obtain the value of the activity component of the job response profile,
 use the Activity function.


 PARAMETERS

 return Activity_Type;



 Returns the value of the activity component.


 REFERENCES

 subtype Activity_Type
 function Activity
 procedure Set_Default_Activity
 Project Management (PM)



 @node !Tools.Profile.Default_Filter

 Default_Filter : constant Log_Filter := Full;


 DESCRIPTION

 Defines a constant that represents the log-filter component of the system
 default profile.

 The system default filter is Full. The Full filter specifies that the
 following message types should be put in the log file: auxiliary (:::),
 note (---), positive (+++), position (>>>), negative (++*), warning (!!!),
 error (***), exception (%%%), sharp (###), at (@@@), and dollar ($$$).
 This filter does not include debug messages (???). (For further information
 on types of messages, see the Msg_Kind type.)

 This filter is used to initialize the log-filter component of the session
 response profile for each user's default session (S_1).


 REFERENCES

 function Default_Profile
 type Msg_Kind



 @node !Tools.Profile.Default_Log_File

 Default_Log_File : constant Log_Output_File := Use_Output;
 

 DESCRIPTION

 Defines a constant that represents the log-file component of the system
 default profile.

 The system default log file is Use_Output, which directs log output to
 Current_Output. By default, Current_Output is an Environment output
 window. This log file is used if a different log file is not specified in the
 session or job response profile.

 This file is used to initialize the log-file component of the session
 response profile for each user's default session (S_1).


 REFERENCES

 function Default_Profile
 type Log_Output_File



 @node !Tools.Profile.Default_Prefixes

 Default_Prefixes : constant Log_Prefixes
                                := (Yr_Mn_Dy, Hr_Mn_Sc, Symbols);
 

 DESCRIPTION

 Defines a constant that represents the prefixes component of the system
 default profile.

 The prefixes component specifies the set of prefixes to be used when messages
 are inserted into the log file. The system default prefixes are Yr_Mn_Dy,
 Hr_Mn_Sec, and Symbols. This set of prefixes is used if a different set
 is not specified in the session or job response profile.

 For further information, see the Log_Prefix and Log_Prefixes types.


 REFERENCES

 function Default_Profile
 type Log_Prefix
 type Log_Prefixes



 @node !Tools.Profile.Default_Profile

 function Default_Profile return Response_Profile;


 DESCRIPTION

 Returns the internal representation of the system default profile.

 This is the profile that is used by the Environment to initialize the
 session response profile for each user`s default session (S_1).

 The system default profile is the aggregate of all of the default constants
 defined in this package. The components for the system default profile are:

 *  Error reaction: The command should persevere.

 *  Log filter: Auxiliary (:::), note (---), positive (+++), position (>>>),
    negative (++*), warning (!!!), error (***), exception (%%%), sharp
    (###), at (@@@), and dollar ($$$) messages should be included in the
    log file.

 *  Log prefixes: Each log message is to be preceded by the Yr_Mn_Dy,
    Hr_Mn_Sc, and Symbols prefixes (the Symbols prefix indicates the type of
    message put in the log).

 *  Line width: The width of log messages before they are wrapped is 77
    characters. Messages that have been wrapped are prefixed with the
    ellipsis (...) symbol.

 *  Log file: The log file should be sent to Current_Output, which is, by
    default, an Environment output window.

 *  Activity: Specifies that none should be used.

 *  Remote-passwords file: Specifies that none should be used.

 *  Remote-sessions file: Specifies that none should be used.


 PARAMETERS

 return response_profile;

 Returns the internal representation of the system default profile.


 REFERENCES

 constant Default_Filter
 constant Default_Log_File
 constant Default_Prefixes
 constant Default_Reaction
 constant Default_Width
 type Error_Reaction
 type Log_Output_File
 type Log_Prefix
 type Log_Prefixes
 type Msg_Kind



 @node !Tools.Profile.Default_Reaction

 Default_Reaction : constant Error_Reaction := Persevere;


 DESCRIPTION

 Defines a constant that represents the error-reaction component of the
 system default profile.

 The system default error reaction is Persevere, which causes commands to
 continue executing without raising an exception when errors are
 encountered. This error reaction is used to initialize the error-reaction
 component of the session response profile for each user's default session
 (S_1).

 For further information, see type Error_Reaction.


 REFERENCES

 type Error_Reaction



 @node !Tools.Profile.Default_Remote_Passwords

 function Default_Remote_Passwords return Remote_Passwords_Type;
 

 DESCRIPTION

 Returns the value of the remote-passwords-file component of the session
 response profile for the current session.

 A remote-passwords file is a text file that specifies the usernames and
 passwords to be used when accessing remote machines. For further
 information, see package Remote_Passwords in this book.

 To obtain the value of the remote-passwords-file component of the job
 response profile, use the Remote_Passwords function.


 PARAMETERS

 return Remote_Passwords_Type;

 Returns the value of the remote-passwords-file component.


 REFERENCES

 function Remote_Passwords
 type Remote_Passwords_Type
 procedure Set_Default_Remote_Passwords
 package Remote_Passwords



 @node !Tools.Profile.Default_Remote_Sessions

 function Default_Remote_Sessions return Remote_Sessions_Type;


 DESCRIPTION

 Returns the value of the remote-sessions-file component of the session
 response profile for the current session.

 A remote-sessions file is a text file that specifies which session (or
 account) should be used when logging into a remote machine.

 To obtain the value of the remote-sessions-file component of the job
 response profile, use the Remote_Sessions function.


 PARAMETERS

 return Remote_Sessions_Type;

 Returns the value of the remote-sessions-file component.


 REFERENCES

 function Remote_Sessions
 type Remote_Sessions_Type
 procedure Set_Default_Remote_Sessions



 @node !Tools.Profile.Default_Width

 Default_Width : constant Natural := 77;


 DESCRIPTION

 Defines a constant that represents the line-width component of the system
 default profile.

 The line-width component specifies the maximum length of lines in the log
 file. If a log message is longer than the width defined in the profile, the
 log message is continued on the next line. Messages that have been
 continued are prefixed with the ellipsis (...) symbol.

 The system default width is 77 columns. This width is used to initialize
 the line-width component of the session response profile for each user's
 default session (S_1).


 REFERENCES

 function Default_Profile



 @node !Tools.Profile.Error

 Error : exception;
 

 DESCRIPTION

 Defines the exception raised when an error condition occurs in a command
 and the error reaction is defined to be Raise_Error.



 @node !Tools.Profile.Errors

 Errors : constant Log_Filter := Log_Filter'(Negative_Msg ..
                           Exception_Msg => True, others => False);
 

 DESCRIPTION

 Defines a log filter that allows only the following kinds of messages to be
 included in the log file: negative (++*), warning (!!!), error (***), and
 exception (%%%).

 This constant can be used in the Filter parameter of procedures, such as
 the Set_Response procedure, to specify that only these four types of
 messages should appear in the log file.


 REFERENCES

 constant Full
 type Log_Filter
 type Msg_Kind
 constant Quiet
 constant Summary
 constant Terse



 @node !Tools.Profile.Error_Reaction

 type Error_Reaction is (Quit, Propagate, Persevere, Raise_Error);
                           
   
 DESCRIPTION

 Defines the four different reactions to an error that a command can have.

 Commands respond, based on the specified error reaction, with respect to
 two dimensions:

 *  Perseverance: The first dimension determines whether the job stops at
    the first error or continues processing. Even when set to stop at the
    first error, when log messages are to be generated, the job continues
    processing long enough to print an error message.

 *  Exception propagation: The second dimension determines whether the job
    is to propagate an exception to its caller when it terminates a run in
    which errors have occurred. If processing has persevered, the Error
    exception is raised; otherwise, an exception related to the error
    that caused processing to stop is raised.

 This type defines four error reactions based on these two dimensions.


 ENUMERATIONS

 Persevere

 Specifies that the job continue executing as best it can after errors
 are discovered. No exception is raised. Note that even if the job is to
 stop at the first error or if the job is not to raise exceptions, error
 messages may have been accumulated for the job; these messages can be
 displayed using the Log.Put_System_Messages procedure.


 Propagate

 Specifies that the command terminate at its first error. An exception is
 raised. If no other exception is defined for the command, the Error
 exception is raised. Note that even if the job is to stop at the first
 error or if the job is not to raise exceptions, error messages may have
 been accumulated for the job; these messages can be displayed using the
 Log.Put_System_Messages procedure.


 Quit

 Specifies that the command terminate at its first error. No exception is
 raised.


 Raise_Error

 Specifies that the command continue executing as best it can after errors
 are discovered. At some point, an exception is raised. If no other
 exception is defined for the command, the Error exception is raised. Note
 that even if the job is to stop at the first error or if the job is not to
 raise exceptions, error messages may have been accumulated for the job;
 these messages can be displayed using the Log.Put_System_Messages
 procedure.



 @node !Tools.Profile.Filter

 function Filter (Response : Response_Profile := Profile.Get)
                                                 return Log_Filter;


 DESCRIPTION

 Returns the value of the log-filter component of the specified profile.

 The log-filter component represents a collection of Boolean values, one for
 each message kind. Messages of any kind whose value is True are included
 in the log file.

 To determine whether a particular message kind is included in the filter of
 a specified profile, you also can use the Includes function.

 To set the log-filter component in the job and session response profiles,
 use the Set_Filter and Set_Default_Filter procedures, respectively.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile from which the filter component is desired. The default
 is the job response profile for the current job.


 return Log_Filter;

 Returns the value of the filter component.


 REFERENCES

 procedure Include
 procedure Include_In_Default
 function Includes
 type Log_Filter
 subtype Msg_Kind
 procedure Set_Default_Filter
 procedure Set_Filter



 @node !Tools.Profile.Full

 Full : constant Log_Filter := Log_Filter'(Debug_Msg => False,
                                                   others => True);


 DESCRIPTION

 Defines a log filter that allows all messages except debug messages (denoted
 by ???) to be included in the log file.

 This constant can be used in the Filter parameter of procedures, such as
 the Set_Response procedure, to specify that all messages except
 debugging messages should appear in the log file.


 REFERENCES

 constant Errors
 type Log_Filter
 type Msg_Kind
 constant Quiet
 constant Summary
 constant Terse



 @node !Tools.Profile.Get

 function Get return Response_Profile;
 function Get return String;


 DESCRIPTION

 Returns the job response profile for the current job.

 This function returns the current job response profile. It can be used as a
 parameter to commands in the Environment to supply the current job
 response profile to those commands.

 The initial values of the job response profile are obtained from the
 session response profile. Thus, if the user has not explicitly set values
 in the job response profile, this function returns the same values as those
 contained in the session response profile.


 PARAMETERS

 return Response_Profile;

 Returns the internal representation of the job response profile.


 return String;

 Returns the string representation of the job response profile.


 REFERENCES

 procedure Set



 @node !Tools.Profile.Get_Cached_Resolution

 procedure Get_Cached_Resolution
              (Name            : String;
               The_Declaration : out Directory.Declaration;
               The_Object      : out Directory.Object;
               The_Version     : out Directory.Version;
               Status          : out Directory.Naming.Name_Status);


 DESCRIPTION

 Retrieves the resolution of the specified special name as cached at job
 initialization.

 Certain information is cached at job initialization. For example, the
 resolutions of the special names "<IMAGE>", "<CURSOR>", "<REGION>", and
 "<SELECTION>" are cached so that they are resolved consistently throughout
 the job. This procedure can be used to obtain the resolution of one of
 these special names.


 PARAMETERS

 Name : String;

 Specifies the special name for which the cached resolution is desired.
 Special names include: "<IMAGE>", "<CURSOR>", "<REGION>", and
 "<SELECTION>".


 The_Declaration : out Directory.Declaration;

 Returns the directory declaration.


 The_Object : out Directory.Object;

 Returns the directory object.


 The_Version : out Directory.Version;

 Returns the directory version.


 Status : out Directory.Naming.Name_Status;

 Returns the name status.


 REFERENCES

 function Cached_Selected_Text



 @node !Tools.Profile.Get_Default
                                                                           
 function Get_Default return Response_Profile;
 function Get_Default return String;


 DESCRIPTION

 Returns the session response profile for the current session.

 This function returns the current session response profile. It can be used
 as a parameter to commands in the Environment to supply the current
 session response profile to those commands.

 The initial values of the session response profile for each user's default
 session (S_1) are obtained from the system default profile. (Subsequent
 sessions initially assume the values of the default session.) Thus, if the
 user has not explicitly set values in the session response profile, this
 function returns the same values as those contained in the system default
 profile.


 PARAMETERS

 return Response_Profile;

 Returns the internal representation of the session response profile.


 return String;

 Returns the string representation of the session response profile.


 REFERENCES

 procedure Set_Default



 @node !Tools.Profile.Ignore

 function Ignore (Reaction : Error_Reaction  := Profile.Persevere;
                  Filter   : Log_Filter      := Profile.Quiet;
                  Prefixes : Log_Prefixes    := Profile.Prefixes;
                  Width    : Natural         := Profile.Width;
                  Activity : Activity_Type   := Profile.Activity;
                  Log_File : Log_Output_File := Profile.Log_File)
                          return Response_Profile renames Response;
 

 DESCRIPTION

 Returns the profile built from the specified components.

 This function builds a profile from the specified components and returns
 that profile. The profile returned by this function can be tailored to
 include any reaction, filter, prefixes, width, activity, and/or log file.

 By default, the profile includes the Persevere error reaction and the Quiet
 filter. The Persevere error reaction causes commands to continue executing
 without raising an exception when errors are encountered. The Quiet filter
 causes no log messages to be generated. For all other components, the
 default is the value in the job response profile for the current job.

 This function can be used in other commands to use, or to set as the
 default, a profile containing the specified components.

 This function renames the Response function.


 PARAMETERS

 Reaction : Error_Reaction := Profile.Persevere;

 Specifies the error-reaction component for the profile. The default is the
 Persevere error reaction, which causes commands to continue executing
 without raising an exception when errors are encountered.


 Filter : Log_Filter := Profile.Quiet;

 Specifies the log-filter component for the profile. The default is the Quiet
 filter, which allows no messages to be inserted into the log file.


 Prefixes : Log_Prefixes := Profile.Prefixes;

 Specifies the log-prefixes component for the profile. The default is the
 prefixes in the job response profile for the current job.


 Width : Natural := Profile.Width;

 Specifies the line-width component for the profile. The default is the width
 in the job response profile for the current job.


 Activity : Activity_Type := Profile.Activity;

 Specifies the activity component for the profile. The default is the
 activity in the job response profile for the current job.


 Log_File : Log_Output_File := Profile.Log_File;

 Specifies the log-file component for the profile. The default is the log file
 in the job response profile for the current job.


 return Response_Profile;

 Returns the internal representation of the profile.


 REFERENCES

 function Nil
 function Raise_Exception
 function Response
 function Verbose
 function Warn



 @node !Tools.Profile.Image

 function Image (Profile : Response_Profile :=
                    Standard.Profile.Get) return String;


 DESCRIPTION

 Returns the string representation of the specified profile.

 To obtain the internal representation of a profile, use the Convert
 procedure or the Value function.

 For more information about the representation of profiles, see the
 introduction to this package.


 PARAMETERS

 Profile : Response_Profile := Standard.Profile.Get;

 Specifies the response profile for which to return the string
 representation. The default is the job response profile for the current
 job.


 return String;

 Returns the string representation of the specified profile.


 REFERENCES

 procedure Convert
 function Value



 @node !Tools.Profile.Include

 procedure Include (Kind  : Msg_Kind;
                    Value : Boolean   := True);


 DESCRIPTION

 Sets the log-filter component in the job response profile for the current
 job to include (or not include) the specified kind of message; whether or
 not the kind of message is to be included is determined by the Value
 parameter.

 To determine whether a particular kind of message is already included in a
 specified profile, use the Includes function.

 To set the value for a message kind in the session response profile, use
 the Include_In_Default procedure.


 PARAMETERS

 Kind : Msg_Kind;

 Specifies the kind of message to include or not to include in the filter.


 Value : Boolean := True;

 Specifies whether the specified kind of message should be included. The
 default, True, includes the message.


 REFERENCES

 function Filter
 procedure Include_In_Default
 function Includes
 type Msg_Kind
 procedure Set_Filter



 @node !Tools.Profile.Includes

 function Includes (Kind     : Msg_Kind;
                    Response : Response_Profile := Profile.Get)
                                                    return Boolean;
 

 DESCRIPTION

 Returns a Boolean value indicating whether the specified kind of message is
 included in the log-file component of the specified profile.

 This function returns the value of the specified message kind from the
 filter for the specified profile. Messages of any kind whose value is True
 are included in log files generated with the profile.

 To obtain the values of all the message kinds in the log-filter component
 for a specified profile, use the Filter function.

 To set the value for a message kind in the job and session response
 profiles, use the Include and Include_In_Default procedures, respectively.


 PARAMETERS

 Kind : Msg_Kind;

 Specifies the kind of message for which to return the value.


 Response : Response_Profile := Profile.Get;

 Specifies the profile from which to return the message-kind value. The
 default is the job response profile for the current job.


 return Boolean;

 Returns True if the specified message kind is included in the log files
 generated with the specified profile; otherwise, the function returns False.


 REFERENCES

 function Filter
 procedure Include
 procedure Include_In_Default
 subtype Msg_Kind
 procedure Set_Default_Filter
 procedure Set_Filter



 @node !Tools.Profile.Include_In_Default

 procedure Include_In_Default (Kind  : Msg_Kind;
                               Value : Boolean := True);


 DESCRIPTION

 Changes the log-filter component of the session response profile for the
 current session to include (or not include) the specified kind of message;
 whether or not the kind of message is to be included is determined by the
 Value parameter.

 To determine whether a particular kind of message is included in the
 log-filter component of a specified profile, use the Includes function.

 To set the value for a message kind in the job response profile, use the
 Include procedure.


 PARAMETERS

 Kind : Msg_Kind;

 Specifies the kind of message to include or not to include in the log
 filter.


 Value : Boolean := True;

 Specifies whether the specified kind of message should be included. The
 default, True, includes the message.


 REFERENCES

 function Filter
 procedure Include
 function Includes
 subtype Msg_Kind
 procedure Set_Default_Filter



 @node !Tools.Profile.Log_File

 function Log_File (Response : Response_Profile := Profile.Get)
                                            return Log_Output_File;
 

 DESCRIPTION

 Returns the value of the log-file component of the specified profile.

 The log-file component specifies where log output is to be sent. Log output
 can be sent to any specified text file or to any of the four destinations 
 defined by the Log_Output_File type.

 To set the log-file component in the job response profile, use the
 Set_Log_File procedure.

 To set the log-file component in the session response profile, use the
 Set_Default_Log_File procedure.


 PARAMETERS

 Response : Response.Profile := Profile.Get;

 Defines the profile for which the log-file component is desired. The default
 is the job response profile for the current job.


 return Log_Output_File;

 Returns the value of the log-file component.


 REFERENCES

 type Log_Output_File
 procedure Set_Default_Log_File
 procedure Set_Log_File



 @node !Tools.Profile.Log_Filter

 type Log_Filter is array (Msg_Kind) of Boolean;


 DESCRIPTION

 Defines the log filters.

 This type defines the filters that are used to generate and filter the log
 files. A filter contains a Boolean value for each kind of message that can
 be generated. Message kinds with the value True are included in any log
 files generated with the profile. Message kinds with the value False are
 filtered out of the log file (not included).


 REFERENCES

 type Msg_Kind



 @node !Tools.Profile.Log_Output_File

 Type Log_Output_File is (Use_Output, Use_Error,
                          Use_Standard_Output,
                          Use_Standard_Error);
 

 DESCRIPTION

 Defines four different places to which log output can be directed.

 See the Key Concepts of this book and package Log for more information
 about directing log output.


 ENUMERATIONS

 Use_Error

 Specifies that log output should be sent to Current_Error. By default,
 Current_Error directs output to Standard_Error; however, Current_Error can
 be redirected to another location using the Log.Set_Error procedure or the
 Io.Set_Error procedure.


 Use_Output

 Specifies that log output should be sent to Current_Output. By default,
 Current_Output directs output to Standard_Output; however,
 Current_Output can be redirected to another location using the
 Log.Set_Output or Io.Set_Output procedure.


 Use_Standard_Error

 Specifies that log output should be sent to Standard_Error, which is the
 Environment message window. Standard_Error cannot be redirected.


 Use_Standard_Output

 Specifies that log output should be sent to Standard_Output, which is an
 Environment output window. Standard_Output cannot be redirected.



 @node !Tools.Profile.Log_Prefix

 type Log_Prefix is (Nil, Time, Hr_Mn_Sc, Hr_Mn, Date, Mn_Dy_Yr,
                                     Dy_Mon_Yr, Yr_Mn_Dy, Symbols);


 DESCRIPTION

 Defines the kinds of prefixes that can appear before messages in the log
 file.


 ENUMERATIONS

 Date

 Specifies a verbose format for the date: the spelled-out month, the day of
 the month, and the year, such as June 30, 1991.


 Dy_Mon_Yr

 Specifies an abbreviated format for the date: the day of the month, an
 abbreviation of the month, and the year, such as 30-JUN-91.


 Hr_Mn

 Specifies a military format for time: hours and minutes, such as 21:08.


 Hr_Mn_Sc

 Specifies a military format for time: hours, minutes, and seconds, such as
 19:54:04.


 Mn_Dy_Yr

 Specifies a short format for the date: the numeric month, the day of the
 month, and the year, such as 06/30/91.


 Nil

 Specifies an empty prefix. If any of the three prefixes are not used, the
 enumeration should be set to this prefix.


 Symbols

 Specifies the symbols associated with the kind of message. These symbols
 denote the kind of message being added to the log file, such as *** or !!!.
 See the Msg_Kind type for the set of all message kinds and their
 symbols.


 Time

 Specifies the normal A.M./P.M. format for time: hours, minutes, and
 seconds, such as 11:34:32 AM or 8:19:09 PM.


 Yr_Mn_Dy

 Specifies a short format for the date: the year, the numeric month, and the
 day of the month, such as 91/06/30.


 REFERENCES

 type Log_Prefixes
 type Msg_Kind



 @node !Tools.Profile.Log_Prefixes

 type Log_Prefixes is array (1 .. 3) of Log_Prefix;


 DESCRIPTION

 Defines the set of prefixes that can appear before messages in the log file.

 This type defines the set of three message prefixes. These prefixes are
 inserted in order at the beginning of each log message. Up to three
 prefixes are allowed. Less than three prefixes can be used by setting the
 extra prefix or prefixes to the Nil enumeration.

 See the Log_Prefix type for a list of the log prefixes available.


 REFERENCES

 type Log_Prefix
 type Msg_Kind



 @node !Tools.Profile.Msg_Kind

 type Msg_Kind is (Auxiliary_Msg, Debug_Msg, Note_Msg,
                   Positive_Msg, Position_Msg, Negative_Msg,
                   Warning_Msg, Error_Msg, Exception_Msg,
                   Sharp_Msg, At_Msg, Dollar_Msg);
 

 DESCRIPTION

 Defines the kinds of messages that can be inserted in the log file.

 Each kind of message is associated with a three-character symbol. These
 symbols are noted in the enumerations and can be included in the log file
 by specifying the Symbols prefix.


 ENUMERATIONS

 At_Msg

 Specifies a message that has no predefined meaning. This kind of message is
 not used by the Environment but can be used by users to insert messages
 into the log files for user-defined purposes. This message is denoted by
 @@@.


 Auxiliary_Msg

 Specifies a general message. This kind of message is provided by the
 Environment as commentary on the execution of commands. This message is
 denoted by :::.


 Debug_Msg

 Specifies a debugging message. This kind of message is provided by the
 Environment as an aid in debugging commands. This message is denoted by
 ???.


 Dollar_Msg

 Specifies a message that has no predefined meaning. This kind of message is
 not used by the Environment but can be used by users to insert messages
 into the log files for user-defined purposes. This message is denoted by
 $$$.


 Error_Msg

 Specifies a message indicating a serious error. This kind of message
 indicates that the operation has found some condition that prevents the
 operation from completing successfully. This causes the error reaction
 to be taken by the command. A message of this kind may be accompanied by a
 negative message. This message is denoted by ***.


 Exception_Msg

 Specifies a message indicating that an exception was raised during the
 execution of the command. This kind of message indicates that the
 operation has found some condition that prevents the operation from
 continuing. This causes the error reaction to be taken by the command. A
 message of this kind may be accompanied by a negative message. This
 message is denoted by %%%.


 Negative_Msg

 Specifies a message indicating negative progress. This kind of message is
 provided by the Environment when operations do not complete successfully.
 This causes the error reaction to be taken by the command. This message is
 denoted by ++*.


 Note_Msg

 Specifies a general message. This kind of message is provided by the
 Environment as commentary on the execution of commands. This message is
 denoted by ---.


 Position_Msg

 Specifies a message indicating the position in some object where an event,
 explained by another message, has occurred. This kind of message is
 provided by the Environment as an aid in locating errors and other events
 in large objects. This message is denoted by >>>.


 Positive_Msg

 Specifies a message indicating positive progress. This kind of message is
 provided by the Environment when operations complete successfully. This
 message is denoted by +++.


 Sharp_Msg

 Specifies a message that has no predefined meaning. This kind of message is
 not used by the Environment but can be used by users to insert messages
 into the log files for user-defined purposes. This message is denoted by
 ###.


 Warning_Msg

 Specifies a message that warns of some minor error. This kind of message
 indicates that the operation has found some condition that is not quite
 correct but is not serious enough to prevent the operation from
 continuing. This message is denoted by !!!.


 REFERENCES

 type Log_Prefix
 type Log_Prefixes



 @node !Tools.Profile.Name

 subtype Name is String;


 DESCRIPTION

 Defines a name.

 This type accepts the complete set of special names, wildcards, context
 characters, and attributes that are defined for naming objects in the
 Environment. The name, however, must be unambiguous; it can resolve only
 to a single object. For additional information about naming objects in
 the Environment, see Parameter-Value Conventions in the Reference Summary
 (RS) book.


 REFERENCES

 Reference Summary (RS), Parameter-Value Conventions



 @node !Tools.Profile.Nil

 function Nil
         (Reaction : Error_Reaction  := Profile.Quit;
          Filter   : Log_Filter      := Profile.Quiet;
          Prefixes : Log_Prefixes    := Profile.No_Prefixes;
          Width    : Natural         := Profile.Default_Width;
          Activity : Activity_Type   := Profile.Default_Activity;
          Log_File : Log_Output_File := Profile.Default_Log_File)
                          return Response_Profile renames Response;
 

 DESCRIPTION

 Returns the profile built from the specified components.

 This function builds a profile from the specified components and returns
 that profile. The profile returned by this function can be tailored to
 include any reaction, filter, prefixes, width, activity, and/or log file.

 By default, the profile returned by this function includes the following
 components:

 *  The Quit error reaction, which specifies that the job terminate upon the
    first error without raising an exception

 *  The Quiet filter, which specifies that no log messages be generated

 *  The No_Prefixes prefix, which specifies that no log-message prefixes be
    generated

 *  The system default line width of 77

 *  The activity component specified in the session response profile

 *  The log-file component specified in the system default profile

 This function can be used in other commands to use, or to set as the
 default, a profile containing the specified components.

 This function renames the Response function.


 PARAMETERS

 Reaction : Error_Reaction := Profile.Quit;

 Specifies the error-reaction component for the profile. The default is the
 Quit error reaction, which causes the job to stop at the first error
 without raising an exception.


 Filter : Log_Filter := Profile.Quiet;

 Specifies the log-filter component for the profile. The default is the Quiet
 filter, which allows no messages to be added to the log file.


 Prefixes : Log_Prefixes := Profile.No_Prefixes;

 Specifies the log-prefixes component for the profile. The default is that no
 prefixes be used.


 Width : Natural := Profile.Default_Width;

 Specifies the line-width component for the profile. The default is 77
 columns (the value of the Default_Width constant).


 Activity : Activity_Type := Profile.Default_Activity;

 Specifies the activity component for the profile. The default is the
 activity in the session response profile for the current session.


 Log_File : Log_Output_File := Profile.Default_Log_File;

 Specifies the log-file component for the profile. The default log file is
 Current_Output, which is, by default, an Environment output window.


 return Response_Profile;

 Returns the internal representation of the profile.


 REFERENCES

 function Default_Profile
 function Ignore
 function Raise_Exception
 function Response
 function Verbose
 function Warn



 @node !Tools.Profile.No_Prefixes

 No_Prefixes : constant Log_Prefixes := (Nil, Nil, Nil);


 DESCRIPTION

 Defines a constant that specifies that no prefixes appear before log
 messages.


 REFERENCES

 type Log_Prefix
 type Log_Prefixes



 @node !Tools.Profile.Persevere

 function Persevere (Response : Response_Profile := Profile.Get)
                                                    return Boolean;
 

 DESCRIPTION

 Returns a Boolean value indicating whether commands that use the specified
 profile continue executing when errors are encountered--that is, whether
 the error-reaction component of the profile is set either to the Persevere
 enumeration or to the Raise_Error enumeration.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile for which the error-reaction component is to be
 checked. The default is the job response profile for the current job.


 return Boolean;

 Returns True if the error-reaction component of the specified profile is set
 to the Persevere enumeration or the Raise_Error enumeration; otherwise,
 this function returns False.


 REFERENCES

 type Error_Reaction
 function Propagate
 procedure Set_Default_Reaction
 procedure Set_Reaction



 @node !Tools.Profile.Prefixes

 function Prefixes (Response : Response_Profile := Profile.Get)
                                               return Log_Prefixes;


 DESCRIPTION

 Returns the value of the log-prefixes component of the specified profile.

 The log-prefixes component determines the log prefixes that are included
 when log messages are generated.

 To set the log-prefixes component in the job response profile, use the
 Set_Prefixes procedure.

 To set the log-prefixes component in the session response profile, use the
 Set_Default_Prefixes procedure.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile for which the log-prefixes component is desired. The
 default is the job response profile for the current job.


 return Log_Prefixes;

 Returns the value of the log-prefixes component.


 REFERENCES

 procedure Set_Default_Prefixes
 procedure Set_Prefixes



 @node !Tools.Profile.Propagate

 function Propagate (Response : Response_Profile := Profile.Get)
                                                    return Boolean;


 DESCRIPTION

 Returns a Boolean value indicating whether commands that use the profile
 raise an exception when errors are encountered--that is, whether the
 error-reaction component of the profile is set to either the Propagate
 enumeration or the Raise_Error enumeration.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile for which the error-reaction component is to be
 checked. The default is the job response profile for the current job.


 return Boolean;

 Returns True if the error-reaction component of the profile is set to the
 Propagate enumeration or the Raise_Error enumeration; otherwise, this
 function returns False.


 REFERENCES

 type Error_Reaction
 function Persevere
 procedure Set_Default_Reaction
 procedure Set_Reaction



 @node !Tools.Profile.Quiet

 Quiet : constant Log_Filter := Log_Filter'(others => False);


 DESCRIPTION

 Defines a log filter that allows no messages to be included in the log file.

 This constant can be used in the Filter parameter of procedures, such as
 the Set_Response procedure, to specify that no messages should appear in
 the log file.


 REFERENCES

 constant Errors
 constant Full
 type Log_Filter
 type Msg_Kind
 constant Summary
 constant Terse



 @node !Tools.Profile.Raise_Exception

 function Raise_Exception
             (Reaction : Error_Reaction  := Profile.Propagate;
              Filter   : Log_Filter      := Profile.Filter;
              Prefixes : Log_Prefixes    := Profile.Prefixes;
              Width    : Natural         := Profile.Width;
              Activity : Activity_Type   := Profile.Activity;
              Log_File : Log_Output_File := Profile.Log_File)
                          return Response_Profile renames Response;
 

 DESCRIPTION

 Returns the profile built from the specified components.

 This function builds a profile from the specified components and returns
 that profile. The profile returned by this function can be tailored with
 any reaction, filter, prefixes, width, activity, and/or log file. By default,
 the profile includes the Propagate error reaction, which causes commands
 to stop executing at the first error and raise an exception. For all other
 components, the default is the value in the job response profile for the
 current job.

 This function can be used in other commands to use, or to set as the
 default, a profile containing the specified components.

 This function renames the Response function.


 PARAMETERS

 Reaction : Error_Reaction := Profile.Propagate;

 Specifies the error-reaction component for the profile. The default is the
 Propagate reaction, which causes commands to stop executing at the first
 error and to raise an exception.


 Filter : Log_Filter := Profile.Filter;

 Specifies the log-filter component for the profile. The default is the filter
 in the job response profile for the current job.


 Prefixes : Log_Prefixes := Profile.Prefixes;

 Specifies the log-prefixes component for the profile. The default is the
 prefixes in the job response profile for the current job.


 Width : Natural := Profile.Width;

 Specifies the line-width component for the profile. The default is the width
 in the job response profile for the current job.


 Activity : Activity_Type := Profile.Activity;

 Specifies the activity component for the profile. The default is the
 activity in the job response profile for the current job.


 Log_File : Log_Output_File := Profile.Log_File;

 Specifies the log-file component for the profile. The default is the log file
 in the job response profile for the current job.


 return Response_Profile;

 Returns the internal representation of the profile.


 REFERENCES

 function Ignore
 function Nil
 function Response
 function Verbose
 function Warn



 @node !Tools.Profile.Reaction

 function Reaction (Response : Response_Profile := Profile.Get)
                                             return Error_Reaction;


 DESCRIPTION

 Returns the value of the error-reaction component of the specified profile.

 The error-reaction component of a profile determines what action commands
 are to take if an error occurs during execution. The four types of error
 reactions are defined by the Error_Reaction type.

 To set the error-reaction components of the job and session response
 profiles, use the Set_Reaction and Set_Default_Reaction procedures,
 respectively.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile from which to return the error-reaction component. The
 default is the job response profile for the current job.


 return Error_Reaction;

 Returns the value of the error-reaction component.


 REFERENCES

 type Error_Reaction
 function Persevere
 function Propagate
 procedure Set_Default_Reaction
 procedure Set_Reaction



 @node !Tools.Profile.Remote_Passwords

 function Remote_Passwords
             (Response : Response_Profile := Profile.Get)
                                      return Remote_Passwords_Type;


 DESCRIPTION

 Returns the value of the remote-passwords-file component of the specified
 profile.

 A remote-passwords file is a text file that specifies the usernames and
 passwords to be used when accessing remote machines. For further
 information, see package Remote_Passwords in this book.

 To obtain the value of the remote-passwords-file component of the session
 response profile, use the Default_Remote_Passwords function.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile from which to return the remote-passwords-file
 component. The default is the job response profile for the current job.


 return Remote_Passwords_Type;

 Returns the value of the remote-passwords-file component.


 REFERENCES

 function Default_Remote_Passwords
 type Remote_Passwords_Type
 procedure Set_Remote_Passwords
 package Remote_Passwords



 @node !Tools.Profile.Remote_Passwords_Type

 subtype Remote_Passwords_Type is Directory.Object;


 DESCRIPTION

 Defines the subtype that represents a remote-passwords file.

 This subtype defines the value for the remote-passwords-file component of a
 response profile. It is of type !Implementation.Directory.Object, which is
 an implementation detail of the Environment library system. For further
 information, see your Rational technical representative.

 A remote-passwords file is a text file that specifies the usernames and
 passwords to be used when accessing remote machines. For further
 information, see package Remote_Passwords in this book.


 REFERENCES

 package Remote_Passwords



 @node !Tools.Profile.Remote_Sessions

 function Remote_Sessions
                (Response : Response_Profile := Profile.Get)
                                       return Remote_Sessions_Type;
 

 DESCRIPTION

 Returns the value of the remote-sessions-file component of the specified
 profile.

 A remote-sessions file is a text file that specifies which session (or
 account) should be used when logging into a remote machine.

 To obtain the value of the remote-sessions-file component of the session
 response profile, use the Default_Remote_Sessions function.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile from which to return the remote-sessions-file
 component. The default is the job response profile for the current job.


 return Remote_Sessions_Type;

 Returns the value of the remote-sessions-file component.


 REFERENCES

 function Default_Remote_Sessions
 type Remote_Sessions_Type
 procedure Set_Default_Remote_Sessions
 procedure Set_Remote_Sessions



 @node !Tools.Profile.Remote_Sessions_Type

 subtype Remote_Sessions_Type is Directory.Object;


 DESCRIPTION

 Defines the subtype that represents a remote-sessions file.

 This subtype defines the value for the remote-sessions-file component of a
 response profile. It is of type !Implementation.Directory.Object, which
 is an implementation detail of the Environment library system. For
 further information, see your Rational technical representative.

 A remote-sessions file is a text file that specifies which session (or
 account) should be used when logging into a remote machine.



 @node !Tools.Profile.Response

 function Response
             (Reaction : Error_Reaction  := Profile.Reaction;
              Filter   : Log_Filter      := Profile.Filter;
              Prefixes : Log_Prefixes    := Profile.Prefixes;
              Width    : Natural         := Profile.Width;
              Activity : Activity_Type   := Profile.Activity;
              Log_File : Log_Output_File := Profile.Log_File)
                                           return Response_Profile;
 

 DESCRIPTION

 Returns the profile built from the specified components.

 This function builds a profile from the specified components and returns
 that profile. The profile returned by this function can be tailored with
 any reaction, filter, prefixes, width, activity, and/or log file. By default,
 the profile includes the components in the job response profile for the
 current job.

 This function can be used in other commands to use, or to set as the
 default, a profile containing the specified components.


 PARAMETERS

 Reaction : Error_Reaction := Profile.Reaction;

 Specifies the error-reaction component for the response profile. The default
 is the reaction in the job response profile for the current job.


 Filter : Log_Filter := Profile.Filter;

 Specifies the log-filter component for the profile. The default is the filter
 in the job response profile for the current job.


 Prefixes : Log_Prefixes := Profile.Prefixes;

 Specifies the log-prefixes component for the profile. The default is the
 prefixes in the job response profile for the current job.


 Width : Natural := Profile.Width;

 Specifies the line-width component for the profile. The default is the width
 in the job response profile for the current job.


 Activity : Activity_Type := Profile.Activity;

 Specifies the activity component for the profile. The default is the
 activity in the job response profile for the current job.


 Log_File : Log_Output_File := Profile.Log_File;

 Specifies the log-file component for the profile. The default is log file in
 the job response profile for the current job.


 return Response_Profile;

 Returns the internal representation of the profile.


 REFERENCES

 function Ignore
 function Nil
 function Raise_Exception
 function Verbose
 function Warn



 @node !Tools.Profile.Response_Profile

 type Response_Profile is private;


 DESCRIPTION

 Defines a response profile.

 This type defines the set of values that is collectively called a response
 profile. These values determine eight components of job behavior: error
 reaction, a log filter, a set of log-message prefixes, a log width, a log
 output file, a remote-passwords file, a remote-sessions file, and an
 activity. All of these are described further in the introduction to this
 package.



 @node !Tools.Profile.Set

 procedure Set (Profile : Response_Profile);

 procedure Set (Profile :        String;
                Status  : in out Simple_Status.Condition);


 DESCRIPTION

 Sets the job response profile for the remainder of the current job to be
 the specified profile.

 At job initialization, the values of the job response profile are obtained
 from the session response profile. This procedure can be used to change the
 job response profile to be the specified profile.

 You can specify a profile using the string representation or using any of
 the following functions, which return the internal representation of a
 profile: Ignore, Nil, Raise_Error, Response, Set, Verbose, and Warn.

 Changes made to the job response profile in the middle of a job apply to
 the remainder of the job. They do not affect parts of the job that have
 already executed.

 You can also set the job response profile using the Set_Response procedure.


 PARAMETERS

 Profile : Response_Profile;

 Specifies the internal representation of the profile.


 Profile : String;

 Specifies the string representation of the profile.


 Status : in out Simple_Status.Condition;

 Returns the status indicating that the procedure has executed correctly
 or, if there is an error, a message indicating the type of error. To
 convert the status to a string representation and enter it into the log
 file, use the Log.Put_Condition procedure.


 REFERENCES

 procedure Set_Response
 procedure Log.Put_Condition
 Programming Tools (PT), package Simple_Status



 @node !Tools.Profile.Set_Activity

 procedure Set_Activity (Activity : Activity_Type);


 DESCRIPTION

 Sets the activity component in the job response profile for the current
 job.

 The activity component specifies the activity file to be used for mapping
 between subsystems and specific releases of those subsystems. For further
 information about activities, see the Project Management (PM) book.

 This procedure is for programmatic use only. To set the activity file to be
 used by a particular command, use the Response parameter of that command.
 To set the default activity file for a session, use the
 !Commands.Activity.Set_Default procedure, or edit the Profile.Activity
 session switch directly.


 PARAMETERS

 Activity : Activity_Type;

 Specifies the value to which the activity component is to be set. This
 value must be of type Activity_Type; that is, it must be a file handle.


 REFERENCES

 function Activity
 type Activity_Type
 function Set_Default_Activity
 Project Management (PM)



 @node !Tools.Profile.Set_Default

 procedure Set_Default (Profile : Response_Profile);

 procedure Set_Default (Profile :        String;
                        Status  : in out Simple_Status.Condition);
 

 DESCRIPTION

 Sets the session response profile for the current session.

 When your default session is created, the values of the session response
 profile are obtained from the system default profile. Subsequent sessions
 initially assume the values of your default session. This procedure can
 then be used to change the session response profile for your current
 session to be a specified profile. Note that the values of the session
 response profile are also set in the session switches that have the
 processor name "Profile."

 You can specify a profile to this procedure using the string representation
 or using any of the following functions, which return the internal
 representation of a profile: Ignore, Nil, Raise_Error, Response, Set,
 Verbose, and Warn.

 You can also change the session response profile by editing the appropriate
 session switches or using the Set_Default_Response procedure.


 PARAMETERS

 Profile : Response_Profile;

 Specifies the internal representation of a profile.


 Profile : String;

 Specifies the string representation of a profile.


 Status : in out Simple_Status.Condition;

 Returns the status indicating that the procedure has executed correctly
 or, if there is an error, a message indicating the type of error. To
 convert the status to a string representation and enter it into the log
 file, use the Log.Put_Condition procedure.


 REFERENCES

 function Ignore
 function Nil
 function Raise_Exception
 function Response
 procedure Set_Default_Response
 function Verbose
 function Warn
 procedure Log.Put_Condition
 Programming Tools (PT), package Simple_Status



 @node !Tools.Profile.Set_Default_Activity

 procedure Set_Default_Activity (Activity : Activity_Type);


 DESCRIPTION

 Sets the activity component in the session response profile for the current
 session.

 The activity component specifies the activity file to be used for mapping
 between subsystems and specific releases of those subsystems. For further
 information about activities, see the Project Management (PM) book.

 This procedure is for programmatic use only. To set the default activity
 file for a session, use the !Commands.Activity.Set_Default procedure, or
 edit the Profile.Activity session switch directly.


 PARAMETERS

 Activity : Activity_Type;

 Specifies the activity to which the activity component is to be set. This
 value must be of subtype Activity_Type.


 REFERENCES

 type Activity_Type
 function Default_Activity
 procedure Set_Activity
 Project Management (PM)



 @node !Tools.Profile.Set_Default_Filter

 procedure Set_Default_Filter (Auxiliaries : Boolean := True;
                               Diagnostics : Boolean := True;
                               Notes       : Boolean := True;
                               Positives   : Boolean := True;
                               Negatives   : Boolean := True;
                               Positions   : Boolean := True;
                               Warnings    : Boolean := True;
                               Errors      : Boolean := True;
                               Exceptions  : Boolean := True;
                               Sharps      : Boolean := True;
                               Dollars     : Boolean := True;
                               Ats         : Boolean := True);
 

 DESCRIPTION

 Sets the filter component to include the specified kinds of messages; the
 filter component is set in the session response profile for the current
 session.

 The log-filter component is a collection of Boolean values, one for each
 message kind. This procedure sets the value for each message kind to be
 the specified value. Message kinds whose value is True are included in the
 log file.


 PARAMETERS

 Auxiliaries : Boolean := True;

 Specifies whether to include auxiliary messages (denoted by :::) in the log
 file. The default, True, is to include auxiliary messages.


 Diagnostics : Boolean := True;

 Specifies whether to include diagnostic (debug) messages (denoted by ???)
 in the log file. The default, True, is to include diagnostic messages.


 Notes : Boolean := True;

 Specifies whether to include note messages (denoted by ---) in the log file.
 The default, True, is to include note messages.


 Positives : Boolean := True;

 Specifies whether to include positive messages (denoted by +++) in the log
 file. The default, True, is to include positive messages.


 Negatives : Boolean := True;

 Specifies whether to include negative messages (denoted by ++*) in the log
 file. The default, True, is to include negative messages.


 Positions : Boolean := True;

 Specifies whether to include position messages (denoted by >>>) in the log
 file. The default, True, is to include position messages.


 Warnings : Boolean := True;

 Specifies whether to include warning messages (denoted by !!!) in the log
 file. The default, True, is to include warning messages.


 Errors : Boolean := True;

 Specifies whether to include error messages (denoted by ***) in the log
 file. The default, True, is to include error messages.


 Exceptions : Boolean := True;

 Specifies whether to include exception messages (denoted by %%%) in the log
 file. The default, True, is to include exception messages.


 Sharps : Boolean := True;

 Specifies whether to include messages denoted with the sharp sign (###) in
 the log file. The default is to include sharp messages.


 Dollars : Boolean := True;

 Specifies whether to include messages denoted with the dollar sign ($$$) in
 the log file. The default is to include dollar messages.


 Ats : Boolean := True;

 Specifies whether to include messages denoted with the at sign (@@@) in the
 log file. The default is to include at messages.


 REFERENCES

 function Filter
 procedure Include_In_Default
 function Includes
 type Msg_Kind
 procedure Set_Default_Filter



 @node !Tools.Profile.Set_Default_Filter

 procedure Set_Default_Filter (Filter : Log_Filter);


 DESCRIPTION

 Sets the filter component to be the specified filter; the filter component is
 set in the session response profile for the current session.

 The log-filter component represents a collection of Boolean values, one for
 each message kind. This procedure sets the collection of values to be the
 collection in the named filter. Message kinds whose value is True are
 included in the log file.


 PARAMETERS

 Filter : Log_Filter;

 Specifies the filter to which the filter component is to be set. This
 parameter accepts any predefined filter, including the constants in this
 package that define filters. These constants are described below:

 Errors               Specifies that only negative (++*), warning (!!!),
                      error (***), and exception (%%%) messages are to be
                      included in the log file.

 Full                 Specifies that all messages except debug messages
                      (denoted by ???) are to be included in the log file.

 Quiet                Specifies that no messages are to be included in the
                      log file.

 Summary              Specifies that only positive (+++) and negative (++*)
                      messages are to be included in the log file.

 Terse                Specifies that the following kinds of messages are to
                      be included in the log file: at (@@@), dollar ($$$),
                      error (***), exception (%%%), negative (++*),
                      position (>>>), positive (+++), sharp (###), and
                      warning (!!!).


 REFERENCES

 function Filter
 procedure Include_In_Default
 function Includes
 type Msg_Kind
 procedure Set_Default_Filter



 @node !Tools.Profile.Set_Default_Log_File

 procedure Set_Default_Log_File (Log_File : Log_Output_File);
 

 DESCRIPTION

 Sets the log-file component in the session response profile for the current
 session.

 The log-file component specifies where log output is to be sent. Log output
 can be sent to any of the four destinations defined by the Log_Output_File
 type.

 To set the log-file component in the job response profile, use the
 Set_Log_File procedure.

 To obtain the log-file component of a specified profile, use the Log_File
 function.

 For further information about directing log output, see the Key Concepts
 of this book.


 PARAMETERS

 Log_File : Log_Output_File;

 Specifies the log file to which the log-file component is to be set. This
 parameter accepts the four destinations defined by the Log_Output_File
 type:

 Use_Error             Specifies that log output should be sent to
                       Current_Error. By default, Current_Error directs
                       output to Standard_Error; however, Current_Error can
                       be redirected to another location.

 Use_Output            Specifies that log output should be sent to
                       Current_Output. By default, Current_Output directs
                       output to Standard_Output; however, Current_Output
                       can be redirected to another location.

 Use_Standard_Error    Specifies that log output should be sent to
                       Standard_Error, which is the Environment message
                       window. Standard_Error cannot be redirected.

 Use_Standard_Output   Specifies that log output should be sent to
                       Standard_Output, which is an Environment output
                       window. Standard_Output cannot be redirected.


 EXAMPLES

 The system default profile specifies that log output is to be sent to an
 Environment output window. Environment output windows are major windows
 and often replace other major windows when they are created.

 Suppose you want to change the log-output file so that log output is sent
 to the message window so that major windows are not replaced when log
 output is generated. The following command sets the log-file component of
 the session response profile for the current session to be Use_Error:

   Profile.Set_Default_Log_File (Log_File => Profile.Use_Error);

 Use_Error specifies that log output should be sent to Current_Error, which
 is, by default, the message window. Use_Error appears as the new value for
 the Profile.Log_File switch in the switch file for your current session.


 REFERENCES

 function Log_File
 type Log_Output_File
 procedure Set_Log_File



 @node !Tools.Profile.Set_Default_Prefixes

 procedure Set_Default_Prefixes (Prefixes : Log_Prefixes);

 procedure Set_Default_Prefixes
              (Prefix1, Prefix2, Prefix3 : Log_Prefix := Nil);
 

 DESCRIPTION

 Sets the log-prefixes component to be the specified set of prefixes; the
 prefixes component is set in the session response profile for the current
 session.

 The log-prefixes component determines the log prefixes that are included
 when log messages are generated.

 To set the log-prefixes component in the job response profile, use the
 Set_Prefixes procedure.

 To obtain the log-prefixes component for a particular profile, use the
 Prefixes function.


 PARAMETERS

 Prefixes : Log_Prefixes;

 Specifies the set of three prefixes to which the log-prefixes component is to
 be set.


 Prefix1 : Log_Prefix := Nil;

 Specifies the prefix to which the first log-prefix value is to be set.


 Prefix2 : Log_Prefix := Nil;

 Specifies the prefix to which the second log-prefix value is to be set.


 Prefix3 : Log_Prefix := Nil;

 Specifies the prefix to which the third log-prefix value is to be set.


 REFERENCES

 type Log_Prefix
 type Log_Prefixes
 function Prefixes
 procedure Set_Prefixes



 @node !Tools.Profile.Set_Default_Reaction

 procedure Set_Default_Reaction (Reaction : Error_Reaction);


 DESCRIPTION

 Sets the error-reaction component of the session response profile for the
 current session.

 The error-reaction component of a profile determines what action to take if
 an error occurs during execution of a command.

 To set the error-reaction component of a job response profile, use the
 Set_Reaction procedure.

 To obtain the value of the error-reaction component of a specified profile,
 use the Reaction function.


 PARAMETERS

 Reaction : Error_Reaction;

 Specifies the error reaction to which the error-reaction component is to be
 set. The four types of error reactions are defined by the Error_Reaction
 type:

 Persevere             Specifies that the command continue executing as best
                       it can after errors are discovered. No exception is
                       raised.

 Propagate             Specifies that the command terminate at its first
                       error. An exception is raised.

 Quit                  Specifies that the command terminate at its first
                       error. No exception is raised.

 Raise_Error           Specifies that the command continue executing as best
                       it can after errors are discovered. At some point,
                       an exception is raised.


 REFERENCES

 type Error_Reaction
 function Persevere
 function Propagate
 function Reaction
 procedure Set_Reaction



 @node !Tools.Profile.Set_Default_Remote_Passwords

 procedure Set_Default_Remote_Passwords
              (Passwords : Remote_Passwords_Type);
 

 DESCRIPTION

 Sets the remote-passwords-file component in the session response profile for
 the current session.

 A remote-passwords file is a text file that specifies the usernames and
 passwords to be used when accessing remote machines. For further
 information, see package Remote_Passwords in this book.

 This procedure is for programmatic use only. To set the default
 remote-passwords file for a session, use the Remote_Passwords.Set_Default
 procedure, or edit the Profile.Remote_Passwords session switch directly.


 PARAMETERS

 Passwords : Remote_Passwords_Type;

 Specifies the value to which the remote-passwords-file component is to be
 set. This value must be of subtype Remote_Passwords_Type.


 REFERENCES

 function Default_Remote_Passwords
 type Remote_Passwords_Type
 procedure Set_Remote_Passwords
 package Remote_Passwords



 @node !Tools.Profile.Set_Default_Remote_Sessions

 procedure Set_Default_Remote_Sessions
              (Sessions : Remote_Sessions_Type);


 DESCRIPTION

 Sets the remote-sessions-file component in the session response profile for
 the current session.

 A remote-sessions file is a text file that specifies which session (or
 account) should be used when logging into a remote machine.

 This procedure is for programmatic use only. To set the default
 remote-sessions file for a session, edit the Profile.Remote_Sessions session
 switch directly.


 PARAMETERS

 Sessions : Remote_Sessions_Type;

 Specifies the value to which the remote-sessions-file component is to be
 set. This value must be of subtype Remote_Sessions_Type.


 REFERENCES

 function Default_Remote_Sessions
 type Remote_Sessions_Type
 procedure Set_Remote_Sessions



 @node !Tools.Profile.Set_Default_Response

 procedure Set_Default_Response
              (Reaction : Error_Reaction :=
                          Profile.Reaction (Profile.Get_Default);
               Filter   : Log_Filter :=
                          Profile.Filter (Profile.Get_Default);
               Prefixes : Log_Prefixes :=
                          Profile.Prefixes (Profile.Get_Default);
               Width    : Natural :=
                          Profile.Width (Profile.Get_Default);
               Activity : Activity_Type :=
                          Profile.Activity (Profile.Get_Default);
               Log_File : Log_Output_File :=
                          Profile.Log_File (Profile.Get_Default));
 

 DESCRIPTION

 Sets the session response profile for the current session to have the
 specified reaction, filter, prefixes, width, activity, and log-file
 components.

 When your default session is created, the values of the session response
 profile are obtained from the system default profile. Subsequent sessions
 initially assume the values of your default session. This procedure can be
 used to change the session response profile for your current session to be
 the specified profile. Note that these values are also set in the session
 switches that have the processor name "Profile."

 The default parameters specify the values of the current session response
 profile, which have the effect of not changing the session default profile.
 However, any of the parameters can be changed to affect only some of the
 values.

 You can also change the session response profile by editing the appropriate
 session switches or using the Set_Default procedure.

                                                                           
 PARAMETERS

 Reaction : Error_Reaction := Profile.Reaction (Profile.Get_Default);

 Specifies the error reaction to which the error-reaction component is to be
 set. The default does not change the value of the error-reaction
 component.


 Filter : Log_Filter := Profile.Filter (Profile.Get_Default);

 Specifies the filter to which the filter component is to be set. The default
 does not change the value of the filter component.


 Prefixes : Log_Prefixes := Profile.Prefixes (Profile.Get_Default);

 Specifies the set of log prefixes to which the prefixes component is to be
 set. The default does not change the value of the prefixes component.


 Width : Natural := Profile.Width (Profile.Get_Default);

 Specifies the width to which the line-width component is to be set. The
 default does not change the value of the width component.


 Activity : Activity_Type := Profile.Activity (Profile.Get_Default);

 Specifies the activity to which the activity component is to be set. The
 default does not change the value of the activity component.


 Log_File : Log_Output_File := Profile.Log_File (Profile.Get_Default);

 Specifies the log output file to which the log-file component is to be set.
 The default does not change the value of the log-file component.


 REFERENCES

 procedure Set_Default



 @node !Tools.Profile.Set_Default_Width

 procedure Set_Default_Width (Width : Natural);


 DESCRIPTION

 Sets the line-width component in the session response profile for the
 current session.

 The line-width component specifies the maximum length of lines in the log
 file. If a log message is longer than the width defined in the profile, the
 log message is continued on the next line.

 To set the line-width component in a job response profile, use the
 Set_Width procedure.

 To obtain the value of the line-width component of a particular profile,
 use the Width function.


 PARAMETERS

 Width : Natural;

 Specifies the width to which the line-width component is to be set. The
 maximum width is 1,023 columns.


 REFERENCES

 procedure Set_Width
 function Width



 @node !Tools.Profile.Set_Filter

 procedure Set_Filter (Auxiliaries : Boolean := True;
                       Diagnostics : Boolean := True;
                       Notes       : Boolean := True;
                       Positives   : Boolean := True;
                       Negatives   : Boolean := True;
                       Positions   : Boolean := True;
                       Warnings    : Boolean := True;
                       Errors      : Boolean := True;
                       Exceptions  : Boolean := True;
                       Sharps      : Boolean := True;
                       Dollars     : Boolean := True;
                       Ats         : Boolean := True);
 

 DESCRIPTION

 Sets the filter component to include the specified kinds of messages; the
 filter component is set in the job response profile for the current job.

 The log-filter component represents a collection of Boolean values, one for
 each message kind. This procedure sets the value for each message kind to
 be that specified. Message kinds whose value is True are included in the
 log file.


 PARAMETERS

 Auxiliaries : Boolean := True;

 Specifies whether to include auxiliary messages (denoted by :::) in the log
 file. The default, True, is to include auxiliary messages.


 Diagnostics : Boolean := True;

 Specifies whether to include diagnostic (debug) messages (denoted by ???)
 in the log file. The default, True, is to include diagnostic messages.


 Notes : Boolean := True;

 Specifies whether to include note messages (denoted by ---) in the log file.
 The default, True, is to include note messages.


 Positives : Boolean := True;

 Specifies whether to include positive messages (denoted by +++) in the log
 file. The default, True, is to include positive messages.


 Negatives : Boolean := True;

 Specifies whether to include negative messages (denoted by ++*) in the log
 file. The default, True, is to include negative messages.


 Positions : Boolean := True;

 Specifies whether to include position messages (denoted by >>>) in the log
 file. The default, True, is to include position messages.


 Warnings : Boolean := True;

 Specifies whether to include warning messages (denoted by !!!) in the log
 file. The default, True, is to include warning messages.


 Errors : Boolean := True;

 Specifies whether to include error messages (denoted by ***) in the log
 file. The default, True, is to include error messages.


 Exceptions : Boolean := True;

 Specifies whether to include exception messages (denoted by %%%) in the log
 file. The default, True, is to include exception messages.


 Sharps : Boolean := True;

 Specifies whether to include messages denoted with the sharp sign (###) in
 the log file. The default is to include sharp messages.


 Dollars : Boolean := True;

 Specifies whether to include messages denoted with the dollar sign ($$$) in
 the log file. The default is to include dollar messages.


 Ats : Boolean := True;

 Specifies whether to include messages denoted with the at sign (@@@) in the
 log file. The default is to include at messages.


 REFERENCES

 function Filter
 procedure Include
 function Includes
 type Msg_Kind
 procedure Set_Filter



 @node !Tools.Profile.Set_Filter

 procedure Set_Filter (Filter : Log_Filter);
 

 DESCRIPTION

 Sets the filter component to be the specified filter; the filter component is
 set in the job response profile for the current job.

 The log-filter component represents a collection of Boolean values, one for
 each message kind. This procedure sets the collection of values to be the
 collection in the named filter. Message kinds whose value is True are
 included in the log file.


 PARAMETERS

 Filter : Log_Filter;

 Specifies the filter to which the filter component is to be set. This
 parameter accepts any predefined filter, including the constants in this
 package that define filters. These constants are described below:

 Errors               Specifies that only negative (++*), warning (!!!),
                      error (***), and exception (%%%) messages are to be
                      included in the log file.

 Full                 Specifies that all messages except debug messages
                      (denoted by ???) are to be included in the log file.

 Quiet                Specifies that no messages are to be included in the
                      log file.

 Summary              Specifies that only positive (+++) and negative (++*)
                      messages are to be included in the log file.

 Terse                Specifies that the following kinds of messages are to
                      be included in the log file: at (@@@), dollar ($$$),
                      error (***), exception (%%%), negative (++*),
                      position (>>>), positive (+++), sharp (###), and
                      warning (!!!).


 REFERENCES

 function Filter
 proceudure Include
 type Msg_Kind
 procedure Set_Filter



 @node !Tools.Profile.Set_Log_File

 procedure Set_Log_File (Log_File : Log_Output_File);
 

 DESCRIPTION

 Sets the log-file component in the job response profile for the current job.

 The log-file component specifies where log output is to be sent. Log output
 can be sent to any of the four destinations defined by the Log_Output_File
 type.

 To set the log-file component in the session response profile, use the
 Set_Default_Log_File procedure.

 To obtain the log-file component of a specified profile, use the Log_File
 function.

 For further information about directing log output, see the Key Concepts
 of this book.


 PARAMETERS

 Log_File : Log_Output_File;

 Specifies the log file to which the log-file component is to be set. This
 parameter accepts the four destinations defined by type Log_Output_File:

 Use_Error                    Specifies that log output should be sent to
                              Current_Error. By default, Current_Error
                              directs output to Standard_Error; however,
                              Current_Error can be redirected to another
                              location.

 Use_Output                   Specifies that log output should be sent to
                              Current_Output. By default, Current_Output
                              directs output to Standard_Output; however,
                              Current_Output can be redirected to another
                              location.

 Use_Standard_Error           Specifies that log output should be sent to
                              Standard_Error, which is the Environment
                              message window. Standard_Error cannot be
                              redirected.

 Use_Standard_Output          Specifies that log output should be sent to
                              Standard_Output, which is an Environment
                              output window. Standard_Output cannot be
                              redirected.


 EXAMPLES

 According to the system default profile, log output is sent to an
 Environment output window. Environment output windows are major windows
 and often replace other major windows when they are created.

 Suppose for a particular job that you want to change the log output file to
 send log output to the message window so that major windows are not
 replaced when log output is generated. The following command sets the
 log-file component of the job response profile for the current job to be
 Use_Error:

   Profile.Set_Log_File (Log_File => Profile.Use_Error);

 Use_Error specifies that log output should be sent to Current_Error, which
 is, by default, the message window. This log file is used for the remainder
 of the job.


 REFERENCES

 function Log_File
 type Log_Output_File
 procedure Set_Default_Log_File



 @node !Tools.Profile.Set_Prefixes

 procedure Set_Prefixes (Prefixes : Log_Prefixes);

 procedure Set_Prefixes
              (Prefix1, Prefix2, Prefix3 : Log_Prefix := Nil);
 

 DESCRIPTION

 Sets the log-prefixes component to be the specified set of prefixes; the
 prefixes component is set in the job response profile for the current job.

 The log-prefixes component determines the log prefixes that are included
 when log messages are generated.

 To set the log-prefixes component in the session response profile, use the
 Set_Default_Prefixes procedure.

 To obtain the log-prefixes component for a particular profile, use the
 Prefixes function.


 PARAMETERS

 Prefixes : Log_Prefixes;

 Specifies the set of three prefixes to which the log-prefixes component is to
 be set.


 Prefix1 : Log_Prefix := Nil;

 Specifies the prefix to which the first log-prefix value is to be set.


 Prefix2 : Log_Prefix := Nil;

 Specifies the prefix to which the second log-prefix value is to be set.


 Prefix3 : Log_Prefix := Nil;

 Specifies the prefix to which the third log-prefix value is to be set.


 REFERENCES

 type Log_Prefix
 type Log_Prefixes
 function Prefixes
 procedure Set_Default_Prefixes



 @node !Tools.Profile.Set_Reaction

 procedure Set_Reaction (Reaction : Error_Reaction);


 DESCRIPTION

 Sets the error-reaction component of the job response profile for the
 current job.

 The error-reaction component of a profile determines what action to take if
 an error occurs during execution of a command.

 To set the error-reaction component of a session response profile, use the
 Set_Default_Reaction procedure.

 To obtain the value of the error-reaction component of a specified profile,
 use the Reaction function.


 PARAMETERS

 Reaction : Error_Reaction;

 Specifies the error-reaction to which to set the error-reaction component
 of the session response profile. The four types of error reactions are
 defined by the Error_Reaction type:

 Persevere             Specifies that the command continue executing as best
                       it can after errors are discovered. No exception is
                       raised.

 Propagate             Specifies that the command terminate at its first
                       error. An exception is raised. If no other exception
                       is defined for the command, the Error exception is
                       raised.

 Quit                  Specifies that the command terminate at its first
                       error. No exception is raised.

 Raise_Error           Specifies that the command continue executing as best
                       it can after errors are discovered. At some point,
                       an exception is raised. If no other exception is
                       defined for the command, the Error exception is
                       raised.


 REFERENCES

 type Error_Reaction
 function Persevere
 function Propagate
 function Reaction
 procedure Set_Default_Reaction



 @node !Tools.Profile.Set_Remote_Passwords

 procedure Set_Remote_Passwords
              (Passwords : Remote_Passwords_Type);
 

 DESCRIPTION

 Sets the remote-passwords-file component in the job response profile for the
 current job.

 A remote-passwords file is a text file that specifies the usernames and
 passwords to be used when accessing remote machines. For further
 information, see package Remote_Passwords in this book.

 This procedure is for programmatic use only. To set the default
 remote-passwords file to be used by a particular command, use the Response
 parameter of that command. To set the default remote-passwords file for a
 session, use the Remote_Passwords.Set_Default procedure, or edit the
 Profile.Remote_Passwords session switch directly.


 PARAMETERS

 Passwords : Remote_Passwords_Type;

 Specifies the value to which the remote-passwords-file component is to be
 set. This value must be of subtype Remote_Passwords_Type.


 REFERENCES

 function Remote_Passwords
 type Remote_Passwords_Type
 procedure Set_Default Remote_Passwords
 package Remote_Passwords



 @node !Tools.Profile.Set_Remote_Sessions

 procedure Set_Remote_Sessions (Sessions : Remote_Sessions_Type);


 DESCRIPTION

 Sets the remote-sessions-file component in the job response profile for the
 current job.

 A remote-sessions file is a text file that specifies which session (or
 account) should be used when logging into a remote machine.

 This procedure is for programmatic use only. To set the default
 remote-sessions file to be used by a particular command, use the Response
 parameter of that command. To set the default remote-sessions file for a
 session, edit the Profile.Remote_Sessions session switch.


 PARAMETERS

 Sessions : Remote_Sessions_Type;

 Specifies the value to which the remote-sessions-file component is to be
 set. This value must be of subtype Remote_Sessions_Type.


 REFERENCES

 function Remote_Sessions
 type Remote_Sessions_Type
 procedure Set_Default_Remote_Sessions



 @node !Tools.Profile.Set_Response

 procedure Set_Response
              (Reaction : Error_Reaction  := Profile.Reaction;
               Filter   : Log_Filter      := Profile.Filter;
               Prefixes : Log_Prefixes    := Profile.Prefixes;
               Width    : Natural         := Profile.Width;
               Activity : Activity_Type   := Profile.Activity;
               Log_File : Log_Output_File := Profile.Log_File);
 

 DESCRIPTION

 Sets the job response profile for the remainder of the current job to have
 the specified reaction, filter, prefixes, width, activity, and log-file
 values.

 At job initialization, the values of the job response profile are obtained
 from the session response profile. This procedure can be used to change the
 job response profile. The default parameters specify the current values of
 the job response profile, which have the effect of not changing the job
 response profile. However, any of the parameters can be changed to affect
 only some of the values.

 Changes made to the job response profile in the middle of a job apply to
 the remainder of the job. They do not affect parts of the job that have
 already executed.

 You can also set the job response profile using the Set procedure.


 PARAMETERS

 Reaction : Error_Reaction := Profile.Reaction;

 Specifies the error reaction to which the error-reaction component is to be
 set. The default does not change the value of the error-reaction
 component.


 Filter : Log_Filter := Profile.Filter;

 Specifies the filter to which the filter component is to be set. The default
 does not change the value of the filter component.


 Prefixes : Log_Prefixes := Profile.Prefixes;

 Specifies the set of log prefixes to which the prefixes component is to be
 set. The default does not change the value of the prefixes component.


 Width : Natural := Profile.Width;

 Specifies the width to which the line-width component is to be set. The
 default does not change the value of the width component.


 Activity : Activity_Type := Profile.Activity;

 Specifies the activity to which the activity component is to be set. The
 default does not change the value of the activity component.


 Log_File : Log_Output_File := Profile.Log_File;

 Specifies the log output file to which the log-file component is to be set.
 The default does not change the value of the log-file component.


 REFERENCES

 procedure Set



 @node !Tools.Profile.Set_Width

 procedure Set_Width (Width : Natural);


 DESCRIPTION

 Sets the line-width component in the job response profile for the current
 job.

 The line-width component specifies the maximum length of lines in the log
 file. If a log message is longer than the width defined in the profile, the
 log message is continued on the next line. Messages that have been
 continued are prefixed with the ellipsis (...) symbol.

 To set the line-width component in the session response profile, use the
 Set_Default_Width procedure.

 To obtain the value of the line-width component in a specified profile, use
 the Width function.


 PARAMETERS

 Width : Natural;

 Specifies the width to which the line-width component is to be set. The
 maximum width is 1,023 columns.


 REFERENCES

 procedure Set_Default_Width
 function Width



 @node !Tools.Profile.Summary

 Summary : constant Log_Filter := Log_Filter'(Positive_Msg |
                         Negative_Msg => True, others => False);
 

 DESCRIPTION

 Defines a log filter that allows only positive (+++) and negative (++*)
 messages to be included in the log file.

 This constant can be used in the Filter parameter of procedures, such as
 the Set_Response procedure, to specify that only these two kinds of
 messages should appear in log file.


 REFERENCES

 constant Errors
 constant Full
 type Log_Filter
 type Msg_Kind
 constant Quiet
 constant Terse



 @node !Tools.Profile.Terse

 Terse : constant Log_Filter := Log_Filter'(False, False, False,
                                            others => True);
                         

 DESCRIPTION
                         
 Defines a log filter that allows only terse messages to be included in the
 log file.

 Terse messages include the following kinds: at (@@@), dollar ($$$), error
 (***), exception (%%%), negative (++*), position (>>>), positive (+++),
 sharp (###), and warning (!!!).

 This constant can be used in the Filter parameter of procedures, such as
 the Set_Response procedure, to specify that only this terse set of
 messages should appear in the log file.


 REFERENCES

 constant Full
 constant Errors
 type Log_Filter
 type Msg_Kind
 constant Quiet
 constant Summary



 @node !Tools.Profile.Value

 function Value (Image : String := Profile.Get)
                                           return Response_Profile;
 

 DESCRIPTION

 Returns the internal representation of the specified profile.

 Given a string representation of a response profile, this function returns
 the internal representation of that profile.

 The procedural form of this command is Convert. To obtain the string
 representation of a profile, use the Image function.

 For further information about the representation of profiles, see the
 introduction to this package.


 PARAMETERS

 Image : String := Profile.Get;

 Specifies the string representation of the profile for which to return the
 internal representation. The default is the job response profile for the
 current job.


 return Response_Profile;

 Returns the internal representation of the response profile.


 REFERENCES

 procedure Convert
 function Image



 @node !Tools.Profile.Verbose

 function Verbose
             (Reaction : Error_Reaction  := Profile.Reaction;
              Filter   : Log_Filter      := Profile.Full;
              Prefixes : Log_Prefixes    := Profile.Prefixes;
              Width    : Natural         := Profile.Width;
              Activity : Activity_Type   := Profile.Activity;
              Log_File : Log_Output_File := Profile.Log_File)
                          return Response_Profile renames Response;


 DESCRIPTION

 Returns the profile built from the specified components.

 This function builds a profile from the specified components and returns
 that profile. The profile returned by this function can be tailored with
 any reaction, filter, prefixes, width, activity, and/or log file. By default,
 the profile includes the Full log filter, which specifies that all messages
 except debug messages (denoted by ???) be included in the log file. For all
 other components, the default is the value in the job response profile for
 the current job.

 This function can be used in other commands to use, or to set as the
 default, a profile containing the specified components.

 This function renames the Response function.


 PARAMETERS

 Reaction : Error_Reaction := Profile.Reaction;

 Specifies the error-reaction component for the profile. The default is the
 error reaction in the job response profile for the current job.


 Filter : Log_Filter := Profile.Full;

 Specifies the log-filter component for the response profile. The default is
 the Full filter, which includes all messages except debug messages (denoted
 by ???).


 Prefixes : Log_Prefixes := Profile.Prefixes;

 Specifies the log-prefixes component for the profile. The default is the
 prefixes in the job response profile for the current job.


 Width : Natural := Profile.Width;

 Specifies the line-width component for the profile. The default is the width
 in the job response profile for the current job.


 Activity : Activity_Type := Profile.Activity;

 Specifies the activity component for the profile. The default is the
 activity in the job response profile for the current job.


 Log_File : Log_Output_File := Profile.Log_File;

 Specifies the log-file component for the profile. The default is the log file
 specified in the job response profile for the current job.


 return Response_Profile;

 Returns the internal representation of the profile.


 REFERENCES

 function Ignore
 function Nil
 function Raise_Exception
 function Response
 function Warn



 @node !Tools.Profile.Warn

 function Warn (Reaction : Error_Reaction  := Profile.Persevere;
                Filter   : Log_Filter      := Profile.Full;
                Prefixes : Log_Prefixes    := Profile.Prefixes;
                Width    : Natural         := Profile.Width;
                Activity : Activity_Type   := Profile.Activity;
                Log_File : Log_Output_File := Profile.Log_File)
                          return Response_Profile renames Response;


 DESCRIPTION

 Returns the profile built from the specified components.

 This function builds a profile from the specified components and returns
 that profile. The profile returned by this function can be tailored with
 any reaction, filter, prefixes, width, activity, and/or log file.

 By default, the profile includes the Persevere error reaction and the Full
 log filter. The Persevere error reaction specifies that commands continue to
 execute without raising an exception when errors are encountered. The Full
 filter specifies that all messages except debug messages (denoted by ???) be
 included in the log file. For all other components, the profile uses the
 components in the job response profile for the current job.

 This function can be used in other commands to use, or to set as the
 default, a profile containing the specified components.

 This function renames the Response function.


 PARAMETERS

 Reaction : Error_Reaction := Profile.Persevere;

 Specifies the error-reaction component for the profile. The default is the
 Persevere reaction.


 Filter : Log_Filter := Profile.Full;

 Specifies the log-filter component for the profile. The default is the Full
 filter, which includes all messages except debug messages.


 Prefixes : Log_Prefixes := Profile.Prefixes;

 Specifies the log-prefixes component for the profile. The default is the
 prefixes in the job response profile for the current job.


 Width : Natural := Profile.Width;

 Specifies the line-width component for the profile. The default is the width
 in the job response profile for the current job.


 Activity : Activity_Type := Profile.Activity;

 Specifies the activity component for the profile. The default is the
 activity in the job response profile for the current job.


 Log_File : Log_Output_File := Profile.Log_File;

 Specifies the log-file component for the profile. The default is the log file
 in the job response profile for the current job.


 return Response_Profile;

 Returns the internal representation of the profile.


 REFERENCES

 function Ignore
 function Nil
 function Raise_Exception
 function Response
 function Verbose



 @node !Tools.Profile.Width

 function Width (Response : Response_Profile := Profile.Get)
                                                    return Natural;


 DESCRIPTION

 Returns the value of the line-width component in the specified profile.

 The line-width component specifies the maximum length of lines in the log
 file. If a log message is longer than the width defined in the profile, the
 log message is continued on the next line. Messages that have been
 continued are prefixed with the ellipsis (...) symbol.

 To set the line-width component in the job and session response profiles,
 use the Set_Width and Set_Default_Width procedures, respectively.


 PARAMETERS

 Response : Response_Profile := Profile.Get;

 Specifies the profile from which to return the line width. The default is
 the job response profile for the current job.


 return Natural;

 Returns the value of the line-width component.



 @node !Commands.Program

 Package Program provides procedures that can be called in user-developed
 programs. In particular, commands in this package can be called by
 programs such as servers that run independent of a particular session.
 Commands in this package can be included in a program to change the
 identity of the job, control interaction with other jobs, and initiate
 other jobs from the current job.

 For commands that execute jobs across R1000s that are connected by a
 network, see package Remote, also in this book.


 RESOURCES IN PACKAGE PROGRAM

 The commands in package Program fall into several functional groups. Types
 and constants are not included in this list.

 Changing the access-control identity of a job:   Change_Identity

 Starting a new job:                              Create_Job, Run_Job

 Running commands as part of the current job:     Run

 Determining whether a job has started correctly: Started_Successfully

 Instructing one job to wait for another:         Wait_For

 Obtaining the current load view:                 Current


 KEY CONCEPTS FOR PACKAGE PROGRAM

 Package Program provides procedures that can be called in a user-developed
 program to cause it to programmatically change certain features of the job
 under which it is executing. You can call these procedures in a program to
 control the access-control identity of the job and its interaction with
 other jobs. You can also use the procedures to start new jobs from within
 an existing job.

 The following subsections contain further information about:

 *  Running a set of procedures as part of the current job

 *  Starting new jobs programmatically

 *  Instructing one job to wait for another

 *  Changing the access-control identity of a job


 Running a Set of Procedures as Part of the Current Job

 Package Program contains the Run procedure for running a set of procedures
 as part of the current job.

 The Run procedure can be called in a program to cause another program to
 compile, link, and execute the Ada statements specified. This procedure
 is useful for building programs that dynamically run different sets of
 operations.

 The Ada statements specified to the Run procedure must be in the form of a
 string. The Ada statements can be any series of statements that can be
 placed between a begin/end pair. (The begin/end pair is implicit.)

 Note that the Ada statements must run to completion before this procedure
 completes; they are not run as a separate job. For information about
 starting a new job from an existing job, see "Starting New Jobs
 Programmatically," below.


 Starting New Jobs Programmatically

 Package Program contains two procedures for starting new jobs
 programmatically:

 *  Create_Job

 *  Run_Job

 These two procedures accept a series of Ada statements in the form of a
 string and then create a new job under which to execute those statements.
 The Ada statements can be any series of statements that can be placed
 within a begin/end pair.

 The only difference between the procedures is that Create_Job returns the
 job number and a status indicating whether or not the job has started
 successfully; Run_Job does not return job number or status information.

 The following subsections describe various characteristics of the job
 created by the Create_Job or Run_Job procedures, including:

 *  The access-control identity of the job

 *  The username and session under which the new job is to run

 *  The devices used by the new job for Standard_Input, Standard_Output,
    and Standard_Error


 Access-Control Identity of the New Job

 By default, the new job inherits the access-control identity of the job
 that initiated it. That is, the new job belongs to the same access-control
 groups as the initiating job. If the initiating job has changed its
 access-control identity since it began, the new job inherits the
 access-control identity in effect at the time the new job is started.

 You can use the User and Password options to assign a nondefault
 access-control identity for the new job. You can also specify a username
 such as Network_Public through the User option.


 User and Session of the New Job

 The user and session associated with the new job affect how the job
 interacts with input, output, and error windows. In particular, the job
 uses the standard I/O and error windows for the associated session,
 provided that the session is still active and the default values are used
 for the input, output, and error files.

 By default, the new job is associated with the user and session of the
 initiating job. If the job is started during machine initialization, it
 assumes the identity *SYSTEM. *SYSTEM jobs are not associated with a user
 session. For this reason, *SYSTEM jobs may not have access to standard
 Environment windows.

 You can specify a nondefault user and session through the User and Session
 options. You can specify the names of individual users or names such as
 Network_Public. The session for jobs running under Network_Public is
 !Machine.Network_Public_Session.

 Note that the associated session does not determine the activity or
 session switches used by the job. A new job always inherits the activity
 and session switches of the initiating job.


 Standard Input, Output, and Error Files for the New Job

 Normally, jobs running in the Environment use editor windows for the
 Standard_Input, Standard_Output, and Standard_Error files. Specifically,
 Standard_Input and Standard_Output are I/O windows and Standard_Error is
 the message window. These files cannot be changed once jobs have begun.

 However, when you are running jobs that are independent of your session,
 you cannot ensure that these editor windows will exist. If an application
 tries to use one of these windows and the window does not exist, the job
 will terminate and all messages will be lost. This is a problem especially
 if you have started a job under a username such as Network_Public for
 which there is never an active session.

 To prevent this problem, the Create_Job and Run_Job procedures create a
 new environment in which to run the new job. In this new environment,
 Standard_Input, Standard_Output, and Standard_Error can be designated to
 be text files. Specifically, when you use Create_Job or Run_Job to start a
 new job, you can indicate the files that are to be used as Standard_Input,
 Standard_Output, and Standard_Error for that job, using the Input,
 Output, and Error options, respectively. Specifying text files through
 these options ensures that the job will always be able to access
 Standard_Input, Standard_Output, and Standard_Error.

 If you do not specify the Input, Output, and Error options, the normal
 editor windows are used, provided that the user's session is still
 active. That is, the new job assumes Standard_Output and Standard_Input to
 be an Environment I/O window and Standard_Error to be the message window.

 Note that after the job has started, the Standard_Input, Standard_Output,
 and Standard_Error files cannot be changed. To redirect input, output, or
 error messages for the new job, you must redirect Current_Input,
 Current_Output, and Current_Error. (By default, Current_Input,
 Current_Output, and Current_Error direct output to Standard_Input,
 Standard_Output, and Standard_Error, respectively.) For a complete
 discussion about Environment input, output, and error files, see the Key
 Concepts of this book.


 Instructing One Job to Wait for Another

 Sometimes when you have several interdependent jobs running
 simultaneously, one job must finish before another continues.

 To cause one job to wait for another, you can use the Wait_For procedure.
 The Wait_For procedure causes the job calling the procedure to wait for a
 particular job (specified by job number) to terminate before continuing to
 execute.


 Changing the Access-Control Identity of a Job

 When a job begins, it assumes the job identity of the user or job that
 initiated it. The job identity is the username and session to which the
 job belongs. The job identity determines:

 *  The session switches that are to be used by the job

 *  The editor windows that are to be used by the job

 *  The access-control identity of the job

 The access-control identity of a job is the access-control groups to which
 the job belongs. Depending on what the job is to access, it may need to
 change its access-control identity so that it belongs to a different set
 of groups.

 To cause a program to assume a particular access-control identity, you can
 include a call to the Change_Identity procedure in that program. The
 Change_Identity procedure changes the access-control identity of the job
 to be the identity of the specified user. A password for the specified user
 must be supplied and be correct unless the calling job belongs to the
 access-control group Privileged and has enabled privileges.

 Note that the Change_Identity procedure changes only the access-control
 identity. The job identity (the username and session with which the job is
 associated) is not changed.

 The access-control identity can be changed back to the original identity
 of the job by calling the Change_Identity procedure with the
 Restore_Identity option.

 For more information about access control, see the Library Management (LM)
 book, package Access_List.
 


 @node !Commands.Program.Change_Identity

 procedure Change_Identity (To_User  :        String     := "";
                            Password :        String     := "";
                            Options  :        String     := "";
                            Status   : in out Condition);
 

 DESCRIPTION

 Changes the access-control identity of the job and changes other
 characteristics of the job as specified by the Options parameter.

 This procedure changes the access-control identity of the job that
 calls it to be the identity of the specified user. The access-control
 identity is the set of access-control groups to which the job belongs.
 By default, jobs belong to the same access-control groups as the
 initiating job or user.

 A password for the specified user must be supplied and correct unless the
 calling job belongs to the access-control group Privileged and has enabled
 privileges (using either the Operator.Enable_Privileges procedure or this
 procedure with the Privileged option set to True).

 Note that only the access-control identity is changed. The job identity
 (the username and session with which the job is associated) is not
 changed.

 The access-control identity can be changed back to the original job
 identity by calling this procedure with the Restore_Identity option.

 For a description of access-control concepts, see the Library Management
 (LM) book, package Access_List.


 PARAMETERS

 To_User : String := "";

 Specifies the user to whom to change the access-control identity. The job
 will belong to the same access-control groups as the user specified in
 this parameter. If the default value of the null string is supplied, the
 username is not changed.


 Password : String := "";

 Specifies the password for the user specified in the To_User parameter. A
 password must be supplied unless the username is not being changed or
 the calling job is a member of access-control group Privileged and has
 enabled privileges.


 Options : String := "";

 Specifies additional changes to be made to the characteristics of the
 calling job. If the To_User parameter is null, the Options parameter is
 still processed. The legal options are:


 *  Privileged

    Enables privileged mode for the calling job. The user specified in the
    To_User parameter, or the current user if none is specified, must be a
    member of the access-control group Privileged.


 *  Privileged => Boolean

    Enables or disables privileged mode based on the value supplied. To
    enable privileged mode, the user specified in the To_User parameter, or
    the current user if none is specified, must be a member of the
    access-control group Privileged. Disabling privileges has no effect
    if the calling job is not running under privileged mode.


 *  Restore_Identity

    Changes the access-control identity of the calling job back to the
    original job identity. A password is not required to do this.


 Status : in out Condition;

 Returns an indication of the success or failure of the attempt to change
 the identity of the calling job. The value of this parameter must be of
 subtype Condition. If !Tools.Simple_Status.Error (Status) returns False,
 the operation is successful. If it is not successful, the
 Log.Put_Condition procedure or the Simple_Status.Display_Message
 function can be used to obtain the cause of the error. See subytpe
 Condition for further information.


 REFERENCES

 subtype Condition
 procedure Log.Put_Condition
 Library Management (LM), package Access_List
 Programming Tools (PT), function Simple_Status.Display_Message
 Programming Tools (PT), function Simple_Status.Error
 System Management Utilities (SMU), procedure Operator.Enable_Privileges



 @node !Commands.Program.Condition

 subtype Condition is Simple_Status.Condition;


 DESCRIPTION

 Defines a status condition that can be used to return error information
 from subprogram calls.

 A condition consists of a condition name and a message. The condition name
 indicates the type of error (if any), the severity of the error, and
 whether the operation completed successfully. The message provides
 additional information about the error.

 Typically, a condition is returned from an operation such as a call of the
 Create_Job or the Change_Identity procedure. The condition returned can
 be interrogated with the Started_Successfully function or the
 !Tools.Simple_Status.Error function.

 If there are errors, the Log.Put_Condition procedure can be used to report
 the condition name and message in the log file. Alternatively, you can use
 the !Tools.Simple_Status.Display_Message function to obtain a complete
 formatted message as a string.


 REFERENCES

 procedure Change_Identity
 procedure Create_Job
 function Started_Successfully
 procedure Log.Put_Condition
 Programming Tools (PT), function Simple_Status.Display_Message
 Programming Tools (PT), function Simple_Status.Error



 @node !Commands.Program.Create_Job

 procedure Create_Job
                  (S        :        String     := "<SELECTION>";
                   Job      :    out Job_Id;
                   Status   : in out Condition;
                   Debug    :        Boolean    := False;
                   Context  :        String     := "$";
                   After    :        Duration   := 0.0;
                   Options  :        String     := "";
                   Response :        String     := "<PROFILE>");
 

 DESCRIPTION

 Creates a job to execute the statements specified by the S parameter.

 Note: This procedure is identical to the Run_Job procedure except that the
 Run_Job procedure does not return the job number or a status indicating
 whether the new job has started successfully.

 This procedure compiles, links, and executes the Ada statements in the S
 parameter. The Ada statements can be any series of statements that can
 be placed between a begin/end pair. (The begin/end pair is implicit.)
 The statements are executed in the context named in the Context
 parameter. This context is used to determine Ada visibility and name
 resolution. The default is the current library.

 This procedure also creates a new job under which to execute the
 statements. The job number for this new job is returned in the Job
 parameter. The call to Create_Job returns once this job has been
 started.
                                                                         
 An indication of the success or failure of the attempt to start the new
 job is returned in the Status parameter. This condition can be
 interrogated by the Started_Successfully function. For further
 information about the new job's identity, user, session, and standard
 input, output, and error files, see the introduction to this package.

 To force the new job to wait before executing, specify the number of
 seconds the job is to wait in the After parameter.

 To start the new job under the debugger, specify the value True for the
 Debug parameter.


 PARAMETERS

 S : String := "<SELECTION>";

 Specifies the Ada statements to be compiled, linked, and executed. The Ada
 statements can be any series of statements that can be placed between a
 begin/end pair. (The begin/end pair is implicit.) If the default value,
 "<SELECTION>", is used, the procedure designated by the selection is
 executed. The selection must be in an Ada unit or a library:

 *  If the selection is in an Ada unit, the procedure to be executed must
    be visible (that is, it must be a library unit or it must be visible in
    a package specification). If an entire procedure is selected in an Ada
    unit, it is the procedure executed. Otherwise, the procedure that
    contains the selection is executed.

 *  If the selection is in a library, the procedure that is selected is
    executed.


 Job : out Job_Id;

 Returns the number of the job started by this procedure. If the job is not
 started successfully, the value returned is undefined.


 Status : in out Condition;

 Returns an indication of the success or failure of the attempt to create
 the job. To determine whether a job has started successfully, you can use
 the Started_Successfully function. If the job has not started
 successfully, the Log.Put_Condition procedure can be used to report the
 error in a log message.


 Debug : Boolean := False;

 Specifies whether the job should be started under the debugger. By default,
 the job is not started under the debugger.


 Context : String := "$";

 Specifies the context in which the Ada statements are compiled. This
 context is used to determine Ada visibility and to resolve names of
 library objects referenced by the statements. The string provided can be
 any legal library name. The default value is the current library.


 After : Duration := 0.0;

 Specifies the number of seconds the job should wait before beginning to
 execute the statements. The default causes the job to start immediately.


 Options : String := "";

 Specifies the options to be used for running the job. Options can be used
 to specify the new job's identity, Standard_Input file, Standard_Output
 file, and Standard_Error file. For more information about using these
 options to control the characteristics of the new job, see the
 introduction to this package. The legal options are:


 *  Input=filename

    Specifies that this file be used for the new job's Standard_Input file.
    Note that the name of this file is resolved using the context of the job
    calling Create_Job, not the context supplied by the Context parameter.
    If an input file is not specified, the standard Environment editor
    window (an I/O window) is used for Standard_Input.


 *  Output=filename

    Specifies that this file be used for the new job's Standard_Output file.
    Note that the name of this file is resolved using the context of the job
    calling Create_Job, not the context supplied by the Context parameter.
    If an output file is not specified, the standard Environment editor
    window (an I/O window) is used for Standard_Output.


 *  Error=filename

    Specifies that this file be used for the new job's Standard_Error file.
    Note that the name of this file is resolved using the context of the job
    calling Create_Job, not the context supplied by the Context parameter.
    If an error file is not specified, the standard Environment editor window
    (the message window) is used for Standard_Error.


 *  User=username

    Specifies that the new job be run with the identity of this user. The
    new job belongs to the same access-control groups as this user and
    uses this user's session. A Password option also must be supplied
    unless the initiating job belongs to the access-control group
    Privileged and has enabled privileges. If a User option is not
    specified, the new job inherits the identity of the initiating job, and
    the Session and Password options are ignored.


 *  Password=password value

    Specifies that this password be used for the user named in the User
    option. If the User option is not supplied, this option is ignored. If
    the initiating job belongs to access-control group Privileged and has
    enabled privileges, the password need not be supplied.


 *  Session=session name

    Specifies that this session be used for the newly created job. The job
    uses the terminal and windows associated with this session, provided
    they are still active and the Input, Output, and Error options are not
    specified. Note that the new job always uses the activities and session
    switches inherited from the initiating job, never the new job's
    session.

    This session must belong to the user specified in the User option and
    already exist. If the User option is not supplied, this option is
    ignored and the new job inherits the session of the initiating job. If
    the User option is present, but no Session option is supplied, the
    default session of the specified user (S_1) is used.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job. Note that the response specified by this parameter is used
 by the job calling Create_Job; it is not used by the job that is started
 as a result of Create_Job.


 RESTRICTIONS

 The Create_Job, Run, and Run_Job procedures should not be called
 concurrently from a single job--that is, within a job only one task should
 be executing a call to any of these procedures at any given time. If calls
 are made concurrently from a single job, unpredictable errors may result.


 ERRORS

 Errors can occur when the Ada statement is syntactically or semantically
 incorrect, when code-generation errors exist, or when improper activities
 are provided. The executed Ada statements also can produce errors.

 Errors other than those occurring in the execution of the Ada statements
 in the S parameter are reported as part of the current job, based on the
 response specified in the Response parameter.


 EXAMPLES

 The following program creates a separate job under which to start each
 program named in a file (F) and then reports the status of each job
 creation:

   with Io, Program, Simple_Status;
   procedure Start_Servers is
       F      : Io.File_Type;
       Job    : Program.Job_Id;
       Status : Simple_Status.Condition;
   begin
       Io.Open (F, Io.Infile, "Programs_To_Start");
       while not Io.End_Of_File (F) loop
           Program.Create_Job
              (S => Io.Get_Line (F), Job => Job, Status => Status);
           if Program.Started_Successfully (Status) then
               Io.Put_Line ("Started Job " &
                            Program.Job_Id'Image (Job));
           else
               Log.Put_Condition (Status);
           end if;
       end loop;
       Io.Close (F);
   end Start_Servers;
 

 REFERENCES

 procedure Run
 procedure Run_Job
 function Started_Successfully
 procedure Log.Put_Condition



 @node !Commands.Program.Current

 function Current (Subsystem  : String := ">>SUBSYSTEM NAME<<";
                   Unit       : String := ">>PROCEDURE NAME<<";
                   Parameters : String := "";
                   Activity   : String := "<ACTIVITY>")
                                                 return String;


 DESCRIPTION

 Returns a string containing a procedure call to the specified unit.

 The procedure call includes the name of the subsystem and the spec or load
 view containing the unit.

 First, this function determines the current spec and load views for the
 subsystem named in the Subsystem parameter. The current views are
 determined using the activity specified in the Activity parameter. If the
 activity does not contain an entry for the specified subsystem, an error
 will result.

 This function then checks for the specified unit in the current load view
 and its imports. If the specified unit exists in the current load view, the
 string returned by this function includes the name of the current load
 view. If the specified unit exists in the current load view's imports, the
 string includes the name of the imported view. If the unit cannot be
 located in either the current load view or its imports, the string
 includes the name of the current spec view. (This happens, for example, if
 the load-view entry in the activity references a code view.)

 The string returned by this function can be passed as the S parameter to
 the Create_Job, Run, and Run_Job procedures. Thus, this function can be
 used for constructing general-purpose routines that do not need to be
 modified each time a new release of the application is made.

 See the Project Management (PM) book for further information about
 activities and subsystems.


 PARAMETERS

 Subsystem : String := ">>SUBSYSTEM NAME<<";

 Specifies the subsystem for which to determine the current spec and load
 views. This subsystem must be named in the activity specified by the
 Activity parameter. Special names, wildcards, and context characters can
 be used, provided they resolve to a single subsystem. The default
 parameter placeholder, ">>SUBSYSTEM NAME<<", must be replaced or an error
 will result.


 Unit : String := ">>PROCEDURE NAME<<";

 Specifies the name of a procedure. This procedure must exist in the current
 spec or load view for the specified subsystem or the view's imports.
 Special names, wildcards, and context characters can be used, provided
 they resolve to a single procedure. The default parameter placeholder,
 ">>PROCEDURE NAME<<", must be replaced or an error will result.


 Parameters : String := "";

 Specifies the parameters to be supplied to the procedure named in the Unit
 parameter. Note that parentheses, commas, quotes, and so forth must be
 supplied.


 Activity : String := "<ACTIVITY>";

 Specifies the activity to be used to determine the current spec and load
 views for the specified subsystem. Special names, wildcards, and context
 characters can be used, provided they resolve to a single activity file. By
 default, the activity specified in the job response profile for the
 current job is used.


 return String;

 Returns a string containing a procedure call that is suitable for the
 Create_Job, Run, and Run_Job procedures.


 ERRORS

 The !Io.Io_Exceptions.Name_Error exception will be raised if the Unit
 specified cannot be located in the current spec or load view for the named
 subsystem or in the imports for either view.


 EXAMPLES

 Assume that the current activity for the calling job contains an entry for
 subsystem !Project_Tools that names Rev1_0_0 as the current load view.
 Assume Rev1_0_0 contains a procedure in the Units directory with the
 following specification:

   procedure Gather_Metrics (Units   : String;
                             Verbose : Boolean);

 To obtain the pathname for the current version of Gather_Metrics, use the
 following function:

   Program.Current (Subsystem  => "!Project_Tools",
                    Unit       => "Gather_Metics",
                    Parameters => "(""!Project_Library"", True)",
                    Activity   => "<ACTIVITY>");

 The resulting procedure call, shown below, could be used in a call to
 Run_Job in the login procedure for the project administrator to collect
 project metrics each time he or she logs in:

   "!PROJECT_TOOLS.REV1_0_0.UNITS".Gather_Metrics ("!Project_Library", True);


 REFERENCES

 procedure Create_Job
 procedure Run
 procedure Run_Job
 Project Management (PM)



 @node !Commands.Program.Job_Id

 subtype Job_Id is Machine.Job_Id;


 DESCRIPTION

 Defines the job number for a job.

 When a job is created, the Environment assigns it a unique job number in
 the range 0 through 255. This job number is used by many commands to
 indicate the job on which to operate.


 REFERENCES

 procedure Create_Job
 procedure Wait_For



 @node !Commands.Program.Run

 procedure Run (S        : String := "<SELECTION>";
                Context  : String := "$";
                Response : String := "<PROFILE>");
 

 DESCRIPTION

 Runs the statements specified by the S parameter as part of the current
 job.

 This procedure compiles, links, and executes the Ada statements in the S
 parameter. The Ada statements can be any series of statements that can
 be placed between a begin/end pair. (The begin/end pair is implicit.) If
 the default value of the S parameter is used, the procedure designated by
 the selection is executed. The selection must be in an Ada unit or a
 library.

 The statements are executed in the context named in the Context parameter.
 This context is used to determine Ada visibility and name resolution. The
 default is the current library.

 The Ada statements must run to completion before this procedure completes;
 they are not run as a separate job.

 If an exception propagates out of the statements executed by this
 procedure, a message indicating the exception is written into the log file
 for the current job. The exception does not propagate to the caller.

 To create a new job and run the specified statements under that job, use
 the Create_Job or Run_Job procedure.


 PARAMETERS

 S : String := "<SELECTION>";

 Specifies the Ada statements to be compiled, linked, and executed. The Ada
 statements can be any series of statements that can be placed between a
 begin/end pair. The begin/end pair is implicit. If the default value,
 "<SELECTION>", is used, the procedure designated by the selection is
 executed. The selection must be in an Ada unit or a library:

 *  If the selection is in an Ada unit, the procedure to be executed must
    be visible (that is, it must be a library unit or it must be visible in
    a package specification). If an entire procedure is selected in an Ada
    unit, it is the procedure executed. Otherwise, the procedure that
    contains the selection is executed.

 *  If the selection is in a library, the procedure that is selected is
    executed.


 Context : String := "$";

 Specifies the context in which the Ada statements are compiled. This
 context is used to determine Ada visibility and to resolve names of
 library objects referenced by the statements. The string provided can be
 any legal library name. The default value is the current library.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 RESTRICTIONS

 The Run, Create_Job, and Run_Job procedures should not be called
 concurrently from a single job--that is, within a job only one task should
 be executing a call to any of these procedures at any given time. If calls
 are made concurrently from a single job, unpredictable errors may result.


 ERRORS

 Errors can occur when the Ada statement is syntactically or semantically
 incorrect, when code-generation errors exist, or when improper activities
 are provided. The executed Ada statements also can produce errors.


 EXAMPLES

 The following program is an example of a login procedure that contains a
 request for another procedure to be executed:

   with Program;
   procedure Login is
   begin
       ...
       Program.Run ("""!Projects.Project_A"".Initialize;");
       ...
   end Login;

 In this login procedure, the Run procedure requests that an initialization
 routine be run. The initialization routine exists in a specific library
 (!Projects.Project_A). Using this syntax allows the initialization routine
 to be changed regularly without requiring that the Login procedure be
 demoted and repromoted each time the initialization routine is changed.


 REFERENCES

 procedure Create_Job
 procedure Run_Job



 @node !Commands.Program.Run_Job

 procedure Run_Job (S        : String   := "<SELECTION>";
                    Debug    : Boolean  := False;
                    Context  : String   := "$";
                    After    : Duration := 0.0;
                    Options  : String   := "";
                    Response : String   := "<PROFILE>");
 

 DESCRIPTION

 Creates a job to execute the statements specified by the S parameter.

 Note: This procedure is identical to the Create_Job procedure except that
 the Create_Job procedure returns the job number or a status indicating
 whether the new job has started successfully.

 This procedure compiles, links, and executes the Ada statements in the S
 parameter. The Ada statements can be any series of statements that can
 be placed between a begin/end pair. (The begin/end pair is implicit.)
 The statements are executed in the context named in the Context
 parameter. This context is used to determine Ada visibility and name
 resolution. The default is the current library.

 This procedure also creates a new job under which to execute the
 statements. The call to Run_Job returns once this job has been started.
 For information about the new job's identity, user, session, and standard
 input, output, and error files, see the introduction to this package.

 To force the new job to wait before executing, specify the number of
 seconds the job is to wait in the After parameter.

 To start the new job under the debugger, specify the value True for the
 Debug parameter.


 PARAMETERS

 S : String := "<SELECTION>";

 Specifies the Ada statements to be compiled, linked, and executed. The Ada
 statements can be any series of statements that can be placed between a
 begin/end pair. (The begin/end pair is implicit.) If the default value,
 "<SELECTION>", is used, the procedure designated by the selection is
 executed. The selection must be in an Ada unit or a library:

 *  If the selection is in an Ada unit, the procedure to be executed must
    be visible (that is, it must be a library unit or it must be visible in
    a package specification). If an entire procedure is selected in an Ada
    unit, it is the procedure executed. Otherwise, the procedure that
    contains the selection is executed.

 *  If the selection is in a library, the procedure that is selected is
    executed.


 Debug : Boolean := False;

 Specifies whether the job should be started under the debugger. By default,
 the job is not started under the debugger.


 Context : String := "$";

 Specifies the context in which the Ada statements are compiled. This
 context is used to determine Ada visibility and to resolve names of
 library objects referenced by the statements. The string provided can be
 any legal library name. The default value is the current library.


 After : Duration := 0.0;

 Specifies the number of seconds the job should wait before beginning to
 execute the statements. The default causes the job to start immediately.


 Options : String := "";

 Specifies the options to be used for running the job. Options can be used
 to specify the new job's identity, Standard_Input file, Standard_Output
 file, and Standard_Error file. For more information about using these
 options to control the characteristics of the new job, see the
 introduction to this package. The legal options are:


 *  Input=filename

    Specifies that this file be used for the new job's Standard_Input file.
    Note that the name of this file is resolved using the context of the job
    calling Create_Job, not the context supplied by the Context parameter.
    If an input file is not specified, the standard Environment editor
    window (an I/O window) is used for Standard_Input.


 *  Output=filename

    Specifies that this file be used for the new job's Standard_Output file.
    Note that the name of this file is resolved using the context of the job
    calling Create_Job, not the context supplied by the Context parameter.
    If an output file is not specified, the standard Environment editor
    window (an I/O window) is used for Standard_Output.


 *  Error=filename

    Specifies that this file be used for the new job's Standard_Error file.
    Note that the name of this file is resolved using the context of the job
    calling Create_Job, not the context supplied by the Context parameter.
    If an error file is not specified, the standard Environment editor window
    (the message window) is used for Standard_Error.


 *  User=username

    Specifies that the new job be run with the identity of this user. The
    new job belongs to the same access-control groups as this user and uses
    this user's session. A Password option also must be supplied unless
    the initiating job belongs to the access-control group Privileged and
    has enabled privileges. If a User option is not specified, the new job
    inherits the identity of the initiating job, and the Session and
    Password options are ignored.


 *  Password=password value

    Specifies that this password be used for the user named in the User
    option. If the User option is not supplied, this option is ignored. If
    the initiating job belongs to access-control group Privileged and has
    enabled privileges, the password need not be supplied.


 *  Session=session name

    Specifies that this session be used for the newly created job. The job
    uses the terminal and windows associated with this session, provided
    they are still active and the Input, Output, and Error options are not
    specified. Note that the new job always uses the activities and session
    switches inherited from the initiating job, never the new job's
    session.

    This session must belong to the user specified in the User option and
    already exist. If the User option is not supplied, this option is
    ignored and the new job inherits the session of the initiating job. If
    the User option is present but no Session option is supplied, the
    default session of the specified user (S_1) is used.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job. Note that the response specified by this parameter is used
 by the job calling Run_Job; it is not used by the job that is started as a
 result of Run_Job.


 RESTRICTIONS

 The Create_Job, Run, and Run_Job procedures should not be called
 concurrently from a single job--that is, within a job only one task should
 be executing a call to any of these procedures at any given time. If calls
 are made concurrently from a single job, unpredictable errors may result.


 ERRORS

 Errors can occur when the Ada statement is syntactically or semantically
 incorrect, when code-generation errors exist, or when improper activities
 are provided. The executed Ada statements also can produce errors.

 Errors other than those occurring in the execution of the Ada statements
 in the S parameter are reported as part of the current job, based on the
 response specified in the Response parameter.


 EXAMPLES

 The following program creates a separate job under which to start each
 program named in a file (F):

   with Io, Program, Simple_Status;
   procedure Start_Servers is
       F      : Io.File_Type;
       Job    : Program.Job_Id;
       Status : Simple_Status.Condition;
   begin
       Io.Open (F, Io.Infile, "Programs_To_Start");
       while not Io.End_Of_File (F) loop
           Program.Run_Job
              (S => Io.Get_Line (F));
       end loop;
       Io.Close (F);
                                                                           

   end Start_Servers;


 REFERENCES

 procedure Create_Job
 procedure Run



 @node !Commands.Program.Started_Successfully

 function Started_Successfully (Status : Condition)
                                    return Boolean;


 DESCRIPTION

 Returns a Boolean value indicating whether an attempt to create a job has
 been successful.

 This procedure can be used to determine whether the Create_Job procedure
 has been successful. If the attempt is not successful, the cause of the
 error can be interrogated using function
 !Tools.Simple_Status.Display_Message. Alternatively, you can use the
 Log.Put_Condition procedure, which reports the cause of the error in a log
 message.


 PARAMETERS

 Status : Condition;

 Specifies the status returned from the attempt to create a job. This
 parameter must be replaced by a value of subtype Condition or an error
 will result.


 return Boolean;

 Returns True if the job to which the condition pertains is started
 successfully; otherwise, this function returns False.


 REFERENCES

 procedure Create_Job
 procedure Log.Put_Condition
 Programming Tools (PT), procedure Simple_Status.Display_Message



 @node !Commands.Program.Wait_For

 procedure Wait_For (Job : Job_Id);


 DESCRIPTION

 Causes the current job to wait until the specified job has terminated
 before continuing to execute.

 This procedure can be used when several interdependent jobs are running
 simultaneously to indicate that the current job is to wait for the
 specified job to terminate before continuing. It is especially useful
 when the current job requires information about the status of another
 job before continuing.

 Note that, in some cases, the call does not return immediately but returns
 some time after the job completes.

 New jobs can be initiated from within an existing job using the Create_Job
 or Run_Job procedure.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number of the job for which the current job is to wait.


 REFERENCES

 procedure Create_Job
 procedure Run_Job



 @node !Commands.Remote

 Package Remote gives the user the ability to execute programs on other
 R1000s on the same network and to display the image of an object from
 another R1000 (on the same network) in a local I/O window. Specifically,
 package Remote contains the following two procedures:

 *  Run: Executes the specified Ada statements or program on a remote R1000.
    Errors are reported on the local R1000.

 *  Show: Displays the image of an object from a remote R1000 on the local
    R1000.

 The access-control identity of the remote jobs is determined by the
 remote-passwords file named in the Response parameter. If the Response
 parameter does not name a remote-passwords file, or if the remote-passwords
 file does not contain an entry for the specified remote R1000, then the
 remote job assumes the identity of the archive server, Network_Public.

 

 @node !Commands.Remote.Run

 procedure Run (Machine      : String := ">>MACHINE_NAME<<";
                Command      : String := "<IMAGE>";
                File_Context : String := "$";
                Run_Context  : String := "<DEFAULT>";
                Options      : String := "";
                Response     : String := "<PROFILE>");
 

 DESCRIPTION

 Runs a command on another R1000.

 This procedure formats, compiles, links, and executes the Ada statements
 named in the Command parameter. The Ada statements can be any series of
 statements that can be placed between a begin/end pair. (The begin/end
 pair is implicit.) If the Ada statements in the Command parameter name an
 existing Ada unit, that unit must exist on the remote R1000.

 The File_Context parameter specifies the library on the remote R1000 in
 which to look for any Ada units called by the Command parameter. After the
 statements in the Command parameter begin executing, the library named in
 the Run_Context parameter is considered the current library. Any filenames
 referenced by the statements in the Command parameter are resolved with
 respect to this library. Note that this procedure first determines the run
 context and then determines the file context, based on the run context.
 Thus, if the file context uses relative pathnames or context characters,
 they are resolved against the library named in the Run_Context
 parameter.

 Note that the value specified in the Response parameter is evaluated twice,
 once on the local machine and again on the remote machine. Specifically,
 the string is first evaluated to determine command behavior on the local
 machine. Any special values (such as <PROFILE>) are resolved locally. The
 string in the Response parameter is then passed to the remote machine.
 If special values are used, they are resolved a second time--this time on
 the remote machine--to determine the response characteristics for the
 remote portion of command execution.

 When using special values in the Response parameter, be aware that this
 command does not create a session on the remote machine. For this
 reason, any response characteristic for which there is no value in the
 system default profile (such as an activity file) will assume the null
 string on the remote machine. To avoid problems, explicitly specify those
 characteristics in the Response parameter, as shown below:

   Remote.Run
     (Machine      => "machine_1",
      Command      => "<IMAGE>",
      File_Context => "$",
      Run_Context  => "<DEFAULT>",
      Options      => "",
      Response     => "Activity =>
                      !Machine.Release.Current.Activity, <PROFILE>");

 If the profile named in the Response parameter specifies a remote-passwords
 file, and if that file has an entry for the specified remote R1000, then this
 procedure uses the identity (the username and password) associated with
 that machine in the remote-passwords file. If not, this procedure uses the
 identity of the archive server.


 PARAMETERS

 Machine : String := ">>MACHINE_NAME<<";

 Specifies the name of the remote R1000 on which to run the command. The de-
 fault parameter placeholder, ">>MACHINE_NAME<<", must be replaced or an
 error will result.


 Command : String := "<IMAGE>";

 Specifies the set of Ada statements to be run on the remote R1000. The set
 of statements can be any that can be placed in a begin/end pair. (The
 begin/end pair is implicit.) The special names "<IMAGE>" (the default) and
 "<SELECTION>" are accepted. No other naming expressions are accepted; the
 string must be executable Ada statements. Any Ada units called by these
 statements must exist in the library named in the File_Context parameter
 or its links.


 File_Context : String := "$";

 Specifies the context for resolving the Ada names specified in the Command
 parameter. Wildcards and context characters can be used if they resolve
 to a unique library.

 Note that if a relative pathname is specified, it is resolved with respect
 to the context established by the Run_Context parameter. Thus, the
 default, the current library, is the library specified in the Run_Context
 parameter.


 Run_Context : String := "<DEFAULT>";

 Specifies the location in the library hierarchy of the remote R1000 in
 which the command is to run. This library is the name-resolution context
 on the remote R1000. If the Command parameter references any other library
 objects, those names are resolved with respect to the run context. Objects
 in the library specified to be the run context can be called using only
 their simple names; all others must be qualified.

 The default special name, "<DEFAULT>", specifies the context on the remote
 R1000 with the same name as the current context on the local R1000. If
 that name-resolution context does not exist on the remote R1000, the root
 world (!) is used. Wildcards and context characters can be used if they
 resolve to a unique library.


 Options : String := "";

 No options currently are implemented for this command. This parameter is
 reserved for future development.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 RESTRICTIONS

 To execute a command on the remote R1000, the Run procedure must have read
 access to that command.


 ERRORS

 Errors are reported on the local R1000.


 EXAMPLES

 Example 1

 Assume that you have a procedure called Generate_Status on a remote R1000
 called M2. The fully qualified pathname is
 !Local.Local_Utilities.Generate_Status. The Generate_Status procedure
 gathers the contents of each user's status file, joins the entries into a
 single file, and creates a file (using !Io.Io.Create) called Status_ date
 containing these entries. Daily status files are to be placed in
 !Local.Status.

 The following command performs this operation from an R1000 other than M2:

   Remote.Run (Machine      => "M2",
               Command      => "Generate_Status",
               File_Context => "^.Local_Utilities",
               Run_Context  => "!Local.Status",
               Options      => "",
               Response     => "<PROFILE>");

 The output log is displayed on the local R1000.


 Example 2

 Assume that you are prototyping part of a program in a command window and
 that you want to test how these code segments will execute on a remote
 R1000. You want the context on the remote R1000 to be the context with the
 same name as the local context.

 To execute the statements in the command window on a remote R1000 called
 M3, first place the cursor in the command window containing the statements.
 From this command window, execute the !Commands.Common.Create_Command
 procedure to open a subordinate command window. In this subordinate
 command window, enter the following command:

   Remote.Run (Machine      => "M3",
               Command      => "<IMAGE>",
               File_Context => "$",
               Run_Context  => "<DEFAULT>",
               Options      => "",
               Response     => "<PROFILE>");

 Errors will be reported on the local R1000.


 REFERENCES

 procedure Program.Run



 @node !Commands.Remote.Show

 procedure Show (Machine     : String := ">>MACHINE_NAME<<";
                 Object_Name : String := "<CURSOR>";
                 Response    : String := "<PROFILE>");


 DESCRIPTION

 Displays the contents of a library object that is on another R1000.

 This procedure displays the image of an object from another R1000 on the
 same network. The display is sent to Current_Output, which is, by default,
 an Environment output window.

 If the profile specified in the Response parameter specifies a
 remote-passwords file, and if that file has an entry for the remote R1000,
 this procedure uses the identity (the username and password) associated
 with that R1000 in the remote-passwords file. If not, this procedure uses
 the identity of the archive server.


 PARAMETERS

 Machine : String := ">>MACHINE_NAME<<";

 Specifies the name of the remote R1000. The default parameter placeholder,
 ">>MACHINE_NAME<<", must be replaced or an error will result.


 Object_Name : String := "<CURSOR>";

 Specifies the name of the object to be displayed. Special names, wildcards,
 and context characters can be used, provided they resolve to a single
 object. The default is the object on the remote R1000 that has the same
 fully qualified pathname as the local object designated by the cursor.

 The name supplied to this parameter is resolved with respect to the
 library on the remote R1000 that has the same name as the current library
 on the local R1000. If that library does not exist on the remote R1000,
 then the root world (!) is used.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 RESTRICTIONS

 To display an object on the remote R1000, the Show procedure must have
 read access to that object.


 ERRORS

 Errors are reported on the local R1000.


 EXAMPLES

 Suppose that you are working on a project that spans multiple R1000s and
 that you want to view a package (!Projects.Common_Utilities.Reports) that
 exists on a remote R1000 (M4) so that you can verify compatibility with a
 package you are currently developing. You can execute the following
 command to display package Reports:

   Remote.Show (Machine     => "M4",
                Object_Name => "!Projects.Common_Utilities.Reports",
                Response    => "<PROFILE>");

 The command produces the following display in an Environment output window
 on the local R1000:

   91/05/01 18:14:00 ::: [Remote.Show, Machine => "M4", Object_Name =>
   91/05/01 18:14:01 ... "!Projects.Common_Utilities.Reports",
   91/05/01 18:14:02 ... Response => "<PROFILE>"].
   91/05/01 18:14:02 --- showing M4 !PROJECTS.COMMON_UTILITIES.REPORT
   with Group;
   with Person;
   package Reports is

   -- This defines the set of reports available and provides the
   -- necessary processing to display the reports.

       type Options is (Name_Only, Name_And_Address, All_Info);

       procedure Put (The_Group : in Group.Collection;
                      With_Options : in Reports.Options :=
   Reports.All_Info;
                      With_Report_Header : in String := "");

       procedure Put (The_Person : in Person.Object;
                      With_Options : in Reports.Options :=
   Reports.All_Info);

   end Reports;
   91/05/01 18:14:05 ::: [end of Remote.Show operation].



 @node !Commands.Remote_Passwords

 Package Remote_Passwords provides commands for manipulating remote-pass-
 words files. Remote-passwords files are accessed by commands that perform
 operations across a network, including commands that are part of the
 standard Rational Environment (such as those in !Commands.Ftp) and
 commands from other Rational products (such as the Rational Compilation
 Integrator).

 By default, the commands in this package modify the remote-passwords file
 for the current session. Thus, these commands provide a convenient
 alternative to locating the file in the library hierarchy and editing it
 directly. Furthermore, these commands provide a way to encrypt the
 passwords listed in the file.

 As with most commands in the world !Commands, the commands in this package
 are intended for interactive use, but they can be used programmatically.


 RESOURCES IN PACKAGE REMOTE_PASSWORDS

 Adding entries to a remote-passwords file:     Add

 Editing entries in a remote-passwords file:    Change, Update

 Creating a remote-passwords file:              Create

 Deleting entries from a remote-passwords file: Delete

 Displaying the encrypted form of a password:   Show_Encryption

 Managing the default remote-passwords file:    Get_Default, Set_Default


 KEY CONCEPTS FOR PACKAGE REMOTE_PASSWORDS

 For security purposes, computer operations often require a username and
 password. Usernames and passwords required for remote operations can be
 stored and encrypted in remote-passwords files. Thus, using
 remote-passwords files enables the user to perform remote operations
 without the necessity of supplying usernames and passwords directly to
 the networking command.

 Many facilities check for a remote-passwords file when performing
 networking operations. Specifically, commands in packages !Commands.Ftp and
 !Commands.Remote and the !Commands.Archive.Copy procedure check for a
 remote-passwords file. Remote-passwords files are also used by many of
 Rational's other products, including the Rational Publishing Interface
 (RPI), the Rational Teamwork Interface (RTI), the Target Build Utility
 (TBU), the Rational Compilation Integrator (RCI), and Rational's family of
 Cross-Development Facility (CDF) products. For specific information about
 how each of these products gains access to remote-passwords files, see that
 product's manuals.

 This package introduction contains information about:

 *  Determining when to use a remote-passwords file

 *  Using a remote-passwords file: the basic scenario

 *  Manipulating remote-passwords files, including:

    -  Creating a remote-passwords file

    -  Editing remote-passwords files

    -  Encrypting passwords

 *  Setting the default remote-passwords file

 *  Overriding the default remote-passwords file

 *  Using remote-passwords files from *SYSTEM jobs


 Determining When to Use a Remote-Passwords File

 Many networking operations allow you to specify a remote username and
 password in command parameters, in library switches, in session
 switches, or in a remote-passwords file. Remote-passwords files are
 recommended for storing and providing networking information if:

 *  You want to encrypt passwords.

 *  You routinely access several other machines, each of which requires a
    different username or password.

 *  You use commands that implicitly perform networking operations, and you
    want to specify the remote username under which to perform the
    operations. For example, the Archive.Copy procedure and commands in
    package Remote perform remote operations but do not explicitly request
    a remote username or password. Thus, if you do not have a default
    remote-passwords file, these commands use the identity (and
    access-control groups) of the archive server, Network_Public.


 Using a Remote-Passwords File: The Basic Scenario

 Usually there are several machines that you access frequently using
 networking operations. Although you can have any number of
 remote-passwords files, you generally have one that contains the machine
 names, usernames, and passwords you use most frequently.

 For example, assume that you have accounts on five machines (called
 Machine_1 through Machine_5) that are connected to the same network:

 *  For Machine_1 and Machine_2, your username is YUser. The security on
    these machines is relatively high, so you choose to encrypt your
    passwords for these machines.

 *  For Machine_3 and Machine_4, your username is also YUser; however, the
    security on these machines is low, so you choose the same unencrypted
    password--namely, My_Password!.

 *  For Machine_5, your username is YUsername. The security on this machine
    is such that you do not want your password in a file but prefer to enter
    it from your keyboard when necessary.

 To use the remote-passwords facility, you create a text file with a name
 such as !Users.Your_Username.Secret_Stuff that includes the following
 entries:

   Machine_1    YUser       <DES:BD27F7CF136E24B6>
   Machine_2    YUser       <DES:49E379F4EAD9B339>
   Machine_5    YUsername   <PROMPT>
   Others       YUser       My_Password!

 To make this remote-passwords file the default for all networking
 operations from your current session, you can use the
 Remote_Passwords.Set_Default command, which sets the
 Profile.Remote_Passwords switch in your session switch file to point to this
 file:

   Remote_Passwords.Set_Default
            (Existing_File => "!Users.Your_Username.Secret_Stuff",
             For_Session   => "",
             Response      => "<PROFILE>");

 Note that you must log out and log back in for the default
 remote-passwords file to take effect.

 After your remote-passwords file has been created and entered into the
 Profile.Remote_Passwords switch, you can edit it by using commands in
 this package or by locating it in the library hierarchy and editing it
 directly.

 For example, suppose you want to gain access to a new machine called Ma-
 chine_6. On this machine your username is YourUsername. Because you may be
 changing your password frequently, you want to be prompted for the
 password when one is needed. To add the entry to your remote-passwords
 file, you can execute the following command:

   Remote_Passwords.Add (New_Hostname => "Machine_6",
                         New_Username => "YourUsername",
                         New_Password => """<PROMPT>""",
                         Encryption   => Remote_Passwords.None,
                         For_Session  => "",
                         Response     => "<PROFILE>");

 Notice that to enter the value "<PROMPT>" into the remote-passwords file
 using this command, you must enclose the value in a total of three sets of
 double quotation marks. The two extra sets of quotation marks are
 necessary to ensure that the value is interpreted as a string to be
 inserted into the remote-passwords file rather than as an indication to
 prompt you for the value to be entered in the file.


 Manipulating Remote-Passwords Files

 A remote-passwords file is a text file that contains one or more entries of
 the following form:

 machine_name      username      password

 where machine_name is the network name of a machine to which the user has
 access, username is a valid username on the specified machine, and password
 is the required password for the specified username.

 The word "Others" can be used in the machine_name column to mean all other
 machines to which a user has access. Including an entry for "Others" is
 useful when you have identical usernames and passwords on two or more 
 machines and do not want to specify each of them individually. If used, 
 "Others" should be on the last line in the file.

 The username can be:

 *  A literal string, which is a string of any length not containing
    blanks. This string can, but need not, be enclosed by quotation marks.

 *  The special value <PROMPT>, which causes the user to be prompted for
    the username during an operation that accesses the remote host. The
    word <PROMPT> must be in uppercase and enclosed by angle brackets (<>).

 The form of the password can be:

 *  A literal string. Entries for literal passwords are case-sensitive, so
    the entry slithy_toves differs from Slithy_Toves.

 *  The special value <PROMPT>, which causes the user to be prompted for
    the password during an operation that accesses the remote host. The
    word <PROMPT> must be in uppercase and must be enclosed by angle
    brackets (<>).

 *  An encrypted password, which appears as a hexadecimal string enclosed
    in angle brackets. See "Encrypting Passwords," below, for more
    information.

 *  The null string (""), which indicates that no password is required. (In
    this case, the password can be omitted altogether.)


 Creating Remote-Passwords Files

 Remote-passwords files are text files. Thus, to create a new, empty
 remote-passwords file, you can use the !Commands.Text.Create procedure.

 If you want to create a remote-passwords file by copying an existing file,
 you can use the Create procedure from this package. The Create procedure
 copies the contents of the specified source file into a new remote-passwords
 file. Using the Create procedure, you can also specify the method of
 encryption to be used for passwords in the new file. The new
 remote-passwords file is created in the current context.

 After you have created a remote-passwords file, you can set it to be the
 default for all networking operations in a particular session. See
 "Setting the Default Remote-Passwords file," page nn, for more
 information.


 Editing Remote-Passwords Files

 There are two ways to edit remote-passwords files:

 *  You can edit a remote-passwords file, without having to locate it in the
    library hierarchy and open it for editing, using commands (Add, Change,
    Delete) in this package. See the entries for the Add, Change, and
    Delete procedures for more information.

 *  You can edit a remote-passwords file directly using basic text-editing
    operations. See the Editing Specific Types (EST) book, Text Images, for
    information about editing text files.


 Encrypting Passwords

 Using commands in this package, you can encrypt passwords in a
 remote-passwords file. Specifically, the Add and Change procedures have an
 Encryption_Method parameter that allows you to specify the form of
 encryption to be used. Three methods of encryption are available:

 *  Des: Specifies that the password value be encrypted using a Data
    Encryption Standard (DES) algorithm. Entries encrypted using this
                                                                           

    method appear in the remote-passwords file in angle brackets and have
    the prefix DES. For example:

      <DES:018853AB3F000CC4FEB7D5F91C2772FD>

 *  Hex: Specifies that the password value be encryped in hexadecimal
    notation. Entries encrypted using this method appear in the
    remote-passwords file in angle brackets and have the prefix HEX. For
    example:

      <HEX:6D795F70617373776F7264>

 *  None: Specifies that no encryption be used. Unencrypted passwords appear
    in the remote-passwords file in clear text. For example:

      My_Password

 If you decide to edit the remote-passwords file directly, you can use the
 Show_Encryption command to generate the encrypted value and then
 region-copy it into the file.

 Note that the encryption key for a password entry is the password
 associated with the username under which the entry was created. For
 example, if your password for the local machine is Splot, then Splot is
 the key used to encrypt (and decrypt) entries in your remote-passwords
 file. Thus, if you change your password (using the
 !Commands.Operator.Change_Password procedure), you must use the Update
 procedure to reencrypt the entries in your remote-passwords file. You also
 need to update your remote-passwords file if you copy it onto a machine for
 which you have a different password.


 Setting the Default Remote-Passwords File

 The default remote-passwords file for your session is the file named in the
 Profile.Remote_Passwords session switch. This value also serves as the
 remote-passwords component of the session response profile for that
 session (see package Profile).

 To set the value of this switch, you can use one of the following methods:

 *  Execute the Remote_Passwords.Set_Default command, specifying the name
    of your remote-passwords file and the session for which it is to be the
    default. The command will take effect the first time you set a default
    remote-passwords file; otherwise, the new default will take effect the
    next time you log in.

 *  Edit your session switch file directly:

    1. Execute the Switches.Edit_Session_Attributes procedure to open the
       switch file for your current session for editing.

    2. Select the Profile.Remote_Passwords switch.

    3. Execute the !Commands.Common.Edit procedure. This procedure opens a
       command window containing the following prompt:

         Change ("current switch value")

    4. Enter the name of your remote-passwords file and promote the command
       window.

    5. Promote the session switch file to commit the change. The change will
       take effect the next time you log in.

 You can also programmatically set the default remote-passwords file for
 your current session using the Profile.Set_Default_Remote_Passwords
 command.


 Overriding the Default Remote-Passwords File

 By default, the remote-passwords file specified in your session switch file
 is used for all networking operations. However, you can specify another
 remote-passwords file in either of two other ways:

 *  You can set the remote-passwords file for the current job using the
    Profile.Set_Remote_Passwords command.

 *  You can set the remote-passwords file for a particular command in the
    Response parameter of that command.

 For example, the following command uses the username and password
 associated with machine M2 in a remote-passwords file called Secret_Stuff:

   Remote.Run
        (Machine      => "M2",
         Command      => "Daily_Report",
         File_Context => "$",
         Run_Context  => "<DEFAULT>",
         Options      => "",
         Response     => "Remote_Passwords=>Secret_Stuff,<PROFILE>");

 Some commands also allow you to specify remote username and password
 information in command parameters, library switches, or session
 switches. The commands that check these locations do so in the following
 order:

 *  The command's username and password parameters

 *  The library switches for the current world or view (Ftp.Username and
    Ftp.Password switches)

 *  The session switches for the current session (Session_Ftp.Username and
    Session_Ftp.Password switches)

 *  The remote-passwords file of the profile specified in the Response
    parameter of the command. If the command does not have a Response
    parameter, the command uses the remote-passwords file specified in the
    job response profile for the current job.


 Using Remote-Passwords Files from *SYSTEM Jobs

 You can use remote-passwords files from *SYSTEM jobs, such as jobs started
 during machine initialization.

 To use remote-passwords files from *SYSTEM jobs, such as those started by
 machine initialization, you should be aware that *SYSTEM jobs are not
 associated with a user session or session response profile. Instead, they
 use a system-defined response profile, which does not include a
 remote-passwords file. For this reason, if you want a *SYSTEM job to use a
 remote-passwords file, you must either:

 *  Explicitly set the remote-passwords file in the job response profile for
    the job (using !Tools.Profile.Set_Remote_Passwords), or

 *  Specify the remote-passwords file in the Response parameter of the
    command(s) that perform networking operations.

 If the remote-passwords file used by a *SYSTEM job contains encrypted pass-
 words, the job will use the password for user Operator as the key to
 decrypt the remote-passwords file. For this reason, encrypted entries must
 be added to the remote-passwords file by user Operator. If the Operator
 password is changed, the remote-passwords file must be updated (using the
 Update procedure in this package). The remote-passwords file also must be
 updated if it is copied onto a machine for which user Operator has a
 different password.

 

 @node !Commands.Remote_Passwords.Add

 procedure Add
       (New_Hostname : String            := ">>REMOTE HOST<<";
        New_Username : String            := ">>REMOTE USER<<";
        New_Password : String            := "<PROMPT>";
        Encryption   : Encryption_Method := Remote_Passwords.Des;
        For_Session  : String            := "";
        Response     : String            := "<PROFILE>");
 

 DESCRIPTION

 Adds an entry to the remote-passwords file for the specified session.

 This procedure adds an entry with the specified hostname (machine name),
 username, and password to the remote-passwords file for the specified
 session. If an entry for the specified hostname already exists, an error
 message is generated and the remote-passwords file is left unchanged. If
 changes are made, this procedure commits those changes.

 To change the username and password associated with an existing hostname,
 use the Change procedure.


 PARAMETERS

 New_Hostname : String := ">>REMOTE HOST<<";

 Specifies the name of a host machine to be entered into the
 remote-passwords file. The default parameter placeholder, ">>REMOTE
 HOST<<", must be replaced or an error will result.


 New_Username : String := ">>REMOTE USER<<";

 Specifies the username to be entered into the remote-passwords file. This
 username must exist on the specified host machine. The default parameter
 placeholder, ">>REMOTE USER<<", must be replaced or an error will
 result.


 New_Password : String := "<PROMPT>";

 Specifies the password to be entered into the remote-passwords file. The
 default, "<PROMPT>", causes the command to prompt the user for the
 password that is to be entered in the remote-passwords file. To specify
 that the value "<PROMPT>" be inserted into the remote-passwords file, you
 must enclose the value in a total of three sets of double quotation marks:
 """<PROMPT>""".


 Encryption : Encryption_Method := Remote_Passwords.Des;

 Specifies the form of encryption to be applied to the password. The
 following values are accepted:

 Des                The default. Specifies that the password value be
                    encrypted using a Data Encryption Standard (DES)
                    algorithm.

 Hex                Specifies that the password value be encryped in
                    hexadecimal notation.

 None               Specifies that no encryption be used.


 For_Session : String := "";

 Specifies the session for which the remote-passwords file is to be changed.
 The null string (the default) signifies the current session for the current
 user.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 RESTRICTIONS

 To add an entry to a remote-passwords file, you must have write access to
 the file.


 EXAMPLES

 Example 1

 The following command adds an entry in the remote-passwords file for the
 current session naming machine M3, username Reyes, and the password
 Opensesame:

   Remote_Passwords.Add (New_Hostname => "M3",
                         New_Username => "Reyes",
                         New_Password => "Opensesame",
                         Encryption   => Remote_Passwords.Des,
                         For_Session  => "",
                         Response     => "<PROFILE>");

 The resulting entry, shown below, includes the password as encrypted using
 a DES algorithm:

   M3 Reyes <DES:3AF67FA316AE1BE6016414A22E67A98F>


 Example 2

 Suppose that when accessing remote host machines not explicitly named in
 the remote-passwords file, you want commands to prompt you for a username
 and password. The following command creates an appropriate entry in the
 remote-passwords file for the current session:

   Remote_Passwords.Add (New_Hostname => "Others",
                         New_Username => "<PROMPT>",
                         New_Password => """<PROMPT>""",
                         Encryption   => Remote_Passwords.None,
                         For_Session  => "",
                         Response     => "<PROFILE>");

 Notice that in the New_Password parameter the value <PROMPT> requires
 three sets of double quotation marks: one set to indicate a string
 parameter value and two additional sets to indicate quotation marks 
 within the parameter value. The resulting entry appears as shown below:

   Others <PROMPT> <PROMPT>


 REFERENCES

 procedure Change
 procedure Create



 @node !Commands.Remote_Passwords.Change

 procedure Change
    (Existing_Hostname : String := ">>REMOTE HOST<<";
     New_Username      : String := ">>REMOTE USER<<";
     New_Password      : String := "<PROMPT>";
     Encryption        : Encryption_Method := Remote_Passwords.Des;
     For_Session       : String := "";
     Response          : String := "<PROFILE>");


 DESCRIPTION

 Changes an existing entry in the remote-passwords file for the specified
 session.

 This procedure edits the entry for the specified host machine to include
 the specified username and password. If an entry for the specified host
 machine does not exist already, it is added. This procedure then commits
 the changed remote-passwords file.

 To create an entry for a new host machine, use the Add procedure.


 PARAMETERS

 Existing_Hostname : String := ">>REMOTE HOST<<";

 Specifies the name of a host machine in the remote-passwords file. The
 default parameter placeholder, ">>REMOTE HOST<<", must be replaced or an
 error will result.


 New_Username : String := ">>REMOTE USER<<";

 Specifies the username to be entered into the remote-passwords file. This
 username must exist on the specified remote host. The default parameter
 placeholder, ">>REMOTE USER<<", must be replaced or an error will result.


 New_Password : String := "<PROMPT>";

 Specifies the password to be entered into the remote-passwords file. The
 default, "<PROMPT>", causes the command to prompt the user for the
 password that is to be entered in the remote-passwords file. To specify
 that the value "<PROMPT>" be inserted into the remote-passwords file, you
 must enclose the value in two sets of double quotation marks,
 ""<PROMPT>"".


 Encryption : Encryption_Method := Remote_Passwords.Des;

 Specifies the form of encryption to be applied to the password. The
 following values are accepted:

 Des                The default. Specifies that the password value be
                    encrypted using a Data Encryption Standard (DES)
                    algorithm.

 Hex                Specifies that the password value be encryped in
                    hexadecimal notation.

 None               Specifies that no encryption be used.


 For_Session : String := "";

 Specifies the session for which the remote-passwords file is to be changed.
 The null string (the default) signifies the current session for the current
 user.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 RESTRICTIONS

 To edit a remote-passwords file, you must have write access to that file.


 EXAMPLES

 Assume that a user named Mike Burgan has a remote-passwords file that
 includes the entries shown below:

   Machine_1 MBurgan  <DES:BD27F7CF136E24B6>
   Machine_2 MCB      Opensesame
   Machine_5 MCBurgan <PROMPT>
   Others    MCB      My_Password!

 Suppose that security is tightened on Machine_2, so he has changed his
 password to Abracadabra. He can edit his remote-passwords file and encrypt
 the new password using the following procedure:

   Remote_Passwords.Change
                    (Existing_Hostname => "Machine_2",
                     New_Username      => "MCB",
                     New_Password      => "Abracadabra",
                     Encryption        => Remote_Passwords.Des,
                     For_Session       => "",
                     Response          => "<PROFILE>");

 The resulting remote-passwords file appears below:

   Machine_1 MBurgan  <DES:BD27F7CF136E24B6>
   Machine_2 MCB      <DES:03AA568F271D15BA63B766FAD326F1ED>
   Machine_5 MCBurgan <PROMPT>
   Others    MCB      My_Password!

 Note that the Change procedure can be used from any location in the
 library hierarchy. It does not need to be used from a remote-passwords
 file.


 REFERENCES

 procedure Add
 procedure Create



 @node !Commands.Remote_Passwords.Create

 procedure Create
      (New_File        : String := ">>REMOTE PASSWORDS FILE<<";
       Source_File     : String := "";
       Source_Password : String := "<PROMPT>";
       Encryption      : Encryption_Method := Remote_Passwords.Des;
       Response        : String := "<PROFILE>");


 DESCRIPTION

 Creates a new remote-passwords file.

 This procedure creates a new remote-passwords file, using the specified
 source file to initialize the contents of the file.

 The passwords in the source file are decrypted using the password specified
 in the Source_Password parameter. They are then entered into the new
 remote-passwords file using the encryption method specified in the
 Encryption parameter. Any source entries that cannot be decrypted by the
 source password are not copied into the new file.


 PARAMETERS

 New_File : String := ">>REMOTE PASSWORDS FILE<<";

 Specifies the name of the new remote-passwords file. The default parameter
 placeholder, ">>REMOTE PASSWORDS FILE<<", must be replaced or an error
 will result.


 Source_File : String := "";

 Specifies the name of the source file from which to copy the
 remote-passwords entries. The default, the null string, specifies that the
 new remote-passwords file is to be empty.


 Source_Password : String := "<PROMPT>";

 Specifies the password to be used as the key for decrypting the passwords
 in the source file. This password must match the password used when the
 entries in the source file were originally created and encrypted. Any 
 entries that cannot be decrypted are not copied into the new remote-passwords 
 file. The default, "<PROMPT>", prompts the user to enter the source password.


 Encryption : Encryption_Method := Remote_Passwords.Des;

 Specifies the form of encryption to be used for entering the passwords in
 the new remote-passwords file. The following values are accepted:

 Des                The default. Specifies that the password value be
                    encrypted using a Data Encryption Standard (DES)
                    algorithm.

 Hex                Specifies that the password value be encryped in
                    hexadecimal notation.

 None               Specifies that no encryption be used.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 RESTRICTIONS

 Only those entries in the source file that can be decrypted using the
 specified source password will be copied into the new remote-passwords file.


 EXAMPLES

 The following command creates a new remote-passwords file called
 Secret_Passwords and copies the entries from a remote-passwords file
 called Original_Passwords into the new file. The passwords in
 Original_Passwords were encrypted by a user whose password at the time of
 encryption was Marsbar.

   Remote_Passwords.Create (New_File        => "Secret_Passwords",
                            Source_File     => "Original_Passwords",
                            Source_Password => "Marsbar",
                            Encryption      => Remote_Passwords.Des,
                            Response        => "<PROFILE>");

 The new entries are encrypted according to a DES algorithm.


 REFERENCES

 procedure Add
 subtype Encryption_Method



 @node !Commands.Remote_Passwords.Delete

 procedure Delete (Existing_Hostname : String := ">>REMOTE HOST<<";
                   For_Session       : String := "";
                   Response          : String := "<PROFILE>");
 

 DESCRIPTION

 Removes the specified entry from the remote-passwords file for the specified
 session.

 This procedure deletes the entry for the specified host machine from the
 remote-passwords file for the specified session. If an entry for the
 specified host machine does not exist, a warning message is generated.


 PARAMETERS

 Existing_Hostname : String := ">>REMOTE HOST<<";

 Specifies the name of a host machine in the remote-passwords file. The
 default parameter placeholder, ">>REMOTE HOST<<", must be replaced or an
 error will result.


 For_Session : String := "";

 Specifies the session for which the remote-passwords file is to be changed.
 The null string (the default) signifies the current session for the current
 user.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 RESTRICTIONS

 To delete entries from a remote-passwords file, you must have write access
 to that file.


 EXAMPLES

 Assume that the default remote-passwords file for your current session
 contains the following entries:

   Machine_1 MBurgan  <DES:BD27F7CF136E24B6>
   Machine_2 MCB      Opensesame
   Machine_5 MCBurgan <PROMPT>
   Others    MCB      My_Password!

 The following command deletes the entry for Machine_5:

   Remote_Passwords.Delete (Existing_Hostname => "Machine_5",
                            For_Session       => "",
                            Response          => "<PROFILE>");


 REFERENCES

 procedure Add
 procedure Change



 @node !Commands.Remote_Passwords.Encryption_Method

 type Encryption_Method is (None, Hex, Des);


 DESCRIPTION

 Defines the forms of encryption that can be applied to the passwords
 entered into a remote-passwords file.

 Values of this type can be specified in the Encryption parameter of
 commands in this package.


 ENUMERATIONS

 Des

 Specifies that the password value be encrypted using a Data Encryption
 Standard (DES) algorithm. Entries encrypted using this method appear in
 the remote-passwords file in angle brackets and have the prefix DES. For
 example:

   <DES:018853AB3F000CC4FEB7D5F91C2772FD>


 Hex

 Specifies that the password value be encryped in hexadecimal notation.
 Entries encrypted using this method appear in the remote-passwords file in
 angle brackets and have the prefix HEX. For example:

   <HEX:6D795F70617373776F7264>
   

 None

 Specifies that no encryption be used. Unencrypted passwords appear in the
 remote-passwords file in clear text. For example:

   My_Password



 @node !Commands.Remote_Passwords.Get_Default

 function Get_Default (For_Session : String := "";
                       Response    : String := "<WARN>")
                                                     return String;
   

 DESCRIPTION

 Returns the name of the remote-passwords file for the specified session.

 This procedure returns the fully qualified pathname of the remote-passwords
 file specified in the Profile.Remote_Passwords session switch for the
 specified session.

 To obtain the default remote-passwords file for the current session for
 programmatic use, see the Profile.Default_Remote_Passwords function.


 PARAMETERS

 For_Session : String := "";

 Specifies the session for which the remote-passwords file is to be changed.
 The null string (the default) signifies the current session for the current
 user.

                                                                         
 Response : String := "<WARN>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default value indicates that the command
 is to log only negative, error, warning, and exception messages, to
 persevere at errors without raising an exception, and to use the job
 response profile for the current job for all other response
 characteristics.


 return String;

 Returns the fully qualified pathname of the remote-passwords file. If errors
 are encountered during the processing of this function, the null string is
 returned.


 EXAMPLES

 Suppose that you want to view the default remote-passwords file for your
 current session, but you cannot remember the name of the file. The
 following command opens a window containing the default remote-passwords
 file for your current session:

   Definition (Remote_Passwords.Get_Default);


 REFERENCES

 procedure Set_Default
 function Profile.Default_Remote_Passwords



 @node !Commands.Remote_Passwords.Set_Default

 procedure Set_Default (Existing_File : String := "<IMAGE>";
                        For_Session   : String := "";
                        Response      : String := "<PROFILE>");
   

 DESCRIPTION

 Sets the default remote-passwords file for the specified session.

 The command will take effect immediately the first time you set a default
 remote-passwords file; otherwise, the new default will take effect the
 next time you log in.

 This procedure sets the specified remote-passwords file to be the default
 remote-passwords file for the specified session. The name of this file is
 stored in the Profile.Remote_Passwords switch of the session switch file
 associated with the specified session. When no switch file exists, it is
 created before the value is stored.

 Note that the value of the Profile.Remote_Passwords session switch also
 serves as the remote-passwords-file component of the session response
 profile for the current session. Thus, to programmatically set the
 default remote-passwords file for the current session, you can use the
 Profile.Set_Default_Remote_Passwords procedure.

 To obtain the fully qualified pathname of the remote-passwords file for a
 particular session, use the Get_Default function.


 PARAMETERS

 Existing_File : String := "<IMAGE>";

 Specifies the name of the remote-passwords file. The default is the current
 image or the current selection, if one exists. Special names, wildcards,
 and context characters can be used if they resolve to a single name.


 For_Session : String := "";

 Specifies the session for which the remote-passwords file is to be changed.
 The null string (the default) signifies the current session for the current
 user.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 EXAMPLES

 When executed from the library containing a remote-passwords file called
 Secret_Passwords, the following command sets that file to be the default
 for the current session:

   Remote_Passwords.Set_Default
                      (Existing_File => "Secret_Passwords",
                       For_Session   => "",
                       Response      => "<PROFILE>");


 REFERENCES

 function Get_Default



 @node !Commands.Remote_Passwords.Show_Encryption

 procedure Show_Encryption
         (Of_Password : String            := "<PROMPT>";
          Encryption  : Encryption_Method := Remote_Passwords.Des);


 DESCRIPTION

 Displays the encrypted form of the specified password.

 This procedure displays the encrypted form of the specified password using
 the specified encryption method. This procedure is useful if you are
 editing a remote-passwords file directly and want to encrypt passwords.
 The value displayed is identical to what would be entered in the
 remote-passwords file if the same password and encryption method were
 used in the Add or Change procedure.

 The job report is sent to Current_Error, which is, by default, the message
 window.


 PARAMETERS

 Of_Password : String := "<PROMPT>";

 Specifies the password for which the encrypted form is desired. The
 default, "<PROMPT>", prompts the user to enter the password to be
 encrypted.


 Encryption : Encryption_Method := Remote_Passwords.Des;

 Specifies the form of encryption to be used for entering the passwords in
 the new remote-passwords file. The following values are accepted:

 Des                The default. Specifies that the password value be
                    encrypted using a Data Encryption Standard (DES)
                    algorithm.

 Hex                Specifies that the password value be encryped in
                    hexadecimal notation.

 None               Specifies that no encryption be used.


 EXAMPLES

 The following command displays the password Opensesame encrypted according
 to a DES algorithm:

   Remote_Passwords.Show_Encryption
                            (Of_Password => "Opensesame",
                             Encryption  => Remote_Passwords.Des);

 The resulting display, shown below, is sent to the message window:

   <DES:3AF67FA316AE1BE6016414A22E67A98F>


 REFERENCES

 procedure Add
 procedure Change
 type Encryption_Method



 @node !Commands.Remote_Passwords.Update

 procedure Update (Old_Password : String := "<PROMPT>";
                   For_Session  : String := "";
                   Response     : String := "<PROFILE>");
   

 DESCRIPTION

 Updates the encryption of passwords in the remote-passwords file so that
 the new encryption key is the password associated with the current user
 and machine.

 The encryption key for an encrypted password entry is the password for the
 user who created the entry. Note that this is the password in effect at
 the time the entry was created. If a user changes his or her password
 (using the !Commands.Operator.Change_Password procedure), any encrypted
 passwords must be updated using this procedure or errors will result when
 networking operations try to use passwords encrypted under the old
 password encryption key.

 This procedure first decrypts the passwords in the remote-passwords file
 using the password specified in the Old_Password parameter. It then
 reencrypts the passwords using the current user's password for the local
 machine.


 PARAMETERS

 Old_Password : String := "<PROMPT>";

 Specifies the old password under which the remote-password entries were en-
 crypted. The default, "<PROMPT>", prompts the user to enter the old
 password.


 For_Session : String := "";

 Specifies the session for which the remote-passwords file is to be changed.
 The null string (the default) signifies the current session for the current
 user.


 Response : String := "<PROFILE>";

 Specifies how to respond to errors, where to send log messages, and what
 activity to use during the execution of this command. For the values
 accepted by this parameter, see Parameter-Value Conventions in the
 Reference Summary (RS) book. The default is the job response profile for
 the current job.


 EXAMPLES

 Suppose that you have changed your password from Opensesame to
 Abracadabra. To update any encrypted entries in your default
 remote-passwords file so that they use Abracadabra as the encryption key,
 you can use the following command:

   Remote_Passwords.Update (Old_Password => "Opensesame",
                            For_Session  => "",
                            Response     => "<PROFILE>");

 If you do not update your remote-passwords file, any operations that try to
 use passwords encrypted under the old key (Opensesame) will fail.



 @node !Commands.Search_List

 Package Search_List provides commands for manipulating searchlists.
 Searchlists are the Environment's mechanism for resolving Ada command
 names that are used in command windows. Through commands in this package,
 users can create, edit, view, and reset searchlists.

 As with most commands in the world !Commands, these commands are intended
 for interactive use, although they can be used programmatically.


 RESOURCES IN PACKAGE SEARCH_LIST

 The commands in package Search_List fall into several functional groups.
 Types and constants are not included in this list.

 Creating searchlists:              Set_Up

 Viewing searchlists:               Display, Show_List

 Editing searchlist components:     Add, Delete, Replace

 Resetting searchlists:             Reset_To_System_Default

 Storing searchlists as text files: Revert, Save

 Resolving searchlist components:   Display_Libraries, Show_Item


 KEY CONCEPTS FOR PACKAGE SEARCH_LIST

 When a command is executed, it must be located before it can be run. The
 Environment locates commands using a searchlist.

 A searchlist is an ordered list of libraries that is associated with a user
 session. One searchlist is associated with each user session. When you enter
 a command through a command window, the Environment searches through each of
 the libraries named in your searchlist until the command being entered is
 found. Units that are found through the searchlist are used in constructing
 an implicit with clause that provides visibility for the command window.

 Note that searchlists differ from links, which are used to resolve the
 simple names in with clauses of Ada units. Links are not used to resolve
 names in command windows unless they are explicitly included in your
 searchlist (see "Searchlist Components," page nn, for more information).

 The remainder of this introduction discusses:

 *  Searchlist components

 *  The system default searchlist

 *  A sample scenario

 *  Resolution of command names without a searchlist

 *  Resolution of object names relative to a searchlist

 *  Use of commands from package Search_List for:

    -  Creating searchlists

    -  Viewing searchlists

    -  Editing searchlists

    -  Resetting searchlists to the system default

    -  Saving and reusing multiple searchlists

    -  Determining how command names are being resolved

    -  Gaining access to searchlists


 Searchlist Components

 Each of the entries in the searchlist is referred to as a component of
 that searchlist. Searchlist components are ordered; that is, each
 searchlist component is associated with a position number.

 A searchlist component must be a naming expression that resolves to one or
 more library names. Searchlist components can use naming expressions such
 as wildcard characters, context characters, and attributes. Naming
 expressions in searchlists are resolved to library names when the
 searchlist is used. Thus, context-sensitive naming expressions may
 resolve to different libraries, depending on the context in which a
 command is being executed. Three naming expressions are used frequently
 in searchlists:

 *  The dollar symbol ($) can be used to mean the library enclosing the
    current context, where the current context is the context from which
    the searchlist is being used.

 *  The grave symbol (`) can be used after a library name to specify that
    the links for that library also be searched when resolving command names.
    The links for a library specify particular Ada units in other libraries
    that are visible within that library. Note that links are normally used
    to resolve simple names in with clauses of Ada units. When names are
    resolved in command windows, links are checked only as a result of being
    named in the searchlist, using the grave.

 *  The 'Spec_View and 'View attributes can be used after a subsystem name
    to specify that the current spec view and load view, respectively, be
    searched when to resolve command names. The current spec and load views
    are determined using the default activity file for the current session.
    Using these attributes prevents your having to update your searchlist
    each time a new release is made.

 Only fully qualified pathnames (beginning with !) or naming expressions
 that resolve to fully qualified pathnames (such as $) can be used in
 searchlists. Names requiring searchlist resolution cannot be added to the
 searchlist. For more information about naming expressions, see
 Parameter-Value Conventions in the Reference Summary (RS) book.

 Note: If a searchlist contains any invalid component, the entire
 searchlist is considered invalid by the Environment. If a user's
 searchlist is invalid, commands entered by that user are resolved
 relative to the system default searchlist. If the system default
 searchlist is invalid, commands are resolved relative to the Environment's
 hard-coded default searchlist (the initial system default searchlist for
 all systems).


 System Default Searchlist

 The Environment provides a system default searchlist (located in
 !Machine.Search_Lists.Default). If a searchlist has not been created for
 a particular session, command names entered during that session are
 resolved using the default searchlist. The default searchlist is also used
 to initalize the contents of newly created searchlists.

 The initial default searchlist (supplied by Rational) contains these
 components:

   $`
   !COMMANDS
   !LOCAL
   !COMMANDS.ABBREVIATIONS`
   !MACHINE.RELEASE.CURRENT.COMMANDS`
   !IO
   !TOOLS
   !TOOLS.NETWORKING

 System managers can edit this default searchlist to include site-specific
 libraries. System managers also can extend the visibility provided by the
 default searchlist by adding links in world
 !Machine.Release.Current.Commands to site-specific tools.

 Note that the $ resolves to the current library; thus, the library to
 which it resolves depends on the context from which a command is entered.


 Sample Scenario

 Assume that a user named Burgan has created his own debug command in a
 personal Commands directory. Assume further that his group also has
 project-specific commands in !Projects.Project_Name.Commands, and his site
 has local commands in !Local.Commands.

 Under the default searchlist, Burgan can execute a command in one of these
 libraries only if he is in the library that contains that command (via
 the $ searchlist component). However, Burgan would like to be able to use
 these commands from any command window. To make these commands globally
 accessible, Burgan adds a component in his searchlist for each library.

 Burgan's searchlist is shown below. Notice that he has chosen to insert
 the components for personal, project-specific, and local Commands
 directories after the Environment library called Commands.

   $`
   !COMMANDS
   !USERS.BURGAN.COMMANDS`
   !PROJECTS.PROJECT_NAME.COMMANDS`
   !LOCAL.COMMANDS`
   !LOCAL
   !COMMANDS.ABBREVIATIONS`
   !MACHINE.RELEASE.CURRENT.COMMANDS`
   !IO
   !TOOLS
   !TOOLS.NETWORKING

 Suppose that Burgan executes the Debug.Break command from a subdirectory
 called !Users.Burgan.Projects. When he executes the command, the
 Environment checks the following locations for an Ada package called Debug, 
 stopping at the first resolution:

 *  The current library, !Users.Burgan.Projects and its links library

 *  !Commands

 The Environment stops at !Commands because package Debug is defined in
 !Commands. The Environment does not check any other components for units
 called Debug. Thus, any personal, project-specific, or local debug facility
 is not found. If Burgan wants his personal commands to be used first, he
 can change the order of components in his searchlist so that
 !Users.Burgan.Commands appears above !Commands.

 Notice that the components for Burgan's personal, project, and local
 Commands libraries are followed by the grave symbol (`). The grave causes
 the Environment to also search the set of links for each of those
 libraries when resolving command names. Using the grave allows Burgan to
 gain access to new tools (even those in other libraries) without modifying
 his searchlist. To gain access to a new tool, Burgan can simply add a link
 to that tool in the set of links for !Users.Burgan.Commands.

 Note that to facilitate the use of the grave in searchlists, the libraries
 followed by the grave should have links for visibility only. They should
 not have links that are used by the tools in that library to resolve names
 in with clauses.


 Resolving Command Names without a Searchlist

 Sometimes you need to execute a command that cannot be resolved relative
 to your searchlist. Rather than edit your searchlist, you can provide the
 name of the library as a string in quotation marks in front of the command
 name. For example, assume that you have a procedure called
 Initialize_Help_Files in !Documentation.Help.Tools. To execute
 Initialize_Help_Files, you can execute the following command:

   "!Documentation.Help.Tools".Initialize_Help_Files


 Resolving Object Names Relative to the Searchlist

 By default, pathnames of objects, particularly those called by commands,
 are resolved relative to the current library. However, sometimes you may
 want pathnames to be resolved relative to your searchlist. In
 particular, you may want to reference the Ada specification of an
 Environment command as an object, but you do not know the fully qualified
 pathname of the object.

 To force pathnames to be resolved with respect to your searchlist, you can
 use the backslash symbol (\). In particular, \name looks for an Ada unit
 with the specified name in each of the libraries listed in the current
 searchlist.

 For example, assume that the current window contains your home world and
 that you want to view the Ada specification for the Environment command
 package Library. You can do this from the current context using the
 following command:

   Definition ("\Library");

 Because the system default searchlist includes the world !Commands, the
 above command opens a window containing !Commands.Library.

 See Parameter-Value Conventions in the Reference Summary (RS) book for
 more information about the backslash character.


 USING COMMANDS FROM PACKAGE SEARCH_LIST

 Using commands from this package, you can:

 *  Create, view, and edit searchlists

 *  Reset searchlists to the system default

 *  Save searchlists to text files for later use

 *  Determine how command names are being resolved relative to the
    searchlist

 *  Gain access to searchlists

 The following subsections discuss these operations and the commands
 available for each.


 Creating Searchlists

 You need to create a searchlist only if you want to change its components.
 If no searchlist has been created for a session, operations in that
 session resolve command names using the system default searchlist (see
 "System Default Searchlist," page nn).

 To create a new searchlist for a particular session, you can use the
 Set_Up procedure. This procedure allows you to specify the components
 that are to be included in the searchlist. All searchlists are created in
 the !Machine.Search_Lists world and are named using the convention
 username_session_name. For example, the searchlist for user Reyes's
 session S_1 is named Reyes_S_1.

 Note that if you execute the Add, Replace, or Delete command before you
 explicitly create a searchlist, those commands will automatically create
 a searchlist for your current session (with the same components as the
 system default searchlist) before performing the desired operation.


 Viewing Searchlists

 Package Search_List provides two commands for viewing searchlists:

 *  Display

 *  Show_List

 If you simply want to see a list of the components in your searchlist, you
 can use the Display procedure. The Display procedure generates a textual
 representation of your searchlist and sends this display, by default, to
 an Environment output window. Because the display is a textual
 representation and not an actual searchlist, you cannot edit your
 searchlist directly from this window.

 To open your searchlist for editing, use the Show_List procedure. The
 Show_List procedure displays your searchlist in a window. From this window
 you can edit your searchlist using commands from this package and from 
 package !Commands.Common (see "Editing Searchlists," below).


 Editing Searchlists

 This package provides three commands for modifying searchlist components:

 *  Add

 *  Delete

 *  Replace

 These commands can be used from any location in the library hierarchy;
 they do not need to be used from a window containing a searchlist.

 Searchlists also can be opened for editing (using the Show_List procedure)
 and modified using commands from package !Commands.Common, which generally
 are bound to keys (see "Commands from Package Common for Editing Search-
 lists," page nn). When used in a searchlist, some commands in package
 Common call commands in this package. In particular, the
 Common.Object.Insert, Common.Object.Delete, and Common.Edit commands
 call the Add, Delete, and Replace commands, respectively.

 Changes to searchlists are implicitly committed and take effect
 immediately.


 Resetting Searchlists to the System Default

 If you are having trouble resolving Environment command names, you may
 want to reset your searchlist to match the system default searchlist. You
 can do this using the Reset_To_System_Default procedure. This procedure
 deletes all the entries in your searchlist and replaces them with the
 components in the system default searchlist. See "System Default
 Searchlist," page nn, for more information.


 Saving and Reusing Multiple Searchlists

 You can use different searchlists for different projects. For example,
 when you are working on debug tools, you may want your searchlist to
 resolve debug commands with respect to the library containing your debug
 facilities. However, when you are working on other projects, you want
 debug commands to resolve with respect to the Environment's debug
 facilities in !Commands.

 Generally, if you use several different searchlists on a regular basis,
 you probably want to create different sessions for each project. Creating
 different sessions allows you to tailor your searchlist and other
 characteristics such as key bindings, login procedures, error reaction,
 and log files for specific projects (see the Key Concepts of this book for
 more details).

 If you want to invoke different searchlists in the same session, you can
 use the following procedures to keep and reuse searchlists:

 *  The Save procedure writes the contents of the searchlist for the
    specified session into a text file.

 *  The Revert procedure replaces the searchlist for the specified session
    with the contents of the specified text file.

 Note, however, that the Revert procedure overwrites your existing
 searchlist. Thus, your existing searchlist will be lost (unless you first
 write it into a file using the Save procedure).


 Determining How a Command Name Is Being Resolved

 Sometimes a particular command name does not resolve or does not resolve
 as expected. When this happens, you can use the following three commands
 to help determine the source of the problem:

 *  Display_Libraries

 *  Show_Item

 *  What.Search_List_Resolution

 The Display_Libraries procedure displays a list of the libraries to which
 your searchlist resolves. This procedure is especially useful when your
 searchlist contains naming expressions that resolve differently
 depending on the context in which your searchlist is being used.

 If you want to view the library named by one of your searchlist
 components, you can use the Show_Item procedure. This procedure opens a
 window containing the library named by the specified searchlist component.
 If a command name does not resolve, you can view the libraries to check
 for similar command names.

 If a command name does not resolve as you expect it to, you can use the
 What.Search_List_Resolution procedure to determine the fully qualified
 pathname to which the name is being resolved and the searchlist component
 being used to resolve the name. Often problems with command-name
 resolution are caused by the ordering of the searchlist components.

                                                                           
 Gaining Access to Searchlists

 Searchlists are explicitly associated with a particular user and session.
 To reflect this association, a user's searchlists are accessed through
 that user's home world (even though all searchlists are actually contained
 in !Machine.Search_Lists). Thus, to modify the searchlist for a specified
 user, you must have read access to that user's home world.

 Note that if another user has a read lock on your searchlist while you
 change the the access rights for your home world, that lock does not
 prohibit the user from continuing to edit your searchlist. It only
 prevents future operations from modifying your searchlist.


 COMMANDS FROM PACKAGE COMMON FOR EDITING SEARCHLISTS

 The commands from package !Commands.Common in Table 1 are supported for
 editing searchlists. Commands from package Common typically are used
 through the key combinations to which they are bound. For further
 information about these commands, see the Editing Specific Types (EST)
 book, package Common.
                                                    

       Table 1   Commands from Package Common for Editing Searchlists
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Key Bound To ...     |Accomplishes ...                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Abandon       |Ends the editing of the searchlist. The window |
    |                     |is removed from the screen and from the window |
    |                     |directory. Since all operations on searchlists |
    |                     |implicitly commit any changes, this procedure  |
    |                     |does not abandon any of those changes. When    |
    |                     |used from a searchlist, this procedure has the |
    |                     |same effect as the Release procedure.          |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Commit        |Has no effect. All operations on searchlists   |
    |                     |implicitly commit any changes.                 |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Create_Command|Creates a command window for the current       |
    |                     |window, if one does not exist; otherwise, the  |
    |                     |procedure puts the cursor in the existing      |
    |                     |command window. When attached to a window      |
    |                     |containing a searchlist, the command window    |
    |                     |initially has the following use clause:        |
    |                     |                                               |
    |                     |     use Editor, Search_List, Common;          |
    |                     |                                               |
    |                     |Thus, commands from package Search_List can be |
    |                     |entered in the command window using their      |
    |                     |simple names.                                  |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Definition    |Finds the library named by the designated      |
    |                     |searchlist component and visits or creates a   |
    |                     |window containing that library. The In_Place   |
    |                     |parameter specifies whether the current window |
    |                     |should be used (the default is False). The     |
    |                     |Visible parameter has no effect when a         |
    |                     |searchlist component is designated.            |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Edit          |Creates a command window and places in it the  |
    |                     |command:                                       |
    |                     |                                               |
    |                     |     Replace (New_Component => "current value",|
    |                     |              Old_Component => "<SELECTION>",  |
    |                     |              Session       => "",             |
    |                     |              User          => "");            |
    |                     |                                               |
    |                     |where current value is the designated          |
    |                     |searchlist component. The Old_Component        |
    |                     |parameter specifies the searchlist component to|
    |                     |be replaced. Specifying a new library name for |
    |                     |the New_Component parameter causes the name of |
    |                     |that library to replace the old component. The |
    |                     |User and Session parameters specify the user   |
    |                     |and session whose searchlist should be modified|
    |                     |(by default, the current session and user).    |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Release       |Ends the editing of the searchlist. The window |
    |                     |is removed from the screen and from the window |
    |                     |directory. When used from a searchlist, this   |
    |                     |procedure has the same effect as the Abandon   |
    |                     |procedure.                                     |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Revert        |Refreshes the image of the searchlist in the   |
    |                     |current window. If the searchlist has been     |
    |                     |changed by another user or program, the new    |
    |                     |image reflects those changes. Refreshing the   |
    |                     |searchlist image generally is not necessary,   |
    |                     |because the searchlist image is refreshed each |
    |                     |time you add, change, or delete a component.   |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Child  |Selects the searchlist component on which the  |
    |                     |cursor is located.                             |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Delete |Deletes from the searchlist the selected       |
    |                     |component or the component on which the cursor |
    |                     |is located.                                    |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.First- |Selects the first component in the searchlist. |
    |_Child               |                                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Insert |Creates a command window and places in it the  |
    |                     |command:                                       |
    |                     |                                               |
    |                     |     Add (Component => "[STRING-expression]",  |
    |                     |          Position  => 1,                      |
    |                     |          Session   => "",                     |
    |                     |          User      => "");                    |
    |                     |                                               |
    |                     |where the Component parameter must be completed|
    |                     |with the name of one or more libraries         |
    |                     |(separated with commas). The Position parameter|
    |                     |specifies the location in which to insert the  |
    |                     |new components. The Position parameter is      |
    |                     |automatically completed with the position      |
    |                     |designated by the cursor. Promoting the        |
    |                     |parameters allows the user to specify another  |
    |                     |session or username's searchlist to which to   |
    |                     |add an entry.                                  |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Last-  |Selects the last component in the searchlist.  |
    |_Child               |                                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Move   |Moves the selected searchlist component to the |
    |                     |current cursor position.                       |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Next   |Selects the next component in the searchlist.  |
    |                     |If no component is selected or if the cursor   |
    |                     |is not in the current selection, this procedure|
    |                     |selects the component on which the cursor is   |
    |                     |located. If all components are selected, this  |
    |                     |procedure produces an error.                   |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Parent |Selects the parent of the designated object. If|
    |                     |no component is selected, or if the cursor is  |
    |                     |not in the selection, this procedure selects   |
    |                     |the component on which the cursor is located.  |
    |                     |If a component is selected and the cursor is in|
    |                     |that selection, this procedure selects the     |
    |                     |entire searchlist. If the entire searchlist is |
    |                     |selected, this procedure has no effect.        |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object-       |Selects the previous component in the          |
    |.Previous            |searchlist. If no component is selected or if  |
    |                     |the cursor is not in the current selection,    |
    |                     |this procedure selects the component on which  |
    |                     |the cursor is located. If all components are   |
    |                     |selected, this procedure produces an error.    |
     --------------------------------------------------------------------- 



 @node !Commands.Search_List.Add

 procedure Add (Component : String  := ">>LIBRARY NAME<<";
                Position  : Integer := Integer'Last;
                Session   : String  := "";
                User      : String  := "");


 DESCRIPTION

 Adds one or more components to a searchlist.

 This procedure adds one or more components to the searchlist for the
 specified session and user (by default, the current session and user).
 Searchlist components must name existing libraries. If the named library
 does not exist, that name is not added to the searchlist. The components
 are added in the position specified in the Position parameter (by default,
 the cursor location or the end of the searchlist).

 Changes to searchlists are automatically committed and take effect
 immediately.

 To replace an existing searchlist component with a new component, use the
 Replace procedure.


 PARAMETERS

 Component : String := ">>LIBRARY NAME<<";

 Specifies the library names to add to the searchlist. Multiple library
 names can be separated with commas. If naming expressions (such as
 wildcard characters) are used in the component, they are written into the
 searchlist as specified; they are not resolved first. The default parameter
 placeholder, ">>LIBRARY NAME<<", must be replaced or an error will result.


 Position : Integer := Integer'Last;

 Specifies the position within the searchlist for the new component. By
 default, the new component is inserted at the position indicated by the
 cursor. If the cursor is not in the searchlist, the new component is
 inserted at the end of the searchlist.


 Session : String := "";

 Specifies the session for which the searchlist is to be modified. The
 default is the current session.


 User : String := "";

 Specifies the user whose searchlist is to be modified. The default is the
 current user.


 RESTRICTIONS

 To add a component to the searchlist for a specified user, you must have
 read access to that user's home world.


 ERRORS

 If a nonexistent username, session, or library name is specified, an error
 will result.


 EXAMPLES

 Suppose that you have a collection of tools in a library called
 !Users.Your_Username.Personal_Tools. You want to be able to access these
 tools by their simple names from any command window. To do so, you can add
 a component for this library to your current searchlist using the
 following command:

   Search_List.Add (Component => "!Users.Your_Username.Tools'",
                    Position  => Integer'Last,
                    Session   => "",
                    User      => "");

 If your cursor is in a searchlist, the new component will be added at the
 cursor position; otherwise, the component will be added to the end of your
 searchlist. This change is automatically committed and takes effect
 immediately.


 REFERENCES

 procedure Replace



 @node !Commands.Search_List.Delete

 procedure Delete (Component : String := "<SELECTION>";
                   Session   : String := "";
                   User      : String := "");


 DESCRIPTION

 Deletes the specified searchlist component.

 This procedure deletes the specified component from the searchlist for the
 specified user and session (by default, the current user and session). If
 a component is not named, the current selection is used, provided it is in
 a searchlist.

 Changes to searchlists are implicitly committed and take effect
 immediately.


 PARAMETERS

 Component : String := "<SELECTION>";

 Specifies the component (library name) to be deleted from the searchlist.
 The default is the selected component.


 Session : String := "";

 Specifies the session for which the searchlist is to be modified. The
 default is the current session.


 User : String := "";

 Specifies the user whose searchlist is to be modified. The default is the
 current user.


 RESTRICTIONS

 To delete a component from the searchlist for a specified user, you must
 have read access to that user's home world.


 ERRORS

 If the searchlist is not displayed on the screen and a component name is
 not specified for the Component parameter, nothing will be deleted.

 If a nonexistent component, username, or session is specified, an error
 will result.


 EXAMPLES

 The following command deletes a searchlist component for a library called
 !Tools.Networking from the searchlist for the current user and session:

   Search_List.Delete (Component => "!Tools.Networking",
                       Session   => "",
                       User      => "");

 The change is implicitly committed and takes effect immediately.



 @node !Commands.Search_List.Display

 procedure Display (Session : String := "";
                    User    : String := "");
                   

 DESCRIPTION

 Displays the searchlist for the specified session and user.

 This procedure displays a list of the components in the searchlist for the
 specified user and session (by default, the current user and session). The
 display is sent to Current_Output, which is, by default, an Environment
 output window. The list produced by this procedure cannot be modified;
 however, commands from package Search_List can be used from any window
 to modify the actual searchlist.

 To open a searchlist for editing, use the Show_List procedure.

 To obtain a list of the libraries to which your searchlist resolves, use
 the Display_Libraries procedure.


 PARAMETERS

 Session : String := "";

 Specifies the session for which the searchlist is to be displayed. The
 default specifies the current session.


 User : String := "";

 Specifies the user whose searchlist is to be displayed. The default
 specifies the current user.


 ERRORS

 If a nonexistent user or session is specified, an error will result.


 EXAMPLES

 To display a list of the components in the searchlist for your current
 session, you can execute the following command:

   Search_List.Display

 The resulting display is sent to an Environment output window. A sample of
 the display produced for a user named JIM is shown below:

    Search List for: <JIM,S_1>

    1.      $`
    2.      !USERS.JIM`
    3.      !COMMANDS
    4.      !LOCAL
    5.      !COMMANDS.ABBREVIATIONS`
    6.      !MACHINE.RELEASE.CURRENT.COMMANDS`
    7.      !IO
    8.      !TOOLS
    9.      !TOOLS.NETWORKING
    

 REFERENCES

 procedure Show_List



 @node !Commands.Search_List.Display_Libraries

 procedure Display_Libraries;
    

 DESCRIPTION

 Displays a list of the libraries to which the specified searchlist
 resolves.

 This procedure displays a list of the libraries named in the searchlist
 for the specified user and session (by default, the current user and
 session).The display is sent to Current_Output, which is, by default, an
 Environment output window.

 This procedure can be useful in determining which libraries are actually
 being searched if the expected command name is not found. If you are
 having trouble determining how a particular command name is being
 resolved, you can also use the What.Search_List_Resolution procedure.


 EXAMPLES

 Assume that the current library is !Users.Fred and that Fred's searchlist
 contains the following components:

   $`
   !TOOLS
   !COMMANDS

 When Fred executes the Display_Libraries procedure, it produces the
 following display:

   !USERS.FRED
   !TOOLS
   !COMMANDS


 REFERENCES

 procedure What.Search_List_Resolution



 @node !Commands.Search_List.Release

 procedure Release;


 DESCRIPTION

 Ends the editing of the searchlist.

 This procedure closes the searchlist being edited. It then removes the
 window containing the searchlist from the screen and from the window
 directory. Any changes made to the searchlist are committed.

 To close the searchlist, you can also use the !Commands.Common.Abandon or
 !Commands.Common.Release procedures, which generally are bound to keys.


 REFERENCES

 procedure !Commands.Common.Abandon
 procedure !Commands.Common.Release



 @node !Commands.Search_List.Replace

 procedure Replace (New_Component : String := ">>LIBRARY NAME<<";
                    Old_Component : String := "<SELECTION>";
                    Session       : String := "";
                    User          : String := "");
 

 DESCRIPTION

 Replaces the specified searchlist component with the new component.

 This procedure deletes the searchlist component named in the Old_Component
 parameter and replaces it with the component named in the New_Component
 parameter. Changes are made in the searchlist for the specified user and
 session (by default, the current user and session).

 Changes to searchlists are implicitly committed and take effect
 immediately.


 PARAMETERS

 New_Component : String := ">>LIBRARY NAME<<";

 Specifies the component (library name) to be inserted into the searchlist.
 Multiple library names can be separated with commas. If naming expressions
 (such as wildcard characters) are used in the component, they are written
 into the searchlist; they are not resolved first. The default parameter
 placeholder, ">>LIBRARY NAME<<", must be replaced or an error will result.


 Old_Component : String := "<SELECTION>";

 Specifies the component to be replaced. The default specifies the currently
 selected component.


 Session : String := "";

 Specifies the session for which the searchlist is to be modified. The
 default is the current session.


 User : String := "";

 Specifies the user whose searchlist is to be modified. The default is the
 current user.


 RESTRICTIONS

 To replace an entry in the searchlist for a specified user, you must have
 read access to that user's home world.


 ERRORS

 If a nonexistent library name, user, or session is specified, an error will
 result.


 EXAMPLES

 Suppose that one of your searchlist components names your local tools
 library. Originally, your tools were in your home world
 (!Users.Your_Username), but you have moved them to
 !Users.Your_Username.Tools. To change the searchlist so that you still
 have access to these tools, you can use the following command:

   Search_List.Replace
                 (New_Component => "!Users.Your_Username.Tools`",
                  Old_Component => "!Users.Your_Username`",
                  Session       => "",
                  User          => "");

 The change is made in the searchlist for your current session and takes
 effect immediately. Note that the grave (`) symbol at the end of each
 library name indicates that the links for that library are also searched
 when resolving command names.


 REFERENCES

 procedure Add
 procedure Delete



 @node !Commands.Search_List.Reset_To_System_Default

 procedure Reset_To_System_Default (Session : String := "";
                                    User    : String := "");


 DESCRIPTION

 Resets the searchlist for the specified session and user to the system
 default.

 This procedure destroys the contents of the searchlist for the specified
 session and user (by default the current session and user) and replaces
 the contents with the system default searchlist, shown below:

   $`
   !COMMANDS
   !LOCAL
   !COMMANDS.ABBREVIATIONS`
   !MACHINE.RELEASE.CURRENT.COMMANDS`
   !IO
   !TOOLS
   !TOOLS.NETWORKING

 This default searchlist is copied from !Machine.Search_Lists.Default.


 PARAMETERS

 Session : String := "";

 Specifies the session for which the searchlist is to be reset. The default
 is the current session.


 User : String := "";

 Specifies the user whose searchlist is to be reset. The default is the
 current user.


 RESTRICTIONS

 To modify the searchlist for a specified user, you must have read access to
 that user's home world.


 ERRORS

 If a nonexistent user or session is specified, an error will result.



 @node !Commands.Search_List.Revert

 procedure Revert (File_Name : String := "";
                   Session   : String := "";
                   User      : String := "");


 DESCRIPTION

 Replaces the searchlist for the specified session and user with the
 contents of the specified text file.

 This procedure deletes the contents of the specified searchlist and
 replaces them with the contents of the specified text file. Searchlists can
 be saved in text files with the Save procedure.

 To revert a searchlist to the system default searchlist, use the
 Reset_To_System_Default procedure.


 PARAMETERS

 File_Name : String := "";

 Specifies the file from which to revert the searchlist. The default is the
 searchlist for the current user and session.


 Session : String := "";

 Specifies the session for which the searchlist is to be reverted. The
 default is the current session.


 User : String := "";

 Specifies the user whose searchlist is to be reverted. The default is the
 current user.


 RESTRICTIONS

 To modify the searchlist for a specified user, you must have read access to
 that user's home world.


 ERRORS

 If a nonexistent user, session, or file is specified, an error will result.

                                                                          
 REFERENCES

 procedure Reset_To_System_Default
 procedure Save



 @node !Commands.Search_List.Save

 procedure Save (File_Name : String := ">>FILE NAME<<";
                 Session   : String := "";
                 User      : String := "");


 DESCRIPTION

 Saves the searchlist for the specified session and user in a text file.

 Note that searchlists do not need to be saved with this procedure to take
 effect. Committing the searchlist for your username and session causes
 that searchlist to take effect. This procedure is necessary only if you
 want to save a searchlist into a file from which you can later copy the
 contents into the searchlist for a particular session.

 A saved searchlist can be made current using the Revert procedure.


 PARAMETERS

 File_Name : String := ">>FILE NAME<<";

 Specifies the name of the file in which to save the searchlist. The default
 parameter placeholder, ">>FILE NAME<<", must be replaced or an error
 will result.


 Session : String := "";

 Specifies the session for which the searchlist is to be saved. The default
 is the current session.


 User : String := "";

 Specifies the user whose searchlist is to be saved. The default is the
 current user.


 RESTRICTIONS

 To modify the searchlist for a specified user, you must have read access to
 that user's home world.


 ERRORS

 If a nonexistent user or session is specified, an error will result.


 REFERENCES

 procedure Revert



 @node !Commands.Search_List.Set_Up

 procedure Set_Up (Component  : String := ">>SEARCH LIST<<";
                   Session    : String := "";
                   User       : String := "");
 

 DESCRIPTION

 Replaces the components of the searchlist for the specified user and
 session with the specified component(s).

 This procedure sets up the searchlist with the specified component(s)
 supplied as a string. The previous searchlist is destroyed. Multiple
 components for the new searchlist are separated by commas.

 To change a specific searchlist component without affecting the entire
 list, use the Add, Delete, or Replace procedure.

 To replace the entire contents of a searchlist with the contents of a
 specified file, use the Revert procedure.

 To set the entire contents of a searchlist back to the system-defined
 default searchlist, use the Reset_To_System_Default procedure.


 PARAMETERS

 Component : String := ">>SEARCH LIST<<";

 Specifies the component(s) to be included in the searchlist. Multiple
 components in the string are separated by commas. If naming expressions
 (such as wildcard characters) are used in the component, they are written
 into the searchlist as specified; they are not resolved first. The default
 parameter placeholder, ">>SEARCH LIST<<", must be replaced or an error
 will result.


 Session : String := "";

 Specifies the session for which the searchlist is to be set up. The default
 is the current session.


 User : String := "";

 Specifies the user whose searchlist is to be set up. The default is the
 current user.


 RESTRICTIONS

 To modify the searchlist for a specified user, you must have read access to
 that user's home world.


 ERRORS

 If a nonexistent library name, user, or session is specified, an error will
 result.


 EXAMPLES

 The following command sets up the searchlist for the current user and
 session so that it includes only components for the current library ($`),
 !Commands`, !Local`, and !Tools`:

   Search_List.Set_Up
               (Component => "$`, !Commands`, !local`, !Tools`",
                Session   => "",
                User      => "");

 The resulting searchlist is shown below:

   $`
   !COMMANDS`
   !LOCAL`
   !TOOLS`

 Any previous components in the searchlist are deleted. The change takes
 effect immediately. Note that the grave symbol (`) is used to indicate
 that the links for that library are also to be searched when resolving
 command names.


 REFERENCES

 procedure Add
 procedure Delete
 procedure Replace



 @node !Commands.Search_List.Show_Item

 procedure Show_Item (Component : String := "<CURSOR>");


 DESCRIPTION

 Finds the definition of the specified component of the searchlist for the
 current user and session.

 This procedure creates a window and displays the library named by the
 specified searchlist component. The current context is used to resolve any
 context-dependent components. If no component is named or selected, the
 component on which the cursor is located is displayed.

 If you are having trouble determining how a particular command name is
 being resolved, you can use the What.Search_List_Resolution procedure to
 determine the name to which the command is being resolved and the
 searchlist component used to resolve the name.


 PARAMETERS

 Component : String := "<CURSOR>";

 Specifies the component for which to find the definition. The default is the
 component on which the cursor is located.


 EXAMPLES

 Suppose that you are unable to resolve the name of a command you thought
 was in !Commands. You decide to check !Commands to see if you are entering
 a correct command name or if you should be using a related command name.
 The following command displays the library to which the searchlist
 component !Commands resolves:

   Search_List.Show_Item (Component => "!Commands");
 

 REFERENCES

 procedure Display
 procedure Display_Libraries
 procedure What.Search_List_Resolution



 @node !Commands.Search_List.Show_List

 procedure Show_List (Session : String := "";
                      User    : String := "");


 DESCRIPTION

 Opens a window containing the searchlist for the specified session and
 user.

 This procedure creates a window and displays the searchlist for the
 specified session and user (by default the current session and user) in
 that window. From the window, the searchlist can be edited using commands
 from this package and operations from package !Commands.Common that
 apply to searchlists (see the introduction to this package for details).


 PARAMETERS

 Session : String := "";

 Specifies the session for which the searchlist is to be modified. The
 default is the current session.


 User : String := "";

 Specifies the user whose searchlist is to be modified. The default is the
 current user.


 RESTRICTIONS

 To modify the searchlist for a specified user, you must have read access to
 that user's home world.


 ERRORS

 If a nonexistent user or session is specified, an error will result.


 EXAMPLES

 The following command opens a window containing the searchlist for your
 current session:

   Search_List.Show_List

 From this window, you can edit the searchlist using commands from this
 package and commands from package !Commands.Common that apply to
 searchlists.



 @node !Commands.What

 Package What contains procedures for obtaining information about the
 current system, users, jobs, and objects. It also includes the
 Environment's help procedures, Command and Does.

 For information on what a particular key does or is called, see the
 !Commands.Editor.Key.Name procedure. See also the Keymap in the
 Reference Summary (RS) book for information about keys.

 For further information about obtaining help in the Environment, see the
 Help section of the Editing Specific Types (EST) book or the Rational
 Environment User's Guide. Also see the online information about the
 Environment's help facility by executing: What.Does ("Help_On_Help").


 RESOURCES IN PACKAGE WHAT

 The commands in package What fall into several operational groups. Types
 and constants are not in this list.

 Obtaining information about the system:       Jobs, Load, Message, Time,
                                               Users, Version

 Obtaining information about an object:        Line, Locks, Object, Tabs

 Obtaining help on a command:                  Command, Does

 Determining the resolution of a command name: Search_List_Resolution

 Traversing to your home world:                Home_Library


 COMMANDS FROM PACKAGE COMMON FOR USE IN HELP WINDOWS

 The commands from package !Commands.Common in Table  1 are supported for
 manipulating the help window created by the Command or Does procedure.
 Commands from package Common typically are used through the key combina-
 tions to which they are bound. For further information about these
 commands, see the Editing Specific Types (EST) book, package Common.
                                                    

      Table  1   Commands from Package Common for Use in Help Windows
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Key Bound To ...     |Accomplishes ...                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Abandon       |Removes the window from the screen and from the|
    |                     |window directory. This procedure has the same  |
    |                     |effect as the Release procedure.               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Create_Command|Creates a command window associated with the   |
    |                     |current window if one does not exist;          |
    |                     |otherwise, the procedure puts the cursor in the|
    |                     |existing command window. This command window   |
    |                     |initially has a use clause:                    |
    |                     |                                               |
    |                     |     use Editor, Common;                       |
    |                     |                                               |
    |                     |This use clause provides direct visibility to  |
    |                     |the declarations in packages Editor and Common |
    |                     |for names resolved in the command.             |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Definition    |Opens a window containing the Ada specification|
    |                     |for the selected unit. The selection must be on|
    |                     |the specification part of a help entry.        |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Explain       |Brings up the help entry for the designated    |
    |                     |item when a list of related entries has been   |
    |                     |displayed.                                     |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Release       |Removes the window from the screen and from the|
    |                     |window directory. This procedure has the same  |
    |                     |effect as the Abandon procedure.               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Child  |Selects the line on which the cursor is        |
    |                     |located.                                       |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.First- |Selects the first line of the image.           |
    |_Child               |                                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Last-  |Selects the last line of the image.            |
    |_Child               |                                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Next   |Selects the next line, provided that the cursor|
    |                     |is on a selected line. If the cursor is not on |
    |                     |the currently selected line or if no line is   |
    |                     |selected, the procedure selects the line on    |
    |                     |which the cursor is located. If the entire     |
    |                     |image is selected, this procedure produces an  |
    |                     |error message.                                 |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Parent |Selects the line the cursor is on. If the      |
    |                     |cursor is already on a selected line, this     |
    |                     |procedure selects the entire image. If the     |
    |                     |entire image is already selected, this         |
    |                     |procedure has no effect.                       |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object-       |Selects the previous line, provided that the   |
    |.Previous            |cursor is on the currently selected line. If   |
    |                     |the cursor is not on the currently selected    |
    |                     |line or if no line is selected, this procedure |
    |                     |selects the line on which the cursor is        |
    |                     |located. If the entire image is selected, this |
    |                     |procedure produces an error.                   |
     --------------------------------------------------------------------- 



 COMMANDS FROM PACKAGE COMMON FOR THE WHAT.JOBS DISPLAY

 The commands from package !Commands.Common in Table  2 are supported for
 manipulating the display produced by the What.Jobs procedure. Commands
 from package Common typically are used through the key combinations to
 which they are bound. For further information about these commands, see
 the Editing Specific Types (EST) book, package Common.
                                                    

     Table  2   Commands from Package Common for the What.Jobs Display
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Key Bound To ...     |Accomplishes ...                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Abandon       |Removes the window from the screen and from the|
    |                     |window directory. This procedure also          |
    |                     |terminates the What.Jobs procedure. This       |
    |                     |procedure has the same effect as the Release   |
    |                     |procedure.                                     |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Create_Command|Creates a command window associated with the   |
    |                     |current window if one does not exist;          |
    |                     |otherwise, the procedure puts the cursor in the|
    |                     |existing command window. This command window   |
    |                     |initially has a use clause:                    |
    |                     |                                               |
    |                     |     use Editor, Common;                       |
    |                     |                                               |
    |                     |This use clause provides direct visibility to  |
    |                     |the declarations in packages Editor and Common |
    |                     |for names resolved in the command.             |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Elide         |Changes the set of jobs being displayed. The   |
    |                     |display steps through the following sets of    |
    |                     |jobs, in the following order:                  |
    |                     |*  All jobs                                    |
    |                     |*  All running jobs                            |
    |                     |*  All jobs associated with the current user   |
    |                     |*  All running jobs associated with the current|
    |                     |   user                                        |
    |                     |*  All user-initiated jobs                     |
    |                     |*  All running user-initiated jobs             |
    |                     |*  All jobs initiated by the current user      |
    |                     |*  All running jobs initiated by the current   |
    |                     |   user                                        |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Expand        |Changes the set of jobs being displayed. The   |
    |                     |display steps through the following sets of    |
    |                     |jobs, in the following order:                  |
    |                     |*  All running jobs initiated by the current   |
    |                     |   user                                        |
    |                     |*  All jobs initiated by the current user      |
    |                     |*  All running user-initiated jobs             |
    |                     |*  All user-initiated jobs                     |
    |                     |*  All running jobs associated with the current|
    |                     |   user                                        |
    |                     |*  All jobs associated with the current user   |
    |                     |*  All running jobs                            |
    |                     |*  All jobs                                    |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Release       |Removes the window from the screen and from the|
    |                     |window directory. This procedure also          |
    |                     |terminates the What.Jobs procedure. This       |
    |                     |procedure has the same effect as the Abandon   |
    |                     |procedure.                                     |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Revert        |Redraws the set of jobs to reflect the current |
    |                     |state of jobs on the system.                   |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Child  |Selects the line on which the cursor is        |
    |                     |located.                                       |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Delete |Kills the selected job or the job on which the |
    |                     |cursor is located. Note that if the job is not |
    |                     |for the current session and user, the command  |
    |                     |fails. This procedure is equivalent to         |
    |                     |Job.Kill.                                      |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.First- |Selects the first line of the image.           |
    |_Child               |                                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Last-  |Selects the last line of the image.            |
    |_Child               |                                               |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Next   |Selects the next line, provided that the cursor|
    |                     |is on a selected line. If the cursor is not on |
    |                     |the currently selected line or if no line is   |
    |                     |selected, the procedure selects the line on    |
    |                     |which the cursor is located. If the entire     |
    |                     |image is selected, this procedure produces an  |
    |                     |error message.                                 |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object.Parent |Selects the line the cursor is on. If the      |
    |                     |cursor is already on a selected line, this     |
    |                     |procedure selects the entire image. If the     |
    |                     |entire image is already selected, this         |
    |                     |procedure has no effect.                       |
     --------------------------------------------------------------------- 
    |                     |                                               |
    |Common.Object-       |Selects the previous line, provided that the   |
    |.Previous            |cursor is on the currently selected line. If   |
    |                     |the cursor is not on the currently selected    |
    |                     |line or if no line is selected, this procedure |
    |                     |selects the line on which the cursor is        |
    |                     |located. If the entire image is selected, this |
    |                     |procedure produces an error.                   |
     --------------------------------------------------------------------- 



 @node !Commands.What.Command

 procedure Command (Clue : String := "");


 DESCRIPTION

 Produces a description of the named package, procedure, function, type, or
 other Environment facility in the help window.

 This procedure uses the string provided in the Clue parameter as a keyword
 to match with descriptions in the help files. When a match is found, this
 procedure displays the help for that facility in a help window. The help
 may include the Ada specification, a description, parameter descriptions,
 and key binding, if applicable.

 The help window opened by this procedure can be manipulated using commands
 from package !Commands.Common; see the introduction to this package for
 details.

 This procedure brings up the same descriptions as the Does procedure.
 However, whereas the Does procedure accepts simple names, name fragments,
 and naming expressions, this procedure accepts only fully qualified
 pathnames.


 PARAMETERS

 Clue : String := "";

 Specifies the fully qualified pathname of the package, procedure, function,
 type, or other Environment facility for which help is requested. Simple
 names, name fragments, and naming expressions are not allowed.


 EXAMPLES

 The following command displays a help message for the
 !Commands.Editor.Line.Join procedure:

   What.Command ("!Commands.Editor.Line.Join");

 The resulting description, shown below, is displayed in a help window:

   !commands.editor.line.join is bound to:  LINE.'J', LINE.'j'

     procedure Join (Repeat : Integer := 1);

   Joins the next Repeat lines to the current line, leaving the cursor on
   the first character that came from the last line.
 

 REFERENCES

 procedure Does
 Editing Specific Types (EST), Help



 @node !Commands.What.Does

 procedure Does (Name : String := "");
   

 DESCRIPTION

 Produces a description of the named package, procedure, function, type, or
 other Environment facility.

 This procedure uses the string provided in the Name parameter as a keyword
 to match with descriptions in the help files. Simple names, name fragments,
 and naming expressions can be used.

 If a single match is found, this procedure displays a description of that
 facility. If several matches are found, this procedure opens a help menu
 displaying all the Environment facilities whose name contains the specified
 string. Designating an item in the menu and executing the
 !Commands.Common.Explain procedure produces the help for that item.

 The help window opened by this procedure can be manipulated using commands
 from package !Commands.Common; see the introduction to this package for
 details.

 This procedure brings up the same descriptions as the Command procedure.
 However, the Command procedure accepts only fully qualified pathnames; it
 does not accept simple names, name fragments, or naming expressions.


 PARAMETERS

 Name : String := "";

 Specifies a keyword for which the help files are to be searched. The name
 can be any portion of a full command name. Naming expressions are also
 accepted. Specifying the value "Help_On_Help" brings up information
 about the Environment help facility. The default is the null string.


 EXAMPLES

 Example 1

 The following command displays the help message for the
 !Commands.Operator.Change_Password procedure:

   What.Does ("Change_Password");


 Example 2

 The following command requests information about the Write command:

   What.Does ("Write");

 Several Environment commands have the word write as part of their
 pathname. Thus, the Does procedure displays a help menu listing all the
 relevant entries:

   Index entries related to "write"
   !Commands.Access_List.Write
   !Commands.Activity.Write
   !Commands.Common.Write_File
   !Commands.Switches.Write
   !Commands.Tape.Write
   !Commands.Tape.Write_Mt
   !Io.Direct_Io.Write
   !Io.Polymorphic_Sequential_Io.Operations.Write
   !Io.Sequential_Io.Write
   !Tools.Access_List_Tools.Write

 To see the help entry for the !Commands.Common.Write_File procedure,
 designate the entry using selection or cursor position and execute the
 !Commands.Common.Explain procedure (generally bound to a key).


 REFERENCES

 procedure Command
 Editing Specific Types (EST), Help



 @node !Commands.What.Home_Library

 procedure Home_Library;


 DESCRIPTION

 Finds the window containing the user's home library and puts the cursor in
 that window.

 If such a window does not exist, the Environment creates it.


                                                                          
 @node !Commands.What.Jobs

 procedure Jobs (Interval          : Positive := 10;
                 User_Jobs_Only    : Boolean  := False;
                 My_Jobs_Only      : Boolean  := False;
                 Running_Jobs_Only : Boolean  := True);


 DESCRIPTION

 Creates a display of jobs in the Environment and updates that display once
 every Interval number of seconds.

 This procedure creates a window listing the specified set of jobs. The
 initial set of jobs is determined by the User_Jobs_Only, My_Jobs_Only, and
 Running_Jobs_Only parameters. This set of jobs can be adjusted to
 include more or fewer jobs, using the !Commands.Common.Expand and
 !Commands.Common.Elide procedures, respectively.

 From the window produced by this procedure, you can connect to, disable,
 or kill your jobs using commands from packages Job and !Commands.Common.
 See the introduction to this package for details about using commands from
 package Common.

 Note that the window produced by this procedure is continually monitored
 by the system and updated every Interval number of seconds. Thus, while
 the window exists on the screen or in the window directory, this command
 continues to consume CPU time. To terminate the Jobs command and the
 jobs display, execute the !Commands.Common.Abandon or the
 !Commands.Common.Release procedure.

 To temporarily stop the updating of the jobs display, select one of the
 lines in the window.

 The interpretation of the display is described below in the "Examples"
 section.


 PARAMETERS

 Interval : Positive := 10;

 Specifies the minimum interval, in seconds, between updates of the screen.
 The default is 10 seconds.


 User_Jobs_Only : Boolean := False;

 Specifies whether the display is to include only user jobs. User jobs are
 those that are initiated by a user. They do not include the user's editor
 and command jobs, which are started by the system when the user logs in.
 The default is to display all jobs, including those that are not user
 jobs.


 My_Jobs_Only : Boolean := False;

 Specifies whether the display is to include only jobs associated with the
 user who initiates this command. The user's editor and command jobs are
 included when the value of this parameter is True. The default is to
 display jobs associated with the system or any user.


 Running_Jobs_Only : Boolean := True;

 Specifies whether the display is to include only running jobs. Running jobs
 include all those that are consuming or eligible to consume CPU time. The
 default is to include only running jobs. When False, all jobs, including
 those that are not consuming CPU time, are included in the display.


 EXAMPLES

 Example 1

 The following command produces a display of the jobs currently running on
 the system:

   What.Jobs;

 The resulting display, shown below, is continually updated until you
 terminate it using the !Commands.Common.Abandon or the
 !Commands.Common.Release procedure:

     User  Session Job  S Elapsed     CPU     % CPU  Cache Disk  Job Name
   ======= ======= ===  = ========= ========= =====  ===== ====  ========
           SYSTEM    4  R 05:10:15  34:52.294  5.77   11K   87k
           DAEMON    5  R 05:13:35  00:17.238  0.02   131   468
   TDG     S_1     232  I 03:51.184 00:14.974  2.45   205   503  [EDITOR]
   SJL     S_1     236  I 03:01:08  01:01.499  1.04   197   513  [EDITOR]
   TDG     S_1     244  I 19:25.119 00:46.945  8.17   212   349  [COMMAND]
           SYSTEM  253  I 09:08:47  00:33.975  3.26    22  1207  "!Tools.Ftp.

 The display headings are described below:

 User        Indicates the username under which the job was started. 
             Entries for jobs started by the system appear with blanks 
             in this column.

 Session     Indicates the name of the session under which the job was
             started. If the job was started by the system, then the system
             facility that started the job (such as SYSTEM or DAEMON) 
             appears in this column.

 Job         Indicates the number of the job.

 S           Indicates the state of the job. Job states are defined by
             the !Commands.Scheduler.Job_State type:

             R (Run)       Indicates that the job is executing; it is
                           consuming CPU time or is eligible to consume
                           CPU time.

             I (Idle)      Indicates that the job is not executing; it
                           is not consuming CPU time and has no
                           unblocked tasks. The job may be waiting for
                           input or requests for service.

             W (Wait)      Indicates that the job is able to run but is
                           temporarily ineligible for CPU time. A
                           waiting job returns to the RUN state when
                           the scheduler determines that the job is
                           eligible for resources again.

             D (Disabled)  Indicates that the job has been explicitly
                           disabled with the !Commands.Job.Disable
                           procedure or the Scheduler.Disable
                           procedure.

             Q (Queued)    Indicates that the job is waiting to run
                           in one of the background queues.

 Elapsed     Indicates the elapsed time since the job began. For each
             user, the time for the editor and command jobs indicates
             how long that user has been logged in. Time is indicated
             in one of three formats:

             mm:ss.fff     Indicates the number of minutes, seconds,
                           and decimal fractions of seconds.

             hh:mm:ss      Indicates the number of hours, minutes, and
                           seconds.

             dd/hh:mm      Indicates the number of days, hours, and
                           minutes.

 CPU         Indicates the total amount of CPU time the job has used
             since the job began executing.

 % CPU       Indicates the percent of the CPU time over the last Interval
             that was consumed by the job.

 Cache       Indicates the number of pages of memory that the job is
             currently using.

 Disk        Indicates the number of times the job has had to wait for
             the disk since it began.

 Job Name    Indicates the name of the job. This can be either a command
             name or the name of an editor job started automatically by
             a user's login (enclosed in brackets). The job names in 
             brackets cannot be killed by the !Commands.Common.Object-
             .Delete or !Commands.Job.Kill procedures.


 Example 2

 To obtain a list of all jobs explicitly initiated by you, including those
 that are active but not currently running, execute the following command:

   What.Jobs (Interval          => 10,
              User_Jobs_Only    => True,
              My_Jobs_Only      => True,
              Running_Jobs_Only => False);


 Example 3

 To obtain a list of all user-initiated jobs currently running on the
 system, execute the following command:

   What.Jobs (Interval          => 10,
              User_Jobs_Only    => True,
              My_Jobs_Only      => False,
              Running_Jobs_Only => False);


 REFERENCES

 procedure Users
 Editing Specific Types (EST), package Common
 System Management Utilities (SMU), package Scheduler



 @node !Commands.What.Line

 procedure Line;


 DESCRIPTION

 Displays the location of the cursor.

 This procedure displays the line number and column position for the
 cursor's location in the image in the current window. The display is sent
 to the message window.


 EXAMPLES

 The following command produces a report of the current cursor location:

   What.Line;

 The resulting report indicates that the cursor is on line 22, column 12 of
 the object in the current window:

   Line Number 22, Column Number  12

 

 @node !Commands.What.Load

 procedure Load (Verbose : Boolean := True);


 DESCRIPTION

 Displays the current system load.

 Depending on the value of the Verbose parameter, the procedure can display
 either of two sets of information. When the Verbose parameter is set to
 True (the default), the display includes:

 *  The average number of runnable tasks; that is, the average number of
    tasks eligible for CPU time.

 *  The average number of tasks waiting on disk operations.

 *  The average number of tasks that were withheld from running. A task is
    withheld from running if it is consuming more than its share of
    resources or if it has been queued or disabled (see the System
    Management Utilities (SMU) book, package Scheduler).

 For each category, the procedure displays the number of tasks averaged
 over one of four sampling intervals:

 *  The last 100 milliseconds

 *  The last minute

 *  The last 5 minutes

 *  The last 15 minutes

 When the Verbose parameter is set to False, this procedure displays only
 the average number of runnable tasks over the four sampling intervals.

 The job report is sent to Current_Error, which is, by default, the message
 window.


 PARAMETERS

 Verbose : Boolean := True;

 Specifies whether to display the full set of load numbers. The default is
 to display the full set. See "Description," above, for a list of the load
 numbers included in the full set. When False, only the load numbers for
 runnable tasks are displayed.


 EXAMPLES

 Example 1

 The following command produces a list of the CPU load numbers, resulting
 in the display below:

   What.Load (False);

   Load: 1.95, 0.25, 0.48, 0.41

 In this display:

 *  1.95 is the average number of tasks in the run queue during the last
    100 milliseconds.

 *  0.25 is the average number of tasks in the run queue in the last
    minute.

 *  0.48 is the average number of tasks in the run queue in the last 5
    minutes.

 *  0.41 is the average number of tasks in the run queue in the last 15
    minutes.


 Example 2

 The following command produces the verbose list of the current system
 load:

   What.Load;

 The verbose list appears as follows:

   L: 1.98, 0.35, 0.62, 0.44 D: 0.00, 0.04, 0.06, 0.04 H: 0.00, 0.00, 0.00, 0.00

 where:

 *  L (Load) lists the number of runnable tasks, averaged over the last 100
    milliseconds, 1 minute, 5 minutes, and 15 minutes, respectively.

 *  D (Disk) lists the number of tasks waiting for pages from disk,
    averaged over the last 100 milliseconds, 1 minute, 5 minutes, and 15
    minutes, respectively.

 *  H (Held) lists the number of withheld jobs, averaged over the last 100
    milliseconds, 1 minute, 5 minutes, and 15 minutes, respectively.


 REFERENCES

 System Management Utilities (SMU), procedure Scheduler.Get_Disk_Wait_Load
 System Management Utilities (SMU), procedure Scheduler.Get_Run_Queue_Load
 System Management Utilities (SMU), procedure Scheduler.Get_Withheld_Task_Load



 @node !Commands.What.Locks

 procedure Locks (Name : String := "<IMAGE>");


 DESCRIPTION

 Displays the locks that exist on the specified object.

 The Environment places a lock on an object when a job or user is accessing
 the object. This procedure displays the locks that exist on the specified
 object. You may want to use this procedure to check for the locks on an
 object if:

 *  An Io.Open command raises the Io_Exceptions.Use_Error error (lock
    error).

 *  The editor reports a lock error.

 *  Other operations indicate problems accessing the object.

 The locks are identified by job identity, job number, and kind. "Reader"
 signifies that the indicated job or user is viewing the object but has not
 opened it for editing. "Updater" signifies that the indicated job or user
 is making changes to the object, such as editing or compiling it.

 Note that the editor maintains separate locks on the DIANA representation
 of an Ada unit and its image. Locks on the image of an Ada unit are
 indicated by the suffix "'Image" attached to the unit's name in the locks
 display.

 The job display is sent to Current_Output, which is, by default, an
 Environment output window. Errors are reported in the message window.


 PARAMETERS

 Name : String := "<IMAGE>";

 Specifies the object whose locks should be displayed. Wildcards, context
 characters, set notation, indirect files, and attributes can be used. The
 default is the current image.


 EXAMPLES

 Suppose that you try to open for editing a unit called
 !Projects.Numerical_Tools.Baseball_Statistics, but you encounter a lock
 error. You can execute the following command to determine the cause of
 the lock error:

   What.Locks (Name => "!Projects.Numerical_Tools.Baseball_Statistics'Body");

 The resulting display, shown below, indicates that job number 153,
 belonging to user Lisk, has a write lock on Baseball_Statistics'Body. To
 determine whether Lisk is editing the unit or compiling it, you could use
 the Jobs procedure to list the names of the jobs on the system.

   !PROJECTS.NUMERICAL_TOOLS.BASEBALL_STATISTICS'BODY'V(1)
             Updater: LISK.S_1 Job 153
 

 REFERENCES

 procedure Jobs



 @node !Commands.What.Message

 procedure Message (File : String := "Daily_Message");
             

 DESCRIPTION

 Displays the message contained in the specified file.

 This procedure typically is included in login procedures to display the
 daily message contained in !Machine.Editor_Data.Daily_Message.

 The job display is sent to Current_Output, which is, by default, an
 Environment output window.


 PARAMETERS

 File : String := "Daily_Message";

 Specifies the name of the message file to be displayed. If a relative
 pathname is used, it is resolved with respect to the current context. If
 the name is not defined in the current context, the procedure displays the
 contents of !Machine.Editor_Data.Daily_Message, if such a file exists.


 EXAMPLES

 The following command reports the message contained in
 !Machine.Editor_Data.Daily_Message:

   What.Message;

 A sample message for a machine called Rational_1 is displayed below. Note
 that the contents of the Daily_Message file will be different for other
 machines.

                            Welcome To Rational_1
                            ---------------------

                          Environment Release 12_1_1
                             Mail Release 11_5_0
                              RDF Release 6_2_5
                          MC68020/UNIX Release 6_2_2

   For release information, please see the release notes in library
   !Machine.Release.Release_Notes.

 For information about using nondefault message files and sending messages,
 see the System Management Utilities (SMU) book or the System Manager's
 Guide.



 @node !Commands.What.Object

 procedure Object (Name : String := "<IMAGE>");
 

 DESCRIPTION

 Displays the fully qualified name of the specified object.

 This procedure resolves the specified name with respect to the current
 library and displays the fully qualified pathname. The job display is sent
 to Current_Error, which is, by default, the message window.


 PARAMETERS

 Name : String := "<IMAGE>";

 Specifies the name for which the fully qualified pathname is to be
 displayed. The default is the current image.



 @node !Commands.What.Search_List_Resolution

 Search_List_Resolution (Name : String := "<CURSOR>");
 

 DESCRIPTION

 Resolves the specified name in the context of the searchlist for the
 current session.

 This procedure resolves the value of the Name parameter in the same way
 that command names are resolved. Thus, this procedure is useful as a
 diagnostic tool when the names you enter in command windows fail to
 resolve or resolve in unexpected ways.

 Specifically, this procedure looks for an Ada unit (or a declaration in an
 Ada unit) with the specified name, searching each of the libraries in the
 current searchlist in succession.

 *  If such an object is found, its fully qualified pathname is displayed
    along with the searchlist component that led to the resolution.

 *  If more than one of the libraries named in the searchlist contains an
    Ada object with the specified name, this procedure resolves to the first
    one it encounters.

 *  If no such object is found in any library on the searchlist, a message
    is displayed to that effect.

 The job report is sent to Current_Error, which is, by default, the message
 window.

 This procedure is similar to using the Library.Resolve command with the
 searchlist context character \ (see Parameter-Value Conventions in the
 Reference Summary (RS) book). However, unlike the Library.Resolve
 procedure, this procedure also reports the searchlist component that was
 used for the resolution.


 PARAMETERS

 Name : String := "<CURSOR>";

 Specifies the Ada name to be resolved. The name can be simple or qualified.
 If more than one name is specified (for example, using wildcards or set
 notation), only the first name is resolved. The default is the name
 designated by the cursor.


 EXAMPLES

 Assume that user Anderson has created a package called Debug in the Tools
 subdirectory in his home library. Assume further that he is trying to
 debug a program in another subdirectory of his home library. When he
 enters the standard Environment command Debug.Break, a message reports
 that the name Debug.Break is undefined. To diagnose this problem, he can
 enter the following command:

   What.Search_List_Resolution ("debug.break");

 This command produces the following report:

   DEBUG resolves, via searchlist component 1 ($`), to !USERS.ANDERSON.
   TOOLS.DEBUG'SPEC'V(3), but DEBUG.BREAK is not defined because BREAK
   is not defined in [!USERS.ANDERSON.TOOLS.DEBUG'SPEC'V(3)]

 From this message, Anderson sees that the command name Debug.Break is
 being resolved through the first component on his searchlist. This
 component ($`) causes the Environment to search through the current
 library and its links. Because the current library is a subdirectory of
 Anderson's home world, the current library has internal links to units in
 the Tools subdirectory. Thus, the name Debug is resolved to Anderson's
 own package Debug, which has no Break procedure.

 To be able to write tools against his own package Debug while still being
 able to execute commands from !Commands.Debug, Anderson can change his
 searchlist so that the component $` follows the component !Commands.


 REFERENCES

 package Search_List
 Library Management (LM), procedure Library.Resolve



 @node !Commands.What.Tabs

 procedure Tabs;
 

 DESCRIPTION

 Displays all of the current tab stops.

 The job display is sent to the message window.


 EXAMPLES

 The following command displays the current tab stops:

   What.Tabs

 The resulting display, below, indicates each tab stop with a vertical bar.

   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
   


 @node !Commands.What.Time

 procedure Time;
   

 DESCRIPTION

 Displays the current date and time of day.

 The job display is sent to Current_Error, which is, by default, the
 message window.


 EXAMPLES

 The following command produces the report below:

   What.Time;

   June 2, 1991 at 10:24:23 AM

 

 @node !Commands.What.Users

 procedure Users (All_Users : Boolean := True);
 

 DESCRIPTION

 Displays a list of users who are currently logged in and the active jobs
 of each user or of the invoking user.

 This command is useful for obtaining a user's port number before logging
 that user off using the !Commands.Operator.Force_Logoff procedure or for
 obtaining a job number to be used in the !Commands.Job.Kill procedure.

 For each user currently logged in, this procedure lists:

 *  The user's login ID or username

 *  The port number on which the user is logged in

 *  The jobs associated with the user

 *  The state of each job

 *  The amount of time each job has been active

 *  The name of each job

 If a user is logged into more than one session on the current system, each
 session is listed separately.

 The job display is static; that is, it is not updated automatically when
 users log in and out or when jobs terminate. You must run the command
 again to display a new list with current information.

 The job display is sent to Current_Output, which is, by default, an
 Environment output window.

 To obtain an abbreviated list of the users logged into the system, use the
 !Commands.Abbreviations.Users procedure.


 PARAMETERS

 All_Users : Boolean := True;

 Controls whether the job display includes information for all the users
 currently logged in (True) or only for the user who entered the Users
 command (False). If False and the user is currently logged into more than
 one session, only information for the current session is displayed.


 EXAMPLES

 Example 1

 The following command produces the report below, containing a list of all
 the users currently logged in:

   What.Users;

   User Status on May 5, 1991 at 1:58:10 PM

        User       Line  Job   S      Time    Job Name
   ==============  ====  ===  ====  ========  =========================

   *SYSTEM            -    4  RUN    5/04:19  System
                           5  RUN    5/04:19  Daemons
                         131  IDLE   2/23:08  Print Spooler
                         199  IDLE   5/03:41  Mail LOCAL Carrier
                         248  IDLE   5/03:44  Smooth Snapshots

   NETWORK_PUBLIC     -  168  IDLE   5/03:41  Mail Distribute Server
                         185  IDLE  22:01:19  Print Queue Server
                         191  IDLE   1:56:12  Archive Server

   JAF              239  140  RUN      0.806  !USERS.JAF % WHAT.USERS
                         159  RUN    2:09:02  [JAF.S_1 Editor]
                         193  IDLE   2:07:15  [JAF.S_1 Command]

   SJB              247  169  IDLE   3/03:59  [SJB.S_1 Command]
                         179  IDLE   3/03:59  [SJB.S_1 Editor]

   NAM              246  167  IDLE   4/04:01  [NAM.S_1 Command]
                         252  IDLE   4/04:01  [NAM.S_1 Editor]

   JAF              240  135  IDLE   1:25:01  [JAF.S_2 Command]
                         176  IDLE   1:26:10  [JAF.S_2 Editor]

 The headings are described below:

 User        Indicates the username under which the job was started. The 
             username is shown once for each active session. It is not
             repeated for each job running under that session. The username
             *SYSTEM indicates jobs that belong to the Environment itself.

 Line        Indicates the port number on which the user is logged in. A
             dash (-) indicates that the user is not logged into the
             Environment but has one or more jobs running.

 Job         Indicates the number of the job.

 S           Indicates the state of the job. Job states are defined by the
             !Commands.Scheduler.Job_State type:

             RUN        Indicates that the job is executing; it is
                        consuming CPU time or is eligible to consume CPU
                        time.

             IDLE       Indicates that the job is not executing; it is
                        not consuming CPU time and has no unblocked tasks.
                        The job may be waiting for input or requests for
                        service.

             WAIT       Indicates that the job is able to run but is
                        temporarily ineligible for CPU time. A waiting job
                        returns to the RUN state when the scheduler
                        determines that the job is eligible for resources
                        again.

             DISABLED   Indicates that the job has been explicitly
                        disabled with the !Commands.Job.Disable procedure 
                        or the Scheduler.Disable procedure.

             QUEUED     Indicates that the job is waiting to run in
                        one of the background queues.

 Time        Indicates the elapsed time since the job began. For each 
             user, the time for the editor and command jobs indicates how
             long that user has been logged in. Time is indicated in one of
             three formats:

             mm:ss.fff  Indicates the number of minutes, seconds, and
                        decimal fractions of seconds.

             hh:mm:ss   Indicates the number of hours, minutes, and
                        seconds.

             dd/hh:mm   Indicates the number of days, hours, and minutes.

 Job Name    Indicates the name of the job. The editor and command
             jobs represent the user's session.


 Example 2

 The following command produces the display below, listing the jobs
 currently running under user GZC's current session:

   What.Users(False);

   User Status on June 17, 1991 at 04:22:52 AM

     User    Line  Job   S       Time              Job Name
   ========  ====  ====  ====  =========  ==========================
   GZC       241    188  IDLE    1:29:58  [GZC.S_1 Command]
                    228  RUN       2.187  GZC_WORK.REV1_WOR
                    250  RUN     1:30:14  [GZC.S_1 Editor]
 
 REFERENCES

 procedure Jobs



 @node !Commands.What.Version

 procedure Version;
 

 DESCRIPTION

 Displays the version (release) number of the current Environment.

 The job display is sent to Current_Error, which is, by default, the
 message window.