DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦e0c1a4936⟧ TextFile

    Length: 520670 (0x7f1de)
    Types: TextFile
    Notes: R1k Text-file segment

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦870243781⟧ 
            └─⟦this⟧ 

TextFile


 @node !Commands.Daemon

 Package Daemon defines a program called the system daemon, which
 periodically runs a set of special jobs serving as system custodians.
 These special jobs, called clients, maintain system efficiency by managing
 the system's internal data structures, disposing of obsolete data, and
 reclaiming storage space.

 System-daemon clients run according to a standard default schedule. Using
 commands from package Daemon, a system manager can run clients
 independently of the schedule, prevent a scheduled client from running,
 and display information about each client.

 Resources from package !Tools.Disk_Daemon specifically control the
 conditions under which the Disk client runs. See the System Manager's
 Guide for information about controlling Disk-client operations through
 resources from package Disk_Daemon.

 Some of the operations in this package are restricted to users with
 operator capability (see package Operator). If this restriction applies,
 it is stated in the reference entry for the command.


 RESOURCES IN PACKAGE DAEMON

 The following classification groups commands in package Daemon by general
 tasks:

 Setting default operations and scheduling during machine initialization:

       Schedule                        Set_Access_List_Compaction
       Set_Consistency_Checking        Set_Log_Threshold
       Snapshot_Finish_Message         Snapshot_Start_Message
       Snapshot_Warning_Message        Threshold_Warnings
       Warning_Interval

 Interactively altering scheduling of operations:

       Collect                         Quiesce
       Run                             Schedule
       Set_Priority                    Show_Log_Thresholds
       Show_Snapshot_Settings          Status

 Getting information about scheduled operations:

       Get_Access_List_Compaction      Get_Consistency_Checking
       Get_Log_Threshold               Get_Size
       Get_Snapshot_Warnings           Get_Warning_Interval
       In_Progress                     Interval
       Last_Run                        Next_Scheduled
       Show_Log_Thresholds             Show_Snapshot_Settings
       Status


 KEY CONCEPTS FOR PACKAGE DAEMON

 The system daemon runs several programs as clients. These system-daemon
 clients periodically perform the following system operations:

 *  Compaction of system data structures

 *  Disk collection

 *  Saving the system state

 *  Saving the system error log

 Other aspects of system-daemon operation are initialized during system
 boot. (Refer to the "System-Daemon Initialization" subsection for more
 information on system-daemon initialization.)

 Note: Refer to the System Manager's Guide for a description of
 system-daemon management, including a description of techniques a system
 manager can use to change or monitor the way disk collection is executed.


 Snapshot Client

 The Snapshot client makes a record, or snapshot, of the current state of
 the Environment. Snapshots are important because, when the system boots,
 the Environment is restored to the state that was recorded by the most
 recent snapshot. Only objects that were committed before the last snapshot
 are preserved.


 Actions Client

 The Actions client manages the data structure that controls simultaneous
 access to objects. This data structure prevents inconsistencies when
 several users or jobs require simultaneous access to an object. By
 default, the Actions client is scheduled to run unobtrusively every two
 hours in the standard Environment.


 Disk Client

 The Disk client is run daily to remove obsolete data from the disks.
 Running the Disk client is also called disk collection. Disk collection is
 run according to schedule and also can be run on an as-needed basis.
 During system initialization, several procedures from package
 Disk_Daemon are called in order to set the disk-collection thresholds for
 the disk volumes. See the System Manager's Guide for more information on
 package Disk_Daemon resources, including information on how to change
 disk-collection thresholds.


 Error_Log Client

 System errors and other messages can be directed to the operator console,
 the stable-storage error log on disk, or both with the
 Daemon.Set_Log_Threshold procedure. Messages in the stable-storage error
 log are not accessible from the Environment until the Error_Log client
 copies the stable-storage error log into a permanent dated file in the
 !Machine.Error_Logs world. (They are accessible, however, from the
 console: at the Kernel: prompt, enter the Show_Error_Log command.)

 Normally, one Environment error-log file is created per day, because the
 Error_Log client runs once a day under the standard schedule. You can
 cause the Error_Log client to run immediately by executing the command:

   Daemon.Run ("Error_Log");

 The name of each file shows the date and time it was created. For example,
 the file created on August 1, 1991, at 4:00 A.M. is named
 Log_91_08_01_At_04_00_01.

 The Error_Log client is normally the last client to run each day. Thus,
 the Environment error-log file that is created on a given day contains
 the messages that were generated on the previous day.


 Object Managers as Clients

 The Environment includes 16 object managers. One of the functions of the
 object managers is to perform compaction that discards deleted objects.
 The object managers are run by the system daemon on a regular
 schedule--either daily or weekly.

         Table 1    Object Managers Run as System-Daemon Clients
              ----------------------------------------------- 
             |         |                              |      |
             |         |                              |Stand |
             |Object   |             Task             |ard   |
             |Manager  |                              |Sched |
             |         |                              |ule   |
              ----------------------------------------------- 
             |         |                              |      |
             |Ada      |Manages the set of objects of |Daily |
             |         |class Ada. Keeps track of the |      |
             |         |parent/child relationships    |      |
             |         |between the Ada units and     |      |
             |         |their subunits. Stores ACL    |      |
             |         |information for Ada units.    |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Archived_|Manages D1-style code views   |Weekly|
             |Code     |and load procs.               |      |
              ---------------------------------------  ------ 
             |         |                              |      |
             |Code_    |Manages R1000 Ada code        |Weekly|
             |Segment  |segments.                     |      |
              ---------------------------------------  ------ 
             |         |                              |      |
             |Configura|Reclaims memory.              |Weekly|
             |ion      |                              |      |
              ---------------------------------------  ------ 
             |         |                              |      |
             |DDB      |Manages the dependency        |Weekly|
             |         |database, which maintains a   |      |
             |         |record of the dependencies    |      |
             |         |between Ada units. Removes    |      |
             |         |obsolete dependencies from the|      |
             |         |database.                     |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Directory|Manages the relationship      |Daily |
             |         |between objects in the di-    |      |
             |         |rectory system, including what|      |
             |         |objects are children of a     |      |
             |         |directory, and default ACL    |      |
             |         |information.                  |      |
              ----------------------------------------------- 
             |         |                              |      |
             |File     |Manages the set of objects of |Daily |
             |         |class File. Stores ACL in-    |      |
             |         |formation for file objects.   |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Group    |Manages groups.               |Weekly|
             |         |                              |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Link     |Manages Ada with connections  |Weekly|
             |         |between worlds.               |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Null_    |Reclaims memory.              |Weekly|
             |Device   |                              |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Pipe     |Is used by kernel (analogous  |Weekly|
             |         |to UNIX pipes).               |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Program_ |Manages the Ada program       |Weekly|
             |Library  |library. (Prior to D3 release:|      |
             |         |associated with each world.)  |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Session  |Manages login sessions.       |Weekly|
             |         |                              |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Tape     |Manages tape devices.         |Weekly|
             |         |                              |      |
              ----------------------------------------------- 
             |         |                              |      |
             |Terminal |Manages terminal port objects.|Weekly|
             |         |                              |      |
              ----------------------------------------------- 
             |         |                              |      |
             |User     |Manages R1000 user accounts.  |Weekly|
             |         |                              |      |
              ----------------------------------------------- 




 Access-List Compaction

 A job's access to worlds, files, Ada units, and certain operations is
 restricted by access control. Access control applies to all jobs: both
 those initiated interactively through command windows and key combinations
 and those initiated programmatically through procedure calls as a
 program executes.

 Access control is determined by an object's access-control list (ACL). One
 of the functions of the system daemon is to perform housekeeping
 maintenance on ACLs. Known as access-list compaction, this becomes
 important when the number of active access-control groups approaches the
 maximum available group numbers.


 Access-Control Groups

 An ACL is a list of groups that are permitted access to an object; these
 groups contain usernames. A job is permitted access to an object only if
 the username of the job's user is a member of a group listed in the
 object's ACL. Note that groups can contain only usernames--not other
 groups.

 Groups are defined either automatically by the Environment or explicitly by
 users through operations from package Operator. Group objects are stored
 in the world !Machine.Groups. Package Operator provides commands for
 creating, modifying, and deleting these group objects. (For more
 information, see package Operator and the Library Management (LM) book.)

 A maximum of 1,000 groups can exist at one time on each R1000 processor.
 The Environment keeps a list of all groups on a machine. Each group in the
 list is numbered. The number for any particular group never changes unless
 it is deleted and then recreated.

 Whenever a user is deleted, the number that was consumed by that group in
 the list of groups is not automatically reclaimed. Instead, the name of
 the group is set to <UNKNOWN_N>, where N is the number for that group.
 Unknown groups appear in access lists when a group that has been deleted
 was previously included in the access list for an object.

 Since the number for a group is not automatically reclaimed when the group
 is deleted, it is possible for a given machine to run out of numbers for
 new groups. If a machine runs out of access-list groups, new groups and
 users cannot be created on that machine until the numbers for obsolete
 groups are reclaimed.


 Reclaiming Access-Control Groups

 To reclaim the numbers for deleted groups, the Ada, File, and Directory
 object managers can be instructed to run access-list compaction.
 Access-list compaction can be performed either through the Daily client or
 immediately, if necessary.

 *  To run access-list compaction through the Daily client on a particular
    day, the Set_Access_List_Compaction procedure should be run before the
    time at which the daemons run (typically about 2 A.M.). Then when the
    daemons run, they will perform access-list compaction.

 *  To run access-list compaction immediately, first run the
    Set_Access_List_Compaction procedure. Then run the Daemon.Run
    procedure for each of the Ada, Directory, and File object managers.

 Note: The Daemon.Set_Access_List_Compaction procedure is executed
 automatically during system initialization. Thus, if the R1000 is booted
 periodically, it may not be necessary to manually execute the
 Set_Access_List_Compaction command.

 After access-list compaction has run, the number for the next available
 group is set to the lowest available number. For example, assume that
 groups corresponding to spaces 1 through 100 exist, and then the groups
 corresponding to spaces 17, 47, and 39 are deleted. During access-list
 compaction, these three spaces are reclaimed, and the next available
 space will be set to 17, rather than 101.


 Determining Available Group Space

 To determine which spaces are available, run the !Commands.System_Mainte-
 nance.Show_Groups command with its parameter set to the default False.
 Show_Groups displays a list of the free group numbers to help you
 determine whether access-list compaction should be run, as shown in Figure
 1.

   Free group map
   --------------
     16
     19 .. 26
     28 .. 52
     54 .. 195
    197 .. 280
    282 .. 284
    286 .. 287
    293 .. 305
    310 .. 1022

 Caution: The Show_Groups procedure, with its parameter set to True, causes
 a group space to be consumed; this group space will no longer be available
 until access-list compaction is performed. To prevent consuming group
 space when running Show_Groups, use the default False parameter setting.
 To determine the next free group number, use the True setting.

 Show_Groups also displays a mapping between groups and their space number,
 as shown in Figure 2.

   Group name map
   --------------
      0  PUBLIC
      1  NETWORK_PUBLIC
      2  PRIVILEGED
      3  RATIONAL
      4  MAILER
      5  SPOOLER
      6  SYSTEM
     18  OPERATOR
     27  GZC
     53  JLS
    196  TRAINING
    306  JLF
    307  RICK
    308  LEC
    309  JUDY


 System-Daemon Initialization

 The system daemons are initialized during system boot; their initial
 schedule (cycle times) is specified in !Machine.Initialization.Rational.
 The standard cycle times are:

 *  Time at which Daily and Weekly clients run: 3:00 A.M. for daily
    clients; 2:30 A.M. for Weekly clients

 *  Snapshot interval: 30 minutes

 *  Snaphot messages: 20-second warning interval; notification of finish

 *  Daemon warning interval: 2 minutes before daily clients

 *  Disk-collection thresholds: site-dependent

 *  Disk-collection threshold warnings: warn when thresholds have been
    passed

 *  System log messages (appear on operator console): only warning,
    problem, and fatal messages

 *  Access-list compaction: all relevant clients perform access-list
    compaction

 You can write procedures or _Start files in the Site or Local world of
 !Machine.Initialization to implement customizations of the system
 daemon, to be processed and executed by the initialization Start
 procedure. See the online documentation in !Machine.Initialization for
 more information.


 @node !Commands.Daemon.Collect

 procedure Collect (Vol      : Volume;
                    Priority : Collection_Priority := 0);

 DESCRIPTION

 Begins disk collection on the specified volume at the specified priority.

 If scheduled disk collection is already in progress, the procedure returns
 immediately with no effect.

 Note that the Collect procedure does not affect scheduling intervals.


 PARAMETERS

 Vol : Volume;

 Specifies the disk drive by disk-drive number. The value 0 specifies all
 volumes.


 Priority : Collection_Priority := 0;

 Specifies the priority for running disk collection. Collection_Priority is
 an integer from -1 through 6. The default, 0, ensures that disk collection
 takes place, potentially affecting system load. The value -1 runs
 collection as a background activity; 6 allocates all resources for disk
 collection. The specified priority is temporary; it affects only the disk
 collection started by the current call to this procedure.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Daemon.Collect (2,0);

 starts disk collection on disk drive 2 at priority 0, which affects system
 load.


 REFERENCES

 subtype Collection_Priority
 procedure Set_Priority
 procedure Threshold_Warnings
 subtype Volume



 @node !Commands.Daemon.Collection_Priority

 subtype Collection_Priority is Integer range -1 .. 6;

 DESCRIPTION

 Specifies the priority for running disk collection.


 ENUMERATIONS

 -1

 Does not guarantee progress in disk collection. This priority runs disk
 collection as a very low-level background activity, using only "spare" CPU
 cycles. If there are none, disk collection will wait indefinitely (does a
 backoff ) until cycles are available or until collection priority is
 increased.                            


 0

 Guarantees progress in disk collection, with a small impact on system
 performance (and user response time). This priority is the same as running
 background jobs.


 2

 Guarantees progress in disk collection and preempts background jobs that
 do not use the highest priority.


 3

 Guarantees progress in disk collection and runs on par with most
 foreground jobs. This priority has a big impact on system performance
 because it is sharing the same priority as most commands.


 4

 Guarantees progress in disk collections and preempts most foreground jobs.
 Editing is still possible, but commands will run very slowly.


 6

 Guarantees progress in disk collection and gives disk collection higher
 priority than user jobs.


 REFERENCES

 procedure Collect
 procedure Set_Priority



 @node !Commands.Daemon.Condition_Class

 type Condition_Class is (Normal, Warning, Problem, Fatal);

 DESCRIPTION

 Specifies how serious an error should be before it is logged in an
 Environment log file in the world !Machine.Error_Logs.

 This type is used with the Set_Log_Threshold procedure.

 The enumerations are listed below in the order of least severe to most
 severe.


 ENUMERATIONS


 Normal

 Specifies messages from the Environment that provide information but do not
 necessarily indicate problems. Normal messages appear in the error log
 preceded by the characters ---.


 Warning

 Specifies situations that are unusual but not necessarily dangerous.
 Warning messages appear in the error log preceded by the characters +++.


 Problem

 Specifies situations that the Environment expects will lead to problems.
 Problem messages appear in the error log preceded by the characters !!!.


 Fatal

 Specifies situations in which the Environment refuses to proceed. The task
 that was the source of the problem is suspended. Fatal messages appear in
 the Environment error log preceded by the characters ***.


 REFERENCES

 procedure Get_Log_Threshold
 type Log_Threshold
 procedure Set_Log_Threshold



 @node !Commands.Daemon.Get_Access_List_Compaction

 function Get_Access_List_Compaction (Client : String := "")
                                     return Boolean;

 DESCRIPTION

 Returns True if any of the specified clients are scheduled to perform
 access-list compaction.

 The clients that can perform access-list compaction are File, Ada, and
 Directory. Access-list compaction is the process of removing nonexistent
 groups from the access lists of objects. Nonexistent groups occur when
 groups are removed from the machine.

 For further information on access-control groups, see package Operator.

 Enabling this feature slows a client's operation.


 PARAMETERS

 Client : String := "";

 Specifies the name of the client to perform access-list compaction. Clients
 are listed in the introduction to this package.


 return Boolean;

 Returns True if any of the specified clients are scheduled to perform
 access-list compaction; otherwise, the function returns False.


 REFERENCES

 procedure Set_Access_List_Compaction
 package Operator



 @node !Commands.Daemon.Get_Consistency_Checking

 function Get_Consistency_Checking (Client : String := "")
                                   return Boolean;

 DESCRIPTION

 Returns True if any of the specified clients are scheduled to perform
 consistency checking.

 Consistency checking performs additional work to ensure that the internal
 state of the system is correct. This operation normally is run only when
 problems are suspected. For the DDB client, this setting may result in
 compaction.

 Enabling this feature slows a client's operation.


 PARAMETERS

 Client : String := "";

 Specifies the name of the client to be queried to determine whether it is
 performing consistency checking. Clients are listed in the introduction
 to this package. The default specifies all clients.


 return Boolean;

 Returns True if any of the specified clients are scheduled to perform
 consistency checking. The default is False. If True, the default is
 restored after the next specified daemon run has completed.


 REFERENCES

 procedure Set_Consistency_Checking



 @node !Commands.Daemon.Get_Log_Threshold

 function Get_Log_Threshold (Kind : Log_Threshold)
                            return Condition_Class;

 DESCRIPTION

 Returns the class of message severity (Normal, Warning, Problem, or Fatal)
 that is handled by the specified kind of log (Console_Print, Log_To_Disk,
 or Commit_Disk).


 PARAMETERS

 Kind : Log_Threshold;

 Specifies the destination for messages. The destination can be
 Console_Print, Log_To_Disk, or Commit_Disk.


 return Condition_Class;

 Returns the class of message by Condition_Class type, including Normal,
 Warning, Problem, and Fatal.


 REFERENCES

 subtype Condition_Class
 type Log_Threshold
 procedure Set_Log_Threshold



 @node !Commands.Daemon.Get_Size

 procedure Get_Size (Client               :     String;
                     Size                 : out Long_Integer;
                     Size_After_Last_Run  : out Long_Integer;
                     Size_Before_Last_Run : out Long_Integer);

 DESCRIPTION

 Displays the current number of disk pages of the data structures compacted
 by the specified client, both before and after the last time the client was
 run.

 This procedure is useful for monitoring the growth curve of the data
 structures that are compacted by the following clients: Ada, DDB,
 Directory, Disk, and File.


 PARAMETERS

 Client : String;

 Specifies the name of the client to be monitored. The Ada, DDB, Directory,
 Disk, and File clients are most relevant to this procedure. All clients
 are listed in the package introduction.


 Size : out Long_Integer;

 Specifies the number of pages currently used by the client's data
 structure.


 Size_After_Last_Run : out Long_Integer;

 Specifies the number of pages used by the client's data structure after the
 client was last run.


 Size_Before_Last_Run : out Long_Integer;

 Specifies the number of pages used by the client's data structure before
 the client was last run.



 @node !Commands.Daemon.Get_Snapshot_Settings

 procedure Get_Snapshot_Settings (Warning        : out Duration;
                                  Start_Message  : out Boolean;
                                  Finish_Message : out Boolean);

 DESCRIPTION

 Returns the current snapshot options.


 PARAMETERS

 Warning : out Duration;

 Specifies the current warning interval (the amount of time between the
 warning and the snapshot).


 Start_Message : out Boolean;

 Specifies whether a message is displayed when the snapshot begins.


 Finish_Message : out Boolean;

 Specifies whether a message is displayed when the snapshot is completed.


 REFERENCES

 procedure Show_Snapshot_Settings
 procedure Snapshot_Finish_Message
 procedure Snapshot_Start_Message
 procedure Snapshot_Warning_Message
 Programming Tools (PT), package Time_Utilities



 @node !Commands.Daemon.Get_Warning_Interval

 function Get_Warning_Interval return Duration;

 DESCRIPTION

 Returns the amount of warning given before each Daily client runs.

 The time between the warning message and the running of the client gives
 the operator time to quiesce it, if needed.


 PARAMETERS

 return Duration;

 Returns the amount of time between the warning and the running of the
 Daily client. The value of Duration is a number of minutes, as defined in
 PT, package Time_Utilities.


 REFERENCES

 procedure Quiesce
 procedure Warning_Interval
 Programming Tools (PT), package Time_Utilities



 @node !Commands.Daemon.In_Progress

 function In_Progress (Client : String) return Boolean;

 DESCRIPTION

 Returns a Boolean value indicating whether the specified client is
 currently running.


 PARAMETERS

 Client : String;

 Specifies the name of the client in question. Clients are listed in the
 introduction to this package.


 return Boolean;

 Returns True when the specified client is running; otherwise, the function
 returns False.


 REFERENCES

 Programming Tools (PT)



 @node !Commands.Daemon.Interval

 function Interval (Client : String) return Duration;

 DESCRIPTION

 Returns the scheduled interval for the specified client.


 PARAMETERS

 Client : String;

 Specifies the name of the client in question. Clients are listed in the
 introduction to this package.


 return Duration;

 Returns the currently scheduled interval for this client, in number of
 seconds.


 REFERENCES

 Programming Tools (PT), package Time_Utilities



 @node !Commands.Daemon.Last_Run

 function Last_Run (Client : String) return Calendar.Time;

 DESCRIPTION

 Returns the last time the specified client was run.


 PARAMETERS

 Client : String;

 Specifies the client. Clients are listed in the introduction to this
 package.


 return Calendar.Time;

 Returns the time the client was last run.


 REFERENCES

 Programming Tools (PT), package Time_Utilities



 @node !Commands.Daemon.Log_Threshold

 type Log_Threshold is (Console_Print, Log_To_Disk, Commit_Disk);

 DESCRIPTION

 Determines the actions that can be taken on a system message.

 The action selected is controlled by the Set_Log_Threshold procedure,
 depending on the Condition_Class type of the message.


 ENUMERATIONS


 Commit_Disk

 Writes messages immediately into the stable-storage error log on the disk.
 These messages are retained if the system fails.


 Console_Print

 Directs messages to the operator console.


 Log_To_Disk

 Directs messages to the stable-storage error log on the disk. These
 messages are not immediately written onto the disk, so they may be lost if
 the system fails before they can be written.


 REFERENCES

 subtype Condition_Class
 procedure Get_Log_Threshold
 procedure Set_Log_Threshold



 @node !Commands.Daemon.Major_Clients

 Major_Clients : constant String := "*";

 DESCRIPTION

 Defines a constant string representing the list of major clients used as
 the default client in the Status procedure.

 Note that if the null string is used in place of Major_Clients, the status
 for all clients is displayed.

 The list of major clients includes: Actions, Ada, DDB, Directory, Disk,
 File, and Snapshot.


 REFERENCES

 procedure Status



 @node !Commands.Daemon.Next_Scheduled

 function Next_Scheduled (Client : String) return Calendar.Time;

 DESCRIPTION

 Returns the time at which the specified client will run.


 PARAMETERS

 Client : String;

 Specifies the name of the client in question. Clients are listed in the
 introduction to this package.


 return Calendar.Time;

 Specifies the next time the client will run.


 REFERENCES

 Programming Tools (PT), package Time_Utilities



 @node !Commands.Daemon.Quiesce

 procedure Quiesce (Client           : String := ">>CLIENT NAME<<";
                    Additional_Delay : Duration := 86_400.0;
                    Response         : String   := "<PROFILE>");

 DESCRIPTION

 Revokes the specified client's schedule and prevents it from running for
 the amount of time specified in the Additional_Delay parameter.

 This procedure is equivalent to executing the Schedule procedure with a
 new value for the First_Run parameter and the existing value for the
 Interval parameter.

 Quiescing only prevents a client from running; it does not stop a client
 that is already running.

 To prevent a client from running indefinitely, use Duration'Last for the
 Additional_Delay parameter.


 PARAMETERS

 Client : String := ">>CLIENT NAME<<";

 Specifies the name of the client to be delayed. Clients are listed in the
 introduction to this package. The default parameter placeholder ">>CLIENT
 NAME<<" must be replaced or an error will result.


 Additional_Delay : Duration := 86_400.0;

 Specifies the amount of delay. The default is one day. See PT,
 Time_Utilities.Seconds type.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Daemon.Quiesce ("Error_Log");

 removes the Error_Log client from the schedule for one day.


 REFERENCES

 function Get_Warning_Interval
 procedure Run
 procedure Schedule
 Programming Tools (PT), package Time_Utilities



 @node !Commands.Daemon.Run

 procedure Run (Client   : String := "Snapshot";
                Response : String := "<PROFILE>");

 DESCRIPTION

 Runs the specified client immediately.

 If the Snapshot client is specified, the Snapshot client will not run until
 after the snapshot warning message interval has elapsed. (See the
 Snapshot_Warning_Message procedure.)

 If the Disk client is specified, disk collection is done in the order of
 the disk with the least remaining space to the disk with the most
 remaining space.

 Note that the Run procedure does not affect scheduling intervals or
 schedule the client for additional runs.


 PARAMETERS

 Client : String := "Snapshot";

 Specifies the client to be run. Clients are listed in the package
 introduction. The default is the Snapshot client. If the null string ("")
 is specified, all clients are run.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Daemon.Run;

 takes a snapshot after the Snapshot_Warning_Message procedure has elapsed.
 The client's scheduling intervals are not affected.


 REFERENCES

 procedure Quiesce
 procedure Schedule
 procedure Snapshot_Warning_Message



 @node !Commands.Daemon.Schedule

 procedure Schedule (Client    : String    := ">>CLIENT NAME<<";
                     Interval  : Duration;
                     First_Run : Duration  := 0.0;
                     Response  : String    := "<PROFILE>");

 DESCRIPTION

 Schedules the specified client to run at regular intervals.

 A Schedule procedure must be executed for each client. The Environment
 daemon cannot run a client unless it has been scheduled. In the standard
 Environment, the client schedules are set to default values. System
 managers can use this command to change a client's schedule.


 PARAMETERS

 Client : String := ">>CLIENT NAME<<";

 Specifies the name of the client to be scheduled. Clients are listed in the
 introduction to this package. The default parameter placeholder
 ">>CLIENT NAME<<" must be replaced or an error will result.


 Interval : Duration;

 Specifies the period of time between runs. Duration'Last means the specified
 client will never run. The value of the Interval parameter is a number of
 seconds or an expression that evaluates to seconds. You can use the
 Minute, Hour, and Day constants from package !Tools.Time_Utilities,
 because they are of the Duration type.


 First_Run : Duration := 0.0;

 Specifies how soon a client runs after the Schedule procedure finishes
 executing. The value of the First_Run parameter is a number of seconds or
 an expression that evaluates to seconds. The default First_Run interval is
 0.0 seconds; that is, the client will run immediately after invocation.
 You can use the Minute, Hour, and Day constants from package
 !Tools.Time_Utilities, because they are of the Duration type. In
 addition, the Time_Utilities.Duration_Until_Next function is useful
 because it returns the number of seconds between the time of execution and
 a specified time of day. This allows the schedule to be independent of the
 time at which the Schedule procedure is executed.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Daemon.Schedule ("Ddb",86_400.0,36_000.0);

 schedules the DDB (dependency database) client to run once a day,
 beginning 10 hours from the time the command was executed.


 REFERENCES

 procedure Quiesce
 procedure Run
 Programming Tools (PT), package Time_Utilities



 @node !Commands.Daemon.Set_Access_List_Compaction

 procedure Set_Access_List_Compaction
                     (Client   : String  := "";
                      On       : Boolean := True;
                      Response : String  := "<PROFILE>");

 DESCRIPTION

 Specifies that access-list compaction should be performed by the specified
 clients.

 The clients that can perform access-list compaction are File, Ada, and
 Directory. Access-list compaction is the process of removing references to
 nonexistent access-control groups from the access lists of objects. When
 groups are removed from a machine, the entry in access lists for that
 group are set to <UNKNOWN_N>, where N is the number of the deleted group.
 The number for that group is not reclaimed until the
 Set_Access_List_Compaction procedure is run and the daemons are then run.

 Access-list compaction performs two functions:

 *  It removes all unknown entries (those that appear as <UNKNOWN_N> from
    access lists.

 *  It sets the next available space number to the lowest available number.

 For further information on groups, see package Operator. For further
 information on access-list compaction, see the introduction to this
 package.

 Enabling this feature slows a client's operation.


 PARAMETERS

 Client : String := "";

 Specifies the name of the client. The default null string specifies all
 clients. The only clients that perform access-list compaction are File,
 Ada, and Directory. When all clients are specified, only those that can
 perform access-list compaction will actually do it.


 On : Boolean := True;

 Specifies whether access-list compaction should be turned on or off.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 function Get_Access_List_Compaction
 package Operator



 @node !Commands.Daemon.Set_Consistency_Checking

 procedure Set_Consistency_Checking
                   (Client   : String  := "";
                    On       : Boolean := True;
                    Response : String  := "<PROFILE>");

 DESCRIPTION

 Specifies whether consistency checking should be turned on.

 Consistency checking performs additional work to ensure that the internal
 state of this system is correct. This operation normally is run only when
 problems are suspected.

 Enabling this feature slows a client's operation.


 PARAMETERS

 Client : String := "";

 Specifies the client that should perform consistency checking. Clients are
 listed in the introduction to this package. The default null string
 specifies all clients.


 On : Boolean := True;

 Specifies whether consistency checking should be turned on or off.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 function Get_Consistency_Checking



 @node !Commands.Daemon.Set_Log_Threshold

 procedure Set_Log_Threshold (Kind  : Log_Threshold;
                              Level : Condition_Class);

 DESCRIPTION

 Specifies a destination for log messages with a given level of severity.

 By default, Condition_Class type messages of Warning, Problem, and Fatal
 are routed to the operator console. Messages of all kinds are written into
 the stable-storage error log on disk, causing the log to be committed to
 disk.


 PARAMETERS

 Kind : Log_Threshold;

 Specifies a destination for a class of messages. The destination can be
 Console_Print, Log_To_Disk, or Commit_Disk.


 Level : Condition_Class;

 Specifies the severity level of messages by Condition_Class type, including
 Normal, Warning, Problem, and Fatal.


 EXAMPLES

 The command:

   Daemon.Set_Log_Threshold (Log_To_Disk,Normal);

 routes all messages of condition class Normal (or greater) to the error
 log.

 The command:

   Daemon.Set_Log_Threshold (Console_Print,Problem);

 routes all messages of condition classes Problem and Fatal to the operator
 console. Normal or Warning messages do not appear on the operator console.


 REFERENCES

 subtype Condition_Class
 procedure Get_Log_Threshold
 type Log_Threshold
 procedure Show_Log_Thresholds



 @node !Commands.Daemon.Set_Priority

 procedure Set_Priority  (Priority : Collection_Priority := -1);

 DESCRIPTION

 Sets the priority for disk collection on the specified volume.

 Executing this procedure while disk collection is in progress changes the
 priority of the current collection. If disk collection is not in progress
 when the command is executed, the procedure has no effect.

 The Disk client runs at different priorities in response to a number of
 stimuli, as follows:

 *  Schedule procedure: Runs at priority 6.

 *  Run procedure: Runs at priority -1.

 *  Collect procedure: Runs at specified priority.

 *  Over threshold for the disk: Starts at priority 0 and escalates based
    on the number of disks that have reached the threshold.


 PARAMETERS

 Priority : Collection_Priority := -1;

 Specifies the priority for running disk collection. Collection_Priority is
 an integer from -1 through 6. The default, -1, runs collection as a
 background activity. The value 0 ensures that disk collection takes place,
 potentially affecting system load; 6 allocates all resources for disk
 collection.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Daemon.Set_Priority (0);

 sets the priority for disk collection to 0 for all disk volumes.


 REFERENCES

 procedure Collect
 subtype Collection_Priority



 @node !Commands.Daemon.Show_Log_Thresholds

 procedure Show_Log_Thresholds;

 DESCRIPTION

 Displays current log thresholds in an Environment output window.


 EXAMPLES

 The command:

   Daemon.Show_Log_Thresholds;

 displays information, such as the following, in an Environment
 Current_Output window:

   Log Thresholds -- Console = WARNING, Logging = NORMAL, Commit = NORMAL

 This display includes the following categories of information:

 Console

 Corresponds to log threshold Console_Print; shows that messages of
 Warning, Problem, and Fatal class are routed to the operator console.

 Logging

 Corresponds to log threshold Log_To_Disk; shows that messages of all
 classes are written into the stable-storage error log on disk.

 Commit

 Corresponds to log threshold Commit_Disk; shows that messages of all
 classes are written into the stable-storage error log, causing the log to
 be committed to disk.


 REFERENCES

 subtype Condition_Class
 procedure Get_Log_Threshold
 type Log_Threshold
 procedure Show_Log_Thresholds



 @node !Commands.Daemon.Show_Snapshot_Settings

 procedure Show_Snapshot_Settings;

 DESCRIPTION

 Lists the current snapshot-message options, showing the warning-message
 interval and whether or not start and finish messages have been requested.


 EXAMPLES

 The command:

   Daemon.Show_Snapshot_Settings;

 returns the following display:

      Snapshot Settings -- Interval = 02:00.00, Start = TRUE, Finish = TRUE

 The Environment issues a snapshot warning message 2 minutes before each
 snapshot and sends warning messages at the start and finish of each
 snapshot.

 To see the interval between runs, use:

   Daemon.Status ("Snapshot");

 REFERENCES

 procedure Snapshot_Finish_Message
 procedure Snapshot_Start_Message
 procedure Snapshot_Warning_Message
 procedure Status



 @node !Commands.Daemon.Snapshot_Finish_Message

 procedure Snapshot_Finish_Message (On : Boolean := True);

 DESCRIPTION

 Tells the Environment whether or not to send a message informing users
 when a snapshot completes.


 PARAMETERS

 On : Boolean := True;

 Sends, when True, a message such as the following to users after every
 snapshot is completed:

      from SYSTEM: 02:34:34 PM;  Snapshot has completed.

 This message appears in the message window.

 When False, no finishing message is sent to users. The default is True.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Daemon.Snapshot_Finish_Message (False);

 instructs the Environment not to notify users when a snapshot is
 completed.


 REFERENCES

 procedure Show_Snapshot_Settings
 procedure Snapshot_Start_Message
 procedure Snapshot_Warning_Message
 procedure Status



 @node !Commands.Daemon.Snapshot_Start_Message

 procedure Snapshot_Start_Message (On : Boolean := True);

 DESCRIPTION

 Tells the Environment whether or not to send a message informing users
 when a snapshot begins.


 PARAMETERS

 On : Boolean := True;

 Sends, when True, a message such as the following to users as each
 snapshot begins:

      from SYSTEM: 02:31:55 PM;  Snapshot has started

 This message appears in the message window.

 When False, no starting message is sent to users. The default is True.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Daemon.Snapshot_Start_Message (False);

 instructs the Environment not to notify users when a snapshot begins.


 REFERENCES

 procedure Show_Snapshot_Settings
 procedure Snapshot_Finish_Message
 procedure Snapshot_Warning_Message
 procedure Status



 @node !Commands.Daemon.Snapshot_Warning_Message

 procedure Snapshot_Warning_Message (Interval : Duration := 120.0);

 DESCRIPTION

 Sends a warning message to users the specified number of seconds before the
 next snapshot begins.

 When the interval is set to 0.0, no warning message is sent.


 PARAMETERS

 Interval : Duration := 120.0;

 Specifies how soon, in seconds, to send a warning message such as the
 following before a snapshot begins:

      from SYSTEM: 02:29:23 PM;  Snapshot will start in 02:00.000

 This message appears in the message window.

 The default is a 2-minute interval (120.0 seconds). When the Interval
 parameter is set to 0.0, no warning message is sent.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Daemon.Snapshot_Warning_Message (300.0);

 instructs the Environment to warn users of a pending snapshot 5 minutes
 (300.0 seconds) before it is run.


 REFERENCES

 procedure Show_Snapshot_Settings
 procedure Snapshot_Finish_Message
 procedure Snapshot_Start_Message
 procedure Status



 @node !Commands.Daemon.Status

 procedure Status (Client : String := "*");

 DESCRIPTION

 Displays (in an Environment output window) information on the current
 status for the specified client.


 PARAMETERS

 Client : String := "*";

 Specifies the client for which status is requested. The default ("*") is
 the Major_Clients constant. The null string ("") displays the status of
 all clients.

 The command:

   Daemon.Status ("");

 displays the status for all clients. The display typically looks like
 this:

 Client      Next Time       Previous Time   Interval  Size    Post    Pre
 ==========  ==============  ==============  ========  ======  ====== ======
 Actions     06/08/91 11:53  06/08/91 11:23  30:00.00      55      55     55
 Ada         06/09/91 04:40  06/08/91 05:03  01/00:00    2073    2010   2425
 Ddb         06/08/91 04:15  06/08/91 04:19  01/00:00   11213   10899  10899
 Directory   06/08/91 04:30  06/08/91 04:36  01/00:00    5775    5698   6423
 Disk        06/09/91 05:00  06/08/91 06:24  01/00:00  339000  311000 351000
 File        06/08/91 04:45  06/08/91 05:14  01/00:00    1103     980   1219
 Snapshot    06/08/91 12:08  06/08/91 11:10  01:00:00

 This display includes the following categories of information:

 *  Client: The client's name.

 *  Next Time: The time of the client's next scheduled run.

 *  Previous Time: The actual time of the client's most recent previous
    run. Note that the actual time a client runs may not match the
    scheduled time; the client may run later because of system load, how
    long preceding clients run, and so on.

 *  Interval: The interval of time between scheduled runs. The format for
    expressing intervals is as follows:

    -  mm:ss.ff indicates the number of minutes, seconds, and decimal
       fractions of seconds between runs. For example, the Actions client
       runs every 30 minutes, or 30:00.00.

    -  hh:mm:ss indicates the number of hours, minutes, and seconds between
       runs. For example, a client that runs every hour would display
       01:00:00.

    -  dd/hh:mm indicates the number of days, hours, and minutes between
       runs. For example, a client that runs once a day would display
       1/00:00.

 *  Size: The current size, in pages, of the client's data structure.

 *  Post: The size, in pages, of the client's data structure after the last
    run.

 *  Pre: The size, in pages, of the client's data structure just before the
    last run.

 The command:

   Daemon.Status ("Disk");

 checks the status of the client responsible for maintaining the disk data
 structure and returns a display such as the following:

   Client  Next Time       Previous Time   Interval  Size    Post    Pre
   ======= ==============  ==============  ========  ======  ======  ======
   Disk    06/09/91 05:00  06/08/91 06:24  01/00:00  339000  311000  351000
   Vol 1   06/09/91 05:00  06/08/91 06:24  01/00:00  112000   95494  126000
   Vol 2   06/09/91 05:00  06/08/91 06:24  01/00:00   79086   77639   81287
   Vol 3   06/09/91 05:00  06/08/91 06:24  01/00:00   78126   71102   74536
   Vol 4   06/09/91 05:00  06/08/91 06:24  01/00:00   69895   67360   69532

 An asterisk before the volume number indicates that disk collection is
 running and that volume has not yet had collection run for it.


 REFERENCES

 constant Major_Clients
 procedure Show_Snapshot_Settings
 procedure Snapshot_Finish_Message
 procedure Snapshot_Start_Message
 procedure Snapshot_Warning_Message



 @node !Commands.Daemon.Threshold_Warnings

 procedure Threshold_Warnings (On : Boolean := True);

 DESCRIPTION

 Specifies whether messages to all users currently logged into the system
 should be sent when collection thresholds have been passed.


 PARAMETERS

 On : Boolean := True;

 Specifies whether messages should be sent. The default is True. False
 specifies that messages should not be sent.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 procedure Collect



 @node !Commands.Daemon.Volume

 subtype Volume is Integer range 0 .. 31;

 DESCRIPTION

 Specifies a disk drive.

 The value 0 specifies all disk drives.

 (The value 0 should not be used in functions, because functions can return
 only a single value.)


 REFERENCES

 procedure Collect



 @node !Commands.Daemon.Warning_Interval

 procedure Warning_Interval (Interval : Duration := 120.0);

 DESCRIPTION

 Sets the amount of warning time users are given before the Daily client
 runs.


 PARAMETERS

 Interval : Duration := 120.0;

 Specifies how soon, in seconds, to send a warning message before the Daily
 client runs. The default is 2 minutes (120 seconds).


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 function Get_Warning_Interval



 @node !Commands.Message

 This package contains two utilities for sending messages to the message
 window of one or more users.


 RESOURCES IN PACKAGE MESSAGE

 Sending a message to one or more specified users:    Send
 Sending a message to all users:                      Send_All


 KEY CONCEPTS FOR PACKAGE MESSAGE

 The commands in package Message can be used to send a message string to
 the message window of the specified user or users. The message window is
 the top-most window of a standard Environment terminal device. Users must
 be logged in to receive message strings.

 The commands in this package differ from (and are more limited than) those
 in the Rational Network Mail product, which is documented in the Rational
 Network Mail User's Guide and the Rational Network Mail System Manager's
 Guide.

 Information about preparing and displaying a daily message is given in the
 System Manager's Guide and in the reference entry for the
 !Commands.What.Message command in the Session and Job Management (SJM)
 book.


 @node !Commands.Message.Send

 procedure Send (Who     : String;
                 Message : String);

 DESCRIPTION

 Sends the specified message to one or more specified users.

 A specified user must be logged in to receive the message. If the user is
 not logged in, the message is lost.

 Messages appear in the message window of the specified user or users. The
 message is also displayed on the operator console.


 PARAMETERS

 Who : String;

 Specifies the username of the user who is to receive the message. Multiple
 usernames can be specified using wildcards, set notation, and indirect
 files. The naming expression must be enclosed in quotation marks.


 Message : String;

 Specifies the text of the message. The text must be enclosed in quotation
 marks.


 EXAMPLES

 Assume that user ELF enters the following command:

   Message.Send ("SJL","Are you there?");

 Then the following string appears in the message window of SJL's terminal
 device:

   From ELF: Are you there?


 @node !Commands.Message.Send_All

 procedure Send_All (Message : String);

 DESCRIPTION

 Sends the specified message to all users.

 Only users who are logged in receive the message.

 Messages appear in the message window; the message is also sent to a
 system manager logged into the operator console.


 PARAMETERS

 Message : String;

 Specifies the text of the message. The text must be enclosed in quotation
 marks.


 EXAMPLES

 Assume that ELF enters the following command:

   Message.Send_All ("Who remembers how to abort a job?");

 Then the following message is broadcast to all users who are currently
 logged in:

   From ELF: Who remembers how to abort a job?


 @node !Commands.Operator

 The commands described in this package are used primarily by system
 managers, operators, and Rational technical representatives for
 system-management tasks. All users have access to the Change_Password and
 Create_Session commands.


 RESOURCES IN PACKAGE OPERATOR

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

 Managing groups for access control:

         Add_To_Group                    Create_Group
         Delete_Group                    Display_Group
         Remove_From_Group

 Managing password policy:

         Get_Minimum_Password_Length     Get_Password_Deadline
         Get_Password_Warning            Get_User_Deadline
         Get_User_Warning                Set_Password_Policy
         Show_Password_Policy

 Managing system resources:

         Disable_Terminal                Disk_Space
         Enable_Terminal                 Force_Logoff
         Get_Login_Limit                 Internal_System_Diagnosis
         Limit_Login                     Set_System_Time
         Show_Login_Limit

 Managing user accounts:

         Change_Password                 Create_Session
         Create_User                     Delete_User

 Overriding access control:

         Enable_Privileges               Privileged_Mode

 Shutting down the system:

         Archive_On_Shutdown             Cancel_Shutdown
         Explain_Crash                   Get_Archive_On_Shutdown
         Get_Shutdown_Interval           Show_Shutdown_Settings
         Shutdown                        Shutdown_Warning


 KEY CONCEPTS FOR PACKAGE OPERATOR

 This section covers the following key concepts for package Operator:

 *  Access-control groups

 *  Operator capability

 *  Password policy

 For information on managing user accounts, shutting down an R1000, and
 managing system resources, see the System Manager's Guide.


 Access-Control Groups

 A job's access to worlds, files, Ada units, and certain operations is
 restricted by access control. Access control applies to all jobs: both
 those initiated interactively through command windows and key combinations
 and those initiated programmatically through procedure calls as a
 program executes.

 Access control is determined by an object's access-control list (ACL). An
 ACL is a list of groups that are permitted access to an object; these
 groups contain usernames. A job is permitted access to an object only if
 the username of the job's user is a member of a group listed in the
 object's ACL. Note that groups can contain only usernames--not other
 groups.

 Groups are defined either automatically by the Environment or explicitly by
 users through operations from package Operator. Group objects are stored
 in the !Machine.Groups world. Package Operator provides commands for
 creating, modifying, and deleting these group objects. Operations from
 packages Access_List and Cmvc_Access_Control grant specific types of access
 to groups. For more information on assigning access to groups, see the
 Library Management (LM) book, introduction to package Access_List, and
 the Project Management (PM) book, introduction to package
 Cmvc_Access_Control.

 The following paragraphs explain the types of access-control groups.


 Username Groups

 When a user account is created, the Environment creates a new username
 group. This group is identified by the unique username assigned to the new
 user. Username groups typically contain only one member: the username of
 the user for whom the account was created. Other usernames can be added to
 a username group through the Add_To_Group command. For example, the
 username Sandy can be added to the username group John. Now both
 usernames, Sandy and John, have access to any object that allows access to
 the username group John.

 Caution: Note that it is possible to delete username groups with the
 Delete_User command. Deleting a username group that contains current users
 will destroy access to any objects with ACLs requiring that group's
 membership.


 Operator Group

 The Environment provides a predefined group called Operator for users who
 perform system-management operations. In addition to specific access rights
 to particular files, Ada units, and worlds, all members of the Operator
 group have operator capability, which allows the execution of Environment
 commands for resource management (see "Operator Capability," below).

 The Operator group for the standard Environment contains only the user
 Operator, but other users can be added.

 The Delete_Group command cannot be used to delete predefined groups such as
 Operator and Privileged. The Delete_User command cannot be used to delete
 predefined users such as Operator.


 Privileged Group

 The Environment provides a predefined group called Privileged for users who
 execute jobs in privileged mode. Privileged mode overrides access control,
 and jobs executed in privileged mode have complete access to all
 Environment objects.

 To execute a job in privileged mode, the Enable_Privileges command must be
 included in the job before the statement that requires privileges.
 Privileged mode is automatically disabled after the job is finished.

 Although enabling privileges for a job allows access to any object, it
 does not allow you to display object images to which you normally do not
 have access. To display such an object, you must first use privileged mode
 to add your username to a group in the object's ACL.

 Members of the Privileged group can execute any Environment command in
 privileged mode, including commands that require operator capability,
 because privileged mode grants access to the
 !Machine.Operator_Capability file (see "Operator Capability," below).

 The Privileged group for the standard Environment contains the user
 Operator, but Operator can be removed, and other users can be added.


 Public and Network_Public Groups

 The Environment provides two predefined groups called Public and
 Network_Public that contain all users on an R1000. When a new username
 is created, that username is automatically added to both groups.

 Group Public can be added to the ACLs of worlds, files, or Ada units to
 permit everyone access to these objects. In open shops, all worlds, files,
 and Ada units can include group Public on their ACLs, effectively giving
 everyone access to everything on a system.

 Group Network_Public is used at sites that use Rational
 Networking--TCP/IP. Adding the Network_Public group to ACLs gives all
 usernames access to objects on other machines belonging to the same
 network.

 Although usernames are added to these groups by default, they can be
 explicitly removed from them with the Remove_From_Group command.


 User-Defined Groups

 Users with operator capability can create groups through package Operator,
 and a user can belong to more than one user-defined group.

 For example, if both John and Sandy require identical access to objects
 used by a particular project called Application, a new group can be
 created containing both John and Sandy; this group might be named
 Application_Members. Access then can be assigned directly to the group
 Application_Members.

 Users can be added to or removed from groups at any time.

 Note: Changes in a user's group membership do not become effective until
 the user logs out and logs back in again.


 Operator Capability

 Certain Environment commands can be executed only by users or jobs that
 have operator capability. These commands, usually found in packages
 Operator, Queue, and System_Backup, generally control Environment
 resources or affect jobs and sessions belonging to other users.

 All members of the Operator group automatically have operator capability
 (see "Operator Group," above). Additional users can be given operator
 capability without being added to the Operator group; this enables
 specific users to use the relevant commands without necessarily having
 access to the worlds, files, and Ada units to which the Operator group has
 access.

 To give a user operator capability, you must grant that user write access
 (W) to the file !Machine.Operator_Capability.

 All successfully executing commands from package Operator requiring
 operator capability and affecting the system state are reported in the
 !Machine.Error_Logs file, and the logged messages include the executing
 user and session, if these are other than System. This log allows a system
 manager to audit which users and what commands have altered the state of
 the system.

 Operator capability should not be confused with privileged mode, which
 enables users to override access control. Whereas privileged mode gives
 users access to objects, operator capability enables users to execute any
 of a specific set of commands.

 Note that users who can enable privileged mode can also give themselves
 operator capability by granting themselves access to the
 !Machine.Operator_Capability file. (See "Privileged Group," above.)


 Procedures Requiring Operator Capability

 In general, operator capability is required only for certain procedures
 and not for functions; it is not required for procedures that merely
 display information. The following list identifies the procedures that
 require operator capability:

 *  Package Daemon:

       Collect                       Quiesce
       Run                           Schedule
       Set_Access_List_Compaction    Set_Consistency_Checking
       Set_Priority                  Snapshot_Finish_Message
       Snapshot_Start_Message        Snapshot_Warning_Message
       Threshold_Warnings            Warning_Interval

 *  Package Job:

       Disable                       Enable
       Kill (when applied to jobs not belonging to the caller)

 *  Package Operator:

       Add_To_Group                  Archive_On_Shutdown
       Cancel_Shutdown               Create_Group
       Create_User                   Delete_Group
       Delete_User                   Disable_Terminal
       Enable_Terminal               Explain_Crash
       Force_Logoff (unless the user performing the operation is
                     the same as the user being forced off)
       Internal_System_Diagnosis     Limit_Login
       Remove_From_Group             Set_Password_Policy
       Set_System_Time               Shutdown
       Shutdown_Warning

 *  Package Queue:

       Add                           Create
       Default                       Destroy
       Disable                       Enable
       Kill_Print_Spooler            Register
       Remove                        Restart_Print_Spooler
       Unregister

 *  Package Scheduler:

       Disable                       Enable
       Set

 *  Package System_Backup:

       Backup                        Backup_Generic
    and anything that instantiates Backup_Generic, such as
    !Commands.Abbreviations.Do_Backup

 *  Package System_Utilities:

       Set_Page_Limit (when applied to jobs not belonging to the caller)

 *  Package Terminal:

       Set_Character_Size               Set_Detach_On_Disconnect
       Set_Disconnect_On_Disconnect     Set_Disconnect_On_Failed_Login
       Set_Disconnect_On_Logoff         Set_Flow_Control
       Set_Input_Rate                   Set_Log_Failed_Logins
       Set_Login_Disabled               Set_Logoff_On_Disconnect
       Set_Output_Rate                  Set_Parity
       Set_Receive_Flow_Control         Set_Receive_Xon_Xoff_Bytes
       Set_Receive_Xon_Xoff_Characters  Set_Stop_Bits
       Set_Terminal_Type                Set_Xon_Xoff_Bytes
       Set_Xon_Xoff_Characters

 *  Procedures in !Commands.System_Maintenance'Spec_View.Units:

       Accept_Tokens                 Donate_Tokens
       Repair_Directory              Show_Directory_Information
       Show_Locks                    Show_Memory_Hogs
       Show_Tasks


 Password Policy

 Using commands from package Operator, the system manager (or other users
 with operator capability) can set a systemwide policy for password length
 and expiration. By requiring users to pick passwords of sufficient length
 and change their passwords with regular frequency, such a policy ensures
 greater system security.


 Minimum Password Length

 By default, login passwords can be zero or more characters. Using the
 Set_Password_Policy command, a system manager can require that new and
 changed passwords be a minimum length. (Existing passwords are not
 affected when the policy is set.)

 Setting a minimum password length causes the Create_User and
 Change_Password commands to reject passwords that contain fewer than the
 required number of characters. For example, if a system manager wanted to
 prevent users from having null passwords, he or she can set the minimum
 password length to 1. Under this policy, new users cannot be created with
 null passwords and existing users cannot change their passwords to null.
 Typical sites require a minimum of 6 to 10 characters.


 Password Change Schedule

 By default, login passwords are valid indefinitely. Using the
 Set_Password_Policy command, a system manager can establish a change
 schedule that specifies when passwords must be changed before they expire.
 All passwords on the system, including the Operator's, are subject to the
 established change schedule. It is not possible to set separate change
 schedules for individual passwords.

 The password change schedule specifies:

 *  The warning interval--the number of days that an unchanged password can
    exist until the user is warned at login to change it.

 *  The deadline interval--the number of days that an unchanged password
    can exist before it expires. (The deadline interval includes the
    warning interval.)

 The warning and deadline intervals for a given password begin when the
 password is created. Each time the password is changed, its "clock" is
 reset and the warning and deadline intervals begin again. For example,
 assume a deadline interval of 21 days and a warning interval of 14 days.
 Then 14 days after a given user's password is created, the following
 message appears at the user's next login:

   Your password is in danger of expiring -- it should be changed.

 This warning message appears at each login for another 7 days, at which
 time the end of the deadline interval is reached. At this point, the
 following message appears when the user attempts to log in:

   Password has expired.

 When a user's password expires, he or she will not be able to log in
 without obtaining a new password. New passwords typically are obtained
 from the system manager, although any user who knows either the expired
 password or the Operator's password can set the new password (see the
 Change_Password command).

 Judgment must be used when determining a reasonable change schedule. The
 shorter the deadline interval, the more often users will have to change
 their passwords, thereby increasing system security but requiring more
 user participation. Similarly, each site must decide how much warning to
 give users before their passwords expire. The greater the difference
 between the warning and deadline intervals, the more warning users get.
 With more days of warning, passwords are less likely to expire while users
 are away on vacation or other absences; with fewer warning days, users are
 less likely to postpone changing their passwords. For many sites, a
 typical deadline interval is 60 days with a warning interval of 46 days
 (leaving 14 days during which the warning message is displayed).


 Basic Steps for Setting Password Policy

 Assume that you are the system manager and that you want to set the
 following password policy:

 *  Login passwords must be at least 6 characters long.

 *  Each login password is valid for a total of 60 days before it must be
    changed. After 46 days, the user receives a warning at each login that
    the password will expire unless it is changed (14 days of warning time
    makes allowance for users who may be on vacation or other leave of
    absence).

 You can use the following steps to establish this password policy. These
 steps apply to R1000s on which user accounts have not yet been created or
 have been created within the last 60 days (see below for a discussion of
 setting password policy without invalidating existing passwords):

 1. Put the policy into effect immediately by entering the
    Set_Password_Policy command with the appropriate values:

      Operator.Set_Password_Policy (Minimum_Length  => 6,
                                    Change_Warning  => 46,
                                    Change_Deadline => 60);

 2. Verify that the correct values were set by entering the
    Show_Password_Policy command with the default value. As a result, the
    current password policy is displayed along with the warning and
    deadline dates that now exist for your password:

      Password change warnings are issued after 46 days
      Passwords must be changed every 60 days

      User      Warning   Deadline
      ----      -------   --------
      Operator  6/14/91    6/28/91

 3. Compare the current date to the deadline date that is displayed for
    your password. If the new password policy has caused your password to
    expire--that is, your password is more than 60 days old--be sure to
    change your password before logging out.

 4. Make the policy permanent by including a call to the
    Set_Password_Policy procedure in an appropriate procedure in the
    !Machine.Initialization.Site or !Machine.Initialization.Local world.

    This step ensures that the desired password policy is reestablished
    each time the system is booted. Omitting this step causes the password
    policy to revert to the default values the next time the system is
    booted. The default values are null minimum password length with
    indefinitely long warning and deadline intervals.


 Setting Password Policy When Old Passwords Already Exist

 On an R1000 with existing user accounts, setting a password policy can
 cause older passwords to expire immediately. For example, assume that on
 6/1/91 you enter the Set_Password_Policy command to establish a 60-day
 deadline interval and 46-day warning interval, as shown in step 1 above.
 Setting this policy will invalidate any passwords that were created or
 changed more than 60 days ago. To determine whether any existing passwords
 are in fact invalidated, you can enter the following command:

   Operator.Show_Password_Policy (For_User => "@"); 

 This command displays the current policy and the warning and deadline
 dates for all user passwords:

   Password change warnings are issued after 46 days
   Passwords must be changed every 60 days

   User      Warning   Deadline
   ----      --------  --------
   Operator   7/07/91   7/21/91
   Anderson   4/12/91   4/26/91
   Chavez     6/10/91   6/24/91
   Yamada     5/14/91   5/28/91

 Note that, if the current date is 6/1/91, the deadline dates for users
 Anderson and Yamada have already passed, so neither user can currently log
 in. At this point, you have several options. If only a few passwords have
 expired, you can change them and notify each affected user of his or her
 new password. If the password policy invalidates a large number of
 passwords, you can "revalidate" them simply by resetting the password
 change schedule to remove the expiration deadline. For example, you can
 enter the following command to cause warnings to be given but not actually
 enforced:

   Operator.Set_Password_Policy
                         (Minimum_Length  => 6,
                          Change_Warning  => 46,
                          Change_Deadline => Operator.Days'Last);

 Doing this gives users with old passwords time to change them before you
 put the full password policy into effect. To decide when to enforce the
 full password policy, use the Show_Password_Policy command periodically
 to monitor the warning dates for all users. When the display shows all
 warning dates in the future, you can reenter the Set_Password_Policy
 command to set the full password policy. Make the policy permanent by
 including a call to the Set_Password_Policy procedure in an appropriate
 procedure in the !Machine.Initialization.Site or !Machine-
 .Initialization.Local world.


 If Everyone's Password Expires . . .

 If everyone's password (including the Operator's) has expired, and if no
 one is currently logged in, the system manager can use the following steps
 to recover:

 1. Obtain a unique login authorization code from the Rational Response
    Center. This authorization code will be valid only for your specific
    machine on the current date.

 2. Attempt to log in under the username Operator, entering the expired
    password at the password prompt. (If this password has been forgotten,
    refer to the "Forgotten Operator Password" subsection below for
    information about how to change the operator password to a new
    password.)

    Another prompt appears requesting the authorization code obtained in
    step 1. For example:

      Enter user name: operator
      Enter password: <old password>

      Operator password has expired. Call Rational for override
      authorization code.

 3. Enter the authorization code at the prompt. Note that it is
    case-sensitive (all uppercase). For example:

      Enter authorization code: 1FF79C650C12E8B

 4. When you are logged in, use the Change_Password command to obtain a new
    password.


 Forgotten Operator Password

 If the password for the special username Operator has been forgotten, the
 system manager must:

 1. Contact the Rational Response Center and obtain the proper
    authorization code. Be prepared to give the cluster ID for your R1000
    to the Response Center. Note that the authorization code obtained from
    the Response Center will be valid until midnight of the day it is
    obtained.

 2. Follow the Response Center instructions to use the following command
    from the operator's console (authorization code is uppercase only):

      Op.Change_Password ("Operator", "AUTH. CODE","new password")

 You will then be able to log into the system as Operator with the new
 password.


 @node !Commands.Operator.Add_To_Group

 procedure Add_To_Group (User     : String := ">>USER NAME<<";
                         Group    : String := ">>GROUP NAME<<";
                         Response : String := "<PROFILE>");

 DESCRIPTION

 Adds one or more specified usernames to one or more groups.

 Note that identities are established at login. Adding or removing a user
 from a group will not be effective until the user's next login.

 To see if the username is already a member of the group, you can use the
 Display_Group command. The username and group name must exist before
 this command is executed.


 PARAMETERS

 User : String := ">>USER NAME<<";

 Specifies one or more usernames to add to the specified group. The default
 parameter placeholder ">>USER NAME<<" must be replaced or an error will
 result. The username must exist before this command is executed.

 Multiple names can be specified using wildcards, set notation, and indirect
 files.

 When an indirect file containing a list of usernames is specified as the
 ">>USER NAME<<" parameter value, the usernames listed in the indirect file
 are automatically resolved to their proper context. This means that a
 system manager does not have to specify the fully qualified pathname of
 each entry in the file.


 Group : String := ">>GROUP NAME<<";

 Specifies one or more group names to which the username should be added.
 The default parameter placeholder ">>GROUP NAME<<" must be replaced or an
 error will result. The specified group names must exist before this command
 is executed.

 Multiple groups can be specified using wildcards, set notation, and
 indirect files. The default is the selection, whether or not the cursor is
 in the selection.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 ERRORS

 If a specified username or group does not exist, the command generates an
 error message.


 EXAMPLES

 The command:

   Operator.Add_To_Group (User  => "Bill",
                          Group => "Engineering");

 adds username Bill to a group called Engineering.

 Both username Bill and group Engineering must exist before this command is
 executed. Bill must log out and log back in again for his membership in
 group Engineering to be in effect.

 The command:

   Operator.Add_To_Group (User  =>"[Phil,Anderson]",
                          Group => "Engineering");

 adds usernames Phil and Anderson to a group called Engineering.

 Usernames Phil and Anderson and group Engineering must exist before this
 command is executed. Phil and Anderson must log out and log back in
 again for their membership in group Engineering to be in effect.


 REFERENCES

 procedure Create_Group
 procedure Create_User
 procedure Delete_Group
 procedure Display_Group
 procedure Remove_From_Group
 Library Management (LM), package Access_List



 @node !Commands.Operator.Archive_On_Shutdown

 procedure Archive_On_Shutdown (On : Boolean := True);

 DESCRIPTION

 Causes certain data structures to be archived in a
 representation-independent form whenever the system is shut down.

 More specifically, this command stores the internal state of the object
 managers. Object managers include Actions, Ada, Archived_Code,
 Code_Segment, Configuration, DDB, Directory, File, Group, Link,
 Null_Device, Pipe, Program_Library, Session, Tape, Terminal, and User.

 When these data structures are archived in representation-independent form,
 they can be restored even if the system is booted with a different release
 of the Environment. (The object-manager state of one release differs from
 and is incompatible with that of another release.)

 Archiving increases the time it takes for the system to shut down and
 reboot, so archiving is recommended only when required by Rational
 technical representatives for installing a new software release.


 PARAMETERS

 On : Boolean := True;

 Specifies, when True, that archiving is included in the system shutdown
 process. The default is True.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 REFERENCES

 function Get_Archive_On_Shutdown
 procedure Show_Shutdown_Settings
 procedure Shutdown



 @node !Commands.Operator.Cancel_Shutdown

 procedure Cancel_Shutdown;

 DESCRIPTION

 Cancels a system shutdown initiated by the Shutdown command.

 This command can be entered at any time during the interval before the
 actual shutdown takes place. When this command is promoted, messages are
 sent to users that shutdown is canceled.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 REFERENCES

 function Get_Shutdown_Interval
 procedure Show_Shutdown_Settings
 procedure Shutdown
 procedure Shutdown_Warning



 @node !Commands.Operator.Change_Password

 procedure Change_Password
                       (User         : String := ">>USER NAME<<";
                        Old_Password : String := "";
                        New_Password : String := "";
                        Response     : String := "<PROFILE>");

 DESCRIPTION

 Changes the specified user's old password to the specified new password.

 The new password must be different from the old password. If the old
 password has been forgotten, the Operator's password can be used in its
 place. Also, after changing your password, you must update any encrypted
 entries in your remote-passwords files, using the Remote_Passwords.Update
 command.

 The specified new password is subject to the current password policy, if
 one has been set (see the Set_Password_Policy command). In particular, if
 the current password policy requires a minimum character length, the
 New_Password value will be rejected if it is too short.


 PARAMETERS

 User : String := ">>USER NAME<<";

 Specifies the name of the user whose password is to be changed. The default
 parameter placeholder ">>USER NAME<<" must be replaced or an error will
 result.


 Old_Password : String := "";

 Specifies the password to be changed. If the old password is not known, the
 Operator's password can be used (that is, the password for the username
 Operator). The default is the null string--in other words, no password.

 Note: If the old password has expired because of the current password
 policy, it can still be specified.


 New_Password : String := "";

 Specifies the new password. The new password must be different from the old
 password. The new password is subject to the minimum password length set
 by the current password policy. The default is the null string--in other
 words, no password.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 ERRORS

 An error is generated if the username is not specified or if the new
 password is identical to the old password.


 EXAMPLES

 The command:

   Operator.Change_Password ("Anderson","Hello","Greetings");

 changes the password for user Anderson from "hello" to "greetings."


 REFERENCES

 function Get_Minimum_Password_Length
 function Get_Password_Deadline
 function Get_Password_Warning
 function Get_User_Deadline
 function Get_User_Warning
 procedure Set_Password_Policy
 procedure Show_Password_Policy



 @node !Commands.Operator.Create_Group

 procedure Create_Group (Group    : String := ">>GROUP NAME<<";
                         Response : String := "<PROFILE>");

 DESCRIPTION

 Creates a new group with the specified name.

 The group cannot already exist. When created, the group has no members.
 Members can be added with the Add_To_Group command.

 A maximum of 1,000 group names is allowed per system. Once this maximum
 has been reached, no further group names can be added. An error message is
 issued if this command is executed after the system has reached the
 maximum allowable number of groups.

 Groups that are no longer needed can be removed with the Delete_Group com-
 mand (use Delete_User to remove username groups). Once the limit has been
 reached, however, access-list compaction must be run before you can create
 new groups. See the introduction to package Daemon for further information
 on access-list compaction.


 PARAMETERS

 Group : String := ">>GROUP NAME<<";

 Specifies the name of the group to be created. The default parameter
 placeholder ">>GROUP NAME<<" must be replaced or an error will result.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 ERRORS

 An error message is issued if this command is executed after the system
 has reached the maximum allowable number of groups.


 EXAMPLES

 The command:

   Operator.Create_Group (Group => "Ada_1_Group");

 creates a new group called Ada_1_Group. New members can be added to the
 group with the Add_To_Group command.


 REFERENCES

 procedure Add_To_Group
 procedure Delete_Group
 procedure Display_Group
 procedure Remove_From_Group
 package Daemon, introduction
 Library Management (LM), package Access_List



 @node !Commands.Operator.Create_Session

 procedure Create_Session (User     : String := ">>USER NAME<<";
                           Session  : String := ">>SESSION NAME<<";
                           Response : String := "<PROFILE>");

 DESCRIPTION

 Creates another session for the specified user.

 Sessions are created as necessary when a user logs into the system. The
 Environment creates the session and manages it for the user. One
 terminal port is assigned to each active session. A single user can have
 more than one active session by logging into the system from more than one
 terminal port and providing a unique session name for each login.

 The Create_Session command allows the system manager or a user to create a
 session for a user without actually logging into the session.


 PARAMETERS

 User : String := ">>USER NAME<<";

 Specifies the name of the user for whom a new session is to be added. The
 default parameter placeholder ">>USER NAME<<" must be replaced or an error
 will result.


 Session : String := ">>SESSION NAME<<";

 Specifies the name to give the new session. The session name must be a
 legal Ada identifier, and no other object of this name should exist in the
 user's home library (!Users.User_Name). The default parameter placeholder
 ">>SESSION NAME<<" must be replaced or an error will result.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 EXAMPLES

 The command:

   Operator.Create_Session ("Anderson","Maintenance");

 creates a new session called Maintenance for user Anderson.


 REFERENCES

 procedure Create_User



 @node !Commands.Operator.Create_User

 procedure Create_User (User     : String  := ">>USER NAME<<";
                        Password : String  := "";
                        Volume   : Natural := 0;
                        Response : String  := "<PROFILE>");

 DESCRIPTION

 Opens an account for the specified user.

 This command creates a username in !Machine.Users. In addition, the
 command creates the world !Users.User_Name, if such a world does not
 already exist. The command also creates a default session, S_1, for the
 username. By default, the username is made a member of groups Public and
 Network_Public.

 A group with the name specified by the User parameter is created and the
 new user is added to this group. Thus, each user has his or her own group
 with at least that user as a member.

 When a new username is created, the access-control list (ACL) for that
 user's world is formed by concatenating the contents of
 !Machine.User_Acl_Suffix and Name=> RCOD, where Name is the group name for
 the newly created username. Similarly, the default ACL for the world is
 formed by concatenating the contents of !Machine.User_Default_Acl_Suffix
 with Name=>RW, where Name is the group name for the newly created
 username. (See the Library Management (LM) book for more information on
 access-control lists and default access-control lists.)

 Links from !Model.R1000 are copied into the new user's home world.

 A new account can be assigned a temporary password. This password is subject
 to the current password policy, if one has been set (see the
 Set_Password_Policy command). In particular, if the current password
 policy requires a minimum character length, the Password value will be
 rejected if it is too short. The user can log in with the temporary
 password and then use the Change_Password command to obtain a secret
 password.


 PARAMETERS

 User : String := ">>USER NAME<<";

 Specifies the username. The name must be a legal Ada simple name and must
 be unique. The default parameter placeholder ">>USER NAME<<" must be
 replaced or an error will result.


 Password : String := "";

 Specifies the initial password. The password can be any arbitrary string.
 This password is subject to the minimum password length set by the
 current password policy. The default is the null string--in other words,
 no password.


 Volume : Natural := 0;

 Specifies the volume in which the user's home world will reside. The
 default, 0, lets the Environment choose the volume that has the most
 available space.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 ERRORS

 If the specified user already exists, an error message is generated.

 A maximum of 1,000 group names is allowed per system. Once this maximum
 has been reached, no further group names can be added. An error message is
 issued if this command is executed after the system has reached the
 maximum allowable number of groups.

 Groups that are no longer needed can be removed with the Delete_Group com-
 mand (use Delete_User for username groups), but deleting groups does not
 make it possible to create new groups once the limit has been reached.
 Access-list compaction must be run to make it possible to create new
 groups. See the introduction to package Daemon for further information
 on access-list compaction.


 EXAMPLES

 The command:

   Operator.Create_User ("Anderson","Andersonnew");

 creates an account for user Anderson on a volume selected by the
 Environment. It assigns password Andersonnew to the account. It also
 creates a home world for the user in !Users.Anderson, sets up the links
 for the world, sets the ACL and default ACL for the world, makes
 Anderson a member of groups Public and Network_Public, creates a group
 called Anderson, and adds the Anderson username to group Anderson.


 REFERENCES

 procedure Add_To_Group
 procedure Change_Password
 procedure Create_Session
 procedure Set_Password_Policy
 procedure Show_Password_Policy
 package Daemon, introduction
 Library Management (LM), package Access_List



 @node !Commands.Operator.Days

 subtype Days is Positive;

 DESCRIPTION

 Defines a type that represents a number of days in a password change
 schedule (see the Set_Password_Policy procedure).


 REFERENCES

 procedure Change_Password
 procedure Set_Password_Policy
 procedure Show_Password_Policy



 @node !Commands.Operator.Delete_Group

 procedure Delete_Group (Group    : String := ">>GROUP NAME<<";
                         Response : String := "<PROFILE>");

 DESCRIPTION

 Deletes the group with the specified name.

 ACL entries that refer to a deleted group are reclaimed during the next
 access-list compaction. See package Daemon for further information on
 access-list compaction.

 A maximum of 1,000 user-created group names is allowed. Once this maximum
 is reached, group names can no longer be added. Deleting groups does not
 make it possible to create new groups once the limit has been reached.
 Access-list compaction must be run to make it possible to create new
 groups. See the introduction to package Daemon for further information
 on access-list compaction.


 PARAMETERS

 Group : String := ">>GROUP NAME<<";

 Specifies the name of the group to be deleted. The default parameter
 placeholder ">>GROUP NAME<<" must be replaced or an error will result.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.

 The following kinds of groups cannot be deleted using this command:

 *  Predefined groups

    These include the Network, Network_Public, Operator, and Privileged
    groups.

 *  Groups that have the same names as existing usernames

    When you execute the Delete_User command, it removes the group
    associated with that user.


 EXAMPLES

 The following command deletes a group called Ada_1_Group:

   Operator.Delete_Group (Group => "Ada_1_Group");

 REFERENCES

 procedure Add_To_Group
 procedure Create_Group
 procedure Delete_User
 procedure Display_Group
 procedure Remove_From_Group
 package Daemon, introduction
 Library Management (LM), package Access_List



 @node !Commands.Operator.Delete_User

 procedure Delete_User (User     : String := ">>USER NAME<<";
                        Response : String := "<PROFILE>");

 DESCRIPTION

 Disables login for the specified user but preserves the user's home world.

 This command also deletes the user's entry from the !Machine.Users world
 and deletes the user's default session, S_1.

 The user's home world can be deleted using commands in package !Commands-
 .Library--for example:

   Library.Destroy ("!Users.User_Name??");

 Make sure that the user is logged out before disabling the user's account.


 PARAMETERS

 User : String := ">>USER NAME<<";

 Specifies the username of the account to be disabled. The default parameter
 placeholder ">>USER NAME<<" must be replaced or an error will result.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.

 The user Operator cannot be deleted with this command.


 ERRORS

 This command fails if executed while the user is logged in.


 EXAMPLES

 The command:

   Operator.Delete_User ("Anderson");

 deletes the account for user Anderson and disables logins under Anderson's
 username. The world !Users.Anderson is preserved.


 REFERENCES

 procedure Create_User
 procedure Delete_Group
 procedure Display_Group
 procedure Remove_From_Group
 package Daemon, introduction
 Library Management (LM), package Access_List



 @node !Commands.Operator.Disable_Terminal

 procedure Disable_Terminal
                        (Physical_Line : Terminal.Port;
                         Response      : String := "<PROFILE>");

 DESCRIPTION

 Disables a previously enabled port for login.

 You can also use the Terminal.Set_Login_Disabled command to prevent the
 Enable_Terminal command from reenabling the port for login.

 If the line is in use, the command will not take effect until the user
 logs out.


 PARAMETERS

 Physical_Line : Terminal.Port;

 Specifies the terminal port to be disabled. This is a number from 0 through
 255.

 On earlier models of the R1000 (Series 100 and 200), ports 16-31 or 16-47
 are RS232 ports, depending on the number of installed RS232 panels. On the
 Series 300 or Series 400 systems, port 16 is the only RS232 port.

 On later models of the R1000 (Series 300 or Series 400), ports 224-255 are
 Telnet ports. Series 200 systems can also have Telnet ports in the range
 224-255 if Rational Networking--TCP/IP has been installed.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 EXAMPLES

 The following command disables port 249:

   Operator.Disable_Terminal (249);
    

 REFERENCES

 procedure Enable_Terminal
 procedure Queue.Devices
 procedure Queue.Disable
 procedure Queue.Enable
 procedure Queue.Remove
 procedure Queue.Unregister
 function System_Utilities.Enabled
 function System_Utilities.Login_Disabled
 package Terminal, introduction
 subtype Terminal.Port
 procedure Terminal.Set_Login_Disabled
 procedure Terminal.Settings



 @node !Commands.Operator.Disk_Space

 procedure Disk_Space;

 DESCRIPTION

 Displays disk data.


 EXAMPLES

 The command:

   Operator.Disk_Space;

 returns a display such as the following:

   Volume  Capacity  Available   Used   % Free
   ======  ========  =========  ======  ======
   1        369120     284196    84924    76
   2        391680     229239   162441    58
   3        391680     274570   117110    70
   4        391680     282619   118661    70

   Total   1553760    1070624   483136    68

 Volume indicates the disk drive. Capacity and Available describe disk
 space in terms of pages of 1 Kb each. Used describes the amount of disk
 space used in terms of pages of 1 Kb each. % Free specifies the percentage
 of disk space that is still unused.

 The bottom row describes totals for all volumes.


 REFERENCES

 procedure Daemon.Collect
 procedure Daemon.Get_Size



 @node !Commands.Operator.Display_Group

 procedure Display_Group (Group    : String := ">>GROUP NAME<<";
                          Response : String := "<PROFILE>");

 DESCRIPTION

 Displays the usernames that are current members of the specified group on
 Io.Current_Output.

 If there is a user with the specified name, the groups of which the user is
 a member are also displayed.


 PARAMETERS

 Group : String := ">>GROUP NAME<<";

 Specifies the name of the group. The default parameter placeholder ">>GROUP
 NAME<<" must be replaced or an error will result.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 EXAMPLES

 The command:

   Operator.Display_Group (Group => "Public");

 results in the following display:

   Contents of group "public"
   ==========================
       user BILL
       user JLS
       user GZC
       user JIM
       user JMK
       user PUBLIC
       user SMP

   User "public" is a member of
   ============================
      group PUBLIC
   

 REFERENCES

 Library Management (LM), procedure Access_List.Default_Display
 Library Management (LM), procedure Access_List.Display



 @node !Commands.Operator.Enable_Privileges

 procedure Enable_Privileges (Enable : Boolean := True);

 DESCRIPTION

 Specifies that privileged mode should be enabled or disabled for the
 current job.

 There is no effect on other jobs for that user or session, current or
 future.

 Jobs executing in privileged mode have complete access to all Environment
 objects.

 For this command to execute successfully, the username must be a member of
 group Privileged. In general, privileged mode should not be enabled unless
 necessary to avoid accidentally doing something that normally would be
 restricted by access control.

 When privileged mode is enabled, all tasks in that job become privileged.
 Execution of the command does not result in any output indicating that
 the username is now executing under privileged mode. Jobs initiated from
 a job with privileges enabled do not become privileged.

 Privileged mode is enabled only for the duration of the job that called
 it. Therefore, it is not possible to enable it permanently for an entire
 session.


 PARAMETERS

 Enable : Boolean := True;

 Specifies, when True, that privileged mode should be enabled for the
 current username and session. When False, this parameter specifies that
 privileged mode should be disabled. Thus, privileged mode can be enabled,
 disabled, and enabled again within the same job, if desired.


 RESTRICTIONS

 If the job is not a member of group Privileged, this command has no
 effect.


 REFERENCES

 "Privileged Group," introduction to this package
 Library Management (LM), package Access_List



 @node !Commands.Operator.Enable_Terminal

 procedure Enable_Terminal (Physical_Line : Terminal.Port;
                            Response      : String := "<PROFILE>");

 DESCRIPTION

 Enables the specified line for Environment login.

 This command fails if the Login_Disabled option has been disabled by the
 Terminal.Set_Login_Disabled command.


 PARAMETERS

 Physical_Line : Terminal.Port;

 Specifies the terminal port to enable for login; Terminal.Port is a number
 from 0 through 255.

 On earlier models of the R1000 (Series 100 and 200), ports 16-31 or 16-47
 are RS232 ports, depending on the number of installed RS232 panels. On the
 Series 300 or Series 400 systems, port 16 is the only RS232 port.

 On later models of the R1000 (Series 300 or Series 400), ports 224-255 are
 Telnet ports. Series 200 systems can also have Telnet ports in the range
 224-255 if Rational Networking--TCP/IP has been installed.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 EXAMPLES

 The following command enables port 249:

   Operator.Enable_Terminal (249);
    

 REFERENCES

 procedure Disable_Terminal
 procedure Queue.Add
 procedure Queue.Devices
 procedure Queue.Disable
 procedure Queue.Enable
 procedure Queue.Register
 function System_Utilities.Enabled
 function System_Utilities.Login_Disabled
 package Terminal, introduction
 subtype Terminal.Port
 procedure Terminal.Set_Login_Disabled
 procedure Terminal.Settings



 @node !Commands.Operator.Explain_Crash

 procedure Explain_Crash;

 DESCRIPTION

 Allows an operator to specify the cause and an explanation for a shutdown
 through current input.

 The cause and explanation are entered in the machine's error log. This
 command is for documenting system crashes or other service interruptions.
 It is an alternative to the corresponding Shutdown command, which
 prompts for a reason and an explanation.

 Input to this command is terminated with End_Of_Input.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.



 @node !Commands.Operator.Force_Logoff

 procedure Force_Logoff
               (Physical_Line  : Terminal.Port;
                Commit_Buffers : Boolean := True;
                Response       : String  := "<PROFILE>");

 DESCRIPTION

 Terminates any session active on the specified line.

 Uncommitted changes to images are saved if the Commit_Buffers parameter is
 True. The user's background jobs (if any) continue to run, and any
 foreground jobs that do not require interactive input are put in the
 background. Foreground jobs that attempt interactive input are killed.


 PARAMETERS

 Physical_Line : Terminal.Port;

 Specifies that the terminal port is a number from 0 through 255. You can
 determine which port by executing the !Commands.What.Users command.


 Commit_Buffers : Boolean := True;

 Specifies whether uncommitted changes the user has made to any images will
 be committed. When True (the default), the changes are saved.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability, unless the user is logging off one of the user's
 own sessions.


 EXAMPLES

 The command:

   Operator.Force_Logoff (249);

 logs off the user currently on port 249. Any uncommitted changes to images
 are saved.



 @node !Commands.Operator.Get_Archive_On_Shutdown

 function Get_Archive_On_Shutdown return Boolean;

 DESCRIPTION

 Returns a Boolean indicating whether archiving on shutdown has been
 enabled by the Archive_On_Shutdown command.


 PARAMETERS

 return Boolean;

 Specifies, when True, that system shutdown archives object managers.


 REFERENCES

 procedure Archive_On_Shutdown



 @node !Commands.Operator.Get_Login_Limit

 function Get_Login_Limit return Positive;

 DESCRIPTION

 Returns the maximum number of users that can be logged in at one time on a
 machine.

 The maximum number is set by the Limit_Login command.


 PARAMETERS

 return Positive;

 Returns the number of concurrent logins.


 REFERENCES

 procedure Limit_Login



 @node !Commands.Operator.Get_Minimum_Password_Length

 function Get_Minimum_Password_Length return Natural;

 DESCRIPTION

 Returns the minimum number of characters required in a valid password.

 This value is set by the Set_Password_Policy command.


 PARAMETERS

 return Natural;

 Returns the minimum number of characters required in a valid password.


 REFERENCES

 procedure Set_Password_Policy



 @node !Commands.Operator.Get_Password_Deadline

 function Get_Password_Deadline return Days;

 DESCRIPTION

 Returns the number of days that an unchanged password can exist before it
 expires.

 This value is the deadline interval of the current password change
 schedule, which is set by the Set_Password_Policy command.


 PARAMETERS

 return Days;

 Returns the number of days that an unchanged password can exist before it
 expires.


 REFERENCES

 procedure Set_Password_Policy



 @node !Commands.Operator.Get_Password_Warning

 function Get_Password_Warning return Days;

 DESCRIPTION

 Returns the number of days that an unchanged password can exist before the
 user is warned at login to change it.

 This value is the warning interval of the current password change
 schedule, which is set by the Set_Password_Policy command.


 PARAMETERS

 return Days;

 Returns the number of days that an unchanged password can exist before the
 user is warned at login to change it.


 REFERENCES

 procedure Set_Password_Policy



 @node !Commands.Operator.Get_Shutdown_Interval

 function Get_Shutdown_Interval return Duration;

 DESCRIPTION

 Returns the current interval that is used by the Shutdown command.

 The interval is set by the Shutdown_Warning command.


 PARAMETERS

 return Duration;

 Returns the number of seconds between entering the Shutdown command and
 the actual shutting down of the system.


 REFERENCES

 procedure Shutdown
 procedure Shutdown_Warning



 @node !Commands.Operator.Get_User_Deadline

 function Get_User_Deadline
             (For_User : String := System_Utilities.User_Name)
                                                return String;

 DESCRIPTION

 Returns the image of the date (MM/DD/YY) on which the specified user's
 current password is scheduled to expire.

 The value returned by this function can be passed to commands in package
 Time_Utilities to obtain a numeric value.


 PARAMETERS

 For_User : String := System_Utilities.User_Name;

 Specifies the name of the user whose password deadline date is to be
 returned. The default value is the user executing the command.


 return String;

 Returns the image of the date (MM/DD/YY) on which the specified user's
 current password is scheduled to expire.


 REFERENCES

 procedure Set_Password_Policy
 procedure Show_Password_Policy



 @node !Commands.Operator.Get_User_Warning

 function Get_User_Warning
             (For_User : String := System_Utilities.User_Name)
                                                return String;

 DESCRIPTION

 Returns the image of the date (MM/DD/YY) on which the specified user will
 start being warned to change his or her password.

 The value returned by this function can be passed to commands in package
 Time_Utilities to obtain a numeric value.


 PARAMETERS

 For_User : String := System_Utilities.User_Name;

 Specifies the name of the user whose password warning date is to be
 returned. The default value is the user executing the command.


 return String;

 Returns the image of the date (MM/DD/YY) on which the specified user will
 start being warned to change his or her password.


 REFERENCES

 procedure Set_Password_Policy
 procedure Show_Password_Policy



 @node !Commands.Operator.Internal_System_Diagnosis

 procedure Internal_System_Diagnosis;

 DESCRIPTION

 Runs the Environment Elaborator Database (EEDB) from an Environment window
 rather than the operator console.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.



 @node !Commands.Operator.Limit_Login

 procedure Limit_Login (Sessions : Positive := Positive'Last);

 DESCRIPTION

 Sets a limit on the number of concurrent user logins for a machine.


 PARAMETERS

 Sessions : Positive := Positive'Last;

 Specifies the maximum number of logins. The default is Positive'Last.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 EXAMPLES

 The following command limits the number of login sessions to 16:

   Operator.Limit_Login (16);


 @node !Commands.Operator.Privileged_Mode

 function Privileged_Mode return Boolean;

 DESCRIPTION

 Returns a Boolean indicating whether privileged mode is enabled for the
 calling job.


 PARAMETERS

 return Boolean;

 Returns True if privileged mode is enabled, or False if it is disabled,
 for the calling job.



 @node !Commands.Operator.Remove_From_Group

 procedure Remove_From_Group
                     (User     : String := ">>USER NAME<<";
                      Group    : String := ">>GROUP NAME<<";
                      Response : String := "<PROFILE>");

 DESCRIPTION

 Removes one or more usernames from one or more groups.

 To determine whether a username is a member of the group before removing
 it, use the Display_Group command.

 Note that identities are established at login. Removing a user from a
 group will not be effective until the user's next login.


 PARAMETERS

 User : String := ">>USER NAME<<";

 Specifies one or more usernames from one or more groups. The default
 parameter placeholder ">>USER NAME<<" must be replaced or an error will
 result.

 Multiple names can be specified using wildcards, set notation, and indirect
 files.

 When an indirect file containing a list of usernames is specified as the
 ">>USER NAME<<" parameter value, the usernames listed in the indirect file
 are automatically resolved to their proper context. This means that a
 system manager does not have to specify the fully qualified pathname of
 each entry in the file.


 Group : String := ">>GROUP NAME<<";

 Specifies one or more group names from which the username should be
 removed. The default parameter placeholder ">>GROUP NAME<<" must be
 replaced or an error will result. The specified group names must exist
 before this command is executed.

 Multiple groups can be specified using wildcards, set notation, and
 indirect files. The default is the selection, whether or not the cursor is
 in the selection.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.

 This command cannot be used to remove users from their own username
 groups.


 EXAMPLES

 The command:

   Operator.Remove_From_Group (User => "Bill",Group =>
                                              "Engineering");

 removes username Bill from the group called Engineering.


 REFERENCES

 procedure Add_To_Group
 procedure Create_Group
 procedure Create_User
 procedure Display_Group



 @node !Commands.Operator.Set_Password_Policy

 procedure Set_Password_Policy
              (Minimum_Length  : Natural := 0;
               Change_Warning  : Days    := Operator.Days'Last;
               Change_Deadline : Days    := Operator.Days'Last);

 DESCRIPTION

 Sets the systemwide policy for password expiration and length.

 By requiring users to pick passwords of sufficient length and to change
 their passwords with regular frequency, such a policy ensures greater
 system security.

 This command allows you to set a minimum password length, which causes the
 Create_User and Change_Password commands to reject passwords that contain
 fewer than the required number of characters.

 This command also allows you to set a password change schedule, which
 specifies:

 *  The warning interval--the number of days that an unchanged password can
    exist before the user is warned at login to change it.

 *  The deadline interval--the number of days that an unchanged password
    can exist before it expires. (The deadline interval includes the
    warning interval.)

 The warning and deadline intervals for a given password begin when the
 password is created. Each time the password is changed, its "clock" is
 reset and the warning and deadline intervals begin again. For a full
 discussion of password change schedules, see the introduction to this
 package.

 Executing this command puts the specified password policy into effect
 immediately. However, the policy will revert to its default values the
 next time the R1000 boots, unless this command is called during machine
 initialization. It is recommended that you test the desired policy
 before putting it into your initialization procedure. In particular, you
 can set the policy and then use the Show_Password_Policy command to
 ensure that you have not caused the Operator's (or other users') passwords
 to expire immediately.


 PARAMETERS

 Minimum_Length : Natural := 0;

 Specifies the minimum acceptable length for a password. The default, 0,
 allows a user to have no password. Typical values for ensuring security
 are 6 to 10 characters.


 Change_Warning : Days := Operator.Days'Last;

 Specifies the warning interval--the number of days that an unchanged
 password can exist before the user is warned at login to change it. The
 warning interval for a given password begins on the day the password was
 created or last changed. The warning interval ends at midnight after the
 specified number of days. At this point, the user receives a warning
 message each time he or she logs in before the password expires. (Thus,
 the number of days of warning is determined by subtracting the value of
 the Change_Warning parameter from the value of the Change_Deadline
 parameter.)


 Change_Deadline : Days := Operator.Days'Last;

 Specifies the deadline interval--the number of days that an unchanged
 password can exist before it expires. The deadline interval for a given
 password begins on the same day as the warning interval--namely, the day
 the password was created or last changed. The deadline interval ends at
 midnight after the specified number of days. When a user's password
 expires, he or she will not be able to log in without obtaining a new
 password. New passwords typically are obtained from the system manager,
 although any user who knows either the expired password or
 the Operator's password can set the new password (see the Change_Password
 command).


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 REFERENCES

 procedure Change_Password
 procedure Create_User
 procedure Show_Password_Policy



 @node !Commands.Operator.Set_System_Time

 procedure Set_System_Time (To_Be    : String := ">>TIME<<";
                            Response : String := "<PROFILE>");

 DESCRIPTION

 Resets the system clock--for example, for changing to or from
 daylight-saving time.

 Because the system clock has an independent power supply (a battery),
 there is no need to reset the clock if the system is powered down.


 PARAMETERS

 To_Be : String := ">>TIME<<";

 Specifies a date, time, or combination of date and time expressed in one of
 the formats listed below. The To_Be parameter consists of 2 through 6
 two-digit numbers delimited by nonnumeric characters. The default
 parameter placeholder ">>TIME<<" must be replaced or an error will result.

 In general, the numbers can be interpreted, because each component of a
 date or time has its own range (for example, 85 is always interpreted as a
 year, because it cannot be anything else).

 In the following examples of allowable times, YY expresses a year, MM
 expresses a month, DD expresses a day, HH expresses an hour, mm expresses
 minutes, and SS expresses seconds:

                  YY/MM/DD HH:mm:SS      MM/DD HH:mm:SS
                  MM/DD/YY HH:mm:SS      MM/DD HH:mm
                  MM/DD/19YY HH:mm:SS    YY/MM/DD
                  YY/MM/DD HH:mm         MM/DD/YY
                  MM/DD/YY HH:mm         HH:mm:SS
                                         HH:mm

 Other allowable time and date formats are described in the Programming
 Tools (PT) book, Time_Utilities.Time_Format and Time_Utilities.Date_Format
 types.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 EXAMPLES

 The command:

   Operator.Set_System_Time ("15:00");

 sets the time to 3:00 P.M. today.

 The command:

   Operator.Set_System_Time ("11/10/91");

 changes the date to November 10, 1991, without changing the time.



 @node !Commands.Operator.Show_Login_Limit

 procedure Show_Login_Limit;

 DESCRIPTION

 Displays the maximum number of concurrent logins on the current output.

 The maximum number of logins can be set by the Limit_Login command.


 EXAMPLES

 The command:

   Operator.Show_Login_Limit;

 displays the following when the login limit is 16:

   It is currently possible for 16 users to be logged in
         

 REFERENCES

 procedure Limit_Login



 @node !Commands.Operator.Show_Password_Policy

 procedure Show_Password_Policy
              (For_User : String := System_Utilities.User_Name);

 DESCRIPTION

 Displays the current password policy, along with the warning and deadline
 dates for the specified user's password.

 The dates are given in the form MM/DD/YY. The warning date is the date on
 which the user will first be notified to change his or her password. The
 deadline date is the date on which the user's unchanged password will
 expire.

 It is recommended that you use this command after setting a new password
 change schedule to determine whether the new schedule has invalidated any
 existing passwords.


 PARAMETERS

 For_User : String := System_Utilities.User_Name;

 Specifies the users for which warning and deadline dates are to be
 displayed. Wildcards can be used to specify more than one user. For
 example, "@" specifies all users on the system. If no password change
 schedule has been set, the For_User parameter is ignored. The default
 value is the user executing the command.


 EXAMPLES

 Assume that user Anderson wants to know the current password policy and
 how it affects his password. To do this, he enters the following command:

   Operator.Show_Password_Policy;

 As a result, a report like the following is displayed:

   Password change warnings are issued after 46 days
   Passwords must be changed every 60 days

   User      Warning   Deadline
   ----      -------   --------
   Anderson  8/12/91    8/26/91
   

 REFERENCES

 procedure Set_Password_Policy



 @node !Commands.Operator.Show_Shutdown_Settings

 procedure Show_Shutdown_Settings;

 DESCRIPTION

 Displays the shutdown settings on the current output.

 Shutdown settings are set by the Shutdown_Warning and Archive_On_Shutdown
 commands.


 EXAMPLES

 The command:

   Operator.Show_Shutdown_Settings;

 produces a message such as the following on the current output:

   Shutdown Interval is 01:00:00; Archive_Enabled = False
   

 REFERENCES

 procedure Archive_On_Shutdown
 procedure Shutdown_Warning



 @node !Commands.Operator.Shutdown

 procedure Shutdown (Reason      : String := "COPS";
                     Explanation : String := "Cause not entered");

 DESCRIPTION

 Shuts down the system after the interval set by the Shutdown_Warning
 command has passed.

 The shutdown cause is specified by the Reason parameter, and the
 explanation is specified by the Explanation parameter. This information is
 entered into the machine's error log.

 The Shutdown command issues several warnings to users. The first warning
 occurs when the command is executed, the next occurs after 3/4 of the
 interval has passed, the next occurs when 3/4 of the remaining time has
 passed, and so on, until the system is shut down. Note that a warning
 interval of 30 seconds or less results in immediate shutdown.

 When the system is shut down, users are logged off, all terminal lines are
 disabled, and a snapshot is taken to preserve the Environment state.


 PARAMETERS

 Reason : String := "COPS";

 Specifies a reason for shutting down the machine. The default, "COPS",
 specifies a customer shutdown. The shutdown does not occur unless the
 reason is valid. The value "?" for this parameter gives a list of valid
 reasons and does not perform the shutdown. The cause is entered into the
 machine's error log.

 Along with COPS, the following reasons are valid: Crash, Hang, Maint,
 Other, and Release. Other codes (CSD, HWC, PMH, PMS, SWC, and UCC) that
 were previously documented in the System Manager's Guide are no longer
 valid.


 Explanation : String := "Cause not entered";

 Specifies an explanation to be entered into the machine's error log. The
 default, "Cause not entered", should be replaced.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.

 The following reason codes are not valid: CSD, HWC, PMH, PMS, SWC, and
 UCC.


 REFERENCES

 procedure Cancel_Shutdown
 procedure Explain_Crash
 procedure Shutdown_Warning



 @node !Commands.Operator.Shutdown_Warning

 procedure Shutdown_Warning (Interval : Duration := 3600.0);

 DESCRIPTION

 Sets the interval between the time the Shutdown command is executed and
 the time the system actually shuts down.

 The Interval parameter also determines when the shutdown warning messages
 are issued. The first message is sent at the beginning of the interval, the
 second is sent after 3/4 of the interval has passed, and so on, until the
 system shuts down.


 PARAMETERS

 Interval : Duration := 3600.0;

 Specifies that the default for the interval is 3,600 seconds, or 1 hour.
 The Interval parameter is rounded to the nearest minute. Less than 1
 minute is rounded to 0.


 RESTRICTIONS

 Execution of this command requires that the user or the executing job have
 operator capability.


 EXAMPLES

 The command:

   Operator.Shutdown_Warning (1800.0);

 sets the interval to 30 minutes. The next time the Shutdown command is
 executed, 30 minutes will pass before the system actually shuts down.



 @node !Commands.Queue

 Package Queue contains commands for printing files and Ada source code, for
 displaying outstanding print requests, and for creating and managing print
 queues.

 You can use package Queue commands directly to configure printers at your
 site. Or you can use the machine-initialization file-driven method. This
 method:

 *  Calls procedures from package Queue to create print queues
    automatically whenever the machine boots.

 *  Enables you to submit print requests to printers that are connected to
    other systems on the same network. (You do this with
    !Commands.Abbreviations.Print instead of Queue.Print.)

 *  Enables you to query the print queues on other systems on the same
    network. (You do this with !Commands.Abbreviations.Display_Queue
    instead of Queue.Display.)

 For more information on implementing the file-driven method, see the online
 documentation in the !Machine.Initialization world.


 RESOURCES IN PACKAGE QUEUE

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

 Printing files:                      Print, Print_Version

 Displaying print-queue information:  Classes, Devices, Display

 Aborting print operations:           Cancel

 Managing print queues directly:      Add, Create, Default, Destroy, Enable,
                                      Register, Remove

 Reinitializing the print spooler:    Kill_Print_Spooler,
                                      Restart_Print_Spooler


 OVERVIEW OF THE PRINT PROCESS

 You use the Print command to submit one or more objects for printing; the
 Print_Version command allows you to specify a particular version of the
 object for printing.

 When you submit a print request:

 *  A copy of the object to be printed is formatted as specified through the
    various options provided by this package and is then submitted to the
    print spooler.

 *  The print spooler queues the object to the class specified by the user
    in the print request. (A class is a logical grouping of sequential
    print requests that allows these requests to be handled as a set.)

 *  Because each class is typically associated or registered with at least
    one device, the class to which an object is submitted determines the
    device that will handle the print request. A device can be a physical
    device (such as a printer) or a logical device (such as a file).

 *  If the designated device is enabled, the submitted object is printed.
    If the device is disabled, the submitted object remains queued until
    the device is enabled (or the class is reregistered with some other
    enabled device).


 Printer Classes

 The print spooler maintains the relationships among printer classes and
 devices. Users with operator capability can use the Create command to
 create any number of classes for queuing print requests.

 For example, one class can be designated for long batch jobs and another
 class for short urgent jobs, and each of these classes can be associated
 with its own device. Similarly, a separate class can be assigned to each
 user group or department so that requests from certain groups can be
 routed to specific devices, suspended, or given preference as needed.

 A single device can have any number of classes registered with it--for
 example, when several departments use the same printer. Furthermore, a
 single class can be registered with up to six devices. A print request
 submitted to such a class is routed to the first available device.


 Print Queues

 The term print queue refers to any predefined printer class that is
 associated with a particular device. Print requests are queued to a
 printer class as a sequential list, where they wait to be handled by
 the associated device.

 Print queues are created and managed either by using commands from package
 Queue directly or by editing a file called Printer_Configuration in the
 !Machine.Initialization.[Site,Local] worlds.

 Following is the general process for creating print queues using commands
 from package Queue:

 1. Ensure that the print spooler is running (using the
    Restart_Print_Spooler command).

 2. Define a class with the specified name (using the Create command).

 3. Add a device with the specified name (using the Add command).

 4. Associate the class with a device (using the Register command).

 5. Define a default class with the specified name (using the Default
    command).

 6. Make the device available for use (using the Enable command).


 Operator Capability Required for Some Commands

 Certain package Queue commands require that the executing job have
 operator capability. These commands include: Add, Create, Destroy,
 Disable, Enable, Kill_Print_Spooler, Register, Remove,
 Restart_Print_Spooler, and Unregister.


 KEY CONCEPTS FOR PRINTING TEXT

 You can use Print and Print_Version to queue print requests to one of two
 main types of device:

 *  An ASCII device (such as a line printer)

 *  A PostScript device (such as a laser printer)

 Depending on the device you choose and the contents of the file to be
 printed, the Print or Print_Version command may preprocess the file's
 contents before sending it to the device. Preprocessing includes:

 *  Making a print spooler copy of the file

    This means copying the contents of the file directly into the print
    spooler for printing.

 *  Modifying the copy to control various aspects of formatting and
    printing

 Preprocessing is optional for input files queued to an ASCII device. If
 desired, you can request the Print command to modify the input to wrap
 lines, number pages and/or lines, and change the length and width of the
 output pages. Without preprocessing, text is printed exactly as it
 appears in the input file.

 Some amount of preprocessing is normally required for input files queued to
 a PostScript device. PostScript preprocessing ensures that the required
 PostScript instructions are present to drive the device and optionally
 adds instructions to provide header pages, the print date, and filename;
 change the font; change the page orientation; print two up (print two
 logical pages on a single sheet of paper); and so forth.


 Printing Using an ASCII Device

 By default, the Print and Print_Version commands:

 *  Print the user's name on a separate banner page

 *  Print the object name

 *  Print the page number on each page

 *  Wrap lines longer than 80 characters

 You can override these defaults by using the Raw, Original_Raw, or Format
 options. These options permit a user to specify a different banner,
 headers, line length, and other format characteristics. These options are
 described in greater detail below.


 Printing Text with No Additional Formatting

 If you only want to print the text as it appears in the file with no
 additional formatting, you specify either the Raw or Original_Raw
 option. For example, to print preformatted text or binary data, you can
 specify: Options => "Raw". The difference between Raw and Original_Raw
 is:

 *  The Raw option queues a temporary print-spooler copy of the file with no
    preprocessing.

 *  The Original_Raw option is like Raw, except that Original_Raw prints
    directly from the original file, without using disk space to make a
    temporary copy. This option is for use on machines with low disk space.


 Printing Text with Basic Formatting

 If you want to print the text with any kind of basic formatting, you
 specify the Format option with the appropriate suboptions. For example, to
 print a text file with wrapped lines and page numbers, you specify:

   Options => "Format=(Wrap, System_Header)"

 The suboptions of the Format option are shown in Table 1.


                        Table 1   Format Suboptions
               -------------------------------------------- 
              |        |                                   |
              |Suboptio|Effect on Text Format              |
              |n       |                                   |
               -------------------------------------------- 
              |        |                                   |
              |Length  |Specifies total number of printed  |
              |        |lines per page.                    |
               -------------------------------------------- 
              |        |                                   |
              |Numberin|Provides line numbering.           |
              |g       |                                   |
               -------------------------------------------- 
              |        |                                   |
              |System_ |Prints the object name and page    |
              |Header  |number on each page.               |
               -------------------------------------------- 
              |        |                                   |
              |Tab_    |Specifies the number of spaces to  |
              |Width   |use for Tab character.             |
               -------------------------------------------- 
              |        |                                   |
              |Truncate|Truncates lines that are longer    |
              |        |than Width.                        |
               -------------------------------------------- 
              |        |                                   |
              |Width   |Specifies the maximum number of    |
              |        |printable characters per line.     |
               -------------------------------------------- 
              |        |                                   |
              |Wrap    |Wraps lines that are longer than   |
              |        |Width.                             |
               -------------------------------------------- 




 Printing Using a PostScript Device

 If you queue a print request to a PostScript device (such as a laser
 printer), you must specify the Postscript option to request PostScript
 preprocessing. Preprocessing means wrapping some amount of PostScript
 code around the text in the input file. Different code is required,
 depending on the format of the text in the file. The Postscript option
 itself accepts a number of suboptions that specify the amount and kind of
 preprocessing to be done.

 You can request preprocessing for any of five basic text formats by
 specifying the Format suboption of the Postscript option. By default, the
 Format suboption is set so that the Print command automatically chooses
 the appropriate preprocessing, based on the contents of the file.


 Printing a PostScript Program

 If you want to print a PostScript program, request preprocessing for
 PostScript format. A PostScript program is:

 *  A file that is generated by a document-formatting program (for example,
    the Rational Document Formatter)

 *  A file that is generated by a graphics application that produces
    encapsulated PostScript

 Preprocessing for PostScript format allows the PostScript program to be
 executed as expected. Additional preprocessing instructions can be
 specified using suboptions. For example, to print a PostScript file two up
 (two pages per sheet of paper), you specify:

   Options => "Postscript=(Format=Postscript, Twoup)"

 By default, a file containing a PostScript program is printed one up in
 portrait mode, without a date, filename, or outline box around the pages.

 The suboptions of the Postscript option are shown in Table 2.

                      Table 2   Postscript Suboptions
                 ---------------------------------------- 
                |      |                                 |
                |Subopt|Effect on Text Format            |
                |ion   |                                 |
                 ---------------------------------------- 
                |      |                                 |
                |Chatty|Generates a message as each of   |
                |      |multiple files is processed.     |
                 ---------------------------------------- 
                |      |                                 |
                |Date  |Prints the time and date of      |
                |      |queuing on each page.            |
                 ---------------------------------------- 
                |      |                                 |
                |Filena|Prints the filename on each page.|
                |me    |                                 |
                 ---------------------------------------- 
                |      |                                 |
                |Flow  |Prints two up with no gap between|
                |      |consecutive files.               |
                 ---------------------------------------- 
                |      |                                 |
                |Font  |Specifies typeface to be used.   |
                 ---------------------------------------- 
                |      |                                 |
                |Header|Prints a header page that        |
                |      |identifies job.                  |
                 ---------------------------------------- 
                |      |                                 |
                |Outlin|Draws a solid box outline around |
                |es    |each page.                       |
                 ---------------------------------------- 
                |      |                                 |
                |Pages |Specifies the pages to be printed|
                 ---------------------------------------- 
                |      |                                 |
                |Revers|Reverses the order in which pages|
                |ed    |are printed.                     |
                 ---------------------------------------- 
                |      |                                 |
                |Stats |Includes statistics about file   |
                |      |size and print speed in messages.|
                 ---------------------------------------- 
                |      |                                 |
                |Twoup |Prints two pages per sheet of    |
                |      |paper.                           |
                 ---------------------------------------- 
                |      |                                 |
                |Wide  |Prints logical pages in landscape|
                |      |mode.                            |
                 ---------------------------------------- 




 Printing Plain Text from a PostScript Printer

 If you want to print a file from a PostScript printer that contains plain
 text with no PostScript instructions, request preprocessing using the
 Plain_Text print-control formatting option.

 Preprocessing for Plain_Text format allows the text to be printed as it
 appears in the file. By default, additional preprocessing instructions are
 given so that pages are printed two up, an outline box appears around each
 page, the date and filename are printed on each page, pages are numbered,
 and lines are wrapped instead of truncated.

 You can specify additional preprocessing instructions or override the
 defaults using suboptions. For example, to print a Plain_Text format file
 one up with a header page, you specify:

   Options => "Postscript=(Format=Plain_Text, ~Twoup, Header)"

 Plain_Text format suboptions are shown in Table 3.

                      Table 3   Plain_Text Suboptions
                 ---------------------------------------- 
                |      |                                 |
                |Subopt|Effect on Text Format            |
                |ion   |                                 |
                 ---------------------------------------- 
                |      |                                 |
                |Chatty|Generates a message as each of   |
                |      |multiple files is processed.     |
                 ---------------------------------------- 
                |      |                                 |
                |Chop  |Truncates lines at the boundaries|
                |      |of the print area.               |
                 ---------------------------------------- 
                |      |                                 |
                |Date  |Prints the time and date of      |
                |      |queuing on each page.            |
                 ---------------------------------------- 
                |      |                                 |
                |Filena|Prints the filename on each page.|
                |me    |                                 |
                 ---------------------------------------- 
                |      |                                 |
                |Flow  |Prints two up with no gap between|
                |      |consecutive files.               |
                 ---------------------------------------- 
                |      |                                 |
                |Font  |Specifies typeface to be used.   |
                 ---------------------------------------- 
                |      |                                 |
                |Header|Prints a header page that        |
                |      |identifies job.                  |
                 ---------------------------------------- 
                |      |                                 |
                |Number|Prints a page number on each     |
                |      |page.                            |
                 ---------------------------------------- 
                |      |                                 |
                |Outlin|Draws a solid box outline around |
                |es    |each page.                       |
                 ---------------------------------------- 
                |      |                                 |
                |Pages |Specifies the pages to be printed|
                 ---------------------------------------- 
                |      |                                 |
                |Revers|Reverses the order in which pages|
                |ed    |are printed.                     |
                 ---------------------------------------- 
                |      |                                 |
                |Rules |Draws faint, dashed lines on     |
                |      |every other line of output.      |
                 ---------------------------------------- 
                |      |                                 |
                |Size  |Specifies the point size of the  |
                |      |type.                            |
                 ---------------------------------------- 
                |      |                                 |
                |Spacin|Combines with Size to specify    |
                |g     |vertical spacing of each line.   |
                 ---------------------------------------- 
                |      |                                 |
                |Stats |Includes statistics about file   |
                |      |size and print speed in messages.|
                 ---------------------------------------- 
                |      |                                 |
                |Twoup |Prints two pages per sheet of    |
                |      |paper.                           |
                 ---------------------------------------- 
                |      |                                 |
                |Wide  |Prints logical pages in landscape|
                |      |mode.                            |
                 ---------------------------------------- 




 Printing Ada Source Code

 If you want a hard copy of Ada source, request preprocessing for Fancy
 format. For example:

   Options => "Postscript=(Format=Fancy)"

 When Fancy format is used, the input object must be either a syntactically
 correct Ada unit or a file that contains the text of a syntactically
 correct Ada unit.

 Preprocessing for Fancy format causes Ada reserved words to be printed in
 a bold typeface and comments to be italicized. Otherwise, the Fancy format
 is preprocessed the same as Plain_Text, so that pages are printed two
 up, an outline box appears around each page, and so forth.

 You can specify additional preprocessing instructions or override the
 defaults using the suboptions listed for Plain_Text format.


 Printing a Letter

 If you want to print a letter or other correspondence that does not
 contain PostScript instructions, request preprocessing for Letter
 format. For example:

   Options => "Postscript=(Format=Letter)"

 Preprocessing for Letter format is similar to Plain_Text in that it allows
 the text to be printed as it appears in the file. However, the default
 preprocessing instructions are different, so that pages of a letter are
 printed one up without an outline box, date, filename, or page number on
 each page.

 You can specify additional preprocessing instructions or override the
 defaults using the suboptions listed for Plain_Text format.


 Printing a Bitmapped Image

 If you want to print a file that contains a bitmapped image, request
 preprocessing for the Image format. For example:

   Options => "Postscript=(Format=Image)"

 The bitmapped image is assumed to be of the form described in the "Format
 of a Bitmapped Image" subsection, below.

 You can specify additional preprocessing instructions when specifying the
 Image option by using the suboptions shown in Table 4.

                         Table 4   Image Suboptions
             ----------------------------------------------- 
            |      |                                        |
            |Subopt|Effect on Text Format                   |
            |ion   |                                        |
             ----------------------------------------------- 
            |      |                                        |
            |Aspect|Specifies the aspect ratio of the image.|
             ----------------------------------------------- 
            |      |                                        |
            |Captio|Specifies text to be printed below the  |
            |n     |image.                                  |
             ----------------------------------------------- 
            |      |                                        |
            |Chatty|Generates a message as each of multiple |
            |      |files is processed.                     |
             ----------------------------------------------- 
            |      |                                        |
            |Distor|Magnifies the image to fill the box     |
            |t     |defined by Width and Height.            |
             ----------------------------------------------- 
            |      |                                        |
            |Dx,Dy |Specifies the offset from the previous  |
            |      |image coordinate to the coordinate for  |
            |      |the next image.                         |
             ----------------------------------------------- 
            |      |                                        |
            |Epilog|Specifies PostScript code to be sent to |
            |      |the printer after the image is printed. |
             ----------------------------------------------- 
            |      |                                        |
            |Height|Specifies the maximum height for the    |
            |      |image.                                  |
             ----------------------------------------------- 
            |      |                                        |
            |Prolog|Specifies PostScript code to be sent to |
            |      |the printer before the image is printed.|
             ----------------------------------------------- 
            |      |                                        |
            |Wide  |Prints logical pages in landscape mode. |
             ----------------------------------------------- 
            |      |                                        |
            |Width |Specifies the maximum width for the     |
            |      |image.                                  |
             ----------------------------------------------- 
            |      |                                        |
            |X,Y   |Specifies coordinates of the first of   |
            |      |multiple images.                        |
             ----------------------------------------------- 




 Format of a Bitmapped Image

 When the Image option is specified, the Print or Print_Version command
 assumes that the input file contains a bitmapped image in the following
 format:

 *  An initial Ascii.Nul character.

 *  A short header. The header contains six 4-byte (8 bits per byte) fields
    in the following order:

    -  Width: number of pixels in one row of the image.

    -  Height: number of rows in the image.

    -  Depth: number of bits of grayscale per pixel. This value can be only
       1 or 4.

    -  Ax: Ax/Ay defines the aspect ratio width to height of each pixel. If
       the image is to be rendered at Xf pixels per inch horizontally, its
       height will be scaled
       Xf * (Ay/Ax) pixels per inch vertically.

    -  Ay: See description of Ax.

    -  Filler: must be zero.

 *  Grayscale information for the image.

    Grayscale information starts with the pixel data for the pixel in the
    upper-left corner of the image. Additional pixel data is presented row
    by row, left to right. Pixel data is packed eight or two pixels per
    byte, depending on the Depth specified. Each row must start on a byte
    boundary. Thus, "padding" must be added if Width multiplied by Depth is
    not a multiple of 8.


 Additional PostScript Printing Capabilities

 When printing a PostScript format file on a PostScript device--that is,
 when Options => "Postscript=(Format=Postscript)"--the Print command will
 recognize the following instructions embedded in the input file:

 %%ASCII naming expression

 This instruction specifies one or more files to be printed without further
 interpretation by PostScript. Any PostScript commands within the named
 files are ignored. The version of PostScript supported through this
 option is Adobe 1.0.

 %%BINARY naming expression

 This instruction specifies one or more files to be printed as strings of
 hexadecimal numbers. The %%BINARY command should be preceded by PostScript
 code that will prepare the printer to receive hexadecimal output. The
 version of PostScript supported through this option is Adobe 1.0.

 When printing a file of any format except Image on a PostScript
 device--that is, when the input file is of Postscript, Plain_Text, Letter,
 or Fancy format--the Print command will recognize the following
 instruction embedded in the input file:

 %%INCLUDE naming expression

 This instruction specifies one or more files to be opened and processed as
 if they were part of the input file. The named files can contain %%INCLUDE
 commands, which can be nested as many as ten levels deep. The version of
 PostScript supported through this option is Adobe 1.0.


 Specifying Default Format Options

 You can specify a default format for printed text by setting the
 Queue.Banner, Queue.Footer, Queue.Header, and Queue.Options session
 switches. The values of these switches are used when the Print and
 Print_Version commands have default values for the Banner, Footer, Header,
 and Options parameters, respectively. Setting these switches eliminates
 the need to reenter an often-used option or series of options directly
 into the Print or Print_Version commands.

   PROCESSOR  SWITCH    TYPE             VALUE
   ---------------------------------------------------------------------
   . . .
   Queue . Banner      : String         := "<user_id>"
   . . .
   Queue . Footer      : String         := ""
   . . .
   Queue . Header      : String         := ""
   . . .
   Queue . Options     : String         := "Format=>(Wrap, System_Header)"
   . . .

 If the Print or Print_Version command is used to print text files or Ada
 source from an ASCII device, all four session switches can be used to
 control the default output. If the text or Ada source is printed from a
 PostScript printer, only the Queue.Options session switch applies. These
 differences are discussed in separate sections below.


 Default Formatting for ASCII Devices

 If you enter the Print or Print_Version command to submit a print request
 to an ASCII device, and you use default parameter values, the command will
 take its basic formatting information from the Queue.Banner, Queue.Footer,
 Queue.Header, and Queue.Options session switches. In the standard
 Environment, these switches will cause the specified file or Ada image to be
 printed with:

 *  A banner showing the username

 *  No footer

 *  No header

 *  Wrapped lines and page numbers

 You can specify any banner, footer, and header text to the first three of
 these session switches. You can also set the Queue.Options session
 switch to be any valid option string that uses any of the suboptions shown
 in Table 1.


 Default Formatting for PostScript Devices

 You can use the Queue.Options session switch to specify a valid option
 string that uses any of the Postscript suboptions given in Tables 2, 3,
 and 4.

 For example, when the Queue.Options session switch is set as shown below,
 the Print command with a default Options parameter prints a text file or
 Ada image two up (two pages per sheet) from a PostScript printer:

   Queue.Options : String:=  Options => "PostScript=(Format=PostScript,
   Twoup)"


 @node !Commands.Queue.Add

 procedure Add (Device  : String := "";
                Options : String := "XON_XOFF");

 DESCRIPTION

 Adds a device to the system with the specified device name.

 This command allows you to add a device and to specify the kind of
 protocol required between print jobs (if any). Devices must be added
 before they can be registered using the Register command.


 PARAMETERS

 Device : String := "";

 Specifies the device by physical line number. The line number takes the
 form Terminal_N, where N is the number of the port through which the
 device communicates to the R1000.

 When the Ftp option is specified, the Device parameter must be the name of
 an Environment file; see the Ftp option, below. It is recommended that you
 put the device file in the !Machine.Queues.Ftp library.


 Options : String := "XON_XOFF";

 Specifies the type of protocol required by the device being added. The
 default is XON_XOFF.

 The following list summarizes the options accepted by the Add command. De-
 scriptions of each option are given after this list:

                Dtr           Ftp     Host
                Laser_Comm    Rts     Socket
                Xon_Xoff


 *  Dtr

    Not implemented; reserved for future development.


 *  Ftp

    A Boolean option. When True, specifies that print requests be sent using
    FTP to the directory and machine referenced by the device. Each print
    request is sent as a separate file. Once the files are on the other
    machine, you can use that machine's print commands or tools to print
    the files.

    When you specify the Ftp option, you must also specify the Device
    parameter with the name of an R1000 file that contains, on separate
    lines, the network name of the destination machine, the full pathname
    of the destination directory, a suffix to be appended to the filename
    (leave a blank line if no suffix is to be appended), and the pathname of
    an Environment remote-passwords file.

    The destination machine can be any computer system, typically a
    workstation.

    The directory pathname must have syntax appropriate to the destination
    machine and must have trailing punctuation that permits the name of
    the transferred print-request file to be appended.

    The specified suffix can be used by print tools to identify which files to
    print. (This is useful when several devices send files to the same
    directory.)

    The remote-passwords file must contain a username and password suitable
    for accessing the destination machine. It is recommended that you put
    the remote-passwords file in the !Machine.Queues.Ftp library. (See the
    Session and Job Management (SJM) book, package Remote_Passwords.)

    Only one of the following options can be specified for a given device:
    Ftp, Host, Rts, or Xon_Xoff.


 *  Host=>device name

    Specifies that a Telnet connection is to be formed with device name for
    each print request. This connection has standard flow control
    (XON_XOFF) and is broken after the request has been processed. Device
    name is the network's name for the device (as known by the
    Transport_Name_Map or the Name_Server).

    You can use the Socket option to specify a socket other than the TCP/IP
    default. If the Socket option is omitted, the standard TCP/IP socket
    (0,23) is used.

    Only one of the following options can be specified for a given device:
    Ftp, Host, Rts, or Xon_Xoff.


 *  Laser_Comm

    A Boolean option. When True, specifies that the device is a PostScript
    printer. To determine whether your printer requires this option, see
    the manual for your printer.


 *  Rts

    A Boolean option. When True, specifies standard flow control (XON_XOFF)
    with RTS protocol used between print requests.

    This option resolves contention problems when two machines share a
    common device.

    Only one of the following options can be specified for a given device:
    Ftp, Host, Rts, or Xon_Xoff.


 *  Socket=>socket number

    Specifies the socket through which the Telnet connection should be made
    through the Host option. For example:

    "host=>lab_print,socket=>(5,10)"

    If the Host option is specified and the Socket option is omitted, the
    standard TCP/IP socket (0,23) is used. The Socket option is ignored if
    the Host option has not been specified.


 *  Xon_Xoff

    A Boolean option. When True, specifies standard flow control (XON_XOFF)
    as the communications protocol.

    Only one of the following options can be specified for a given device:
    Ftp, Host, Rts, or Xon_Xoff.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Queue.Add ("terminal_21");

 adds a line printer called Terminal_21, using XON_XOFF protocol.

 The command:

   Queue.Add
       (Device  => "terminal_255",
        Options => "laser_comm,host=>mktg_laser,socket=>(0,24)");

 adds a Telnet device called Terminal_255, which is a laser printer.


 REFERENCES

 procedure Enable
 procedure Register
 procedure Remove



 @node !Commands.Queue.All_Classes

 All_Classes : constant Class_Name := "all";

 DESCRIPTION

 Defines a constant that represents all defined classes.



 @node !Commands.Queue.All_Spooler_Devices

 All_Spooler_Devices : constant String := "all";

 DESCRIPTION

 Defines a constant that represents all devices registered with at least one
 class.

                                                                           

 @node !Commands.Queue.Cancel

 procedure Cancel (Request_Id : Positive);

 DESCRIPTION

 Cancels the specified print request.

 This command cancels requests whether or not those requests have started
 to print. The value of the Request_Id parameter can be obtained with the
 Display command.

 Although the cancel request will complete quickly, the actual canceling
 can take several minutes before the print spooler removes/terminates the
 request.


 PARAMETERS

 Request_Id : Positive;

 Specifies the number assigned to the print request.


 REFERENCES

 procedure Display



 @node !Commands.Queue.Classes

 procedure Classes (Which        : Class_Name := "all";
                    Show_Devices : Boolean    := True);

 DESCRIPTION

 Displays information about the specified classes.


 PARAMETERS

 Which : Class_Name := "all";

 Specifies the class for which information is requested. The default is all
 classes. Users on installations that use Rational Networking--TCP/IP to
 connect multiple R1000 systems can query other machines on the network.
 Thus, the name can specify a machine name of the form !!Machine_Name,
 where Machine_Name is the name of a machine--for example, !!M1.


 Show_Devices : Boolean := True;

 Specifies whether to display information on devices as well as on classes.
 The default is True.


 EXAMPLES

 The command:

   Queue.Classes;

 produces a display such as the following:

   Class    Device(s)
   ======  ============
   DAISY   TERMINAL_252
   MLASER  TERMINAL_253
   APPLE   TERMINAL_250
   LP      TERMINAL_251
   QMS     TERMINAL_254

 This display shows that classes are associated with PostScript printers
 using Telnet ports in the range 250 . . 255.



 @node !Commands.Queue.Class_Name

 subtype Class_Name is String;

 DESCRIPTION

 Defines the form of a name assigned to a given set of devices.

 Any class name that you enter is converted to uppercase.

 This subtype can contain the name of a machine, using the format
 !!Machine_Name, where Machine_Name is the name of another machine on the
 same network. For example, !!M1.LP is the class LP on machine M1.

 The remote machine name can be used only to query and print on remote ma-
 chines. It cannot be used to change the configuration of the print spooler
 on remote machines.



 @node !Commands.Queue.Create

 procedure Create (Class : Class_Name := "");

 DESCRIPTION

 Creates a class with the specified name.


 PARAMETERS

 Class : Class_Name := "";

 Specifies the case-insensitive name for the class being created. The
 default is no name. You cannot use a remote machine name to create a class
 on a remote machine.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Queue.Create ("laser");

 creates a class called Laser.


 REFERENCES

 procedure Destroy
 procedure Register



 @node !Commands.Queue.Default

 procedure Default (Class : Class_Name := "");

 DESCRIPTION

 Specifies a new default class for all Environment print requests.

 The command sets the default class to the specified class and prints a
 message in the message window. If the default parameter value is used, the
 command simply prints the name of the current default class in the message
 window.

 The class must exist before it can be made the default class. Use the
 Create command to create classes.

 You can also assign a remote class as the default class, so that the
 default causes jobs to be queued on a remote machine.


 PARAMETERS

 Class : Class_Name := "";

 Specifies a new default name. If the default value is used, the only effect
 of this command is to display the current default class. For example,
 executing:

   Queue.Default (Class => "");

 produces a message in an Environment output window similar to:

   The default class is "<printer class>".

 where printer class is the name of the default class for the current
 system.

 Users on installations that use Rational Networking--TCP/IP to connect
 multiple R1000 systems can specify other machines on the network. Thus a
 remote machine name can be specified to set the default (for the current
 R1000) to be a remote class. This remote class name can be specified or, if
 omitted, allowed to default to the default class on the remote R1000. For
 example, the command:

   Queue.Default ("!!M1.newclass");

 specifies Newclass, on an R1000 named M1, as the default class for all
 local print requests. The command:

   Queue.Default ("!!M1");

 specifies the default class for a remote R1000 named M1 to be the default
 class for the current system.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability. Other users can execute this command to display the default
 class in the message window.


 REFERENCES

 procedure Create



 @node !Commands.Queue.Destroy

 procedure Destroy (Class   : Class_Name := "";
                    Reroute : Class_Name := "");

 DESCRIPTION

 Removes the specified class and routes existing requests for that class to
 another class.


 PARAMETERS

 Class : Class_Name := "";

 Specifies the name of the class to be removed. The default is no name.


 Reroute : Class_Name := "";

 Specifies a class for routing. Print requests spooled to the removed class
 are routed to this class. The default is to route requests to the default
 class. A remote machine name cannot be specified to destroy a class on a
 remote machine.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Queue.Destroy ("lp","newclass");

 removes LP from the list of active classes and routes all requests for LP
 to Newclass.

 The command:

   Queue.Destroy ("lpr3");

 removes LPR3 from the list of active classes and routes all requests for
 LPR3 to the default class.


 REFERENCES

 procedure Create
 procedure Unregister



 @node !Commands.Queue.Devices

 procedure Devices (Which        : String  := "all";
                    Show_State   : Boolean := True;
                    Show_Classes : Boolean := True);

 DESCRIPTION

 Displays information about the specified devices.


 PARAMETERS

 Which : String := "all";

 Specifies the device for which information is requested. The default is to
 show information about all devices. A remote machine name can be specified.


 Show_State : Boolean := True;

 Requests information on the current state of the devices, whether enabled
 or disabled. The default is True.


 Show_Classes : Boolean := True;

 Specifies whether to display information on classes associated with the
 displayed devices. The default is True.


 EXAMPLES

 The command:

   Queue.Devices;

 produces a listing such as the following:


 Device       Protocol                  Characteristics  State     Classes
 ============ ========================= ===============  ========  =======
 TERMINAL_40  XON_XOFF                  Laser_Comm       Disabled  (none)
 TERMINAL_32  RTS                                        Disabled  (none)
 TERMINAL_255 TELNET (PostScript (0,23))                 Enabled   LP

 This display shows three devices. Two are disabled and have no associated
 classes. Terminal_255, however, is enabled and is associated with class
 LP.



 @node !Commands.Queue.Disable

 procedure Disable (Device    : String  := "";
                    Immediate : Boolean := False);

 DESCRIPTION

 Disables the specified device.

 Depending on the value of the Immediate parameter, the command disables
 the specified device either before or after the current print request has
 finished on that device. If the Immediate parameter is False (the default),
 the command waits until the current print request has completed. If
 Immediate is True, the device is disabled immediately and the
 interrupted print request is placed back on the print queue to be
 reprinted when possible.

 This command cannot be used to disable a terminal device used to log into
 the Environment; you must use the Operator.Disable_Terminal command
 instead. This is important when a system manager is attempting to create a
 print queue for the same port currently configured for user login. The
 Enable command will not execute properly if you first attempt to disable
 the user login port by executing the Disable command.


 PARAMETERS

 Device : String := "";

 Specifies the device by physical line number. The line number takes the
 form Terminal_N, where N is the number of the port to which the device is
 attached.


 Immediate : Boolean := False;

 Specifies whether to allow the current print request to finish before the
 device is disabled. If the Immediate parameter is False (the default), the
 command waits until the current print request has completed. If Immediate
 is True, the device is disabled immediately and the interrupted print
 request is placed back on the print queue to be reprinted when possible.
 The Disable command will return quickly; however, it can take several
 minutes before the interrupted job is requeued and the device disabled.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Queue.Disable ("Terminal_255",True);

 disables the device connected to Telnet port 255. Because of the parameter
 value True, the device is disabled immediately. Any print request that is
 actually printing when this command is executed is placed on the print
 queue again.

 The command:

   Queue.Disable ("Terminal_255");

 disables the device connected to Telnet port 255. Because the default
 parameter value is False, the print request currently on this device must
 complete before the device is disabled.


 REFERENCES

 procedure Add
 procedure Enable



 @node !Commands.Queue.Display

 procedure Display (Class : Class_Name := "all");

 DESCRIPTION

 Displays the print requests currently queued in the specified class.

 The display appears in the current output window. If there are no queued
 requests, a message to this effect appears in the message window.

 The display shows the identification number for each request. Use the
 appropriate number in the Request_Id parameter when using the Cancel
 command.


 PARAMETERS

 Class : Class_Name := "all";

 Specifies the class for which the contents are to be displayed. The default
 is to display the contents of all classes. Users on installations that use
 Rational Networking--TCP/IP to connect multiple R1000 systems can query
 other machines on the network. Thus, the name can specify a machine name
 of the form !!Machine_Name, where Machine_Name is the name of a
 machine--for example, !!M1.


 EXAMPLES

 The command:

   Queue.Display;

 produces a display such as the following in the current output window:

      ID   Time   State  Class    User        Object
      ==  =====  ======  =====  ========  ===================
      20  17:54  Queued   LP    OPERATOR  !USERS.OPERATOR.LOG

 In this example, the state of the print request is queued because the
 device associated with the class LP is disabled. When a print request is
 currently being processed by an enabled device, the state of the request
 is active.


 REFERENCES

 procedure Cancel



 @node !Commands.Queue.Enable

 procedure Enable (Device : String := "all");

 DESCRIPTION

 Enables the specified device.

 The default is to enable All_Spooler_Devices (all registered devices).


 PARAMETERS

 Device : String := "all";

 Specifies the device by physical line number. The line number takes the
 form Terminal_N, where N is the number of the port to which the device is
 attached. The default is all devices.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.

 This procedure fails if the port is already enabled for login.


 EXAMPLES

 The command:

   Queue.Enable ("Terminal_254");

 enables the spooler device for Telnet port 254.

 Note, however, that port 254 cannot be simultaneously enabled for login.
 To check if port 254 is already enabled for login, use:

   Io.Echo (System_Utilities.Enabled (254));

 If this returns True, use:

   Operator.Disable_Terminal (Physical_Line => 254,
                              Response      => "<PROFILE>");

 to disable it for login before using Queue.Enable.


 REFERENCES

 procedure Add
 procedure Disable



 @node !Commands.Queue.Kill_Print_Spooler

 procedure Kill_Print_Spooler;

 DESCRIPTION

 Stops the print spooler.

 This command disables all spooler devices, prevents additional print
 requests, and prevents the successful completion of any queue operations
 requiring this machine. The print spooler can be restarted with the
 Restart_Print_Spooler command.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.


 REFERENCES

 procedure Restart_Print_Spooler



 @node !Commands.Queue.Print

 procedure Print (Name    : String := "<IMAGE>";
                  Options : String := "<DEFAULT>";
                  Banner  : String := "<DEFAULT>";
                  Header  : String := "<DEFAULT>";
                  Footer  : String := "<DEFAULT>";)

 DESCRIPTION

 Queues the specified objects for printing.

 You can specify one or more objects by naming, by selection, or by placing
 the cursor in a window containing the object's images.

 You can print text files, Ada units, and library listings. To print images
 from output windows or images of other kinds of objects, such as a switch
 file, you must: copy the object's image into a text file, commit the file,
 and then print the new text file.

 The default action is to queue the print request to the device associated
 with the default class and then notify when the jobs are complete. The
 message window echoes all print requests, unless the switches are set
 differently in the user's switch file.

 The Options parameter allows you to change the printout format or to
 request multiple copies of your print request.


 PARAMETERS

 Name : String := "<IMAGE>";

 Specifies the name of the object to be sent to the print queue. This
 parameter can use special names and wildcards to specify a set of objects.
 The default is the current selection or image.

 You can specify a text file, an Ada unit, or a library (which prints a list
 of the library's contents). If you specify a file or an Ada unit using
 the current image, the most recently committed version is printed.
 Therefore, the printout will differ from the actual image on the screen if
 that image contains uncommitted changes.


 Options : String := "<DEFAULT>";

 Specifies options for controlling the appearance of printed text. A
 complete description of this parameter is given below. Also refer to the
 "Key Concepts for Printing Text" section for an overview of how to use the
 Print command to control the format of printed text.

 The default value of the Options parameter is the special value
 "<DEFAULT>", which sets the parameter to the value of the Queue.Options
 session switch. If the current session-switch file is not accessible, the
 parameter is given the value "Format=>(Wrap, System_Header)".

 The Print command accepts the following options; descriptions of each
 option are given below:

      Banner_Page_User_Text     Class       Copies
      Format                    Notify      Original_Raw
      Postscript                Raw         Spool_Each_Item

 You must specify one of the following four options to specify basic
 processing before the text is sent to the device: Format, Postscript, Raw,
 or Original_Raw.

 The Format and Postscript options each accept a set of suboptions
 (enclosed in parentheses) that further specify how text preprocessing is
 to be done.

 The Format option accepts the following suboptions; descriptions of each
 suboption are given under the Format option:

            Length           Numbering       System_Header
            Tab_Width        Truncate        Width
            Wrap

 The Postscript option accepts the following suboptions; descriptions of
 each suboption are given under the Postscript option:

            Aspect        Border          Caption
            Chatty        Chop            Date
            Distort       Dx              Dy
            Epilog        Filename        Flow
            Font          Format          Header
            Height        Number          Outlines
            Pages         Prolog          Reversed
            Rules         Size            Spacing
            Twoup         Wide            Width
            X             Y

 Note that the Postscript option can take a Format suboption: do not
 confuse this suboption with the Format option described above.

 The remaining alphabetic reference describes the Print options and their
 suboptions in detail.


 *  Banner_Page_User_Text=string

    Specifies a string (with a maximum of 60 characters) that will be
    printed on the banner page, if there is one. The string specified by
    this option is printed beneath the string specified by the Banner
    parameter and above the system-generated information.

    This option is currently implemented only for print requests that are
    directed to ASCII devices such as line printers (see the Format
    option).


 *  Class=class name

    Specifies the name of the class to which the print request is queued.
    The class determines the device that will handle the print request.
    Note that the specified class must exist for the print request to be
    queued; furthermore, the class must be associated with an enabled
    device for the queued job to actually print. If this option is not
    specified, the default class is used.


 *  Copies=positive integer

    Specifies the number of copies to be printed. Copies are generated one
    at a time, and other jobs may intervene between copies. The default is
    one copy.
                                                                           

 *  Format=(Format suboptions)

    Specifies that the input file is to be preprocessed for a conventional
    ASCII device, such as a line printer. Only one of the four
    options--Format, Postscript, Raw, or Original_Raw--can be specified for
    any print request.

    The Format option accepts suboptions that specify preprocessing
    details. Suboptions must be separated by commas and enclosed in
    parentheses--for example, Format=>(Wrap, Width=77).


    -  Length=positive integer

       Specifies the total number of printed lines per page, including
       headers and footers. The default length is 60 lines.

       The number of lines in the body text for each page is automatically
       adjusted to accommodate any combination of a one-line header, a
       one-line footer, or a system page header. However, if you specify a
       multiple-line header or footer, you must decrease the Length value
       for every additional line beyond the expected one. That is,
       embedded linefeeds in a header or footer are printed but not
       counted.


    -  Numbering

       A Boolean suboption. When True, provides line numbering. The default
       is False.


    -  System_Header

       A Boolean suboption. When True, prints the system page header on
       each page. The system header is the name of the object and a page
       number. If there is a user-specified header, the system page header
       appears above it.
       The default is False.


    -  Tab_Width=natural number

       Specifies the number of spaces with which to replace a Tab character
       (Ascii.Ht). The default is 8. A value of 0 specifies no
       replacement.


    -  Truncate

       A Boolean suboption. When True, truncates lines that are longer than
       Width. The default is False.

       The Truncate suboption is ignored if the Wrap suboption is True.


    -  Width=positive integer

       Specifies the maximum number of printable characters per line. The
       Wrap and Truncate options specify what to do with lines that are
       longer than Width. The default width is 80 columns.


    -  Wrap

       A Boolean suboption. When True, wraps lines that are longer than
       Width (see the Width suboption). The default is False.

       If the Numbering suboption is True, the wrapped portions of wrapped
       lines do not receive a new line number. Setting Wrap to True causes
       the Truncate suboption to be ignored.


 *  Notify=literal

    Specifies how you will be notified of a completed print request. By
    default, an informative message is sent to the message window, even
    from remote requests.

    None                 Causes no notification to be given.

    Message              Causes a message to be displayed in the message
                         window.

    Mail                 Not currently implemented.


 *  Original_Raw

    A Boolean option. When True, specifies that text is to be printed as it
    appears in the file, with no preprocessing. The default is False. This
    option is useful for large amounts of preformatted text or binary data.
    Only one of the four options--Format, Postscript, Raw, or Original_Raw
    --can be specified for any print request.

    The Original_Raw option is normally used when the print request is sent
    to an ASCII device. However, Original_Raw can be used for a print
    request that is sent to a PostScript device, provided that the input
    file is ready to print without preprocessing--that is, if it already
    contains sufficient PostScript code to drive the printer.

    The Original_Raw option differs from the Raw option in that
    Original_Raw prints the original file directly, whereas Raw queues a
    temporary print-spooler copy of the file. Because Original_Raw prints
    without using the disk space for a print-spooler copy, this option is
    useful on machines low on disk space or when large files need to be
    printed.

    When Original_Raw is used, each file is spooled separately, a message is
    sent when printing is complete, and the default banner page is printed
    (for ASCII devices only), regardless of the values of the
    Spool_Each_Item, Notify, and Banner_Page_User_Text options.


 *  Postscript=(Postscript suboptions)

    Specifies that the input file is to be preprocessed for a PostScript
    device. Only one of the four options--Format, Postscript, Raw, or
    Original_Raw--can be specified for any print request.

    The Postscript option accepts suboptions that specify preprocessing
    details. Suboptions must be separated by commas and enclosed in
    parentheses--for example, Postscript=>(Format=Fancy, Header).

    Different preprocessing is required, depending on the format of the
    text in the input file. Accordingly, the Format suboption allows you to
    specify the file format for which you want preprocessing to be done.
    Preprocessing is available for five basic file formats--Plain_Text,
    Letter, Fancy, Image, and Postscript program.

    Other suboptions allow you to request additional preprocessing or
    override default preprocessing for a given format. Thus, the value of
    the Format suboption determines which of the remaining suboptions can
    be specified.

    If the Format suboption specifies Plain_Text, Letter, or Fancy
    format--for example, Postscript=>(Format=Plain_Text)--you can specify
    these suboptions:

         Chatty        Chop         Date
         Filename      Flow         Font
         Header        Number       Outlines
         Pages         Reversed     Rules
         Size          Spacing      Twoup
         Wide

    If the Format suboption specifies Postscript format--for example,
    Postscript=> (Format=PostScript)--you can specify these suboptions:

         Chatty        Date      Filename
         Flow          Font      Header
         Outlines      Pages     Reversed
         Twoup         Wide

    If the Format suboption specifies Image format--for example,
    Postscript=> (Format=Image)--you can specify these suboptions:

         Aspect        Caption     Chatty
         Distort       Dx          Dy 
         Epilog        Height      Prolog
         Wide          Width       X
         Y


    -  Aspect=floating-point number

       Applies only to Image format. Specifies the aspect ratio of the
       image. The default is 0.0 inches, which specifies to print the image
       in its current size.


    -  Border

       Same as the Outlines suboption.


    -  Caption=text

       Applies only to Image format. Specifies text to be printed below the
       image. The default text is the filename containing the image.


    -  Chatty

       A Boolean suboption; applies to all formats. When True, generates
       messages as each file is accessed for printing. When False, generates
       messages only after all the files have been printed or under error
       conditions. The default is True.


    -  Chop

       A Boolean suboption; applies only to Plain_Text, Letter, and Fancy
       formats. When True, truncates long input lines at the boundaries of
       the area in which text can be printed (7.5 inches by 10 inches).

       When False, causes a line longer than the line length defined by the
       Spacing and Size suboptions to be broken. For either Plain_Text or
       Letter format, the line is broken at the rightmost blank within the
       permitted line length. For Fancy format, the line is broken at the
       permitted line length. In either case, the excess text is printed on
       the next line, justified with the right margin. The default is False.


    -  Date

       A Boolean suboption; applies to all formats except Image. When True,
       prints the time and date at the time of queuing in the lower-left
       corner of each page, outside the outline box, if any. When the
       format is Plain_Text, this suboption defaults to True. When the
       format is Postscript, this suboption defaults to False.


    -  Distort

       A Boolean suboption; applies only to Image format. When True,
       magnifies the image to fill the box defined by Width and Height. When
       False, the image is magnified as large as possible while retaining
       the aspect ratio of the image. The default is False.


    -  Dx=floating-point number

       Applies only to Image format. Works with the Dy suboption to specify
       the offset between the coordinates of the current and next image.
       See the Dy suboption for details.


    -  Dy=floating-point number

       Applies only to Image format. Works with the Dx suboption to specify
       the offset between the coordinates of the current and next image. Dx
       is added
       to the X coordinate for each successive image until the resulting
       coordinate would be outside the bounds of the paper, at which time X
       is reset to its original value and Dy is added to the Y coordinate.
       When the Y coordinate exceeds the bounds of the paper, a new page is
       started at the original X, Y coordinates.

       The Dx and Dy suboptions are typically used to specify the size and
       orientation of laser-printer paper whose dimensions are other than
       8.5 by 11 inches. For example, if you are using a laser printer that
       has 8.5- by 18-inch paper, and the image is to be printed in
       portrait mode, you specify Postscript=> (format=image, dx=8.5,
       dy=18.0, ~wide). In landscape mode, you specify Postscript=>
       (format=image, dx=18, dy=8.5, wide).


    -  Epilog=Postscript instructions

       Applies only to Image format. Specifies PostScript code to be sent to
       the printer after each image is printed.


    -  Filename

       A Boolean suboption; applies to all formats except Image. When True,
       prints the full name of the file in the upper-left corner of each
       page, outside the outline box, if any. When the format is
       Plain_Text, this suboption defaults
       to True. When the format is Postscript, this suboption defaults to
       False.


    -  Flow

       A Boolean suboption; applies to all formats except Image. When True,
       causes pages to be printed two up and causes each file to start on
       the right half of
       a sheet wherever possible. (Setting the Flow suboption to True
       forces the Twoup suboption to be True and the Reversed suboption to
       be False.)

       When False, causes every file to start on a new sheet of paper. The
       default is False.


    -  Font=font name

       Applies to all formats except Image. Specifies the typeface to be
       used when printing the file. Any built-in PostScript font can be
       specified.

       If font name begins with the slash character (/ ), the named font
       must already reside on the printer. If font name does not begin with
       the slash character (/ ), then font name must name a file that
       contains the PostScript code for a downloadable font. The file is
       downloaded to the printer before any files are processed by
       PostScript.

       The specified font name must use spelling and capitalization
       identical to the name by which the printer knows the font. Thus, if
       the printer knows the font name as Courier, the name cannot be
       specified as COURIER.


    -  Format=literal

       Specifies the format for which the input file will be preprocessed.
       The default value is Automatic, which causes the Print command to
       determine the format by inspecting the contents of the input file.

       The value of the Format suboption determines which of the remaining
       suboptions can be specified.

       Automatic            Causes the Print command to determine the
                            format to use by inspecting the contents of the
                            input file.

                            If the file begins with the % character,
                            preprocessing for Postscript format is done
                            (see the Postscript literal below).

                            If the file begins with the Ascii.Nul character,
                            preprocessing for Image format is done (see the
                            Image literal below).

                            If the file begins with any other character,
                            preprocessing for Plain_Text format is done
                            (see the Plain_Text literal below).

       Fancy                Requests preprocessing for Fancy format. You
                            specify Fancy format if you want to print a
                            hard copy of Ada source. The input object must
                            be either a syntactically correct Ada unit or a
                            file that contains the text of a syntactically
                            correct Ada unit.

                            Preprocessing for Fancy format causes Ada
                            reserved words to be printed in a bold typeface
                            and comments to be italicized. Otherwise, the
                            Fancy format is preprocessed the same as
                            Plain_Text, so that pages are printed two up,
                            an outline box appears around each page, and so
                            on.

                            You can specify additional preprocessing
                            instructions or override the defaults using the
                            suboptions listed above for Plain_Text format.

       Image                Requests preprocessing for Image format. You
                            specify Image format if you want to print a file
                            containing a bitmapped image whose file format
                            is described in the introduction to this
                            package. You can specify additional
                            preprocessing instructions using the
                            suboptions listed for Image format.

       Letter               Requests preprocessing for Letter format. You
                            specify Letter format if you want to print a
                            letter or other correspondence that does not
                            contain PostScript instructions.

                            Preprocessing for Letter format is similar to
                            Plain_Text in that it allows the text to be
                            printed as it appears in the file. However,
                            Letter format differs from Plain_Text in that
                            the pages of a letter are printed one up, with
                            long lines truncated, and without an outline
                            box, date, filename, or page number on each
                            page. That is, Letter format automatically sets
                            the Chop suboption to True and following
                            suboptions to False: Twoup, Outlines, Date,
                            Filename, and Number.

                            You can specify additional preprocessing
                            instructions or override the defaults using the
                            suboptions listed above for Plain_Text format.

       Plain_Text           Requests preprocessing for Plain_Text format.
                            You specify Plain_Text format if you want to
                            print a file that contains plain text with no
                            PostScript instructions.

                            Preprocessing for Plain_Text format allows the
                            text to be printed character for character as
                            it appears in the file. By default, additional
                            preprocessing instructions are given so that
                            pages are printed two up, an outline box
                            appears around each page, the date and filename
                            are printed on each page, pages are numbered,
                            and lines are wrapped instead of truncated.

                            You can specify additional preprocessing
                            instructions or override the defaults using the
                            suboptions listed above for Plain_Text format.

       Postscript           Requests preprocessing for Postscript format.
                            You specify Postscript format if you want to
                            print a file containing a PostScript program. A
                            PostScript program is a file generated by a
                            document-formatting program like the Rational
                            Document Formatter or by a graphics
                            application that produces encapsulated
                            PostScript.

                            You can specify additional preprocessing
                            instructions using the suboptions listed above
                            for Postscript format.


    -  Header

       A Boolean suboption; applies to all formats except Image. When True,
       prints a header page that identifies the file and contains information
       concerning its printing. The default is False.


    -  Height=floating-point number

       Applies only to Image format. Specifies the maximum height allowed
       for the image.

       The default values for Width and Height specify a full-page image:

               Wide suboption    Height suboption    Width suboption
                   value             default             default
         
               True (landscape)    8.0 inches          10.5 inches
               False (portrait)   10.5 inches           8.0 inches


    -  Number

       A Boolean suboption; applies only to Plain_Text, Letter, and Fancy
       formats. When True, causes a page number to be printed in the
       upper-right corner of each page, outside the outline box, if there
       is one. The numbering starts at 1 for each file printed. The default
       is True.


    -  Outlines

       A Boolean suboption; applies to all formats except Image. When True,
       draws a solid outline box around the text for each page.
       Alternatively, this suboption can be specified as Border. When the
       format is Plain_Text, this suboption defaults to True. When the
       format is Postscript, this suboption defaults to False.


    -  Pages=positive integer or positive integer..positive integer

       Applies to all formats except Image. Specifies the pages to be
       printed. The first logical page in the file is page 1. When a single
       integer value is specified, that single page is printed. When a range
       is specified (for example, pages= 20..24), that range of logical
       pages is printed. The default is to print all pages in the file.


    -  Prolog=>text

       Applies only to Image format. Specifies PostScript code to be sent to
       the printer before each image is printed.


    -  Reversed

       A Boolean suboption; applies to all formats except Image. When True,
       reverses the order in which pages are printed, so that the last
       logical page is printed first. When False, the pages are printed in
       the order in which they appear in the file. The default is True.

       You can use the Reversed option to ensure that pages are stacked in
       the printer's output tray in the correct order (that is, the first
       page is on the top and the last page is on the bottom). Set the
       Reversed option to False if your printer already stacks pages as
       desired; otherwise, use the default value.


    -  Rules

       A Boolean suboption; applies only to Plain_Text, Letter, and Fancy
       formats. When True, draws faint, dashed lines on every other line of
       the output. The default is False.


    -  Size=Integer

       Applies only to Plain_Text, Letter, and Fancy formats. The Size
       suboption specifies the point size of the type. The default size is
       11-point type.

       The Size suboption is used together with the Spacing suboption
       below. See the Spacing suboption for further details.


    -  Spacing=Integer

       Applies only to Plain_Text, Letter, and Fancy formats. The Spacing
       suboption specifies the number of points of vertical spacing for each
       line. The default spacing is Size + 1 (or, when the defaults are
       used, 12).

       The Size and Spacing suboptions determine the number of lines per
       page and the number of characters per line:

            Wide suboption   Number of lines     Number of characters
                 value          per page               per line

            True (landscape)   540/Spacing           1200/Size
            False (portrait)   720/Spacing            900/Size

       Thus, by default, a page in portrait mode has 60 lines of
       81-character-wide output.


    -  Twoup

       A Boolean suboption; applies to all formats except Image. When True,
       prints two logical pages per physical sheet of paper. When False,
       pages are printed with a single page per sheet of paper. When the
       format is Plain_Text, this suboption defaults to True. When the
       format is Postscript, this suboption defaults to False.


    -  Wide

       A Boolean suboption; applies to all formats. When True, prints
       logical pages in landscape mode (the logical page is oriented
       horizontally so that the lines of text are parallel to the longer
       side of the page). When False, prints pages in portrait mode (with
       the logical page oriented vertically so that lines of text are
       parallel to the shorter side of the page). The default is False.

       Note that the orientation of the sheet of paper depends on the value
       of both Twoup and Wide. One portrait-mode page is printed on a
       vertically oriented sheet of paper (that is, ~Twoup, ~Wide); two
       portrait-mode pages are printed on a horizontally oriented sheet of
       paper (that is, Twoup, ~Wide).


    -  Width=floating-point number

       Applies only to Image format. Specifies the maximum width allowed for
       the image. The default values for Width and Height specify a
       full-page image:

           Wide suboption    Height suboption      Width suboption
                value            default              default

          True (landscape)     8.0 inches           10.5 inches
          False (portrait)    10.5 inches            8.0 inches


    -  X=floating-point number

       Applies only to Image format. Works with the Y suboption to specify
       the coordinates of the lower-left corner (also known as the origin)
       of the first image. The default coordinate is (0.25,0.25), which is a
       point 1/4 inch from the lower-left corner of the page.


    -  Y=floating-point number

       Applies only to Image format. Works with the X suboption to specify
       the coordinates of the lower-left corner (also known as the origin)
       of the first image. The default coordinate is (0.25,0.25), which is a
       point 1/4 inch from the lower-left corner of the page.


 *  Raw

    A Boolean option. When True, specifies that text is to be printed as it
    appears in the file, with no preprocessing. The default is False. This
    option is useful for preformatted text or binary data. Only one of the
    four options--Format, Postscript, Raw, or Original_Raw--can be
    specified for any print request.

    The Raw option is normally used when the print request is sent to an
    ASCII device. However, Raw can be used for a print request that is
    sent to a PostScript device, provided that the input file is ready to
    print without preprocessing--that is, if it already contains sufficient
    PostScript code to drive the printer.

    The Raw option differs from the Original_Raw option in that Raw queues
    a temporary print-spooler copy of the file, whereas Original_Raw prints
    the original file directly. Original_Raw should be used for machines
    that are low on disk space or when large files need to be printed.

    When the Raw option is used, you can use the Banner parameter and
    Banner_Page_User_Text option to produce a banner page (for ASCII
    devices only); all other options are turned off.


 *  Spool_Each_Item

    A Boolean option. When True, multiple files submitted in a single Print
    command are queued as separate jobs. Spooling files separately is
    useful when you have many large files to print and you want to allow
    other users' jobs to intervene. When this option is False, multiple
    files are spooled as a single job. The default is False.

    When files are spooled separately to an ASCII device, each file has its
    own banner page, provided that the Banner parameter has been
    specified. When files are spooled separately to a PostScript device, each
    file has its own header page, provided that the Header suboption has
    been specified.


 Banner : String := "<DEFAULT>";

 Specifies the string that appears on the single banner page that precedes
 the printout. Banner pages are currently implemented only for print
 requests that are directed to ASCII devices such as line printers; this
 option is ignored if PostScript formatting is specified. The string you
 supply is truncated at 11 characters. If the null string is specified, a
 banner page will not be generated. The Banner_Page_User_Text option
 allows you to add banner text beyond 11 characters.

 The special name "<DEFAULT>" refers to the banner that is specified in the
 username's session-switch file; the username of the user executing the
 Print command is used as the banner if no banner text has been specified in
 the switch file.


 Header : String := "<DEFAULT>";

 Specifies that a line of text is to appear at the top of each page of the
 printout. This parameter is currently implemented only for print requests
 that are directed to ASCII devices such as line printers (see the Format
 option). Any nonnull string (including blank characters) constitutes a 
 user-specified header. A blank line is automatically inserted below the
 user-specified header to separate the header text from the printout.

 If the System_Header option has been specified using the Options parameter,
 in addition to the user-specified header, then the system header appears
 first, followed by the user-specified header.

 The user-specified header can be wider than the width of the text file
 specified by the Width option; however, a lengthy header is not wrapped
 automatically. You must include linefeeds in a header if you want it to
 wrap onto multiple lines.

 The number of lines in the body text for each page is automatically
 adjusted to accommodate any combination of a one-line header, a one-line
 footer, or a system page header. However, if you specify a multiple-line
 header, you must decrease the Length value for every header line beyond
 the expected one.

 The special name "<DEFAULT>" refers to the header that is specified in the
 username's session-switch file.


 Footer : String := "<DEFAULT>";

 Specifies a line of text that appears at the bottom of each page of the
 printout. This parameter is currently implemented only for print requests
 that are directed to ASCII devices such as line printers; it is ignored if
 PostScript formatting is specified (see the Format option).

 Any nonnull string (including blank characters) constitutes a
 user-specified footer. A blank line is automatically inserted above the
 user-specified footer to separate the footer text from the printout.

 The user-specified footer can be longer than the Width option; however, a
 lengthy footer is not wrapped automatically. You must include linefeeds in
 a footer if you want it to wrap onto multiple lines.

 The number of lines in the body text for each page is automatically
 adjusted to accommodate any combination of a one-line header, a one-line
 footer, or a system page header. However, if you specify a multiple-line
 footer, you must decrease the Length value for every footer line beyond
 the expected one.

 The special name "<DEFAULT>" refers to the footer that is specified in the
 username's session-switch file.


 EXAMPLES

 The command:

   Queue.Print
     (Name    => "output_samples",
      Options => "copies=2,format => (truncate,system_header)",
      Banner  => "dept 04",header => "December 9, 1991");

 prints two copies of the object Output_Samples, with Dept 04 on the banner
 page and the date appearing under the system page header. Lines longer
 than 80 characters are truncated.

 The request to print Output_Samples is queued to the default class, and a
 message such as the following appears in the message window:

   Request number 58 has been queued

 A further message in the message window notifies the user when the job is
 complete. The user would also be notified if the request were made on a
 remote machine.


 REFERENCES

 procedure Print_Version
 Session and Job Management (SJM), Session Switches



 @node !Commands.Queue.Print_Version

 procedure Print_Version (The_Version : Directory.Version;
                          Options     : String := "<DEFAULT>";
                          Banner      : String := "<DEFAULT>";
                          Header      : String := "<DEFAULT>";
                          Footer      : String := "<DEFAULT>");

 DESCRIPTION

 Queues the specified object version for printing, allowing customization of
 the printout page format.

 The default is to assume the device associated with the default class and
 to notify when the jobs are complete. The message window echoes all print
 requests.

 The Print_Version command uses the Options parameter to allow you to
 change the printout format or to request multiple copies for your print.


 PARAMETERS

 The_Version : Directory.Version;

 Specifies the version of the object to be sent to the print queue.


 Options : String := "<DEFAULT>";

 Specifies the options to be used in formatting output. At the beginning of
 this package is a list of the options available for use to format output
 in the Options parameter. Note that the Options parameter uses the special
 name "<DEFAULT>". When this special name is used, the system looks in the
 session-switch file for the options set in the Queue.Options switch. If the
 switch file is not accessible, the system uses the options "Format=>(Wrap,
 System_Header)". These options are not provided and must be respecified if
 the options are specified by substituting an option string for the
 "<DEFAULT>" special name. One of the following three options must be
 specified: Original_Raw, Raw, or Format. Unless otherwise specified in the
 Options parameter, the Boolean options Original_Raw, Raw, and Spool-
 _Each_Item are False. The other options take the defaults described in
 detail in the reference entry for the Print command.


 Banner : String := "<DEFAULT>";

 Specifies the string that appears on the single banner page that precedes
 the printout. This option is ignored if PostScript formatting is
 specified. The string you supply is truncated at 11 characters. If the null
 string is specified, a banner page will not be generated. The special name
 "<DEFAULT>" refers to the banner set in the username's session-switch file
 (or the username if one is not specified).


 Header : String := "<DEFAULT>";

 Specifies a line of text that appears at the top of each page of the
 printout. This option is ignored if PostScript formatting is specified. Any
 nonnull string (including blank characters) constitutes a user-specified
 header. A blank line is automatically inserted below the user-specified
 header to separate the header text from the printout.

 If the Options parameter requests a system page header in addition to the
 user-specified header, then the system header appears first, followed by
 the user-specified header.

 The user-specified header can be longer than the Width option; however, a
 lengthy header is not wrapped automatically. You must include linefeeds in
 a header if you want it to wrap onto multiple lines.

 The number of lines in the body text for each page is automatically
 adjusted to accommodate any combination of a one-line header, a one-line
 footer, or a system page header. However, if you specify a multiple-line
 header, you must decrease the Length value for every header line beyond
 the expected one. The special name "<DEFAULT>" refers to the header set in
 the username's session-switch file.


 Footer : String := "<DEFAULT>";

 Specifies a line of text that appears at the bottom of each page of the
 printout. This option is ignored if Postscript formatting is specified. Any
 nonnull string (including blank characters) constitutes a user-specified
 footer. A blank line is automatically inserted above the user-specified
 footer to separate the footer text from the printout.

 The user-specified footer can be longer than the Width option; however, a
 lengthy footer is not wrapped automatically. You must include linefeeds in
 a footer if you want it to wrap onto multiple lines.

 The number of lines in the body text for each page is automatically
 adjusted to accommodate any combination of a one-line header, a one-line
 footer, or a system page header. However, if you specify a multiple-line
 footer, you must decrease the Length value for every footer line beyond
 the expected one. The special name "<DEFAULT>" refers to the footer set in
 the username's session-switch file.


 REFERENCES

 procedure Print
 Session and Job Management (SJM), Session Switches



 @node !Commands.Queue.Register

 procedure Register (Device : String     := "";
                     Class  : Class_Name := "");

 DESCRIPTION

 Registers the specified device with the print spooler and associates the
 specified device with the specified class.

 The specified device and class must already exist (see the Create and Add
 procedures).

 More than one class can be registered to a single device, and a single
 class can be registered to more than one device. When one class is registered
 to multiple devices, print requests submitted to that class are handled by
 the first available device.


 PARAMETERS

 Device : String := "";

 Specifies the device by physical line number. The line number takes the
 format Terminal_N, where N is the number of the port to which the device
 is attached. The default is no device.


 Class : Class_Name := "";

 Specifies the class to be associated with the device. The default is no
 class. The class must already exist (see the Create procedure). A remote
 machine name cannot be used to register a class with a remote system.
 Registering must be performed on the same machine as the class to be
 registered for that machine.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Queue.Register ("Terminal_250","lp");

 registers class LP with the device using port 250. If the device using
 port 250 is the only device associated with class LP, then all requests to
 class LP are routed to this device.


 REFERENCES

 procedure Add
 procedure Create
 procedure Unregister



 @node !Commands.Queue.Remove

 procedure Remove (Device    : String  := "";
                   Immediate : Boolean := False);

 DESCRIPTION

 Removes the device from the print spooler.

 The value of the Immediate parameter determines whether the procedure
 waits until the current print request has finished before removing the
 device. If Immediate is False (the default), the procedure waits for the
 device to finish processing the current print request. If Immediate is
 True, the device is removed immediately, and the interrupted print request
 is requeued.

 The Remove command effectively reverses all aspects of the Enable and
 Register commands. The Remove procedure disables this device, dissociates
 it from its classes, and then removes the device from the print spooler.
 (Note that the Unregister command dissociates a device from a class but
 leaves the device known to the print spooler.)


 PARAMETERS

 Device : String := "";

 Specifies the device by physical line number. The line number takes the
 form Terminal_N, where N is the number of the port to which the device is
 attached. The default is no physical line number.


 Immediate : Boolean := False;

 Specifies whether the command waits until the current print request has
 finished before removing the device. If False (the default), the procedure
 waits for the device to finish processing the current print request. If
 True, the device is removed immediately and the interrupted print request
 is requeued.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Queue.Remove ("Terminal_250",True);

 removes the device on physical line 250 from the spooler. Because of the
 value True, the device is removed immediately.

 The command:

   Queue.Remove ("Terminal_250");

 removes the device on physical line 250 from the spooler. Because of the
 default value False, the print request currently printing on device 250
 completes before the device is removed.


 REFERENCES

 procedure Add
 procedure Enable
 procedure Register



 @node !Commands.Queue.Restart_Print_Spooler

 procedure Restart_Print_Spooler;

 DESCRIPTION

 Starts or restarts the print spooler.

 If the spooler is already running, this command has no effect. The spooler
 must be running to successfully execute any queue operation.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.



 @node !Commands.Queue.Unregister

 procedure Unregister (Device : String     := "";
                       Class  : Class_Name := "");

 DESCRIPTION

 Dissociates the device from the specified class.

 The Unregister command reverses the Register command. The Unregister com-
 mand dissociates a device from a class but leaves the device known to the
 print spooler. (Note that the Remove procedure disables the device,
 dissociates it from its classes, and then removes the device from the
 print spooler.)


 PARAMETERS

 Device : String := "";

 Specifies the device by physical line number. The line number takes the
 form Terminal_N, where N is the number of the port to which the device is
 attached. The default is no physical line number.


 Class : Class_Name := "";

 Specifies a class that is registered to the device. The default is no
 class. A remote machine name cannot be specified to unregister a device on
 a remote machine.


 RESTRICTIONS

 Execution of this command requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Queue.Unregister ("Terminal_250","lp");

 dissociates class LP from the device using port 250.


 REFERENCES

 procedure Add
 procedure Create
 procedure Destroy
 procedure Register



 @node !Commands.Scheduler

 The medium-term scheduler tracks jobs and regulates their access to CPU,
 memory, and disk resources. The procedures in package Scheduler monitor
 and fine-tune the scheduler's allocation of resources to jobs. By
 fine-tuning the scheduler, the user can cause it to devote resources to
 improving the performance of interactive jobs or increasing the
 throughput of batch jobs. See the Session and Job Management (SJM) book
 for more information about controlling jobs.


 RESOURCES IN PACKAGE SCHEDULER

 The commands in this package fall into the following functional groups:

 Individual jobs:

             Disable                   Disk_Waits
             Enable                    Enabled
             Get_Cpu_Priority          Get_Cpu_Time_Used
             Get_Job_Attribute         Get_Job_Descriptor
             Get_Job_Kind              Get_Job_State
             Get_Wsl_Limits            Job_Descriptor
             Job_Kind                  Job_State
             Set_Job_Attribute         Set_Wsl_Limits
             Traverse_Job_Descriptor   Use_Default_Wsl_Limits
             Working_Set_Size

 System activity:

             Get_Disk_Wait_Load        Get_Run_Queue_Load
             Get_Withheld_Task_Load    Load_Factor

 Scheduler settings:

             Display                   Get
             Set                       State


 KEY CONCEPTS FOR PACKAGE SCHEDULER

 The settings for the medium-term scheduler are typically set by the
 initialization procedure in world Rational. These values should be
 sufficient; see your Rational technical representative if you want to use
 different settings.

 The operations that set values in this package require that the job
 executing the procedure have operator capability. Operations that display
 values do not require any special access.

 With the Set procedure, the user can set values for the various scheduler
 parameters that enable, disable, and adjust CPU scheduling, memory
 scheduling, disk scheduling, and background job streams. (Each of these
 topics is discussed in its own section below.) With the Display procedure,
 the user can display the current values for the scheduler parameters.

 The State procedure displays indexes of overall system activity such as
 run load, disk wait load, withheld task load, and number of available
 memory pages. The following commands also return specific information about
 system activity:

        Get_Disk_Wait_Load
        Get_Withheld_Task_Load
        Get_Run_Queue_Load

 Package Scheduler also provides procedures and functions that allow the
 user to enable, disable, and get information about individual jobs. The
 Disable and Enable procedures suspend and resume a given job. The State
 procedure displays information about resource allocation to individual
 jobs, and the Display procedure displays information specifically about
 jobs on the background job streams. Along with the State and Display
 procedures, the following commands return specific information about
 individual jobs:

        Display                         Get_Cpu_Priority
        Get_Cpu_Time_Used               Get_Job_Kind
        Get_Job_State                   Get_Wsl_Limits
        State


 Jobs

 A job is a set of Ada tasks that act together. A job is initiated each
 time the user edits an object or executes a command. For scheduling
 purposes, some jobs are associated with (or mapped to) others. For
 example, the aggregate of jobs initiated by editing images and objects
 within a single session are scheduled as a single job.


 Job Numbers

 Whenever a job starts or is created, it is assigned a unique Job_Id (job
 identification number), which is a number from 0 through 255. The
 procedures in package Scheduler manipulate jobs by job number, or Job_Id.
 Thus, jobs and job numbers are often referred to as Job_Id in the
 description of individual commands.


 Foreground and Background Jobs

 Jobs are divided into two major classes for purposes of allocating
 resources:

 *  Foreground jobs are typically highly interactive and require fast
    response. They are allocated the majority of system resources, and the
    scheduler attempts to guarantee that each foreground job makes
    satisfactory progress.

 *  Background jobs are batch jobs and do not require especially fast
    response. They are allocated the remaining resources after foreground
    jobs are handled. The scheduler does not attempt to guarantee that each
    background job makes progress.

 The treatment of foreground and background jobs is described more
 precisely under "CPU Scheduling," below.


 Job Kinds

 Within the general division of foreground and background, jobs are
 allocated resources according to their kind. In some cases, a job's kind
 is determined internally by the Environment; in other cases, it is
 determined by the user. The user can use the Get_Job_Kind function to
 determine a given job's kind.

 The kinds of jobs are:

 *  Core-editor (Ce) jobs include operations for editing images--for
    example, commands that control the cursor or search for strings. The
    Environment determines precisely which operations count as core-editor
    jobs.

 *  Object-editor (Oe) jobs include operations for debugging programs and
    for editing structured objects--for example, commands that select
    objects. The Environment determines precisely which operations count
    as object-editor jobs.

 *  Attached jobs are commands entered by users that are not core-editor or
    object-editor operations. While an attached job executes, the
    message-window banner displays ...running and the terminal is
    unavailable for other operations.

 *  Detached jobs result either from interrupting an attached job using
    [Control] [G] (the Job.Interrupt procedure) or from entering a command
    using [Control] [Promote] (the Command.Spawn procedure). The terminal
    can be used for other operations while detached jobs execute.

 *  Server jobs are background jobs that must always have resources
    available when needed--for example, the print spooler. The user can
    designate a job as a server using the Set_Job_Attribute procedure.

 *  Terminated jobs are not allocated any resources. A terminated job
    remains in the system until its job number is reused for another job.

 (Note that all job kinds are defined as enumerations of the Job_Kind type.)

 Job kinds are related to job classes as follows:

 *  Core-editor and object-editor jobs are allocated foreground resources.

 *  Detached jobs and servers are allocated background resources.

 *  Attached jobs receive foreground resources until a certain amount of
    time has elapsed, after which attached jobs receive background
    resources. (The time limit on attached jobs is determined by the
    Foreground_Time_Limit scheduler parameter, which the user can set
    using the Set procedure.) Having a time limit on foreground jobs
    induces users to run long jobs in the background, rather than depleting
    foreground resources.


 Job States

 Jobs typically pass through various states: Run, Idle, Wait, Disabled, and
 Queued. These states are enumerations of the Job_State type. The user can
 use the Get_Job_State function to determine a given job's current state.

 Foreground and background jobs alternate between the Run and Wait states
 as they execute:

 *  A job in the Run state (also called a running job) is either currently
    consuming CPU time or eligible to consume CPU time. That is, at any
    given time, there may be several running jobs, of which only one is
    actually using CPU time while the rest wait their turn.

 *  A job in the Idle state is not executing. It uses no CPU time and has
    no unblocked tasks. For example, jobs that are waiting for I/O or
    that have all tasks blocked are in the Idle state. Also, jobs such as
    the print spooler are in the Idle state until a request arrives.

 *  A job in the Wait state (also called a withheld job is temporarily
    ineligible for CPU time. The scheduler puts a job in the Wait state if:

    -  The job has already used more than its share of CPU time and the
       system load is too high.

    -  The job is waiting for disk resources and the disk wait load is too
       high.

    -  The job is using pages of memory that are needed to replenish the
       reserve supply of available pages.

 *  A withheld job returns to the Run state when the scheduler determines
    that the job is eligible for resources again.

 *  A job in the Disabled state is not executing. It has been rendered
    ineligible for CPU time by users or programs executing the
    !Commands.Job.Disable procedure or the Scheduler.Disable procedure.

 *  The Queued state is relevant for certain kinds of background
    jobs--namely, all detached jobs and those attached jobs that have
    passed the Foreground_Time_Limit. Jobs such as these are queued for
    resources on one of several background job streams (see "Background
    Job Streams," below). However, because only a restricted number of jobs
    on each stream can be in the Run or Wait state at a time, the remaining
    jobs are put in the Queued state. In other words, a job in the Queued
    state is a job that is waiting on a background job stream until the
    executing jobs ahead of it have completed or have been moved onto
    another stream.


 Scheduling Review Interval

 The scheduler makes scheduling decisions every 100 milliseconds. (These
 100-millisecond intervals are called review intervals.) At the end of
 every review interval, the scheduler reviews the actual usage of
 resources during the last 100 milliseconds and then, based on the actual
 usage, decides whether to withhold jobs during the next 100 milliseconds
 to keep resource usage within certain limits. Note that the scheduler does
 not actually control the allocation of resources, but rather it monitors
 and adjusts resource consumption to maintain a balance among different
 kinds of jobs. The scheduler itself is not subject to scheduling; it uses
 0.5-1% of CPU resources.

 The following subsections give a partial description of the scheduler's
 effect on CPU scheduling, memory scheduling, and disk scheduling. These
 subsections contain the information the user needs about the scheduler in
 order to set the scheduler parameters using the Set procedure.


 CPU Scheduling

 CPU time is distributed among foreground and background jobs, with
 preference given to foreground jobs. Because foreground jobs need to make
 consistent progress with the best possible performance, CPU time is made
 available first to foreground jobs and then to background jobs. However,
 to prevent foreground jobs

 from consuming all CPU resources, a minimum percentage of CPU time can be
 designated for background jobs. This minimum percentage is determined by
 the Percent_For_Background scheduler parameter, which the user can set
 using the Set procedure. (Note that even though some CPU time is
 guaranteed, background jobs will not make progress unless they also have
 disk and memory resources.)

 If there are no background jobs, foreground jobs can receive the CPU time
 that was reserved for background jobs. Similarly, background jobs can
 receive more than their reserved CPU time, provided that no foreground
 jobs need time.


 Foreground Jobs

 The scheduler follows separate policies for scheduling the CPU time that
 is allocated to foreground and background jobs. To ensure consistent
 progress for all foreground jobs, the scheduler attempts to give each
 session that has foreground jobs an equal share of the foreground CPU
 time. That is, if two users have foreground jobs, each user's session is
 given half of the available foreground CPU time. In contrast, individual
 background jobs are given CPU time according to their Ada task priority
 and to their placement on a background job stream (see "Background
 Jobs," below).

 Foreground CPU scheduling applies to core-editor jobs, object-editor jobs,
 and attached jobs. However, to discourage users from running long jobs in
 the foreground, the scheduler can be adjusted to give foreground
 resources to attached jobs only for a limited time. (The time limit is set
 by the Foreground_Time_Limit scheduler parameter.) After the foreground
 time limit has expired for an attached job, the job is subject to
 background CPU scheduling.

 To schedule foreground time equitably, the scheduler does the following at
 the end of each review interval:

 1. Determines how much foreground CPU time each job has used during the
    current review interval.

 2. Calculates the ideal CPU usage for each job, giving a fair share to
    each session that had foreground jobs during the interval.

 3. Compares the actual usage to the ideal usage and determines whether the
    job has used more or less time than it should have. The foreground
    budget for each job is credited or debited accordingly.

 4. Decides whether to withhold a job for the next interval. A job is
    withheld (put in the Wait state) if both of the following are true:

    a. The job has accumulated an overall debt in its foreground budget
       (that is, the value of the job's foreground budget is negative).

    b. The run load exceeds a preset level.

 5. Decides whether to release jobs that were withheld from previous
    intervals and return them to the Run state. A job is released after it
    has accumulated enough credit in its foreground budget over one or more
    review intervals to make up for whatever debt it has previously
    incurred.

 Run Load

 The run load is the average number of tasks that require CPU time during a
 review interval. Tasks are counted if they are currently consuming CPU
 time or are eligible to consume CPU time. Withheld and idle tasks are
 not reflected in the run load. The run load is averaged over a review
 interval and then multiplied by 100 so that it appears as an integer. For
 example, if an average of 1.3 tasks are in the Run state, the run load is
 130.

 The scheduler uses the run load to determine whether or not a job can be
 withheld after that job has used more than its share of CPU time. The
 user can specify the minimum run load at which the scheduler can withhold
 jobs by using the Set procedure to set the Withhold_Run_Load parameter.

 Number of Withheld Jobs

 By default, the scheduler can withhold only one additional job at the end
 of a given review interval, no matter how many jobs are eligible for
 withholding after that interval. (However, there is no restriction on the
 total number of withheld jobs at any given time, because multiple withheld
 jobs can accumulate after a number of intervals.) The user can permit the
 scheduler to withhold more than one job per review interval by changing
 the value for the Withhold_Multiple_Jobs scheduler parameter to True. (See
 the Set procedure.)

 Foreground Budget

 As a job uses more or less than its fair share of CPU time, the job's
 foreground budget is debited or credited accordingly at the end of each
 review interval. The value of a job's budget at the end of a given
 interval therefore represents the net debt or credit accumulated over
 successive intervals. If, on the balance, the job has used more than its
 allocated time, its budget value is negative. For a withheld job, this
 negative value expresses how much time the job must accumulate over sub-
 sequent intervals in order to be released and returned to the Run state.
 If, on the other hand, the job has used less than its overall allocated
 time, its budget value is positive. A positive budget value prevents the
 job from being withheld and expresses how much extra time the job can
 use before going into debt. If the job has used exactly as much time as it
 was allocated, the budget value breaks even at 0.

 The scheduler imposes a limit on the amount of accumulated credit or debt
 a job can have. That is, no matter how much extra time a job has used,
 there is a maximum overall debt that the job can incur. Consequently, if
 the job is withheld, there is a limit to the amount of credit it has to
 accumulate before it can run again. Similarly, no matter how little time
 the job used relative to its allotment, there is a maximum overall
 credit that the job can earn. Consequently, there is a limit to how much
 extra time the job can use before going into debt.

 The user can adjust the credit and debit limits on the foreground budget
 by using the Set procedure to set the Max_Foreground_Budget and
 Min_Foreground_Budget scheduler parameters, respectively. The wider the
 range between the Max_Foreground_Budget and Min_Foreground_Budget
 values, the more sensitive the scheduler is to giving jobs equal time.
 When the range is narrower, the distribution of CPU time is less equal.


 Background Jobs

 As a group, background jobs (detached jobs, servers, and aged attached
 jobs) are guaranteed a percentage of CPU time, as determined by the
 Percent_For_Background scheduler parameter. However, the scheduler does
 not track the amount of time used by each background job, nor does the
 scheduler attempt to ensure that each job is allotted a fair share of the
 available CPU time. Instead, the allocation of CPU time is determined by
 Ada task priorities.


 Background Job Streams

 Without a guarantee of equal CPU time, it is possible for a single
 long-running background job to block a number of shorter jobs. To avoid
 this, background job streams can be set up to queue long-running jobs to
 expedite shorter jobs. Only two kinds of background jobs are subject to
 queuing on the background job streams--namely, detached jobs and attached
 jobs that have run longer than the Foreground_Time_Limit. Servers are not
 subject to queuing on these streams.

 By default, there is one background job stream, although the user can
 arbitrarily set up streams by using the Set procedure to set the
 Background_Streams scheduler parameter. The Display procedure displays
 information about each background job stream.

 Job-Stream Time Limits

 Each background job stream has an associated time limit, which specifies
 the maximum amount of elapsed time a job can run on that stream. If a job
 that is running on a stream has not yet finished when the time limit is
 reached, the job is queued onto the next stream.

 For example, the user could set up three streams with the following time
 limits:

        Stream 1: 2 minutes
        Stream 2: 5 minutes
        Stream 3: 20 minutes

 With these limits, a job queued on stream 1 can run for 2 minutes. If the
 job has not finished within that time, it is queued onto stream 2, where it
 waits its turn to run. (Meanwhile, another job on stream 1 can now run.)
 Once the job is eligible to run on stream 2, it can run for 5 more
 minutes. If the job requires more than 5 minutes, it is queued onto stream
 3, so that subsequent jobs on stream 2 can run. Once the job is eligible
 to run on stream 3, it can run for another 20 minutes. If the job requires
 even more time, it is moved to the bottom of the queue on stream 3. After
 the jobs ahead of it have finished or have been requeued, the job gets
 another 20 minutes, and so on.

 The time limits for each stream are determined by the Stream_Time
 parameter (see the Set procedure).

 Note that a job on a job stream uses temporary disk space that is not
 reclaimed until the job is done. Allowing many jobs to accumulate on
 multiple job streams can cause a shortage of disk space. If the
 Stream_Time value for a job stream is low, jobs on that stream are more
 likely to be requeued before they can finish. A high Stream_Time value
 permits jobs to complete without being requeued.

 Number of Runnable Jobs on a Stream

 Each stream has an associated prescribed number of jobs that can be
 running at a given time. These numbers are specified by the Stream_Jobs
 parameter (see the Set procedure). If a job stream contains more jobs than
 are permitted to run at a given time, the excess jobs are put in the
 Queued state to wait until the jobs ahead of them are finished or requeued
 to the next stream.

 For example, if the Stream_Jobs value for a stream is 2, then only two
 jobs on that stream can be in the Run or Wait state at a time. Therefore,
 if ten jobs are on that stream, eight jobs must be in the Queued state.

 Strict Stream Policy

 Although the Stream_Jobs parameter specifies a prescribed number of
 runnable jobs per stream, the actual number of running jobs on each stream
 is also determined by the presence or absence of strict stream policy.
 When strict stream policy is in effect, the Stream_Jobs value for a given
 stream is always the maximum number of jobs that can run concurrently on
 that stream. In contrast, when strict stream policy is not in effect, the
 number of jobs on a given stream can exceed the relevant Stream_Jobs
 value, provided that other streams are empty. However, although the
 distribution of runnable jobs across streams is affected, the total number
 of jobs running on all streams taken together cannot exceed the total of
 the Stream_Jobs values for all the streams.

 For example, under strict stream policy, a system with three streams might
 have the following Stream_Jobs values:

       Stream 1: 2 jobs
       Stream 2: 1 job
       Stream 3: 1 job

 If jobs are queued in all three streams, a maximum of four jobs can be
 running--specifically, only the first two jobs in stream 1, the first job in
 stream 2, and the first job in stream 3. If streams 1 and 3 are empty, the
 maximum number of running jobs across all streams is only one, because
 stream 2 has a value of 1. Strict stream policy prohibits extra jobs from
 running on stream 2, no matter how many jobs are queued.

 If strict stream policy is not in effect, then the maximum number of
 running jobs is always four, even when some streams are empty. That is, if
 streams 1 and 3 are empty, up to four jobs can run on stream 2, because
 the empty streams contribute their Stream_Jobs values to the nonempty
 stream.

 The following Stream_Jobs values make sense only if strict stream policy
 is not in effect:

       Stream 1: 3 jobs
       Stream 2: 0 jobs
       Stream 3: 0 jobs

 If strict stream policy were in effect, jobs queued on streams 2 and 3
 would never run, because their Stream_Jobs values are 0. However, because
 strict stream policy is not in effect (by default), jobs queued on streams
 2 or 3 can run whenever stream 1 has fewer than three jobs in its queue.

 Strict stream policy is controlled by the value of the
 Strict_Stream_Policy scheduler parameter.


 Memory Scheduling

 Each job uses pages of main memory while executing. On most R1000 systems,
 the memory size is either 32,768 or 65,536 pages, each of which contains
 1,024 bytes. The number of pages in memory is defined by the
 !Lrm.System.Memory_Size constant.

 The scheduler dynamically adjusts the allocation of memory to give pages
 to jobs that need more and to reclaim pages from jobs that need fewer. The
 number of pages used by a job is called the job's job working set size. To
 prevent any one job

 from consuming a disproportionate amount of memory resources, the
 scheduler places a limit on each job's working set size. This limit,
 called the job working set limit, is the maximum number of pages a job can
 use without penalty.

 Jobs started by the Environment or by the system daemon have fixed working
 set limits. The user can specify these working set limits by setting the
 Environment_Wsl and Daemon_Wsl scheduler parameters, respectively. In
 contrast, the working set limit for each user job is determined
 dynamically. When a job is created, it is given an initial working set
 limit, which is adjusted at regular intervals to ensure adequate
 allocation of pages to all jobs.

 The value of a job's initial working set limit depends on what kind of job
 it is (see "Job Kinds," above). The values of scheduler parameters such as
 Min_Ce_Wsl, Min_Oe_Wsl, and so on determine the initial working set limit
 for each kind of job.

 At the end of every review interval, the scheduler checks each job's
 working set size. If the job's working set size exceeds its working set
 limit, the scheduler increases the job's limit by a fixed number of
 pages. The user can specify this number by setting the Wsl_Growth_Factor
 scheduler parameter.

 The scheduler tries to keep each job's working set limit close to its
 working set size. Therefore, in addition to automatically increasing the
 working set limit ten times a second, the scheduler automatically
 decreases each job's working set limit every 5 seconds. The limit is
 decreased by a fixed number of pages, which the user can specify by setting
 the Wsl_Decay_Factor scheduler parameter.

 The growth and decay of the working set limits for each kind of job are
 kept within a range of values that are specified by scheduler parameters.
 For example, the lowest possible working set limit for core-editor jobs is
 determined by the Min_Ce_Wsl parameter (which is also the value of the
 initial working set limit). The highest possible working set limit for
 core-editor jobs is determined by Max_Ce_Wsl. Similarly, the range for
 object-editor working set limits is determined by Min_Oe_Wsl and
 Max_Oe_Wsl, and so on for attached jobs, detached jobs, and servers. These
 parameters can be used to give preference to some kinds of jobs over
 others. For example, the default values for Max_Detached_Wsl and Max_At-
 tached_Wsl give background user jobs more than twice as much memory as
 foreground user jobs. The user can temporarily override the maximum and
 minimum working set limits for a given job by using the Set_Wsl_Limits
 procedure.

 The scheduler reserves a number of pages for distribution among jobs that
 need more memory. If the number of available pages falls below a given
 limit, the scheduler withholds jobs as needed and contributes the freed
 pages to the reserve. The user can specify the minimum number of pages
 kept on reserve by setting the Minimum_Available_Memory scheduler
 parameter.


 Page Withdrawal

 During every review interval, the scheduler withdraws a fixed number of
 pages from memory. Withdrawn pages are earmarked for possible removal from
 the jobs that are using them. However, a withdrawn page is not actually
 taken away from a job unless that job exceeds its working set limit during
 the review interval.

 Withdrawing pages serves two purposes, namely:

 *  To help account for pages that are shared by multiple jobs. When a
    shared page is withdrawn, its use is charged to the first job to request
    it again. Accurately accounting for the use of shared pages is
    necessary for determining the working set size of each job.

 *  To earmark pages from overallocated jobs for potential use by
    underallocated jobs. If a job exceeds its working set limit, the excess
    pages are withdrawn so that they can be allocated to other jobs.

 The user can specify the number of pages withdrawn per review interval by
 setting the Page_Withdrawal_Rate scheduler parameter.


 Disk Scheduling

 The scheduler measures disk activity through an index called the disk wait
 load. The disk wait load is the average number of tasks waiting on disk
 operations, including page faults and disk I/O operations. The disk wait
 load is averaged over an internally determined interval of time and then
 multiplied by 100, so that it is expressed as an integer. For example, if
 an average of 1.5 tasks are waiting for pages from disk at a given time,
 the disk wait load is 150.

 The scheduler regulates disk activity by monitoring the disk wait load and
 withholding one or more jobs when the load exceeds a certain limit. The
 user can set this limit by setting the Max_Disk_Load scheduler parameter.
 The user can also ensure a minimum level of disk activity by setting the
 Min_Disk_Load scheduler parameter. Together, the Max_Disk_Load and
 Min_Disk_Load parameters define a range of acceptable stress on the disks.
 The wider the range, the less sensitive the scheduler is to changes in the
 disk wait load.


 @node !Commands.Scheduler.Cpu_Priority


 subtype Cpu_Priority is Natural range 0 .. 6;

 DESCRIPTION

 Identifies priority of access to CPU resources.

 A Cpu_Priority of 0 is the lowest; a Cpu_Priority of 6 is the highest. The
 higher a job's priority, the more CPU time the job gets. Background jobs
 have a Cpu_Priority of 0; foreground jobs have a Cpu_Priority of 6. (Values
 1 through 5 are reserved for future Environment implementations.)



 @node !Commands.Scheduler.Disable

 procedure Disable (Job : Job_Id);

 DESCRIPTION

 Suspends temporarily the job with the specified Job_Id.

 A disabled job can be resumed with the Enable procedure.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 procedure Enable



 @node !Commands.Scheduler.Disk_Waits

 function Disk_Waits (Job : Job_Id) return Long_Integer;

 DESCRIPTION

 Returns the number of disk waits the specified job has had since last
 initialized.

 A disk wait occurs whenever a job has to wait for disk resources. The
 number of disk waits is derived from a combination of page faults and disk
 I/O operations. A high number of disk waits indicates heavy disk activity;
 a low number indicates light disk activity.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 return Long_Integer;



 Returns the number of disk waits.



 @node !Commands.Scheduler.Display

 procedure Display (Show_Parameters : Boolean := True;
                    Show_Queues     : Boolean := True);

 DESCRIPTION

 Displays the current values for the scheduler parameters along with
 information about background job streams in the current output window.

 For each background job stream, this procedure displays the value of the
 Stream_Time parameter, a list of the jobs currently in the stream, and
 the number of minutes each job has been in the stream. An asterisk next to
 a job indicates that the job is currently running--that is, it has job
 state Run. A job without an asterisk has job state Queued.

 The user can change the values for the scheduler parameters by using the
 Set procedure.


 PARAMETERS

 Show_Parameters : Boolean := True;

 Specifies, when true, a display of the current values for the scheduler
 parameters.


 Show_Queues : Boolean := True;

 Specifies, when true, a display of background job-stream information.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 EXAMPLES

 The command:

   Scheduler.Display (True,False);

 produces a display such as the following:

   Cpu_Scheduling    : Enabled
   Disk_Scheduling   : Disabled
   Memory_Scheduling : Enabled

   Percent_For_Background         : 20%
   Min_ and Max_Foreground_Budget :-250 .. 250 milliseconds
   Withhold_Run_Load              : 130
   Withhold_Multiple_Jobs         : FALSE

   Environment_Wsl           : 11000 pages
   Daemon_Wsl                : 200 pages
   Min_ and Max_Ce_Wsl       : 150 .. 500 pages
   Min_ and Max_Oe_Wsl       : 75 .. 750 pages
   Min_ and Max_Attached_Wsl : 50 .. 4000 pages
   Min_ and Max_Detached_Wsl : 50 .. 5000 pages
   Min_ and Max_Server_Wsl   : 75 .. 1000 pages
   Min_Available_Memory      : 1024 pages
   Wsl_Decay_Factor          : 50 pages/5 seconds
   Wsl_Growth_Factor         : 50 pages/100 milliseconds
   Page_Withdrawal_Rate      : 1*640 pages/second

   Min_ and Max_Disk_Load : 200 .. 250

   Foreground_Time_Limit   : 300 seconds
   Background_Streams      : 3
   Strict_Stream_Policy    : FALSE
   Stream_Time and _Jobs 1 : 2 minutes, 3 jobs
   Stream_Time and _Jobs 2 : 58 minutes, 1 job
   Stream_Time and _Jobs 3 : 50 minutes, 0 jobs

 The command:

   Scheduler.Display (False,True);

 produces a display such as the following in the current output window:

      Stream 1          2:00
         252   9:14
       * 223   8:00
         253   3:46
       * 219   3:29
         238   0:48
      Stream 2          58:00
       * 220   5:00
         261   2:49
      Stream 3          0:00
       * 222   2:00
         254   1:26

 This display shows five jobs in stream 1, of which two are currently
 running and the rest are queued. The job that has been in that stream the
 longest is listed first and has been there for 9 minutes and 14 seconds.
 The display also shows running and queued jobs in streams 2 and 3.


 REFERENCES

 procedure Set



 @node !Commands.Scheduler.Enable

 procedure Enable (Job : Job_Id);

 DESCRIPTION

 Resumes the execution of the specified disabled job.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 procedure Disable



 @node !Commands.Scheduler.Enabled

 function Enabled (Job : Job_Id) return Boolean;

 DESCRIPTION

 Returns a Boolean indicating whether the specified job is currently enabled
 for execution.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 return Boolean;



 Returns True when the job is enabled.



 @node !Commands.Scheduler.Get

 function Get (Parameter : String) return Integer;

 DESCRIPTION

 Returns the current value for the specified scheduler parameter.

 The names and possible values of the scheduler parameters are listed under
 the Set procedure.


 PARAMETERS

 Parameter : String;

 Specifies any of the strings listed under the Set procedure.


 return Integer;

 Returns the current value for the specified scheduler parameter.


 REFERENCES

 procedure Set



 @node !Commands.Scheduler.Get_Cpu_Priority

 function Get_Cpu_Priority (Job : Job_Id) return Cpu_Priority;

 DESCRIPTION

 Returns the priority at which the specified job is currently running.

 The value ranges from 0 (lowest) through 6 (highest). The higher the
 priority, the more CPU time the job gets.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 return Cpu_Priority;

 Returns the priority at which the specified job is currently running.



 @node !Commands.Scheduler.Get_Cpu_Time_Used

 function Get_Cpu_Time_Used (Job : Job_Id) return Milliseconds;

 DESCRIPTION

 Returns the number of milliseconds of CPU time used by the specified job
 since that job began.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 return Milliseconds;

 Returns the amount of CPU time in milliseconds.



 @node !Commands.Scheduler.Get_Disk_Wait_Load

 procedure Get_Disk_Wait_Load (Last_Sample     : out Load_Factor;
                               Last_Minute     : out Load_Factor;
                               Last_5_Minutes  : out Load_Factor;
                               Last_15_Minutes : out Load_Factor);

 DESCRIPTION

 Returns the average number of tasks waiting for pages from disk.

 The number is averaged over each of four sampling intervals: 100
 milliseconds, 1 minute, 5 minutes, and 15 minutes. Each average is
 multiplied by 100, so that it appears as an integer.


 PARAMETERS

 Last_Sample : out Load_Factor;

 Specifies disk wait load averaged over the last 100 milliseconds.


 Last_Minute : out Load_Factor;

 Specifies disk wait load averaged over the last minute.

                                                                           
 Last_5_Minutes : out Load_Factor;

 Specifies disk wait load averaged over the last 5 minutes.


 Last_15_Minutes : out Load_Factor;

 Specifies disk wait load averaged over the last 15 minutes.



 @node !Commands.Scheduler.Get_Job_Attribute

 function Get_Job_Attribute (Job       : Job_Id;
                             Attribute : String  := "Kind")
                                            return String;

 DESCRIPTION

 Returns the attributes for a job as described in the Set_Job_Attribute
 procedure.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 Attribute : String := "Kind";

 Specifies the attribute to be checked. The only attribute currently
 supported is "Kind", which returns an image of an enumeration of the
 Job_Kind type.


 return String;

 Returns a string representing an enumeration of the Job_Kind type.


 EXAMPLES

 The following program segment illustrates the use of the Get_Job_Attribute
 function to display the job attribute for user job number 244:

      ...
         A: Scheduler.Job_Id := 244;
      begin
         Io.Put(Scheduler.Get_Job_Attribute(Job=>A,Attribute=>"Kind"));
      end;  


 REFERENCES

 procedure Set_Job_Attribute



 @node !Commands.Scheduler.Get_Job_Descriptor

 function Get_Job_Descriptor (Job : Job_Id) return Job_Descriptor;

 DESCRIPTION

 Returns the current value of a job's statistics.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 return Job_Descriptor;

 Returns a record of the Job_Descriptor type. See the Job_Descriptor type
 for further information about the contents of that record.


 REFERENCES

 type Job_Descriptor



 @node !Commands.Scheduler.Get_Job_Kind

 function Get_Job_Kind (Job : Job_Id) return Job_Kind;

 DESCRIPTION

 Returns the current Job_Kind type of the specified job.

 This function specifies one of the six kinds of jobs defined by the Job_Kind
 type: Ce (core editor), Oe (object editor), Attached, Detached, Server, or
 Terminated. The scheduler follows a different scheduling policy for each
 of these job kinds.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 return Job_Kind;

 Returns one of the six kinds of job defined by the Job_Kind type, as listed
 above.



 @node !Commands.Scheduler.Get_Job_State

 function Get_Job_State (Job : Job_Id) return Job_State;

 DESCRIPTION

 Returns the current Job_State type of the specified job.

 This function returns one of the five job states defined by the Job_State
 type: Run, Wait, Idle, Disabled, or Queued. Job_State reflects how the
 scheduler has disposed of a job--that is, whether the job is earmarked for
 running or is considered unrunnable for some reason.


 PARAMETERS

 Job : Job_Id;

 Specifies the job number.


 return Job_State;

 Returns one of the five job states defined by the Job_State type, as listed
 above.



 @node !Commands.Scheduler.Get_Run_Queue_Load

 procedure Get_Run_Queue_Load (Last_Sample     : out Load_Factor;
                               Last_Minute     : out Load_Factor;
                               Last_5_Minutes  : out Load_Factor;
                               Last_15_Minutes : out Load_Factor);

 DESCRIPTION

 Returns the number of runnable, unblocked tasks, averaged over each of
 four sampling intervals: 100 milliseconds, 1 minute, 5 minutes, and 15
 minutes.

 Runnable tasks are neither withheld nor idle, but they are either
 currently consuming CPU time or eligible to consume CPU time.

 Each average is multiplied by 100, so that it appears as an integer.


 PARAMETERS

 Last_Sample : out Load_Factor;

 Specifies the run queue load averaged over the last 100 milliseconds.


 Last_Minute : out Load_Factor;

 Specifies the run queue load averaged over the last minute.


 Last_5_Minutes : out Load_Factor;

 Specifies the run queue load averaged over the last 5 minutes.


 Last_15_Minutes : out Load_Factor;

 Specifies the run queue load averaged over the last 15 minutes.


 REFERENCES

 Session and Job Management (SJM), procedure What.Load



 @node !Commands.Scheduler.Get_Withheld_Task_Load

 procedure Get_Withheld_Task_Load
                             (Last_Sample     : out Load_Factor;
                              Last_Minute     : out Load_Factor;
                              Last_5_Minutes  : out Load_Factor;
                              Last_15_Minutes : out Load_Factor);

 DESCRIPTION

 Returns the number of tasks that are withheld from running, averaged over
 each of four sampling intervals: 100 milliseconds, 1 minute, 5 minutes,
 and 15 minutes.

 Each average is multiplied by 100, so that it appears as an integer.

 A task (job) is withheld from running if it is consuming more than its
 share of resources or if it has been queued or disabled.


 PARAMETERS

 Last_Sample : out Load_Factor;

 Specifies the number of withheld tasks averaged over the last 100
 milliseconds.


 Last_Minute : out Load_Factor;

 Specifies the number of withheld tasks averaged over the last minute.


 Last_5_Minutes : out Load_Factor;

 Specifies the number of withheld tasks averaged over the last 5 minutes.


 Last_15_Minutes : out Load_Factor;

 Specifies the number of withheld tasks averaged over the last 15 minutes.



 @node !Commands.Scheduler.Get_Wsl_Limits

 procedure Get_Wsl_Limits (Job      :     Job_Id;
                           Min, Max : out Natural);

 DESCRIPTION

 Returns the minimum and maximum working set limits that are currently in
 effect for the specified job.

 These limits may be the temporary limits set by the Set_Wsl_Limits
 procedure, or they may be the limits defined by the relevant scheduler
 parameters (Min_ and Max_Ce_Wsl, Min_ and Max_Oe_Wsl, and the like), which
 are described under the Set procedure and in the introduction to this
 package.


 PARAMETERS

 Job : Job_Id;

 Specifies the number of the job whose minimum and maximum working set
 limits the user wants to see.


 Min : out Natural;

 Returns the current minimum working set limit for the given job.


 Max : out Natural;

 Returns the current maximum working set limit for the given job.


 REFERENCES

 procedure Set_Wsl_Limits
 procedure Use_Default_Wsl_Limits



 @node !Commands.Scheduler.Job_Descriptor

 type Job_Descriptor is
     record
         The_Cpu_Priority            : Cpu_Priority;
         The_State                   : Job_State;
         The_Disk_Waits              : Long_Integer;
         The_Time_Consumed           : Milliseconds;
         The_Working_Set_Size        : Natural;
         The_Working_Set_Limit       : Natural;
         The_Milliseconds_Per_Second : Natural;
         The_Disk_Waits_Per_Second   : Natural;
         The_Maps_To                 : Job_Id;
         The_Kind                    : Job_Kind;
         The_Made_Runnable           : Long_Integer;
         The_Total_Runnable          : Long_Integer;
         The_Made_Idle               : Long_Integer;
         The_Made_Wait               : Long_Integer;
         The_Wait_Disk_Total         : Long_Integer;
         The_Wait_Memory_Total       : Long_Integer;
         The_Wait_Cpu_Total          : Long_Integer;
         The_Min_Working_Set_Limit   : Long Integer;
         The_Max_Working_Set_Limit   : Long Integer;
      end record;

 DESCRIPTION

 Specifies a record that contains information returned by many of the
 functions in this package.

 This is a convenient way of storing all of the available information for a
 particular job.

 The_Cpu_Priority component

 Contains the priority at which the specified job is currently running, as
 returned by the Get_Cpu_Priority function. Specifies the value range, from
 0 (lowest) through 6 (highest). The higher the priority, the more CPU time
 the job gets.

 The_State component

 Contains the current job state of the specified job, as returned by the
 Get_Job_State function. Specifies one of the five job states defined by the
 Job_State type: Run, Wait, Idle, Disabled, or Queued. Job state reflects
 how the scheduler has disposed of the job--that is, whether the job is
 earmarked for running or is considered unrunnable for some reason.

 The_Disk_Waits component

 Contains the number of disk waits the specified job has had since last
 initialized, as returned by the Disk_Waits function. A disk wait occurs
 whenever the job has to wait for disk resources. The number of disk waits
 is derived from a combination of page faults and disk I/O operations. A
 high number of disk waits indicates heavy disk activity; a low number
 indicates light disk activity.

 The_Time_Consumed component

 Returns the number of milliseconds of CPU time used by the specified job
 since that job began.

 The_Working_Set_Size component

 Contains the number of pages of memory used by the specified job, as
 returned by the Working_Set_Size function.

 The_Working_Set_Limit component

 Contains the limit that the scheduler places on the job's working set
 size. This limit is the maximum number of pages the job can use without
 penalty. The working set limit for the user job is determined dynamically.
 When the job is created, it is given an initial working set limit, which
 is adjusted at regular intervals to ensure adequate allocation of pages to
 all jobs.

 The value of the job's initial working set limit depends on the kind of
 job it is. The values of scheduler parameters such as Min_Ce_Wsl,
 Min_Oe_Wsl, and so on determine the initial working set limit for the
 job.

 The_Milliseconds_Per_Second component

 Contains the number of milliseconds of CPU time the job has used in the
 last 5-second evaluation interval, as shown in the CPU MS/S field of the
 display resulting from execution of the State procedure.

 The_Disk_Waits_Per_Second component

 Contains the number of disk waits the job had in the last 5-second
 evaluation interval, as shown by the Disk DW/S field of the display
 resulting from execution of the State procedure.

 The_Maps_To component

 Contains the core editor (if any) the job is grouped with for CPU
 scheduling purposes, as shown by the Map To field of the display
 resulting from execution of the State procedure.

 The_Kind component

 Contains the policy used by the scheduler to allocate resources to the
 job, as in the Job_Kind type.

 In general, Ce, Oe, and Attached jobs are interactive and require enough
 resources for constant forward progress. Detached jobs (and aged Attached
 jobs) are not interactive and therefore do not require a constant supply
 of resources.

 The_Made_Runnable component

 Contains the number of times the job entered the Run state. For further
 information, see "Job Kinds" in the introduction to this package.

 The_Total_Runnable component

 Contains the number of times the job was available to enter the Run state.
 For further information, see "Job Kinds" in the introduction to this
 package.

 The_Made_Idle component

 Contains the number of times the job entered the Idle state. For further
 information, see "Job Kinds" in the introduction to this package.

 The_Made_Wait component

 Contains the number of times the job entered the Wait state. For further
 information, see "Job Kinds" in the introduction to this package.

 The following three components give information about why the job went
 into the Wait state.

 The_Wait_Disk_Total component

 Contains the number of times the job entered the Wait state because it was
 waiting for disk space.

 The_Wait_Memory_Total component

 Contains the number of times the job entered the Wait state because it was
 waiting for memory.

 The_Wait_Cpu_Total component

 Contains the number of times the job entered the Wait state because it was
 waiting for CPU time.

 The_Min_Working_Set_Limit component

 Contains the minimum working set limit that is currently in effect for the
 specified job.

 This limit may be the temporary limit set by the Set_Wsl_Limits procedure,
 or it may be the limit defined by the relevant scheduler parameters
 (Min_Ce_Wsl, Min_Oe_Wsl, and the like), which are described under the
 Set procedure and in the introduction to this package.

 The_Max_Working_Set_Limit component

 Returns the maximum working set limits that are currently in effect for
 the specified job.

 This limit may be the temporary limit set by the Set_Wsl_Limits procedure,
 or it may be the limit defined by the relevant scheduler parameters
 (Max_Ce_Wsl, Max_Oe_Wsl, and the like), which are described under the
 Set procedure and in the introduction to this package.


 REFERENCES

 function Get_Job_Descriptor
 procedure Set
 procedure State
 generic formal procedure Traverse_Job_Descriptors.Put



 @node !Commands.Scheduler.Job_Id

 subtype Job_Id is Machine.Job_Id;

 DESCRIPTION

 Specifies the form of Job_Id.

 Job_Ids are assigned uniquely for each instance of system activity.
 Job_Ids are often referred to as job numbers.



 @node !Commands.Scheduler.Job_Kind

 type Job_Kind is (Ce, Oe, Attached, Detached, Server, Terminated);

 DESCRIPTION

 Determines the policy used by the scheduler to allocate resources to a
 job.

 In general, Ce, Oe, and Attached jobs are interactive and require enough
 resources for constant forward progress. Detached jobs (and aged Attached
 jobs; see the Attached enumeration, below) are not interactive and
 therefore do not require a constant supply of resources.


 ENUMERATIONS


 Attached

 Specifies that the job is a foreground job; the message-window banner
 displays ...running while an Attached job executes. An Attached job is
 scheduled to receive its share of the foreground CPU time until the
 Foreground_Time_Limit is reached. (Foreground_Time_Limit is set using the
 Set procedure.) After the time limit is reached, the job is aged. The term
 aged means that although it is still attached, the job receives a smaller
 amount of CPU time and is subject to queuing in the background job
 streams, as if it were detached.


 Ce

 Specifies that the job (a core editor) is scheduled to receive its share of
 foreground CPU time.


 Detached

 Specifies that the job is running in the background, either started in the
 background by the !Commands.Command.Spawn procedure or put there by the
 !Commands.Job.Interrupt procedure. A Detached job is eligible to receive
 CPU time, although it generally receives less CPU time than an Attached
 job. A Detached job is subject to queuing on a background job stream.


 Oe

 Specifies that the job (an object editor) is scheduled to receive its share
 of foreground CPU time.


 Server

 Specifies that the job is a Server, which is a background job that must
 always have resources available to it when it needs them. An example of a
 Server is the print spooler. A Server is allocated the resources of a
 background job; however, unlike other background jobs, a Server is not
 subject to queuing in the background job streams, so that it is always
 eligible to run.


 Terminated

 Specifies that the job has completed. A Terminated job remains until its
 number (Job_Id) is reused for another job.



 @node !Commands.Scheduler.Job_State

 type Job_State is (Run, Wait, Idle, Disabled, Queued);

 DESCRIPTION

 Indicates how the scheduler has disposed of a job--that is, whether or not
 the job is eligible for CPU time.

 This information is displayed in the S column of the !Commands.What.Users
 display.


 ENUMERATIONS


 Disabled

 Specifies that the job is ineligible for CPU time because an external agent
 has disabled it, for example, using the !Commands.Job.Disable procedure or
 the Scheduler.Disable procedure.


 Idle

 Specifies that the job uses no CPU time and has no unblocked tasks. For
 example, the print spooler remains Idle until called.


 Queued

 Specifies that the job is in a background job stream but not currently in
 the Run or Wait (withheld) state. A Queued job is a background job that is
 ineligible for CPU time until one or more other jobs have completed.


 Run

 Specifies that the job is eligible for CPU time, providing its priority is
 high enough.


 Wait

 Specifies that the job has been withheld from running by the scheduler. (A
 withheld job is temporarily ineligible for CPU time.) The scheduler puts
 a job in the Wait state if:

 *  The job has already used more than its share of CPU time and the system
    load is too high.

 *  The job is waiting for pages from disk and the disk wait load is too
    high.



 @node !Commands.Scheduler.Load_Factor

 subtype Load_Factor is Natural;

 DESCRIPTION

 Defines a representation for the load on the system.

 When multiplied by 100, the load factor is the number of tasks waiting in
 a queue. For example, for a given interval, if an average of 1.3 tasks are
 waiting for a page from disk, then the disk wait load is 130.



 @node !Commands.Scheduler.Milliseconds

 subtype Milliseconds is Long_Integer;

 DESCRIPTION

 Defines a way of representing an amount of time in milliseconds.



 @node !Commands.Scheduler.Set

 procedure Set (Parameter : String    := "";
                Value     : Integer);

 DESCRIPTION

 Sets the specified scheduler parameter to the specified value.

 The Set procedure allows the user to set one parameter at a time. The
 executing job must have operator capability.
                                                                           
 The user can change scheduler parameters to adjust aspects of CPU
 scheduling, memory scheduling, disk scheduling, and background job
 streams. The descriptions of the scheduler parameters below assume that
 the user has read the introduction to this package for general
 information about the scheduler.

 The Display procedure displays the current values for scheduler
 parameters. The user can also use the Get function to get the current
 value for a given scheduler parameter.


 PARAMETERS

 Parameter : String := "";

 Specifies the scheduler parameter whose value is to be set. The acceptable
 string names for these parameters are listed in the following tables. In
 addition, the value "defaults" restores all parameters to their default
 values.


 Value : Integer;

 Specifies integer values for scheduler parameters. The acceptable values
 are listed in the following tables.

 There are scheduler parameters for adjusting CPU scheduling, memory
 scheduling, disk scheduling, and background job streams. The following
 tables summarize the string names of these parameters, their possible
 values, and their default values. The parameters are discussed in greater
 detail following the tables.

                  Table 1    Scheduler Parameters for CPU
              ---------------------------------------------- 
             |              |           |    |              |
             |              |           |Defa|              |
             |Parameter     |Range of   |ult |Description   |
             |              |Values     |Valu|              |
             |              |           |e   |              |
              ---------------------------------------------- 
             |              |           |    |              |
             |Cpu_Scheduling|0 or 1     |1   |Specifies     |
             |              |(off or on)|    |whether to    |
             |              |           |    |disable (0)   |
             |              |           |    |or enable (1) |
             |              |           |    |CPU           |
             |              |           |    |scheduling.   |
              ---------------------------------------------- 
             |              |           |    |              |
             |Percent_For_  |0..90      |20  |Specifies the |
             |Background    |(percent)  |    |minimum       |
             |              |           |    |percentage of |
             |              |           |    |CPU allo-     |
             |              |           |    |cated to      |
             |              |           |    |background    |
             |              |           |    |jobs.         |
              ---------------------------------------------- 
             |              |           |    |              |
             |Min_          |-5000..0   |-250|Specifies the |
             |Foreground_   |(millisecon|    |maximum debt  |
             |Budget        |ds)        |    |that a job's  |
             |              |           |    |foreground    |
             |              |           |    |budget can    |
             |              |           |    |show.         |
              ---------------------------------------------- 
             |              |           |    |              |
             |Max_          |0..5000    |250 |Specifies the |
             |Foreground_   |(millisecon|    |maximum credit|
             |Budget        |ds)        |    |that a job's  |
             |              |           |    |foreground    |
             |              |           |    |budget can    |
             |              |           |    |show.         |
              ---------------------------------------------- 
             |              |           |    |              |
             |Withhold_Run_ |0..900     |130 |Specifies the |
             |Load          |(Load_     |    |minimum run   |
             |              |Factor)    |    |load at which |
             |              |           |    |the scheduler |
             |              |           |    |can withhold  |
             |              |           |    |jobs.         |
              ---------------------------------------------- 
             |              |           |    |              |
             |Withhold_     |0 or 1     |0   |Specifies     |
             |Multiple_Jobs |(False or  |    |whether or not|
             |              |True)      |    |multiple      |
             |              |           |    |additional    |
             |              |           |    |jobs can be   |
             |              |           |    |withheld at a |
             |              |           |    |time.         |
              ---------------------------------------------- 



                 Table 2    Scheduler Parameters for Memory
              ---------------------------------------------- 
             |              |           |    |              |
             |              |           |Defa|              |
             |Parameter     |Range of   |ult |Description   |
             |              |Values     |Valu|              |
             |              |           |e   |              |
              ---------------------------------------------- 
             |              |           |    |              |
             |Memory_       |0 or 1     |1   |Specifies     |
             |Scheduling    |(off or on)|    |whether to    |
             |              |           |    |disable (0)   |
             |              |           |    |or enable (1) |
             |              |           |    |memory        |
             |              |           |    |scheduling.   |
              ---------------------------------------------- 
             |              |           |    |              |
             |Environment_  |1..memory  |1100|Specifies the |
             |Wsl           |size       |0   |working set   |
             |              |(pages)    |    |limit for the |
             |              |           |    |Environment.  |
              ---------------------------------------------- 
             |              |           |    |              |
             |Daemon_Wsl    |1..memory  |200 |Specifies the |
             |              |size       |    |working set   |
             |              |(pages)    |    |limit for jobs|
             |              |           |    |started by the|
             |              |           |    |system daemon.|
              ---------------------------------------------- 
             |              |           |    |              |
             |Min_Ce_Wsl    |1..max_ce_ |150 |Specifies the |
             |              |wsl        |    |minimum       |
             |              |           |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |core-         |
             |              |           |    |editor jobs.  |
              ---------------------------------------------- 
             |              |           |    |              |
             |Max_Ce_Wsl    |min..memory|500 |Specifies the |
             |              |size       |    |maximum       |
             |              |           |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |core-         |
             |              |           |    |editor jobs.  |
              ---------------------------------------------- 
             |              |           |    |              |
             |Min_Oe_Wsl    |1..max_oe_ |75  |Specifies the |
             |              |wsl        |    |minimum       |
             |              |           |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |object-editor |
             |              |           |    |jobs.         |
              ---------------------------------------------- 
             |              |           |    |              |
             |Max_Oe_Wsl    |min..memory|750 |Specifies the |
             |              |size       |    |maximum       |
             |              |           |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |object-editor |
             |              |           |    |jobs.         |
              ---------------------------------------------- 
             |              |           |    |              |
             |Min_Attached_ |1..max_    |50  |Specifies the |
             |Wsl           |attached_  |    |minimum       |
             |              |wsl        |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |attached jobs.|
              ---------------------------------------------- 
             |              |           |    |              |
             |Max_Attached_ |min..memory|2000|Specifies the |
             |Wsl           |size       |    |maximum       |
             |              |           |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |attached jobs.|
              ---------------------------------------------- 
             |              |           |    |              |
             |Min_Detached_ |1..max_    |50  |Specifies the |
             |Wsl           |detached_  |    |minimum       |
             |              |wsl        |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |detached jobs.|
              ---------------------------------------------- 
             |              |           |    |              |
             |Max_Detached_ |min..memory|4000|Specifies the |
             |Wsl           |size       |    |maximum       |
             |              |           |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |detached jobs.|
              ---------------------------------------------- 
             |              |           |    |              |
             |Min_Server_Wsl|1..max_    |75  |Specifies the |
             |              |server_wsl |    |minimum       |
             |              |           |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |servers.      |
              ---------------------------------------------- 
             |              |           |    |              |
             |Max_Server_Wsl|min..memory|1000|Specifies the |
             |              |size       |    |maximum       |
             |              |           |    |working set   |
             |              |           |    |limit for     |
             |              |           |    |servers.      |
              ---------------------------------------------- 
             |              |           |    |              |
             |Min_Available_|0..memory  |1024|Specifies the |
             |Memory        |size       |    |minimum number|
             |              |(pages)    |    |of pages of   |
             |              |           |    |memory that   |
             |              |           |    |should always |
             |              |           |    |be available  |
             |              |           |    |for           |
             |              |           |    |distribution. |
              ---------------------------------------------- 
             |              |           |    |              |
             |Wsl_Decay_    |0..2000    |50  |Specifies the |
             |Factor        |(pages)    |    |amount by     |
             |              |           |    |which a user  |
             |              |           |    |job's work-   |
             |              |           |    |ing set limit |
             |              |           |    |is decreased  |
             |              |           |    |every 5       |
             |              |           |    |seconds.      |
              ---------------------------------------------- 
             |              |           |    |              |
             |Wsl_Growth_   |0..2000    |50  |Specifies the |
             |Factor        |(pages)    |    |amount by     |
             |              |           |    |which a user  |
             |              |           |    |job's work-   |
             |              |           |    |ing set limit |
             |              |           |    |is increased. |
              ---------------------------------------------- 
             |              |           |    |              |
             |Page_         |0..64      |1   |Specifies the |
             |Withdrawal_   |(640       |    |rate at which |
             |Rate          |pages/     |    |pages are     |
             |              |second)    |    |withdrawn     |
             |              |           |    |from memory.  |
              ---------------------------------------------- 



                  Table 3    Scheduler Parameters for Disk
              ---------------------------------------------- 
             |              |           |    |              |
             |              |           |Defa|              |
             |Parameter     |Range of   |ult |Description   |
             |              |Values     |Valu|              |
             |              |           |e   |              |
              ---------------------------------------------- 
             |              |           |    |              |
             |Disk_         |0 or 1     |1   |Specifies     |
             |Scheduling    |(off or on)|    |whether to    |
             |              |           |    |disable (0)   |
             |              |           |    |or enable (1) |
             |              |           |    |disk          |
             |              |           |    |scheduling.   |
              ---------------------------------------------- 
             |              |           |    |              |
             |Max_Disk_Load |positive   |250 |Specifies the |
             |              |(Load_     |    |maximum       |
             |              |Factor)    |    |acceptable    |
             |              |           |    |disk wait load|
             |              |           |    |before jobs   |
             |              |           |    |are withheld. |
              ---------------------------------------------- 
             |              |           |    |              |
             |Min_Disk_Load |positive   |200 |Specifies the |
             |              |(Load_     |    |minimum       |
             |              |Factor)    |    |acceptable    |
             |              |           |    |disk wait     |
             |              |           |    |load.         |
              ---------------------------------------------- 



         Table 4    Scheduler Parameters for Background Job Streams
              ---------------------------------------------- 
             |              |           |    |              |
             |              |           |Defa|              |
             |Parameter     |Range of   |ult |Description   |
             |              |Values     |Valu|              |
             |              |           |e   |              |
              ---------------------------------------------- 
             |              |           |    |              |
             |Foreground_   |positive   |1800|Specifies how |
             |Time_Limit    |(seconds)  |    |long an       |
             |              |           |    |attached job  |
             |              |           |    |can run be-   |
             |              |           |    |fore it gets  |
             |              |           |    |allocated     |
             |              |           |    |background    |
             |              |           |    |resources.    |
              ---------------------------------------------- 
             |              |           |    |              |
             |Background_   |positive   |3   |Specifies the |
             |Streams       |(streams)  |    |number of     |
             |              |           |    |background job|
             |              |           |    |streams.      |
              ---------------------------------------------- 
             |              |           |    |              |
             |Stream_Time N |1..43200   |2,8,|Specifies the |
             |              |(minutes)  |50  |time limit    |
             |              |           |    |associated    |
             |              |           |    |with the job  |
             |              |           |    |stream        |
             |              |           |    |numbered N.   |
             |              |           |    |Each stream   |
             |              |           |    |has its own   |
             |              |           |    |default.      |
              ---------------------------------------------- 
             |              |           |    |              |
             |Stream_Jobs N |0..5       |2,1,|Specifies the |
             |              |(jobs)     |0   |number of jobs|
             |              |           |    |that can be   |
             |              |           |    |running on the|
             |              |           |    |job streams   |
             |              |           |    |numbered N.   |
             |              |           |    |(Each stream  |
             |              |           |    |has its own   |
             |              |           |    |default.)     |
              ---------------------------------------------- 
             |              |           |    |              |
             |Strict_Stream_|0 or 1     |0   |Specifies     |
             |Policy        |(False or  |    |whether strict|
             |              |True)      |    |stream policy |
             |              |           |    |is in effect  |
             |              |           |    |(True) or not |
             |              |           |    |(False).      |
              ---------------------------------------------- 




 Parameters for CPU Scheduling
 

 Cpu_Scheduling

 Specifies whether to enable or disable CPU scheduling independently of
 memory or disk scheduling. When CPU scheduling is disabled, all jobs are
 run according to Ada task priorities; no attempt is made to guarantee
 equal time to each foreground job. The value of Cpu_Scheduling is either 0
 (disabled) or 1 (enabled). The default value is 1 (enabled).
 

 Percent_For_Background

 Specifies the minimum percentage of the CPU that is allocated to background
 jobs. The default value, 20, means that at least 20% of the CPU can be
 used by the background job stream at any time.
 

 Min_Foreground_Budget

 Specifies the limit on how much accumulated debt a job's foreground budget
 can show. Excess debt is ignored.

 The value of Min_Foreground_Budget is a negative number of milliseconds
 from -5,000 through 0. The default value is -250 milliseconds.
 

 Max_Foreground_Budget

 Specifies the limit on how much accumulated credit a job's foreground
 budget can show. Excess credit is ignored. The wider the range between
 Max_ and Min_Foreground_Budget, the more sensitive the scheduler is to
 giving jobs equal time.

 The value of Max_Foreground_Budget is a positive number of milliseconds
 from 0 through 5,000. The default value is 250 milliseconds.
 

 Withhold_Run_Load

 Specifies the minimum run load at which the scheduler is permitted to
 withhold jobs. The higher the value, the more heavily loaded the system
 must be before the scheduler can withhold a job for exceeding its
 allocated time.

 The value for Withhold_Run_Load must be an integer from 0 through 900. The
 default value for Withhold_Run_Load is 130. The run load value is the
 average number of tasks that are eligible to run, multiplied by 100.
 

 Withhold_Multiple_Jobs

 Specifies whether the scheduler is restricted to withholding only one more
 job per review interval (in addition to any jobs that were withheld on
 previous intervals). When the value for Withhold_Multiple_Jobs is 1
 (True), the scheduler can withhold multiple jobs in response to
 oversubscribed CPU resources. When the value is 0 (False), the scheduler
 can withhold at most one job at the end of a single interval.

 The default value for Withhold_Multiple_Jobs is 0 (False).


 Parameters for Memory Scheduling
 

 Memory_Scheduling

 Specifies whether to enable or disable memory scheduling independently of
 CPU or disk scheduling. The value of Memory_Scheduling is either 0
 (disabled) or 1 (enabled). The default value is 1 (enabled).
 

 Environment_Wsl

 Specifies the working set limit for the Environment. A higher value gives
 the Environment more pages, so that there are fewer pages for daemon and
 user jobs. A lower value gives the Environment fewer pages, so that there
 are more pages for daemon and user jobs.

 The value for Environment_Wsl is an integer from 0 to the number of pages
 in main memory. However, if the user specifies a value that is too high to
 leave adequate resources for other jobs, an error message is displayed.
 The default value for Environment_Wsl is 11,000.
 

 Daemon_Wsl

 Specifies the working set limit for jobs started by the system daemon (see
 package Daemon). A higher value gives the daemon more pages, so that there
 are fewer pages for the Environment and user jobs. A lower value gives the
 daemon fewer pages, so that there are more pages for the Environment and
 user jobs.

 The value for Daemon_Wsl is an integer from 0 to the number of pages in
 main memory. However, if the user specifies a value that is too high to
 leave adequate resources for other jobs, an error message is displayed.
 The default value for Daemon_Wsl is 200.

 
 Min_Ce_Wsl,Min_Oe_Wsl,Min_Attached_Wsl,Min_Detached_Wsl,Min_Server_Wsl

 Specifies the minimum working set limit for the following kinds of jobs:
 core editor (Ce), object editor (Oe), Attached, Detached, and Server,
 respectively. That is, when a job's working set limit is decreased by
 Wsl_Decay_Factor, that working set limit cannot fall below the value set
 by the appropriate parameter. The value for each parameter also determines
 the initial working set limit that is given to each kind of job upon
 creation.

 The value for each parameter is an integer number of pages from 1 to the
 value of the corresponding Max_ parameter (see below). For a given job, the
 Set_Wsl_Limits procedure temporarily overrides the minimum working set
 limit set by any of these parameters.

 
 Max_Ce_Wsl, Max_Oe_Wsl, Max_Attached_Wsl, Max_Detached_Wsl, Max_Server_Wsl

 Specifies the maximum working set limit for the following kinds of jobs:
 core editor (Ce), object editor (Oe), Attached, Detached, and Server,
 respectively. That is, when a job's working set limit is increased by
 Wsl_Growth_Factor, that working set limit cannot exceed the value set by
 the appropriate parameter. These parameters can be used to give
 preference to some kinds of jobs over others. For example, the default
 values for Max_Detached_Wsl and Max_Attached_Wsl give background user
 jobs twice as much memory as foreground user jobs.

 The value for Max_Ce_Wsl is an integer number of pages from the value of
 the corresponding Min_ parameter (see above) to the memory size. For a
 given job, the Set_Wsl_Limits procedure temporarily overrides the maximum
 working set limit set by any of these parameters.
 

 Min_Available_Memory

 Specifies the minimum number of pages that should always be available to
 the scheduler for dynamic distribution among jobs. If the number of
 reserve pages falls below the minimum, the scheduler withholds jobs from
 running.

 If the value is large, more pages are reserved and fewer pages are
 actually being used, possibly resulting in performance decrease. If the
 value is small, fewer pages are reserved, so that memory is more fully
 utilized.

 The value of Min_Available_Memory is an integer number of pages from 0
 through 2,000. The default value for Min_Available_Memory is 1,024.
 

 Wsl_Decay_Factor

 Specifies the amount by which a user job's working set limit is
 automatically decreased every 5 seconds.

 The value for Wsl_Decay_Factor is an integer number of pages from 0
 through 2,000. The default value for Wsl_Decay_Factor is 50.
 

 Wsl_Growth_Factor

 Specifies the amount by which a user job's working set limit is
 automatically increased if the job's working set size has exceeded the
 working set limit during a review interval.

 The value for Wsl_Growth_Factor is an integer number of pages from 0
 through 2,000. The default value for Wsl_Growth_Factor is 50.
 

 Page_Withdrawal_Rate

 Specifies the rate at which pages are withdrawn from memory. A higher Page-
 _Withdrawal_Rate means that the scheduler makes more passes through memory
 during a given period of time, so that pages are withdrawn more
 frequently. Therefore, when the Page_Withdrawal_Rate is high, the
 scheduler can charge pages to jobs with more accuracy and can check large
 jobs for reclaimable pages more frequently. However, the increased
 activity may degrade the scheduler's performance.

 The value for Page_Withdrawal_Rate is an integer from 0 through 64. This
 value designates a multiple of the following unit rate: 640 pages per
 second. When Page_Withdrawal_Rate is 0, no pages are withdrawn. When
 Page_Withdrawal_Rate is 1 (the default value), then the scheduler passes
 through memory at a rate of 1 X 640 pages per second. At this rate, the
 scheduler makes a complete pass every 51.2 seconds.


 Parameters for Disk Scheduling

 
 Disk_Scheduling

 Specifies whether to enable or disable disk scheduling independently of CPU
 or memory scheduling. The value of Disk_Scheduling is either 0 (disabled)
 or 1 (enabled). The default value is 1.
 

 Max_Disk_Load

 Specifies the maximum acceptable disk wait load before the scheduler
 withholds jobs that are waiting for disk resources. The disk wait load is
 the number of tasks waiting to read or write a page from disk, averaged
 over an interval of time and multiplied by 100.

 Specifies whether to enable or disable disk scheduling independently of CPU
 or memory scheduling. The value of Disk_Scheduling is either 0 (disabled)
 or 1 (enabled). The default value is 1.

 A high Max_Disk_Load value permits increased disk activity; with more jobs
 waiting on the disk, performance for individual jobs may decrease. A low
 Max_Disk_Load value restricts disk availability; with fewer jobs waiting
 on the disk, more jobs are withheld and performance for individual running
 jobs may improve. Together, the Max_Disk_Load and Min_Disk_Load
 parameters define a range of acceptable stress on the disks. The wider
 the range, the less sensitive the scheduler is to changes in the disk wait
 load.

 The value for Max_Disk_Load is a positive integer that must be greater
 than the value for Min_Disk_Load. The default value for Max_Disk_Load is
 250 (that is, an average of 2.5 tasks waiting for disk resources at any
 given time). See also the Get_Disk_Wait_Load procedure and the Load_Factor
 subtype.

 
 Min_Disk_Load

 Specifies the minimum acceptable disk wait load before action is taken. If
 the disk wait load falls below the limit specified by Min_Disk_Load, the
 scheduler releases withheld jobs that were waiting for disk resources.

 The value for Min_Disk_Load is a positive integer that must be greater
 than the value for Max_Disk_Load. The default value for Min_Disk_Load is
 200 (that is, an average of two tasks waiting for disk resources at any
 given time). See also the Get_Disk_Wait_Load procedure and the Load_Factor
 subtype.

 
 Parameters for Background Job Streams                                      

 
 Foreground_Time_Limit

 Specifies how long, in seconds, an attached job can run before it is
 allocated background job resources and is subject to queuing on
 background job streams. To give more preference to foreground jobs, use a
 higher value. To encourage users to run long jobs in the background, use a
 lower value.

 The default value for Foreground_Time_Limit is 1,800 seconds (30 minutes).

 
 Background_Streams

 Specifies the number of background job streams. When there are multiple job
 streams, they are numbered from 1 to the value of Background_Streams.

 The default for Background_Streams is 3.

 
 Stream_Time N

 Specifies the time limit, in minutes, associated with the job stream
 numbered N. Stream_Time limits the time elapsed since a job began running
 on job stream N.

 Note that allowing many jobs to remain queued on job streams may cause a
 shortage of disk space. Jobs are more likely to be requeued before they
 finish if the Stream_Time value for a stream is low, whereas a high
 Stream_Time value permits jobs to run to completion without being
 requeued.

 The value for each Stream_Time parameter is a number of minutes from 1
 through 43,200. The default values for Stream_Times 1 through 3 are 2, 8,
 and 50 minutes, respectively.
 

 Stream_Jobs N

 Specifies the number of jobs that can be running on the job stream numbered
 N.

 The value for each Stream_Jobs parameter is an integer from 0 through 5. A
 value of 0 makes sense only if the value of Strict_Stream_Policy is 0
 (False). The default values for Stream_Jobs 1 through 3 are 2, 1, and 0,
 respectively.
 

 Strict_Stream_Policy

 Specifies whether strict stream policy is in effect (True) or not (False).

 The value for Strict_Stream_Policy is either 0 (False) or 1 (True). The
 default is 0.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 procedure Display
 function Get
 procedure Get_Disk_Wait_Load
 subtype Load_Factor



 @node !Commands.Scheduler.Set_Job_Attribute

 procedure Set_Job_Attribute (Job       : Job_Id;
                              Attribute : String  := "Kind";
                              Value     : String  := "Server");

 DESCRIPTION

 Permits the user to change a job attribute.


 PARAMETERS

 Job : Job_Id;

 Specifies the number of the job.


 Attribute : String := "Kind";

 Specifies the attribute. Currently the only attribute supported is "Kind",
 which permits the user to specify which kind of job the current job should
 be. This is useful in specifying jobs as servers.


 Value : String := "Server";

 Specifies the value for the attribute. The default sets the job kind to a
 server.

 The allowable values are the string representations of the enumerations of
 the Job_Kind type: Ce, Oe, Attached, Detached, Server, and Terminated.



 @node !Commands.Scheduler.Set_Wsl_Limits

 procedure Set_Wsl_Limits (Job      : Job_Id;
                           Min, Max : Natural);

 DESCRIPTION

 Sets temporary minimum and maximum working set limits that apply only to
 the specified job.

 For the duration of that job, these temporary limits override the limits
 defined by the relevant scheduler parameters (Min_ and Max_Ce_Wsl, Min_ and
 Max_Oe_Wsl, and the like), which are described under the Set procedure and
 in the introduction to this package. Note that, while the job is running,
 the user can use the Use_Default_Wsl_Limits procedure to revert to the
 limits that are defined by the scheduler parameters.


 PARAMETERS

 Job : Job_Id;

 Specifies the number of the job whose minimum and maximum working set
 limits the user wants to set.


 Min : Natural;

 Specifies the temporary minimum working set limit for the given job. This
 value must be greater than 0 and less that the value of Max.


 Max : Natural;

 Specifies the temporary maximum working set limit for the given job. This
 value must be greater than the value of Min and less than the memory size.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 procedure Get_Wsl_Limits
 procedure Set
 procedure Use_Default_Wsl_Limits



 @node !Commands.Scheduler.State

 procedure State;

 DESCRIPTION

 Displays the current scheduler state.


 EXAMPLES

 The command:

   Scheduler.State;

 produces a display such as the following:

 Job   K/S/P  Stat     CPU      CPU   Disk   Disk    WSet   WSet  Map   Run
               Age   Seconds    MS/S  DW/S   Waits   Size  Limit   To  Ratio
 -----------------------------------------------------------------------------
   4   A/R/0  ++++  23149.914   23.8   0.0  ++++++  11001  11000       1.00
   5   A/R/0  ++++  32280.679    0.0   0.0    5867    112    200       1.00
 147   C/I/6  3604  00353.021    0.0   0.0   11980    143    150       0.96
 152   C/R/6    19  00316.611   21.4   0.0    2557    147    150       0.98
 160   T/I/6  ++++  00001.235    0.0   0.0      12      1      0       0.91
 162   A/R/6    18  00000.928    0.0   0.0      12    284    300  152  1.00
 163   T/I/6  ++++  00046.213    0.0   0.0     855      8      0       0.99
 164   T/I/6  ++++  00001.113    0.0   0.0       7      1      0       0.65
 170   T/I/6  ++++  00014.207    0.0   0.0    1259      1      0       0.98
 171   T/I/6  ++++  00013.352    0.0   0.0     226      2      0       0.97
 174  *S/I/0  ++++  00000.026    0.0   0.0       2      6     50       1.00
 . . .
 247  *S/I/0  1443  00005.098    0.0   0.0     556      5     75       1.00
 248   C/I/6  ++++  00006.159    0.0   0.0     275      2     10       1.00
 249   C/I/6  ++++  00008.703    0.0   0.0     378      4     10       1.00
 250   C/I/6  ++++  00005.858    0.0   0.0     215      2     10       1.00
 251  *S/I/0  2090  00971.451    0.0   0.0     102     47     75       1.00
 252   C/I/6  ++++  00004.739    0.0   0.0     239      3     10       1.00
 253   C/I/6  ++++  00008.264    0.0   0.0     520      2     10       1.00
 254   T/I/6  ++++  00000.348    0.0   0.0      17      3      0       0.80
 255   C/I/6  ++++  00000.892    0.0   0.0     125      1     10       1.00

   Run Queue Load     => 3.07, 1.31, 1.25, 1.27
   Disk Wait Load     => 0.00, 0.01, 0.01, 0.01
   Withheld Task Load => 0.00, 0.04, 0.04, 0.04
   Available Memory   => 19593 pages

 The first part of the display lists each job by number along with the
 resources that have currently been allocated to it.

 The values that are displayed for each job include:

 Job                     Specifies the job number.                  

 K/S/P                   Shows the job's Kind, State, and Priority. Values
                         for Kind and State are indicated by their first
                         initial (see Job_Kind type and Job_State type). An
                         asterisk before Kind indicates that the job is
                         being allocated background job resources.
 
 Stat Age                Shows how long, in tenths of a second, a job has
                         been in its current state. A series of plus signs
                         indicates that the time has exceeded the display's
                         range.
 
 CPU Seconds             Shows the total amount of CPU time, in seconds,
                         the job has used since it began.
 
 CPU MS/S                Shows the number of milliseconds of CPU time a job
                         has used in the last 5-second evaluation interval.
 
 Disk DW/S               Shows the number of disk waits a job had in the
                         last 5-second evaluation interval.
 
 Disk Waits              Shows the total number of disk waits a job has had
                         since it began.
 
 WSet Size               Shows the job's current working set size, which is
                         the number of pages of memory that the job is
                         using.
 
 WSet Limit              Shows the current working set limit on the job's
                         working set size.
 
 Map To                  Shows what core editor (if any) the job is grouped
                         with for CPU scheduling purposes.
 
 Run Ratio               Shows the percentage of time the job has run, as
                         compared with the total amount of time the job has
                         either run or been withheld. A value of 1.00 means
                         that the job has never been withheld.


 The next second part of the display shows the various load averages
 computed over four intervals: the last 100 milliseconds, the last minute,
 the last 5 minutes, and the last 15 minutes. (These values are also
 returned by the Get_Run_Queue_Load, Get_Disk_Wait_Load, and
 Get_Withheld_Task_Load procedures.)

 The last line displays the number of currently available pages of reserved
 memory.


 REFERENCES

 procedure Get_Disk_Wait_Load
 procedure Get_Run_Queue_Load
 procedure Get_Withheld_Task_Load



 @node !Commands.Scheduler.Traverse_Job_Descriptors

 generic
     with procedure Put (Descriptor : Job_Descriptor);

 procedure Traverse_Job_Descriptors (First, Last : Job_Id);

 DESCRIPTION

 Calls the generic formal procedure Put to display the job descriptors once
 for each job in the range First .. Last.

 This procedure is used to get a consistent, efficient snapshot of the
 statistics of one or more jobs. For further information about the
 information returned, see the Job_Id subtype.


 PARAMETERS

 First : Job_Id;

 Specifies the number of the first job.


 Last : Job_Id;

 Specifies the number of the last job.



 @node !Commands.Scheduler.Traverse_Job_Descriptors.Put

 procedure Put (Descriptor : Job_Descriptor);

 DESCRIPTION

 Writes the descriptors for the Traverse_Job_Descriptors procedure.

 This procedure is called once by the Traverse_Job_Descriptors procedure
 for each job in the range specified in the call to the
 Traverse_Job_Descriptors procedure.


 PARAMETERS

 Descriptor : Job_Descriptor;

 Specifies the information to be written. See the Job_Descriptors type for
 further information.



 @node !Commands.Scheduler.Use_Default_Wsl_Limits

 procedure Use_Default_Wsl_Limits (Job : Job_Id);

 DESCRIPTION

 Cancels the temporary minimum and maximum working set limits that were set
 by the Set_Wsl_Limits procedure for the specified job.

 While the job is running, this procedure allows the user to revert to the
 limits that are defined by the relevant scheduler parameters (Min_ and
 Max_Ce_Wsl, Min_ and Max_Oe_Wsl, and the like). These limits are described
 under the Set procedure and in the introduction to this package.


 PARAMETERS

 Job : Job_Id;

 Specifies the number of the job for which the default minimum and maximum
 working set limits should be in effect.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 procedure Get_Wsl_Limits
 procedure Set
 procedure Set_Wsl_Limits



 @node !Commands.Scheduler.Working_Set_Size

 function Working_Set_Size (Job : Job_Id) return Natural;

 DESCRIPTION

 Returns the number of pages of memory used by the specified job.


 PARAMETERS

 Job : Job_Id;

 Specifies the number of the job.


 return Natural;

 Returns the number of pages of memory used by the specified job.


 RESTRICTIONS

 Execution of this function requires that the executing job have operator
 capability.



 @node !Commands.System_Backup

 The procedures in package System_Backup can be used alone or as part of
 customized procedures to save the Environment state on a regular basis.
 Regular backups ensure that the Environment can be restored with minimal
 loss after a catastrophic system or Environment failure.

 See the System Manager's Guide for more information on the actual steps
 used to take and restore backups, including how to:

 *  Answer a tape-mount request displayed on the operator console following
    the promotion of the Backup command

 *  Assign volume identifiers

    Volume identifiers can be assigned using the Format_Tape procedure
    (described in package Tape) or when responding to a tape-mount request.

 *  Choose among multiple tape-mount requests

 Also refer to the System Manager's Guide for descriptions of other tape
 operations that allow system managers to transfer binary files between
 R1000s using tape (using the Archive.Save and Archive.Restore commands)
 and for information on how to make a DFS (diagnostic file system) backup.


 RESOURCES IN PACKAGE SYSTEM_BACKUP

 The commands in package System_Backup fall into these functional groups:

 Taking a backup: Backup

 Creating a customized backup procedure: Backup_Generic

 Listing previous backups: History


 KEY CONCEPTS FOR PACKAGE SYSTEM_BACKUP

 The Backup command provided in this package can initiate a backup
 immediately or after some specified amount of time, but it cannot perform
 any system adjustments before or after the backup. Therefore, system
 managers normally use commands such as the
 !Commands.Abbreviations.Do_Backup command, which are implemented using the
 Backup_Generic procedure provided in this package. Using instantiations of
 Backup_Generic allows system managers to delay the backup to a specified
 time and to send messages or suspend various system settings for the
 duration of the backup.

 Execution of some of the operations in this package requires that you or
 the executing job have operator capability. This requirement is noted in
 the reference entry if it applies.


 Varieties of Backups

 Regardless of whether the Backup or the Backup_Generic procedure is used,
 the backup process copies the entire Environment onto tape. The three
 varieties of backup are full, primary, and secondary :

 *  Full: Saves the complete Environment, including all user data and
    system information. Full backups are complete and self-sufficient. A
    full backup must be the first backup taken after the system has been
    restored from backup tapes.

 *  Primary: Saves any changes since the last full backup. A primary backup
    cannot be the first backup on a restored system.

 *  Secondary: Saves any changes since the last primary backup. A secondary
    backup cannot be the first backup on a restored system.

 Multiple primary backups can be based on a single full backup; however,
 only one of these primaries can be restored with the full backup.

 Similarly, multiple secondary backups can be based on a single primary
 backup, but only one of these secondaries can be restored with the full
 and primary backup.


 Structure of Backup Tapes

 All varieties of backup write two kinds of information onto tape:

 *  Backup index, which records the system structure

 *  Data, which is all information contained in the Environment

 When backups are taken on 9-track tape drives, the backup index is written
 on a separate tape (also called a blue tape in previous Environment
 releases). When backups are taken on 8-millimeter tape drives, the backup
 index is written immediately following the data on the last data-tape
 cartridge.


 Restoring Backups

 During startup, the system determines whether recovery is needed and asks
 whether you want to proceed with recovery. If you proceed with recovery,
 the system requests the tape containing the backup index so that it can
 initialize the disks. The system then requests the appropriate data tapes
 and loads the data.

 You can recover from a set of backups that includes both full and
 incremental backups only if all the backups are properly "linked" to each
 other. That is:

 *  The secondary backup (if any) must be based on the primary backup in
    the set.

 *  The primary backup must be based on the full backup in the set.

 You can verify these "linkages" by using the History command to look at
 the Taken At and Based On timestamps for each backup.

 After a system is recovered from backup tapes, the next backup taken must
 be a full backup.


 @node !Commands.System_Backup.Backup

 procedure Backup (Variety : Kind := System_Backup.Full);

 DESCRIPTION

 Makes a backup of the specified kind (Full, Primary, or Secondary).

 The default is Full. Note that after a system is recovered from backup
 tapes, the next backup must be a full backup.

 This command is normally not used; instead, most sites use commands such
 as !Commands.Abbreviations.Do_Backup, which instantiate the generic
 procedure Backup_Generic from this package.


 PARAMETERS

 Variety : Kind := System_Backup.Full;

 Specifies a full, primary, or secondary backup. The default is Full.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.

 Backups and disk collection cannot be run at the same time.

 If you have begun a backup and disk collection needs to begin, the backup
 will be terminated by default. To change this default, use the
 !Tools.Disk_Daemon.Set_Backup_Killing (False) procedure, which causes
 the last data tape to be written before disk collection can begin.

 If the disk daemon is running and a backup is attempted, disk collection
 must complete before the backup can begin.

 For further information, see the System Manager's Guide.


 EXAMPLES

 The following command starts a full backup immediately:

   System_Backup.Backup (Full);
 

 REFERENCES

 generic procedure Backup_Generic



 @node !Commands.System_Backup.Backup_Generic

 generic
     with procedure Backup_Starting  (Is_Full        : Boolean);
     with procedure Backup_Finishing (Was_Successful : Boolean);

 procedure Backup_Generic (Variety    : Kind;
                           Wait_Until : String);

 DESCRIPTION

 Provides a more complete form of the Backup procedure.

 The Backup_Generic procedure itself is not used interactively; rather, it
 is instantiated and called with customizable backup commands such as
 !Commands.Abbreviations.Do_Backup. (See the System Manager's Guide for
 more information about this command.)

 A customizable backup command can pass parameters to the Backup_Generic
 procedure to specify:

 *  The kind of backup to be performed (full, primary, or secondary)

 *  The time at which the backup is to begin

 The backup tape can be mounted at any time after the instantiation is
 called and before the backup is scheduled to begin.

 The Backup_Generic procedure provides two formal procedures that can be
 instantiated to set various system characteristics for the duration of
 the backup:

 *  The Backup_Starting formal procedure executes just before the actual
    backup is scheduled to begin.

 *  The Backup_Finishing formal procedure executes immediately after the
    backup finishes.

 Because the !Commands.Abbreviations.Do_Backup command provides a standard
 instantiation for this generic procedure, users do not have to instantiate
 it themselves. However, if desired, a system manager can edit the body
 of !Commands.Abbreviations.Do_Backup to change the standard
 instantiation of the two formal procedures.

 Commands that instantiate and call Backup_Generic require operator
 capability.


 PARAMETERS

 Variety : Kind;

 Specifies a full, primary, or secondary backup.


 Wait_Until : String;

 Specifies the amount of time to wait before starting a backup.


 REFERENCES

 generic formal procedure Backup_Generic.Backup_Finishing
 generic formal procedure Backup_Generic.Backup_Starting



 @node !Commands.System_Backup.Backup_Generic.Backup_Finishing

 procedure Backup_Finishing (Was_Successful : Boolean);

 DESCRIPTION

 Executes immediately after the backup finishes.

 In an instantiation of Backup_Generic, you can use the Backup_Finishing
 procedure to restore various system characteristics that were changed
 just for the duration of the backup.

 In the instantiation provided by the standard
 !Commands.Abbreviations.Do_Backup command, the Backup_Finishing
 procedure restores memory scheduling and snapshot warnings according to
 the settings saved by Backup_Starting.

 If desired, a system manager can edit the body of
 !Commands.Abbreviations.Do_Backup to change the standard instantiation
 of the Backup_Finishing procedure. For example, Backup_Finishing can be
 used to send mail to inform users when the backup has completed.


 PARAMETERS

 Was_Successful : Boolean;

 Specifies whether a backup was successful. If the backup was successful,
 this parameter is set to True.


 REFERENCES

 generic procedure Backup_Generic



 @node !Commands.System_Backup.Backup_Generic.Backup_Starting

 procedure Backup_Starting (Is_Full : Boolean);

 DESCRIPTION

 Executes just before the backup is scheduled to begin.

 In an instantiation of Backup_Generic, you can use the Backup_Starting and
 Backup_Finishing procedures to change various system characteristics
 just for the duration of the backup.

 In the instantiation provided by the standard
 !Commands.Abbreviations.Do_Backup command, the Backup_Starting
 procedure:

 *  Broadcasts a message to all users informing them that a backup is
    beginning

 *  Saves the current memory scheduler and snapshot settings

 *  Turns off memory scheduling and snapshot warnings

 If desired, a system manager can edit the body of
 !Commands.Abbreviations.Do_Backup to change the standard instantiation
 of the Backup_Starting procedure. For example, Backup_Starting can be used
 to turn off disk collection (be sure to use Backup_Finishing to turn on
 disk collection again). This will prevent disk collection from interfering
 with the backup.

 Note: Turning off disk collection is recommended only for backups made on
 the 8-millimeter tape drive, because such backups require significantly
 less time than those made on 9-track tape drives. In any case, turning off
 disk collection is not recommended if the disks are very full.


 PARAMETERS

 Is_Full : Boolean;

 Specifies whether a backup is full or incremental. If the backup is full,
 this parameter is set to True.


 REFERENCES

 generic procedure Backup_Generic



 @node !Commands.System_Backup.History

 procedure History (Entry_Count       : Positive := 10;
                    Full_Backups_Only : Boolean  := False;
                    Tape_Information  : Boolean  := False);

 DESCRIPTION

 Lists the specified number of previous backups.

 By default, this procedure displays history for the ten most recent full,
 primary, and secondary backups. You can use the Full_Backups_Only
 parameter to limit the display to entries for full backups.

 In a backup history display, entries for primary and secondary backups are
 both labeled Incremental Backup. You can distinguish them by looking at
 their timestamps, as follows (see also "Examples," below):

 *  Primary backups are based on full backups; hence, the entry for a
    primary backup contains a Based On date that is identical to the date
    on which the relevant full backup was taken.

 *  Secondary backups are based on primary backups; hence, the entry for a
    secondary backup contains a Based On date that is identical to the
    date on which the relevant primary backup was taken.


 PARAMETERS

 Entry_Count : Positive := 10;

 Specifies the number of the most recent backups that should be included in
 the display.


 Full_Backups_Only : Boolean := False;

 Specifies, when True, that only information on full backups be displayed.
 When False (the default), the display includes information about primary
 and secondary backups as well.


 Tape_Information : Boolean := False;

 Specifies, when True, that the Environment list (in Current_Output) the
 first data tape involved in each backup.


 EXAMPLES

 The command:

   System_Backup.History (Entry_Count       => 10,
                          Full_Backups_Only => False,
                          Tape_Information  => False);

 displays information about the last ten full, primary, and/or secondary
 backups. A portion of this display is shown below:

   Incremental Backup 371 Taken At 11-JUL-91 09:58:35 Based On 09-JUL-91
   07:43:19
     Blue Tape Vol Name => BACKUP, 11-JUL-91 09:55:19 3
     Blue Tape Vol Id   => 020900
     Data Tape Vol Name => BACKUP, 11-JUL-91 09:55:19 3
     Data Tape Vol Id   => 020900
   Incremental Backup 370 Taken At 09-JUL-91 07:43:19 Based On 06-JUL-91
   08:56:25
     Blue Tape Vol Name => BACKUP, 09-JUL-91 07:40:22 3
     Blue Tape Vol Id   => 024300
     Data Tape Vol Name => BACKUP, 09-JUL-91 07:40:22 3
     Data Tape Vol Id   => 024300
   Full Backup 369 Taken At 06-JUL-91 08:56:25
     Blue Tape Vol Name => BACKUP, 06-JUL-91 08:49:22 3
     Blue Tape Vol Id   => 029900
     Data Tape Vol Name => BACKUP, 06-JUL-91 08:49:22 3
     Data Tape Vol Id   => 029900

   ...

   Full Backup 362 Taken At 22-JUN-91 07:45:47
     Blue Tape Vol Name => BACKUP, 22-JUN-91 07:41:51 3
     Blue Tape Vol Id   => 028700
     Data Tape Vol Name => BACKUP, 22-JUN-91 07:41:51 3
     Data Tape Vol Id   => 028700

 This display of backup history shows full, primary, and secondary backups:

 *  Incremental Backup 370 is a primary backup that is based on Full Backup
    369 (the Based On timestamp of the incremental is the same as the Taken
    At date of the full backup).

 *  Incremental Backup 371 is a secondary backup that is based on the
    primary Incremental Backup 370 (the Based On timestamp of the former is
    the same as the Taken At date of the latter).

 Note that the term Blue Tape refers to the tape containing the backup
 index. In the above example, each Blue Tape Vol Id has the same volume
 identifier as its corresponding Data Tape Vol Id entry. This indicates that
 the backup index was written on the same tape as the system data, which is
 true for all single-volume backups written using an 8-millimeter tape
 drive.

 In contrast, a system backup history for a system with a 9-track tape
 drive will show different volume identifiers for the corresponding Blue
 Tape Vol Id and Data Tape Vol Id entries. This occurs because using a
 9-track tape drive causes the backup index and system data to be written
 on physically separate tapes (see "Structure of Backup Tapes," in the
 introduction to this package).


 REFERENCES

 System Manager's Guide



 @node !Commands.System_Backup.Id

 subtype Id is Natural;

 DESCRIPTION

 Specifies the identifier assigned to a backup tape during the backup
 operations.



 @node !Commands.System_Backup.Kind

 type Kind is (Full, Primary, Secondary);

 DESCRIPTION

 Specifies the kind of backup to be taken with the Backup procedure.


 ENUMERATIONS


 Full

 Records the complete state of the Environment--a complete backup.


 Primary

 Records changes in the Environment state since the last full backup--an
 incremental backup.


 Secondary

 Records changes in the Environment since the last primary backup--an
 incremental backup.



 @node !Tools.System_Utilities

 Package System_Utilities offers a set of capabilities for obtaining
 information about various system characteristics. In general, these
 characteristics cannot be altered with procedures in this package.
 Instead, use packages Operator, Scheduler, and Terminal in this book and
 package !Commands.Job in the Session and Job Management (SJM) book.
 Other characteristics are controlled by the Environment and cannot be
 changed explicitly.


 RESOURCES IN PACKAGE SYSTEM_UTILITIES

 Package System_Utilities is used for gathering information. The commands
 in this package fall into the following functional groups.


 Obtaining User Information

                Home_Library       Last_Login
                Last_Logout        Logged_In
                User               User_Name


 Obtaining Session Information

                Error_Name         Get_Session
                Image              Input_Name
                Logged_In          Output_Name
                Session            Session_Id
                Session_Name       Terminal
                User               User_Name

 Related types:

                Image              Object
                Session_Iterator   Version


 Obtaining Job Information

                Cpu                Elapsed
                Get_Job            Get_Page_Counts
                Get_Session        Job_Name
                Priority           Set_Page_Limit

 Related types:

                Job_Id             Job_Iterator


 Obtaining Terminal-Device Information

                Terminal_Columns   Terminal_Lines
                Terminal_Type
                    


 Obtaining Terminal-Port Information

 Disconnect or login characteristics:

          Detach_On_Disconnect          Disconnect_On_Disconnect
          Disconnect_On_Failed_Login    Disconnect_On_Logoff
          Enabled                       Log_Failed_Logins
          Login_Disabled                Logoff_On_Disconnect

 Data traffic:

          Input_Count                   Output_Count

 RS232 ports:

          Character_Size                Input_Rate
          Flow_Control                  Output_Rate
          Parity                        Receive_Flow_Control
          Receive_Xon_Xoff_Bytes        Receive_Xon_Xoff_Characters
          Stop_Bits                     Xon_Xoff_Bytes
          Xon_Xoff_Characters

 Terminal port object:

                Terminal           Terminal_Name

 Related types:

                Byte_String        Character_Bits_Range
                Parity_Kind        Stop_Bits_Range
                Terminal_Iterator
                           


 Obtaining System Information

 Software version:              System_Boot_Configuration

 Disk blocks:                   Bad_Block_List

 Tape devices:                  Tape_Name

 Hardware circuit boards:       Get_Board_Info

 Time since last system boot:   System_Up_Time

 Related types:

                All_Bad_Blocks     Bad_Block_Kinds
                Block_List         Manufacturers_Bad_Blocks
                Retargeted_Blocks  Tape

                                

 Obtaining Information through Iteration Operations

 Iteration capability is provided by the following functions and
 procedures:

                Done               Init
                Next               Value

 Related Types:

                Job_Id             Job_Iterator
                Session_Id         Session_Iterator
                Terminal_Iterator


 KEY CONCEPTS FOR PACKAGE SYSTEM_UTILITIES

 The resources in package System_Utilities supply information about the
 system to procedures and functions defined in packages Operator, Scheduler,
 Tape, and Terminal. Refer to the documentation for these packages in this
 book for instructions on common system-management tasks for setting,
 modifying, or displaying system characteristics.

 System managers and other tool builders can use resources in package
 System_Utilities to implement specialized utilities that need
 information about the objects discussed in this section. Some possible
 applications are suggested in this package introduction and in the
 reference entries.


 Environment Entities Accessed by System_Utilities

 Users access the Environment through terminal devices that are connected
 to the main system through a terminal port. Each user logs in with a
 predefined username ; this login begins a session for the user. From this
 session, the user executes commands that cause jobs to run in the session.

 Package System_Utilities returns information about the following:

 *  Users

 *  Sessions

 *  Jobs

 *  Terminal ports

 *  Terminal devices

 *  Tape devices

 *  Other system hardware


 Users

 Before users can log in and use the facilities of the Rational
 Environment, they must have an account granting access to a user object.
 Existing users with operator capability can create a new user object for
 another person using the Operator.Create_User procedure.

 Users are associated with a username group, a home world (sometimes called
 a home library), an access list (ACL) for that world, and a password.

 Once a user logs into an Environment session, the user can execute jobs
 (see below).

 Table 1 describes the information about users that can be obtained with
 System_Utilities functions.

                   Table 1    Obtaining User Information
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Function  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Version or object that represents a|User      |
             |specified user                     |          |
              ---------------------------------------------- 
             |                                   |          |
             |Username associated with the       |User_Name |
             |specified session                  |          |
              ---------------------------------------------- 
             |                                   |          |
             |Fully qualified pathname of the hom|Home_     |
             |world (commonly called the home    |Library   |
             |library) of a specified user       |          |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified user is        |Logged_In |
             |currently logged in                |          |
              ---------------------------------------------- 
             |                                   |          |
             |Time and date that a specified user|Last_Login|
             |last logged into the Environment   |          |
              ---------------------------------------------- 
             |                                   |          |
             |Time and date that a specified user|Last_     |
             |last logged out of the Environment |Logout    |
              ---------------------------------------------- 



 Table 2 describes the types defined in System_Utilities that access or
 return information about user objects.

         Table 2    Types, Subtypes, and Constants for User Objects
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Resource  |
              ---------------------------------------------- 
             |                                   |          |
             |Defines a representation for a     |type      |
             |version of a directory object      |Version   |
              ---------------------------------------------- 
             |                                   |          |
             |Defines the representation for an  |type      |
             |object in the directory system     |Object    |
              ---------------------------------------------- 



 See package Operator in this book and package Access_List in the Library
 Management (LM) book for more information about username groups, access
 lists, and specific commands that use the System_Utilities functions for
 user objects.


 Sessions

 A session provides a custom-tailored Environment workspace when a user
 logs in. The user connects to a session through a terminal port. It is
 possible for a session to continue to run and remain connected to the
 terminal port even after a user's terminal device disconnects from the
 terminal port, and it is possible for a user to be logged into more than
 one session at a time. It is not possible for a user to be logged into the
 same session from more than one port at the same time.

 When a user is created by the Operator.Create_User command, a default
 session named S_1 is created in the user's home world. Additional sessions
 can be created by a user during login. A single user can have more than
 one active session by logging into the system more than once and providing
 a unique session name for each login.

 Note that the resources in System_Utilities use the session ID, a unique
 identification number, rather than the session name, for specifying
 sessions.

 Table 3 describes information about sessions that can be obtained with
 System_Utilities functions.

                  Table 3    Obtaining Session Information
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Function  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Session ID                         |Get_      |
             |                                   |Session   |
              ---------------------------------------------- 
             |                                   |          |
             |Name of a specified session (a     |Session_  |
             |string that the user enters)       |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Username of the user associated    |User_Name |
             |with the specified session         |          |
              ---------------------------------------------- 
             |                                   |          |
             |Version or object that represents a|Session   |
             |specified session                  |          |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified user is logged |Logged_In |
             |into a specified session           |          |
              ---------------------------------------------- 
             |                                   |          |
             |Version or object that represents  |User      |
             |the user for a specified session   |          |
              ---------------------------------------------- 
             |                                   |          |
             |Terminal-port number, terminal-port|Terminal  |
             |version, or terminal-port object   |          |
             |for a specified session            |          |
              ---------------------------------------------- 
             |                                   |          |
             |Pathname of the standard error     |Error_Name|
             |filename for the specified session |          |
              ---------------------------------------------- 



 Table 4 describes the types used to describe sessions.

                 Table 4    Types, Subtypes, and Constants
              ---------------------------------------------- 
             |                                  |           |
             |Type of Information               |Resource   |
              ---------------------------------------------- 
             |                                  |           |
             |Defines an integer representation |subtype    |
             |for sessions                      |Session_Id |
              ---------------------------------------------- 
             |                                  |           |
             |Defines an iterator for iterating |type       |
             |over all sessions on a system     |Session_   |
             |                                  |Iterator   |
              ---------------------------------------------- 
             |                                  |           |
             |Defines a representation for a    |type       |
             |version of a directory object     |Version    |
              ---------------------------------------------- 
             |                                  |           |
             |Defines the representation for an |type Object|
             |object in the directory system    |           |
              ---------------------------------------------- 




 Jobs

 Within each session, the user can create multiple jobs to execute programs
 and commands. A job consists of one or more commands that are executed
 together. Each job is separately scheduled and can have its own scheduler
 priority and page limits. Users can create jobs implicitly when a command
 window is executed or explicitly with the !Commands.Program.Run_Job and
 Create_Job procedures.

 The job ID, or job number, identifies Environment jobs; this identifier is
 displayed by the What.Jobs and What.Users commands.

 The System_Utilities commands Get_Page_Count and Set_Page_Limit
 respectively get and set the job page limit that is allowed for a
 particular job. This limit is 8,000 pages by default and is a combination
 of the pages allowed from memory and disk. It is possible for users to
 create jobs that accidentally consume too much disk space. To prevent
 runaway jobs, make users aware of page limits and how to control them (see
 your System Manager's Guide).

 Note that the Set_Page_Limit procedure is the only System_Utilities
 procedure that can directly alter system characteristics (a job can call
 this procedure at any time to change the job page limit).

 Table 5 describes additional information that is available about jobs
 through System_Utilities functions.

                    Table 5    Obtaining Job Information
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Function  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Job identifier for the current job |Get_Job   |
              ---------------------------------------------- 
             |                                   |          |
             |Priority of the specified job      |Priority  |
              ---------------------------------------------- 
             |                                   |          |
             |Amount of CPU time that the        |Cpu       |
             |specified job has consumed         |          |
              ---------------------------------------------- 
             |                                   |          |
             |Elapsed time that the specified job|Elapsed   |
             |has existed                        |          |
              ---------------------------------------------- 



 Table 6 lists the types, subtypes, and constants defined in
 System_Utilities for jobs.

                         Table 6    Job Information
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Resource  |
              ---------------------------------------------- 
             |                                   |          |
             |Defines an integer representation  |subtype   |
             |for a job                          |Job_Id    |
              ---------------------------------------------- 
             |                                   |          |
             |Defines an iterator for iterating  |type      |
             |over all the jobs on a system      |Job_      |
             |                                   |Iterator  |
              ---------------------------------------------- 




 Terminal Ports

 The R1000 communicates with terminals, workstations, printers, and modems
 through either RS232 asynchronous serial ports or Telnet TCP/IP network
 ports. Both types of ports are represented in the Environment as port
 objects.

 Commands in package Terminal access or modify a subset of settings for
 port objects. Other settings for port objects are located elsewhere in the
 Environment and are managed by other resources--for example, the network
 resources are described in the Rational Networking--TCP/IP Reference
 Manual.

 Package System_Utilities provides extensive function support that is used
 by the commands in packages Terminal and Operator.

 The following tables contain information about RS232 ports that can be
 obtained with System_Utilities.

 Tables 7 through 10 describe the kinds of information you can obtain
 using functions from System_Utilities. Table 11 describes the types that
 support these functions.

                Table 7    Obtaining RS232-Port Information
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Function  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Number of data bits that represent |Character_|
             |each character processed through a |Size      |
             |port                               |          |
              ---------------------------------------------- 
             |                                   |          |
             |Number of stop bits that frame each|Stop_Bits |
             |character processed through a port |          |
              ---------------------------------------------- 
             |                                   |          |
             |Type of parity checking assigned to|Parity    |
             |a specified port                   |          |
              ---------------------------------------------- 
             |                                   |          |
             |Input-data transmission rate of a  |Input_Rate|
             |specified port                     |          |
              ---------------------------------------------- 
             |                                   |          |
             |Output-data transmission rate of a |Output_   |
             |specified port                     |Rate      |
              ---------------------------------------------- 
             |                                   |          |
             |Transmit flow control assigned to a|Flow_     |
             |port                               |Control   |
              ---------------------------------------------- 
             |                                   |          |
             |Receive flow control assigned to a |Receive_  |
             |port                               |Flow_     |
             |                                   |Control   |
              ---------------------------------------------- 
             |                                   |          |
             |Specified character codes assigned |Receive_  |
             |for XON/XOFF on receive flow       |Xon_Xoff_ |
             |control                            |Characters|
              ---------------------------------------------- 
             |                                   |          |
             |Specified byte codes assigned for  |Receive_  |
             |XON/XOFF on receive flow control   |Xon_Xoff_ |
             |                                   |Bytes     |
              ---------------------------------------------- 
             |                                   |          |
             |Specified character codes assigned |Xon_Xoff_ |
             |for XON/XOFF on transmit flow      |Characters|
             |control                            |          |
              ---------------------------------------------- 
             |                                   |          |
             |Specified byte codes assigned for  |Xon_Xoff_ |
             |XON/XOFF on transmit flow control  |Bytes     |
              ---------------------------------------------- 



        Table 8    Obtaining Terminal-Port Login-Enabled Information
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Function  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified port is enabled|Enabled   |
             |for login                          |          |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified port is disable|Disabled  |
             |for login (note that a port        |          |
             |disabled through package Terminal  |          |
             |or during machine initialization   |          |
             |cannot be enabled using            |          |
             |Operator.Enable_Login)             |          |
              ---------------------------------------------- 

                                                                           


         Table 9    Obtaining Terminal-Port Disconnect Information
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Function  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified R1000 port     |Disconnect|
             |should respond to an incoming      |_On_      |
             |disconnect signal by transmitting a|Disconnect|
             |return disconnect signal           |          |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified R1000 port     |Disconnect|
             |should respond to repeated login   |_On_      |
             |failures by disconnecting          |Failed_   |
             |                                   |Login     |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified R1000 port     |Disconnect|
             |should respond to a logoff by      |_On_Logoff|
             |disconnecting                      |          |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified R1000 port     |Log_Off_  |
             |should respond to a remote         |On_       |
             |disconnect by logging off any      |Disconnect|
             |associated session still running on|          |
             |the port                           |          |
              ---------------------------------------------- 
             |                                   |          |
             |Whether a specified port is set to |Log_      |
             |keep a log of failed logins        |Failed_   |
             |                                   |Logins    |
              ---------------------------------------------- 



 For a complete discussion of the different RS232, connection, and login
 characteristics, see the introduction to package Terminal.

 Table 10 lists the functions that return the number of characters input or
 output from a specified port since the system was booted.

                Table 10    Terminal-Port Traffic Information
              ---------------------------------------------- 
             |                                   |          |
             |Type of Information                |Function  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Return the number of characters    |Input_    |
             |input from the specified port since|Count     |
             |the system was booted              |          |
              ---------------------------------------------- 
             |                                   |          |
             |Return the number of characters    |Output_   |
             |output from the specified port sinc|Count     |
             |the system was booted              |          |
              ---------------------------------------------- 



 Table 11 lists the types, subtypes, and constants used to define ports.

                Table 11    Terminal-Port Traffic Information
             ----------------------------------------------- 
            |                                 |             |
            |Type of Information              |Resource     |
             ----------------------------------------------- 
            |                                 |             |
            |Defines a string of 8-bit bytes  |subtype      |
            |                                 |Byte_String  |
             ----------------------------------------------- 
            |                                 |             |
            |Defines the allowed number of bit|subtype      |
            |that represent a character       |Character_   |
            |                                 |Bits_Range   |
             ----------------------------------------------- 
            |                                 |             |
            |Defines the allowed kinds of     |type         |
            |parity checking used by the      |Parity_Kind  |
            |system and terminal devices      |             |
            |connected to a port              |             |
             ----------------------------------------------- 
            |                                 |             |
            |Defines an integer representation|subtype Port |
            |for the Telnet and RS232 ports on|             |
            |a system                         |             |
             ----------------------------------------------- 
            |                                 |             |
            |Defines an iterator type for     |type         |
            |iterating through all Telnet and |Terminal_    |
            |RS232 ports                      |Iterator     |
             ----------------------------------------------- 




 Terminal Devices

 Users log into the Environment through terminal devices connected to
 login-enabled terminal ports. Common terminal devices are workstations,
 PCs, and dumb terminals. Dumb terminals typically display only one
 Environment session at a time. Workstations and PCs running either the X
 Window System with the Rational X Interface, or Microsoft Windows with
 the Rational Windows Interface, can display multiple Environment sessions
 in separate terminal-emulator windows (the Rational X Interface and the
 Rational Windows Interface are terminal emulators that run under the
 corresponding graphical user interfaces).

 Table 12 describes information about terminal devices that can be obtained
 with System_Utilities.

                  Table 12    Terminal-Device Information
             ----------------------------------------------- 
            |                                 |             |
            |Type of Information              |Function Name|
             ----------------------------------------------- 
            |                                 |             |
            |Width in columns and length in   |Terminal_    |
            |lines of the Environment display |Columns,     |
            |associated with the specified por|Terminal_    |
            |                                 |Lines        |
             ----------------------------------------------- 
            |                                 |             |
            |Name of the output driver that is|Terminal_Type|
            |associated with a terminal device|             |
             ----------------------------------------------- 



 Note: Be careful not to confuse objects in the Environment that have names
 based on the word terminal with the concept of terminal devices--with the
 exception of Terminal_Type objects and the display-size functions
 identified in this section, most of the objects involving the word terminal
 refer to terminal ports, not terminal devices.


 Tape Devices

 ANSI tape devices are supported by package Tape. Tape objects are located
 in !Machine.Devices.

 See package Tape, the System Manager's Guide, and package Archive in the
 Library Management (LM) book for more information on using tape devices.

 Table 13 describes the support that package System_Utilities provides for
 tape devices.

                    Table 13    Tape-Device Information
              ---------------------------------------------- 
             |                              |               |
             |Type of Information           |Resource       |
              ---------------------------------------------- 
             |                              |               |
             |Returns the pathname of the   |function       |
             |tape object in the library    |Tape_Name      |
             |system associated with the    |               |
             |specified drive               |               |
              ---------------------------------------------- 
             |                              |               |
             |Defines the possible tape     |subtype Tape   |
             |drives for the system         |               |
              ---------------------------------------------- 




 System Hardware

 Package System_Utilities contains several utility functions that return
 information about the system configuration, as described in Table 14.

                       Table 14    System Information
              ---------------------------------------------- 
             |                              |               |
             |Type of Information           |Function Name  |
              ---------------------------------------------- 
             |                              |               |
             |Software release number       |System_Boot_   |
             |                              |Configuration  |
              ---------------------------------------------- 
             |                              |               |
             |List of bad disk blocks at    |Bad_Block_List |
             |time of manufacture           |               |
              ---------------------------------------------- 
             |                              |               |
             |Hardware circuit-board        |Get_Board_Info |
             |information                   |               |
              ---------------------------------------------- 
             |                              |               |
             |Time since system was last    |System_Up_Time |
             |booted                        |               |
              ---------------------------------------------- 




 Identifiers, Names, Objects, and Versions

 Package System_Utilities reveals different types of information on users,
 sessions, jobs, terminal ports, terminal devices, and tape devices.
 Although not every type of information applies to all of these, the
 categories are:

 *  Identifiers (IDs) for sessions, jobs, terminal ports, and tapes

 *  Names

 *  Objects for sessions, users, and terminal ports

 *  Versions for sessions, users, and terminal ports


 IDs for Sessions, Jobs, Terminal Ports, and Tapes

 Sessions, jobs, ports, and tapes are identified by the system through IDs,
 as shown in Table 15.

            Table 15    IDs for Sessions, Jobs, Ports, and Tapes
                         ----------------------- 
                        |        |     |        |
                        |To      |Type |Range   |
                        |Represen|     |        |
                        |t       |     |        |
                         ----------------------- 
                        |        |     |        |
                        |Sessions|Sessi|0 .. 2  |
                        |        |on_Id|** 24 - |
                        |        |     |1       |
                         ----------------------- 
                        |        |     |        |
                        |Jobs    |Job_ |4 .. 255|
                        |        |Id   |        |
                         ----------------------- 
                        |        |     |        |
                        |Ports   |Port |0 ..    |
                        |        |     |1024    |
                         ----------------------- 
                        |        |     |        |
                        |Tapes   |Tape |0 .. 3  |
                         ----------------------- 



 Many of the System_Utilities functions return IDs or take IDs as
 parameters. IDs are also displayed online by commands such as What.Users
 and What.Jobs.


 Names

 Names are represented by character strings. These strings are often a
 partial or full directory pathname or an Ada name.

                             Table 16    Names
              ---------------------------------------------- 
             |                                   |          |
             |To Represent                       |Function  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Name of a session: S_1             |Session_  |
             |                                   |Name      |
              ---------------------------------------------- 
             |                                   |          |
             |Name of a job indicated by a job   |Job_Name  |
             |ID: Comp.Promote                   |          |
              ---------------------------------------------- 
             |                                   |          |
             |Name of the user who created a     |User_Name |
             |session: Anne                      |          |
              ---------------------------------------------- 
             |                                   |          |
             |Pathname of the tape object in the |Tape_Name |
             |library system associated with a   |          |
             |drive: !Machine.Devices.Tape_0     |          |
              ---------------------------------------------- 
             |                                   |          |
             |Pathname of the Standard_Error     |Error_Name|
             |filename for the indicated session:|          |
             |!Machine.Users.Anne                |          |
              ---------------------------------------------- 
             |                                   |          |
             |Pathname of the Standard_Input     |Input_Name|
             |filename for the indicated session:|          |
             |!Users.Anne.S_1                    |          |
              ---------------------------------------------- 
             |                                   |          |
             |Pathname of the Standard_Output    |Output_   |
             |filename for the indicated session:|Name      |
             |!Users.Anne.S_1                    |          |
              ---------------------------------------------- 
             |                                   |          |
             |Pathname of the terminal object for|Terminal_ |
             |a port:                            |Name      |
             |!Machine.Devices.Terminal_242      |          |
              ---------------------------------------------- 
             |                                   |          |
             |Name of the terminal type          |Terminal_ |
             |associated with a terminal attached|Type      |
             |to a port: Xsun4                   |          |
              ---------------------------------------------- 
             |                                   |          |
             |Pathname of the home library for a |Home_     |
             |user: !Users.Anne                  |Library   |
              ---------------------------------------------- 
             |                                   |          |
             |Pathname of the indicated version  |Image     |
              ---------------------------------------------- 




 Objects for Sessions, Users, and Terminal Ports

 Object is a subtype of type !Implementation.Directory.Object, which is an
 implementation detail of the R1000 library system. An object defines a
 representation for an activity or entity in the Environment. Certain
 procedure or function interfaces may require specifying an object
 parameter.


 Versions for Sessions, Users, and Terminal Ports

 Version is a subtype of type !Implementation.Directory.Version, which is
 an implementation detail of the R1000 library system. The Environment
 maintains multiple versions for each object in the directory system.
 Version numbers are assigned by the Environment when each version is
 created. Certain procedure or function interfaces may require specifying a
 version parameter.

 See the Library Management (LM) book for more information on versions.


 Iteration Capabilities

 Package System_Utilities provides functions, types, and procedures for
 implementing programmatic iteration over jobs, sessions, and terminal
 ports. Iteration is the sequencing through a collection of items:
 operations can be applied to each item in turn. By combining these
 resources, you can create a tool that first obtains an entire set of
 objects and then examines each individual object in the set for a
 particular characteristic. Three different iteration capabilities are
 discussed below:

 *  Session

 *  Job

 *  Terminal port


 Session Iteration

 Session iteration collects all of the sessions running on a system, often
 for additional processing by job or terminal-port iterators.

 You define a session-iterator variable of type Session_Iterator and
 initialize it through the Init procedure. The iterator is initialized with
 all the sessions active at the time the Init procedure was called.

 The following excerpt of Ada code illustrates session iteration:

   declare
       package Su renames System_Utilities;
       Iterator_Variable : Su.Session_Iterator;
       For_Session : Su.Session_Id;
   begin
       Su.Init (Iterator_Variable);
       while not Su.Done (Iterator_Variable) loop
           For_Session := Su.Value (Iterator_Variable);
           Whatever_Process (For_Session);
           Su.Next (Iterator_Variable);
       end loop;
   end;


 Job Iteration

 Job iteration is a powerful tool for system management. For example, a
 tool based on job iteration could handle runaway jobs that were consuming
 large quantities of memory.

 You define a job-iterator variable of type Job_Iterator and initialize it
 through the Init procedure. The iterator is initialized with all jobs
 active for a particular session, at the time that the Init procedure was
 called. Note that when used with job iteration, the Init procedure
 includes a parameter for session IDs: the default is the session ID for
 the current session. Job iterators are often implemented nested within
 session iterators, to collect all jobs running on a system.

 The following short example illustrates how job iteration can be combined
 with session iteration:

   procedure Iteration_Example_Jobs is
       package Su renames System_Utilities;
       Iterator_Variable_For_Session : Su.Session_Iterator;
       Iterator_Variable_For_Job : Su.Job_Iterator;
       For_Job : Su.Job_Id;
   begin
       Su.Init (Iterator_Variable_For_Session);
       while not Su.Done (Iterator_Variable_For_Session) loop
           Su.Init (Iterator_Variable_For_Job);
           while not Su.Done (Iterator_Variable_For_Job) loop
               For_Job := Su.Value (Iterator_Variable_For_Job);
               Whatever_Process (For_Job);
               Su.Next (Iterator_Variable_For_Job);
           end loop;

           Su.Next (Iterator_Variable_For_Session);
       end loop;
   end Iteration_Example_Jobs;


 Terminal-Port Iteration

 A terminal-port iterator is defined and initialized with the
 Terminal_Iterator type and the Init procedure. The iterator is initialized
 with all of the terminal ports represented in the Environment by port
 objects. (Port objects are defined in !Machine.Devices.Terminal_N
 objects, where N is the number of the corresponding hardware port. See
 package Terminal for more information on port objects.)

 Terminal-port iteration is useful for classifying the state of a
 collection of ports. For example, terminal-port iteration can locate ports
 set with certain attributes, such as those enabled for login.
 Terminal-port iteration also can be used with the Input_Count and
 Output_Count functions to identify inactive user sessions. Terminal-port
 iteration uses essentially the same procedural structure as described
 above for session and job iteration.


 @node !Tools.System_Utilities.All_Bad_Blocks

 All_Bad_Blocks : constant Bad_Block_Kinds := 3;

 DESCRIPTION

 Defines a value that indicates all bad disk blocks.


 REFERENCES

 type Bad_Block_Kinds
 function Bad_Block_List
 constant Manufacturers_Bad_Blocks
 constant Retargeted_Blocks



 @node !Tools.System_Utilities.Bad_Block_Kinds

 type Bad_Block_Kinds is new Long_Integer range 0 .. 7;

 DESCRIPTION

 Defines the kinds of bad disk blocks.

 A block is a logical unit of disk space of a certain size, and each block
 has a physical address on the disk. A bad block is a block containing
 areas of physical disk media in which the integrity of data storage cannot
 be guaranteed. Package System_Utilities contains several constants that
 are used to represent the physical addresses of known bad blocks on a
 specific disk:

 *  All_Bad_Blocks

 *  Manufacturers_Bad_Blocks

 *  Retargeted_Blocks


 REFERENCES

 constant All_Bad_Blocks
 function Bad_Block_List
 constant Manufacturers_Bad_Blocks
 constant Retargeted_Blocks



 @node !Tools.System_Utilities.Bad_Block_List

 function Bad_Block_List
              (For_Volume : Natural;
                     Kind : Bad_Block_Kinds := Retargeted_Blocks)
                                               return Block_List;

 DESCRIPTION

 Returns a list of bad disk blocks of the specified kind on the specified
 disk volume.

 This function is called by the Show_Bad_Blocks procedure, which is imple-
 mented in !Tools.System_Availability.System_Report. (See the System
 Manager's Guide for information about generating reports of manufacturer's
 bad blocks.)


 PARAMETERS

 For_Volume : Natural;

 Specifies the disk volume for which to get the bad-block information.


 Kind : Bad_Block_Kinds := Retargeted_Blocks;

 Specifies the kind of bad blocks to get.


 return Block_List;

 Returns the desired list of bad disk blocks. If the volume or kind of bad
 block is illegal, a null array will be returned.


 ERRORS

 If the volume or kind of bad disk block is illegal, a null array will be
 returned; no exceptions will be raised.


 REFERENCES

 constant All_Bad_Blocks
 type Block_List
 constant Manufacturers_Bad_Blocks
 constant Retargeted_Blocks



 @node !Tools.System_Utilities.Block_List

 type Block_List is array (Natural range <>) of Integer;

 DESCRIPTION

 Defines the type used to represent a list of bad disk blocks.


 REFERENCES

 function Bad_Block_List



 @node !Tools.System_Utilities.Byte_String

 subtype Byte_String is System.Byte_String;

 DESCRIPTION

 Defines an array of 8-bit bytes, forming the basic unit of transmission and
 reception to and from input/output devices.


 REFERENCES

 type !Lrm.System.Byte_String



 @node !Tools.System_Utilities.Character_Bits_Range

 subtype Character_Bits_Range is Integer range 5 .. 8;

 DESCRIPTION

 Defines the allowed values for the number of bits in a character.

 The number of bits in a character depends on the character set that the
 terminal device uses. Normally this is eight bits for a terminal device
 used to access the Environment. Other kinds of terminal devices may
 require different values.



 @node !Tools.System_Utilities.Character_Size

 function Character_Size (Line : Port := System_Utilities.Terminal)
                                      return Character_Bits_Range;

 DESCRIPTION

 Returns the number of bits used for each character for the specified port.

 To set the Character_Bits_Range for a port, see the
 Terminal.Set_Character_Size procedure.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the port number of the port through which the session is logged in.


 return Character_Bits_Range;

 Returns the number of bits per character.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 procedure Terminal.Set_Character_Size



 @node !Tools.System_Utilities.Cpu

 function Cpu (For_Job : Job_Id := System_Utilities.Get_Job)
                                            return Duration;

 DESCRIPTION

 Returns the CPU time that the specified job has consumed.

 This function returns the time that the specified job has used during its
 execution. By default, the function returns the CPU time of the current
 job.


 PARAMETERS

 For_Job : Job_Id := System_Utilities.Get_Job;

 Specifies the job for which to calculate the CPU time. The default returns
 the CPU time of the current job.


 return Duration;

 Returns the CPU time.


 EXAMPLES

 The following example illustrates a programmatic interface to the CPU
 function:


   procedure Job_Cpu_Time (For_Job : Job_Id :=
                           System_Utilities.Get_Job) is
       package Su renames System_Utilities;
       package Tu renames Time_Utilities;
   begin
       Io.Echo ("CPU time for " & Job_Name (For_Job) &
                ": " & Tu.Image (Su.Cpu (For_Job)));
   end Job_Cpu_Time;
          

 REFERENCES

 function Elapsed
 function Get_Job
 package Time_Utilities



 @node !Tools.System_Utilities.Detach_On_Disconnect

 function Detach_On_Disconnect
                    (Line : Port := System_Utilities.Terminal)
                                               return Boolean;

 DESCRIPTION


 This option is not implemented: any value returned by this function is
 undefined.


 REFERENCES

 procedure Terminal.Set_Detach_On_Disconnect



 @node !Tools.System_Utilities.Disconnect_On_Disconnect

 function Disconnect_On_Disconnect
                 (Line : Port := System_Utilities.Terminal)
                                            return Boolean;

 DESCRIPTION

 Determines whether the disconnect-on-disconnect option is enabled for the
 specified port.

 See package Terminal for more information on this option.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the port number of the port through which the current session is logged
 in.


 return Boolean;

 Returns True if the option is currently enabled for the specified port
 number; otherwise, the function returns False.


 REFERENCES

 procedure Terminal.Set_Disconnect_On_Disconnect



 @node !Tools.System_Utilities.Disconnect_On_Failed_Login

 function Disconnect_On_Failed_Login
                 (Line : Port := System_Utilities.Terminal)
                                            return Boolean;

 DESCRIPTION

 Determines whether the disconnect-on-failed-login option is enabled for
 the specified port.

 See package Terminal for more information on this option.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the port number of the port through which the current session is logged
 in.


 return Boolean;

 Returns True if the option is currently enabled for the port; otherwise,
 the function returns False.


 REFERENCES

 procedure Terminal.Set_Disconnect_On_Failed_Login



 @node !Tools.System_Utilities.Disconnect_On_Logoff

 function Disconnect_On_Logoff
                        (Line : Port := System_Utilities.Terminal)
                                                   return Boolean;

 DESCRIPTION

 Determines whether the disconnect-on-logoff option is enabled for the
 specified port.

 See package Terminal for more information on this option.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the port number of the port through which the current session is logged
 in.


 return Boolean;

 Returns True if the option is currently enabled for the port; otherwise,
 the function returns False.


 REFERENCES

 procedure Terminal.Set_Disconnect_On_Logoff



 @node !Tools.System_Utilities.Done

 function Done (Iter : Job_Iterator) return Boolean;

 function Done (Iter : Session_Iterator) return Boolean;

 function Done (Iter : Terminal_Iterator) return Boolean;

 DESCRIPTION

 Checks whether an iterator has cycled through all of the members in a
 collection of jobs, sessions, or terminal ports.

 The Done, Init, Next, and Value functions and procedures are used together
 to form an iterator. Specific iterators are defined by the Job_Iterator,
 Session_Iterator, and Terminal_Iterator types.

 The session iterator iterates through all of the active sessions that are
 running on the Environment when the Init procedure was called.

 The job iterator filters out inactive jobs when the Value function, the
 Done function, and the Next procedure are called. Specifically, the Done
 function yields True only if active jobs remain when it is called. For
 example, an iterator that initially contained seven active jobs following
 the execution of the Init procedure might complete after only four jobs
 were checked by the Next procedure, because the other three jobs completed
 before they were checked.

 The terminal iterator iterates through the terminal ports defined in the
 !Machine.Devices library.

 Refer to the "Iteration Capabilities" subsection in the introduction to
 this package for more information and examples showing how to use
 iteration.


 PARAMETERS

 Iter : Job_Iterator;

 Specifies a job iterator.


 Iter : Session_Iterator;

 Specifies a session iterator.


 Iter : Terminal_Iterator;

 Specifies a terminal iterator.


 return Boolean;

 Returns the value True when the iteration is complete; otherwise, the
 function returns False.


 REFERENCES

 procedure Init
 type Job_Iterator
 procedure Next
 type Session_Iterator
 type Terminal_Iterator
 function Value



 @node !Tools.System_Utilities.Elapsed

 function Elapsed (For_Job : Job_Id := System_Utilities.Get_Job)
                                                return Duration;

 DESCRIPTION

 Returns the elapsed time that the specified job has existed.

 This function returns the time that the specified job has been in
 existence. By default, the function returns the elapsed time of the
 current job.

 Note: The elapsed time for job 4 (the system) is the elapsed time since
 the system was booted.


 PARAMETERS

 For_Job : Job_Id := System_Utilities.Get_Job;

 Specifies the job whose elapsed time is desired. The default is the elapsed
 time of the current job.


 return Duration;

 Returns the elapsed time.


 EXAMPLES

 The following example illustrates a call to the Elapsed function:

   procedure Job_Elapsed_Time (For_Job : Job_Id :=
                               System_Utilities.Get_Job) is
       package Su renames System_Utilities;
       package Tu renames Time_Utilities;
   begin
       Io.Echo (Tu.Image (Su.Elapsed (For_Job)) &
                " elapsed for " & Job_Name (For_Job));
   end Job_Elapsed_Time;
   

 REFERENCES

 function Cpu
 function Get_Job
 Programming Tools (PT), package Time_Utilities



 @node !Tools.System_Utilities.Enabled

 function Enabled (Line : Port := System_Utilities.Terminal)
                                             return Boolean;

 DESCRIPTION

 Checks whether the specified port is enabled for logging into the
 Environment.

 The setting for a port can be changed. To enable or disable login for a
 port, use the Operator.Enable_Terminal procedure.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number to be checked. The default is the port number
 associated with the current session.


 return Boolean;

 Returns the value True when the specified port is enabled for login;
 otherwise, the function returns False.


 REFERENCES

 procedure Operator.Enable_Terminal



 @node !Tools.System_Utilities.Error_Name

 function Error_Name
      (For_Session : Session_Id := System_Utilities.Get_Session)
                                                  return String;

 DESCRIPTION

 Returns the fully qualified pathname of the Standard_Error filename for the
 indicated session.

 If this file is opened using the I/O packages in the Environment, the
 output goes to an Environment output window. This function can be used,
 for example, to return the correct filename in an application that
 redirects error output for a job to an Environment output window.


 PARAMETERS

 For_Session : Session_Id := System_Utilities.Get_Session;

 Specifies the session for which the filename is to be computed. The default
 specifies that the filename for the current session is returned.


 return String;

 Returns the filename.



 @node !Tools.System_Utilities.Flow_Control

 function Flow_Control (Line : Port := System_Utilities.Terminal)
                                                   return String;

 DESCRIPTION

 Determines whether software flow control is used for controlling the flow
 of data transmitted to the terminal device on the specified port.

 A device such as a terminal or a printer attached to an R1000 port can
 control the flow of data transmitted to it from the R1000 in two ways:

 *  Hardware flow control: The flow of data is stopped when the device
    turns off the Clear To Send (CTS) modem control signal. The flow is
    restarted when the CTS signal is turned on.

 *  Software flow control: The flow of data is stopped when the device
    sends the XOFF byte or character. The flow is restarted when the XON
    byte or character is sent.

 The type of transmission flow control used for the port can be changed by
 using the Terminal.Set_Flow_Control procedure or by changing a hardware
 switch setting in the RS232 distribution panel (note that this second
 option applies only to Series 200 systems).


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the port number associated with the current session.


 return String;

 Returns the method used for controlling the flow of data transmitted to
 the device. Legal values are: NONE and XON_XOFF.

 *  NONE: Indicates that there is no software flow control for the port and
    that there may or may not be CTS hardware flow control for the port.
    Since CTS hardware flow control is enabled or disabled by changing a
    hardware switch setting in the RS232 distribution panel (applicable
    only to Series 200 systems), the setting of this hardware switch must
    be checked to determine if hardware flow control is enabled when this
    function returns NONE.

 *  XON_XOFF: Indicates that software flow control is enabled for the port,
    and the R1000 will stop transmitting when it receives an XOFF character
    or byte.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 function Receive_Flow_Control
 procedure Terminal.Set_Flow_Control



 @node !Tools.System_Utilities.Get_Board_Info

 function Get_Board_Info (Board : Natural) return String;

 DESCRIPTION

 Returns information about the specified hardware circuit board in the
 system.

 This function is called by the Show_Machine_Information procedure, which
 is implemented in !Tools.System_Availability.System_Report. (See the
 System Manager's Guide for information about generating reports showing
 board information.)


 PARAMETERS

 Board : Natural;

 Specifies the hardware circuit board about which to determine information.


 return String;

 Returns information about the board.



 @node !Tools.System_Utilities.Get_Job

 function Get_Job return Job_Id;

 DESCRIPTION

 Returns the job identification number of the current job.


 PARAMETERS

 return Job_Id;

 Returns the job identification number of the current job--that is, the job
 that called this function.



 @node !Tools.System_Utilities.Get_Page_Counts

 procedure Get_Page_Counts
               (Cache_Pages : out Natural;
                Disk_Pages  : out Natural;
                Max_Pages   : out Natural;
                For_Job     : Job_Id := System_Utilities.Get_Job);

 DESCRIPTION

 Gets the virtual-memory page counts for the specified job (each page is
 1,024 bytes).

 See the following references for information on page limits:

 *  To change the default page limit for a specific job, see the
    Set_Page_Limits procedure.

 *  For a definition of page limits and virtual-memory pages, see the "Job
    Page Limit" subsection in Chapter 3 of the Library Management (LM)
    book.

 *  For more information about the page limits for a job that elaborates an
    Ada unit containing the Page_Limit pragma, see Appendix F for the R1000
    Target in the Ada LRM.

 *  For more information about the page limits for a job compiled with a
    specific setting of the R1000_Cg.Page_Limit library switch, see package
    Switches in the Library Management (LM) book.

 *  For more information about changing the default page limit set by the
    Default_Job_Page_Limit session switch, see package Switches in the
    Session and Job Management (SJM) book.


 PARAMETERS

 Cache_Pages : out Natural;

 Returns the number of pages presently in main memory for the job.


 Disk_Pages : out Natural;

 Returns the number of pages that have disk space allocated for them.


 Max_Pages : out Natural;

 Returns the limit on the number of pages the job is allowed to create.


 For_Job : Job_Id := System_Utilities.Get_Job;

 Specifies the job for which to count the pages. By default, pages will be
 counted for the job that calls this procedure.


 REFERENCES

 function Get_Job
 procedure Set_Page_Limit



 @node !Tools.System_Utilities.Get_Session

 function Get_Session return Session_Id;

 function Get_Session (For_Job : Job_Id) return Session_Id;

 DESCRIPTION

 Returns the session identifier for either the job that executed the call to
 the function or the job indicated in the optional For_Job parameter.


 PARAMETERS

 For_Job : Job_Id;

 Specifies the job for which to determine the session identifier.


 return Session_Id;

 Returns the session identifier for either the job that executed the call to
 the function or the job indicated in the optional For_Job parameter.



 @node !Tools.System_Utilities.Home_Library

 function Home_Library (User : String := User_Name) return String:

 DESCRIPTION

 Returns the fully qualified pathname of the home library for the specified
 user.

 By default, this function returns the home library for the user associated
 with the current session.


 PARAMETERS

 User : String := User_Name;

 Specifies the simple name of the user for which the home library is to be
 determined.


 return String;

 Returns the fully qualified pathname of the home library for the indicated
 user.



 @node !Tools.System_Utilities.Image

 function Image (Version : Directory.Version) return String;

 DESCRIPTION

 Returns the fully qualified pathname for the indicated version of session,
 terminal-port, or user objects.

 Note that versions for these objects are returned by the Session,
 Terminal, and User functions.


 PARAMETERS

 Version : Directory.Version;

 Specifies the version for which the name is to be computed.


 return String;

 Returns the fully qualified pathname for the indicated version.


 REFERENCES

 function Session
 function Terminal
 function User



 @node !Tools.System_Utilities.Init

 procedure Init (Iter        : out Job_Iterator;
                 For_Session :     Session_Id := Get_Session);

 procedure Init (Iter : out Session_Iterator);

 procedure Init (Iter : out Terminal_Iterator);

 DESCRIPTION

 Initializes an iterator to iterate over all of the members in a collection
 of jobs, sessions, or terminal ports.

 The Done, Init, Next, and Value functions and procedures are used together
 to form an iterator. Specific iterators are defined by the Job_Iterator,
 Session_Iterator, and Terminal_Iterator types.

 The session iterator iterates through all of the active sessions that are
 running on the Environment when the Init procedure was called. If one or
 more sessions are active, the Value function returns the first session
 using the current value of the iterator. If no sessions are active, the
 Done function returns the value True using the current value of the
 iterator.

 When one or more jobs exist in the session, the Value function returns the
 first job using the current value of the iterator. When no jobs exist in
 the session, the Done function returns the value True using the current
 value of the iterator.

 The job iterator filters out inactive jobs when the Value function, the
 Done function, and the Next procedure are called. Specifically, the Done
 function yields True only if active jobs remain when it is called. For
 example, an iterator that initially contained seven active jobs following
 the execution of the Init procedure might complete after only four jobs
 were checked by the Next procedure, because the other three jobs
 completed.

 Terminal iterators are initialized to iterate over the terminal ports
 defined in the !Machine.Devices library. When one or more terminal ports
 are known, the Value function returns the first terminal port using the
 current value of the iterator. When no terminal ports are known, the Done
 function returns the value True using the current value of the iterator.

 Refer to the "Iteration Capabilities" subsection in the introduction to
 this package for more information and examples showing how to use
 iteration.


 PARAMETERS

 Iter : out Job_Iterator;

 Specifies the iterator.


 For_Session : Session_Id := Get_Session;

 Specifies the session for which the iterator should be created. The default
 is the calling session.


 Iter : out Session_Iterator;

 Specifies the iterator.


 Iter : out Terminal_Iterator;

 Specifies the iterator.


 REFERENCES

 function Done
 type Job_Iterator
 procedure Next
 type Session_Iterator
 type Terminal_Iterator
 function Value



 @node !Tools.System_Utilities.Input_Count

 function Input_Count (Line : Port := System_Utilities.Terminal)
                                            return Long_Integer;

 DESCRIPTION

 Returns the number of characters input from the specified port since the
 system was booted.

 Input from the port that has not been read by a session or user program is
 not counted as input.

 This function can be used, for example, to create an application that
 automatically logs out inactive user sessions. Such an application can use
 the Input_Count and Output_Count functions to determine whether any
 characters have recently been typed or output on the port for each
 session.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the input count is desired. The default
 is the port number associated with the current session.


 return Long_Integer;

 Returns the number of characters input from the specified port since the
 system was booted.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 function Output_Count



 @node !Tools.System_Utilities.Input_Name

 function Input_Name
                (For_Session : Session_Id :=
                 System_Utilities.Get_Session) return String;

 DESCRIPTION

 Returns the fully qualified pathname of the Standard_Input filename for the
 indicated session.

 If this file is opened using the I/O packages in the Environment, the input
 comes from an Environment input window. This function could be used, for
 example, in an application that redirects input for a job from an
 Environment input window (the correct filename would be needed to perform
 the redirection).


 PARAMETERS

 For_Session : Session_Id := System_Utilities.Get_Session;

 Specifies the session for which the filename is to be computed. The default
 is the current session.


 return String;

 Returns the fully qualified pathname of the file.



 @node !Tools.System_Utilities.Input_Rate

 function Input_Rate (Line : Port := System_Utilities.Terminal)
                                                 return String;

 DESCRIPTION

 Returns the input rate of the specified port.

 This function returns a string that contains the input rate of the
 specified port. By default, the function returns the input rate for the
 port through which the current session is logged in. This value can be
 changed with the Terminal.Set_Input_Rate procedure.

 Legal values for the input rate are:

   DISABLE       BAUD_50       BAUD_75       BAUD_110
   BAUD_134_5    BAUD_150      BAUD_200      BAUD_300
   BAUD_600      BAUD_1200     BAUD_1800     BAUD_2400
   BAUD_4800     BAUD_9600     BAUD_19200    EXT_REC_CLK

 The input rate EXT_REC_CLK is the value returned for Telnet ports. In
 general, this value indicates that the input rate of the data is
 determined by an external clock (and is not under local control). For a
 Telnet port, this means that the data transmission rate is not
 configurable. In this case, it is either the transmission rate of the
 Telnet port (10 Mbits per second) or the transmission rate at the remote
 end of the transmission (whichever of these two values is smaller).


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port for which the input rate is desired. The default is the
 port through which the current session is logged in.


 return String;

 Returns the input rate. Legal values are defined above.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 procedure Terminal.Set_Input_Rate



 @node !Tools.System_Utilities.Job_Id

 subtype Job_Id is Machine.Job_Id range 4 .. 255;

 DESCRIPTION

 Defines a representation for a job.

 Jobs are identified by a Job_Id number assigned by the Environment. Jobs
 are manipulated by procedures described in the Session and Job Management
 (SJM) book, package Job.


 REFERENCES

 Session and Job Management (SJM), package Job



 @node !Tools.System_Utilities.Job_Iterator

 type Job_Iterator is private;

 DESCRIPTION

 Defines a type that allows iterating over all jobs in a specified session.

 Objects of the Job_Iterator type contain all of the information necessary
 to iterate through all of the jobs in an active session (an active session
 is currently logged in to the system). The type is used with the Init and
 Next procedures and the Value and Done functions. Refer to the "Iteration
 Capabilities" subsection in the introduction to this package for more
 information about the job iterator.


 REFERENCES

 function Done
 procedure Init
 procedure Next
 type Session_Iterator
 type Terminal_Iterator
 function Value



 @node !Tools.System_Utilities.Job_Name

 function Job_Name (For_Job : Job_Id := System_Utilities.Get_Job)
                                                   return String;

 DESCRIPTION

 Returns the job name of the indicated job.

 This name appears in the job-name portion of the job header displayed in
 an Environment output window when a job is executed. The form of this job
 name is determined by the values of the session switches controlling the
 format of the job name (at the time the owner of the job executed it).

 If the job is not currently running, the Constraint_Error exception is
 raised.


 PARAMETERS

 For_Job : Job_Id := System_Utilities.Get_Job;

 Specifies the job for which to get the name. The default is the current
 job.


 return String;

 Returns the symbolic name of the indicated job.


 ERRORS

 The Constraint_Error exception is raised if the job is not currently
 running.



 @node !Tools.System_Utilities.Last_Login

 function Last_Login (User    : String;
                      Session : String := "") return Calendar.Time;

 DESCRIPTION

 Returns the calendar time at which the specified user logged into the
 specified session.

 By default, this function returns the time at which the user last logged
 into any session.


 PARAMETERS

 User : String;

 Specifies the simple name for the user.


 Session : String := "";

 Specifies the simple name for the session. The default value specifies that
 the last time the user logged into any session is to be computed.


 return Calendar.Time;

 Returns the time at which the user logged into the specified session.


 EXAMPLES

 The following example contains a call to the Last_Login function:

   procedure User_Last_Login (For_User : String :=
                                 System_Utilities.User_Name
                                 (System_Utilities.Get_Session)) is
       package Su renames System_Utilities;
       package Tu renames Time_Utilities;
   begin
       Io.Echo (For_User & " Last logged in on " &
                Tu.Image (Tu.Convert_Time (Su.Last_Login
                                                     (For_User))));
   end User_Last_Login;
   

 REFERENCES

 function Last_Logout
 package Calendar
 package Time_Utilities



 @node !Tools.System_Utilities.Last_Logout

 function Last_Logout (User    : String;
                       Session : String := "")
                       return Calendar.Time;

 DESCRIPTION

 Returns the calendar time at which the specified user logged out of the
 specified session.

 By default, this function returns the time at which the user last logged
 out of any session.


 PARAMETERS

 User : String;

 Specifies the simple name for the user.


 Session : String := "";

 Specifies the simple name for the session. The default value specifies that
 the last time the user logged out of any session is to be computed.


 return Calendar.Time;

 Returns the time at which the user logged out of the specified session.


 EXAMPLES

 The following example contains a call to function Last_Logout:

   procedure User_Last_Logout (For_User : String :=
                                 System_Utilities.User_Name
                                 (System_Utilities.Get_Session)) is
       package Su renames System_Utilities;
       package Tu renames Time_Utilities;
   begin
       Io.Echo (For_User & " Last logged out on " &
                Tu.Image (Tu.Convert_Time (Su.Last_Logout
                                                     (For_User))));
   end User_Last_Logout;
   

 REFERENCES

 function Last_Login
 package Calendar
 package Time_Utilities



 @node !Tools.System_Utilities.Log_Failed_Logins

 function Log_Failed_Logins (Line : Port :=
                             System_Utilities.Terminal)
                                        return Boolean;

 DESCRIPTION

 Determines whether the log-failed-logins option is enabled for the
 specified port.

 See package Terminal for more information on this option.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the number of the port through which the current session is logged in.


 return Boolean;

 Returns True if the option is currently enabled for the port; otherwise,
 the function returns False.


 REFERENCES

 procedure Terminal.Set_Log_Failed_Logins



 @node !Tools.System_Utilities.Logged_In

 function Logged_In (User    : String;
                     Session : String := "") return Boolean;

 DESCRIPTION

 Determines whether the specified user is logged into the specified session.

 By default, this function determines whether the specified user is logged
 into any session.


 PARAMETERS

 User : String;

 Specifies the simple name for the user.


 Session : String := "";

 Specifies the simple name for the session. The default value specifies that
 the check should be made to determine whether the user is logged into any
 session.


 return Boolean;

 Returns True if the user is logged in; otherwise, the function returns
 False.



 @node !Tools.System_Utilities.Login_Disabled

 function Login_Disabled (Line : Port := System_Utilities.Terminal)
                                                    return Boolean;

 DESCRIPTION

 Determines whether login is disabled for the specified port.

 When login is disabled, the function returns True. (Note that when login
 is disabled, the Operator.Enable_Terminal command fails for the specified
 port number.)

 See package Terminal for more information on disabling login for a port.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the number of the port through which the current session is logged in.


 return Boolean;

 Returns True if login is currently disabled for the port; otherwise, the
 function returns False.


 REFERENCES

 procedure Operator.Enable_Terminal
 procedure Terminal.Set_Login_Disabled



 @node !Tools.System_Utilities.Logoff_On_Disconnect

 function Logoff_On_Disconnect (Line : Port :=
                                System_Utilities.Terminal)
                                           return Boolean;

 DESCRIPTION

 Determines whether the logoff-on-disconnect option is enabled for the
 specified port.

 See package Terminal for more information on this option.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the number for which the information is desired. The default is
 the number of the port through which the current session is logged in.


 return Boolean;

 Returns True if the option is currently enabled for the port; otherwise,
 the function returns False.


 REFERENCES

 procedure Terminal.Set_Logoff_On_Disconnect



 @node !Tools.System_Utilities.Manufacturers_Bad_Blocks

 Manufacturers_Bad_Blocks : constant Bad_Block_Kinds := 1;

 DESCRIPTION

 Defines a value that indicates manufacturer-designated bad disk blocks.


 REFERENCES

 type Bad_Block_Kinds
 function Bad_Block_List
 constant Retargeted_Blocks



 @node !Tools.System_Utilities.Next

 procedure Next (Iter : in out Job_Iterator);

 procedure Next (Iter : in out Session_Iterator);

 procedure Next (Iter : in out Terminal_Iterator);

 DESCRIPTION

 Steps the iterator to point to the next element in the collection of jobs,
 sessions, or terminal ports.

 The Done, Init, Next, and Value functions and procedures are used together
 to form an iterator. Specific iterators are defined by the Job_Iterator,
 Session_Iterator, and Terminal_Iterator types.

 Refer to the "Iteration Capabilities" subsection in the introduction to
 this package for more information and examples showing how to use
 iteration.


 PARAMETERS

 Iter : in out Job_Iterator;

 Specifies the job iterator to be stepped.


 Iter : in out Session_Iterator;

 Specifies the session iterator to be stepped.


 Iter : in out Terminal_Iterator;

 Specifies the terminal-port iterator to be stepped.


 REFERENCES

 function Done
 procedure Init
 type Job_Iterator
 type Session_Iterator
 type Terminal_Iterator
 function Value



 @node !Tools.System_Utilities.Object

 subtype Object is Directory.Object;

 DESCRIPTION

 Defines a representation for an activity or entity in the Environment.

 Object is a subtype of type !Implementation.Directory.Object, which is an
 implementation detail of the R1000 library system. Certain procedure or
 function interfaces may require specifying an object parameter.


 REFERENCES

 subtype Version



 @node !Tools.System_Utilities.Output_Count

 function Output_Count (Line : Port := System_Utilities.Terminal)
                                             return Long_Integer;

 DESCRIPTION

 Returns the number of characters output to the specified port since the
 system was booted.

 An example application is a utility that automatically logs out inactive
 user sessions by using the Output_Count and Input_Count functions to
 determine whether any characters have recently been entered from or sent
 to a terminal device.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the number of the port through which the current session is logged in.


 return Long_Integer;

 Returns the output count in characters.


 REFERENCES

 function Input_Count
 function Terminal



 @node !Tools.System_Utilities.Output_Name

 function Output_Name
       (For_Session : Session_Id := System_Utilities.Get_Session)
                                                   return String;

                                                                           

 DESCRIPTION

 Returns the fully qualified pathname of the Standard_Output filename for the
 indicated session.

 If this file is opened using the I/O packages in the Environment, the
 output is sent to an Environment output window. This function can be used,
 for example, in an application that redirects output from a job to an
 Environment output window (the correct filename is needed to perform the
 redirection).


 PARAMETERS

 For_Session : Session_Id := System_Utilities.Get_Session;

 Specifies the session for which the filename is to be computed. The default
 is the current session.


 return String;

 Returns the filename.


 REFERENCES

 function Get_Session



 @node !Tools.System_Utilities.Output_Rate

 function Output_Rate (Line : Port := System_Utilities.Terminal)
                                                  return String;

 DESCRIPTION

 Returns the output rate of the specified port.

 This function returns a string that contains the output rate of the
 specified port. By default, the function returns the output rate for the
 port through which the current session is logged in. This value can be
 changed by using the Terminal.Set_Output_Rate procedure.

 Legal values for the output rate are:

   DISABLE       BAUD_50       BAUD_75       BAUD_110
   BAUD_134_5    BAUD_150      BAUD_200      BAUD_300
   BAUD_600      BAUD_1200     BAUD_1800     BAUD_2400
   BAUD_4800     BAUD_9600     BAUD_19200    EXT_REC_CLK

 The output rate EXT_REC_CLK is the value returned for Telnet ports. In
 general, this value indicates that the output rate of the data is
 determined by an external clock (and is not under local control). For a
 Telnet port, this means that the data-transmission rate is not
 configurable. In this case, it is either the transmission rate of the
 Telnet port (10 Mbits per second) or the transmission rate at the remote
 end of the transmission (whichever of these two values is less).


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the number of the port through which the current session is logged in.


 return String;

 Returns the output rate. Legal values are defined above.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 function Terminal
 procedure Terminal.Set_Output_Rate



 @node !Tools.System_Utilities.Parity

 function Parity (Line : Port := System_Utilities.Terminal)
                                        return Parity_Kind;

 DESCRIPTION

 Returns the kind of parity checking for the specified port.

 This function is used by the Terminal.Set_Parity procedure to control the
 kind of parity checking used between terminal devices connected directly
 to the R1000's RS232 ports.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the number of the port through which the current session is logged in.


 return Parity_Kind;

 Returns the parity kind.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 type Parity_Kind
 function Terminal
 procedure Terminal.Set_Parity



 @node !Tools.System_Utilities.Parity_Kind

 type Parity_Kind is (None, Even, Odd);

 DESCRIPTION

 Defines the allowed values for the kind of parity checking performed by the
 system and terminal.

 You can specify no parity, odd parity, or even parity for characters
 received and transmitted by an RS232 port. If an odd or even parity is
 selected, each transmitted character contains a parity bit that
 maintains either an odd or even number of 1 bits in the character. For
 example, if the character represented by 0100101
 is to be transmitted using even parity, a 1 is added in the eighth bit to
 make 10100101, which contains an even number of 1 bits. If odd parity were
 used, the eighth bit would be 0 to make 00100101, which contains an odd
 number of 1 bits.

 Parity is used to detect errors affecting an odd number of bits. (This is
 true regardless of whether even or odd parity is specified). If an even
 number of bits is affected, the error will not be detected. For example,
 if 01001011 is transmitted (even parity) but 01111011 is received, the
 error will not be detected, because the character still contains an even
 number of 1 bits. In modern serial communications, parity checking is
 commonly omitted. Some terminal devices, however, may be set for even or
 odd parity, and the port on the R1000 must be set to match.


 ENUMERATIONS


 Even

 Specifies that even parity checking be performed. This means that all bits
 transmitted for a single character, including the parity bit, will be an
 even number of 1s.


 None

 Specifies no parity checking.


 Odd

 Specifies that odd parity checking be performed. This means that all bits
 transmitted for a single character, including the parity bit, will be an
 odd number of 1s.


 REFERENCES

 function Parity
 procedure Terminal.Set_Parity



 @node !Tools.System_Utilities.Port

 subtype Port is Natural range 0 .. 4 * 16 * 16;

 DESCRIPTION

 Defines a representation for the Telnet and RS232 ports on the system.

 Each terminal device is connected to a specific port on the system; the
 specific port is assigned a value of this type. For each port there is a
 corresponding terminal object listed in the !Machine.Devices library
 with the name Terminal_N, where N is a port number.

              Table 17    Series 100-400 Hardware Port Assignments
         -------------------------------------------------------------- 
        |    |     |     |     |     |                                 |
        |    |Serie|Serie|Serie| Seri|                                 |
        |Port|s    |s    |s    | s   |               Notes             |
        |s   |100  |200  |300  | 400 |                                 |
         -------------------------------------------------------------- 
        |    |     |     |     |     |                                 |
        |1   |RS232|RS232|RS232| RS23| Used for operator console to    |
        |    |     |     |     |     | provide VT100-compatible, line- |
        |    |     |     |     |     | oriented Environment interface. |
        |    |     |     |     |     | Required to start machine.      |
         -------------------------------------------------------------- 
        |    |     |     |     |     |                                 |
        |2-15|Reser|Reser|Reser| Rese| Reserved for internal hardware  |
        |    |ved  |ved  |ved  | ved | use.                            |
         -------------------------------------------------------------- 
        |    |     |     |     |     |                                 |
        |16  |RS232|RS232|RS232| RS23| Typically used for operator's   |
        |    |     |     |     |     | Environment terminal to provide |
        |    |     |     |     |     | screen-oriented interface. On th|
        |    |     |     |     |     | Series 300, this port is labeled|
        |    |     |     |     |     | "External Modem." On the 400, it|
        |    |     |     |     |     | is labeled "Comm Port."         |
         -------------------------------------------------------------- 
        |    |     |     |     |     |                                 |
        |17- |RS232|RS232|Unuse| Unus| On the Series 100 and 200, the  |
        |47  |     |     |d    | d   | available range of ports (17-32 |
        |    |     |     |     |     | or 17-47) depends on how many   |
        |    |     |     |     |     | serial-communications panels    |
        |    |     |     |     |     | are installed. Typically, these |
        |    |     |     |     |     | ports are assigned to login     |
        |    |     |     |     |     | terminals, printers, and other  |
        |    |     |     |     |     | applications such as CDF        |
        |    |     |     |     |     | interfaces.                     |
         -------------------------------------------------------------- 
        |    |     |     |     |     |                                 |
        |48- |RS232|Unuse|Unuse| Unus| Ports 48-79 are available only o|
        |223 |     |d    |d    | d   | the Series 100, and only when   |
        |(48-|     |     |     |     | additional serial-communications|
        |79) |     |     |     |     | panels are installed. Ports     |
        |    |     |     |     |     | 80-223 are not available.       |
         -------------------------------------------------------------- 
        |    |     |     |     |     |                                 |
        |224-|Telne|Telne|Telne| Teln| Available as an upgrade on Serie|
        |255 |t    |t    |t    | t   | 100 and 200 machines; standard o|
        |    |upgra|upgra|     |     | Series 300 and 400 machines. The|
        |    |de   |de   |     |     | standard machine initialization |
        |    |     |     |     |     | for the current Environment     |
        |    |     |     |     |     | release configures ports 235-249|
        |    |     |     |     |     | as login ports.                 |
         -------------------------------------------------------------- 



 Also see package Queue for more information on the ports used to
 communicate with printers.

 Some Environment commands accept the port number as a parameter (for exam-
 ple: Flow_Control, Operator.Enable_Terminal, and Operator.Force_Logoff).
 Other commands display port numbers associated with jobs and logged-in
 users (for example: What.Users and What.Jobs). Ports can be opened for I/O
 by opening objects named !Machine.Devices.Terminal_N, where N is a port
 number.


 REFERENCES

 function Terminal
 package Terminal



 @node !Tools.System_Utilities.Priority

 function Priority (For_Job : Job_Id := System_Utilities.Get_Job)
                                                  return Natural;

 DESCRIPTION

 Returns the priority of the specified job.

 This function returns the CPU priority for the specified job. The
 priorities are defined in package Scheduler. By default, the function
 returns the priority of the current job.


 PARAMETERS

 For_Job : Job_Id := System_Utilities.Get_Job;

 Specifies the job for which the priority is desired. The default is the
 current job.


 return Natural;

 Returns the CPU priority of the specified job.


 REFERENCES

 function Scheduler.Get_Cpu_Priority



 @node !Tools.System_Utilities.Receive_Flow_Control

 function Receive_Flow_Control (Line : Port :=
                                System_Utilities.Terminal)
                                            return String;

 DESCRIPTION

 Determines what method, if any, is used for controlling the flow of data
 received from the device on the specified port.

 Certain devices use flow control to prevent data overruns. Some devices
 support hardware flow control (CTS receiving, RTS or DTR transmitting) and
 some devices support software flow control (through XON and XOFF
 transmissions).


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port to be checked for flow control. The default is the port
 number of the port through which the current session is logged in.


 return String;

 Returns the method used for controlling the flow of data received from the
 device.

 Four types of receive flow control are available:

 *  NONE: Indicates that there is no software or hardware flow control for
    the line.

 *  XON_XOFF: Indicates that software flow control is enabled for the line.
    This value indicates that the device should stop transmitting when it
    receives an XOFF from the Rational system and can resume transmission
    when it receives
    an XON.

 *  RTS: Indicates that hardware flow control based on the RTS modem
    control signal is enabled for the line. This value indicates that the
    device should stop transmitting when the Rational system switches the
    RTS modem control signal
    to "off" and can resume transmission when the signal is switched to
    "on."

 *  DTR: Indicates that hardware flow control based on the DTR modem
    control signal is enabled for the line. This value indicates that the
    device should stop transmitting when the Rational system switches the
    DTR modem control signal to "off" and can resume transmission when the
    signal is switched to "on."


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 procedure Terminal.Set_Receive_Flow_Control



 @node !Tools.System_Utilities.Receive_Xon_Xoff_Bytes

 function Receive_Xon_Xoff_Bytes (Line : Port :=
                                  System_Utilities.Terminal)
                                         return Byte_String;

 DESCRIPTION

 Returns the two-byte string that contains the XON and XOFF characters for
 the receiving side of the specified port.

 This function returns a byte string with two bytes in it. The XON byte,
 the first byte, enables transmitting. The XOFF byte, the second byte,
 disables transmitting. These bytes are used for terminal devices that do
 not have hardware flow control.

 The bytes can be changed by using the Terminal.Set_Receive_Xon_Xoff_Bytes
 procedure.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port for which the information is desired. The default is the
 number of the port through which the current session logged in.


 return Byte_String;

 Returns the two-byte string containing the XON and XOFF bytes.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 procedure Terminal.Set_Receive_Xon_Xoff_Bytes



 @node !Tools.System_Utilities.Receive_Xon_Xoff_Characters

 function Receive_Xon_Xoff_Characters
                  (Line : Port := System_Utilities.Terminal)
                                  return String;

 DESCRIPTION

  Returns the two-character string that contains the XON and XOFF
 characters for the receive side of the specified port.

 This function returns a string with two characters in it. XON, the first
 character, enables transmitting. XOFF, the second character, disables
 transmitting. These characters are used for terminal devices that do not
 have hardware flow control.

 The characters can be changed by using the Terminal.Set_Receive_Xon_Xoff-
 _Characters procedure.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the port number of the port through which the current session is logged
 in.


 return String;

 Returns the two characters.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 procedure Terminal.Set_Receive_Xon_Xoff_Characters



 @node !Tools.System_Utilities.Retargeted_Blocks

 Retargeted_Blocks : constant Bad_Block_Kinds := 2;

 DESCRIPTION

 Defines a value that indicates retargeted disk blocks.


 REFERENCES

 constant All_Bad_Blocks
 type Bad_Block_Kinds
 function Bad_Block_List
 constant Manufacturers_Bad_Blocks



 @node !Tools.System_Utilities.Session

 function Session (For_Session : Session_Id :=
                                 System_Utilities.Get_Session)
                                                  return Version;

 function Session (For_Session : Session_Id :=
                                 System_Utilities.Get_Session)
                                                  return Object;

 DESCRIPTION

 Returns the version or object for the specified session.

 By default, the value for the current session is returned.


 PARAMETERS

 For_Session : Session_Id := System_Utilities.Get_Session;

 Specifies the session for which the version or object is desired. The
 default is the current session.


 return Version;



 Returns the directory version.


 return Object;



 Returns the directory object.


 REFERENCES

 subtype Object
 subtype Version



 @node !Tools.System_Utilities.Session_Id

 subtype Session_Id is Machine.Session_Id;

 DESCRIPTION

 Defines a representation for a user's session.

 A session is referenced by the Environment through a corresponding
 Session_Id. Sessions are created when a user logs into the system, and
 they are permanent objects in the user's home library unless they are
 explicitly deleted or destroyed.



 @node !Tools.System_Utilities.Session_Iterator

 type Session_Iterator is private;

 DESCRIPTION

 Defines a type that allows iterating over all sessions currently active in
 the Environment (that is, all sessions currently logged into the
 system).

 Objects of the Session_Iterator type contain all of the information
 necessary to iterate over all of the sessions. The type is used with the
 Init and Next procedures and the Value and Done functions. Refer to the
 "Iteration Capability" subsection in the introduction to this package for
 more information about the session iterator.


 REFERENCES

 function Done
 procedure Init
 type Job_Iterator
 procedure Next
 type Terminal_Iterator
 function Value



 @node !Tools.System_Utilities.Session_Name

 function Session_Name
       (For_Session : Session_Id := System_Utilities.Get_Session)
                                                   return String;

 DESCRIPTION

 Returns the name of the specified session.

 This function returns a string that contains the simple name of the
 specified session. By default, the function returns the name of the
 current session.


 PARAMETERS

 For_Session : Session_Id := System_Utilities.Get_Session;

 Specifies the session for which the name is desired. The default is the
 current session.


 return String;



 Returns the simple pathname name of the session (S_1).


 REFERENCES

 function Session
 subtype Session_Id



 @node !Tools.System_Utilities.Set_Page_Limit

 procedure Set_Page_Limit (Max_Pages : Natural;
                           For_Job   : Job_Id  :=
                           System_Utilities.Get_Job);

 DESCRIPTION

 Sets the upper limit for the virtual-memory pages created by the specified
 job (each page is 1,024 bytes).

 When a job begins, it is assigned a default page limit. By default, a job
 is allowed to create 8,000 pages. This default is determined by the value
 of the Session.Default_Job_Page_Limit session switch. Refer to the
 Session and Job Management (SJM) book for more information on this switch.

 If a job is elaborating Ada units, up to twice the maximum default page
 limit can be specified by these units through the Page_Limit pragma or the
 R1000_Cg.Page_Limit library switch. Refer to package Switches in the
 Library Management (LM) book for more information this switch and pragma.

 If a job attempts to create additional pages beyond the maximum page
 limit, the Storage_Error exception will be raised.

 Operator capability is required to set the page limit for jobs of users
 different from the caller.

 Note that the limit does not apply to the pages of files that the job is
 accessing; it applies only to data and stack space used by a job.


 PARAMETERS

 Max_Pages : Natural;
                                                                           

 Specifies the maximum number of pages that can be created by the job. In
 some cases, the job can create up to twice the maximum page limit before
 getting a storage error.


 For_Job : Job_Id := System_Utilities.Get_Job;

 Specifies the job for which to set the page limit. By default, the limit
 will be set for the calling job.


 ERRORS

 If a job attempts to create additional pages beyond the maximum page
 limit, the Storage_Error exception will be raised. This exception may not
 be raised immediately, but in the worst case the job will not be able to
 create more than twice the maximum page limit before getting a storage
 error.


 REFERENCES

 procedure Get_Page_Counts



 @node !Tools.System_Utilities.Stop_Bits

 function Stop_Bits (Line : Port := System_Utilities.Terminal)
                                    return Stop_Bits_Range;

 DESCRIPTION

 Returns the number of stop bits being used by the terminal device
 connected to the specified port.

 The Stop_Bits_Range value can be changed by using the
 Terminal.Set_Stop_Bits procedure.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the number of the port through which the current session is logged in.


 return Stop_Bits_Range;



 Returns the number of stop bits.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 subtype Stop_Bits_Range
 procedure Terminal.Set_Stop_Bits



 @node !Tools.System_Utilities.Stop_Bits_Range

 subtype Stop_Bits_Range is Integer range 1 .. 2;

 DESCRIPTION

 Defines the allowed values for the number of stop bits.

 Stop bits are part of the RS232 protocol used to communicate between a
 terminal device and the system. The number of stop bits is determined by
 the requirements of the terminal device.


 REFERENCES

 function Stop_Bits
 procedure Terminal.Set_Stop_Bits



 @node !Tools.System_Utilities.System_Boot_Configuration

 function System_Boot_Configuration return String;

 DESCRIPTION

 Returns the name of the Environment software configuration that the system
 is running.

 This is the same name that is printed in the message window when users log
 into the Environment.


 PARAMETERS

 return String;



 Returns the name of the software configuration.



 @node !Tools.System_Utilities.System_Up_Time

 function System_Up_Time return Calendar.Time;

 DESCRIPTION

 Returns the calendar time when the system was last booted.


 PARAMETERS

 return Calendar.Time;



 Returns the time when the system was last booted.


 EXAMPLES

 The following example procedure calls the System_Up_Time function and
 displays the return value:

   procedure When_System_Booted is
       package Su renames System_Utilities;
       package Tu renames Time_Utilities;
   begin
       Io.Echo ("System last booted on " &
                Tu.Image (Tu.Convert_Time (Su.System_Up_Time)));
   end When_System_Booted;

 REFERENCES

 Programming Tools (PT), package Calendar
 Programming Tools (PT), package Time_Utilities



 @node !Tools.System_Utilities.Tape

 subtype Tape is Natural range 0 .. 3;

 DESCRIPTION

 Defines the possible tape drives for the system.



 @node !Tools.System_Utilities.Tape_Name

 function Tape_Name (Drive : Tape := 0) return String;

 DESCRIPTION

 Returns the pathname of the tape object in the library system associated
 with the specified drive.


 PARAMETERS

 Drive : Tape := 0;

 Specifies the tape drive for which the pathname is desired.


 return String;



 Returns the pathname of the tape object associated with the specified tape
 drive.



 @node !Tools.System_Utilities.Terminal


 function Terminal (For_Session : Session_Id :=
                                  System_Utilities.Get_Session)
                                                   return Port;

 function Terminal (For_Session : Session_Id :=
                                  System_Utilities.Get_Session)
                                                return Version;

 function Terminal (For_Session : Session_Id :=
                                  System_Utilities.Get_Session)
                                                 return Object;

 DESCRIPTION

 Returns the port number, the version of the port, or the port object
 associated with the current session.

 By default, the value for the current session is returned.

 Each terminal device is connected to a specific port on the system. For
 more information about these ports, see the reference entry for subtype
 Port and the introduction to package Terminal in this book.


 PARAMETERS

 For_Session : Session_Id := System_Utilities.Get_Session;

 Specifies the session for which the port number, version, or object is
 desired. The default is the current session.


 return Port;



 Returns the port number. (See the reference entry for subtype Port.)


 return Version;



 Returns the directory version of the port.


 return Object;



 Returns the directory object of the port.


 REFERENCES

 subtype Object
 subtype Port
 subtype Version
 package Terminal



 @node !Tools.System_Utilities.Terminal_Columns

 function Terminal_Columns (Line : Port :=
                            System_Utilities.Terminal)
                                     return Natural;

 DESCRIPTION

 Returns the width (in columns) of the Environment display that is
 associated with the specified port.

 This function is especially useful for determining the size of an RWI or
 RXI window. (RXI is the Rational X Interface, which provides Environment
 terminal emulators within the X Window System; RWI is the Rational
 Windows Interface, which provides Environment terminal emulators within
 Microsoft Windows.)


 PARAMETERS

 Line : Port := System_Utilities.Terminal

 Specifies the number of the port to be queried. The default is the number
 of the port through which the current session is logged in.


 return Natural;



 Returns the number of columns in the Environment display associated with
 the specified port.


 REFERENCES

 function Terminal_Lines



 @node !Tools.System_Utilities.Terminal_Iterator

 type Terminal_Iterator is private;

 DESCRIPTION

 Defines a type for iterating through all Telnet and RS232 port numbers that
 exist on a system.

 Each number (returned from the Value function) can be translated to an
 object name, using the Terminal_Name function.

 This type is used with the Init and Next procedures and the Value and Done
 functions. Refer to the "Iteration Capability" subsection in the
 introduction to this package for more information about the terminal
 iterator.


 REFERENCES

 function Done
 procedure Init
 type Job_Iterator
 procedure Next
 type Session_Iterator
 function Value



 @node !Tools.System_Utilities.Terminal_Lines

 function Terminal_Lines (Line : Port :=
                            System_Utilities.Terminal)
                                     return Natural;

 DESCRIPTION

 Returns the length (in lines) of the Environment display that is
 associated with the specified port.

 This function is especially useful for determining the size of an RXI or
 RWI window. (RXI is the Rational X Interface, which provides Environment
 terminal emulators within the X Window System; RWI is the Rational
 Windows Interface, which provides Environment terminal emulators within
 Microsoft Windows.)


 PARAMETERS

 Line : Port := System_Utilities.Terminal

 Specifies the number of the port to be queried. The default is the port
 number of the port through with the current session is logged in.


 return Natural;



 Returns the number of lines in the Environment display associated with the
 specified port.


 REFERENCES

 function Terminal_Columns



 @node !Tools.System_Utilities.Terminal_Name

 function Terminal_Name (Line : Port := System_Utilities.Terminal)
                                                    return String;

 DESCRIPTION

 Returns the fully qualified pathname of the terminal-port object for the
 specified port.

 Terminal-port objects are contained in !Machine.Devices.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port for which the pathname is desired. The default is the
 port number of the terminal-port object associated with the current
 session.


 return String;



 Returns the fully qualified pathname of the terminal-port object-for
 example: !Machine.Devices.Terminal_245.



 @node !Tools.System_Utilities.Terminal_Type

 function Terminal_Type (Line : Port := System_Utilities.Terminal)
                                                    return String;

 DESCRIPTION

 Returns the name of the terminal type in use by the specified port.

 This value can be changed by using the Terminal.Set_Terminal_Type
 procedure; this has little benefit, however, since only the output driver
 for the terminal type is changed--other elements of the terminal type,
 such as the key bindings, remain unaffected. See package Terminal for more
 information.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the port number of the port through which the current session is logged
 in.


 return String;



 Returns the name for the terminal type associated with the specified port.

 Note that if the Terminal.Set_Terminal_Type procedure was executed before
 a call to Terminal_Type function, the return value will not reflect a
 consistent terminal type, since only the output driver, and not the key
 binding, is changed by Terminal.Set_Terminal_Type.


 REFERENCES

 procedure Terminal.Set_Terminal_Type



 @node !Tools.System_Utilities.User

 function User (For_Session : Session_Id :=
                              System_Utilities.Get_Session)
                                            return Version;

 function User (For_Session : Session_Id :=
                              System_Utilities.Get_Session)
                                             return Object;

 DESCRIPTION

 Returns the version or object that represents the user for the specified
 session.

 By default, the function returns the user for the current session.


 PARAMETERS

 For_Session : Session_Id := System_Utilities.Get_Session;

 Specifies the session for which the user is desired. The default returns
 the user for the current session.


 return Version;



 Returns the directory version of a user corresponding to the specified
 session.


 return Object;



 Returns the directory object of a user corresponding to the specified
 session.



 @node !Tools.System_Utilities.User_Name

 function User_Name (For_Session : Session_Id :=
                     System_Utilities.Get_Session)
                                return String;

 DESCRIPTION

 Returns the username of the user who created the specified session.

 This function returns a string that contains the simple name of the user
 who created the specified session. By default, the function returns the
 username for the current session.


 PARAMETERS

 For_Session : Session_Id := System_Utilities.Get_Session;

 Specifies the session for which the username is desired. The default is the
 current session.


 return String;



 Returns the username.



 @node !Tools.System_Utilities.Value

 function Value (Iter : Job_Iterator) return Job_Id;

 function Value (Iter : Session_Iterator) return Session_Id;

 function Value (Iter : Terminal_Iterator) return Natural;

 DESCRIPTION

 Returns the current iterator value for the element in a collection of
 sessions, jobs, or terminal ports.

 The Done, Init, Next, and Value functions and procedures are used together
 to form an iterator. Specific iterators are defined by the Job_Iterator,
 Session_Iterator, and Terminal_Iterator types.

 Refer to the "Iteration Capabilities" subsection in the introduction to
 this package for more information and examples showing how to use
 iteration.


 PARAMETERS

 Iter : Job_Iterator;

 Specifies the iterator for which the job identifier is desired.


 return Job_Id;



 Returns the job identifier.


 Iter : Session_Iterator;

 Specifies the iterator for which the session identifier is desired.


 return Session_Id;



 Returns the session identifier.


 Iter : Terminal_Iterator;

 Specifies the iterator for which the terminal number is desired.


 return Natural;



 Returns the terminal number.


 REFERENCES

 function Done
 procedure Init
 type Job_Iterator
 procedure Next
 type Session_Iterator
 type Terminal_Iterator



 @node !Tools.System_Utilities.Version

 subtype Version is Directory.Version;

 DESCRIPTION

 Defines a type for a version.

 Version is a subtype of type !Implementation.Directory.Version, which is
 an implementation detail of the R1000 library system. The Environment
 maintains multiple versions for each object in the directory system.
 Version numbers are assigned by the Environment when each version is
 created. Certain procedure or function interfaces may require specifying a
 version parameter.

 See the Library Management (LM) book for more information on versions.



 @node !Tools.System_Utilities.Xon_Xoff_Bytes

 function Xon_Xoff_Bytes (Line : Port := System_Utilities.Terminal)
                                                return Byte_String;

 DESCRIPTION

 Returns the two-byte string that contains the XON and XOFF bytes for the
 transmitting side of the specified port.

 This function returns a byte string with two bytes in it. The XON byte,
 the first byte, enables transmitting. The XOFF byte, the second byte,
 disables transmitting. These bytes are used for terminal devices that do
 not have hardware flow control, and they vary with different kinds of
 terminal devices. These bytes can be changed using the
 Terminal.Set_Xon_Xoff_Bytes procedure.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the port number of the port through which the current session is logged
 in.


 return Byte_String;

 Returns the two bytes.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 function Receive_Xon_Xoff_Bytes
 function Xon_Xoff_Characters
 procedure Terminal.Set_Xon_Xoff_Bytes



 @node !Tools.System_Utilities.Xon_Xoff_Characters

 function Xon_Xoff_Characters (Line : Port :=
                               System_Utilities.Terminal)
                                           return String;

 DESCRIPTION

 Returns the two-character string that contains the XON and XOFF characters
 for the transmitting side of the specified port.

 This function returns a string with two characters in it. XON, the first
 character, enables transmitting. XOFF, the second character, disables
                                                                           

 transmitting. These characters are used for terminal devices that do not
 have hardware flow control, and they vary depending on the kind of
 terminal device. The characters can be changed using the
 Terminal.Set_Xon_Xoff_Characters procedure.


 PARAMETERS

 Line : Port := System_Utilities.Terminal;

 Specifies the port number for which the information is desired. The default
 is the number of the port through which the current session is logged in.


 return String;



 Returns the two characters.


 RESTRICTIONS

 This function returns valid information only for RS232 ports.


 REFERENCES

 function Receive_Xon_Xoff_Characters
 function Xon_Xoff_Bytes
 procedure Terminal.Set_Xon_Xoff_Characters



 @node !Commands.Tape

 Package Tape commands can be used to build, read, write, or display the
 labels from standard ANSI tapes, to unload or rewind tapes, and to display
 the hexadecimal and ASCII contents of any tapes. These commands are
 listed below.


 RESOURCES IN PACKAGE TAPE

 The commands in this package fall into the following functional groups:

 Displaying the contents of a tape: Display_Tape

 Processing an ANSI-labeled tape:  Examine_Labels, Format_Tape, Read, Write

 Unloading and rewinding a tape:   Rewind, Unload


 KEY CONCEPTS FOR PACKAGE TAPE

 Package Tape commands can be used for either 8-millimeter or 9-track tapes
 (also called tape volumes or volumes).

 Refer to the System Manager's Guide for definitions of the following terms:

 *  Record formats (fixed-length, variable-length, and spanned)

 *  ANSI-labeled tape formats (straight and chained)

 *  Unlabeled tapes

 *  Tape labels

 *  Block length

 *  Single-volume and multivolume file sets (one or more files recorded
    contiguously over one or more tapes)

 *  Volume-set names

 Also refer to the System Manager's Guide for a description of tape
 operations, including how to:

 *  Answer a tape-mount request displayed on the operator console

    Depending on whether or not the tape drive is already allocated to the
    user's session, some package Tape commands require the operator or
    system manager to respond to a tape-mount request.

 *  Choose among multiple tape-mount requests

 *  Assign volume identifiers (used to uniquely identify each tape volume)

 *  Choose the proper tape format when transferring information between an
    R1000 and some other system, such as a VAX

 *  Read multivolume sets generated by a non-R1000 system

 *  Transfer binary files between R1000s (using the Archive.Save and
    Archive.Restore commands)

 *  Make a DFS backup or a system backup

 Finally, the Rational Software Library Catalog offers other, more
 specialized tape utilities that can, for example, read tapes written in
 UNIX tar format.


 Processing ANSI-Labeled Tapes

 Several package Tape commands are used to process ANSI-labeled tapes. For
 example, you can:

 *  Create an ANSI-labeled tape using the Format_Tape command

 *  Examine ANSI tape labels using the Examine_Labels command

 *  Read and write ANSI-labeled tapes using the Read and Write commands


 Displaying the Contents of Non-ANSI Tapes

 The Display_Tape command allows you to display the contents of any tape,
 in both ASCII and hexadecimal notation.


 Transferring Data between Systems by Tape

 The Read and Write commands are useful when transferring information
 between two different kinds of systems that are not connected by a network
 (for example, when transferring files between a VAX and the R1000).

 However, these commands process only files that can be manipulated by
 package Io, which excludes such objects as activities, switch files,
 session objects, DIANA structures, and so on. In addition, these commands
 do not preserve the original names and classes of Environment objects. To
 move other files or objects between R1000 systems that are not connected by
 a network, or to preserve the original names and classes of objects when
 moving them, use the Archive.Save and Archive.Restore commands.

 To create backup tapes for restoring data onto the same machine or a new
 machine, see the System Manager's Guide.


 Other Tape Operations

 The Rewind command allows you to rewind a tape from a remote location and
 leave the tape drive online.

 The Unload command allows you to rewind a tape, unload it, and leave the
 tape drive offline.


 @node !Commands.Tape.Display_Tape

 procedure Display_Tape (Drive             : Natural := 0;
                         Marks_To_Skip     : Integer := 0;
                         Records_To_Skip   : Integer := 0;
                         Blocks_To_Display : Natural := 10);

 DESCRIPTION

 Produces hexadecimal and ASCII displays of the contents of a specified
 portion
 of tape in an Environment output window.

 This command can display the contents of both unlabeled tapes (which do
 not have volume identifiers) and labeled tapes (which do have volume
 identifiers).

 Unless the tape drive is already allocated to the user's session, a
 tape-mount request is displayed on the operator console following the
 promotion of this command. The operator or system manager is usually
 responsible for responding to this tape-mount request. Refer to the System
 Manager's Guide for more information on how to respond to a tape-mount
 request.


 Positioning the Tape

 This command allows you to specify what area of the tape to display,
 relative to its current position. If the tape drive is already allocated
 to your session, successive promotions of this command do not rewind the
 tape. This allows you to display adjoining portions of the tape.

 You can position the tape before displaying its contents by skipping tape
 marks, tape records, or both.

 A tape mark divides the tape into logical segments. For example, an
 ANSI-labeled tape might have the form:

 <labels> <tape_mark> <user data> <tape_mark> <labels> <tape_mark> . . .

 Here, tape marks separate user data from tape labels. Two consecutive tape
 marks typically indicate the logical end of the tape.

 Note: A tape record is another name for a tape block, and it has nothing
 to do with logical file records.

 In the above example, the labels and user data each consist of one or more
 tape blocks.

 If both marks and records are specified, marks are skipped first and then
 records are skipped. Marks and records can be specified either forward from
 the current position (positive parameter values) or backward from the
 current position (negative parameter values).

 When skipping from tape mark to tape mark, the tape controller does not read
 the intervening tape blocks; when skipping tape blocks, it reads the
 blocks before skipping them. Therefore, when given the choice of
 traversing a tape by skipping either tape marks or tape blocks, it is much
 faster to move the tape using Marks_To_Skip rather than Records_To_Skip.


 PARAMETERS

 Drive : Natural := 0;

 Specifies from which tape drive to display the contents of a tape. The
 default is drive 0.


 Marks_To_Skip : Integer := 0;

 Specifies the number of tape marks to skip. Negative values move the tape
 backward and positive values move the tape forward.

 The default for this parameter is to skip no marks.


 Records_To_Skip : Integer := 0;

 Specifies the number of tape blocks to skip. Negative values move the tape
 backward and positive values move the tape forward.

 The tape controller reads each tape block as it skips from one to tape
 block to another. If a tape mark is encountered while skipping from one
 tape block to another, the Display_Tape procedure halts the tape where the
 tape mark is encountered and displays the message Tape Mark Encountered.

 The default for this parameter is to skip no tape blocks.


 Blocks_To_Display : Natural := 10;

 Specifies the number of tape blocks to display. When zero tape blocks are
 specified, the tape moves to a position specified by one or both of the
 Records_To_Skip and Marks_To_Skip parameter(s), no error is generated,
 and no tape blocks are displayed.

 The default for this parameter is to display 10 blocks.


 RESTRICTIONS

 The Environment supports a maximum tape-block size of 4,096 bytes.


 EXAMPLES

 The command:

   Tape.Display_Tape (Drive             => 0,
                      Marks_To_Skip     => 0,
                      Records_To_Skip   => 0,
                      Blocks_To_Display => 10);

 displays 10 tape blocks from the current position of the tape, unless a
 tape mark is encountered before 10 blocks are read. The data is displayed
 in hexadecimal on the left; ASCII character equivalents are displayed on
 the far right. Unprintable ASCII characters (for example, null characters)
 are represented by periods. For example:

   Block 1,  Length 80 (50)
       0  454F 4631 564D 5346 524D 5454 532E 5458  EOF1VMSFRMTTS.TX
      10  5420 2020 2030 3239 3730 3030 3030 3130  T    02970000010
      20  3030 3330 3030 3130 3020 3931 3135 3120  003000100 91151
      30  3030 3030 3020 3030 3030 3031 5231 3030  00000 000001R100
      40  303A 5630 3031 2E30 3020 2020 2020 2020  0:V001.00

   Block 2,  Length 80 (50)
       0  454F 4632 4430 3230 3438 3030 3531 3620  EOF2D0204800516
      10  2020 2020 2020 2020 2020 2020 2020 2020
      20  2020 2020 2020 2020 2020 2020 2020 2020
      30  2020 3030 2020 2020 2020 2020 2020 2020    00
      40  2020 2020 2020 2020 2020 2020 2020 2020

   Tape Mark Encountered

 This display shows two tape blocks and a Tape Mark Encountered message.
 The two tape blocks correspond to end-of-file labels; the Tape Mark
 Encountered message indicates that a tape mark has been encountered and
 that, therefore, no further blocks are displayed.



 @node !Commands.Tape.Error

 Error : exception;

 DESCRIPTION

 Defines an exception that is raised by several procedures in this package
 when errors occur.



 @node !Commands.Tape.Examine_Labels

 procedure Examine_Labels
                      (Vol_Id             : String  := "";
                       Vol_Set_Name       : String  := "";
                       To_Operator        : String  := "Thank You";
                       Volume_Labels_Only : Boolean := True);

 DESCRIPTION

 Displays the labels from the specified ANSI-formatted tape in an
 Environment output window.

 This command is useful when trying to identify an unmarked ANSI tape. The
 Volume_Labels_Only parameter can be set to False to provide additional
 information about the contents of the tape by displaying other labels on
 the tape. For example, file labels contain information such as the tape's
 record format.

 A tape-mount request is displayed on the operator console following the
 promotion of this command. The operator or system manager is usually
 responsible for responding to this tape-mount request. Refer to the System
 Manager's Guide for more information on how to respond to a tape-mount
 request.


 PARAMETERS

 Vol_Id : String := "";

 Specifies the volume identifier for the tape whose labels are to be
 displayed.

 The specified string is either padded on the right with blanks to a length
 of six characters or truncated on the right to shorten it to six
 characters, as appropriate. The resulting string must either be blank or
 exactly match the tape's existing volume identifier; otherwise, an error
 is generated and no labels are displayed.


 Vol_Set_Name : String := "";

 Specifies the name of the volume set to be examined. The default specifies a
 blank volume identifier. This information is used only as part of the
 operator's tape-mount request; it is not verified against the tape's
 existing volume-set name.


 To_Operator : String := "Thank You";

 Specifies a message to be displayed on the operator console following the
 promotion of this command. This provides a way for the user to send
 additional information to the operator or system manager about which
 tape to mount.


 Volume_Labels_Only : Boolean := True;

 Specifies whether to examine all the labels on the tape or only the volume
 labels. The default specifies that only volume labels are to be displayed.


 EXAMPLES

 The following command displays only the tape's volume labels:

   Tape.Examine_Labels (Vol_Id             => "",
                        Vol_Set_Name       => "",
                        To_Operator        => "Thank you",
                        Volume_Labels_Only => True);

 A typical output looks like this:

   Volume Labels
    Volume Id: 029700
    Accessibility: ' '
    Owner_Id:
                       2020 2020 2020 2020 2020 2020 2020

 The following command displays all tape labels (volume, file, and
 end-of-file labels):

   Tape.Examine_Labels (Vol_Id             => "",
                        Vol_Set_Name       => "",
                        To_Operator        => "Thank you",
                        Volume_Labels_Only => False);

 A typical output looks like this:

   Volume Labels
    Volume Id: 029700
    Accessibility: ' '
    Owner_Id:
                       2020 2020 2020 2020 2020 2020 2020

   File Labels
    File Identifier: INDEX.MAP
    File Set Identifier: 029700
    File Sequence Number: 1 File Section Number: 1
    Generation Number: 1 Generation Version Number: 0
    Creation Date: 05/31/91
    Expiration Date: 01/01/01
    Accessibility: ' '
    System Code: R1000:V001.00
    Record Format: VARIABLE_LENGTH
    Block Length: 2048
    Record Length: 516
    Reserved Field:
                       2020 2020 2020 2020 2020 2020 2020 2020
                       2020 2020 2020 2020 2020 2020 2020 2020
                       2020 20
    Buffer Offset: 0
    . . .
   End Of File Labels
    Block Count: 1
   File Labels
    File Identifier: INDEX.MAP
    File Set Identifier: 029700
    File Sequence Number: 6 File Section Number: 1
    Generation Number: 1 Generation Version Number: 0
    Creation Date: 05/31/91
    Expiration Date: 01/01/01
    Accessibility: ' '
    System Code: R1000:V001.00
    Record Format: VARIABLE_LENGTH
    Block Length: 2048
    Record Length: 516
    Reserved Field:
                       2020 2020 2020 2020 2020 2020 2020 2020
                       2020 2020 2020 2020 2020 2020 2020 2020
                       2020 20
    Buffer Offset: 0


 @node !Commands.Tape.Format_Tape

 procedure Format_Tape (Drive  : Natural := 0;
                        Vol_Id : String  := "");

 DESCRIPTION

 Initializes the tape on the specified drive by formatting it with ANSI
 labels that contain the specified volume identifier.

 This command is useful for sites that choose to follow a strict ANSI
 policy by assigning a unique volume identifier to each tape at the time
 the tape is initialized. Refer to the System Manager's Guide for more
 information on how to assign volume identifiers using this strategy.

 Unless the tape drive is already allocated to the user's session, a
 tape-mount request is displayed on the operator console following the
 promotion of this command. The operator or system manager is usually
 responsible for responding to this tape-mount request. Refer to the System
 Manager's Guide for more information on how to respond to a tape-mount
 request.


 PARAMETERS

 Drive : Natural :=0;

 Specifies on which tape drive to format the tape. The default is drive 0.


 Vol_Id : String := "";

 Specifies a standard six-character ANSI volume identifier with which to
 label the tape.

 The specified string is either padded on the right with blanks to a length
 of six characters or truncated on the right to shorten it to six
 characters, as appropriate. For example, if the null string (the default)
 is specified, then the volume identifier consists of six blanks and the tape
 is treated as an unlabeled tape during the tape-mount request.



 @node !Commands.Tape.Read

 procedure Read (Volume      : String;
                 Directory   : String := "$";
                 Options     : String := "R1000 Add_New_Line";
                 To_Operator : String := "Thank You";
                 Response    : String := "<PROFILE>");

 DESCRIPTION

 Reads an ANSI-formatted tape and copies its contents into the specified
 directory.

 Files read from an ANSI tape into an Environment directory are always
 restored as objects of class File.

 A tape-mount request is displayed on the operator console following the
 promotion of this command. The operator or system manager is usually
 responsible for responding to this tape-mount request. Refer to the System
 Manager's Guide for more information on how to respond to a tape-mount
 request.


 Recreating Ada Units from Source Files

 Tape files that contain Ada source can be parsed and restored to the
 Environment as Ada units using the Compilation.Parse command. This applies
 to tape files that:

 *  Were written by a foreign host (such as a VAX/VMS system)

 *  Contain Ada source in nonbinary form (for example, tapes written using
    the Write command)


 PARAMETERS

 Volume : String;

 Specifies the volume identifier of the tape that is being read.

 The specified string is either padded on the right with blanks to a length
 of six characters or truncated on the right to shorten it to six
 characters, as appropriate. The resulting string must either be blank or
 exactly match the tape's existing volume identifier; otherwise, an error
 is generated and the tape is not read.


 Directory : String := "$";

 Specifies the Environment directory destination for the files being read.
 The default is the enclosing directory. This directory must already exist;
 it cannot be created by specifying a new directory name when promoting
 this command. Also, a remote directory cannot be specified.


 Options : String := "R1000 Add_New_Line";

 Specifies options that can be used when reading tapes, as described below.


 *  Add_New_Line

    Specifies whether to add an ASCII newline character following each
    record read from tape. Without this option, bytes are copied from tape
    as a continuous stream of characters.


 *  Format= literal

    Specifies the format in which the tape was written. The format can be
    specified as, for example, R1000 or as Format = R1000. Valid formats
    are:

    R1000                Specifies a tape formatted for an R1000 system
                         (this is the default).

    MV                   Specifies a tape formatted for a Data General MV
                         system.

    VAX/VMS              Specifies a tape formatted for a VAX/VMS system.


 To_Operator : String := "Thank You";

 Specifies a message to be displayed on the operator console following the
 promotion of this command. This provides a way for the user to send
 additional information to the operator or system manager about which
 tape to mount.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 This command can read only files that can be manipulated by package Io, and
 it reads them only as objects of class File.

 To move other files or objects between R1000s using tape, or to preserve
 the original names and classes of objects when moving them, use the
 Archive.Save and Archive.Restore commands.

 Caution: Since the Read procedure reads all files into one directory, this
 data will not be distributed across all disks. Use caution when reading a
 tape that contains enough data to completely fill a single disk.


 EXAMPLES

 The command:

   Tape.Read (Volume    => "070501",
              Directory => "!users.thales",
              Options   => "vax/vms");

 reads the tape with the specified ANSI volume label. The files on the tape
 are read to the directory !Users.Thales. The VAX/VMS value for the Options
 parameter informs the Environment that the tape was written as a
 VAX/VMS-compatible ANSI tape.

 Suppose the tape read by the command shown above contains two tape files
 named Vmsfrmtts.Txt and Vtextfild.Ada. If these tape files are read into an
 empty !User.Thales directory, the directory would then look like this:

   !Users.Thales
     Index_Map        : File;
     Vmsfrmtts_Txt    : File;
     Vtextfild_Ada    : File;

 In this example, notice that along with the two tape files, a file named
 Index.Map is also read from the tape. The Write command creates this
 Index.Map file. Notice also that the filenames differ between the tape and
 the directory; see the Write command for additional information.


 REFERENCES

 procedure Write
 Library Management (LM), package Archive



 @node !Commands.Tape.Rewind

 procedure Rewind (Drive : Natural := 0);

 DESCRIPTION

 Rewinds the specified tape unit and leaves it online and loaded at the
 beginning-of-tape marker.

 Unless the tape drive is already allocated to the user's session, a
 tape-mount request is displayed on the operator console following the
 promotion of this command. The operator or system manager is usually
 responsible for responding to this tape-mount request. Refer to the System
 Manager's Guide for more information on how to respond to a tape-mount
 request.


 PARAMETERS

 Drive : Natural := 0;

 Specifies the tape drive whose tape is be rewound. The default is drive 0.



 @node !Commands.Tape.Unload

                                                                           

 procedure Unload (Drive : Natural := 0);

 DESCRIPTION

 Rewinds and unloads the specified tape and takes the tape drive offline.

 Unless the tape drive is already allocated to the user's session, a
 tape-mount request is displayed on the operator console following the
 promotion of this command. The operator or system manager is usually
 responsible for responding to this tape-mount request. Refer to the System
 Manager's Guide for more information on how to respond to a tape-mount
 request.


 PARAMETERS

 Drive : Natural := 0;

 Specifies the tape drive whose tape is to be unloaded. The default is drive
 0.



 @node !Commands.Tape.Write

 procedure Write (Files       : String := "$@";
                  Volume      : String := "";
                  Options     : String := "R1000 Text_Files";
                  To_Operator : String := "Thank You";
                  Response    : String := "<PROFILE>");

 DESCRIPTION

 Copies the specified Environment objects onto a tape as ANSI tape files.

 A tape-mount request is displayed on the operator console following the
 promotion of this command. The operator or system manager is usually
 responsible for responding to this tape-mount request. Refer to the System
 Manager's Guide for more information on how to respond to a tape-mount
 request.

 This command can process any Environment object that can be written by
 package Io. This includes Ada source files, text files, data files, and so
 on. It excludes objects such as activities, switch files, session objects,
 underlying DIANA structures, and so on. A request to write these
 excluded objects does not cause the tape operation to abort, but the
 objects are not written to tape and a message to that effect is placed in
 the log.


 Identifying Environment Objects Written onto Tape

 When Environment objects are written onto tape using the Write command, a
 naming algorithm converts the object names to new tape-file identifiers.
 These tape-file identifiers are generated to be unique and in a valid format
 for the destination system. For example, file identifiers generated for
 VAX/VMS systems are restricted to 9 characters; file identifiers generated
 for all other formats (including the R1000 format) are restricted to 17
 characters. The final tape-file identifier might bear little resemblance to
 the original object name.

 These tape-file identifiers are stored, each followed by its original object
 name, in a new tape file named Index.Map. This file is written as the last
 file on the tape.

 When tape files are read onto another system-for example, when they are
 read onto a VAX or are read onto another R1000 using the Read
 command-these tape-file identifiers, rather than the original object names,
 are used as their new names.

 A user can use the Index.Map file's one-to-one mapping between the original
 object names and their corresponding tape-file identifiers to manually give
 each object its original object name. Alternatively, a user could create a
 short program that uses the Index.Map file to programmatically rename each
 object.


 PARAMETERS

 Files : String := "$@";

 Specifies the objects to write onto tape. All objects that can be written
 by package Io can be written onto tape using the Write command. All
 objects are written as ANSI tape files regardless of their state or type at
 the time the command is promoted. Files contained in a remote directory
 cannot be specified.

 The default, $@, specifies that all objects in the enclosing directory are
 to be written onto tape.


 Volume : String := "";

 Specifies a standard six-character ANSI volume identifier with which to
 label the tape.

 The specified string is either padded on the right with blanks to a length
 of six characters or truncated on the right to shorten it to six
 characters, as appropriate.

 If the resulting string matches the tape's existing volume identifier, the
 identifier is not changed on the tape.

 If the resulting string is blank, then the tape-mount request will include
 a prompt for a new volume identifier.


 Options : String := "R1000 Text_Files";

 Specifies options that can be used when writing tapes, as described below.


 *  Block_Length=positive integer

    Specifies the block length for the tape. Tape blocks are written in the
    range 18 .. 4,096 bytes. (Rational has extended the maximum tape-block
    length to twice the ANSI-standard maximum of 2,048 bytes.)

    The default tape-block length is 2,048 bytes.

    See the Record_Format option for restrictions.


 *  Format=literal

    Specifies the format in which the tape is to be written. The format can
    be specified as, for example, R1000 or as Format = R1000. Valid tape
    formats are:

    R1000                Formats the tape for an R1000 system (this is the
                         default).

    MV                   Formats the tape for an MV system.

    VAX/VMS              Formats the tape for a VAX/VMS system.


 *  Label=string

    Specifies an optional part of the label written to the volume header.
    This allows the user to label the user's own tape, where string is the
    tape label. The default is to write no label.


 *  Record_Format=literal

    Specifies the ANSI record format. The record format can be specified as,
    for example, Fixed_Length or as Record_Format = Fixed_Length. Valid
    record formats are:

    Fixed_Length              Writes tapes with fixed-length records. The
                              length of the records is specified by the
                              Record_Length option. The Record_Length value
                              must be less than or equal to the
                              Block_Length value.

    Variable_Length           Writes tapes with variable-length records
                              (this is the default). The maximum record
                              length is specified by the Record_Length
                              option. The Record_Length value must be less
                              than or equal to the Block_Length value.

    Spanned                   Writes logical records that are larger than
                              the maximum block size. The maximum record
                              size is specified by the Record_Length option.


 *  Record_Length=positive integer

    Specifies the maximum record length for the tape. The default is 512
    bytes. See the Record_Format option for restrictions.


 *  Text_Files

    A Boolean option, its presence specifies that all objects written onto
    tape must contain only characters (as defined by the Ada specification
    for package Text_Io), line terminators, and page terminators. Objects
    written onto tape when this option is True cannot contain control
    characters. Each line of the file is written as a record on the tape.
    The implication is that text files written onto tape when this option is
    specified can then be read from tape without error according to the same
    rules as those used by the Text_Io.Get_Line procedure.

    If this option is not specified, it is assumed False. In this case, each
    object is written onto tape as a continuous string of characters.


 To_Operator : String := "Thank You";

 Specifies a message to be displayed on the operator console following the
 promotion of this command. This provides a way for the user to send
 additional information to the operator or system manager about which
 tape to mount.


 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. By default, this
 command uses the response characteristics specified in the job response
 profile for the current job. For other values accepted by this parameter,
 see Parameter-Value Conventions in the Reference Summary (RS) book.


 RESTRICTIONS

 This command writes only files that can be manipulated by package Io (or
 only by Text_Io, if the Text_Files option is True). This excludes such
 objects as activities, switch files, session objects, DIANA structures, and
 so on. These other kinds of objects are skipped, and a warning is
 generated in the log file.

 To move other files or objects between R1000s using tape, or to preserve
 the original names and classes of objects when moving them, use the
 Archive.Save and Archive.Restore commands.


 EXAMPLES

 Example 1

 Given the following directory:

   !Users.Thales.The_Directory
         Works         : Ada (Pack_Spec);
         Works         : Ada (Pack_Body);
           .Get_String : Ada (Func_Body);
           .Part_1     : Ada (Proc_Body);

 the following command:

   Tape.Write ("!Users.Thales.The_Directory.@");

 writes onto tape all the objects contained in Thales.The_Directory. All
 dependent Ada units (in this example, everything in package Works) are
 included. Each unit included on the tape is written as a separate file.
 Because all of the default values for the Options parameter are used, the
 tape written is an R1000 tape with variable-length records (each having
 a length of 512 bytes or fewer), no label, and a default block length of
 2,048 bytes.


 Example 2

 Suppose the objects shown in the following directory are written onto tape
 for a VAX/VMS system:

   !Documentation.Tape_Test_Library
     Text_File_Ada            : Coded Ada (Procedure_Spec);
     Vms_Format_Test_File_Txt : File (Text);

 The Index.Map file written onto tape looks like this:

   INDEX.MAP
   !DOCUMENTATION.TAPE_TEST_LIBRARY.INDEX_MAP'V(3)
   VTEXTFILD.ADA
   !DOCUMENTATION.TAPE_TEST_LIBRARY.TEXT_FILE_ADA'SPEC'V(2)
   VMSFRMTTS.TXT
   !DOCUMENTATION.TAPE_TEST_LIBRARY.VMS_FORMAT_TEST_FILE_TXT'V(5)

 The Index.Map file lists the name of each tape file (including the Index.Map
 file followed by the fully qualified pathname of the Environment object from
 which each tape file was derived.


 REFERENCES

 procedure Read
 Library Management (LM), package Archive



 @node !Commands.Terminal

 The R1000 communicates with terminals, workstations, printers, and modems
 through either RS232 asynchronous serial ports or Telnet TCP/IP network
 ports. Both types of ports are represented in the Environment as port
 objects.

 Commands in package Terminal access or modify a subset of settings for
 port objects. Other settings for port objects are located elsewhere in the
 Environment and are managed by other resources; for example, the network
 resources are described in the Rational Networking-TCP/IP Reference
 Manual.


 RESOURCES IN PACKAGE TERMINAL

 The commands in this package fall into the following functional groups:

 Controlling disconnects and login attempts on both Telnet and RS232 ports:

        Set_Detach_On_Disconnect            Set_Disconnect_On_Disconnect
        Set_Disconnect_On_Failed_Login      Set_Disconnect_On_Logoff
        Set_Log_Failed_Logins               Set_Login_Disabled
        Set_Logoff_On_Disconnect

 Changing output drivers on both Telnet and RS232 ports: Set_Terminal_Type

 Displaying port settings on both Telnet and RS232 ports: Current, Settings

 Configuring RS232 ports:

        Set_Character_Size            Set_Flow_Control
        Set_Input_Rate                Set_Output_Rate
        Set_Parity                    Set_Receive_Flow_Control
        Set_Receive_Xon_Xoff_Bytes    Set_Receive_Xon_Xoff_Characters
        Set_Stop_Bits                 Set_Xon_Xoff_Bytes
        Set_Xon_Xoff_Characters

 These resources are described in alphabetical order following the package
 introduction.


 KEY CONCEPTS FOR CONFIGURING PORTS

 Hardware ports are represented in the Environment as port objects. A
 subset of port objects are represented in !Machine.Devices.Terminal_N
 objects (where N is the number of the corresponding hardware port). This
 subset can be accessed and modified either through interactive commands in
 package Terminal or through the file-driven machine-initialization method.

 The following subsections are intended for system managers:

 *  "Identifying R1000 Hardware Ports for Environment Access" describes the
    distribution of hardware ports on the various R1000-series machines.

 *  "Checking the Current Settings for a Port" shows how to display the
    settings of a specified port.

 *  "Configuring System Ports" identifies the file-driven method for
    configuring the hardware ports during the boot process.

 *  "Modifying Disconnect and Login Behavior for a Port" describes this
    behavior and shows how to interactively modify port behavior with
    package Terminal commands.

 *  "Configuring RS232 Ports" describes RS232 settings and shows how to
    interactively modify these settings with package Terminal commands.


 Identifying R1000 Hardware Ports for Environment Access

 The R1000 has two types of hardware ports for terminal access:

 *  Telnet ports

 *  RS232 asynchronous serial ports

 Most package Terminal commands accept the Line parameter. This parameter
 is of type Port, and it identifies the physical port number. The Line
 parameter defaults to the number of the port through which your current
 session is logged in.

 Table 1 summarizes the distribution of both types of ports on the
 various series of R1000s.

              Table 1    Series 100-400 Hardware Port Assignments
         -------------------------------------------------------------------- 
        |     |      |      |      |      |                                  |
        |     |Series|Series|Series|Series|                                  |
        |Ports|      |      |      |      |                Notes             |
        |     |100   |200   |300   | 400  |                                  |
         -------------------------------------------------------------------- 
        |     |      |      |      |      |                                  |
        |1    |RS232 |RS232 |RS232 | RS23 | Used for operator console to     |
        |     |      |      |      |      | provide VT100-compatible, line-  |
        |     |      |      |      |      | oriented Environment interface.  |
        |     |      |      |      |      | Required to start machine.       |
         -------------------------------------------------------------------- 
        |     |      |      |      |      |                                  |
        |2-15 |Reser |Reser |Reser | Reser| Reserved for internal hardware   |
        |     |ved   |ved   |ved   | ved  | use.                             |
         ---- --------------------------------------------------------------- 
        |     |      |      |      |      |                                  |
        |16   |RS232 |RS232 |RS232 | RS23 | Typically used for operator's    |
        |     |      |      |      |      | Environment terminal to provide  |
        |     |      |      |      |      | screen-oriented interface. On the|
        |     |      |      |      |      | Series 300, this port is labeled |
        |     |      |      |      |      | "External Modem." On the 400, it |
        |     |      |      |      |      | is labeled "Comm Port."          |
         ---- --------------------------------------------------------------- 
        |     |      |      |      |      |                                  |
        |17-  |RS232 |RS232 |Unused|Unused| On the Series 100 and 200, the   |
        |47   |      |      |      |      | available range of ports (17-32  |
        |     |      |      |      |      | or 17-47) depends on how many    |
        |     |      |      |      |      | serial-communications panels     |
        |     |      |      |      |      | are installed. Typically, these  |
        |     |      |      |      |      | ports are assigned to login      |
        |     |      |      |      |      | terminals, printers, and other   |
        |     |      |      |      |      | applications such as CDF         |
        |     |      |      |      |      | interfaces.                      |
         ---- --------------------------------------------------------------- 
        |     |      |      |      |      |                                  |
        |48-  |RS232 |Unused|Unused|Unused| Ports 48-79 are available only on|
        |223  |      |      |      |      | the Series 100, and only when    |
        |(48- |      |      |      |      | additional serial-communications |
        |79)  |      |      |      |      | panels are installed. Ports      |
        |     |      |      |      |      | 80-223 are not available.        |
         ---- --------------------------------------------------------------- 
        |     |      |      |      |      |                                  |
        |224- |Telnet|Telnet|Telnet|Telnet| Available as an upgrade on Series|
        |255  |      |      |      |      | 100 and 200 machines; standard on|
        |     |up    |up    |      |      | Series 300 and 400 machines. The |
        |     |grade |grade |      |      | standard machine initialization  |
        |     |      |      |      |      | for the current Environment      |
        |     |      |      |      |      | release configures ports 235-249 |
        |     |      |      |      |      | as login ports.                  |
         ---- --------------------------------------------------------------
              
              
              
 Also see package Queue for more information on the ports used to
 communicate with printers.
              
              
 Checking the Current Settings for a Port

 To see the current settings for any port, execute the command:

   Settings (Line => n);

 where n is the desired port number.

 This command sends the following type of report to Current_Output:

   Terminal Settings for Port 16
   -----------------------------
   Terminal Type                  = RATIONAL
   Input Baud Rate                = BAUD_9600
   Output Baud Rate               = BAUD_9600
   Parity                         = NONE
   Stop_Bits                      = 2
   Char_Size                      = CHAR_8
   Flow Control for Transmit Data = NONE
   Flow Control for Receive Data  = NONE
   Login_Disabled                 = FALSE
   Log_Failed_Logins              = FALSE
   Disconnect_On_Failed_Login     = FALSE
   Disconnect_On_Logoff           = FALSE
   Logoff_On_Disconnect           = FALSE
   Disconnect_On_Disconnect       = FALSE


 Configuring System Ports

 There are two methods for configuring ports on the R1000:

 *  Initialization during system boot

 *  Interactive changes

 Both the package introduction and the command references for package
 Terminal provide useful background information about port settings,
 independent of which method you use.


 Initialization During System Boot

 During system initialization, Telnet and RS232 ports are automatically
 configured by machine-initialization procedures as user login ports or for
 communication with some other device--such as a printer or a modem. The
 !Machine.Initialization.Local.Terminal_Configuration file tells the
 Environment how to enable and configure ports for login.

 Permanent changes to default settings are best implemented through the
 Terminal_Configuration file. You can edit this file at any time to change
 the port settings. The changes take effect the next time you boot the
 R1000, or immediately if you execute the
 !Machine.Initialization.Rational.Terminals command.

 For more information on implementing a Terminal_Configuration file and other
 machine-initialization activities, see the online documentation in the
 !Machine.Initialization world and the System Manager's Guide.


 Interactive Changes

 Package Terminal commands are available to system managers for making
 interactive changes to port configurations. Note that changes to RS232
 hardware configurations made through package Terminal will be deactivated
 when the machine reboots, unless these changes are included in the
 Terminal_Configuration file.

 The following subsections show how to configure ports interactively.


 Modifying Disconnect and Login Behavior for a Port

 You can set the connection behavior and login status of serial and network
 ports interactively through commands in package Terminal and package
 Operator. All of these commands require operator capability.


 Enabling and Disabling Login for a Port

 Users log into the Environment with terminals and workstations by
 connecting to ports enabled for login. If a port is enabled for login,
 however, it cannot be enabled for a print queue or be connected to a CDF
 interface.

 You can make a port available or unavailable for login by using the
 Operator.Enable_Terminal and Operator.Disable_Terminal commands.

 To prevent a port from being enabled by the Operator.Enable_Terminal
 command, execute the command:

   Terminal.Set_Login_Disabled (Line     => n,
                                Disabled => True);

 where n is the number of the port to disable.


 Setting Disconnect Behavior for a Port

 You can set the way the R1000 responds to disconnect signals received from
 remote ports and whether or not the port should disconnect on logoffs or
 failed logins. Unless reset by machine initialization at reboot, these
 settings persist across boots.

 The following list shows how to use commands to set the different types of
 disconnect behavior:

 *  Disconnect on disconnect: Certain brands of communications equipment
    that pool RS232 ports permit ports to be reallocated only after all of
    the following conditions are met:

    1. The terminal user finishes with the port.

    2. A disconnect is sent to the R1000 by switching DCD to off.

    3. The R1000 acknowledges this disconnect by switching its own DTR
       output to off.

    To prevent all RS232 ports from eventually entering the nonallocatable
    state, and therefore making it impossible to log in, set
    Disconnect_On_Disconnect to True when using this kind of communications
    equipment.

    To instruct the R1000 to send a disconnect signal to a port that
    receives a disconnect signal from a remote port, execute the command:

      Set_Disconnect_On_Disconnect (Line    => n,
                                    Enabled => True);

    where n is the desired port number.

 *  Logoff on disconnect: When a user disconnects from a port before
    logging off from an Environment session, that session continues to run
    on the R1000 unless the port is set to log off on disconnect.

    To set logoff on disconnect for a specific port, execute the command:

      Set_Logoff_On_Disconnect (Line    => n,
                                Enabled => True);

    where n is the desired port number.

 *  Disconnect on logoff: When a user logs off from an Environment session,
    the port remains connected unless it is set to disconnect on logoff.
    This setting is especially useful for Telnet ports and is usually
    included in the machine-initialization Terminal_Configuration file.

    To set disconnect on logoff for a specific port, execute the command:

      Set_Disconnect_On_Logoff (Line    => n,
                                Enabled => True);

    where n is the desired port number.

 *  Disconnect on failed login: When a user repeatedly fails to log into an
    Environment session, perhaps by entering incorrect passwords or
    usernames, the connection between the user's terminal and the R1000
    is maintained--unless Disconnect_On_Failed_Login is set to True.

    To set a port to disconnect after repeated failed logins, execute the
    command:

      Set_Disconnect_On_Failed_Login (Line    => n,
                                      Enabled => True);

    where n is the desired port number.

 *  Log failed logins: When a user repeatedly fails to log into an
    Environment session, the attempt can be recorded in the system error
    log.

    To keep a log of failed logins, execute the command:

      Set_Log_Failed_Logins (Line    => n,
                             Enabled => True);

    where n is the desired port number.


 Configuring RS232 Ports

 RS232 hardware settings on the R1000's serial port and the connected
 device's serial port must match. Sometimes these settings are dictated
 exclusively by the terminal device. The following subsections describe
 these settings and how to change them through package Terminal
 commands--note, however, that these settings are normally configured
 through the Terminal_Configuration file.


 Data-Transmission Rate

 The data-transmission rate is the speed at which data is sent from and
 received by a port.

 To set the input or the output data-transmission rate for an RS232 port,
 use one (or both) of the following commands:

   Set_Input_Rate (Line  => n,
                   To_Be => i);

   Set_Output_Rate (Line  => n,
                    To_Be => i);

 where n is the port number and i is a valid input or output rate as listed
 in the reference entry.

 Both input and output rates are usually the same value.


 Number of Data Bits

 Each transmitted character is represented by a specified number of data
 bits. The number of bits in a character depends on the character set that
 the terminal uses. Normally this is seven or eight bits.

 To set the number of data bits per character for a specified RS232 port,
 execute the following command:

   Set_Character_Size (Line  => n,
                       To_Be => i);

 where n is the port number and i is the desired character size (an integer
 5 through 8).


 Number of Stop Bits

 Stop bits are transmitted after each character to serve as a frame for
 establishing data synchronization. The R1000 can receive data with any
 number of stop bits, but some terminal devices require a specific setting
 of one or two stop bits.

 To set the number of stop bits transmitted by a specific RS232 port,
 execute the following command:

   Set_Stop_Bits (Line  => n,
                  To_Be => i);
                                                                           

 where n is the port number and i is the number of desired stop bits (1 or
 2).


 Parity Checking

 You can specify no parity, odd parity, or even parity for characters
 received and transmitted by an RS232 port. If an odd or even parity is
 selected, then each transmitted character contains a parity bit that
 maintains either an odd or even number of 1 bits in the character. For
 example, if the character represented by 0100101 is to be transmitted
 using even parity, a 1 is added in the eighth bit to make 10100101, which
 contains an even number of 1 bits. If odd parity were used, the eighth bit
 would be 0 to make 00100101, which contains an odd number of 1 bits.

 Parity is used to detect errors affecting an odd number of bits. (This is
 true regardless of whether even or odd parity is specified). If an even
 number of bits is affected, the error will not be detected. For example,
 if 01001011 is transmitted (even parity) but 01111011 is received, the
 error will not be detected, because the character still contains an even
 number of 1 bits. In modern serial communications, parity checking is
 commonly omitted.

 To set the parity for a specified RS232 port, execute the following
 command:

   Set_Parity (Line  => n,
               To_Be => parity);

 where n is the port number and parity is the desired parity setting (None,
 Odd, or Even).


 Flow Control

 Flow control is the regulation of data flow. Some terminal devices require
 flow control to prevent transmission overruns. There are two general types
 of flow control:

 *  Hardware flow control: Hardware flow control consists of signals that
    are monitored by firmware in port-controller circuit boards. The ports
    on the R1000 can be configured to use RTS, CTS, and DTR signals for flow
    control.

    To enable hardware flow control (CTS) for transmitted data, you need to
    make a physical switch setting on the port controller.

    To enable hardware flow control for received data, execute the
    Set_Receive_Flow_Control command as described in the reference entry.

 *  Software flow control: Software flow control is executed by software
    running on the R1000 or the workstation. If software flow control is
    selected, then the flow of data is stopped when the device sends the
    XOFF byte or character. The flow is resumed when the XON byte or
    character is sent.

    To enable software flow control for data transmitted from an R1000
    port, execute the Set_Flow_Control command.

    To enable software flow control for data received by an R1000 port,
    execute the Set_Receive_Flow_Control command. See the reference entry
    for descriptions of the required parameters for these two commands.


 @node !Commands.Terminal.Character_Bits_Range

 subtype Character_Bits_Range is
         System_Utilities.Character_Bits_Range;

 DESCRIPTION

 Specifies the number of data bits per character.

 This command defines a subtype that is a set of integers in the range 5
 through 8.


 REFERENCES

 type System_Utilities.Character_Bits_Range



 @node !Commands.Terminal.Current

 function Current
          (S : Machine.Session_Id := Default.Session) return Port
                                renames System_Utilities.Terminal;

 DESCRIPTION

 Returns the port number through which the specified session is logged in.

 This function renames function Terminal in package System_Utilities.


 PARAMETERS

 S : Machine.Session_Id := Default.Session;

 Specifies the session. The S parameter defaults to the current session (the
 session in which the function is executed).


 return Port;

 Returns the number of the port through which a specified session is
 connected. The default is the port number of the current session.


 REFERENCES

 function System_Utilities.Terminal



 @node !Commands.Terminal.Parity_Kind

 subtype Parity_Kind is System_Utilities.Parity_Kind;

 DESCRIPTION

 Specifies the type of parity bit that is received with each character:
 none, even, or odd.


 REFERENCES

 type System_Utilities.Parity_Kind



 @node !Commands.Terminal.Port

 subtype Port is Natural range 0 .. 4 * 16 * 16;

 DESCRIPTION

 Specifies the range of port numbers.



 @node !Commands.Terminal.Set_Character_Size

 procedure Set_Character_Size
               (Line  : Port                 := Terminal.Current;
                To_Be : Character_Bits_Range :=
                                System_Utilities.Character_Size);

 DESCRIPTION

 Sets the number of data bits per character.

 This setting affects both transmitted and received data.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 To_Be : Character_Bits_Range := System_Utilities.Character_Size;

 Specifies the new character size. The default eight bits.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.

 This procedure is valid only for RS232 communications.


 EXAMPLES

 The command:

   Terminal.Set_Character_Size (Line  => 16,
                                To_Be => 8);

 sets the character size for port 16 to eight bits. (This is the proper
 setting when configuring the R1000 for use with the M68020/Bare CDF.)


 REFERENCES

 procedure Set_Parity
 procedure Set_Stop_Bits
 function System_Utilities.Character_Size



 @node !Commands.Terminal.Set_Detach_On_Disconnect

 procedure Set_Detach_On_Disconnect
           (Line    : Port    := Terminal.Current;
            Enabled : Boolean :=
                         System_Utilities.Detach_On_Disconnect);

 DESCRIPTION

 This procedure is not currently supported by the Environment.



 @node !Commands.Terminal.Set_Disconnect_On_Disconnect

 procedure Set_Disconnect_On_Disconnect
           (Line    : Port    := Terminal.Current;
            Enabled : Boolean :=
                      System_Utilities.Disconnect_On_Disconnect);

 DESCRIPTION

 Enables or disables the Disconnect_On_Disconnect option for a particular
 port.

 This option is disabled automatically by the Environment on new systems,
 when a disk-incompatible release of the Environment is installed, or
 whenever the Environment state stored on disk is lost.

 If this option is enabled for an RS232 port, the R1000 responds to an
 incoming disconnect signal received on the port by initiating an outgoing
 disconnect signal on that port.

 For an RS232 port, an incoming disconnect signal occurs when the R1000
 senses the data carrier detect (DCD) turn from on to off. An outgoing
 disconnect signal occurs when the R1000 toggles data terminal ready (DTR)
 from on to off for 3 seconds and then back to on again.

 This command takes effect immediately.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Enabled : Boolean := System_Utilities.Disconnect_On_Disconnect;

 Specifies the setting of the Disconnect_On_Disconnect option. The default
 is the current setting.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job
 have operator capability.

 This command applies only to RS232 ports.


 REFERENCES

 function System_Utilities.Disconnect_On_Disconnect



 @node !Commands.Terminal.Set_Disconnect_On_Failed_Login

 procedure Set_Disconnect_On_Failed_Login
           (Line    : Port    := Terminal.Current;
            Enabled : Boolean :=
                      System_Utilities.Disconnect_On_Failed_Login);

 DESCRIPTION

 Enables or disables the Disconnect_On_Failed_Login option for a particular
 port.

 This option is disabled on a new system, when a disk-incompatible release
 of the Environment is installed, or whenever the Environment state stored
 on disk is lost.

 If this option is enabled for a port, the R1000 initiates an outgoing
 disconnect signal on the port when a user repeatedly fails to log in on
 that port--for example, by entering an incorrect password or unrecognized
 username.

 For an RS232 port, an outgoing disconnect signal occurs when the R1000
 toggles data terminal ready (DTR) from on to off for 3 seconds and then
 back to on again.

 This command takes effect immediately.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Enabled : Boolean := System_Utilities.Disconnect_On_Failed_Login;

 Specifies the setting of the Disconnect_On_Failed_Login option. The default
 is the current setting.


 RESTRICTIONS

 Execution of this procedure requires that the executing job have operator
 capability.


 REFERENCES

 function System_Utilities.Disconnect_On_Failed_Login



 @node !Commands.Terminal.Set_Disconnect_On_Logoff

 procedure Set_Disconnect_On_Logoff
      (Line    : Port    := Terminal.Current;
       Enabled : Boolean := System_Utilities.Disconnect_On_Logoff);

 DESCRIPTION

 Enables or disables the Disconnect_On_Logoff option for a particular port.

 This option is disabled on a new system, when a disk-incompatible release
 of the Environment is installed, or whenever the Environment state stored
 on disk is lost.

 If this option is enabled for a port, the R1000 initiates an outgoing
 disconnect on the port whenever a user logs off a session running on the
 port. This procedure is especially useful for Telnet ports and is usually
 included in a machine-intitialization procedure so that a user is
 automatically disconnected from a Telnet port when logging off.

 For an RS232 port, an outgoing disconnect signal occurs when the R1000
 toggles data terminal ready (DTR) from on to off for 3 seconds and then
 back to on again.

 This command takes effect immediately.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Enabled : Boolean := System_Utilities.Disconnect_On_Logoff;

 Specifies the new setting of this option. The default is the current
 setting.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job
 have operator capability.


 REFERENCES

 function System_Utilities.Disconnect_On_Logoff



 @node !Commands.Terminal.Set_Flow_Control

 procedure Set_Flow_Control
           (Line  : Port   := Terminal.Current;
            To_Be : String := System_Utilities.Flow_Control);

 DESCRIPTION

 Enables software flow control for data transmitted by the R1000 on the
 specified line (see Set_Receive_Flow_Control for regulating received data).

 A device such as a terminal or a printer attached to an R1000 port can
 control the flow of data transmitted to it from the R1000 in two ways:

 *  Hardware flow control: The flow of data is stopped when the device
    turns off the Clear To Send (CTS) modem control signal. The flow is
    restarted when the CTS signal is turned on.

 *  Software flow control: The flow of data is stopped when the device
    sends the XOFF byte or character. The flow is restarted when the XON
    byte or character is sent.

 This procedure enables or disables only software flow control. Hardware
 flow control is enabled or disabled by a hardware configuration switch in
 the R1000 port controller. There is no software interface to enable or
 disable hardware flow control.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 To_Be : String := System_Utilities.Flow_Control;

 Specifies whether to set software flow control to "None" or "Xon_Xoff". The
 default is "None".


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job
 have operator capability.

 This procedure is valid only for RS232 communications.


 EXAMPLES

 The command:

   Terminal.Set_Flow_Control (Line  => 16,
                              To_Be => "None");

 disables software flow control. This is the proper setting when configuring
 the R1000 for use with the M68020/Bare CDF.

 The command:

   Terminal.Set_Flow_Control (Line  => 16,
                              To_Be => "Xon_Xoff");

 enables software flow control.


 REFERENCES

 procedure Set_Xon_Xoff_Bytes
 function System_Utilities.Flow_Control



 @node !Commands.Terminal.Set_Input_Rate

 procedure Set_Input_Rate
           (Line  : Port   := Terminal.Current;
            To_Be : String := System_Utilities.Input_Rate);

 DESCRIPTION

 Sets the data rate for data received by the R1000 on the specified line.

 Valid incoming data rates include:

   DISABLE       BAUD_50       BAUD_75       BAUD_110
   BAUD_134_5    BAUD_150      BAUD_200      BAUD_300
   BAUD_600      BAUD_1200     BAUD_1800     BAUD_2400
   BAUD_4800     BAUD_9600     BAUD_19200    EXT_REC_CLK

 EXT_REC_CLK is the only allowed value for Telnet ports. In general, this
 value indicates that the input rate of the data is determined by an
 external clock (and is not under local control). For a Telnet port, this
 means that the data-transmission rate is not configurable. In this case it
 is "set" by either the transmission rate of the Telnet port (10 Mbits per
 second) or the transmission rate at the remote end of the transmission
 (whichever of these two values is less).


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 To_Be : String := System_Utilities.Input_Rate;

 Specifies the new input rate, which must be one of those specified above.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job
 have operator capability.

 This procedure is valid only for RS232 communications.


 EXAMPLES

 The command:

   Terminal.Set_Input_Rate (Line  => 16,
                            To_Be => "Baud_9600");

 sets the rate of data sent to the R1000 using port 16 to 9,600 bits per
 second. This is the proper setting when configuring the R1000 for use with
 the M68020/Bare CDF.


 REFERENCES

 procedure Set_Output_Rate
 function System_Utilities.Input_Rate
       

 @node !Commands.Terminal.Set_Log_Failed_Logins

 procedure Set_Log_Failed_Logins
         (Line    : Port    := Terminal.Current;
          Enabled : Boolean := System_Utilities.Log_Failed_Logins);

 DESCRIPTION

 Enables or disables the Log_Failed_Logins option for a particular port.

 If this option is enabled for a port, the R1000 writes an entry to the
 system error log when a user repeatedly fails to log in on that port. This
 procedure is useful for security purposes-for instance, when trying to
 determine if someone has tried unsuccessfully to log in by guessing a
 password.

 By default, this option is disabled.


 PARAMETERS

 Line : Port := Terminal.Current;

  Specifies the line to be affected. The default is the current line.



 Specifies the new setting of this option. The default is the current
 setting.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job
 have operator capability.


 REFERENCES

 function System_Utilities.Log_Failed_Logins



 @node !Commands.Terminal.Set_Login_Disabled

 procedure Set_Login_Disabled
           (Line     : Port    := Terminal.Current;
            Disabled : Boolean := System_Utilities.Login_Disabled);

 DESCRIPTION

 Enables or disables the Login_Disabled option for the specified port.

 By default, this option is disabled--that is, the port can be enabled for 
 login.

 If this option is enabled for a port, the port cannot be enabled for login, 
 even if the Operator.Enable_Terminal procedure is used.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Disabled : Boolean := System_Utilities.Login_Disabled;

 Specifies the new setting of this option. The default is the current setting.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.


 REFERENCES

 procedure Operator.Disable_Terminal
 procedure Operator.Enable_Terminal
 function System_Utilities.Enabled
 function System_Utilities.Login_Disabled



 @node !Commands.Terminal.Set_Logoff_On_Disconnect

 procedure Set_Logoff_On_Disconnect
      (Line    : Port    := Terminal.Current;
       Enabled : Boolean := System_Utilities.Logoff_On_Disconnect);

 DESCRIPTION

 Enables or disables the Logoff_On_Disconnect option for a specified port.

 This option is disabled on new systems, when a disk-incompatible release of the
 Environment is installed, or whenever the Environment state stored on disk is
 lost.

 If this option is enabled for a port, and the R1000 detects a disconnection of
 that port, it logs off the associated session. The user is not required to log
 out of a session before disconnecting from the port. Uncommitted buffers are
 saved before the user's session is terminated. If an Environment program is
 reading from the port when a disconnect occurs, a disconnect status code is sent
 to the program.

 The R1000 detects an RS232 port disconnect by a drop in the data carrier detect
 (DCD) signal; a Telnet port disconnect is detected by the termination of the
 Telnet session.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Enabled : Boolean := System_Utilities.Logoff_On_Disconnect;

 Specifies the new setting of this option. The default is the current setting.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.


 REFERENCES

 function System_Utilities.Logoff_On_Disconnect



 @node !Commands.Terminal.Set_Output_Rate

 procedure Set_Output_Rate
           (Line  : Port   := Terminal.Current;
            To_Be : String := System_Utilities.Output_Rate);

 DESCRIPTION

 Sets the data rate for data transmitted by the R1000 on the specified line.

 Valid output data rates include:

   DISABLE       BAUD_50       BAUD_75       BAUD_110
   BAUD_134_5    BAUD_150      BAUD_200      BAUD_300
   BAUD_600      BAUD_1200     BAUD_1800     BAUD_2400
   BAUD_4800     BAUD_9600     BAUD_19200    EXT_REC_CLK

 EXT_REC_CLK is the only allowed value for Telnet ports. In general, this value
 indicates that the output rate of the data is determined by an external clock
 (and is not under local control). For a Telnet port, this means that the
 data-transmission rate is not configurable. In this case it is "set" by either the
 transmission rate of the Telnet port (10 Mbits per second) or the transmission
 rate at the remote end of the transmission (whichever of these two values is
 less).


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 To_Be : String := System_Utilities.Output_Rate;

 Specifies the new output rate, which must be one of those specified above.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.

 This procedure is valid only for RS232 communications.


 REFERENCES

 procedure Set_Input_Rate
 function System_Utilities.Output_Rate



 @node !Commands.Terminal.Set_Parity

 procedure Set_Parity
           (Line  : Port        := Terminal.Current;
            To_Be : Parity_Kind := System_Utilities.Parity);

 DESCRIPTION

 Sets the parity for the specified port to None, Even, or Odd.

 This setting affects both transmitted and received data.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 To_Be : Parity_Kind := System_Utilities.Parity;

 Specifies the parity setting: None, Even, or Odd. None is the default.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.

 This procedure is valid only for RS232 communications.


 EXAMPLES

 The command:

   Terminal.Set_Parity (Line => 16, To_Be => System_Utilities.None);

 specifies that you do not want parity checking enabled for port 16. This is the
 proper setting when configuring the R1000 for use with the M68020/Bare CDF.


 REFERENCES

 procedure Set_Character_Size
 procedure Set_Stop_Bits
 function System_Utilities.Parity



 @node !Commands.Terminal.Set_Receive_Flow_Control

 procedure Set_Receive_Flow_Control
         (Line  : Port   := Terminal.Current;
          To_Be : String := System_Utilities.Receive_Flow_Control);

 DESCRIPTION

 Enables or disables flow control of data received by the R1000 (see Set_Flow_Con-
 trol for transmitted data).

 Certain devices use flow control to prevent data overruns. Some devices support
 hardware flow control (CTS receiving, RTS or DTR transmitting) and some devices
 support software flow control (through XON and XOFF transmissions).


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 To_Be : String := System_Utilities.Receive_Flow_Control;

 Specifies that flow control for the specified port should be set to None, XON-
 _XOFF, RTS, or DTR. The default is None.

 Four types of receive flow control are available:

 *  None: Indicates that there is no software or hardware flow control for the
    line.

 *  XON_XOFF: Indicates that software flow control is enabled for the line. This
    value indicates that the device should stop transmitting when it receives an
    XOFF from the Rational system and can resume transmission when it receives an
    XON.

 *  RTS: Indicates that hardware flow control based on the RTS modem control
    signal is enabled for the line. This value indicates that the device should
    stop transmitting when the Rational system switches the RTS modem control
    signal to off and can resume transmission when the signal is switched to on.

 *  DTR: Indicates that hardware flow control based on the DTR modem control
    signal is enabled for the line. This value indicates that the device should
    stop transmitting when the Rational system switches the DTR modem control
    signal to off and can resume transmission when the signal is switched to on.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.

 This procedure is valid only for RS232 communications.


 EXAMPLES

 The command:

   Terminal.Set_Receive_Flow_Control (Line => 16, To_Be => "None");

 disables software flow control. This is the proper setting when configuring the
 R1000 for use with the M68020/Bare CDF.


 REFERENCES

 procedure Set_Flow_Control
 procedure Set_Receive_Xon_Xoff_Bytes
 procedure Set_Receive_Xon_Xoff_Characters
 function System_Utilities.Receive_Flow_Control



 @node !Commands.Terminal.Set_Receive_Xon_Xoff_Bytes

 procedure Set_Receive_Xon_Xoff_Bytes
           (Line     : Port               := Terminal.Current;
            Xon_Xoff : System.Byte_String :=
                         System_Utilities.Receive_ Xon_Xoff_Bytes);

 DESCRIPTION

 Sets the byte codes that represent the XON and XOFF flow-control bytes used by
 software flow control to regulate data received on the specified port.

 Using bytes instead of characters for flow control allows the complete seven-bit
 character set (ASCII) to be reserved for other uses.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Xon_Xoff : System.Byte_String := System_Utilities.Receive_Xon_Xoff_Bytes;

 Specifies the new flow-control bytes. This parameter takes a string consisting of
 the byte representing XON, followed by the byte representing XOFF.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.

 This procedure is valid only for RS232 communications.


 REFERENCES

 procedure Set_Receive_Flow_Control
 function System_Utilities.Receive_Xon_Xoff_Bytes



 @node !Commands.Terminal.Set_Receive_Xon_Xoff_Characters

 procedure Set_Receive_Xon_Xoff_Characters
                  (Line     : Port   := Terminal.Current;
                   Xon_Xoff : String :=
                   System_Utilities.Receive_Xon_Xoff_Characters);

 DESCRIPTION

 Sets the character codes that represent the XON and XOFF flow-control characters
 used by software flow control to regulate data received on the specified port.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Xon_Xoff : String := System_Utilities.Receive_Xon_Xoff_Characters;

 Specifies the new flow-control characters. This parameter takes a string
 consisting of the character representing XON, followed by the character
 representing XOFF. The default character for XON is ASCII DC1; the default
 character for XOFF is ASCII DC3.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.

 This procedure is valid only for RS232 communications.


 REFERENCES

 procedure Set_Receive_Flow_Control
 function System_Utilities.Receive_Xon_Xoff_Characters



 @node !Commands.Terminal.Set_Stop_Bits

 procedure Set_Stop_Bits
           (Line  : Port            := Terminal.Current;
            To_Be : Stop_Bits_Range := System_Utilities.Stop_Bits);

 DESCRIPTION

 Sets the number of stop bits for the specified port.

 The integer range for Stop_Bits_Range is 1 through 2.

 The stop-bit setting affects transmitted data only. The R1000 can always receive
 data with any number of stop bits.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 To_Be : Stop_Bits_Range := System_Utilities.Stop_Bits;

 Specifies the number of stop bits to be transmitted, either 1 or 2. The default is
 1.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.

 This procedure is valid only for RS232 communications.


 EXAMPLES

 The command:

   Terminal.Set_Stop_Bits (Line => 16, To_Be => 2);

 configures the R1000 to transmit two stop bits. This is the proper setting when
 configuring the R1000 for use with the M68020/Bare CDF.


 REFERENCES

 procedure Set_Character_Size
 procedure Set_Parity
 function System_Utilities.Stop_Bits



 @node !Commands.Terminal.Set_Terminal_Type

 procedure Set_Terminal_Type
           (Line  : Port   := Terminal.Current;
            To_Be : String := System_Utilities.Terminal_Type);

 DESCRIPTION

 Sets the output driver types for the current port or for the port of a remote
 terminal device.

 This information is used by terminal-handling software (for example, the 
 Environment's editor) in generating terminal output data.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 To_Be : String := System_Utilities.Terminal_Type;

 Specifies the new output driver type. This parameter is case-insensitive.

 The output driver types supported by the Environment are:

 *  XRTERM

 *  Rational

 *  VT100

 *  Facit


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.


 REFERENCES

 function System_Utilities.Terminal_Type



 @node !Commands.Terminal.Set_Xon_Xoff_Bytes

 procedure Set_Xon_Xoff_Bytes
           (Line     : Port               := Terminal.Current;
            Xon_Xoff : System.Byte_String :=
                             System_Utilities.Xon_Xoff_Bytes);

 DESCRIPTION

 Sets the byte codes that represent the XON and XOFF flow-control bytes used by
 software flow control to regulate data transmitted from the specified port.

 Using bytes instead of characters for flow control allows the complete seven-bit
 character set (ASCII) to be reserved for other uses.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Xon_Xoff : System.Byte_String := System_Utilities.Xon_Xoff_Bytes;

 Specifies the new flow-control bytes. This parameter takes a string consisting of
 the byte representing XON, followed by the byte representing XOFF.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.

 This procedure is valid only for RS232 communications.


 REFERENCES

 procedure Set_Receive_Xon_Xoff_Bytes
 procedure Set_Xon_Xoff_Characters
 function System_Utilities.Xon_Xoff_Bytes



 @node !Commands.Terminal.Set_Xon_Xoff_Characters

 procedure Set_Xon_Xoff_Characters
       (Line     : Port   := Terminal.Current;
        Xon_Xoff : String := System_Utilities.Xon_Xoff_Characters);

 DESCRIPTION

 Sets the character codes that represent the XON and XOFF flow-control characters
 used by software flow control to regulate data transmitted from the specified
 port.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the line to be affected. The default is the current line.


 Xon_Xoff : String := System.Utilities.Xon_Xoff_Characters;

 Specifies the new flow-control characters. This parameter takes a string
 consisting of the character representing XON, followed by the character
 representing XOFF. The default character for XON is ASCII DC1; the default
 character for XOFF is ASCII DC3.


 RESTRICTIONS

 Execution of this procedure requires that the user or the executing job have
 operator capability.

 This procedure is valid only for RS232 communications.


 REFERENCES

 procedure Set_Receive_Xon_Xoff_Characters
 procedure Set_Xon_Xoff_Bytes
 function System_Utilities.Xon_Xoff_Characters



 @node !Commands.Terminal.Settings

 procedure Settings (Line : Port := Terminal.Current);

 DESCRIPTION

 Displays a summary of the current settings for the specified port.

 By default, this procedure returns the settings for the current port.


 PARAMETERS

 Line : Port := Terminal.Current;

 Specifies the port number.


 EXAMPLES

 The command:

   Terminal.Settings (16);

 displays information such as the following:

   Terminal Settings for Port 16
   -----------------------------
   Terminal Type                  = RATIONAL
   Input Baud Rate                = BAUD_9600
   Output Baud Rate               = BAUD_9600
   Parity                         = NONE
   Stop_Bits                      = 2
   Char_Size                      = CHAR_8
   Flow Control for Transmit Data = NONE
   Flow Control for Receive Data  = NONE
   Login_Disabled                 = FALSE
   Log_Failed_Logins              = FALSE
   Disconnect_On_Failed_Login     = FALSE
   Disconnect_On_Logoff           = FALSE
   Logoff_On_Disconnect           = FALSE
   Disconnect_On_Disconnect       = FALSE

 Note that if the value of Flow Control for Transmit Data were XON_XOFF instead of
 NONE, then two more entries would appear, one for XON and one for XOFF, as shown
 in the next example.

 The command:

   Terminal.Settings (1);

 displays information such as the following:

   Terminal Settings for Port 1
   ----------------------------
   Terminal Type                  = RATIONAL
   Input Baud Rate                = BAUD_9600
   Output Baud Rate               = BAUD_9600
   Parity                         = NONE
   Stop_Bits                      = 2
   Char_Size                      = CHAR_8
   Flow Control for Transmit Data = XON_XOFF
   Xon                            = DC1
   Xoff                           = DC3
   Flow Control for Receive Data  = NONE
   Login_Disabled                 = FALSE
   Log_Failed_Logins              = FALSE
   Disconnect_On_Failed_Login     = FALSE
   Disconnect_On_Logoff           = FALSE
   Logoff_On_Disconnect           = FALSE
   Disconnect_On_Disconnect       = FALSE

 Notice that the settings displayed for port 1 (the operator-console port) have
 two additional fields, one for XON and one for XOFF.


 REFERENCES

 renamed function Current



 @node !Commands.Terminal.Stop_Bits_Range

 subtype Stop_Bits_Range is System_Utilities.Stop_Bits_Range;

 DESCRIPTION

 Specifies the range of stop bits available for a port.

 The integer range is 1 through 2.


 REFERENCES

 subtype System_Utilities.Stop_Bits_Range