|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: S T
Length: 520671 (0x7f1df)
Types: TextFile
Names: »SMU_HELP«
└─⟦5f3412b64⟧ Bits:30000745 8mm tape, Rational 1000, ENVIRONMENT 12_6_5 TOOLS
└─⟦91c658230⟧ »DATA«
└─⟦f6fec0485⟧
└─⟦this⟧
└─⟦d10a02448⟧ Bits:30000409 8mm tape, Rational 1000, ENVIRONMENT, D_12_7_3
└─⟦fc9b38f02⟧ »DATA«
└─⟦f95d63c89⟧
└─⟦this⟧
@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