|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 270859 (0x4220b)
Types: TextFile
Notes: R1k Text-file segment
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦f746409bd⟧
└─⟦this⟧
Rational Environment Release Information
D_12_1_1 Release
\f
Copyright 1990 by Rational
Part Number: 508-003207-003
September 1990 (Software Rev. D_12_1_1)
EXABYTE is a registered trademark of EXABYTE Corporation.
IBM is a registered trademark and RISC System/6000 is a trademark
of International Business Machines Corporation.
PostScript is a registered trademark of Adobe Systems
Incorporated.
Rational and R1000 are registered trademarks and Rational
Environment and Rational Subsystems are trademarks
of Rational.
Sony is a registered trademark of Sony Corporation of America.
Sun Workstation is a registered trademark of Sun Microsystems,
Inc.
VT100 is a trademark of Digital Equipment Corporation.
Rational
3320 Scott Boulevard
Santa Clara, California 95054-3197
\f
D_12_1_1 Release
Contents
1. Overview 1
2. Supported Configurations and Upgrades 1
3. Compatibility 2
4. Upgrade Impact 3
4.1. Impact of Specification Changes 3
4.2. Impact of Implementation Changes 4
4.3. Impact of Keymap Changes 5
5. Known Problems 5
5.1. Problem for Registering 2167 PDL 5
5.2. Problem for the Mc68020_Bare CDF Debugger 6
5.3. Problem for Cmvc.Copy with Goal => Source 7
5.4. Name Resolution for Editor.Key.Define Command 7
5.5. Problem for Loaded Main Programs in Copied Views 8
5.6. Problem for Displaying CMVC Generation Differences 8
5.7. Clarification of Access Control 9
5.8. Problem for Setting Debugging Breakpoints 9
5.9. Problem for Debugging Code Views 10
5.10. Problem for Incrementally Editing Named or Labeled
Statements 10
5.11. Problem for Archive-Copying Views 11
5.12. Problem for Copying Archived Units with Subunits 12
5.13. Problem with Only_Change_Imports Parameter in CMVC
Commands 12
5.14. Problem for Token Management 12
6. New Environment Interfaces 13
6.1. Package Cmvc_Access_Control 13
6.2. Package Remote_Passwords 13
6.3. Procedure What.Search_List_Resolution 14
6.4. Procedure Cmvc.Compare 15
6.5. Procedure Cmvc.Accept_Changes_Effort 15
6.6. Procedure Command.Make_Procedure 16
6.7. Procedures in Package Editor.Screen 16
6.8. Functions in Package System_Utilities 16
6.9. Procedure Refresh_Terminal_Information 16
6.10. Generic Procedure System_Backup.Backup_Generic 17
6.11. Procedure Verify_Backup 18
6.12. Declarations for Managing Per-Session Pricing 18
6.12.1. Procedure Accept_Tokens 20
6.12.2. Procedure Donate_Tokens 21
6.12.3. Function Get_Machine_Id 24
6.12.4. Function Get_Site 24
6.12.5. Procedure Show_Site 24
6.12.6. Procedure Show_Tokens 24
6.13. Declarations of Interest to Toolsmiths 25
7. Changes from D_10_20_0 27
7.1. Changes to Parameter Value Conventions 27
7.1.1. New Special Names 28
7.1.2. New Attribute 'If 28
7.1.3. Miscellaneous Naming Changes 29
7.1.4. Options Parameter Changes 29
7.2. Changes Pertaining to Subclasses 30
7.3. Editor Changes 30
R September 1990 iii\f
Rational Environment Release Information
7.4. Changes to Terminal and Screen Operations 31
7.5. Change to Deleting Command Windows 31
7.6. Changes in Editing Ada Units 31
7.7. Ada Formatting Changes 33
7.8. Changes to Common.Complete 34
7.9. Changes to Debugging 35
7.10. Changes to Session Switches 35
7.11. Changes to Library Management 36
7.12. Access-Control Changes 37
7.13. Changes to Links Management 37
7.14. Compilation Changes 37
7.14.1. Promotion 37
7.14.2. Pragmas 38
7.14.3. Units in the Archived State 39
7.14.4. Program Library 40
7.14.5. Switch-Dependent Changes to the R1000 Compiler 40
7.14.6. Switch-Independent Changes to the R1000 Compiler43
7.14.7. Representation Clauses 43
7.14.8. Compiler Switches 46
7.15. Archive Changes 48
7.15.1. Specification of Objects to Be Archived 48
7.15.2. Assignment of Access Control to Restored Objects49
7.15.3. Specification of Tape-Drive Devices 49
7.15.4. Specification of Remote Devices 50
7.15.5. Archive Options 51
7.15.6. CMVC Access Required by Archive Commands 52
7.15.7. Archiving Code Views and Loaded Main Programs 53
7.15.8. Miscellaneous Archive Changes 54
7.16. Changes to !Io.Text_Io 54
7.17. System-Management Changes 54
7.17.1. Expiration of Operator Password 55
7.17.2. Mechanism for Summarizing Logged Tape Errors 55
7.17.3. Changes Pertaining to Operator Capability 57
7.17.4. Changes Pertaining to Login Limits 57
7.17.5. Changes Pertaining to EEDB 57
7.17.6. Miscellaneous System-Management Changes 58
7.18. Changes Pertaining to Printing 59
7.18.1. !Commands.Abbreviations.Print 59
7.18.2. Queue.Print 60
7.19. System Backup Changes 60
7.19.1. Improved Do_Backup Implementation 61
7.19.2. Support for 8-Millimeter Cartridge Tape Drive 61
7.19.3. Guidelines for Choosing Tape Size 62
7.19.4. Backups on Systems with Two Tape Drives 63
7.19.5. Restoring Backups 64
7.19.6. Bug Fixes Pertaining to Backup 65
7.20. General Tape-Related Changes 65
7.20.1. Default Tape Drive 65
7.20.2. Specifying a Tape Drive through Various Commands66
7.20.3. User-Written Applications 66
7.20.4. Tape-Mount Requests 67
7.20.5. Tape-Related Messages in the Error Log 68
7.20.6. DFS Backup 68
7.21. CMVC Changes 69
7.21.1. Activities 69
iv September 1990 R\f
D_12_1_1 Release
7.21.2. Code Views 69
7.21.3. Commands from Package Cmvc 70
7.21.4. Imports 71
7.21.5. CDB Capability 72
7.21.6. Work Orders 72
7.22. Networking Changes 72
7.23. Miscellaneous Environment Changes 73
7.24. Changes of Interest to RDF Users 74
8. Documentation 76
8.1. New Hard-Copy Documentation 76
8.1.1. Package Cmvc_Access_Control 76
8.1.2. Appendix F for the R1000 Target 76
8.1.3. Reference Summary 76
8.2. New Online Documentation 77
8.2.1. New Declarations 77
8.2.2. Updated Packages 78
9. Training 79
10. Appendix A: Examples of Switch-Dependent Compiler Fixes 79
10.1. Constraining Incomplete Types 79
10.2. Completing Types by Constraining Truly Private Types 80
10.3. Exceptions in Generics 81
10.4. Parameter Subtype Checking for Generic Formal Calls 82
11. Appendix B: Summary of Changes from Previous Releases 83
11.1. Editing Images (D_10_20_0) 84
11.1.1. Package Editor.Macro 84
11.1.2. Package Editor.Image 84
11.2. Editing Specific Types (D_10_20_0) 85
11.2.1. Dependents Object Editor 85
11.2.2. Changes in Editing Ada Units 86
11.2.3. Ada Completion 86
11.2.4. Changes to Object.Sort 87
11.2.5. Searchlists 87
11.3. Debugging (D_10_20_0) 87
11.3.1. Debugger Maintenance 87
11.3.2. Selections in Debugger Windows 87
11.4. Session and Job Management (D_10_20_0) 89
11.4.1. Session Switches 89
11.4.2. Log Procedures 89
11.4.3. Remote Execution 90
11.5. Library Management (D_10_20_0) 90
11.5.1. Compilation 90
11.5.2. Library Switches 90
11.6. Text Input/Output (D_10_20_0) 91
11.7. Data and Device Input/Output (D_10_20_0) 91
11.8. String Tools (D_10_20_0) 91
11.9. Programming Tools (D_10_20_0) 91
11.10. System-Management Utilities (D_10_20_0) 91
11.10.1. Logoff on Disconnect 91
11.10.2. Systemwide Login 92
11.10.3. Print Spooler 92
11.10.4. Password Policy 92
11.10.5. System-Availability Tools 92
11.11. Project Management (D_10_20_0) 93
11.11.1. Tools 94
11.11.2. Joining Controlled Objects 94
R September 1990 v\f
Rational Environment Release Information
11.11.3. Import-Restriction Files 94
11.11.4. Controlling Objects 95
11.11.5. Demotion of Checked-In Ada Units 95
11.11.6. Creating New Spec Views 95
11.11.7. Pretty-Printing and Controlled Ada Units 95
11.11.8. Compatibility-Database Utilities 96
11.12. Networking (D_10_20_0) 96
vi September 1990 R\f
D_12_1_1 Release
1. Overview
This D_12_1_1 release of the Rational Environment:
* Introduces a number of new Environment interfaces. The most
significant of these interfaces is package
Cmvc_Access_Control, which provides a means of managing access
control at the level of views and subsystems. The new
interfaces are compatible additions that do not affect
existing code on the R1000.
* Provides a revised R1000 compiler that is validated for ACVC
1.10. Note that some of the revisions to this compiler are
available only when explicitly enabled by a library switch;
enabling these revisions causes the compiler to produce code
that is incompatible with the code generated by the D_10_20_0
release of the Environment. By default, the switch is set so
that compatible code is generated, allowing customers with
existing compiled code to make the transition to the fully
revised compiler at their convenience.
* Supports a variety of system configurations and hardware
upgrades. D_12_1_1 can be installed on all series of the
R1000; on Series 200 and 300 machines, D_12_1_1 supports the
optional 64-megabyte memory-expansion upgrade and the
8-millimeter cartridge tape drive. Note that the 8-millimeter
cartridge tape drive makes unattended system backups possible
by enabling a full system backup to be put onto a single tape.
No change has been made to the way backups are initiated (the
command interfaces remain the same, with minimal changes in
the tape-mount request).
* Improves linking and loading performance by a factor of 5
through new underlying mechanisms called program libraries.
* Provides support for per-session pricing of Rational products.
* Fixes about 300 bugs from the D_10_20_0 release.
2. Supported Configurations and Upgrades
D_12_1_1 supports the following configurations of the R1000:
* Series 100
* Series 200 (Models 10, 20, and 40)
* Series 300 System (300S)
* Series 300 Coprocessor (300C) for the IBM RISC System/6000
and Sun Workstation servers.
D_12_1_1 supports two kinds of tape drive on the Series 200,
300S, and 300C systems:
R September 1990 1\f
Rational Environment Release Information
* The 9-track tape drive, which is standard on the Series 200
and an optional upgrade to the Series 300S.
* The 8-millimeter cartridge tape drive, which is standard on
the Series 300S and 300C and an optional upgrade to the Series
200.
D_12_1_1 also supports the optional expansion of memory from 32
megabytes to 64 megabytes to improve system performance. This
upgrade applies to Series 200, 300S, and 300C systems.
The combinations of configurations and upgrades supported by
D_12_1_1 are shown in Table 1.
Table 1 Configurations and Upgrades Supported by D_12_1_1
----------------------------------------
| | | | | |
| | 8-mm |9-Track|32-Mb | 64-Mb|
|Configura| Tape | Tape |Memory| Memory|
| tion | Drive | Drive | | |
----------------------------------------
| | | | | |
|Series |N/A |Standar|Standa| N/A |
|100 | |d | rd | |
----------------------------------------
| | | | | |
|Series |Upgrade|Standar|Standa| Upgrad|
|200 | |d | rd | |
----------------------------------------
| | | | | |
|Series |Standar|Upgrade|Standa| Upgrad|
|300S |d | | rd | |
----------------------------------------
| | | | | |
|Series |Standar|N/A |Standa| Upgrad|
|300C |d | | rd | |
----------------------------------------
3. Compatibility
D_12_1_1 is fully compatible with all production versions of
Rational layered software products, except as noted:
Design Facility: 2167 6_0_7 or later (with workarounds, see section 5)
Design Facility: 2167A 6_2_5 or later
Documentation Tools 10_2_9 or later
Design Tools 10_2_9 or later
Rational Teamwork Interface 1_0_0 or later
Rational Publishing Interface 1_0_0 or later
2 September 1990 R\f
D_12_1_1 Release
CDF: 1750A 3_0_1 or later
CDF: 68K OS2000 4_1_3 or later
CDF: 68K Bare 5_1_1 or later (with workarounds,
see section 5)
Mail 11_4_5 or later
Target Builder 9_4_4 or later
RXI 10_4_3 or later
4. Upgrade Impact
The Environment can be upgraded from D_10_20_0 to D_12_1_1
without forcing customers to Archive.Save and Restore their
applications. Customers will not have to modify or recompile any
of their own tools, with the possible exception of:
* Tools written against the unit specifications listed in
"Impact of Specification Changes," below.
* Customizations of the unit bodies listed in "Impact of
Implementation Changes," below.
The new declarations listed in section 6 are all installed
incrementally and therefore have no impact on user-written tools.
Once upgraded to D_12_1_1, a system cannot be reverted to a
previous Environment release.
Rational Training software has not been tested in this release.
4.1. Impact of Specification Changes
The installation process for D_12_1_1 overwrites a number of
Environment unit specifications. Overwriting these specifications
causes the demotion of any customer-created tools written against
them. The installation process tries to recompile such tools
automatically; however, depending on the nature of the tools,
some may require modification before they can be recompiled.
Units that cannot be recompiled during installation are listed in
the installation log.
Following are the unit specifications that are overwritten when
D_12_1_1 is installed:
* !Commands.Abbreviations.Print
* !Implementation.Compatibility
* !Tools.Bounded_String
R September 1990 3\f
Rational Environment Release Information
* Backup commands in !Commands.Abbreviations:
Do_Backup, Full_Backup, Primary_Backup, and Secondary_Backup
* !Machine.Initialize_Print_Spooler
As described in section 7.16, D_12_1_1 changes the specification
of package !Io.Text_Io in order to conform to the Reference
Manual for the Ada Programming Language. However, because of the
nature of the change (eliminating a default parameter value in
the Text_Io.Open procedure), the installation process is able to
use underlying Environment mechanisms to install the change
rather than overwriting the package specification. Consequently,
the installation process does not demote any user-written tools
that are written against !Io.Text_Io. Note that if customers
should subsequently demote any tools that depend on the existence
of the default parameter value, these tools will need to be
modified before they can be recompiled.
4.2. Impact of Implementation Changes
The installation process for D_12_1_1 overwrites a number of unit
bodies. Because these bodies may contain user customizations,
their contents are saved as text files in the same library as the
overwritten bodies. The names of these files are of the form
unit_name_Vnn, where nn is the unit's default version number. The
customizations then can be transferred to the new implementation.
Following are the units whose bodies are overwritten when
D_12_1_1 is installed:
* Customizable backup procedures:
- !Commands.Abbreviations.Do_Backup (See sections 6.10 and
7.19.1 for more information about the new Do_Backup'Body.)
- !Commands.Abbreviations.Full_Backup
- !Commands.Abbreviations.Primary_Backup
- !Commands.Abbreviations.Secondary_Backup
* Machine initialization procedures:
- !Machine.Initialize'Body
- !Machine.Initialize_Daemons'Body
- !Machine.Initialize_Housekeeping'Body
- !Machine.Initialize_Print_Spooler
- !Machine.Initialize_Servers'Body
* Customizable printing procedures:
4 September 1990 R\f
D_12_1_1 Release
- !Commands.Abbreviations.Print
- !Commands.Abbreviations.Print_Window'Body
* Customizable compilation procedures:
- !Commands.Abbreviations.Code'Body
- !Commands.Abbreviations.Install'Body
4.3. Impact of Keymap Changes
New implementations for the keymap procedures are available for
D_12_1_1. These implementations provide additional keybindings
both for the Environment product and for layered products. All
new machines will be delivered with the new keymap
implementations.
Because the keymap procedure bodies on existing machines may
contain user customizations, the installation process creates a
world called !Machine.Editor_Data.Masters and puts the new
standard keymaps there.
If a customer site wants to replace the existing systemwide
keymap for a given terminal with the new standard keymap for that
terminal, the system manager (or other appropriate person) can:
1. Copy the terminal_name_@ objects from
!Machine.Editor_Data.Masters into !Machine.Editor_Data. This
will overwrite the existing objects for that terminal.
Alternatively, the existing keymaps in !Machine.Editor_Data
can be edited (rather than overwritten) using information from
the new standard keymaps in !Machine.Editor_Data.Masters.
2. Enter the Enable_Product_Keymaps procedure in
!Machine.Editor_Data to enable keybindings for any layered
products that have been installed on the system.
3. Promote the terminal_name_Commands procedure to the installed
state.
4. Enter the Refresh_Terminal_Information procedure to cause the
new keymap to take effect. (See section 6.9.)
5. Known Problems
5.1. Problem for Registering 2167 PDL
If the Design Facility: 2167 (6_0_7) layered product is in use on
your R1000, then upgrading to the D_12_1_1 Environment may cause
a Program_Error (elaboration order) exception to be raised
R September 1990 5\f
Rational Environment Release Information
whenever you attempt to register 2167 PDL or invoke Design
commands. This problem arises only if you are using the load
views that are delivered with the product instead of the code
views. You can detect the problem during a system boot - if the
load views are being used, then attempts to initialize PDL will
fail.
To work around this problem, first decide whether you really need
to use the product's load views, which are made available for
customizations. If the default system activity
!Machine.Release.Current.Activity points to the product's load
views and you do not have customizations in those load views,
then change the activity to point to the product's code views.
If, however, you have customized this product, you must add the
following pragma to each of five unit bodies:
pragma Elaborate (Cache_Operations);
These unit bodies are all in the load view of the Pdl_Definition
subsystem; they are listed below:
Pdl_Definition'View.Units : Library (Load_View);
Components'Body
Data'Body
Inputs_And_Outputs'Body
Interrupts'Body
Requirements'Body
You must edit each of these five units, inserting the pragma on
the line immediately preceding package body Name is. For example,
in Pdl_Definition'View.Units.Components'Body, you must change:
package body Components is
to:
pragma Elaborate (Cache_Operations);
package body Components is
5.2. Problem for the Mc68020_Bare CDF Debugger
If the CDF: 68K Bare (5_1_1 or later) layered product is in use
on your R1000, then upgrading to the D_12_1_1 Environment may
cause a Program_Error exception to be raised whenever you execute
the Debug.Invoke command on a CDF main program. This problem
arises because of a spec/load incompatibility that is now
detected by the D_12_1_1 Environment.
The immediate workaround is to set the
Command_Cg.Check_Compatibility session switch to False. This must
be done for each session using the Mc68020_Bare CDF debugger.
6 September 1990 R\f
D_12_1_1 Release
As part of the D_12_1_1 installation process, new Ax25 and
Mc68020_Bare debugger views are provided to solve the problem.
See the Installation Procedure for a description of when these
views need to be installed and how to install them. Note that
after these views have been installed, the session-switch
workaround need not be used.
5.3. Problem for Cmvc.Copy with Goal => Source
When you use Cmvc.Copy to copy load views and the Goal parameter
is set to Compilation.Source, any loaded main programs in the
copied views lose their code segments. This applies to any of
Cmvc.Copy's derivatives - namely, Cmvc.Make_Path, Cmvc.Make_Sub-
path, and Cmvc.Make_Spec_View. Note that this problem should be a
rare occurrence because the default value for the Goal parameter
is Compilation.Coded.
5.4. Name Resolution for Editor.Key.Define Command
In previous releases, the Command_Name parameter of the
Editor.Key.Define command accepted any fully qualified procedure
name enclosed in a single set of quotation marks. In the D_12_1_1
release, this command accepts a procedure name only if it
resolves to a unique object.
Thus, the following is accepted only if !Users.Anderson.My_Print
is a loaded main program (in this case, the specified name
resolves to a single object):
Editor.Key.Define (Key_Name => "CM_F1",
Command_Name =>
"!Users.Anderson.My_Print",
Prompt => False);
If !Users.Anderson.My_Print is not a loaded main procedure, the
command must be specified as follows (the 'Spec attribute causes
the specified name to resolve uniquely):
Editor.Key.Define (Key_Name => "CM_F1",
Command_Name =>
"!Users.Anderson.My_Print'Spec",
Prompt => False);
As in previous releases, the following form (with nested
quotation marks) can be used regardless of whether the specified
command is a loaded main program:
Editor.Key.Define (Key_Name => "CM_F1",
Command_Name =>
"""!Users.Anderson"".My_Print",
Prompt => False);
R September 1990 7\f
Rational Environment Release Information
5.5. Problem for Loaded Main Programs in Copied Views
If you use CMVC commands to copy a view containing a loaded main
program and transfer the resulting copy to an R1000 running the
D_10_20_0 release of the Environment, the loaded main program in
the transferred view will not be executable on the destination
machine. This is the case even if the
R1000_Cg.Delta1_Code_View_Compatibility and
R1000_Cg.Retain_Delta1_Compatibility switches were set to True
when the loaded main program was created. The CMVC commands that
affect loaded main programs in this way are Cmvc.Copy,
Cmvc.Make_Path, Cmvc.Make_Subpath, Cmvc.Make_Spec_View, and
Cmvc.Release. Note that the Archive.Copy command does not affect
loaded main programs in this way.
The workaround for this problem is to copy the view as usual with
the appropriate CMVC command and use the Archive.Copy command to
(re)copy the loaded main program into the newly created view. If
this newly created view is a release, you must use the
Library.Unfreeze command to unfreeze the loaded main program
before you enter the Archive.Copy command. There is no
workaround if the loaded main program is controlled.
Note that there is no easy way to know that this problem exists
at the time the new view is created. The CMVC operation will
succeed and the loaded main program will be coded and executable
in the new view. The problem will appear only when the new view
is archived (Archive.Copy will give a message) and execution is
attempted on the D_10_20_0 machine.
5.6. Problem for Displaying CMVC Generation Differences
As usual, you can display CMVC generations of a controlled object
in a view either by entering the Cmvc.Edit command in the view,
followed by Common.Definition on the desired object, or by
entering the Cmvc.Def command directly on the object in the view.
Furthermore, you can use Common.Expand on the resulting
generation image to show the differences between consecutive
generations of the object.
In the current release, however, attempts to display certain
kinds of differences will either fail with a constraint error or
display the difference incorrectly (a changed line will appear to
be out of position by one line). This behavior arises when the
differences between two generations are due to user changes that
occur immediately next to changes in pretty-printer alignment.
It is important to note that this problem affects only the
display of the differences; the data in the CMVC database is not
affected, and no other operations are affected. There is no
workaround for this problem.
8 September 1990 R\f
D_12_1_1 Release
5.7. Clarification of Access Control
To create a subsystem in a world using the Cmvc.Initial command,
you must belong to a single group that has both RCOD access and
RW default access to the world. Similarly, to copy or restore a
subsystem into a world using Archive commands, the identity of
the archive server job must belong to a single group that has
both RCOD access and RW default access to the world.
The new documentation insert for package Cmvc_Access_Control and
the new online help for package Archive incorrectly imply that
the creating/copying/restoring identity may belong to different
groups that only collectively have the required access.
5.8. Problem for Setting Debugging Breakpoints
Under certain circumstances, attempts to set a breakpoint in a
subprogram will fail with a message like the following:
The breakpoint has been created but could not be activated:
Problem encountered activating breakpoint: Illegal Pc value
Inactive Permanent Break 1 at .GUMP.FOO.1S [any task]
This failure occurs when both of the following are true:
* The R1000_Cg.Retain_Delta1_Compatibility switch is set to
False, and
* The compilation unit in which the subprogram is declared
contains an instantiation to which that subprogram is passed
as a parameter.
For example, assume that procedure Example, below, has been coded
with the R1000_Cg.Retain_Delta1_Compatibility switch set to
False. When debugging procedure Example, attempts to set a
breakpoint in the declaration of procedure Foo will fail:
with Text_Io;
procedure Example is
generic
with procedure P (X : Integer);
package G is
end G;
package body G is
begin
P (1);
end G;
procedure Foo (X : Natural) is
begin
Text_Io.Put_Line ("foo called:" & Integer'Image (X));
end Foo;
R September 1990 9\f
Rational Environment Release Information
package Inst is new G (Foo);
begin
null;
end Example;
The workaround is to put the instantiation and the subprogram
declaration into separate compilation units. Thus, in procedure
Example, above, a breakpoint can be successfully set in procedure
Foo after the instantiated package Inst has been moved to a
separate subunit.
5.9. Problem for Debugging Code Views
A new feature of D_12_1_1 is that code views and loaded main
programs can be debugged using the source-level Rational
debugger, provided that the original Ada units still exist in the
same location and have not been recompiled since the code
view/loaded main program was created.
Under certain circumstances, however, names of objects in code
views cannot be resolved by Debugger commands. In particular,
using the Debug.Source or Debug.Definition command with default
parameter values causes obscure name-resolution messages to be
displayed whenever command arguments are designated by cursor
position alone. The messages that may appear include at least
the following:
Problem encountered resolving location's path name:
Name caused unexpected diana node kind to be encountered
Problem encountered resolving location's path name:
Name component not found in context
Problem encountered resolving location's path name:
Library unit has no body
The workaround is to always select (highlight) the object in
question in addition to indicating it via cursor position.
5.10. Problem for Incrementally Editing Named or Labeled
Statements
An incorrect error message is produced if you incrementally edit
and repromote a named or labeled statement that occurs inside a
nested block. For example, assume you want to change a list of
statements that includes Named_Statement and occurs in a nested
block within Example_Procedure. To do so, you select the list
indicated below and incrementally edit it:
package body Example_Package is
procedure Example_Procedure is
10 September 1990 R\f
D_12_1_1 Release
begin
declare
...
begin
... -- Selected and
incrementally edited
Named_Statement: -- statement list.
declare --
... --
begin --
... --
end Named_Statement; --
... --
end;
end Example_Procedure;
end Example_Package;
When you repromote the list, the following error message is
displayed:
Statement name NAMED_STATEMENT is a co-resident homograph of
block name
NAMED_STATEMENT [LRM 8.3 (17, 15)]
A workaround is to demote the entire unit to source to make the
change. Alternatively, you can select and incrementally edit the
entire enclosing program unit (in this case, the enclosing
subprogram Example_Procedure) instead of just the statement list.
5.11. Problem for Archive-Copying Views
Under certain fairly rare circumstances, copying views with
Archive commands results in the following error message:
*** Internal Error - Unable to iterate over child objects
... while setting ACLs because of some unknown failure in
... the directory system while operating on <1>
*** Cmvc_Access_Control.Initialize is quitting after errors.
This message occurs when a view that has never contained compiled
Ada units is copied to a destination other than a subsystem.
That is, the views in question contain only text files and/or Ada
units that have never been promoted beyond the source state;
views such as these do not have compatibility databases. When
such views are copied to nonsubsystem destinations, the Archive
command attempts to construct an enclosing subsystem and reports
an error because it expects but does not find a compatibility
database.
To recover from this situation, you must:
1. Execute the Cmvc_Maintenance.Check_Consistency command on the
newly created subsystem.
R September 1990 11\f
Rational Environment Release Information
2. Execute the Cmvc_Access_Control.Initialize command on the
newly created subsystem (unless you do not want the subsystem
to be put under CMVC access control).
5.12. Problem for Copying Archived Units with Subunits
When you copy a unit in the archived state, the operation will
fail if that unit has subunits. Affected operations include:
* Using Library.Copy or Archive.Copy to copy any set of objects
that contains at least one archived parent unit.
* Using Cmvc.Copy, Cmvc.Make_Path, Cmvc.Make_Subpath,
Cmvc.Make_Spec_View, or Cmvc.Release to copy a view that
contains at least one archived parent unit.
The workaround is to promote the archived units to the source
state before attempting the copy operation.
5.13. Problem with Only_Change_Imports Parameter in CMVC
Commands
When you use commands such as Cmvc.Copy, Cmvc.Make_Path, and
Cmvc.Make_Subpath to create new views, the operation will fail if
both the Only_Change_Imports parameter is True and the new views
are being created with a different target key (via a different
model).
The workaround is to set the Only_Change_Imports parameter to
False and specify the current imports to the command.
5.14. Problem for Token Management
Many Rational products now are purchased on a per-session basis.
Under per-session pricing, a customer purchases a specific number
of concurrent usages (called tokens) for a given product. When a
user session references any of the product's facilities, the
referencing session acquires one of the product's tokens. When
all of the product's tokens are in use, any session attempting to
use the product will have to wait until a token has been
released.
A problem exists in D_12_1_1 with the way tokens are released.
As documented in section 6.12, a session should release its token
when the following two conditions are met:
* The session logs out.
* All of the session's background jobs have terminated.
However, in D_12_1_1, the token is not released unless a third
condition also is met: namely, that another session attempts to
12 September 1990 R\f
D_12_1_1 Release
get the token.
This third condition gives rise to a scenario in which a user
could effectively "lock up" a token indefinitely simply by using
the product, logging off at the end of the day, and then logging
back in first thing the next morning. If no other session has
attempted to get the token in the meantime, the original user
automatically re-obtains the token, even if he or she doesn't
actually use the relevant product.
6. New Environment Interfaces
D_12_1_1 provides a number of new interfaces, including two new
packages and a number of new declarations that are incrementally
inserted into existing packages.
6.1. Package Cmvc_Access_Control
A major new package, !Commands.Cmvc_Access_Control, has been
added to the Rational Environment in D_12_1_1. This package
provides convenient mechanisms for managing access control in
Rational Subsystems.
Package Cmvc_Access_Control is documented in the upgrade to the
Project Management (PM) book of the Rational Environment
Reference Manual. This document is delivered with the D_12_1_1
Environment.
6.2. Package Remote_Passwords
The commands in package
!Tools.Dtia_Rpc_Mechanisms'Spec_View.Units.Remote_Passwords can
be used to add, change, or delete entries in a remote passwords
file, which is a text file that specifies the usernames and
passwords to be used when accessing remote hosts. By default, the
commands in this package modify the remote passwords file for the
current session. Thus, these commands provide a convenient
alternative to locating the file in the library hierarchy and
then editing it directly. Furthermore, the commands in this
package provide a way to encrypt the passwords listed in the
file.
A remote passwords file contains one or more entries of the
following form:
host_name username password_value
where host_name names a machine to which the user has access,
username is a valid username for that user on the specified
machine, and password_value is the required password for the
specified username. The form of password_value must be one of the
following:
R September 1990 13\f
Rational Environment Release Information
* A literal password, which is a string of any length not
containing blanks. (This string may, but need not, be
enclosed by quotation marks.) Entries for literal passwords
are case-sensitive, so the entry slithy_toves differs from
Slithy_Toves.
* The special value <PROMPT>, which causes the user to be
prompted for the password during an operation that accesses
the remote host.
* An encrypted password, which appears as a hexadecimal string
enclosed in angle brackets. If the password value has been
encrypted using the Data Encryption Standard, the hexadecimal
string has the prefix DES:. If the password value has been
encoded in hexadecimal notation, the string has the prefix
HEX:.
* The null string (""), which indicates that no password is
required. (In this case, the password_value can be omitted
altogether.)
For example, assume that the remote passwords file for your
current session contains the following entries:
machine_1 alice "slithy_toves"
machine_2 guest ""
machine_3 anderson <PROMPT>
machine_4 operator <DES:29A1EB449C1A03F6>
The first entry allows you to gain access to Machine_1 under the
username alice, whose password is the literal string slithy_toves
(note that the quotation marks in the entry can be omitted). The
second entry provides access to Machine_2 as a guest user with no
password (note that password column can be left blank). The third
entry allows you to gain access to Machine_3 under the username
anderson; a prompt is displayed for you to enter the required
password. The fourth entry allows you to access Machine_4 as
Operator; the password for operator has been encrypted using DES.
You can use the Add and Change commands to create and modify
entries in the current remote passwords file. Both commands
provide an Encryption parameter that specifies the type of
encryption (if any) to be used for the password. This parameter
accepts the values Des, Hex, or None (which causes a literal
string to be entered without encryption).
If you decide to edit the remote passwords file directly, you can
enter encrypted passwords using the Show_Encryption command to
generate the encrypted value and then region-copying it into the
file.
6.3. Procedure What.Search_List_Resolution
procedure Search_List_Resolution (Name : String := "<CURSOR>");
14 September 1990 R\f
D_12_1_1 Release
Determines the object to which the specified name resolves in the
context of the current searchlist. The resolution and the
searchlist entry that provide the resolution are displayed in the
message window. The fully qualified name of the procedure is
!Commands.What.Search_List_Resolution.
6.4. Procedure Cmvc.Compare
procedure Compare
(Destination : String := "<CURSOR>";
Source : String := "<REGION>";
Compare_Both : Boolean := True;
Show_New_Uncontrolled : Boolean := True;
Show_New_Controlled : Boolean := True;
Show_Uncontrolled : Boolean := True;
Show_Severed : Boolean := True;
Show_Modified : Boolean := True;
Show_Equal : Boolean := False;
Ada_Units : Boolean := True;
Files : Boolean := True;
Response : String := "<PROFILE>");
Compares a pair of views or configuration objects. The
Compare_Both parameter determines whether the views are compared
symmetrically or just the Source is compared against the
Destination. The Ada_Units and Files parameters can be used to
specify the kinds of objects that are compared. The remaining
parameters determine the kinds of differences displayed. The
fully qualified name of the procedure is !Commands.Cmvc.Compare.
6.5. Procedure Cmvc.Accept_Changes_Effort
procedure Accept_Changes_Effort
(Destination : String := "<CURSOR>";
Source : String := "<REGION>";
Compare_Both : Boolean := False;
Show_New_Uncontrolled : Boolean := False;
Show_New_Controlled : Boolean := True;
Show_Uncontrolled : Boolean := False;
Show_Severed : Boolean := False;
Show_Modified : Boolean := True;
Show_Equal : Boolean := False;
Ada_Units : Boolean := True;
Files : Boolean := True;
Response : String := "<PROFILE>")
renames Compare;
Displays the effect of using Cmvc.Accept_Changes from the Source
into the Destination. The fully qualified name of the procedure
is !Commands.Cmvc.Accept_Changes_Effort.
R September 1990 15\f
Rational Environment Release Information
6.6. Procedure Command.Make_Procedure
procedure Make_Procedure
(Name : String := ">>Simple Procedure Name<<";
Context : String := "$");
Creates an installable Ada procedure containing the contents of
the command window designated by the cursor. The procedure has
the specified Name and is created in the given Context. With
clauses are added to the procedure definition as needed so that
unqualified names will semanticize correctly. Also, if needed, a
Links.Add is attempted. The fully qualified name of the procedure
is !Commands.Command.Make_Procedure.
6.7. Procedures in Package Editor.Screen
procedure Set_Columns (Columns : Natural);
procedure Set_Lines (Lines : Natural);
Sets the height (lines) and width (columns) of the terminal
screen for the current session. Changes take effect at Set_Lines
calls. These procedures are in !Commands.Editor.Screen.
6.8. Functions in Package System_Utilities
function Terminal_Lines (Line : Port := Terminal)
return Natural;
function Terminal_Columns (Line : Port := Terminal)
return Natural;
Reports the number of lines and columns associated with a port.
These functions are especially useful with RXI, where screen size
can vary. These functions are in !Tools.System_Utilities.
6.9. Procedure Refresh_Terminal_Information
procedure Refresh_Terminal_Information;
Refreshes the system's internal cache of terminal information.
This should be done whenever any of the following objects from
!Machine.Editor_Data have been changed: Terminal_Recognition,
Terminal_Types, @_Keys, @_Commands. Entering the
Refresh_Terminal_Information command causes these changes to take
effect without rebooting the system; users who log in after the
refresh will get the changed information.
Note that information from the objects listed above is read
automatically whenever the system boots, so it is not necessary
to call Refresh_Terminal_Information from the !Machine.Initialize
procedure.
16 September 1990 R\f
D_12_1_1 Release
The fully qualified name of this procedure is
!Commands.System_Maintenance'Spec_View.Units.Refresh_Terminal-
_Information.
6.10. Generic Procedure 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);
Provides a more complete form of the System_Backup.Backup
procedure. The Backup_Generic procedure itself is not used
interactively; rather, it is instantiated and called with the
!Commands.Abbreviations.Do_Backup procedure, described in section
7.19.1. Commands that instantiate and call Backup_Generic require
operator capability. The fully qualified name of this procedure
is !Commands.System_Backup.Backup_Generic.
As implemented in the standard Environment, the
!Commands.Abbreviations.Do_Backup procedure passes parameters to
the Backup_Generic procedure to specify the kind of backup to be
performed (full, primary, or secondary), as well as the time at
which the backup is to begin. The backup tape can be mounted at
any time after the !Commands.Abbreviations.Do_Backup procedure is
entered and before the backup is scheduled to begin.
The Backup_Generic procedure provides formal procedures
(Backup_Starting and Backup_Finishing) through which various
system characteristics are set for the duration of the backup and
then restored afterward. Backup_Starting executes just before
the actual backup is scheduled to begin and Backup_Finishing
executes immediately after the backup finishes. As instantiated
in the standard !Commands.Abbreviations.Do_Backup procedure, the
Backup_Starting formal procedure broadcasts a message to all
users informing them that a backup is beginning, saves the
current memory scheduler and snapshot settings, and then turns
off memory scheduling and snapshot warnings. The
Backup_Finishing formal procedure restores memory scheduling and
snapshot warnings according to the saved settings.
Because the Do_Backup command provides a standard instantiation
for this generic procedure, customers do not have to instantiate
it themselves. However, if desired, the system manager can edit
the body of !Commands.Abbreviations.Do_Backup to change the
standard instantiation of the two formal procedures. One
possibility is to use Backup_Finishing to send mail when the
backup has completed. Another possibility is to use
Backup_Starting and Backup_Finishing to turn off the
disk-collection daemon for the duration of the backup. Doing so
will prevent disk collection from interfering with the backup.
However, turning off disk collection is recommended only for
backups made on the 8-mm cartridge tape drive, because such
backups require significantly less time than those made on
R September 1990 17\f
Rational Environment Release Information
9-track tape drives. In any case, turning off disk collection is
not recommended if the disks are very full.
6.11. Procedure Verify_Backup
procedure Verify_Backup;
Verifies that a backup is complete and can be restored. This
procedure simulates the tape operations involved in restoring a
backup, checking to make sure that the all of the required labels
exist and are correct. You should use this command to verify
your backup before you try to restore the Environment from it
(that is, before you "go back in time").
You can use this procedure to verify 9-track backup tapes and
8-mm cartridge backup tapes. When verifying a multitape backup,
you must load the backup index tape (formerly known as the "blue
tape") first and then the data tapes in sequence.
The Verify_Backup procedure generates the same messages on the
operations console as an actual recovery would generate,
confirming tape operations as well as skip and read operations.
If the backup is restorable, the procedure concludes with the
following message:
Successfully completed scan of backup tape
If the backup is not restorable, the procedure concludes with the
following message:
*** Verify_Backup DID NOT complete
In most cases, verifying a backup takes two to three hours. Less
time may be required for verifying backups on 8-mm cartridge
tapes or on lightly loaded systems. More time may be required for
verifying backups on 9-track tapes or on heavily loaded systems.
The fully qualified name of this procedure is
!Commands.System_Maintenance'Spec_View.Units.Verify_Backup.
6.12. Declarations for Managing Per-Session Pricing
Many Rational products are now purchased on a per-session basis.
Under per-session pricing, a customer purchases a specific number
of concurrent usages that are authorized for a given Rational
product. For example, by purchasing the Rational Environment
under per-session pricing, a customer obtains a total number of
concurrent logins that are authorized on the customer's R1000s.
Each concurrent usage permission is referred to as a token.
A particular system is authorized for some number of tokens,
possibly zero, for each of the Rational products. As user
sessions reference the facilities provided by a given product,
18 September 1990 R\f
D_12_1_1 Release
each referencing session acquires a token for that product. A
session retains its tokens until it is terminated (logged out);
however, if background jobs associated with a session continue to
execute after the session is logged out, the session's tokens are
not released until the last background job completes. The
Environment login token is an exception - it is released when the
session itself is terminated, regardless of whether background
jobs continue. Note that the console command interpreter has a
login protocol but does not consume a login token.
Rational personnel are responsible for placing tokens on systems
according to the customer's purchase agreements. Tokens are
generally placed at the factory and delivered with new systems;
when additional tokens are purchased subsequent to delivery,
Rational representatives add them to existing systems.
Once tokens have been placed on a system, however, customers may
transfer them to other systems that reside within the same site,
where the notion of a site is defined in the Rational Price
Guide; a site is essentially a set of R1000s that meet certain
criteria, such as sharing a single support contract. For example,
if a customer has three R1000s at a single site and has purchased
a total of 15 concurrent logins for the Environment, then that
customer can distribute the logins between those three machines
(for example, to authorize 7 logins on one R1000 and 4 logins
each on the others). However, if the same customer purchases an
additional R1000 and places it on a separate support contract
(thereby defining a different site for that R1000), none of the
original 15 logins will be transferable to the new machine.
A buy-out number exists for each product. The buy-out number is
the number of tokens that can be placed on a single system after
which token enforcement is no longer performed. For example,
Environment logins have a buy-out number of 12; this means that
if a customer places 12 login tokens on the same system, that
system will allow unlimited concurrent logins. (Consequently,
putting a thirteenth token on this machine would waste a token.)
If, however, the customer puts 11 or fewer login tokens on the
system, then the number of concurrent logins is limited to the
exact number of tokens. Thus, when all of a product's tokens on a
given system are taken, further attempts to use that product on
that system cause a message to be displayed indicating that the
token-usage limit is exceeded. Another session will have to be
terminated before further attempts will succeed.
The transfer of tokens is subject to stringently enforced
restrictions:
* Transfers must be completed on the same calendar day (12 a.m.
to 12 p.m.). If this condition is not met, the donated tokens
will be lost and can be restored only through the Rational
Response Center. A fee may be assessed for this service, as
specified in the Rational Price Guide.
R September 1990 19\f
Rational Environment Release Information
* The two machines involved in the transfer must be part of a
single site.
* A given machine cannot both accept and donate tokens (for any
product) on the same calendar day.
* Operator capability is required to perform token transfers.
The D_12_1_1 release of the Environment provides new declarations
in !Commands.System_Maintenance'Spec_View.Units for managing per-
session pricing:
Commands for transferring tokens: Accept_Tokens, Donate_Tokens
Commands for displaying site and token information: Show_Site,
Show_Tokens
Functions for use in tools: Get_Machine_Id, Get_Site
Commands for Rational personnel only: Setup_Machine, Set_Site
The commands for Rational personnel are for use in converting
existing machines to per-session pricing, initializing new
machines, and updating site membership to reflect support
contract changes. Information about Setup_Machine and Set_Site
can be found in their online specifications; the remaining
declarations are documented in the following sections.
6.12.1. Procedure Accept_Tokens
procedure Accept_Tokens
(Product : String;
Donation : Positive;
Resulting_Count : Positive;
Code : String;
Response : String := "<PROFILE>");
Completes the transfer of tokens for the specified product from
one R1000 to another.
The transfer of tokens between machines is initiated by the
Donate_Tokens procedure on the donating machine. Among other
things, the Donate_Tokens procedure displays a call to the
Accept_Tokens procedure in which specific parameter values are
filled in:
* The Product parameter specifies the name of the product for
which tokens are being accepted. If the product has not
previously been authorized, successfully accepting tokens will
authorize it.
The exact name that can be specified for a given product is
supplied by Rational when that product is purchased. You can
also list the names of the purchased products on a given R1000
by executing the Show_Tokens procedure. It is important to
note that product names are case-sensitive and must be entered
20 September 1990 R\f
D_12_1_1 Release
exactly as they are given in the Show_Tokens display.
* The values of the Donation and Resulting_Count parameters
reflect the input that was given to the Donate_Tokens
procedure. (These parameter values specify the number of
transferred tokens and the total number of tokens on the
accepting machine, respectively.)
* The value of the Code parameter is a unique authorization code
valid only for the current day, on the current machine, at a
particular site; this code is generated by the Donate_Tokens
procedure. Without this code, the transfer cannot be
completed.
The displayed call to Accept_Tokens must then be copied to the
accepting R1000 and executed there. (Alternatively, the call can
be executed remotely using the Remote.Run procedure.) As a
result, the new number of authorized tokens is recorded in the
accepting machine's error log, and the new tokens are made
available immediately.
Restrictions:
* The Accept_Tokens procedure must be run on the same calendar
day as the Donate_Tokens procedure. If this condition is
not met, the donated tokens will be lost and can be recovered
only by contacting the Rational Response Center.
* The donating and accepting machines must reside within a
single site.
* The accepting machine cannot donate tokens on the same
calendar day.
* Machines that are not set up for per-session pricing cannot
accept tokens.
* Execution of the Accept_Tokens procedure requires operator
capability.
6.12.2. Procedure Donate_Tokens
procedure Donate_Tokens
(Product : String;
Donation : Positive;
Resulting_Remote_Count : Positive;
Remote_Machine_Id : Long_Integer;
Remote_Site : String;
Response : String := "<PROFILE>");
Initiates a transfer of tokens for the specified product from one
R1000 to another.
R September 1990 21\f
Rational Environment Release Information
When a customer purchases a Rational product on a per-session
basis, the customer obtains a specific number of tokens for that
product. These tokens represent the rights of individual users to
use a particular product; the number of tokens on a given R1000
determines the number of users that can use that product
concurrently. The Donate_Tokens and Accept_Tokens procedures
allow the customer to distribute tokens (product usages) among
multiple R1000s within the same site.
The parameters specify the information required by the transfer,
as follows:
* The Product parameter specifies the name of the product for
which tokens are transferred.
The exact name that can be specified for a given product is
supplied by Rational when that product is purchased. You can
also list the names of the purchased products on a given R1000
by executing the Show_Tokens procedure. It is important to
note that product names are case-sensitive and must be entered
exactly as they are given in the Show_Tokens display.
* The Donation parameter specifies the number of authorized
tokens to be transferred from the current machine.
* The Resulting_Remote_Count parameter specifies the number of
authorized tokens that will exist on the accepting R1000 as a
result of the transfer.
* The Remote_Machine_Id parameter specifies the R1000 that is to
accept the transferred tokens; to obtain a value for this
parameter, you can use the Show_Machine_Id command on the
accepting machine. An error results if you specify the machine
identification number of the current machine (the current
machine cannot donate tokens to itself).
* The Remote_Site parameter specifies the site to which the
accepting machine belongs. To obtain a value for this
parameter, you can use the Show_Site command on the accepting
machine. The specified site must match the site of the
donating machine.
The Donate_Tokens command displays a call to the Accept_Tokens
procedure with the appropriate parameter values filled in. The
transfer is completed when the Accept_Tokens call is copied to
the accepting R1000 and executed there.
In addition to displaying the required call to the Accept_Tokens
procedure, the Donate_Tokens procedure records the initiated
transfer in the donating R1000's error log.
Restrictions:
* The Accept_Tokens procedure must be run on the same calendar
day as the Donate_Tokens procedure that generated it. If
22 September 1990 R\f
D_12_1_1 Release
this condition is not met, the donated tokens will be lost and
can be recovered only by contacting the Rational Response
Center.
* The donating and accepting machines must reside within a
single site. Donate_Tokens will fail if the specified
Remote_Site is different from the site of the current machine.
* The Donate_Tokens procedure fails if the transfer would leave
the donating machine with a negative number of tokens.
* The donating machine cannot accept tokens on the same calendar
day, regardless of product.
* Machines that are not set up for per-session pricing cannot
donate tokens.
* Execution of the Donate_Tokens command requires operator
capability.
Example:
Assume that you have two R1000s at your site and a total of 10
authorized logins that are currently distributed so that each
R1000 has 5. Assume further that you want to transfer 3 logins
from one machine to the other, resulting in 8 logins on the other
machine. The Donate_Tokens procedure initiates the transfer:
Donate_Tokens
(Product => "Login",
Donation => 3,
Resulting_Remote_Count => 8,
Remote_Machine_Id => destination_machine_id,
Remote_Site => "destination_machine_site");
The procedure displays the Accept_Tokens procedure with specific
parameter values in the current output window. This display
includes the authorization code to complete the transfer:
Accept_Tokens
(Product => "Login",
Donation => 3,
Resulting_Count => 8,
Code => "a_unique_authorization_code");
To complete the transfer, you now need to copy the displayed
Accept_Tokens procedure into a file, archive it to the
destination machine, and enter it in a command window there (or
the call to Accept_Tokens can be executed remotely using the
Remote.Run procedure).
R September 1990 23\f
Rational Environment Release Information
6.12.3. Function Get_Machine_Id
function Get_Machine_Id return Long_Integer;
Returns the machine identification number for the current
machine. Equivalent to "!Implementation".Machine.Get_Id, except
that it returns Long_Integer.
6.12.4. Function Get_Site
function Get_Site return String;
Returns the site identification for the current machine. Returns
the null string ("") if the site has not been set.
6.12.5. Procedure Show_Site
procedure Show_Site;
Displays the site identification for the current machine. To
donate tokens for one machine to another, it is necessary to know
that both have the same site identification.
6.12.6. Procedure Show_Tokens
procedure Show_Tokens (User_Filter : String := "";
Product_Filter : String := "";
Include_Sessions : Boolean := True;
Include_Debugging : Boolean := False;
Include_Statistics : Boolean := False);
Shows token information for the specified user or product. System
managers can use this command after a token transfer to verify
that the current machine has the correct token limit. They can
also use this command to compare actual usage with purchased
usage. When no more tokens are available for a given product, end
users who want to use that product can use this command to find
out which sessions have the tokens.
By default, this command displays the following fields of
information for every token-managed product:
* Users. Lists the user sessions that currently have tokens.
* Limit. Shows the number of authorized tokens that have been
placed on the current machine.
* Current. Shows the number of tokens that are currently in use
(one for each of the sessions listed under Users).
* Buy_Out. Shows the number of tokens after which enforcement
is no longer performed. This number is established by
24 September 1990 R\f
D_12_1_1 Release
Rational on a product-by-product basis.
You can use the User_Filter and Product_Filter parameters to
specify a particular username or a particular product name for
which to display token information. You can set the Include-
_Sessions parameter to False to cause the display to omit the
information in the Users field. The remaining parameters
(Include_Debugging and Include_Statistics) are for internal use
only.
Example:
Product Users Limit Current Buy_Out
-------- ------------------- ----- ------- -------
Login 12 4 12
SJL.S_1
RJS.S_1
JIM.S_1
PHIL.S_1
X Interface 10 2 12
SJL.S_1
RJS.S_1
Design_Facility 8 1 12
RJS.S_1
In this example, Limit and Buy_Out are equal for Login, so there
is no limit on the number of concurrent logins. However, for the
remaining products, the maximum usage is set by Limit.
6.13. Declarations of Interest to Toolsmiths
Following are new declarations pertaining to CMVC implementation:
* !Implementation.Cmvc_Implementation.Element_Operations.Saves_
Source
* In !Implementation.Cmvc_Implementation_Errors:
Text_Creation_Storage_Error : constant Status := 41;
Database_Storage_Error : constant Status := 42;
No_Common_Ancestor_Found : constant Status := 43;
Source_Is_Checked_Out : constant Status := 44;
Destination_Is_Checked_Out : constant Status := 45;
Database_Was_Locked : constant Status := 46;
Database_Access_Control_Violation : constant Status := 47;
Source_Not_Saved_In_Database : constant Status := 48;
Line_Too_Long_For_Storage : constant Status := 49;
Source_Object_Is_Locked : constant Status := 50;
Source_Object_Is_Access_Protected : constant Status := 51;
Following are new declarations in !Io.Pipe:
* function Debug_Image
R September 1990 25\f
Rational Environment Release Information
* function Get_Daemon_Interval
* procedure Run_Daemon
* procedure Set_Daemon_Interval
Following are new declarations in package
!Implementation.Directory:
* Declarations pertaining to categories:
- type Category
- function Get_Category
- function Has_Category
- function Is_Gateway
- function Is_Resident
- procedure Set_Category
* Declarations pertaining to orders:
- function Convert
- function Get_Order
- type Order
- function Order_Category
- function Order_Subclass
- procedure Set_Order
* Declarations in package Directory.Ada:
- function Get_Order
* Declarations in package Directory.Naming:
- function Get_Order
- procedure Release
* Declarations in package Directory.Statistics:
- function Object_Is_Slushy
- function Object_Order
Following are new declarations in
!Implementation.Object_Subclass:
26 September 1990 R\f
D_12_1_1 Release
* function Cmvc_Access_Subclass
* function Defined_Subclasses
* function Design_Info_Subclass
* function Element_Cache_Subclass
* function Executable_Code_Subclass
* type Iterator
* function Markup_Subclass
* function Maximum_Subclass
* function Minimum_Subclass
* function Object_Code_Subclass
* function System_Subsystem_Subclass
* function System_View_Subclass
7. Changes from D_10_20_0
This section describes the changes, enhancements, and
user-visible bug fixes that D_12_1_1 makes to existing features
of the Environment. The information in this section is presented
in roughly the same order in which it would be found in the
Rational Environment Reference Manual: beginning with naming and
subclass information (which will appear in a hard-copy upgrade to
the Reference Summary), through general editing and screen
operations (EI), editing specific types of objects such as Ada
units and command windows (EST), debugger information (DEB),
library-management information including links, access control,
switches, compilation, and archive (LM), information about
!Io.Text_Io (TIO), system-management information including backup
and tape-related changes (SMU), and information about subsystems
and CMVC (PM). Following these are sections about Environment
changes that pertain to networking and RDF.
7.1. Changes to Parameter Value Conventions
This section includes changes to the conventions for entering
well-formed parameter values in Environment commands. Such
conventions include the rules for constructing naming expressions
and option specifications.
R September 1990 27\f
Rational Environment Release Information
7.1.1. New Special Names
Table 2 New Special Names
---------------------------------------------------------------
| | |
| Special | Description |
| Name | |
---------------------------------------------------------------
| | |
|"<HOME>" |Resolves to the user's home world; fails if this is|
| |not defined. |
---------------------------------------------------------------
| | |
|"< |Resolves to the enclosing subsystem; fails with an |
|SUBSYSTEM>"|error message if the context is not a subsystem or |
| |an object in a subsystem. |
---------------------------------------------------------------
| | |
|"<VIEW>" |Resolves to the enclosing view; fails with an error|
| |message if the context is not a view or an object |
| |in a view. |
---------------------------------------------------------------
7.1.2. New Attribute 'If
The attribute 'If specifies one or more conditions. An object
must satisfy at least one to be matched. The conditions,
specified as arguments to the 'If attribute, are listed in Table
3.
Table 3 Arguments for the Conditional 'If Attribute
----------------------------------------------------
| | | |
|Long Form| Short | Description |
| | Form | |
----------------------------------------------------
| | | |
|Controlle| |Matches objects if they are |
|d | |controlled. |
----------------------------------------------------
| | | |
|Checked_ |In |Matches objects if they are |
|In | |controlled and checked in. |
----------------------------------------------------
| | | |
|Checked_ |Out |Matches objects if they are |
|Out | |controlled and checked out. |
----------------------------------------------------
28 September 1990 R\f
D_12_1_1 Release
Table 3 Arguments for the Conditional 'If Attribute (cont.)
----------------------------------------------------
| | | |
|Long Form| Short | Description |
| | Form | |
----------------------------------------------------
| | | |
|Frozen | |Matches objects if they are |
| | |frozen. |
----------------------------------------------------
Example 1. The name @'If(~Controlled) matches all objects in the
current library that are not controlled.
Example 2. The name @'If(Out) matches all controlled, checked-out
objects in the current library.
Example 3. The name @'If(~In) matches the set of objects that are
not controlled or are not checked in. This name is equivalent to
@'If(~Controlled, Out).
Example 4. The name @'If(Controlled)'If(Frozen) matches the set
of objects that are both controlled and frozen. In contrast, the
name @'If(Controlled, Frozen) matches the set of objects that are
either controlled or frozen.
7.1.3. Miscellaneous Naming Changes
An object of subclass Object_Set can now be used as an indirect
file, just as text files and activities can. For example, the
State.Referencers object for a view is of subclass Object_Set;
therefore, you can enter the following command from the view's
State directory to obtain a list of that view's referencers:
Library.Resolve ("_Referencers");
The ambiguous abbreviated special name "<S>" now resolves to
"<SELECTION>" (not to "<SWITCH>").
Bugs were fixed so that every special name resolves as expected
when used as an argument to the Definition command. In
particular, the command Definition ("<SWITCH">); displays the
library switch file associated with the current library.
Bugs were fixed so that Definition ("<TEXT>"); now allows the
cursor to be immediately to the right of a highlighted region.
7.1.4. Options Parameter Changes
In an Options parameter, you can no longer use the null string to
specify a Boolean value for an option.
R September 1990 29\f
Rational Environment Release Information
7.2. Changes Pertaining to Subclasses
The subclass abbreviation Main_Body now matches both
Main_Function_Body and Main_Procedure_Body.
The File class has the three new user-visible subclasses shown in
Table 4.
Table 4 New User-Visible Subclasses in File Class
------------------------------------------------------
| | | |
| Short |Long Form | Description |
| Form | | |
------------------------------------------------------
| | | |
|Cmvc_ |Cmvc_ |File containing CMVC access-control|
|Acc |Access |information for a view or subsystem|
| | |(see PM book) |
------------------------------------------------------
| | | |
|Element|Element_ |Element cache for storing permanent|
|s |Cache |collections of Ada program elements|
| | |(part of Rational Design Facility) |
------------------------------------------------------
| | | |
|Markup |Markup |Text file containing markup, |
| | |generated from abstract document |
| | |(part of Rational Design Facility) |
------------------------------------------------------
7.3. Editor Changes
The behavior of Text.Create has been augmented. When applied to
an existing text file, this command brings the file into a window
and opens it for editing (equivalent to Common.Edit).
You can now modify an image that contains a selection without
causing the selection to be turned off. The selection remains if
you type into the area preceding or following it or if you type
directly into the selection itself. Characters typed at the start
of a selection are included inside the selection; characters at
the boundaries of a selection can be transposed with characters
outside the selection.
Several performance enhancements have been made:
* Characters typed into an image are processed faster.
* Searches for prompts (for example, Next Item and Previous
Item) are faster.
30 September 1990 R\f
D_12_1_1 Release
* Text files are brought up for reading approximately twice as
fast as before.
* Unnecessary repainting and scrolling are avoided.
Bug fixes were made so that rapidly switching between Overwrite
and Insert modes does not cause a failure to display typed
characters.
7.4. Changes to Terminal and Screen Operations
A new session switch, Session.Flash_Screen, allows
screen-flashing instead of beeping as an alert signal on a Facit
terminal.
The maximum screen size is now 160 by 160. This is especially
useful for users running the RXI product on workstations.
Bug fixes were made so that character insertion does not fail on
VT100 terminals.
After resizing the screen, you can use Format to reformat the
contents of each command window to accommodate the new line
length.
7.5. Change to Deleting Command Windows
The Common.Release command (typically bound to the Object-X key
combination) now has a different effect when used in a command
window. In particular, Object-X promotes the command window's
contents before removing the window. Thus, when used in a command
window, Object-X is no longer equivalent to Common.Abandon
(Object-G), which removes the command window and discards its
contents.
This change is intended to make the effect of Object-X more
consistent across all types of Environment windows. However, the
change may also cause you to inadvertently execute commands when
you only wanted to remove a command window. From now on, you
should use Window-K to remove command windows from the screen,
and use Object-G to discard a command window and its history.
7.6. Changes in Editing Ada Units
You can now edit a subunit in the source state while its parent
is being compiled. Furthermore, you can now create a subunit
before its stub exists in the parent unit, when the parent unit
is any of the following: frozen, checked in, locked, or in the
archived or coded state. However, the subunit cannot be promoted
until you edit the parent unit to insert the stub.
R September 1990 31\f
Rational Environment Release Information
Bugs were fixed so that a message is now produced whenever
Ada.Make_Inline is unable to inline a subunit without obsolescing
its installed parent.
Completion can now be used on generic instantiations.
Ada.Create_Body no longer puts the with clauses from the spec
into the body.
Ada.Create_Body now provides incomplete discriminated types with
a record type completion. Incomplete nondiscriminated types are
still provided with a derived type completion.
Ada.Create_Body now inserts two newlines (rather than only one)
at the end of every body.
Ada.Create_Private now completes private discriminated types with
a record type completion. Private nondiscriminated types are
still completed with a derived type completion.
You can now use Common.Demote to demote a highlighted list of
statements, declarations, and so on in an Ada unit. Demoting a
list removes dependencies that might otherwise prevent you from
making changes elsewhere in the Ada unit. When a list is demoted,
it is replaced with a statement prompt; in contrast to
Common.Edit, Common.Demote displays no additional window. (Thus,
you use Common.Edit to actually make changes to the highlighted
statements and Common.Demote to merely remove the dependencies on
them.) As is the case for any incremental operation, a controlled
unit must be checked out before a statement list in it can be
demoted. Demoting (rather than editing) a statement list is
useful when you want to remove dependencies on the following:
* Subprograms to which you want to add parameters with defaults
* Types or subtypes for which you want to change the bounds
* Variables for which you want to change initialization
expressions
The Region.Fill command has been enhanced so that you can fill a
comment in an Ada unit without having to select the comment
first. Filling a comment adjusts the placement of the words in
it, putting as many words as possible on each line. An Ada
comment is a contiguous set of lines, each beginning with the
string "-- ". Any line containing only the "-- " string serves to
delimit separate comments - for example:
-- First line of first comment
-- Second line of first comment; the next line serves as a
-- delimiter:
--
-- First line of second comment
-- Second line of second comment
32 September 1990 R\f
D_12_1_1 Release
To fill an Ada comment, you can put the cursor on any
nondelimiting line within that comment. Note that, when multiple
comments are separated as shown above, you can also choose to
fill them as a single comment by selecting them as a group and
then filling them (the delimiter lines containing only the
comment string are eliminated). In all cases, the leading "--"
strings are adjusted automatically.
Fill mode has been enhanced. When you type an Ada comment in fill
mode, comment delimiters are automatically supplied for
continuation lines.
Semantic checking was improved for incremental insertions. You
cannot incrementally insert illegal uses of private types. You
cannot incrementally insert circular with clauses (for example,
if package spec X withs package spec Y, then you cannot
incrementally insert with X; into package spec Y).
Semanticize and promote no longer allow "=" as a generic formal
subprogram with nonlimited arguments.
Bug fixes were made so that Object.Move works properly.
Previously, Object.Move would move the selected structures into
an insertion window that would have to be promoted as a separate
step. Now Object.Move both moves and promotes the selected
structures.
Common.Definition can now traverse from an abort statement to the
task referenced in that statement.
7.7. Ada Formatting Changes
The Format operation is now more conservative about discarding
user-entered text when attempting to correct syntax errors.
Specifically, this operation will discard text only in the
following instances:
* The word or is discarded if it immediately follows the word
select.
* The word do is discarded if there is no matching accept.
* An unmatched right parenthesis is discarded if it follows a
matched right parenthesis.
* In a series of consecutive semicolons, all but one is
discarded.
* An unmatched >> is discarded.
* An unmatched end; is discarded.
* An unmatched end name; is discarded.
R September 1990 33\f
Rational Environment Release Information
* An unmatched end loop name; is discarded.
The Format operation now diagnoses certain kinds of syntax errors
that formerly were detected only by the Semanticize operation.
The Format operation now leaves the cursor in more predictable
places. For example, assume that the cursor is on the letter F
of the variable Foo when you press the Format key. The cursor
stays on the same letter of the same variable, even if the Format
operation moved the variable. Similarly, if a Format operation
inserts tokens to the left of the cursor, the cursor will be
pushed to the right by the inserted tokens. However, if a prompt
is inserted among those tokens, the cursor is left on the prompt.
If the Format operation needs to insert a missing end, it
attempts to do so as close to the cursor as possible, if that
makes sense. If such placement does not make sense, the Format
operation will generally insert a [statement] or [declaration]
prompt immediately after the matching begin. (Formerly, the
Format operation would insert a missing end as far away as
possible from the matching begin.)
During syntactic completion, the Format operation now avoids
incorporating comments in the completed constructs. Thus, the
syntactic completion of:
A := 3
-- comment
will result in:
A := 3;
-- comment
instead of placing the semicolon on the line following the
comment.
The Format operation now completes based literals by inserting a
trailing pound sign (#) and/or a leading 16. For example, #1234
will complete to 16#1234#.
The Format operation no longer discards comments typed before a
[comp_unit] prompt.
The Format operation no longer discards printable non-Ada
characters like ? and \. Instead, these characters are underlined
as syntax errors.
7.8. Changes to Common.Complete
The initial level of detail in a Completion menu now expands
procedures and elides packages and generics. As always, you can
perform elide and expand operations to display the desired level
of detail.
34 September 1990 R\f
D_12_1_1 Release
Bug fixes were made so that completion works properly on function
calls that are used as arguments to other subprograms.
7.9. Changes to Debugging
The Debug.Put command now supports the display of types defined
in package Work_Order_Implementation.
Code views and loaded main programs can now be debugged using the
full capabilities of the Rational debugger, provided that the
original Ada units still exist in the same location and have not
been recompiled since the code view/loaded main program was
created.
A new switch, R1000_Cg.Full_Debugging controls whether full use
can be made of the debugger. When False (the default), this
switch causes the compiler to use certain optimizations that
generate code only for a subset of constructs; consequently,
under the debugger, single-stepping appears to skip statements,
and breakpoints cannot be set in certain places. When True, this
switch suppresses the compiler optimizations, thereby enabling
full use of the debugger on the produced code.
The Debug.Put command now handles generic information better. In
particular, this command no longer fails with an unhandled
exception when displaying certain records or arrays that have
types exported from generic instantiations as component types.
The Debug.Put command now displays arrays with consistent
spacing. Note that this slight difference in formatting may have
some impact on user tools that compare Debugger images.
Bug fixes were made so that the Debug.Reset_Defaults command
successfully starts the debugger in the background as documented.
The Debug.Stack and Debug.History Commands no longer cause a
stopped task to start running when the debug option Freeze_Tasks
is True.
7.10. Changes to Session Switches
String-valued switches are now case-sensitive. For example, the
value of switches such as Queue.Footer or
Session_Ftp.Remote_Directory now preserve upper- and lowercase
letters as entered by the user.
There are two new session switches:
* Session.Flash_Screen
Controls whether the terminal flashes when the Environment
discovers an error. When the switch is set to True, the
terminal flashes in reverse video instead of beeping when an
R September 1990 35\f
Rational Environment Release Information
error is discovered. For this to take effect, the
Beep_On_Errors switch must be set to True. Some terminal
configurations may not support this option. The default is
False. This switch takes effect only at login.
* Session.Push_Definition_Mark
Controls whether the cursor location is pushed onto the mark
stack when Common.Definition is executed. This is helpful for
retracing a path through multiple definitions but may decrease
the utility of marks specifically set by the user. The default
is False. Changes to this switch take effect immediately.
* Command_Cg.@
A new set of session switches that control the coding of
declare blocks in command windows. The set of Command_Cg
session switches is parallel in name and function to the set
of R1000_Cg library switches, which control the coding of Ada
units.
There are also new library switches that affect compilation; see
section 7.14.8 below.
7.11. Changes to Library Management
Worlds can no longer be created within a subsystem or view.
The Library.Delete and Library.Destroy commands now report an
error if you try to use them to destroy individual nondefault
versions. Library.Delete allows you to delete an object's
default version; Library.Destroy allows you to destroy the entire
object and all of its versions.
The Library.Delete and Library.Destroy commands now report an
error if you specify the null string ("") as the value of the
Existing parameter.
The Library.Copy and Library.Move commands now report an error if
you specify the null string ("") as the value of the To
parameter. Furthermore, the Library.Move command will not allow
the null string as the value of the From parameter. (In contrast,
the Library.Copy command allows the null string as a value of the
From parameter, interpreting it to mean the enclosing library.)
The Library.Copy command no longer copies associated files (files
whose names are enclosed in angle brackets, such as <Foo>) when
the Recursive parameter is True.
The Environment now enforces the rule that associated files can
be created only as subobjects of Ada objects (either specs or
bodies). Such files can no longer be created directly in
directories.
36 September 1990 R\f
D_12_1_1 Release
Files can now be created as subobjects of files - for example,
Text.Create ("foo.bar") creates file Bar as a child of the
existing file Foo. The child file Bar is listed in the directory
under Foo and indented. Deleting the parent file Foo
automatically deletes the child file Bar.
7.12. Access-Control Changes
Setting an object's ACL no longer changes the object's "time
stamp" (time of last modification).
If you set the ACL of an Ada unit while you are viewing or
editing it, a new version of that unit is created on which the
new ACL is set. Furthermore, your read or write lock will
automatically transfer to the new version (you will see the
version number increment in the window banner), and the previous
version with the old ACL becomes a deleted version. Similarly, if
you set the ACL of an Ada unit while another user is viewing it,
a new version is created on which the new ACL is set. However,
the other user continues to view the previous version, which
automatically becomes a deleted version. Note that you cannot set
the ACL of an Ada unit that another user is editing.
Bug fixes were made so that Access_List operations that verify
users and groups now check only objects of the correct subclass
in !Machine.Users and !Machine.Groups.
7.13. Changes to Links Management
Commands from package Links can no longer be used to add
individual links to a view (you must use CMVC import operations
instead).
You must now have read access (R) to a world to view its links
and owner access (O) to change its links.
Commands in package Links now log messages to notify you of
successful completion.
7.14. Compilation Changes
7.14.1. Promotion
A new procedure spec is created when you promote the body of a
library procedure that is in the source state and neither frozen
nor checked in. The new spec is created even if the procedure
already had a spec; the existing spec is overwritten, if it is in
the source state and neither frozen nor checked in. Whereas
pragmas and full-line comments from the existing spec are
preserved in the new spec, comments to the right of context
clauses or the parameter profile are lost. (If you use RDF
R September 1990 37\f
Rational Environment Release Information
annotations, it is recommended that you enter them as full-line
comments.) This enhancement reduces the number of steps required
for making changes to the parameter profile of a procedure:
1. Demote the spec and body of the procedure whose parameter
profile is to be changed.
2. Make the desired changes in the body.
3. Repromote the body. The existing spec is overwritten by a new
spec that contains the desired changes.
The Compilation.Promote and Compilation.Make commands now
correctly implement Scope => Load_View. This means that the
correct look-through is performed when coding a main program
against an activity.
7.14.2. Pragmas
Pragma Main has three optional parameters:
pragma Main (Target => target_name,
Activity => "activity_file_name" ,
Elaboration_Order => "file_name")
* Target. Specifies the name of the target for which the pragma
is intended. This is useful during cross-development, when you
may want to compile a unit as a main program for one target,
but not for others. This parameter controls the applicability
of the pragma in the following way: if the specified name
matches the target key of the enclosing library, the pragma is
used; otherwise, the pragma is ignored by the current target
compiler. Leaving this parameter unspecified causes the pragma
to be used wherever the unit is compiled (that is, the
parameter value defaults to the target referenced by the
current target key).
If a unit is to be compiled as a main program for each of
several targets, the unit can contain one pragma Main for each
target. When the unit is compiled for one of these targets,
the compiler filters out all but the pragma Main whose Target
parameter matches the target key; if none of the pragma Mains
specifies the current target key, the unit is not compiled as
a main program. Thus, you can compile the unit for different
targets without having to edit the source code to add or
remove the pragma.
* Activity. Specifies the name of the activity to be used when
generating elaboration code for the main program. If the
Activity parameter is omitted, the default activity for the
current session is used. This parameter has no effect for any
target other than the R1000.
38 September 1990 R\f
D_12_1_1 Release
* Elaboration_Order. Allows the user to specify additional
ordering constraints for the elaboration order. This parameter
specifies the name of a file that is in the same format as the
elaboration-order listing file (an indirect naming file).
Units will be elaborated in the order in which they occur in
the elaboration-order file. This parameter has no effect for
any target other than the R1000.
A new pragma, pragma Case_Method, allows users to specify the
search strategy (Linear_Search, Binary_Search, or Jump_Table) to
be used for case statements. When no search strategy is
specified, the compiler will choose an appropriate method. See
Appendix F for more details.
Pragma List and pragma Page are now supported by
Compilation.Compile.
A new pragma, pragma End_Of_Unit, can be used to specify the
boundary between adjacent compilation units that are stored in a
text file. For example, assume that you are transferring
compilation units from a text-based computer system to the R1000,
and one of the transferred text files contains multiple
compilation units separated by comments and pragmas. Before using
Compilation.Parse to parse this file, you can insert pragma
End_Of_Unit between the adjacent units to clarify which of the
comments and pragmas belong at the end of the preceding unit and
which belong at the beginning of the following unit. After the
units have been parsed, pragma End_Of_Unit is automatically
removed.
If you omit pragma End_Of_Unit, the Environment parses interunit
pragmas and comments by dividing them at the first full-line
comment (a comment that stands alone on a line and is not the
continuation of a right-trailing comment above it). All pragmas
and comments up to (but not including) such a comment are put at
the end of the preceding compilation unit, and the remaining
pragmas and comments are put at the beginning of the following
compilation unit.
7.14.3. Units in the Archived State
Bugs were fixed with respect to the way units in the Archived
state are handled. An archived unit can now be promoted to the
source state even if it contains syntax errors that prevent its
type from being known. No attempt is made to install the stub of
an archived unit when it is promoted to source. It is recommended
that you promote an archived unit to the source state before
promoting it to any other state; doing so will permit error
messages to be displayed if the second promotion fails. Finally,
the Library.Reformat_Image command can be used to reformat the
image of an archived unit; in the process, this command also
promotes the unit to the source state.
R September 1990 39\f
Rational Environment Release Information
7.14.4. Program Library
Compilation information about code views and loaded main programs
is now stored in a new underlying mechanism called a program
library, which replaces code databases. Because of this new
mechanism:
* Code views and loaded main programs can now be debugged using
the full capabilities of the Rational debugger, provided that
the original Ada units still exist in the same location and
have not been recompiled since the creation of the code
view/loaded main program.
* Code views and loaded main programs now consume less disk
space and are about five times faster to create.
Note that if you need to create code views and loaded main
programs that can be copied to machines running the D_10_20_0
Environment, you must create them so that they have code
databases as well as program libraries. To do this, you must set
both of the following switches to True for the appropriate
libraries, as described below:
R1000_Cg.Delta1_Code_View_Compatibility := True
R1000_Cg.Retain_Delta1_Compatibility := True
When creating a code view, you must set these switches in the
load view from which the code view is to be created. When
creating a loaded main program, you must set the first switch for
the library that is to contain the loaded main program; you must
set the second switch for the library containing the main
subprogram as well as for the library that is to contain the
loaded main program (these may, but need not, be different
libraries). Note that the code database for loaded main programs
and for code views are not visible objects. See also sections
7.14.8, 7.15.7, and 7.21.2.
7.14.5. Switch-Dependent Changes to the R1000 Compiler
The D_12_1_1 release of the Environment contains a major revision
of the R1000 compiler. This version of the compiler has been
validated under release 1.10 of the Ada validation suite (ACVC
1.10) and includes significant new features, improved
generated-code quality, and numerous bug fixes.
Certain of these new features and bug fixes are available only
when explicitly enabled by a switch. This is because enabling
these features and bug fixes causes the compiler to produce code
that is incompatible with the code generated by previous versions
of the compiler. In the D_12_1_1 release of the Environment,
these features and fixes are disabled by default, so that the
D_12_1_1 compiler generates code that is compatible with
D_10_20_0 and earlier compilers. This allows sites with existing
compiled code (or with R1000s that have not yet been upgraded to
40 September 1990 R\f
D_12_1_1 Release
D_12_1_1) to take full advantage of the revised compiler at their
convenience. Note that validation under ACVC 1.10 applies only
when the new features and fixes are enabled.
Following are the new features that are available only when
explicitly enabled:
* Unlimited code-size capacity. Previous versions of the
compiler limited the size of the generated code for a single
compilation unit. When enabled, there is no limit on the size
of the generated code for a single unit.
* Expanded support for representation clauses:
- Full support for enumeration representation clauses.
- Full support for dynamic storage-size length clauses for
access types. (Static clauses for access types are always
fully supported without having to be explicitly enabled;
see section 7.14.7.)
- Full support for dynamic and static storage-size length
clauses for task types.
- Full support for small length clauses for fixed-point
types.
- Full support for size-length clauses for fixed-point types.
(Size-length clauses for integer, enumeration, and access
types are always fully supported without having to be
explicitly enabled; see section 7.14.7.)
- Restricted support for size-length clauses for
floating-point, array, record, and task types. (Such
clauses are valid only if they specify the default sizes
for the relevant types; see section 7.14.7 for further
commentary.)
Following are the bug fixes that are available only when
explicitly enabled (examples of the effects of these bug fixes
are given in section 10):
* A discriminated type can be constrained prior to the complete
type declaration.
* Exceptions declared in generic instances are distinct.
* When generic formal subprograms are called, parameter subtype
checking is made against the actual generic subprogram's
parameter profile rather than that of the generic formal
subprogram.
To cause the compiler to generate D_10_20_0-compatible code in a
given library (thereby disabling the new features and fixes
listed above), use the default value for the following new
R September 1990 41\f
Rational Environment Release Information
library switch:
R1000_Cg.Retain_Delta1_Compatibility := True
You should use the default value if:
* You have existing code that was compiled using the D_10_20_0
compiler and you do not need to take advantage of the new
features and fixes.
* You are creating code views and/or loaded main programs that
must be copied to an R1000 that still has the D_10_20_0
Environment. In this case, you must also set the
R1000_Cg.Delta1_Code_View_Compatibility switch to True.
To enable the new features and fixes, obtain better code quality,
and thereby permit the compiler to generate code that is
incompatible with the D_10_20_0 compiler, set the switch to False
in the appropriate library, view, or model:
R1000_Cg.Retain_Delta1_Compatibility := False
You should set the switch to False if:
* You are starting new development that will not need to be
copied to D_10_20_0 systems.
* You have existing code that was compiled under D_10_20_0, but
you need to take advantage of new features and bug fixes
and/or you need to use an ACVC 1.10-validated compiler.
To convert existing code, you must set the switch to False in
each of the affected libraries or views, demote the units to
the installed state, and then repromote them to the coded
state. Code views cannot be recompiled and therefore should be
destroyed.
The spec, body, and all subunits of a given library unit are
always coded compatibly with the spec. That is, the current value
of the R1000_Cg.Retain_Delta1_Compatibility switch is consulted
only when the spec is coded; that same value is used when the
other parts are coded, regardless of the actual switch value at
the time. All units coded under previous versions of the compiler
are considered to have been compiled with the
Retain_Delta1_Compatibility switch set to True.
Note that units coded with one setting of the switch may
reference units coded with the switch set the other way. However,
there is one restriction: when a main program is prelinked, a
check is made to ensure that each unit in a spec view was coded
with the same switch setting as the corresponding unit in the
load view. The compatibility checker also makes this check when
checking load view/spec view compatibility.
42 September 1990 R\f
D_12_1_1 Release
To avoid confusion, it is recommended that you use the same
switch setting for all units in a given view. Furthermore, to
prevent problems with spec view/load view compatibility, it is
recommended that you use the same switch setting for all views in
a given subsystem.
7.14.6. Switch-Independent Changes to the R1000 Compiler
The following R1000 compiler changes are in effect regardless of
the value of the R1000_Cg.Retain_Delta1_Compatibility switch:
* The D_12_1_1 compiler now elaborates units in the closure of a
main program in a different order from that used by the
D_10_20_0 compiler. Both the D_10_20_0 and D_12_1_1
elaboration orders are legal; therefore, the change in
elaboration order should not cause legal Ada programs to fail.
(Erroneous programs that depend on a particular elaboration
order may fail as a result of this change, however.) You can
use the Elaboration parameter of pragma Main to cause the
D_12_1_1 compiler to use an elaboration order other than the
default.
* The R1000 compiler now provides restricted support for
size-length clauses for floating-point, record, array, and
task types. Such clauses are valid only if they specify the
default sizes for the relevant types. In contrast, the
D_10_20_0 compiler ignored these clauses without imposing any
restrictions on the sizes that could be specified. See
section 7.14.7 for further commentary.
* Functions that return results of a locally declared subtype no
longer raise unhandled exceptions at runtime.
* Constraint_Error is raised instead of Numeric_Error on almost
all constraint checks.
7.14.7. Representation Clauses
The D_12_1_1 compiler provides the following kinds of support for
representation clauses:
* Full support is provided for up to ten kinds of representation
clauses. Such clauses can be used to change the way the
compiler represents a given type. Note that:
- Six of these clauses are supported only if new compiler
features are explicitly enabled by setting the
R1000_Cg.Retain_Delta1_Compatibility switch to False.
- The other four clauses are supported regardless of the
switch setting. These four clauses are supported exactly
as they were in the D_10_20_0 release of the compiler.
R September 1990 43\f
Rational Environment Release Information
The "Appendix F for the R1000 Target" describes the valid
representations that can be specified in these clauses.
Clauses that specify invalid representations produce errors
unless the Ignore_Invalid_Rep_Specs switch is set to True.
* Restricted support is provided for four kinds of
representation clause. Such clauses are accepted only if they
specify the the representations that the R1000 compiler would
otherwise use for the relevant types. This restriction
applies regardless of the setting of the
R1000_Cg.Retain_Delta1_Compatibility switch. This restriction
is a change from the D_10_20_0 release of the compiler, which
ignored these clauses regardless of the values they specified.
The "Appendix F for the R1000 Target" describes the valid
(default) representation of each of the relevant types.
Clauses that specify invalid (nondefault) representations
produce errors unless the Ignore_Invalid_Rep_Specs switch is
set to True.
* No support is provided for the remaining three kinds of
representation clauses. Each such clause produces an error,
regardless of the values it specifies, unless either the
Ignore_Unsupported_Rep_Specs switch or the
Ignore_Invalid_Rep_Specs switch is set to True.
The following table shows the representation clauses to which the
various kinds of support (full, restricted, and no support)
apply. Support is indicated for the D_10_20_0 and D_12_1_1
releases of the compiler; information about the D_12_1_1 release
is divided according to the value of the
R1000_Cg.Retain_Delta1_Compatibility switch:
Table 5 R1000 Compiler Support for Representation Clauses
--------------------------------------------------------
| | | | |
| | |D_12_1_1: |D_12_1_1: |
| | | Retain_ | Retain_ |
| | | Delta1- | Delta1- |
|Kind of Clause |D_10_20_0 | _Compati-| _Compati-|
| | | bility | bility |
| | | = True | = False |
| | | | |
|Size clauses for: | | | |
| | | | |
| Integer type |Full |Full |Full |
| | | | |
| Enumeration type |Full |Full |Full |
--------------------------------------------------------
44 September 1990 R\f
D_12_1_1 Release
Table 5 R1000 Compiler Support for Representation Clauses (con.)
--------------------------------------------------------
| | | | |
| | |D_12_1_1: |D_12_1_1: |
| | | Retain_ | Retain_ |
| | | Delta1- | Delta1- |
|Kind of Clause |D_10_20_0 | _Compati-| _Compati-|
| | | bility | bility |
| | | = True | = False |
| | | | |
| Access type |Full |Full |Full |
| | | | |
| Fixed-point type |No |No |Full |
| | | | |
| Floating-point type |Ignored |Restricted|Restricted|
| | | | |
| Task type |Ignored |Restricted|Restricted|
| | | | |
| Record type |Ignored |Restricted|Restricted|
| | | | |
| Array type |Ignored |Restricted|Restricted|
| | | | |
|Static storage-size | | | |
|clauses for: | | | |
| | | | |
| Access type |Full |Full |Full |
| | | | |
| Task type |No |No |Full |
| | | | |
|Dynamic storage-size | | | |
|clauses for: | | | |
| | | | |
| Access type |No |No |Full |
| | | | |
| Task type |No |No |Full |
| | | | |
|Small length clauses |No |No |Full |
--------------------------------------------------------
R September 1990 45\f
Rational Environment Release Information
Table 5 R1000 Compiler Support for Representation Clauses (con.)
--------------------------------------------------------
| | | | |
| | |D_12_1_1: |D_12_1_1: |
| | | Retain_ | Retain_ |
| | | Delta1- | Delta1- |
|Kind of Clause |D_10_20_0 | _Compati-| _Compati-|
| | | bility | bility |
| | | = True | = False |
| | | | |
|Enumeration |No |No |Full |
|representation clauses | | | |
| | | | |
|Record representation |No |No |No |
|clauses | | | |
| | | | |
|Address clauses |No |No |No |
| | | | |
|Interrupt entries |No |No |No |
--------------------------------------------------------
7.14.8. Compiler Switches
When the Reject_Inevitable_Exceptions switch is set to True, it
now overrides the value of the Flag_Inevitable_Exceptions switch.
Thus, inevitable exceptions are:
* Ignored if both switches are False
* Flagged with a warning if Flag_Inevitable_Exceptions is True
and Reject_Inevitable_Exceptions is False
* Flagged with an error if Reject_Inevitable_Exceptions is True,
regardless of the value of Flag_Inevitable_Exceptions
There are new library switches that affect compilation:
* R1000_Cg.Retain_Delta1_Compatibility
When True (the default), causes the D_12_1_1 compiler to
produce code that is compatible with previous releases,
thereby disabling the new compiler features and bug fixes
listed in section 7.14.5. When False, this switch enables all
of these new features and bug fixes in the D_12_1_1 compiler,
thereby causing the compiler to produce code that is
incompatible with previous releases. Note that validation
under ACVC 1.10 applies only when the switch is set to False.
46 September 1990 R\f
D_12_1_1 Release
* R1000_Cg.Delta1_Code_View_Compatibility
When False (the default), causes code views and loaded main
programs to be compatible with only the D_12_1_1 compiler.
When True, causes the creation of code views and loaded main
programs that can be copied to machines running the D_10_20_0
compiler:
- To create a compatible code view, this switch must be set
to True for the load view from which the code view is to be
created; furthermore, R1000_Cg.Retain_Delta1_Compatibility
must also be set to True for this load view. For more
information about code views, see section 7.21.2.
- To create a compatible loaded main program, this switch
must be set for the library that is to contain the loaded
main program. Furthermore, the
R1000_Cg.Retain_Delta1_Compatibility switch must also be
set to True for both the library that contains the main
subprogram and the library that is to contain the loaded
main program (these may, but need not, be different
libraries).
* R1000_Cg.Check_Compatibility
When True (the default), spec/load view compatibility is
checked whenever a main program is coded. As a result,
programs containing incompatibilities will now fail to code,
even if they used to execute successfully. To permit programs
containing incompatibilities to code, you must set the switch
to False.
* R1000_Cg.Full_Debugging
When False (the default), causes the compiler to use certain
optimizations that produce faster code but also restrict the
use of the debugger. In particular, the optimized compiler
generates code only for a subset of constructs; consequently,
under the debugger, single-stepping appears to skip
statements, and breakpoints cannot be set in certain places.
When True, this switch suppresses the compiler optimizations,
thereby enabling full use of the debugger on the produced
code.
* Semantics.Ignore_Invalid_Rep_Specs
When False (the default), all invalid representation
specifications are flagged as errors, thus preventing the
units that contain them from being installed. When True, both
invalid and unsupported representation specifications are
flagged with warning messages in the log and are otherwise
ignored. (Setting this switch to True overrides the value of
the Ignore_Unsupported_Rep_Specs switch.)
R September 1990 47\f
Rational Environment Release Information
Representation specifications are considered invalid if they
do not conform to the restrictions specified in the "Appendix
F for the R1000 Target." For most purposes, the
Ignore_Invalid_Rep_Specs switch and the
Ignore_Unsupported_Rep_Specs switch should have the same
value.
* R1000_Cg.Package_Integration
When False (the default), a separate module (an R1000 task) is
generated for each of a set of nested packages. When True,
the code generator treats each nested package (whenever
possible) as if all of its declarations were declared directly
within the parent package. This optimization mainly saves
space, but it also eliminates the time required to activate
another module. This optimization is not possible if the
nested package contains tasks or an initialization block or
has a separate body. Code generated with this switch set to
True is not compatible with code generated by D_10_20_0
compilers.
A new set of session switches with the prefix Command_Cg controls
the coding of declare blocks in command windows. The set of
Command_Cg session switches is parallel in name and function to
the set of R1000_Cg library switches, which control the coding of
Ada units.
7.15. Archive Changes
7.15.1. Specification of Objects to Be Archived
The Archive.Restore command now accepts an indirect file of
object names.
Archive.Copy will no longer allow you to copy an object onto
itself; that is, the following combination of parameters is
prohibited: Archive.Copy ("local_name", "*", "*");
Archive will no longer copy a subsystem onto an existing
subsystem unless the Replace option is specified. Overwriting an
existing subsystem can cause inconsistencies among the CMVC
database, views, and import relationships.
Although you are not prevented from doing so, it is recommended
that you not copy a view onto another view. Doing so overwrites
not only user-defined objects, but view state as well. In
particular, this may mean that information may be lost about the
referencers of the overwritten view. To copy just the
user-defined objects in a view, use a suitable naming expression,
such as "view_name.units".
48 September 1990 R\f
D_12_1_1 Release
7.15.2. Assignment of Access Control to Restored Objects
Restore operations (such as the Archive.Restore command and the
restore portion of the Archive.Copy command) now assign the ACLs
of restored objects differently. In previous releases, the
default was to assign each restored object its original ACL (the
ACL with which the object was saved). In D_12_1_1, the default is
to assign ACLs as follows:
* Objects restored into views always inherit their ACLs from the
context into which they are restored. This preserves the ACLs
that are assigned by CMVC access control. Furthermore, whole
views and subsystems are restored with their CMVC access-class
assignments.
* Objects restored outside subsystems keep the ACLs with which
they were saved, unless they overwrite existing objects. In
this case, the restored objects are given the ACLs of the
objects they overwrite.
For objects restored outside subsystems, you can override the
default ACL assignment with the Object_Acl, World_Acl, and
Default_Acl options. As in previous releases, you can use these
options to specify the new (default) ACL to be assigned, or you
can specify the literal values Archived, Inherit, or (new in
D_12_1_1) Retain:
* The Archived value assigns each restored object the ACL with
which it was saved, regardless of whether it overwrites an
existing object.
* The Inherit value causes each restored object to inherit its
ACL from the context into which it is restored (this is the
default - and only - behavior for objects restored into
views).
* The Retain value causes each restored object to keep the ACL
with which it was saved, unless it overwrites an existing
object. In this case, the restored object is given the ACL of
the object it overwrites (this is the default behavior for
objects restored outside views).
Under certain circumstances, a restore operation now sets an
object's ACL immediately after the object is restored, instead of
waiting until the end of the operation. Specifically, an object's
ACL is set immediately only if it provides sufficient access for
the archive job to complete successfully. Otherwise, the ACL is
set after the archive job has completed what it needs to do.
7.15.3. Specification of Tape-Drive Devices
As is explained in section 2, certain R1000s can be upgraded to
have two tape drives. Accordingly, you can now specify a naming
expression for the Device parameter in the Save, List, and
R September 1990 49\f
Rational Environment Release Information
Restore commands in order to indicate which tape drive the
operator should use. In previous releases, only the special
default value "MACHINE.DEVICES.TAPE_0" could be used to initiate
a tape-mount request; any other string was interpreted as a
library name. Now, however, you can replace the default value
with a fully qualified pathname to reference a specific tape
drive. (A fully qualified naming expression begins with !; in
contrast, the default special string value omits the !.)
For example, assume that your R1000 has two tape drives with
logical numbers 0 and 3. To request that the operator use tape
drive 3, you can specify the Device parameter with the fully
qualified name "!Machine.Devices.Tape_3". The resulting
tape-mount request will then contain the following message field:
Additional Info => Use tape drive 3
Note that this message field merely displays a suggestion to the
operator; the tape drive that is actually used is determined by
the operator's response to the remainder of the tape-mount
request.
As in previous Environment releases, the default string value
causes a tape-mount request to be displayed with no special
instructions to the operator. Any naming expression that does not
reference a tape drive will be interpreted as a library name. See
also sections 7.19.4 and 7.20 for other information pertaining to
R1000s with two tape drives.
7.15.4. Specification of Remote Devices
The Device parameter in the Save, List, and Restore commands can
now be used to specify a remote device - that is, a library or a
tape drive on another R1000. For example, assume you are logged
into an R1000 called M_1, which is the machine onto which objects
are to be restored. Assume further that the tape drive you want
to use is on an R1000 called M_2, which is connected to M_1
through the network. Then you can use the following Device
parameter to specify the default drive on M_2:
Device => "!!M_2!Machine.Devices.Tape_0"
Whereas the device is read on M_2, the data is sent through the
network and restored on M_1. Note that if you insert the remote
R1000 name in front of the default Device value
(MACHINE.DEVICES.TAPE_0), you must also insert an exclamation
mark (!) between the R1000 name and that value.
You can also save objects to devices on other machines. For
example, assume you are entering the Save command on M_1 to save
objects that reside on that machine. Then the following Device
parameter causes the Data and Index files to be saved in a
directory on M_2:
50 September 1990 R\f
D_12_1_1 Release
Device => "!!M_2!Some_Directory
7.15.5. Archive Options
The Options parameter in various Archive commands accepts new
options:
* Delta1
A Boolean option for the Archive.Save command. When True,
writes a tape that can be restored on an R1000 that is still
running the D_10_20_0 release of the Environment. Setting this
option to True is necessary only if the tape will contain
loaded main programs or code views. Because Environment
releases are upward-compatible, a tape made with the option
can also be restored on R1000s with later Environment
releases.
* Enable_Privileges
A Boolean option for the Archive.Copy command. When True,
causes the copy operation to attempt to enable privileges.
Enabling privileges allows the command to override access
control when reading and creating objects. Privileges can be
enabled only if the copying username belongs to the predefined
group called Privileged.
Note that this option enables privileges for all of the
identities associated with the command, including the
identities of any archive servers that are invoked on other
machines. In contrast, entering the Operator.Enable_Privileges
command enables privileges only for the initiating username on
the current machine.
* Links[=worlds]
An option for the Archive.Copy, Archive.Restore, or
Archive.Save command; specifies that the command is to copy
only the links for each of the specified worlds, without
copying the worlds themselves. Copying with the Links option
is a more powerful alternative to using the Links.Copy
command, which copies links among worlds on the same R1000. In
contrast, copying with the Links option allows you to copy
links between R1000s.
If the option name is specified by itself (that is, if the
worlds portion of the option is omitted), then the command
copies the links of all worlds specified by the Objects
parameter. An error is generated if the Objects parameter
specifies no worlds. To copy other objects along with the
links from one or more worlds, you can specify the world names
as the value to the Links option.
* Require_Parents
R September 1990 51\f
Rational Environment Release Information
A Boolean option for the Archive.Copy or Archive.Restore
command. When True, prevents objects from being copied unless
the required destination context already exists. This option
overrides the default command behavior, which is to create any
missing hierarchical structure (for example, nested libraries)
that is required to copy the objects under the desired names.
* Uncontrol
A Boolean option for the Archive.Copy or Archive.Restore
command. When True, permits controlled objects to be
overwritten by making them uncontrolled in the destination
view for the duration of the copy operation. (The overwritten
objects are automatically made controlled again at the end of
the operation.) This option has no effect unless the Replace
option is also specified.
Specifying the Uncontrol option guarantees that controlled
objects are overwritten. However, making the objects
uncontrolled severs them from the objects to which they are
joined. Furthermore, when these objects are recontrolled, they
are given new reservation tokens, so that their change history
is effectively lost. Note that when the Replace option is used
without the Uncontrol option, an attempt is made to check out
the objects in question, thereby preventing loss of history.
The Uncontrol option is subject to CMVC access control.
* Volume=volume id
An option for the Archive.Copy or Archive.Restore command;
specifies the disk volume on which to create destination
worlds. Each disk volume is identified by an integer between 1
and 31; for example, a four-disk system has disks 1, 2, 3, and
4. Omitting this option is equivalent to specifying the value
0, which instructs the operation to pick the disk volume with
the most free space.
7.15.6. CMVC Access Required by Archive Commands
Restore operations now check CMVC access when restoring a
subsystem or view:
* To restore a view into an existing subsystem, the identity of
the restore job (or the archive server job) must belong to a
group that has Owner access for the subsystem into which the
view is restored. (The Owner access class is defined in the
new package Cmvc_Access_Control.)
* To restore a subsystem into a world, the identity of the
restore or archive server job must belong to a single group
that has RCOD access to the world in which the subsystem is to
be restored as well as RW default access to this world.
52 September 1990 R\f
D_12_1_1 Release
The Archive.Save and Archive.Copy commands now check CMVC access
when saving and copying subsystems and views.
* To save a view, the identity of the archive job must belong to
a group that has Reader access to that view.
* To save/copy a subsystem and the views in it, the identity of
the archive job must belong to a group that has Reader access
to the subsystem and to each of the views to be archived.
7.15.7. Archiving Code Views and Loaded Main Programs
If you need to transfer code views or loaded main programs from
the D_12_1_1 Environment to a machine running the D_10_20_0
Environment, you can do so only if you have created them under
special switch settings. This is due to the program-library
mechanism (see section 7.14.4).
Furthermore, if you are archiving using Archive.Save, you must
specify the Delta1 option in the command's Options parameter,
although this option is not required for Archive.Copy. Note that
special steps are required for code views and loaded main
programs because archiving them involves transferring code
segments. In contrast, archiving ordinary compiled Ada units
involves transferring them as source and then optionally
recompiling them on the destination R1000.
The following steps show how to create and save a code view (or a
loaded main program) in a D_12_1_1 Environment so that you can
restore it in either a D_10_20_0 or a D_12_1_1 Environment:
1. Set both of the following switches to True for the appropriate
libraries:
* R1000_Cg.Delta1_Code_View_Compatibility := True
R1000_Cg.Retain_Delta1_Compatibility := True
When a code view is created, these switches must be set in the
load view from which the code view is to be created. When a
loaded main program is created, the first switch must be set
for the library that is to contain the loaded main program;
the second switch must be set for the library containing the
main subprogram as well as for the library that is to contain
the loaded main program (these may, but need not, be different
libraries).
2. Create the desired code view (or load the main program).
3. Enter the Archive.Save command with the Delta1 option:
Archive.Save (Objects => loaded_mains_or_code_views,
Options => "Delta1, R1000");
R September 1990 53\f
Rational Environment Release Information
If you omit the Delta1 option from the Archive.Save command, a
Nonexistent_Page_Error exception is raised when you attempt
the restore operation on a D_10_20_0 machine.
To copy a code view or a loaded main program from a D_12_1_1
Environment to a D_10_20_0 Environment, follow steps 1 and 2
above and enter the Archive.Copy command without the Delta1
option:
Archive.Copy (Objects => loaded_mains_or_code_views);
No extra switch settings or archive options are required for
archiving code views and loaded main programs from a D_10_20_0
Environment to a D_12_1_1 Environment; the copied objects are
treated as if they were compiled with both of the above switches
set to False. See also sections 7.14.8 and 7.21.2.
7.15.8. Miscellaneous Archive Changes
Copied objects that were frozen at their source are now refrozen
at their destination. In D_10_20_0, objects that were frozen in a
primary subsystem were restored as frozen in a secondary only if
the Promote option was also specified. Now there is no need to
give the Promote option for this purpose.
7.16. Changes to !Io.Text_Io
The Text_Io.Open command has been changed to conform to the LRM
spec. In particular, the Mode parameter for this command now has
no default value, so the command now has the following
specification:
procedure Open (File : in out File_Type;
Mode : File_Mode;
Name : String;
Form : String := "");
Commands in package Text_Io can now be used to open and read
switch files, activities, work orders, work-order lists, and
ventures as if they were text files. This is equivalent to using
Display-type commands (such as Switches.Display) to produce a
textual image of such objects. Such textual images are useful
because you can perform operations like File_Utilities.Difference
on them.
7.17. System-Management Changes
See sections 7.19 and 7.20 for changes pertaining to system
backups and other tape interfaces.
54 September 1990 R\f
D_12_1_1 Release
7.17.1. Expiration of Operator Password
Special accommodation is now made for Operators who did not
change their passwords before the old passwords expired. If the
Operator tries to log in with an expired password (and no current
password exists), a message to this effect is displayed and a
login prompt appears requesting an authorization code. The
Operator can obtain a unique authorization code from the Rational
Response Center and enter this code at the appropriate prompt.
Note that:
* The Operator must know the old, expired password.
* The authorization code is valid only for a specific machine on
the current date.
* The authorization code is case-sensitive (all uppercase).
Note that it may also be possible for the Operator to simply log
in as another user and use the Operator.Change_Password command
to set a new password. However, the above login process is the
only solution if all user passwords have expired.
7.17.2. Mechanism for Summarizing Logged Tape Errors
Package !Tools.System_Availability'Spec_View.Units.System_Report
has been enhanced so that the System_Report.Generate procedure
can now summarize the number of tape errors that have been logged
to the system error log over the specified period of time. The
summary of logged tape errors is displayed when you specify the
value System_Report.Tape_Mounts for the Report_Type parameter.
You can use the summarized tape-error information to evaluate the
quality of 9-track tapes on which important information has been
recorded. For example, you can execute this procedure after
performing an archive on a 9-track tape drive to determine the
likelihood of restoring the archive. Note that this tool is
inappropriate for evaluating the quality of 8-mm cartridge tapes
because the kinds of errors that this tool summarizes are not
logged by 8-mm cartridge tape drives.
Although this command can be used to evaluate quality of the
tapes used for a backup, it is recommended that you use the new
Verify_Backup command to determine whether a backup can actually
be restored. See section 6.11.
Each time a tape is written or read, tape errors are logged to a
system error log file in !Machine.Error_Logs. Among these tape
errors, two types are of particular interest:
* Read-data retry errors are logged when a read operation fails
to read a given block and has to repeat the attempt. Note that
a read operation is aborted on the thirteenth consecutive
retry error. Thus, twelve such errors are logged before a read
operation fails.
R September 1990 55\f
Rational Environment Release Information
* Write-data retry errors are logged whenever a write operation
cannot write a given block and has to traverse to another
block to repeat the attempt. Note that a write operation is
aborted on the thirteenth consecutive write-data retry error.
Thus, twelve such errors are actually logged before a write
operation fails.
The System_Report.Generate procedure scans the appropriate files
in !Machine.Error_Logs and summarizes the logged errors on a
per-operation basis. The summarized information is reported in a
display such as the following, where each entry represents a
single read or write operation (the columns are explained below).
In this example, the tape operation on volume 043506 has had
enough errors to indicate a significant problem, whereas the tape
operation on volume 043509 has actually failed:
Request Time Mount Wait Processing Volume Density Errors
============== ========== ========== ====== =========== =========
90/01/13 08:30 00:07 00:26 043500 GCR_6250CPI 143
90/01/13 09:02 00:26 00:07 043501 GCR_6250CPI 1
90/01/13 09:35 01:05 00:39 043502 GCR_6250CPI 216
90/01/13 11:19 00:20 00:07 043503 GCR_6250CPI 5
90/01/13 11:46 00:27 00:25 043504 GCR_6250CPI 3
90/01/13 12:38 00:26 00:07 043505 GCR_6250CPI
3 / 3 / 13
90/01/13 13:11 00:10 00:19 043506 GCR_6250CPI
10 / 25 / 136
90/01/13 13:40 00:05 00:36 043507 GCR_6250CPI
1 / 2 /168
90/01/13 14:21 00:08 00:19 043508 GCR_6250CPI 69
90/01/13 14:48 00:29 00:07 043509 GCR_6250CPI
12 / 162 / 400
* Request Time indicates the time at which the mount request for
the operation was issued.
* Mount Wait indicates how long the operator took to answer the
mount request.
* Processing indicates how long it took to read or write the
tape.
* Volume indicates the tape label.
* Density indicates the density with which the tape was written
(for 9-track tapes only).
56 September 1990 R\f
D_12_1_1 Release
* Errors displays several types of error data. If this column
contains only one number, that number represents the total
number of errors logged for the operation. If this column
contains a triple number, the leftmost number is the maximum
number of consecutive retry errors encountered, the middle
number is the total number of retry errors in the operation,
and the rightmost number is the total number of errors of any
kind.
As a rule of thumb, information recorded on a 9-track tape is
reliable if the tape has 5 (or fewer) consecutive retry errors,
25 (or fewer) total retry errors, and 100 (or fewer) total errors
(that is, 5 / 25 / 100). If a backup tape has greater numbers of
errors in these categories, it is recommended that you consult
the Rational Customer Support Response Center.
7.17.3. Changes Pertaining to Operator Capability
Operator capability is no longer required for report-producing
operations from packages System_Backup and Scheduler. These
commands are System_Backup.History, Scheduler.Display,
Scheduler.Set_Wsl_Limits, Scheduler.Use_Default_Wsl_Limits, and
Scheduler.Working_Set_Size.
The Operator.Force_Logoff command no longer requires operator
capability if the user performing the operation is the same as
the user being forced off.
Commands in package Operator that require operator capability and
that affect machine state now report successful completion in
!Machine.Error_Logs.Log@. The logged messages also report the
executing user and session, if these are other than System.
7.17.4. Changes Pertaining to Login Limits
The number of permitted concurrent logins (sessions) for each
Series 300S and 300C is set at the factory. If a user attempts to
log in after the maximum number has been reached, the following
message will appear:
Login denied - resource restriction
An existing session will have to be logged out before that user
can log in.
7.17.5. Changes Pertaining to EEDB
The special character $ can now be used as an argument to EEDB
commands to reference the currently running release.
Furthermore, the special character $$ can now be used to
reference the successor to the default configuration. The
R September 1990 57\f
Rational Environment Release Information
successor name is constructed from the default by appending or
incrementing the trailing letter. The sequence of successors
would be D_11_0_2 => D_11_0_2A => ... => D_11_0_2Z => D_11_0_2ZA
...
EEDB now recognizes the abbreviations CDF, EM, UDF, and DTIA as
representing the appropriate subsystems.
7.17.6. Miscellaneous System-Management Changes
The Operator.Change_Password command now requires the new
password to be different from the old password. That is, users
are not permitted to make trivial changes.
The Operator.Force_Logoff command now allows enough time to
commit large buffers before logging off.
The Operator.Shutdown command has been made more robust.
Package Daemon was changed to make the DDB object manager a
Weekly client rather than a Daily client.
The "hard-wired" default collection thresholds have been changed.
The hard-wired defaults are the values that are in effect if no
collection thresholds are specified in the
!Machine.Initialize_Daemons procedure. These new default values
are given in Table 6. Note that the !Machine.Initialize_Daemons
procedure will automatically adjust the hard-wired values so that
smaller values are set for systems with large-capacity disk
drives and larger values are set for the Series 200 Model 10 with
337-megabyte disk drives. Customers should not change the values
assigned by the !Machine.Initialize procedure unless advised to
do so by Rational personnel.
Table 6 Default Values for Collection Thresholds
---------------------
| | |
|Threshold | Default |
| | Value |
---------------------
| | |
|Start_ | 15 |
|Collection| |
---------------------
| | |
|Raise_ | 10 |
|Priority | |
---------------------
| | |
|Stop_Jobs | 7 |
---------------------
58 September 1990 R\f
D_12_1_1 Release
Table 6 Default Values for Collection Thresholds (cont.)
---------------------
| | |
|Threshold | Default |
| | Value |
---------------------
| | |
|Suspend_ | 5 |
|System | |
---------------------
!Machine.Initialize_Daemons now starts a new server called
Smooth_Snapshots, which reduces the impact of snapshots,
especially on machines with the 64-megabyte memory-expansion
upgrade. The default parameter values are used for the
Smooth_Snapshots procedure; these values should never be changed
by customers.
When you execute the Tape.Examine_Labels command with the
Volume_Labels_Only parameter set to False, a diagnostic message
now appears in the current output whenever the command detects an
inconsistency within a data segment on an ANSI-standard labeled
tape. The message attempts to explain the inconsistency. Prior to
this release, the command would fail with an unhandled exception.
When the command is executed with Volume_Labels_Only set to True,
it no longer raises Constraint_Error when trying to unload the
tape.
Functions in System_Utilities now interpret the null string to
mean any of a user's sessions instead of just the user's default
session. For example, the command System_Utilities.Logged_In
("Fred","") returns True if Fred is logged in under any session.
Similarly, the command System_Utilities.Last_Logout ("Fred","")
returns the last time Fred logged out of any session.
The Environment now initiates its own recovery in situations
where Library.Compact_Library has accidentally been run on worlds
such as !Machine.Users and !Users. Rebooting the system is no
longer necessary.
7.18. Changes Pertaining to Printing
You can now specify files as devices for commands in package
Queue. When a file is specified, the output characters are
written to that file (rather than to a printer, for example).
7.18.1. !Commands.Abbreviations.Print
The !Commands.Abbreviations.Print command now has additional
parameters. The Class parameter specifies a file denoting the
class. The Trace_Only parameter, when True, displays the
R September 1990 59\f
Rational Environment Release Information
Queue.Print command that is generated without actually executing
it. (This allows you to review the print options that will be
used before the command actually executes.)
procedure Print (Name : String := "<IMAGE>";
Options : String := "";
Banner : String := "<DEFAULT>";
Header : String := "<DEFAULT>";
Footer : String := "<DEFAULT>";
Class : String :=
"!Machine.Lp_Class";
Trace_Only : Boolean := False);
7.18.2. Queue.Print
Bug fixes were made to the Queue.Print command so that the
following combination of Twoup and Wide options works properly
for American standard-sized paper:
Options => "Postscript => (Twoup, Wide)"
The Banner page of a printout now has rows of asterisks at top
and bottom, making it easier to distinguish from other printout
pages.
The PostScript header page is now printed either first or last,
depending on the value of the Reversed option. When Reversed is
True, the header page is the last page printed. When Reversed is
False, the header page is the first page printed. Prior to this
release of the Environment, the PostScript header page was always
printed last.
Bug fixes were made so that long filenames no longer overlap the
page number in the heading, even when Ada units are printed using
the Fancy option under PostScript processing.
Bug fixes were made so that long Ada units can be printed without
incurring storage/allocation errors.
7.19. System Backup Changes
The specifications for the various backup commands remain as they
are in D_10_20_0, so operators will continue to initiate backups
the same way. However, the implementation of these commands has
been enhanced in the present release. In particular, the
procedure !Commands.Abbreviations.Do_Backup has been enhanced to
take advantage of the new generic procedure
!Commands.System_Backup.Backup_Generic (see section 6.10).
Furthermore, all backup commands (both in !Commands.Abbreviations
and in !Commands.System_Backup) have been enhanced to take
backups on the 8-mm cartridge tape drive as well as on the
9-track tape drive.
60 September 1990 R\f
D_12_1_1 Release
7.19.1. Improved Do_Backup Implementation
The procedure !Commands.Abbreviations.Do_Backup has been enhanced
to take advantage of the new generic procedure
!Commands.System_Backup.Backup_Generic (see section 6.10). This
enhancement affects the other backup commands in
!Commands.Abbreviations, which call Do_Backup - namely,
Full_Backup, Primary_Backup, and Secondary_Backup.
As in previous Environment releases, the Do_Backup procedure
starts the specified kind of backup at the specified time,
adjusting certain system settings for the duration of the backup.
In D_12_1_1, Do_Backup'Body now adjusts these system settings by
instantiating the formal procedures that are associated with
!Commands.System_Backup.Backup_Generic. These formal procedures
are instantiated as follows:
* The Backup_Starting formal procedure, which executes as the
backup begins, broadcasts a message announcing the backup to
all users, saves the current memory scheduler and snapshot
settings, and turns off memory scheduling and snapshot
warnings.
* The Backup_Finishing formal procedure, which executes as the
backup ends, restores memory scheduling and snapshots using
the saved settings.
The system manager can edit Do_Backup'Body to further customize
system settings for the duration of backups. Section 6.10
presents several possible customizations.
Note that all backup procedures now display progress messages in
the current output window to indicate when the backup starts and
finishes each disk volume.
7.19.2. Support for 8-Millimeter Cartridge Tape Drive
All backup operations (both in !Commands.Abbreviations and in
!Commands.System_Backup) have been enhanced to take backups on
the 8-mm cartridge tape drive as well as on the 9-track tape
drive. Each backup taken on the 8-mm cartridge tape drive
requires only a single tape cartridge, in contrast to the
multiple tape reels required for backups taken on a 9-track tape
drive. Consequently, the 8-mm cartridge tape drive permits
unattended backups because the operator can leave after entering
the Do_Backup command and mounting the tape. Unattended backups
also take significantly less time because the time spent changing
tapes is eliminated. For example, a backup that takes 8 hours to
complete on a 9-track tape drive may take as little as 4 hours on
an 8-mm cartridge tape drive.
When the 8-mm cartridge tape drive is used, slight differences
appear in the backup tape-mount request. In particular, the
tape-mount request does not prompt for a separate "blue tape";
R September 1990 61\f
Rational Environment Release Information
instead, a backup index is written immediately following the data
on the same 8-mm cartridge tape. Section 7.20 describes the
effect of the 8-mm cartridge tape drive on Environment tape
interfaces other than backups.
7.19.3. Guidelines for Choosing Tape Size
To ensure unattended backups when using the 8-mm cartridge tape
drive, it is recommended that you choose a single tape large
enough to hold the entire backup. Guidelines for choosing the
appropriate tape size are given in Table 7. To use this table,
you need to know the total number of disk blocks that are used on
your machine. You can obtain this information using the
Operator.Disk_Space command. Note that a tape larger than the
minimum can always be used.
Tape sizes are given in several ways, depending on the brand of
tape. EXABYTE tapes are identified by their length in meters.
Sony tapes are identified by their cartridge type, which
correlates to minutes of playing time (for example, P6-15MP and
P5-15MP indicate 15-minute tapes). P6 mode tapes, which are used
in the United States, have a smaller capacity in megabytes than
P5 mode tapes, which are used (at least) in Europe. Both P5 and
P6 tapes are listed in the table.
Table 7 Minimum 8-mm Cartridge Tape Size for Full Backups
----------------------------------------
| | |
|Total Number| |
|of |Recommended Minimum Tape |
|Disk Blocks |Size |
|Used | |
----------------------------------------
| | |
| 0-235,500|Sony P6-15MP Video 8 |
| |Sony P5-15MP Video 8 |
| |EXABYTE 8MM Data Cartridge |
| |15 m |
----------------------------------------
| | |
|235,501-471,|Sony P6-30MP Video 8 |
| 500|Sony P5-30MP Video 8 |
| |EXABYTE 8MM Data Cartridge |
| |54 m |
----------------------------------------
| | |
|471,501-943,|Sony P6-60MP Video 8 |
| 500|Sony P5-60MP Video 8 |
| |EXABYTE 8MM Data Cartridge |
| |54 m |
----------------------------------------
62 September 1990 R\f
D_12_1_1 Release
Table 7 Minimum 8-mm Cartridge Tape Size for Full Backups (cont)
----------------------------------------
| | |
|Total Number| |
|of |Recommended Minimum Tape |
|Disk Blocks |Size |
|Used | |
----------------------------------------
| | |
| 943,501-1,|Sony P6-90MP Video 8 |
| 415,000|Sony P5-60MP Video 8 |
| |EXABYTE 8MM Data Cartridge |
| |112 m |
----------------------------------------
| | |
|1,415,001-1,|Sony P6-120MP Video 8 |
| 887,000|Sony P5-90MP Video 8 |
| |EXABYTE 8MM Data Cartridge |
| |112 m |
----------------------------------------
| | |
|1,887,001 or|May require multiple |
| greater|cartridges for backup |
----------------------------------------
As the table indicates, machines with greater than 1,887,001 used
disk blocks may require multiple tapes for backups. However,
because the estimates in the table are conservative, it may in
fact be possible to put an entire backup for such a machine on a
single 120-minute (or 112-meter) tape.
As an example, assume that Operator.Disk_Space produces the
following display:
Volume Capacity Available Used % Free
====== ======== ========= ======= ======
1 625482 257433 368049 41
2 655776 255030 400746 38
3 655776 247569 408207 37
4 655776 220230 435546 33
Total 2592810 980262 1612548 37
This machine has a total of 1,612,548 used disk blocks.
Therefore, this machine requires a tape such as a Sony P6-120MP
tape for a single-tape backup.
7.19.4. Backups on Systems with Two Tape Drives
Series 200 and Series 300S machines can optionally have both a
9-track tape drive and an 8-mm cartridge tape drive. When two
kinds of tape drive are available on a single machine, the system
R September 1990 63\f
Rational Environment Release Information
manager must decide which tape drive to use for system backups.
It is important to make this decision early for two reasons:
* It is recommended that the tape drive used for backups should
be made the default tape drive (drive number 0). Doing so
simplifies the operator's response to the backup tape-mount
request, so that only a carriage return is needed for the On
which drive? prompt. (See section 7.20.4.)
* Incremental backups (primary and secondary) must be made on
the same kind of tape drive as the full backup on which they
are based. Full and incremental backups made on different
kinds of tape drive are incompatible and cannot be restored
together. Thus, if you make a full backup on an 8-mm cartridge
tape drive, you must make all subsequent primary backups on
that tape drive. If you want to switch to the 9-track tape
drive, you must start by taking a full backup on that drive.
7.19.5. Restoring Backups
As in previous releases of the Environment, backups that are
taken on 9-track tape drives use multiple tapes - the data is
written on at least one tape and the backup index is written on
an additional, separate tape. (In previous Environment releases,
this additional tape was called the "blue tape"; it is now
referred to as the backup index tape.) When a 9-track backup is
restored, the tape-mount request prompts you for the backup index
tape first. The tape-mount request then prompts you for the
remaining tapes in order.
Backups taken on 8-mm cartridge tape drives usually require only
a single tape, which contains both the data and the backup index,
in that order. During restoration, when you are prompted for a
backup index tape, you need mount only the sole tape cartridge.
The restoration operation skips through this tape until the
backup index is found. After reading the backup index, the
restoration operation automatically returns to the beginning of
the tape to read the data.
On very large systems, a backup taken on an 8-mm cartridge tape
drive may require multiple tapes. The backup operation writes to
these tapes as if they were logically a single tape - that is,
the backup index is written immediately following the data on the
last tape. Consequently, restoration of multitape backups is a
two-pass process. The tape-mount request first prompts you to
mount each tape in sequence so that the tapes can be skipped
through until the backup index is found. Then the tape-mount
request prompts you to mount the sequence again so that the tapes
can be read and the data restored.
During restoration on an 8-mm cartridge tape drive, progress
messages appear on the operations console. These messages report
when the backup index has been located and when it is being
processed; subsequent messages report when the backup data has
64 September 1990 R\f
D_12_1_1 Release
been located and when it is being processed.
Note that a new command called Verify_Backup is available for
determining whether backups are complete and restorable; see
section 6.11.
7.19.6. Bug Fixes Pertaining to Backup
The new implementation of Do_Backup corrects several bugs from
D_10_20_0. In particular, the time specified by the Starting_At
parameter is now absolute rather than relative to the time at
which the tape is mounted. Consequently, the actual backup now
begins at the Starting_At time no matter when the tape is mounted
(as long as it is mounted before the backup is scheduled to
start).
Furthermore, because of the new Backup_Starting formal procedure,
the message announcing the backup is now displayed when the
actual backup begins rather than when the Do_Backup command is
executed.
Another important bug fix is that secondary backups now work
correctly. Secondary backups are based on primary backups, just
as primary backups are based on full backups. In previous
releases, secondary backups did not work properly.
7.20. General Tape-Related Changes
All Environment tape interfaces (packages Tape, Archive,
System_Backup, and so on) now accommodate the 8-mm cartridge tape
drive in addition to the 9-track tape drive. (See section 7.19.2
for information specifically about backups taken on the 8-mm
cartridge tape drive.)
7.20.1. Default Tape Drive
Many prompts and commands require that you specify a tape drive
using its logical tape-drive number. The default value for these
prompts and commands is always drive number 0. Therefore, by
convention, the tape drive whose number is 0 is the default
drive.
When a machine has both an 8-mm cartridge tape drive and a
9-track tape drive, the system manager must decide which drive is
to serve as the default. The default drive is then assigned drive
number 0, and the remaining drive can be assigned a drive number
from 1 through 3. The default drive should be the tape drive that
will be used for system backups.
Logical tape-drive numbers are assigned using the IOP ENVIRONMENT
menu during the boot process. The initial assignments are usually
set by Rational technical representatives, although system
R September 1990 65\f
Rational Environment Release Information
managers can change the assignments during subsequent system boot
processes. System managers who want to do this should contact
their Rational technical representatives for assistance.
7.20.2. Specifying a Tape Drive through Various Commands
Several commands in package Tape have a Drive parameter through
which the user may specify the tape-drive number for the desired
drive. On machines with only one tape drive, the value 0 is the
only meaningful value for this parameter; on machines with two
drives, you can specify any number that has been assigned to a
drive.
For Tape commands that do not have a Drive parameter (such as
Tape.Read and Tape.Write), you can use the To_Operator parameter
to send the operator a request for a particular tape drive. The
string that you enter is displayed in the Additional Info =>
field of the tape-mount request. However, this message field
merely serves as a suggestion to the operator; the tape drive
that is actually used is determined by the operator's response to
the remainder of the tape-mount request.
As described in section 7.15.3, several commands in package
Archive have a Device parameter through which the user may
specify where to read or write the archive's Data and Index
files. On machines with two tape drives, you can now specify the
Device parameter with a fully qualified naming expression (such
as "!Machine.Devices.Tape_3") to request that the operator use a
particular tape drive. However, such a naming expression merely
serves to display special instructions in the Additional Info =>
field of the tape-mount request; the tape drive that is actually
used is determined by the operator's response to the remainder of
the tape-mount request.
7.20.3. User-Written Applications
User-written applications written against Device_Independent_Io
must open specific devices for reading or writing. When such
applications are to perform tape operations, they must be passed
naming expressions that reference a particular tape drive by its
logical number. For example, the name "!Machine.Devices.Tape_0"
references the default tape drive; the name
"!Machine.Devices.Tape_3" references tape drive number 3. The
subsequent tape-mount request displays a message indicating that
the specified tape drive must be used; you cannot specify a
different tape drive during the tape-mount request.
In contrast, applications written against Tape_Tools do not
require names that reference specific tape drives. Instead, the
drive to be used is specified during the tape-mount request.
When writing tape-related applications, bear in mind that tape
marks written on 8-mm cartridge tapes occupy much more space than
66 September 1990 R\f
D_12_1_1 Release
tape marks written on 9-track tapes. In particular, each tape
mark written on an 8-mm cartridge tape occupies 2 megabytes of
space. Thus, when an application writes tape marks between files,
writing a large number of small files can easily exhaust the
space on a single tape.
7.20.4. Tape-Mount Requests
A number of commands initiate a tape-mount request on the
operations console. Such commands include commands from package
Tape, commands from package Archive, the various backup commands,
and user applications written against Device_Independent_Io and
Tape_Tools. When such commands are entered on an R1000 with two
tape drives, the initiated tape-mount requests differ slightly
from those initiated from a single-drive machine. Certain prompts
and fields appear only when machines have two tape drives.
In particular, the tape-mount request initiated from a two-drive
machine displays the On which drive? prompt, which asks the
operator to specify the logical number of the tape drive on which
the tape operation is to take place. Note that if a particular
tape drive has been specified to a Tape or Archive command, the
request for that drive will appear in the Additional Info =>
field; the operator may, but need not, specify the requested
drive at the On which drive? prompt. This prompt does not appear
on machines with only one tape drive.
Similarly, the tape-mount verification following a two-drive
tape-mount request displays the Kind of Drive field along with
the label information for the mounted tape. The kind of drive is
given as 8MM for 8-mm cartridge tape drives and 9_TRACK for
9-track tape drives.
For example, assume that a Series 200 has been upgraded so that
it has an 8-mm cartridge tape drive as well as a 9-track tape
drive, and that the 8-mm cartridge tape drive is tape drive 0
(the default) and the 9-track tape drive is tape drive 3. The
following is a tape-mount request and subsequent verification in
which the default 8-mm tape drive is specified:
Please Load Tape
(Kind of Tape => CHAINED_ANSI,
Direction => WRITING,
Volume Set Name => BACKUP, 07-NOV-89 16:47:23 3)
Is Tape mounted and ready to read labels? yes
On which drive? [ 0]
Info on mounted tape is
(Kind of Drive => 8MM,
Kind of Tape => UNLABELED_TAPE,
Writeable => TRUE)
OK to overwrite volume? [YES]
R September 1990 67\f
Rational Environment Release Information
What should the volume id handling mode be? [AUTO_GENERATE]
Volume id of tape is now: 007100
In contrast, the following tape-mount request and verification
show that the nondefault 9-track drive has been specified:
Please Load Tape
(Kind of Tape => CHAINED_ANSI,
Direction => WRITING,
Volume Set Name => BACKUP, 07-NOV-89 16:47:23 3)
Is Tape mounted and ready to read labels? yes
On which drive? [ 0] 3
Info on mounted tape is
(Kind of Drive => 9_TRACK,
Kind of Tape => UNLABELED_TAPE,
Writeable => TRUE)
OK to overwrite volume? [YES]
What should the volume id handling mode be? [AUTO_GENERATE]
Volume id of tape is now: 007100
7.20.5. Tape-Related Messages in the Error Log
In !Machine.Error_Logs.Log@, log entries pertaining to tape
operations now reflect the type of drive. When the type of drive
is 9 track, the entry also reports the density. Following are
examples of messages reporting each kind of tape drive and
density:
13:34:33 --- Tape_Handling Tape_Mounted Volume_Id=TEST1 ,
Type_Of_Drive=9Track, Density=PE_1600CPI
13:34:33 --- Tape_Handling Tape_Mounted Volume_Id=TEST2 ,
Type_Of_Drive=9Track, Density=GCR_6250CPI
12:37:05 --- Tape_Handling Tape_Mounted Volume_Id=012601,
Type_Of_Drive=8mm
7.20.6. DFS Backup
Backups of the Diagnostic File System (DFS) can be made on the
8-mm cartridge tape drive. If the DFS backup is to be made on a
tape drive other than the default drive 0, the nondefault drive
number must be specified. For example, to specify drive number 3,
append /unit=3 to the backup command:
CLI> backup/unit=3
68 September 1990 R\f
D_12_1_1 Release
Omitting the drive number causes the DFS backup to be taken on
drive 0.
7.21. CMVC Changes
Worlds can no longer be created within a subsystem or view.
Commands from package Links can no longer be used to add
individual links to a view (you must use CMVC import operations
instead).
7.21.1. Activities
As before, the Common.Edit command brings up a command window
containing the Activity.Change command. Now, however, the prompts
for this command supply as default values the names of the spec
view and load view from the entry containing the cursor.
Similarly, when the Common.Object.Insert command brings up the
Activity.Insert command, the prompts for this command now supply
the names of the subsystem, spec view, and load view from the
entry you have selected.
The context characters $, $$, and ^ can now be used in parameter
values for commands in package Activity (such as Activity.Insert,
Activity.Change, and so on).
7.21.2. Code Views
Because of a new underlying mechanism called program library,
code views can now be debugged using the full capabilities of the
Rational debugger, provided that the original Ada units still
exist in the same location and have not been recompiled since the
code view was created. Furthermore, code views now consume less
disk space and are about five times faster to create.
By default, code views no longer contain a code database because
the function of this database has been replaced by the
program-library mechanism. If you need to create code views that
can be copied to machines running the D_10_20_0 Environment, you
can set both of the following switches to True for the load views
from which the code views are to be created:
R1000_Cg.Delta1_Code_View_Compatibility := True
R1000_Cg.Retain_Delta1_Compatibility := True
Setting these switches to True causes code views to be created
with both a program library and a code database; such code views
can then be copied to and used on machines that have not yet been
upgraded from D_10_20_0.
R September 1990 69\f
Rational Environment Release Information
Code views now contain an empty file called
State.This_Is_A_Code_View. User-defined tools can check for this
file to determine whether a view is a code view. Before this
release, tools could check for the code database as an overt
indication of whether a view is a code view.
7.21.3. Commands from Package Cmvc
The Cmvc.Accept_Changes command now:
* Produces fewer warning messages. In particular, it does not
produce warnings regarding uncontrollable objects (these
include objects in the State directory, stubs, and associated
files).
* Handles the deletion of associated files without failing.
(Associated files are associated with cross-target compilation
and appear enclosed in angle brackets in a library - for
example, <name>.)
The Cmvc.Build command is now able to preserve a view's subclass
when rebuilding a view from a configuration object. In
particular, a configuration object that was originally made from
a combined view will now be rebuilt as a combined view.
Previously, such a view would have been rebuilt as a load view.
Bug fixes have been made so that each use of Cmvc.Check_In logs
checkin notes only once (rather than twice) in a work order.
If the Cmvc.Check_Out command fails because an object is already
checked out, a message is displayed reporting the view in which
the object is currently checked out.
The Cmvc.Destroy_View command now:
* Ensures that views are destroyed in the correct order. If the
Destroy_Configuration_Also parameter is True, the command will
destroy a view whether or not a configuration exists for that
view in the CMVC database.
* Destroys RDF views without going through the RDF policy checks
that govern the demotion of units. Because destroying a view
involves demoting units, such policy checks could prevent you
from destroying the view. To avoid the policy checks, the
Cmvc.Destroy_View command essentially sets the policy portion
of the view's target key to R1000.
The Cmvc.Join command now permits you to specify a view for the
What_Object parameter. Specifying a view causes all of the
controlled objects in that view to be joined to their
counterparts (if any) in the view named by the To_Which_View
parameter.
The Cmvc.Make_Controlled command now:
70 September 1990 R\f
D_12_1_1 Release
* Does not allow stubs to be put under CMVC control. (Stubs are
new or withdrawn Ada units that have temporary names assigned
by the Environment; these temporary names begin with an
underscore (_) - for example, _Ada_8_.)
* Saves source for only four subclasses of files - namely, Text,
Postscript, Log, or Markup.
* Closes objects for editing before making them controlled.
* Makes an object's parents controlled recursively when the
object itself is made controlled. That is, not only the
immediate parent library is made controlled, but also its
parent library and so on, up to the view's Units directory.
The Cmvc.Remove_Unused_Imports command scans the with clauses of
each unit in a view to determine which imports are unused in that
view. Now, however, in spec views, this command no longer scans
any with clauses that occur after a pragma Private_Eyes_Only.
Such clauses do not need to be scanned because no links are
created for the units they reference.
The Cmvc.Replace_Model command now:
* Preserves the existing value of the Subsystem_Interface switch
in the view whose model is being replaced. This switch
determines whether a view is treated as a spec view or a load
view. Thus, you can now change the model in a spec view
without causing the view to be treated as a load view (and
thereby corrupted).
* Resolves link conflicts appropriately. That is, when you
replace a model, the new model may introduce links that
conflict with existing links created by imports. Such
conflicts are resolved in favor of the existing,
import-created links.
The Cmvc.Show command now shows whether or not source is being
saved in the CMVC database for the specified objects.
7.21.4. Imports
Operations that perform imports now create a file called
State.Imports_Image in each importing view. This file is a text
file that contains the names of all of the view's imports. The
file is updated each time the view's imports are changed.
The State.Imports_Image file provides a mechanism that makes it
possible to refresh the imports of released views. This, in turn,
makes it possible to copy releases to another host out of
sequence - that is, to copy a release before you have copied all
of the views it imports. Similarly, it is now possible to rebuild
views from their configuration objects before rebuilding their
imports. In either case, you can now copy or rebuild the
R September 1990 71\f
Rational Environment Release Information
imported views at your convenience and then use the Cmvc.Import
command to reestablish the original import relationships. Note
that you can consult the State.Imports_Image file to see which
imported views still need to be copied or rebuilt.
7.21.5. CDB Capability
Sites that develop applications on multiple hosts can now
exercise an optional special control over operations that affect
the compatibility databases (CDBs) of primary and secondary
subsystems. This special control, called CDB capability, can be
granted to one or more access-control groups that already have
Owner access to the subsystems in question (for a description of
Owner access, see the documentation for package
Cmvc_Access_Control.) Whereas Owner access is always required to
execute CDB-related commands, CDB capability provides an
additional control for sites that choose to use it.
To put CDB capability into effect, you must first create a file
called !Machine.Cdb_Capability. You can then grant CDB capability
to individual groups by granting them write access (W) to this
file. A group must have Owner access to a given subsystem and
write access to the !Machine.Cdb_Capability file to name the
subsystem in the Cmvc_Maintenance.Make_Primary,
Cmvc_Maintenance.Make_Secondary, or Cmvc_Maintenance.Destroy_Cdb
command. CDB capability also controls whether a group can use the
Primary and Revert_Cdb options in the Archive.Copy and
Archive.Restore commands.
7.21.6. Work Orders
Operations in package Work_Order now encode usernames in various
work-order fields so that these names will be displayed even if
the corresponding users have been deleted from the system. This
applies to notes, comments, and work-order status. Usernames in
the user field of a work order are not treated this way, so they
will be lost if the corresponding users are deleted.
7.22. Networking Changes
Changes were made in FTP to make it compatible with most UNIX FTP
implementations, which require that the interchange form of a
file contain a newline (CRLF) sequence at the end of the last
line. This newline is added in D_12_1_1. Without it (as in
D_10_20_0), UNIX-based tools cannot read a text file transferred
from an R1000 via FTP.
This FTP change affects transfers between R1000s running
different Environment releases. When a text file is transferred
using FTP and the Transfer_Type is Ftp.Ascii, Ftp.Ascii_Cc, or
Ftp.Ascii_Telnet:
72 September 1990 R\f
D_12_1_1 Release
* An empty line is added to the end of the file upon transfer
from an R1000 running D_12_1_1 to one running D_10_20_0.
* If the file ends with an empty line, that empty line is
removed from the end of the file upon transfer from an R1000
running D_10_20_0 to one running D_12_1_1.
To avoid the effects of the FTP change when transferring files
between R1000s running different releases, you can use
Archive.Copy or you can use FTP with Transfer_Type => Ftp.Image
or Ftp.Binary.
Package Transport_Name has been enhanced so that Host_Name
parameters accept strings that are host addresses in addition to
strings that are host names. Higher-level tools such as those in
packages Ftp, Archive, and Telnet also accept host addresses in
addition to host names. A host address can be either:
* An Internet address in decimal dotted notation (such as
"89.64.1.230"); such an address is taken to be an address in
the "TCP/IP" network
* An Ethernet address in hexadecimal dashed notation (such as
"08-00-14-40-AB-CD"); such an address is taken to be an
address in the "Ethernet" network.
Package Ftp now supports Ascii_Telnet mode. Ascii_Telnet mode is
the same as Ascii mode, with the following difference: in
Ascii_Telnet mode, the end of each page can be represented by the
transmitted sequence CR & LF & FF.
Bug fixes were made so that commands in packages Ftp or
Transfer_Generic no longer fail if they receive an FTP error 532
("need account for storing files") in response to a STOR or RETR
command. Instead, they now supply an account and try again. This
is particularly helpful when the FTP server is the VM Interface
Program for TCP/IP, running on an IBM machine.
7.23. Miscellaneous Environment Changes
The Message.Send command permits the Who parameter to be
specified using standard Environment naming expressions. You can
use wildcards, set notation, and so on to match one or more of
the usernames listed in !Machine.Users. For example:
Message.Send ("[HVZ,Loren,RK]","Hello");
Bugs were fixed in package Log to avoid raising the Storage_Error
exception on large messages.
Bugs were fixed in Program.Run_Job so that if you have enabled
privileged mode, you can now change identities without entering
the password of the new identity.
R September 1990 73\f
Rational Environment Release Information
Bug fixes were made to package File_Utilities so that comparisons
can be made among two-part Ada units (specs are compared to specs
and bodies are compared to bodies). Further bug fixes were made
so that Ada units can be compared to text files.
The remote debugger is now more persistent about trying to
contact Rational's Response Center. (This applies only to
machines that are configured to have a remote debugger.)
Bug fixes were made to improve the disk driver's error recovery.
In package !Tools.Bounded_String, pragma Subsystem now has
different parameter values:
pragma Subsystem (Tools, Private_Part => Open);
7.24. Changes of Interest to RDF Users
The speller dictionaries have been augmented. Furthermore, bugs
were fixed so that the speller no longer counts errors twice on
the last line of an image.
Changes pertaining to package Abstract_Document:
* Restrictions have been relaxed on the presence of both covers
and paragraphs in an abstract document.
* The Preview Object Editor now properly displays the image of a
list containing a table.
* The Preview Object Editor no longer makes the error that
generates the following internal error message on the message
window:
Internal Error, REFRESH_LEVELS called with
CURRENT_LINE_OBJECT=0
Changes pertaining to LRM interfaces:
* Ada_Program.Depth_First_Traversal no longer skips over the
formal parameters of subprogram renames and task entries when
Major_Elements_Only is set to True.
* Bug fixes were made to improve the handling of operator
symbols (such as *) in package Declarations.
* Bug fixes were made in the way task-type program units are
handled.
Changes pertaining to PDL mechanisms:
* Bug fixes were made to improve error handling during failed
PDL registration attempts.
74 September 1990 R\f
D_12_1_1 Release
* The argument parser no longer constructs indexed arguments
with inappropriate index lists.
* Pdl.Annotation.Argument.Corresponding_Info now returns the
correct values for Complex_Name arguments.
* Annotation insertion now properly places annotations on the
unit declaration of a compilation unit. Requests to insert an
annotation on such a unit declaration are placed before the
context clause instead of between the clause and the
declaration.
* Design_Implementation.Complete and
Design_Implementation.Format no longer update editor images
only on job termination. Editor images are now updated before
these operations exit.
* The error-recovery mechanisms of the PDL argument parser have
been enhanced by the addition of a new lexical recovery scheme
to the scanner that improves support for nested text
arguments.
* The error diagnostics in the description-file analyzers have
been improved.
* PDL semantic analysis no longer allows successful completion
of PDL demotion in cases where the directory operation
actually failed.
* Cursor analysis during PDL traversal operations no longer
prevents multiline arguments from being properly resolved.
* PDL.Mark_Warning now allows warning messages to be attached to
Ada units during analysis.
* Formal subprogram calls during PDL analysis have been
reordered to enable proper stack management during traversal
in PDL semantics and completion.
Miscellaneous changes:
* Element_Cache no longer raises the exception
Write_To_Read_Only_Page during arbitrary read-only operations.
* Bugs were fixed so that Element_Cache objects can be
manipulated using commands from package Archive.
* Document.Pathname_Of no longer causes the loss of spec or body
information on linkages to Ada units. This bug was actually
manifested in Abstract_Document.Extract.File_Name.
* Mapping.Convert no longer causes Storage_Error to be raised
when converting objects of type Target_Info that have large
numbers of Ada and Document linkages.
R September 1990 75\f
Rational Environment Release Information
8. Documentation
The D_12_1_1 release of the Environment includes three pieces of
new hard-copy documentation and new or updated online help for
selected features.
8.1. New Hard-Copy Documentation
New hardcopy documentation consists of three tabbed sections that
are to be inserted into existing documentation, as described in
the following paragraphs.
8.1.1. Package Cmvc_Access_Control
The hard-copy documentation for package Cmvc_Access_Control
includes reference entries for each command in the package and an
introduction that presents a basic usage scenario.
This documentation is a separate tabbed section that you can
insert into the Project Management (PM) book of the Rational
Environment Reference Manual. Within that book, no specific
location is presumed; the section page numbering is
self-contained.
8.1.2. Appendix F for the R1000 Target
The hard-copy revision of "Appendix F for the R1000 Target" has
been updated for D_12_1_1 as well as restructured to conform to
the sections recommended in the Reference Manual for the Ada
Programming Language. In addition to discussing
implementation-dependent pragmas more fully, the revision
describes the default representation of each type, as well as the
values that can be used in representation clauses for these
types.
This revision is a separate tabbed section that you can insert
into the Reference Manual for the Ada Programming Language.
8.1.3. Reference Summary
The Reference Summary (RS), which is Volume 1 of the Rational
Environment Reference Manual, has been extensively revised up to
(but not including) the Master Index. The revision includes the
following new and updated sections:
* Introduction to the Rational Documentation Set: Briefly
describes the contents of each manual in the Rational
documentation set, explains how information is organized in
these manuals, and suggests how various kinds of users can
find information about the Environment.
76 September 1990 R\f
D_12_1_1 Release
* Parameter Value Conventions: Explains the kinds of values that
most Environment commands accept. It is divided into two major
sections. "Referencing Environment Objects" explains naming
features such as special names, context characters, wildcards,
attributes, and so on. "Specifying Other Command Inputs"
describes how to use the Options and Response parameters. This
section is current to D_12_1_1 and supersedes the various
naming sections that now exist in the other books of the
Reference Manual.
* Environment Specifications: Provides a quick reference to the
resources provided by the Environment. It contains the full
Ada specification for each unit in the standard D_12_1_1
Environment, organized by pathname. This section also
contains !Commands.Abbreviations, which lists the standard
abbreviations for Environment commands.
8.2. New Online Documentation
New online help has been included for selected declarations and
packages. Besides giving general descriptions for each
declaration, the new online help provides information about
individual parameters.
8.2.1. New Declarations
New online help now exists for declarations that have been added
to the Environment since D_9_25_1.
* Ada.Expand_Names
* Cmvc.Accept_Changes_Effort
* Cmvc.Compare
* Command.Make_Procedure
* Compilation.Load
* Compilation.Get_Target_Key
* Compilation.Set_Target_Key
* Compilation.Show_Target_Key
* Editor.Screen.Set_Columns
* Editor.Screen.Set_Lines
* Log.Image
* Log.Put_Errors
R September 1990 77\f
Rational Environment Release Information
* Log.Put_Line
* Operator.Get_Minimum_Password_Length
* Operator.Get_Password_Deadline
* Operator.Get_Password_Warning
* Operator.Get_User_Deadline
* Operator.Get_User_Warning
* Operator.Set_Password_Policy
* Operator.Show_Password_Policy
* System_Backup.Backup_Generic
* System_Utilities.Terminal_Columns
* System_Utilities.Terminal_Lines
* What.Search_List_Resolution
8.2.2. Updated Packages
Updated online help exists for selected packages, making all the
information in these packages current to D_12_1_1. All of these
packages have new introductions that present more extensive
information on key concepts. To display information from the
package introductions, enter the following command:
What.Does ("package_name");
This command brings up a menu of the declarations in that
package. From the menu, put the cursor on the entry for the
package itself and press either [Help] or [Object] - [?].
The updated packages are:
* Access_List, whose introduction includes a reorganized
discussion of access control, access lists, groups, access
rights, and interactions between access control and other
Environment features.
* Access_List_Tools.
* Archive, whose introduction includes sections describing
archive options, archive and access requirements, archive and
multiple-host development, plus a series of examples
illustrating archive usage.
* File_Utilities, whose introduction includes an overview of
pattern-matching in file-utility commands.
78 September 1990 R\f
D_12_1_1 Release
* Library, whose introduction includes sections describing name
resolution and context, models, versions, recursive operation,
and the switches that control library displays.
* Operator, whose introduction includes descriptions of groups,
privileges, operator capability, and password policy.
* Switches, whose introduction includes basic operations
pertaining to switch files and updated descriptions of all
library switches. These updated descriptions appear for
Semantics, Format, and Directory library switches when you use
[Object] - [?] in a library switch file. The updated
information for R1000_Cg and Ftp library switches appears only
in the introduction to package Switches.
* System_Backup, whose introduction includes a brief, updated
description of backups.
9. Training
No new training in D_12_1_1.
The Fundamentals, Advanced Topics, and layered products training
scripts do not yet run on Delta2.
10. Appendix A: Examples of Switch-Dependent Compiler Fixes
The following examples illustrate the main bugs that have been
fixed in the D_12_1_1 compiler. These bug fixes are available
only if explicitly enabled. To enable these fixes along with
other new features, you must set the following switch to False in
the library or view in which compilation is to take place:
R1000_Cg.Retain_Delta1_Compatibility := False
Note that this switch setting also causes the generated code to
be incompatible with code generated by the D_10_20_0 compiler.
For more information, see sections 7.14.5 and 7.14.8.
10.1. Constraining Incomplete Types
Previous versions of the R1000 compiler rejected any attempt to
constrain a discriminated type prior to the complete type
declaration (as, for example, the subtypes Man and Woman below).
Units containing a constrained incomplete type could be installed
but not coded. The current version of the R1000 compiler now
fully supports constraining incomplete types, provided that the
Retain_Delta1_Compatibility switch is set to False.
package Constraining_Incomplete_Types is
type Sex is (Male, Female);
R September 1990 79\f
Rational Environment Release Information
type Person (Gender : Sex) is private;
-- The following two subtypes constrain an incomplete
-- discriminated type. These declarations will be
-- rejected by the compiler at coding time unless the
-- switch R1000_Cg.Retain_Delta1_Compatibility := False.
subtype Man is Person (Gender => Male);
subtype Woman is Person (Gender => Female);
type Name is access Person;
subtype Mans_Name is Name (Gender => Male);
subtype Womans_Name is Name (Gender => Female);
private
type Person (Gender : Sex) is
record
Father : Name (Gender => Male);
Mother : Name (Gender => Female);
case Gender is
when Male =>
Wife : Womans_Name;
when Female =>
Husband : Mans_Name;
end case;
end record;
end Constraining_Incomplete_Types;
10.2. Completing Types by Constraining Truly Private Types
Previous versions of the R1000 compiler did not allow you to
complete a private type by constraining a truly private type. As
shown in the examples below, a truly private type refers to a
generic formal private type or a type exported from a package
with a closed private part. Units containing such declarations
could be installed, but not coded. The current version of the
R1000 compiler now fully supports such declarations, provided
that the Retain_Delta1_Compatibility switch is set to False.
Example 1. Type T is completed by constraining a generic formal
private type:
generic
type T (D : Integer) is private;
package Example_1 is
type TT is private;
private
-- The following declaration is allowed only with
-- the D_12_1_1 compiler:
type TT is new T (10);
end Example_1;
80 September 1990 R\f
D_12_1_1 Release
Example 2. Type T is completed by constraining a private type
that is exported from a package with a closed private part:
with Bounded_String;
package Example_2 is
type T is private;
private
-- Bounded_String.Variable_String is a truly private
-- type since package Bounded_String has a closed
-- private part. The following declaration used to be
-- rejected at coding time:
type T is new Bounded_String.Variable_String (10);
end Example_2;
10.3. Exceptions in Generics
The Ada language requires that exceptions declared in generic
instances be distinct. However, previous versions of the R1000
compiler created them as the same exception, causing valid Ada
programs (such as the example below) to execute incorrectly. The
current version of the R1000 compiler fixes this bug, provided
that the Retain_Delta1_Compatibility switch is set to False.
procedure Exceptions_In_Generics is
generic
type Domain_Type is private;
type Range_Type is private;
package Map_Generic is
-- If Retain_Delta1_Compatibility := True, then
-- these exceptions will be distinct in all
-- instances of Map_Generic; otherwise, they will
-- (improperly) have the same representation in all
-- instances.
Undefined : exception;
procedure Define (Domain_Value : Domain_Type;
Range_Value : Range_Type);
function Lookup (Domain_Value : Domain_Type) return
Range_Type;
-- Raises Undefined if Domain_Value is not in the
map.
end Map_Generic;
R September 1990 81\f
Rational Environment Release Information
package body Map_Generic is separate;
package Map1 is new Map_Generic (String, Integer);
package Map2 is new Map_Generic (Integer, Boolean);
begin
begin
if Map2.Lookup (Map1.Lookup ("XYZ")) then
[statement]
end if;
exception
-- When Retain_Delta1_Compatibility := True, these
-- two exceptions will be distinct and can be used
-- to determine which map lookup failed; however,
-- when the switch is set to False, these two
-- exceptions will not be distinct and the first
-- alternative will be executed regardless of which
-- map lookup actually failed.
when Map2.Undefined =>
[statement]
when Map1.Undefined =>
[statement]
end;
end Exceptions_In_Generics;
10.4. Parameter Subtype Checking for Generic Formal Calls
When a generic formal subprogram is called, the Ada language
requires that constraint checks be made to ensure that the
parameter values lie within the bounds of the subtypes for the
parameters of the actual subprogram. However, previous versions
of the R1000 compiler made these constraint checks against the
subtypes for the parameters of the generic formal subprogram.
This either raised Constraint_Error where no exception should
have been raised or it raised no exception where Constraint_Error
should have been raised (as for the code in the following
example). The current version of the R1000 compiler now fixes
this bug, provided that the Retain_Delta1_Compatibility switch is
set to False.
procedure Generic_Formal_Call_Constraint_Checks is
procedure P1 (X : Integer) is
begin
null;
82 September 1990 R\f
D_12_1_1 Release
end P1;
procedure P2 (X : Natural) is
begin
null;
end P2;
generic
with procedure P (X : Integer);
procedure G1 (X : Integer);
procedure G1 (X : Integer) is
begin
P (X);
end G1;
generic
with procedure P (X : Natural);
procedure G2 (X : Integer);
procedure G2 (X : Integer) is
begin
P (X);
end G2;
procedure I1 is new G1 (P1);
procedure I2 is new G1 (P2);
procedure I3 is new G2 (P1);
procedure I4 is new G2 (P2);
begin
I1 (-1); -- Ok
I2 (-1); -- Constraint_Error (used to be OK)
I3 (-1); -- OK (used to raise Constraint_Error)
I4 (-1); -- Constraint_Error
end Generic_Formal_Call_Constraint_Checks;
11. Appendix B: Summary of Changes from Previous Releases
This appendix is intended for new Rational customers who have not
used the Environment prior to the current (D_12_1_1) release.
Accordingly, you do not need to read this appendix if you have
used the Delta1 (D_10_20_0) or earlier release of the
Environment.
The purpose of this appendix is to provide new customers with
quick access to information about the main additions and changes
that were made to the Environment before the current release but
after the Rational Environment Reference Manual was published.
The Reference Manual was written for the Delta0 (D_9_25_1)
R September 1990 83\f
Rational Environment Release Information
release of the Environment and therefore does not document any of
the features that were introduced by the Delta1 (D_10_20_0)
Environment release. This appendix includes excerpts from the
Delta1 release note that describe these undocumented features.
Note that Delta1 features are not included in this appendix if
they are documented in the new online help (see section 8.2).
For easy reference, this appendix is organized into the same
sections as the Rational Environment Reference Manual.
11.1. Editing Images (D_10_20_0)
11.1.1. Package Editor.Macro
Keyboard macros can be saved in a clear text form that can be
edited. To save keyboard macros in this form, use the
Editor.Macro.Save procedure with Expanded => True. If Expanded is
False, the macros will be saved in binary form.
If the macros are saved in editable form, they will be reparsed
at each login, which can be time-consuming. In general, users are
advised to edit the macro file, make sure that it is correct, and
then save the macros in binary form.
If changes are made to the macro file, a user must run
Editor.Macro.Restore or log off and then log on again for the
changes to take effect.
The macro file is created in your home world, and it is called
Terminal_Type_Macros, where Terminal_Type can be Rational, Facit,
VT100, an RXI-supported workstation, or a user-defined terminal
type.
The first line of each macro contains the macro number. Each
subsequent line describes the keystrokes and contains two
entries. The first entry indicates whether the command in that
line should be executed immediately (EXECUTE) or should be
brought up in a command window (PROMPT). The next entry is the
command.
At the end of the file is a list of the key bindings that map
each macro number to a key.
11.1.2. Package Editor.Image
The behavior of Image.End_Of has been modified so that if the
actual end of an image is not in column 1, the operation will
take the cursor to the first column of the next line after the
end of the image. However, if the cursor is already there, it
will go to the real end of the image. Thus, if End_Of is
iterated, it will toggle like Line.Beginning_Of. This makes it
possible to distinguish files that have an empty line at the end
84 September 1990 R\f
D_12_1_1 Release
from those that do not.
11.2. Editing Specific Types (D_10_20_0)
11.2.1. Dependents Object Editor
The new dependents editor replaces the obsolescence, name
resolution, and show usage menus. The new output looks similar to
the D_9_25_1 display for these menus, and all of the D_9_25_1
menu capabilities still exist. More information is available in
dependents/usage menus, and the capability of demoting lists of
dependent declarations and statements, rather than entire
compilation units, has been added.
The initial display of the show usage and obsolescence menus
gives the same information as it did in the D_9_25_1 Environment
release. Now, however, additional information can be obtained
using commands from package Common. The following is a quick
overview of how to use some of these new commands.
* The initial display will show a list of the immediate
dependents for a compilation unit or declaration. Press
[Complete] to get the demote closure of the dependents.
* The initial display will show a list of compilation units that
depend on a compilation unit or declaration. Use the
Common.Expand ([Object] - [!]) and Common.Elide
([Object] - [.]) commands to control display information.
The editor's window banner will indicate the type of
information being displayed. The following terms are used in
this banner:
- State: Indicates that the state of the item is being
displayed.
- Unit: Indicates that the name of the compilation unit
containing the dependency is being displayed.
- Parent: Indicates that the name of the enclosing Ada
construct is being displayed. When this construct is the
same as the compilation unit, *comp_unit* is displayed.
- Kind: Indicates that the type of usage is being displayed.
For instance, stmts means that the usage is in a statement,
decls means that the usage is in a declaration, and call
means that the usage is in a subprogram call.
- Item: Indicates that the items containing the usage are
being displayed. The item level can be expanded to show the
Ada source where the actual usage occurs. At this level,
all direct references to the subject of the
usage/obsolescence are underlined, and you can use the
Editor.Cursor.Next and Editor.Cursor.Previous commands to
R September 1990 85\f
Rational Environment Release Information
traverse through the references.
* Region selection can be used to select a set of displayed
items. Once selected, [Demote] and [Promote] can be used
to demote and promote these items. This can be useful and save
a lot of compilation when you have a few dependencies within
each of the compilation units in the demote closure. If there
are many dependencies in a compilation unit, then the time
required to demote and promote them incrementally using the
dependents object editor may be longer than that required to
demote and repromote the entire compilation unit.
Four new session switches were created to control these menu
displays. These switches are listed in section 11.4.1.
11.2.2. Changes in Editing Ada Units
When editing Ada units, syntactic completion of:
procedure p is
will result in:
procedure P is
[declaration]
begin
[statement]
end P;
But syntactic completion of:
procedure P is begin
will result in:
procedure P is
begin
[statement]
end P;
11.2.3. Ada Completion
If the user requests semantic completion for an Ada fragment that
has multiple possible completions, the Environment will display a
Completion Menu with the possible choices. This Completion Menu
looks exactly as it did in D_9_25_1; however, now a user can
select an entry in the menu and press [Complete] and that
selection will be used to complete the construct in the command
window or Ada program where completion was originally requested.
In addition, completion of an Ada fragment with a partial
parameter list will result in a full parameter profile expansion
that utilizes the partial parameter values where applicable.
86 September 1990 R\f
D_12_1_1 Release
A new procedure, Ada.Expand_Names, was added in D_10_20_0.
Documentation for this procedure is available through D_12_1_1
online help.
11.2.4. Changes to Object.Sort
Common.Object.Sort now applies to the window directory. You now
can sort on any of the fields in the display. Sort takes a
numeric parameter (typically through a prefix key). The values
are:
1 By Usage By order of most recent usage
2 By Mode By modified (*), committed ( ), read only (=)
3 By Size By size of image, increasing
4 By Type By object type, (library), (text), and so on
5 By Name By image name
Negative numbers reverse the order of the sort. For example,
this could be useful if you want to identify all modified buffers
or all the text windows.
11.2.5. Searchlists
Definition now works from searchlists.
11.3. Debugging (D_10_20_0)
11.3.1. Debugger Maintenance
A new package called !Commands.Debug_Maintenance has been added.
This package contains a procedure called Wait_For_Job that can be
used to synchronize user programs with the debugger. When called,
this procedure pauses while the debugger has the running flag on
and returns when the program stops in the debugger. This can be
useful for writing debugger script programs. For example:
Debug.Break (Location => "Test_Program.1s");
Debug.Execute;
Debug_Maintenance.Wait_For_Job;
Debug.Put (Variable => "Test_Variable");
11.3.2. Selections in Debugger Windows
The ability to make selections in debugger windows and pass
selections to debugger commands has been expanded. Certain lines
indicating a source location, exception name, or task name can be
selected in a debugger ouptut window; the selection then can be
used as a parameter to debugger or other Environment commands.
The debugger commands will accept special names, such as
"<REGION>", "<SELECTION>", and so on.
R September 1990 87\f
Rational Environment Release Information
The following debugger output is selectable:
* Reports of events (breakpoint reached, step completed, trace
output, exception handled, task stopped) can be selected. They
contain the location of the event, task involved, and
exception name (if applicable).
* Task display output can be selected and used to indicate a
task or its defining location.
* Stack display output indicates the task and location in the
frame.
* History display output indicates the task and location of the
history entry.
* Command echoing for Put and Modify commands can be selected
and, if you press [Put], the object will be redisplayed.
Selections are interpreted as follows:
* Locations: Whenever a location is required in a command,
"<SELECTION>" can be specified and, if the selected line
contains an Ada location, that location will be used.
* Exceptions: The exception name for the Catch, Propagate, and
Forget commands will accept a selection. For example, if the
debugger catches an exception and displays:
Exception .FOO.BAR
caught at .BLAP.MUMBLE.3s [task %root_Task]
the first line can be selected and the [Propagate] key used to
propagate that exception.
* Tasks: Lines that indicate a location almost always contain a
task name. These lines can be selected. If the null string is
given for a task name to a debugger command and a task is
selected, that task will be used for the following commands:
Clear_Stepping, Execute, History_Display, Hold, Information,
Register_Display, Register_Modify, Release, Run,
Set_Task_Name, Stack, Stop, Task_Display.
* If a command (such as the Break command) requires both a
location and a task, the selection is used to derive the
location and not the task name.
* For example, after Task_Display is executed, a line of the
output can be selected, the stack command issued, and the
stack for the defining task will be displayed.
As another example, if you were to indicate the Break command
on the same selection, a breakpoint will be set on the first
declaration of the task, but it will apply to all tasks.
88 September 1990 R\f
D_12_1_1 Release
11.4. Session and Job Management (D_10_20_0)
11.4.1. Session Switches
Thirty new session switches have been added to control CMVC
functions:
Cmvc_Break_Long_Lines Cmvc_Capitalize
Cmvc_Comment_Extent Cmvc_Configuration_Extent
Cmvc_Field_Extent Cmvc_Indentation
Cmvc_Line_Length Cmvc_Shorten_Name
Cmvc_Shorten_Unit_State Cmvc_Show_Add_Date
Cmvc_Show_Add_Time Cmvc_Show_All_Default_Lists
Cmvc_Show_All_Default_Orders Cmvc_Show_Deleted_Objects
Cmvc_Show_Deleted_Versions Cmvc_Show_Display_Position
Cmvc_Show_Edit_Info Cmvc_Show_Field_Default
Cmvc_Show_Field_Max_Index Cmvc_Show_Field_Type
Cmvc_Show_Frozen Cmvc_Show_Hidden_Fields
Cmvc_Show_Retention Cmvc_Show_Size
Cmvc_Show_Unit_State Cmvc_Show_Users
Cmvc_Show_Version_Number Cmvc_Uppercase
Cmvc_Version_Extent Default_Venture
Four new session switches have been added to control menu
displays:
Dependents_Delta0_Compatibility Dependents_In_Order_Pathnames
Dependents_Show_Library Dependents_Show_Unit_State
Two new session switches have been added to control terminal
settings:
Terminal_Line_Speed Terminal_Padding
To obtain a description of any of these switches, enter the
Switches.Edit_Session_Attributes procedure, place the cursor on
the line containing the switch in question, and enter
Common.Explain (for example, by pressing [Object] - [?]). A
description will appear immediately below the switch.
The Recovery_Locality session switch, previously not implemented,
has been removed.
New and changed library switches are listed in section 11.5.2.
11.4.2. Log Procedures
New procedures Log.Image, Log.Put_Errors, and Log.Put_Line were
added in D_10_20_0. Documentation for these procedures is
available in D_12_1_1 online help.
R September 1990 89\f
Rational Environment Release Information
11.4.3. Remote Execution
A new package called !Commands.Remote has been added. This
package contains procedures that give a user the ability to
execute programs on other R1000s on the same network and to
display the image of an object from another R1000 (on the same
network) in a local I/O window.
The identity of the remote jobs (and therefore their access
rights) are identical with that for the archive server running on
the remote machine, unless the user's local session switch
Profile.Remote_Password has a value. See SJM-76 and following
pages in the Rational Environment Reference Manual for an
explanation of how remote usernames and passwords are used with
Archive.Copy; use of the password with commands in package Remote
is identical.
Remote jobs will run with the username of the remote archive
server, but the access rights for the jobs will be as documented
in SJM.
11.5. Library Management (D_10_20_0)
Changes to library-management facilities are documented in the
D_12_1_1 online help for packages Access_List, Access_List_Tools,
Archive, File_Utilities, Library, and Switches. Among the new
features added in D_10_20_0 are new Archive command options and
new library switches.
11.5.1. Compilation
New procedures in package Compilation (Load, Set_Target_Key,
Show_Target_Key, and Get_Target_Key) were added in D_10_20_0.
Documentation for these procedures is available in D_12_1_1
online help.
11.5.2. Library Switches
Six new library switches have been added:
Elab_Order_Listing Flag_Inevitable_Exceptions
Reject_Bad_Lrm_Pragmas Reject_Bad_Rational_Pragmas
Reject_Inevitable_Exceptions Reject_Undefined_Pragmas
To obtain a description of any of these switches, enter the
Switches.Edit procedure, place the cursor on the line containing
the switch in question, and enter Common.Explain (for example, by
pressing [Object] - [?]). A description will appear
immediately below the switch.
The Target_Key library switch, previously managed by Rational
Subsystems, has been removed.
90 September 1990 R\f
D_12_1_1 Release
Changes have also been made to session switches. New session
switches are listed in section 11.4.1.
11.6. Text Input/Output (D_10_20_0)
A Form parameter has been added to a number of input/output
procedures. Documentation for this parameter is available in the
new "Appendix F for the R1000 Target."
11.7. Data and Device Input/Output (D_10_20_0)
No significant changes were noted in the D_10_20_0 release note.
11.8. String Tools (D_10_20_0)
No significant changes were noted in the D_10_20_0 release note.
11.9. Programming Tools (D_10_20_0)
No significant changes were noted in the D_10_20_0 release note.
11.10. System-Management Utilities (D_10_20_0)
11.10.1. Logoff on Disconnect
If this terminal characteristic is enabled, a user's session will
be terminated if a disconnect is detected on the terminal's port.
A disconnect on an RS232 port is detected by a drop in the DCD
signal; a disconnect on a Telnet port is detected by the
termination of the Telnet session. In either case, uncommitted
buffers will be saved before the user's session is terminated.
By default, this feature is not enabled for all ports. To enable
the feature, use the Terminal.Set_Logoff_On_Disconnect procedure.
Any disconnect event on an RS232 port is passed to the program
reading from the port. That is, if the R1000 detects a transition
from ON to OFF on the DCD input (pin 8) of the RS232 interface, a
disconnect status code will be returned to the program. With
previous releases, RS232 disconnect events often were not
reported; a bug in the input-handling software caused them to be
lost.
In particular, if a port is at a login prompt (that is, the port
has been enabled for login, but no one is currently logged in)
and the R1000 sees DCD switch to OFF, the login manager issues
the error message "Unable to process input" immediately following
the login prompt. This message is not indicative of a fatal
condition; the ability to log in is not adversely affected. This
R September 1990 91\f
Rational Environment Release Information
condition can be avoided by making certain DCD does not switch
OFF for RS232 ports being used for logging in. The Rational
terminal cable (part no. 125-001808-003) is properly wired to
avoid this condition.
The DCD can switch OFF if it is connected to the R1000's DTR
output; this output is switched OFF by the R1000 to initiate a
disconnect. For example, if a port has been configured with
Disconnect_On_Logoff = True and DTR is connected to DCD, then
whenever anyone logs off the login manager will issue the "Unable
to process input" message. DCD can also switch OFF if it is
connected to external equipment (such as a terminal server) that
switches this signal OFF.
11.10.2. Systemwide Login
A systemwide login has been implemented. If a coded,
parameterless procedure called System_Login exists in !Machine,
it will be executed unconditionally. After this, the D_9_25_1
rules for login procedure execution will be used: a user's
searchlist is employed in an attempt to find a parameterless
procedure called Login.
11.10.3. Print Spooler
The print spooler will notify users of the device on which the
request is being printed when the request starts printing and in
the print completion message. It will also attempt to queue a
request to another device associated with the specified class, if
the current device cannot be connected to successfully, before
trying again with the original device.
11.10.4. Password Policy
Declarations for enforcing password policies were added to
package Operator in D_10_20_0. Documentation for managing
password policy is available in D_12_1_1 online help.
11.10.5. System-Availability Tools
New declarations in the
!Tools.System_Availability'Spec_View.Units subsystem include:
* Procedure Log_Reader.Load_Logs
procedure Load_Logs (Start_Time : Calendar_Time;
Stop_Time : Calendar_Time;
From_Directory : String :=
"!Machine.Error_Logs");
92 September 1990 R\f
D_12_1_1 Release
Builds a map of all log files, using start and stop times as
interval bounds if provided.
* Function System_Information.Done
function Done (I : Mount_Iterator) return Boolean;
* Procedure System_Information.Next
procedure Next (I : in out Mount_Iterator);
* Procedure System_Information.Initialize
procedure Initialize (I : out Mount_Iterator);
* Type System_Information.Mount_Information
type Mount_Information is record
Request_Time : Time_Utilities.Time;
Volume : Bounded_String.Variable_String (40);
Mount_Time : Time_Utilities.Time;
Unload_Time : Time_Utilities.Time;
Density : Bounded_String.Variable_String (20);
end record;
Maintains data about tape activity; the value of the density
field is not trustworthy because of hardware limitations.
* Type System_Information.Mount_Iterator
type Mount_Iterator is private;
Retrieves information about tape-mount requests.
* Function System_Information.Value
function Value (I : Mount_Iterator) return Mount_Information;
* Type System_Report.Report_Class
Adds new Tape_Mounts enumeration for use with
System_Report.Generate; tape-mount information is also
included when Everything is used for the report class.
11.11. Project Management (D_10_20_0)
The following paragraphs describe new CMVC features and clarify
aspects of CMVC behavior that have been subject to
misinterpretation.
R September 1990 93\f
Rational Environment Release Information
11.11.1. Tools
The new function
!Implementation.Cmvc_Implementation.Element_Operations.Saves_
Source can be used to determine whether the image of an object is
stored in the CMVC database.
For many of the documented procedures in package Check, there are
equivalent functions that are not documented. See the package
spec !Tools.Compatibility'Spec_View.Units.Check for details.
11.11.2. Joining Controlled Objects
The execution of:
Cmvc.Join (What_Object => "X",
To_Which_View => "V")
is equivalent to:
Cmvc.Sever ("X");
Cmvc.Join ("X", "V");
That is, the result is that X is first removed from any join set
it is currently in and then it is placed in a join set with V.
This means that for views A and B, each with an object X,
entering Cmvc.Join (X, A) from B is not necessarily the same as
entering Cmvc.Join (X, B) from A. If a new unit is to be added to
a join set, the command should always join the new unit to an
existing join set. Otherwise, two join sets will result: one with
the new unit and the one it was joined to, and one with all the
other members of the old join set. If wildcards are used to join
objects in a view and the wrong direction is used, large numbers
of joined objects can be severed accidentally.
Cmvc.Join performs all join operations atomically. This means
that any error will result in none of the joins being done, even
if there are progress (+++) messages in the log. Most CMVC
operations behave this way.
11.11.3. Import-Restriction Files
Import-restriction files may be named for the full pathname of a
view. For example, if you want to apply an import restriction to
subsystem !Subs.Sub1.Code but not to !Other_Subs.Sub1.Code, then
you can create an import-restriction file for your load view that
is named "Other_Subs_Sub1_Code", rather than naming it simply
"Code". If you describe an import restriction with the simple
name of a subsystem, the restriction will apply to all subsystems
with that simple name. This can result in units from other spec
views unexpectedly being absent from the importing view, or the
entire Cmvc.Import operation may fail. Rational recommends using
full pathnames in naming import restrictions.
94 September 1990 R\f
D_12_1_1 Release
11.11.4. Controlling Objects
If you try to control an element in a view without saving source,
and the CMVC database is already saving source for an element of
that name, Cmvc.Make_Controlled will fail. You must destroy all
configurations containing the old element, uncontrol the old
element in any existing views, and expunge the database before
you will be able to control the new element. Interfaces in
Cmvc_Implementation enable you to iterate over all configurations
and locate the ones containing a particular element.
!Implementation.Directory or !Tools.Directory_Tools can be used
to find the views containing that element.
11.11.5. Demotion of Checked-In Ada Units
Demotion of a checked-in, controlled Ada unit with open insertion
points will fail with a message indicating that the unit must
first be checked out. Such units should be checked out and
checked back in manually. This affects Compilation.Demote as well
as the implicit demotions done by Archive when the Remake option
is specified. This behavior is necessary because, when the unit
is demoted, the system subsumes the insertion point into the
parent unit, making its image differ from that stored in the CMVC
database. To avoid the manual checkout and checkin operations, do
not check in units if they have open insertion points.
11.11.6. Creating New Spec Views
When a spec view is created from another spec view that contains
controlled objects, the objects in the new spec view will be
controlled and joined to the source spec view. In contrast, when
a spec view is created from a working view or a released view
that contains controlled objects, the objects in the new spec
view are left uncontrolled.
11.11.7. Pretty-Printing and Controlled Ada Units
Changes to the pretty-printer can result in objects whose image
does not match that recorded in the CMVC database.
Cmvc_Maintenance.Check_Consistency will report such mismatches.
To make the images recorded in the CMVC database consistent with
the reformatted images of objects, you can check out and then
check in each object without modification. This creates a new
generation that has the image produced by the current
pretty-printer, which matches the object in the view.
Note that the checkout operation also implicitly accepts changes
if the object does not correspond to the latest generation in its
join set. This means that the contents of the view may be changed
by the procedure outlined above. Rational recommends that before
the explicit checkout and checkin for pretty-printer
compatibility is done, all joined paths and subpaths should be
R September 1990 95\f
Rational Environment Release Information
made consistent; that is, all joined objects should be updated to
the most recent generation for that join set.
Note also that this procedure will not work for released views,
even if the released view is first unfrozen - because objects in
released views cannot be checked out.
11.11.8. Compatibility-Database Utilities
The new package !Implementation.Compatibility includes
programmatic interfaces that can be used to identify whether a
subsystem is a primary or a secondary. One function returns the
Subsystem_Id for a specified subsystem; other functions return
Boolean values. See the online spec for details.
The new package Cdb_Maintenance has been added to
!Tools.Compatibility. The subprograms in this package are
designed to be used by Rational support personnel for diagnosing
and addressing problems associated with the compatibility
database. See the commented spec for more details. These tools
replace the procedure !Commands.Cmvc_Maintenance.Repair_Cdb that
is documented in the Project Management book of the Rational
Environment Reference Manual. The Verify procedure in the new
package replaces and improves on Repair_Cdb with Effort_Only =>
True. There is no functionality equivalent to Repair_Cdb with
Effort_Only => False; instead, repair operations involve
recompilation of incompatible units.
11.12. Networking (D_10_20_0)
A new optional feature has been added to Telnet_Server.
Associated with each Telnet port is a Boolean state variable
named Convert_Received_New_Line_To_Cr. When it is True, a
received Telnet New_Line signal (CR and LF) will be returned as
CR only to the caller of Telnet_Server.Receive. When False, such
a signal will be returned as the sequence CR and LF. The default
value of this switch (assigned at system boot time) is True. For
existing applications, this has worked well: it compensates for
the behavior of Bridge and other Telnet clients that send CRLF
when the user typed only CR. For future applications that need to
transfer binary data, turning this switch off (False) probably
will work better. The Telnet_Server exports operations to read
and write the value of this switch.
96 September 1990 R