DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

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

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦dc15cb1b3⟧ TextFile

    Length: 84352 (0x14980)
    Types: TextFile
    Notes: R1k Text-file segment

Derivation

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

TextFile


  @node !Commands.Editor

  The Rational Environment's basic editing operations are defined in
  package Editor.  These operations apply to all objects regardless
  of type and thus are primarily text-editing operations.  They
  should be used in conjunction with the type- and context-sensitive
  procedures described in the Editing Specific Types (EST) book of
  the Rational Environment Reference Manual.

  The subpackages are named and organized by the objects or items to
  which editing operations apply, as follows:

  o Package Char:  Editing operations for single characters.

  o Package Cursor:  Operations for cursor movement within an image
    (up, down, left, and right); operations for moving the cursor by
    designation (prompt or error).

  o Package Hold_Stack:  Operations for manipulating the hold stack
    and for retrieving deletions.

  o Package Image:  Operations for scrolling the image.

  o Package Key:  Procedures for defining and saving new or custom
    key bindings.

  o Package Line:  Editing operations for lines; operations for
    moving the cursor by relative line position within a window and
    for inserting and joining lines.

  o Package Macro:  Operations for defining, executing, saving, and
    binding macros.

  o Package Mark:  Operations for marking locations in an image for
    future reference or for moving between images.

  o Package Region:  Operations for defining, editing, and
    manipulating regions of text.

  o Package Screen:  Operations for moving the cursor on the screen
    regardless of window boundaries; facilities for dumping and
    refreshing screen contents; facilities for manipulating the
    screen stack.

  o Package Search:  Procedures for searching and replacing strings
    of text.

  o Package Set:  Procedures for modifying default editor parameters.

  o Package Window:  Operations for managing or manipulating windows
    and frames; operations for moving between windows.

  o Package Word:  Editing operations for words; operations for
    moving the cursor by relative word position within a window.
  @node !Commands.Editor.Alert

  procedure Alert;

  Rings the terminal bell.
  @node !Commands.Editor.Noop

  procedure Noop;

  Performs no operation; can be used to define a key to do nothing.
  @node !Commands.Editor.Quit

  procedure Quit (Ignore_Changes : Boolean := False);

  Ends the current session.

  If the Ignore_Changes parameter is false (the default), the Quit
  procedure ends the current session only if there are no new or
  edited images that have not been committed.  If there are images
  that have not been committed, the Window Directory can be used
  to find these images and to commit them before quitting.  See the
  Editing Specific Types (EST) book of the Rational Environment
  Reference Manual for more information on the editing operations
  available on the Window Directory.

  If the Ignore_Changes parameter is true, the Quit procedure
  does not warn whether an image needs committing.  In that case,
  it simply ends the current session and ignores any changes to
  uncommitted images.

  Note that the editor treats I/O windows with jobs requesting input
  running in them as uncommitted images.  You cannot log off while
  such jobs are running without terminating them or ignoring changes.
  @node !Commands.Editor.Char
  package Char is
    procedure Capitalize       (Repeat    : Integer     := 1);
    procedure Delete_Backward  (Repeat    : Integer     := 1);
    procedure Delete_Forward   (Repeat    : Integer     := 1);
    procedure Delete_Next      (Repeat    : Integer     := 1);
    procedure Delete_Previous  (Repeat    : Integer     := 1);
    procedure Delete_Spaces    (Remaining : Natural     := 1);
    procedure Insert_String    (Value     : String);
    procedure Insert_Character (Repeat    : Integer     := 1;
                               Value     : Character);
    procedure Lower_Case       (Repeat    : Integer     := 1);
    procedure Quote;
    procedure Tab_Backward     (Repeat    : Integer     := 1);
    procedure Tab_Forward      (Repeat    : Integer     := 1);
    procedure Tab_To_Comment;
    procedure Transpose        (Offset    : Integer     := 1);
    procedure Upper_Case       (Repeat    : Integer     := 1);
  end Char;

  Package Char contains character-editing operations.  The cursor
  always rests between two characters or blanks.  However, the cursor
  appears to be on the second character of the two characters it
  rests between.  For example, in the word and, when the cursor
  appears to be on n, it is actually located between the a and the n.
  All character-editing operations affect the characters before or
  after the cursor Repeat times.

  The case-changing operations move the cursor forward Repeat
  positions.  They check for an alphabetic character in each position
  and, if they find one, change its case.

  The Tab_Forward procedure inserts blanks forward to the next tab
  stop.  The Tab_Backward procedure deletes all characters and blank
  spaces back to the previous tab stop.

  The Insert procedures insert the value specified in the Value
  parameter in the image at the cursor.

  By default, characters entered at the keyboard are inserted
  in the image.  If the editor must make room for a character in
  the line, it moves any characters that lie to the right of the
  cursor.  Conversely, when a character is deleted, the editor shifts
  characters to occupy the emptied position.

  In overwrite mode, characters in the image are not moved to make
  room for new insertions.  Instead, a character entered from
  the keyboard replaces the character under the cursor.  (See the
  Set.Insert_Mode procedure.)

  Use the Quote procedure to insert special characters (such as
  control characters) in the image.  Special characters appear in
  the image as highlighted characters.  For example, the Control-L
  character appears as a highlighted L in the image.

  The Delete_Spaces procedure removes blanks between the cursor and
  the next nonblank character.
  @node !Commands.Editor.Char.Capitalize

  procedure Capitalize (Repeat : Integer := 1);

  Capitalizes the words in the next Repeat characters.

  If the cursor is within a word, the procedure capitalizes the
  "word" beginning at the cursor.  The cursor is left after the last
  word capitalized.
  @node !Commands.Editor.Char.Delete_Backward

  procedure Delete_Backward (Repeat : Integer := 1);

  Deletes Repeat characters to the left of the cursor.

  When the cursor reaches the beginning of the line, the line becomes
  joined with the line before it.  The cursor continues deleting on
  that line.
  @node !Commands.Editor.Char.Delete_Forward

  procedure Delete_Forward (Repeat : Integer := 1);

  Deletes Repeat characters to the right of the cursor.

  When the cursor reaches the end of the line, the line becomes
  joined with the line after it.  The cursor continues deleting on
  that line.  The cursor remains in its original position.
  @node !Commands.Editor.Char.Delete_Next

  procedure Delete_Next (Repeat : Integer := 1);

  Deletes Repeat next characters but does not delete beyond the
  current line.

  If Repeat is greater than the number of characters on the line,
  the procedure deletes to the end of the line and stops.  The cursor
  remains in its original position.
  @node !Commands.Editor.Char.Delete_Previous

  procedure Delete_Previous (Repeat : Integer := 1);

  Deletes Repeat previous characters but does not delete beyond the
  current line.

  If Repeat is greater than the number of characters on the line, the
  procedure deletes to the beginning of the line and stops.
  @node !Commands.Editor.Char.Delete_Spaces

  procedure Delete_Spaces (Remaining : Natural := 1);

  Deletes blanks and joins lines from the cursor to the next nonspace
  character (in both directions), leaving Remaining spaces.
  @node !Commands.Editor.Char.Insert_Character

  procedure Insert_Character (Repeat : Integer := 1;
                             Value  : Character);

  Inserts the Value character Repeat times at the cursor.

  After the operation, the cursor is located after the rightmost
  character inserted.
  @node !Commands.Editor.Char.Insert_String

  procedure Insert_String (Value : String);

  Inserts Value at the cursor.

  After the operation, the cursor is located after the rightmost
  character inserted.
  @node !Commands.Editor.Char.Lower_Case

  procedure Lower_Case (Repeat : Integer := 1);

  Converts Repeat characters to lowercase.

  The procedure moves forward Repeat spaces and, where it finds
  an uppercase alphabetic character, converts the character to
  lowercase.
  @node !Commands.Editor.Char.Quote

  procedure Quote;

  Quotes a special character, such as a control character, into the
  image.

  This procedure must be used for each special character inserted
  into the image.  The procedure cannot be called from a Command
  window but must be invoked through a key binding; use the
  Insert_Character procedure or the Insert_String procedure to
  insert special characters from a Command window or program.
  @node !Commands.Editor.Char.Tab_Backward

  procedure Tab_Backward (Repeat : Integer := 1);

  Deletes backward to the previous tab stop Repeat times.

  This procedure affects only the current line.
  @node !Commands.Editor.Char.Tab_Forward

  procedure Tab_Forward (Repeat : Integer := 1);

  Inserts blanks to the next tab stop Repeat times.

  This procedure affects only the current line.
  @node !Commands.Editor.Char.Tab_To_Comment

  procedure Tab_To_Comment;

  Moves the cursor to the first character of the text in the comment,
  if there is a comment on the current line.

  If there is no comment on the line and no text currently located
  at the comment column (set by the Comment_Column library switch),
  this procedure inserts the comment characters (-- ) and leaves the
  cursor at the first character position for the comment.  Otherwise,
  if there is text at the comment column, the procedure moves the
  cursor to the end of the text, inserts the comment characters (--
  ), and leaves the cursor after the inserted characters.
  @node !Commands.Editor.Char.Transpose

  procedure Transpose (Offset: Integer := 1);

  Transposes the Offset characters before and after the cursor.

  The cursor actually appears on the second character of the two
  characters it rests between.  Thus, this procedure transposes
  the character on which the cursor is located and the character
  before it.  The procedure transposes characters on the same line.
  The cursor position that results depends on the value of the
  Cursor_Transpose_Moves session switch.  If the value is true,
  the cursor is moved to the right one character position.  If it
  is false, the position of the cursor is not changed.  For more
  information on session switches, see SJM, Session Switches.
  @node !Commands.Editor.Char.Upper_Case

  procedure Upper_Case (Repeat : Integer := 1);

  Converts Repeat characters to uppercase.

  The procedure moves forward Repeat spaces and, where it finds
  a lowercase alphabetic character, converts the character to
  uppercase.
  @node !Commands.Editor.Cursor
  package Cursor is
    procedure Down     (Repeat    : Integer := 1);
    procedure Left     (Repeat    : Integer := 1);
    procedure Right    (Repeat    : Integer := 1);
    procedure Up       (Repeat    : Integer := 1);
    procedure Forward  (Repeat    : Integer := 1);
    procedure Backward (Repeat    : Integer := 1);
    procedure Next     (Repeat    : Integer := 1;
                       Prompt    : Boolean := True;
                       Underline : Boolean := True);
    procedure Previous (Repeat    : Integer := 1;
                       Prompt    : Boolean := True;
                       Underline : Boolean := True);
  end Cursor;

  The Up, Down, Left, and Right procedures move the cursor in the
  indicated direction Repeat times.

  The Next and Previous procedures move the cursor by prompts or
  underlines.

  The Forward and Backward procedures move the cursor left and right,
  continuing cursor movement on the next or previous line when the
  cursor reaches the end or beginning of the current line.

  Cursor movement is restricted by window boundaries with commands in
  this package.  (Commands in package Screen can be used to move the
  cursor across window boundaries.)  At window boundaries, the editor
  keeps the cursor visible by scrolling the image.

  The cursor highlights a unique location in each image, indicating
  to the editor where to place keyboard insertions.  The cursor is a
  point of reference for focusing the attention of the Environment,
  specifying the domain for any command in progress or the object
  to which an operation applies.  The cursor actually appears on a
  character but represents the position between the character it is
  on and the character before it.

  @node !Commands.Editor.Cursor.Backward

  procedure Backward (Repeat : Integer := 1);

  Moves the cursor to the left Repeat characters.

  When the cursor is at the beginning of the current line, this
  procedure moves the cursor to the position after the last character
  on the previous line.  Negative values move the cursor in the
  opposite direction, to the right.
  @node !Commands.Editor.Cursor.Down

  procedure Down (Repeat : Integer := 1);

  Moves the cursor down Repeat lines.

  Negative values move the cursor in the opposite direction.
  @node !Commands.Editor.Cursor.Forward

  procedure Forward (Repeat : Integer := 1);

  Moves the cursor to the right Repeat characters.

  When the cursor is one position past the last character on the
  current line, this procedure moves the cursor to the first
  character on the next line.  Negative values move the cursor in
  the opposite direction, to the left.
  @node !Commands.Editor.Cursor.Left

  procedure Left (Repeat : Integer := 1);

  Moves the cursor Repeat columns to the left, stopping at the
  beginning of the line.

  Negative values move the cursor in the opposite direction, to the
  right.
  @node !Commands.Editor.Cursor.Next

  procedure Next (Repeat    : Integer := 1;
                 Prompt    : Boolean := True;
                 Underline : Boolean := True);

  Moves the cursor forward to the next underline or prompt.

  Negative values for the Repeat parameter move the cursor in the
  opposite direction.  If the Prompt parameter is true (the default),
  the procedure looks for the next prompt.  If the Underline
  parameter is true, the procedure looks for the next underline.
  When both parameters are true, the procedure looks for the next
  occurrence of either a prompt or an underline; if both are false,
  it does nothing.
  @node !Commands.Editor.Cursor.Previous

  procedure Previous (Repeat    : Integer := 1;
                     Prompt    : Boolean := True;
                     Underline : Boolean := True);

  Moves the cursor backward to the previous underline or prompt.

  Negative values for the Repeat parameter move the cursor in the
  opposite direction.  If the Prompt parameter is true (the default),
  the procedure looks for the previous prompt.  If the Underline
  parameter is true, the procedure looks for the previous underline.
  When both parameters are true, the procedure looks for the previous
  occurrence of either a prompt or an underline; if both are false,
  it does nothing.
  @node !Commands.Editor.Cursor.Right

  procedure Right (Repeat : Integer := 1);

  Moves the cursor Repeat columns to the right on the current line.

  Negative values move the cursor in the opposite direction, stopping
  at the beginning of the line.
  @node !Commands.Editor.Cursor.Up

  procedure Up (Repeat : Integer := 1);

  Moves the cursor up Repeat lines.

  Negative values move the cursor in the opposite direction.
  @node !Commands.Editor.Hold_Stack
  package Hold_Stack is
    procedure Copy_Top;
    procedure Delete_Top;
    procedure Next        (Repeat : Integer := 1);
    procedure Previous    (Repeat : Integer := 1);
    procedure Push        (Repeat : Integer := 1);
    procedure Rotate      (Repeat : Integer := 1);
    procedure Swap;
    procedure Top;
  end Hold_Stack;

  Package Hold_Stack provides a mechanism for recovering deletions.
  The Rational Editor saves the 100 most recent deletions (larger
  than a single character) in the hold stack.  Deleted selections of
  any size are also saved.  Items in the stack can be retrieved and
  inserted at the cursor with the Top, Next, or Previous procedure.

  An item retrieved from the hold stack is displayed and treated as a
  selection.

  The Push procedure puts the current selection in the hold stack.
  The Top procedure inserts the most recent item back into the
  image at the cursor.  The Next and Previous procedures provide a
  mechanism for moving through the items in the stack.  They replace
  the selection at the cursor with the next or previous item in the
  stack.  At the bottom of the stack, Next wraps to the top.  At
  the top of the stack, Previous wraps to the bottom.  The Copy_Top
  procedure makes a copy of the top item of the stack and puts it
  on the top of the stack.  The Delete_Top procedure removes the
  top item from the stack.  The Rotate procedure takes the bottom
  item of the stack and places it on the top of the stack.  The Swap
  procedure swaps the top two items on the stack.
  @node !Commands.Editor.Hold_Stack.Copy_Top

  procedure Copy_Top;

  Copies the top item of the hold stack onto the top of the hold
  stack.

  The result is that there are two copies of the same item on the top
  of the hold stack.
  @node !Commands.Editor.Hold_Stack.Delete_Top

  procedure Delete_Top;

  Removes the top item from the hold stack.

  The item next to the top of the hold stack becomes the top item of
  the hold stack.
  @node !Commands.Editor.Hold_Stack.Next

  procedure Next (Repeat : Integer := 1);

  Retrieves the Repeat item from the hold stack and copies it at the
  current cursor location.

  At the bottom of the stack, this procedure wraps to the top.
  @node !Commands.Editor.Hold_Stack.Previous

  procedure Previous (Repeat : Integer := 1);

  Retrieves the previous Repeat item from the hold stack and copies
  it at the current cursor location.

  At the top of the stack, this procedure wraps to the bottom.
  @node !Commands.Editor.Hold_Stack.Push

  procedure Push (Repeat : Integer := 1);

  Pushes the current selection onto the hold stack Repeat times.
  @node !Commands.Editor.Hold_Stack.Rotate

  procedure Rotate (Repeat : Integer := 1);

  Takes the Repeat number of items from the bottom of the stack and
  places them on the top of the hold stack in order.
  @node !Commands.Editor.Hold_Stack.Swap

  procedure Swap;

  Swaps the top two items on the hold stack.

  The item next to the top of the hold stack becomes the top item of
  the hold stack.  The original top item becomes the item next to the
  top of the hold stack.
  @node !Commands.Editor.Hold_Stack.Top

  procedure Top;

  Retrieves the top item in the hold stack, leaving that item on the
  hold stack.

  The retrieved item is copied into the current cursor location.
  @node !Commands.Editor.Image

  package Image is
    procedure Up           (Repeat : Integer  := 0);
    procedure Down         (Repeat : Integer  := 0);
    procedure Left         (Repeat : Integer  := 0);
    procedure Right        (Repeat : Integer  := 0);
    procedure Find         (Name   : String);
    procedure Beginning_Of (Offset : Natural  := 0);
    procedure End_Of       (Offset : Natural  := 0);
  end Image;

  Package Image includes operations for finding and scrolling
  images.  The Find procedure searches for an image of a given name
  in the Window Directory and displays it on the screen.  The Up,
  Down, Left, and Right procedures scroll the image Repeat lines
  or columns in the indicated direction.  The default (Repeat = 0)
  scrolls the image one full window.  When scrolling a full window,
  the editor keeps a portion of the previous view to preserve context
  (how much it keeps can be specified with switches).

  The Beginning_Of and End_Of procedures move the view as indicated
  but use Offset to adjust the new cursor position by Offset lines
  from the beginning or end of the image.
  @node !Commands.Editor.Image.Beginning_Of

  procedure Beginning_Of (Offset : Natural := 0);

  Moves the cursor to the beginning of the image.

  This procedure uses Offset to adjust the new cursor position by
  Offset lines from the beginning of the image.
  @node !Commands.Editor.Image.Down

  procedure Down (Repeat : Integer := 0);

  Scrolls the image forward Repeat lines.

  When Repeat = 0, the procedure scrolls one full window.  If Repeat
  is a negative number, it scrolls down Repeat lines.
  @node !Commands.Editor.Image.End_Of

  procedure End_Of  (Offset : Natural := 0);

  Moves the cursor to the end of the image.

  This procedure uses Offset to adjust the new cursor position by
  Offset lines from the end of the image.
  @node !Commands.Editor.Image.Find

  procedure Find (Name : String);

  Searches the Window Directory for the specified image, or for an
  image that contains a substring of Name in its name, and brings it
  onto the screen.

  If the null string is supplied as Name, the procedure brings back
  to the screen the last image the Environment removed from the
  screen (this does not include images explicitly removed by users
  either by deleting them or marking them for replacement).
  @node !Commands.Editor.Image.Left

  procedure Left (Repeat : Integer := 0);

  Scrolls the image left Repeat columns.

  When Repeat = 0, the procedure scrolls one full window.  If Repeat
  is a negative number, it scrolls right.  If the first character of
  the image is already in the first character position of the window,
  the procedure does nothing.
  @node !Commands.Editor.Image.Right

  procedure Right (Repeat : Integer := 0);

  Scrolls the image right Repeat columns.

  When Repeat = 0, the procedure scrolls one full window.  If Repeat
  is a negative number, it scrolls left.
  @node !Commands.Editor.Image.Up

  procedure Up (Repeat : Integer := 0);

  Scrolls the image back Repeat lines.

  When Repeat = 0, the procedure scrolls one full window.  If Repeat
  is a negative number, it scrolls down.  If the first line of the
  image is already at the top of the screen, the procedure does
  nothing.
  @node !Commands.Editor.Key

  package Key is
    procedure Define (Key_Name     : String  := ">>KEY NAME, e.g. CM_F1<<";
                     Command_Name : String  := ">>COMMAND NAME<<";
                     Prompt       : Boolean := False);
    procedure Name   (Key_Code     : String  := "");
    procedure Save;
    procedure Prompt (Key_Code     : String  := "");
  end Key;

  Use the procedures in package Key to bind any procedure from
  !Commands or any fully qualified Ada procedure call to a key.
  These bindings are in effect until the user logs off.

  For example, function key names are defined as follows:

  F1--F20        Function keys---for example, F10 is the Definition
                  key.

  S_key          The Shift key pressed along with another key,
                  nonalphanumeric---for example, S_F10.

  C_key          The Control key pressed along with another key---for
                  example, C_G or C_F10.

  M_key          The Meta key pressed along with another key---for
                  example, M_F10.

  CS_key         The Control and Shift keys pressed along with another
                  key---for example, CS_F10.

  CM_key         The Control and Meta keys pressed along with another
                  key---for example, CM_F10.

  MS_key         The Meta and Shift keys pressed along with another
                  key---for example, MS_F10.

  CMS_key        The Control, Meta, and Shift keys pressed along with
                  another key---for example, CMS_F10.

  To determine the key name for a key, use the !Commands.What.Does or
  What.Key procedure.

  Another way to change the key bindings is to create a permanent
  local key binding procedure.  This is outlined below.

  At login, the Environment assigns the key bindings defined in the
  !Machine.Editor_Data.Rational_Commands procedure, which globally
  assigns commands to key bindings for the entire system.  This
  procedure applies to the Rational Terminal.  Other procedures exist
  for each of the types of terminals that can be specified at login.

  Users who want to create their own local key bindings should
  build in their home world a procedure called Rational_Commands
  that uses the same form as the default procedure, !Machine.Ed-
  itor_Data.Rational_Commands.  A template for this procedure,
  called !Machine.Editor_Data.Rational_User_Commands, contains the
  case statements and the proper context clauses.  Like the default
  procedure, this local procedure should contain a case statement;
  it needs only those cases defined that differ from the cases of the
  default procedure.

  To create a local keymap, create a Rational_Commands procedure
  in your home world and copy the contents of the !Machine.Edi-
  tor_Data.Rational_User_Commands procedure into it.  Modify the
  case statement as desired, install the procedure, quit, and then
  log in again for the new key bindings to take effect.

  The Rational_Commands procedure applies specifically to the
  Rational Terminal.  Other terminals that the Environment
  supports need similar procedures with different names for their
  key bindings.  The directory !Machine.Editor_Data contains
  procedures and templates for each of the terminals supported by
  the Environment.
  @node !Commands.Editor.Key.Define

  procedure Define (Key_Name     : String  := ">>KEY NAME, e.g. CM_F1<<";
                   Command_Name : String  := ">>COMMAND NAME<<";
                   Prompt       : Boolean := False);

  Binds a command to a key.

  The Key_Name parameter specifies the key to which the command
  should be bound.  To find out the name of a key, use the
  !Commands.What.Does or What.Key procedure.  The Command_Name
  parameter specifies the command to be bound to Key_Name---for
  example, Text.Create.  The Prompt parameter specifies whether a
  Command window should be brought up containing the command.

  The Command_Name parameter either can take simple names (if they
  are in the current context) or can be resolved via your searchlist
  when it is defined.  The key is bound to the object itself, rather
  than the name.  Thus, if there is an object in the current context
  with the same simple name as Command_Name, the system will retrieve
  the correct one.

  To bind a procedure that has parameters and is not in your current
  searchlist, you must enclose the name in quotes.  For example, to
  call a procedure called Phone in !Users.John, with a parameter
  requesting the name of a person in the phone list, you would enter:

  Key.Define
  (Key_Name=>"F1",Command_Name=>"""!Users.John"".Phone(""Bill"")");
  @node !Commands.Editor.Key.Name

  procedure Name (Key_Code : String := "");

  Displays help for the next key pressed, including a valid key name
  and any procedures bound to that key.
  @node !Commands.Editor.Key.Prompt

  procedure Prompt (Key_Code : String := "");

  Displays in a Command window the full procedure, with prompts, that
  is bound to the next key pressed.

  This allows you to change the default values for the parameters.
  @node !Commands.Editor.Key.Save

  procedure Save;

  Not implemented in the current release of the Environment.
  @node !Commands.Editor.Line
  package Line is
    procedure Beginning_Of    (Offset       : Natural := 0);
    procedure Capitalize      (Repeat       : Integer := 1);
    procedure Center          (Right_Margin : Natural := 0);
    procedure Copy           (Repeat       : Integer := 1);
    procedure Delete          (Repeat       : Integer := 1);
    procedure Delete_Backward (Repeat       : Integer := 1);
    procedure Delete_Forward  (Repeat       : Integer := 1);
    procedure End_Of          (Offset       : Natural := 0);
    procedure Insert          (Repeat       : Integer := 1);
    procedure Indent          (Repeat       : Integer := 1);
    procedure Join           (Repeat       : Integer := 1);
    procedure Lower_Case      (Repeat       : Integer := 1);
    procedure Open           (Repeat       : Integer := 1);
    procedure Transpose       (Offset       : Integer := 1);
    procedure Upper_Case      (Repeat       : Integer := 1);
    procedure Next           (Repeat       : Integer := 1) renames Cursor.Down;
    procedure Previous        (Repeat       : Integer := 1) renames Cursor.Up;
  end Line;

  Package Line contains operations for manipulating lines in an
  image.  Except for the Delete, Center, and Copy procedures,
  editing operations affect the line starting at the cursor.  The
  Beginning_Of, End_Of, Delete, Center, and Copy procedures affect
  the entire line regardless of where the cursor is on the line.

  The Transpose procedure affects the current and previous lines
  without moving the cursor.  The Join procedure affects the current
  line and the next line.

  The Indent procedure starts a new line, indented to the previous
  level of indentation.  The Open procedure starts a new line below
  the cursor but does not affect the cursor's position.  The Insert
  procedure inserts a new line, with the cursor remaining at the
  first column of the line.

  The Beginning_Of and End_Of procedures move the cursor as indicated
  but use the Offset value to adjust the new cursor position by
  Offset columns from the beginning or end of a line.

  @node !Commands.Editor.Line.Beginning_Of

  procedure Beginning_Of (Offset : Natural := 0);

  Moves the cursor to the first nonblank character in the line.

  This procedure uses the Offset value to adjust the new cursor
  position by Offset columns from the beginning of the line.  When
  repeated in succession, it toggles the cursor between column 1 and
  the first nonblank character.
  @node !Commands.Editor.Line.Capitalize

  procedure Capitalize (Repeat : Integer := 1);

  Capitalizes each word following the cursor in the next Repeat lines
  and leaves the cursor at the beginning of the following line.
  @node !Commands.Editor.Line.Center

  procedure Center (Right_Margin : Natural := 0);

  Centers from the first nonblank character on the line to the last
  nonblank character on the line.

  This procedure centers the nonblank characters of the entire line
  between the first column and the specified right margin.  If the
  right margin is specified as 0 (the default), the defined fill
  column is used (see package Set).
  @node !Commands.Editor.Line.Copy

  procedure Copy (Repeat : Integer := 1);

  Copies the current line Repeat times and places the new copy
  immediately below the current line, pushing all remaining lines
  down in the image.
  @node !Commands.Editor.Line.Delete

   procedure Delete (Repeat : Integer := 1);

  Deletes the next Repeat lines beginning with the current line.
  Negative values delete previous lines beginning with the current
  line.
  @node !Commands.Editor.Line.Delete_Backward

  procedure Delete_Backward (Repeat : Integer := 1);

  Deletes Repeat lines from the cursor back to the left margin and
  Repeat -- 1 full line above the current line.

  When Repeat = 1, this procedure deletes characters back to column 1
  but not the line itself.
  @node !Commands.Editor.Line.Delete_Forward

  procedure Delete_Forward (Repeat : Integer := 1);

  Deletes from the cursor to the end of the line and Repeat -- 1
  lines following.
  @node !Commands.Editor.Line.End_Of

  procedure End_Of (Offset : Natural := 0);

  Moves the cursor after the last nonblank character in the line, if
  Offset = 0.

  This procedure uses the Offset value to adjust the new cursor
  position by Offset columns from the end of the line toward the
  beginning of the line.
  @node !Commands.Editor.Line.Indent

  procedure Indent (Repeat : Integer := 1);

  Opens Repeat new lines before the current line and indents to the
  previous indentation.

  If the cursor is within the current line, the procedure splits the
  line at the cursor position.
  @node !Commands.Editor.Line.Insert

  procedure Insert (Repeat : Integer := 1);

  Opens Repeat new lines before the current line.

  If the cursor is within the current line, the procedure splits the
  line at the cursor position.  If Repeat = 0, no line is opened.
  Negative values cause the absolute value of Repeat lines to be
  before the current line, without splitting the current line at the
  cursor position.
  @node !Commands.Editor.Line.Join

  procedure Join (Repeat : Integer := 1);

  Joins the next Repeat lines to the current line, leaving the cursor
  on the first character that came from the last line.
  @node !Commands.Editor.Line.Lower_Case

  procedure Lower_Case (Repeat : Integer := 1);

  Converts the next Repeat lines from uppercase to lowercase starting
  at the cursor position in the current line and leaves the cursor at
  the beginning of the following line.
  @node !Commands.Editor.Line.Next

  procedure Next (Repeat : Integer := 1) renames Cursor.Down;

  Moves the cursor down Repeat lines.
  @node !Commands.Editor.Line.Open

  procedure Open (Repeat : Integer := 1);

  Opens Repeat new lines but does not change the cursor position.

  If the cursor is within the line, the line is split.  If Repeat
  = 0, no line is added and the line is not split.  If Repeat is a
  negative value, the line is not split, but the absolute value of
  Repeat lines are inserted before the current line.
  @node !Commands.Editor.Line.Previous

  procedure Previous (Repeat : Integer := 1) renames Cursor.Up;

  Moves the cursor up Repeat lines.
  @node !Commands.Editor.Line.Transpose

  procedure Transpose (Offset : Integer := 1);

  Exchanges the current and previous lines.

  The cursor position that results depends on the value of the
  Cursor_Transpose_Moves session switch.  If the value is true,
  the cursor is moved down one line.  If it is false, the cursor
  position is not changed.  See SJM, Session Switches, for more
  information on session switches.  The Offset parameter is currently
  not implemented.
  @node !Commands.Editor.Line.Upper_Case

  procedure Upper_Case (Repeat : Integer := 1);

  Converts the next Repeat lines starting at the cursor position in
  the current line from lowercase to uppercase and leaves the cursor
  at the beginning of the following line.
  @node !Commands.Editor.Macro
  package Macro is
    procedure Start;
    procedure Finish;
    procedure Execute (Repeat   : Integer := 1;
                      Prior    : Natural := 0);
    procedure Bind    (Key      : String  := "");
    procedure Save    (Expanded : Boolean := False);
    procedure Restore;
  end Macro;

  A macro is a sequence of editor procedures that can be invoked with
  a single command.  Macros can be bound to a key or referenced as
  the current macro.

  To define a keyboard macro:

  1. Execute the Start procedure from a key (by pressing [Mark] -
     [Begin_Of ] on the Rational Terminal).

  2. Enter a sequence of commands or characters from the keyboard.
     The editor will remember each keystroke in sequence.

  3. Execute the Finish procedure from a key (by pressing [Mark] -
     [End_Of ] on the Rational Terminal).

  Execute the macro Repeat times with the Execute procedure.

  The editor allows only one unbound keyboard macro definition at a
  time.  This macro is sometimes referred to as the current macro.
  A new definition replaces an existing definition.  However, the
  current macro can be invoked while a new macro is being defined.

  A macro can be bound to a key and stored for the duration of the
  session with the Bind procedure.  Macros can be saved between
  sessions with the Save procedure.  They are written into a file
  in the user's home world.  Typically, the filename identifies
  the terminal type---for example, Rational_Macros.  This file is
  processed at login.

  A macro file can be edited once it has been saved.

  Each macro that has been bound has a number.  This number is
  displayed when the Bind procedure is executed.  This number is also
  displayed when the Execute procedure is used to execute macros.
  The current macro is number 0.

  If a macro is executed from an Ada program by calling the Execute
  procedure, the macro will not be executed until the job completes.
  @node !Commands.Editor.Macro.Bind

  procedure Bind (Key : String := "");

  Binds the current keyboard macro to Key and assigns it a number.

  This procedure prompts for a key for binding the macro and displays
  the number assigned to the macro.  The key name is the name of the
  key for the terminal you are using.  You can determine this name
  by pressing [Help on Key].  The key name will appear in the Message
  window.
  @node !Commands.Editor.Macro.Execute

  procedure Execute (Repeat : Integer := 1;
                    Prior  : Natural := 0);

  Executes a keyboard macro Repeat times.

  If Prior = 0, the current macro is executed.  If Prior does not
  equal 0, the macro with the number indicated by Prior is executed.
  See the Bind procedure for more information on macro numbers.

  If a macro is executed from an Ada program by calling the Execute
  procedure, the macro will not be executed until the job completes.
  @node !Commands.Editor.Macro.Finish

  procedure Finish;

  Ends a macro definition.

  Note that this command must be executed from a bound key and not
  from a Command window.
  @node !Commands.Editor.Macro.Restore

  procedure Restore;

  Rereads the macro file.

  Macro files are read by the system only when the user logs in.
  Thus, if the user edits the macro file, the new contents of the
  file will not be known to the system unless it rereads the macro
  file.  The user can execute this procedure to force the system to
  read the macro file without logging out and logging back in again.
  @node !Commands.Editor.Macro.Save

  procedure Save (Expanded : Boolean := False);

  Saves the current macro file.

  The Expanded parameter saves the macro file in user-readable
  format, which means that you can edit the macros saved in the
  file.  When you save a macro file, it overwrites the current macro
  file.
  @node !Commands.Editor.Macro.Start

  procedure Start;

  Begins a macro definition.

  Note that this command must be executed from a bound key and not
  from a Command window.
  @node !Commands.Editor.Mark
  package Mark is
    procedure Copy_Top;
    procedure Delete_Top;
    procedure Next        (Repeat : Integer := 1);
    procedure Previous    (Repeat : Integer := 1);
    procedure Push        (Repeat : Integer := 1);
    procedure Rotate      (Repeat : Integer := 1);
    procedure Swap;
    procedure Top;
  end Mark;

  A mark is a remembered image position.  The Rational Editor
  remembers marks as absolute image positions on the quarter plane.
  Mark positions do not change to adjust for inserted or deleted
  lines and characters.

  Use the Push procedure to set a mark.  The Top procedure then
  returns the cursor to the most recently set mark, returning the
  image to the screen, if necessary, for the marked image to be
  visible.  The Next and Previous procedures move from mark to mark
  as they are ordered on the stack.  At the bottom of the stack,
  the Next procedure wraps to the top.  At the top, the Previous
  procedure wraps to the bottom.  The Copy_Top procedure makes
  another copy of the top mark on the stack on the top of the stack.
  The Delete_Top procedure removes the top mark from the stack.  The
  Swap procedure swaps the top two marks on the stack.  The Rotate
  procedure moves the bottom mark on the stack to the top of the
  stack.

  The mark stack holds up to 100 marks.  Since there is only one mark
  stack for all images, marks can be used to move from image to image
  as well as from point to point within an image.
  @node !Commands.Editor.Mark.Copy_Top

  procedure Copy_Top;

  Makes another copy of the top mark of the mark stack on the top of
  the mark stack.

  The result is that there are two copies of the top item on the top
  of the mark stack.
  @node !Commands.Editor.Mark.Delete_Top

  procedure Delete_Top;

  Deletes the top item on the mark stack.
  @node !Commands.Editor.Mark.Next

  procedure Next (Repeat : Integer := 1);

  Moves to the position specified by Repeat next mark.

  At the bottom of the stack, this procedure wraps to the top.  If
  Repeat = 0, it does nothing.  If Repeat is a negative value, it
  moves to the Repeat previous mark.
  @node !Commands.Editor.Mark.Previous

  procedure Previous (Repeat : Integer := 1);

  Moves to the Repeat previous mark.

  At the top of the stack, this procedure wraps to the bottom.  If
  Repeat = 0, it does nothing.  If Repeat is a negative value, it
  moves to the Repeat next mark.
  @node !Commands.Editor.Mark.Push

  procedure Push (Repeat : Integer := 1);

  Sets Repeat marks at the cursor and pushes them onto the stack.

  If Repeat = 0 or a negative value, the procedure does nothing.
  @node !Commands.Editor.Mark.Rotate

  procedure Rotate (Repeat : Integer := 1);

  Rotates Repeat number of marks from the bottom of the stack to the
  top of the stack.

  If Repeat = 0, the procedure does nothing.  If Repeat is a negative
  value, it rotates Repeat number of items from the top of stack to
  the bottom of the stack.
  @node !Commands.Editor.Mark.Swap

  procedure Swap;

  Swaps the top two marks on the mark stack.

  The mark next to the top of the mark stack becomes the top mark of
  the mark stack.  The top mark of the mark stack becomes the mark
  next to the top of the mark stack.
  @node !Commands.Editor.Mark.Top

  procedure Top;

  Moves to the mark at the top of the stack.
  @node !Commands.Editor.Region

  package Region is
    procedure Beginning_Of;
    procedure Capitalize;
    procedure Comment;
    procedure Copy;
    procedure Delete;
    procedure End_Of;
    procedure Fill        (Column  : Natural := 0;
                          Leading : String  := "");
    procedure Finish;
    procedure Justify     (Column  : Natural := 0;
                          Leading : String  := "");
    procedure Lower_Case;
    procedure Move;
    procedure Off;
    procedure On;
    procedure Start;
    procedure Uncomment;
    procedure Upper_Case;
  end Region;

  Package Region contains procedures for making and manipulating
  selections.  To make a selection with the Region package, indicate
  the beginning with the Start procedure, and then move the cursor to
  the end and indicate it with the Finish procedure.  The commands in
  package Common.Object (EST) can also be used to make selections.
  The Rational Editor highlights the selection in a different font.
  It highlights only one selection at a time.  You can use the Off
  and On procedures to unselect and reselect a selection.

  The locations of selections of text can be stored in the hold
  stack.  For further information, see package Hold_Stack.
  @node !Commands.Editor.Region.Beginning_Of

  procedure Beginning_Of;

  Moves the cursor to the beginning of the current selection, if the
  cursor and the selection are in the same window.

  If there is no selection in the current window, the procedure does
  nothing.
  @node !Commands.Editor.Region.Capitalize

  procedure Capitalize;

  Capitalizes the first letter in all the words in the selection.

  If the cursor and the selection are not in the same window, the
  procedure does nothing.
  @node !Commands.Editor.Region.Comment

  procedure Comment;

  Puts comment characters (-- ) before the leftmost character of each
  line in the current selection.

  If a line is already commented in that se-
  lection, additional comment characters
  (-- ) are inserted in front of it.
  @node !Commands.Editor.Region.Copy

  procedure Copy;

  Copies the current selection to the cursor location.

  The selection and the cursor can be in different windows.
  @node !Commands.Editor.Region.Delete

  procedure Delete;

  Deletes the current selection and pushes it onto the hold stack.

  The cursor and the selection must be in the same window.
  @node !Commands.Editor.Region.End_Of

  procedure End_Of;

  Moves the cursor to the end of the current selection.

  The cursor and the selection must be in the same window.
  @node !Commands.Editor.Region.Fill

  procedure Fill (Column  : Natural := 0;
                 Leading : String  := "");

  Adjusts the placement of all words in the selection to fill
  completely the column between the left edge of the image and the
  defined right margin (the Column parameter).

  If Column = 0 (the default), the fill column defined by the
  Image_Fill_Column session switch is used (described in SJM,
  Session Switches).  The Fill command puts as many words as possible
  on a line, but it leaves a ragged right margin.  It also leaves
  only one space between words.

  The Leading parameter allows a character string to be inserted
  at the beginning of each line in the selection.  This can be
  used, for example, to insert the comment delimiter, (-- ),
  into the selection.  If the null string (the default), is used
  for the parameter, then the leading string defined by the
  Image_Fill_Prefix session switch is used (described in SJM,
  Session Switches).
  @node !Commands.Editor.Region.Finish

  procedure Finish;

  Marks the endpoint of a text selection.
  @node !Commands.Editor.Region.Justify

  procedure Justify (Column  : Natural := 0;
                    Leading : String  := "");

  Adjusts the placement of all words in the selection to justify the
  selection flush left between the left edge of the image and the
  defined right margin (the Column parameter).

  If Column = 0 (the default), the fill column defined by the
  Image_Fill_Column session switch is used (described in SJM,
  Session Switches).  The Justify command puts as many words as
  possible on a line and inserts spaces so that the right margin is
  even.

  The Leading parameter allows a character string to be inserted at
  the beginning of each line in the selection.  This can be used, for
  example, to insert the comment delimiter (-- ) into the selection.
  If the null string (the default) is used for the parameter, the
  leading string defined by the Image_Fill_Prefix session switch is
  used (described in SJM, Session Switches).

  By default, the Justify command does not compress extra spaces
  after the period (.), exclamation mark (!), and question mark (?)
  when filling an image.  However, this default can be changed by
  modifying the Image_Fill_Extra_Space session switch.  (See SJM,
  Session Switches, for more information on session switches.)

  Also by default, the Justify command indents subsequent lines to
  the indent level of the first line of the region.  However, this
  default can be changed by modifying the Image_Fill_Indent session
  switch.  A value of -1 for this switch (the default) specifies that
  the indentation of the first line of the region should be used for
  subsequent lines.  Values greater than or equal to 0 indent the
  region the number of spaces that is the value of the switch.
  @node !Commands.Editor.Region.Lower_Case

  procedure Lower_Case;

  Converts all characters in the selection to lowercase.

  The cursor and the selection must be in the same window.
  @node !Commands.Editor.Region.Move

  procedure Move;

  Deletes the current selection and copies it at the cursor.

  The cursor and the selection must be in the same window.
  @node !Commands.Editor.Region.Off

  procedure Off;

  Unselects the current selection.

  The cursor and the selection must be in the same window.
  @node !Commands.Editor.Region.On

  procedure On;

  Reselects a selection that has been unselected with the Off
  procedure.

  The cursor and the selection must be in the same window.
  @node !Commands.Editor.Region.Start

  procedure Start;

  Marks the start of a selection.
  @node !Commands.Editor.Region.Uncomment

  procedure Uncomment;

  Removes comment characters (-- ) from lines in which they are the
  leftmost three nonblank characters.

  This procedure does not remove comments from the end of lines
  containing Ada code.  The cursor and the selection must be in the
  same window.
  @node !Commands.Editor.Region.Upper_Case

  procedure Upper_Case;

  Converts the selection to uppercase.

  The cursor and the selection must be in the same window.
  @node !Commands.Editor.Screen

  package Screen is
    procedure Down        (Repeat  : Integer := 1);
    procedure Left        (Repeat  : Integer := 1);
    procedure Right       (Repeat  : Integer := 1);
    procedure Up          (Repeat  : Integer := 1);
    procedure Dump        (To_File : String  := ">>NAME<<");
    procedure Redraw;
    procedure Clear;
    procedure Copy_Top;
    procedure Delete_Top;
    procedure Next        (Repeat  : Integer := 1);
    procedure Previous    (Repeat  : Integer := 1);
    procedure Push        (Repeat  : Integer := 1);
    procedure Rotate      (Repeat  : Integer := 1);
    procedure Swap;
    procedure Top;
  end Screen;

  The movement operations of package Screen move the cursor Repeat
  times in the indicated direction, regardless of window boundaries.

  The Clear procedure erases the contents of the screen.  The Redraw
  procedure erases the contents and then repaints the screen.

  The Dump procedure captures the contents of the screen in a file
  specified by the To_File parameter, one screen line per line.  Each
  line contains graphics control sequences embedded in text.  The
  graphics control sequences signify:

  o A graphics font for window borders.

  o Selected and unselected fonts for plain text, underlined text,
    and reverse video text.

  Package Screen provides a mechanism for saving screens on a stack
  for retrieval at a later time.  The 100 most recent screen saves
  are kept on the stack.

  The screen stack saves the windows currently on the screen,
  including their size, the cursor location, and the current viewport
  into the window.

  The Push procedure puts the current screen on the stack.  The Next
  and Previous procedures provide a mechanism for moving through the
  items on the screen stack.  They replace the current screen with
  the Next or Previous screen on the stack.  At the bottom of the
  stack, Next wraps to the top.  At the top of the stack, Previous
  moves to the bottom.  The Top procedure retrieves the screen at the
  top of the stack.  The Delete_Top procedure removes the screen at
  the top of the stack from the stack.  The Copy_Top procedure adds
  another copy of the screen on top of the stack to the top of the
  stack.  The Rotate procedure moves the screen at the bottom of the
  stack to the top of the stack.  The Swap procedure swaps the top
  two items on the top of the stack.

  If you change the contents of any of the windows, the new contents
  will be shown when the screen is retrieved from the stack.  More
  specifically, this means that if you abandon a window, it will
  not be displayed when the screen is retrieved.  A blank window
  will appear in its space.  If you have altered the contents of
  the window---for example, adding text to the window---the new
  contents of the window will be displayed.  The Message window will
  be displayed in its current state, rather than the state it was
  in when saved.  Also, Command windows will be in the state they
  were in when last used, rather than the state they were in when the
  screen was saved.

  This feature is useful when you are performing one task with a
  specific set of screens and then need to perform another task using
  a different set of screens.  You can save and later retrieve either
  one or both of the sets of screens.
  @node !Commands.Editor.Screen.Clear

  procedure Clear;

  Clears the screen completely and resets the terminal mode to ANSI.

  Use this procedure when you need to use the terminal to connect to
  another system or when modifying terminal characteristics.
  @node !Commands.Editor.Screen.Copy_Top

  procedure Copy_Top;

  Makes another copy of the top item of the screen stack on the top
  of the screen stack.

  The result is that there are two copies of the original top item of
  the screen stack on the top of the screen stack.
  @node !Commands.Editor.Screen.Delete_Top

  procedure Delete_Top;

  Removes the top item from the screen stack.

  The item next to the top of the screen stack becomes the top item
  of the screen stack.
  @node !Commands.Editor.Screen.Down

  procedure Down (Repeat : Integer := 1);

  Moves the cursor down Repeat lines, regardless of window
  boundaries.

  When the cursor reaches the last line of the screen, the procedure
  does nothing.
  @node !Commands.Editor.Screen.Dump

  procedure Dump (To_File : String := ">>NAME<<");

  Copies the contents of the screen to the file specified in the
  To_File parameter, one screen line per line, as a series of
  graphics control sequences embedded in text.

  The default To_File parameter placeholder must be replaced or an
  error will result.  If the To_File parameter is the null string,
  the procedure uses the file specified in the Screen_Dump_File
  switch.  If a simple name is not supplied to To_File, the file is
  created in the user's home world.
  @node !Commands.Editor.Screen.Left

  procedure Left (Repeat : Integer := 1);

  Moves the cursor Repeat columns to the left, regardless of window
  boundaries.

  When the cursor reaches the left edge of the screen, it stops,
  regardless of the Repeat value.
  @node !Commands.Editor.Screen.Next

  procedure Next (Repeat : Integer := 1);

  Retrieves and replaces the current screen with the next Repeat
  screen from the screen stack.

  At the bottom of the stack, this procedure wraps to the top.
  @node !Commands.Editor.Screen.Previous

  procedure Previous (Repeat : Integer := 1);

  Retrieves and replaces the current screen with the previous Repeat
  screen from the screen stack.  At the top of the stack, this
  procedure wraps to the bottom.
  @node !Commands.Editor.Screen.Push

  procedure Push (Repeat : Integer := 1);

  Pushes the current screen onto the screen stack Repeat times.
  @node !Commands.Editor.Screen.Redraw

  procedure Redraw;

  Clears the screen and then redraws it.

  This procedure typically is used following the Clear procedure.
  The Redraw procedure resets the terminal characteristics to those
  specified at login.
  @node !Commands.Editor.Screen.Right

  procedure Right (Repeat : Integer := 1);

  Moves the cursor Repeat columns to the right, regardless of window
  boundaries.
  @node !Commands.Editor.Screen.Rotate

  procedure Rotate (Repeat : Integer := 1);

  Takes Repeat items from the bottom of the screen stack and places
  them in order on the top.
  @node !Commands.Editor.Screen.Swap

  procedure Swap;

  Swaps the top two items on the screen stack.
  @node !Commands.Editor.Screen.Top

  procedure Top;

  Retrieves the top item on the screen stack and replaces the current
  screen with the screen saved on the top of the stack.
  @node !Commands.Editor.Screen.Up

  procedure Up (Repeat : Integer := 1);

  Moves the cursor up Repeat lines, regardless of window boundaries.

  When the cursor reaches the first line of the screen, the procedure
  does nothing.
  @node !Commands.Editor.Search
  package Search is
    procedure Previous         (Target      : String  := "";
                               Wildcard    : Boolean := False);
    procedure Next            (Target      : String  := "";
                               Wildcard    : Boolean := False);
    procedure Replace_Previous (Target      : String  := "";
                               Replacement : String  := "";
                               Repeat      : Integer := 1;
                               Wildcard    : Boolean := False);
    procedure Replace_Next     (Target      : String  := "";
                               Replacement : String  := "";
                               Repeat      : Integer := 1;
                               Wildcard    : Boolean := False);
  end Search;

  Package Search contains both search operations and replace
  operations.  The Next and Previous procedures move through
  the image in the indicated directions, looking for a string
  matching the Target string.  The Replace_Next and Replace_Previous
  procedures move similarly through the image with the intent of
  replacing the Target string with the Replacement string.

  All four of these procedures are bound to keys (see the Rational
  Environment Keymap in Volume 1 of the Rational Environment
  Reference Manual).

  The search operations find the next or previous occurrence of the
  Target string.  Using the keys to which these operations are bound,
  a search for the nth occurrence can be accomplished by pressing
  the key n times.  The search direction can be reversed without
  respecifying the Target string by pressing the key that is bound to
  the search operation of the opposite direction.

  The replace operations, when the Repeat parameter is greater than
  1, search for and replace Repeat occurrences of the Target string
  with the Replacement string.  If the cursor is currently on (or,
  if using Replace_Next, one position beyond) an occurrence of the
  Target string, that occurrence is the first one replaced.

  The Target and Replacement strings are entered in the Message
  window.  When one of the keys is pressed, prompts appear in the
  Message window for the necessary strings.  Cursor-movement keys,
  character- and line-delete keys, and beginning and end keys all
  work while these search and replace strings are composed.  You
  can also use [Next Item ] and [Previous Item] to move between the
  Target and Replacement strings.  The Message window banner also
  notes that search strings are being composed.  The composing of
  search and replace strings can be interrupted with the [Control][G]
  key combination.  Composing of search and replace strings is
  completed by pressing the appropriate search or replace key again.

  If the search operations are called from Ada programs instead of
  being initiated from keys, the user will not be prompted for the
  arguments in the Message window; instead, the arguments supplied in
  the calls will be used.

  The replace operations, when the Repeat parameter equals 1 (the
  default), search for the first occurrence of the Target string and
  then stop, awaiting a response.  There are five choices at that
  point:

  o The occurrence can be replaced and the next occurrence searched
    for by pressing one of the replace keys again.  The direction
    of searching can be reversed without respecifying the Target
    or Replacement strings by pressing the key that is bound to the
    replace operation of the opposite direction.

  o The occurrence can be skipped by pressing one of the search keys.
    The next occurrence is searched for.

  o The occurrence can be replaced and the search discontinued by
    pressing [Numeric 0] followed by the appropriate replace key.

  o The occurrence and all remaining occurrences can be replaced by
    pressing [Numeric --], followed by [Numeric 1], followed by the
    appropriate replace key.

  o The replace operation can be abandoned completely, bypassing any
    remaining occurrences of the Target string, by pressing any other
    key.  The command bound to the other key is executed.

  The Next and the Replace_Next procedures always leave the
  cursor one position beyond the Target or Replacement string,
  respectively.  The Previous and Replace_Previous procedures
  always leave the cursor on the first character of the Target or
  Replacement string, respectively.

  The commands in package Search can use regular expressions.
  Regular expressions allow pattern matching.  A pattern can be
  specified with special metacharacters in the Target string that
  could match many different strings in the image.  Matches can occur
  within a line; matches never span multiple lines.

  The Wildcard parameter specifies whether any metacharacters in
  either the Target or the Replacement string should be treated as
  normal characters (false) or as wildcard characters (true).

  The metacharacters include:

  ?  Matches any single character.

  %  Matches any character that is legal in an Ada identifier.

  $  Matches any Ada delimiter.

  {  Matches beginning of line.

  }  Matches end of line.

  (caret)    the character or group of characters that follow from\r    Excludes
     the search.  For example, the expression (caret)A means any
     character except A.

  *  Matches zero or more occurrences of the previous character or
     set of characters.

     Treats the following special character as a regular character.

  [] Delimits a class; searches for any of the characters in this
     group.  The class represents one character.  For example, [ABC]
     matches a single character that is A, B, or C. [(caret)ABC]
     matches a single character that is not A, B, or C. Class
     searches are case-sensitive.

  For any of these procedures, if the Rational Editor cannot find
  Target, it indicates so in the Message window and leaves the image
  and cursor position unchanged.
  @node !Commands.Editor.Search.Next

  procedure Next (Target   : String  := "";
                 Wildcard : Boolean := False);

  Searches forward for the next occurrence of the Target string.

  When the Wildcard parameter is false (the default), metacharacters
  are treated as characters only.
  @node !Commands.Editor.Search.Previous

  procedure Previous (Target   : String  := "";
                     Wildcard : Boolean := False);

  Searches backward for the most recent occurrence of the Target
  string.

  When the Wildcard parameter is false (the default), metacharacters
  are treated as characters only.
  @node !Commands.Editor.Search.Replace_Next

  procedure Replace_Next (Target      : String  := "";
                         Replacement : String  := "";
                         Repeat      : Integer := 1;
                         Wildcard    : Boolean := False);

  Finds the first occurrence of the Target string and awaits a
  confirm, skip, or abandon request, if Repeat = 1.

  If the cursor is already on an occurrence, the occurrence is
  replaced and the next occurrence searched for.  If Repeat is
  greater than 1, the procedure replaces that many occurrences of
  the Target string with the Replacement string.  When the Wildcard
  parameter is false (the default), metacharacters are treated as
  simple characters.

  A value of -1 for the Repeat parameter replaces everything from the
  current cursor location to the end of the image.
  @node !Commands.Editor.Search.Replace_Previous

  procedure Replace_Previous (Target      : String  := "";
                             Replacement : String  := "";
                             Repeat      : Integer := 1;
                             Wildcard    : Boolean := False);

  Finds the previous occurrence of the Target string and awaits a
  confirm, skip, or abandon request, if Repeat = 1.

  If the cursor is already on an occurrence, the occurrence is
  replaced and the next occurrence searched for.  If Repeat is
  greater than 1, the procedure replaces that many previous
  occurrences of the Target string with the Replacement string.
  When the Wildcard parameter is false (the default), metacharacters
  are treated as simple characters.

  A value of -1 for the Repeat parameter replaces everything from the
  current cursor location to the beginning of the image.
  @node !Commands.Editor.Set
  package Set is
    procedure Insert_Mode        (On        : Boolean    := True);
    procedure Fill_Mode          (On        : Boolean    := True);
    procedure Fill_Column        (Column    : Positive   := 64);
    procedure Designation_Off;
    procedure Input_From         (File_Name : String     := "<SELECTION>");
    procedure Input_Logging_To   (File_Name : String     := ">>Name<<");
    procedure Input_Logging_Off;
    procedure Tab_Off           (Column    : Positive);
    procedure Tab_On            (Column    : Positive);
    procedure Tab_Width          (Size      : Positive   := 4);
    procedure Argument_Prefix;
    procedure Argument_Digit     (Argument  : Integer    := 1);
    procedure Argument_Minus;
  end Set;

  Package Set contains procedures for setting editor parameters.
  Many of these parameters can also be changed through session
  switches.  See SJM, Session Switches, for more information on
  session switches.

  The Designation_Off procedure converts the indicated (prompt or
  selection) to plain text.

  The Insert_Mode procedure sets insert and overwrite modes.  The
  Fill_Mode procedure, when its parameter specifies true, instructs
  the editor to wrap text lines whose length exceeds that specified
  in the Column parameter of the Fill_Column procedure.

  The Argument procedures cannot be called from a Command window but
  must be invoked through key bindings.

  The Input procedures all pertain to log files.  The
  Input_Logging_To procedure specifies a File_Name to which
  the editor should begin recording all user keystrokes.  The
  Input_Logging_Off procedure instructs the editor to stop logging
  keystrokes.  The Input_From procedure instructs the editor to read
  and execute the keystrokes saved by the Input_Logging_To procedure
  in File_Name.

  If the Input_From procedure is called from an Ada program, the
  keystrokes in the file execute sequentially when the job performing
  the call completes.

  @node !Commands.Editor.Set.Argument_Digit

  procedure Argument_Digit (Argument : Integer := 1);

  Specifies a count for the following operation.

  The procedure is bound to a key; when entered from a Command
  window, the procedure has no effect.  The count can be used as
  a repeat count or other parameter to the following operation.
  Entering a sequence of argument digits produces a number.  For
  example, entering the digits 3 and 5 produces an argument digit of
  35.
  @node !Commands.Editor.Set.Argument_Minus

  procedure Argument_Minus;

  Specifies a negative value for the following argument.

  The procedure is bound to a key; when entered from a Command
  window, the procedure has no effect.
  @node !Commands.Editor.Set.Argument_Prefix

  procedure Argument_Prefix;

  Indicates to the editor that a command argument is being entered.

  The procedure is bound to a key; when entered from a Command
  window, the procedure has no effect.  This procedure takes numbers
  entered on the main keyboard and converts them to numeric keypad
  argument digits.  For example, this would be used if a keyboard
  did not contain a numeric keypad or if the numeric keypad keys were
  bound to something else.
  @node !Commands.Editor.Set.Designation_Off

  procedure Designation_Off;

  Converts the prompt or selection in which the cursor is located to
  normal text.

  This procedure makes it possible to edit and reuse prompts.
  @node !Commands.Editor.Set.Fill_Column

  procedure Fill_Column (Column : Positive := 64);

  Sets the desired column width for fill mode or for the Region.Fill
  and Region.Justify procedures.

  The column width can also be specified through a session switch
  (see SJM, Session Switches).
  @node !Commands.Editor.Set.Fill_Mode

  procedure Fill_Mode (On : Boolean := True);

  Wraps long text lines at the column position specified in the
  Fill_Column procedure, when true.

  The mode is specified only for the current image.  The fill
  mode can also be changed by a session switch (see SJM, Session
  Switches).
  @node !Commands.Editor.Set.Input_From

  procedure Input_From (File_Name : String := "<SELECTION>");

  Specifies a log file in the File_Name parameter (created with the
  Input_Logging_To procedure) from which the editor should read and
  execute keystrokes.

  The default is the current selection.

  If the Input_From procedure is called from an Ada program, the
  keystrokes in the file execute sequentially when the job performing
  the call completes.
  @node !Commands.Editor.Set.Input_Logging_Off

  procedure Input_Logging_Off;

  Stops logging keystrokes.
  @node !Commands.Editor.Set.Input_Logging_To

  procedure Input_Logging_To (File_Name : String := ">>Name<<);

  Logs all keystrokes to File_Name.

  The parameter placeholder ">>Name<<" must be replaced or an error
  will result.
  @node !Commands.Editor.Set.Insert_Mode

  procedure Insert_Mode (On : Boolean := True);

  Sets insert or overwrite modes for the current image.

  The insert and overwrite modes can also be changed by session
  switches (see SJM, Session Switches).
  @node !Commands.Editor.Set.Tab_Off

  procedure Tab_Off (Column : Positive);

  Removes a tab stop from the specified Column for all images.

  The tab stops can also be changed permanently using session
  switches (see SJM, Session Switches).
  @node !Commands.Editor.Set.Tab_On

  procedure Tab_On (Column : Positive);

  Sets a tab stop in the specified Column for all images.

  The tab stops can also be changed with session switches (see SJM,
  Session Switches).

  You can see the current tab settings by executing the
  !Commands.What.Tabs procedure.  Tab stops can be added to the
  settings set by the Tab_Width procedure with the Tab_On procedure.
  @node !Commands.Editor.Set.Tab_Width

  procedure Tab_Width (Size : Positive := 4);

  Sets the number of spaces between tab stops (in columns) for all
  images.

  The tab width can also be changed (see SJM, Session Switches).

  You can see the current tab settings by executing the
  !Commands.What.Tabs procedure.  Tab stops can be added to the
  settings set by the Tab_Width procedure with the Tab_On procedure.
  @node !Commands.Editor.Window
  package Window is
    procedure Beginning_Of (Offset  : Natural    := 0);
    procedure Child        (Repeat  : Integer    := 1);
    procedure Copy;
    procedure Delete;
    procedure Demote;
    procedure Directory;
    procedure End_Of       (Offset  : Natural    := 0);
    procedure Expand       (Lines   : Integer    := 4);
    procedure Focus;
    procedure Frames       (Maximum : Positive);
    procedure Join         (Repeat  : Integer    := 1);
    procedure Next         (Repeat  : Integer    := 1);
    procedure Parent       (Repeat  : Integer    := 1);
    procedure Previous     (Repeat  : Integer    := 1);
    procedure Promote;
    procedure Transpose    (Offset  : Integer    := 1);
  end Window;

  The procedures in package Window provide facilities for managing
  windows and include a number of commands that control window size
  and disposition.

  A window can be in one of three states (ordered from highest to
  lowest):

  o Frozen (also called locked) (banner symbol:  @)

  o Normal

  o Replace (banner symbol:  ~)

  The Promote and Demote procedures change the state of a window to
  the next higher or lower level.

  In the frozen state, the window will not be replaced and will be
  split only if there is no other space available for bringing up a
  new window.  In the normal state, the window can become eligible
  for replacement if it becomes the least recently visited window (in
  this case, it will automatically be changed to the replace state).
  If it is in the replace state, the window will be replaced the next
  time the editor needs to bring a new window on the screen (only one
  window can be in the replace state).

  Four procedures facilitate window management.  The Frames
  procedure sets the number of work windows the editor creates on
  the screen.  The editor treats each frame as a separate area for
  placing windows.  The default configuration is terminal dependent
  (for the Rational Terminal, it is three frames).  The Directory
  procedure displays a list of active images in the Window Directory.
  The Window Directory allows various operations on these active
  images.  The Promote procedure elevates a minor window to its own
  frame (making it a major window) or changes a major window to the
  next higher state.  The Demote procedure changes a window to the
  next lower state.

  Several operations modify the configuration of windows on the
  screen.  The Join, Transpose, and Delete procedures behave
  similarly to their counterparts in packages Word and Line.

  The Child, Parent, Next, and Previous procedures move between
  windows.  The Beginning_Of and End_Of procedures scroll a window to
  reposition the cursor to the first or last line of the window.

  The editor manages the size, shape, and position of windows.
  Nevertheless, the editor provides the user a procedure for
  affecting these window attributes.  The Expand procedure increases
  the size, in lines, of the current or most recently used window.
  The most recently used window is the one in which a command (other
  than a cursor-movement command) was last entered.

  The Focus procedure restores the screen to the state specified by
  the current defaults.

  Many of the aspects of how windows are displayed on the screen can
  be tailored with session switches.  See SJM, Session Switches, for
  more information on session switches.
  @node !Commands.Editor.Window.Beginning_Of

  procedure Beginning_Of (Offset : Natural := 0);

  Scrolls the image to move the cursor to the top of the window.

  This procedure uses the Offset value to adjust the new cursor
  position by Offset lines from the top of the window.
  @node !Commands.Editor.Window.Child

  procedure Child (Repeat : Integer := 1);

  Moves the cursor Repeat times to the next window in the current
  frame.
  @node !Commands.Editor.Window.Copy

  procedure Copy;

  Divides the window into two views on the same image.

  The procedure does not duplicate the Command window.  The two views
  are separate frames.
  @node !Commands.Editor.Window.Delete

  procedure Delete;

  Removes the window in a minor or Command window.

  The space for that window is returned to the major window with
  which it is associated.  In a major window, the procedure removes
  the major window and its associated minor and Command windows from
  the screen.  Windows removed from the screen are not destroyed.
  Major windows and their contents can be retrieved from the Window
  Directory or by retrieving their definition.  Command windows and
  their contents can be retrieved by creating the Command window
  again.  Minor windows and their contents can be retrieved by
  pressing [Definition] from the enclosing Ada unit or library or
  by using the Window Directory.
  @node !Commands.Editor.Window.Demote

  procedure Demote;

  Changes the state of the current window to the next lower state.

  A window can be in one of three states (ordered from highest to
  lowest):

  o Frozen (banner symbol:  @)

  o Normal

  o Replace (banner symbol:  ~)

  The Promote and Demote procedures change the state of a window to
  the next higher or lower level.

  In the frozen state, the window will not be replaced and will be
  split only if there is no other space available for bringing up a
  new window.  In the normal state, the window can become eligible
  for replacement if it becomes the least recently visited window (in
  this case, it will automatically be changed to the replace state).
  If it is in the replace state, the window will be replaced the next
  time the editor needs to bring a new window on the screen (only one
  window can be in the replace state).
  @node !Commands.Editor.Window.Directory

  procedure Directory;

  Displays a list of the currently active images in an image.

  This image, called the Window Directory, allows various operations
  on these active images.  See EST, Window Directory, for more
  information.
  @node !Commands.Editor.Window.End_Of

  procedure End_Of (Offset : Natural := 0);

  Scrolls the image to move the cursor to the bottom of the window.

  This procedure uses the Offset value to adjust the new cursor
  position by Offset lines from the bottom of the window.  If Offset
  is greater than the number of lines in the window, it moves the
  cursor to the first line of the file and an error results.
  @node !Commands.Editor.Window.Expand

  procedure Expand (Lines : Integer := 4);

  Enlarges the window by the specified number of Lines, taking lines
  from an adjacent frame or neighboring window.
  @node !Commands.Editor.Window.Focus

  procedure Focus;

  Restores the frame sizes, dividing the screen equally among the
  current number of frames.
  @node !Commands.Editor.Window.Frames

  procedure Frames (Maximum : Positive);

  Sets the maximum number of frames the editor will create on the
  screen.

  A session switch controls the number of frames, but this procedure
  can be used to override that value for the current session.
  @node !Commands.Editor.Window.Join

  procedure Join (Repeat : Integer := 1);

  Increases current window size by joining the current and next
  Repeat frames.
  @node !Commands.Editor.Window.Next

  procedure Next (Repeat : Integer := 1);

  Moves the cursor down Repeat frames.

  From the bottom frame, the cursor wraps to the top of the screen.
  @node !Commands.Editor.Window.Parent

  procedure Parent (Repeat : Integer := 1);

  Moves the cursor Repeat times to the previous window in the current
  frame.
  @node !Commands.Editor.Window.Previous

  procedure Previous (Repeat : Integer := 1);

  Moves the cursor up Repeat frames.

  At the top of the screen, the cursor wraps to the bottom of the
  screen.
  @node !Commands.Editor.Window.Promote

  procedure Promote;

  Changes the current window to the next higher state or makes a
  minor window a major window.

  A window can be in one of three states (ordered from highest to
  lowest):

  o Frozen (banner symbol:  @)

  o Normal

  o Replace (banner symbol:  ~)

  The Promote and Demote procedures change the state of a window to
  the next higher or lower level.

  In the frozen state, the window will not be replaced and will be
  split only if there is no other space available for bringing up a
  new window.  In the normal state, the window can become eligible
  for replacement if it becomes the least recently visited window (in
  this case, it will automatically be changed to the replace state).
  If it is in the replace state, the window will be replaced the next
  time the editor needs to bring a new window on the screen (only one
  window can be in the replace state).
  @node !Commands.Editor.Window.Transpose

  procedure Transpose (Offset : Integer := 1);

  Exchanges the current frame with another.

  The default Offset value specifies the previous frame.  An Offset
  value greater than 1 ignores intervening frames.  A negative Offset
  value exchanges the current frame with a next frame.

  The cursor position that results depends on the value of the
  Cursor_Transpose_Moves session switch.  If the value is true,
  the cursor is left in the window that was the current window or, if
  no windows are below it, the first window on the screen below the
  Message window.  If the value is false, the cursor is left in the
  window that replaces the window that was the current window.  See
  SJM, Session Switches, for more information on session switches.
  @node !Commands.Editor.Word
  package Word is
    procedure Beginning_Of;
    procedure Breaks          (Break_Set      : String  := "";
                              Are_Delimiters : Boolean := True);
    procedure Capitalize      (Repeat         : Integer := 1);
    procedure End_Of;
    procedure Delete          (Repeat         : Integer := 1);
    procedure Delete_Backward (Repeat         : Integer := 1);
    procedure Delete_Forward  (Repeat         : Integer := 1);
    procedure Lower_Case      (Repeat         : Integer := 1);
    procedure Next           (Repeat         : Integer := 1);
    procedure Previous        (Repeat         : Integer := 1);
    procedure Transpose       (Offset         : Integer := 1);
    procedure Upper_Case      (Repeat         : Integer := 1);
  end Word;

  The operations in package Word manipulate strings of characters
  separated by word delimiters.  The default includes blank and
  Ada delimiters.  Word delimiters can be changed with the Breaks
  procedure.

  Except for the Delete procedure, which erases an entire word, the
  editing and movement commands affect the next, previous, or current
  word from the cursor forward to the next end of word or from the
  cursor back to the previous beginning of word.
  @node !Commands.Editor.Word.Beginning_Of

  procedure Beginning_Of;

  Moves the cursor to the first character of the current word.
  @node !Commands.Editor.Word.Breaks

  procedure Breaks (Break_Set      : String  := "";
                   Are_Delimiters : Boolean := True);

  Redefines the set of break characters to be used in the current
  session.

  The Break_Set string is an unordered set of characters.  Each
  character, if the Are_Delimiters parameter has been set to true for
  it, delimits a word boundary.  This procedure can be used to tailor
  the editor to define words for particular uses.

  At login, the break characters for the current session are set to
  the value of the Word_Breaks session switch.  By default, the break
  characters are:

        " "#%&'()*+,-./:;<=>?[]_`{|}~"

  A value of false for the Are_Delimiters parameter removes the
  characters specified by Break_Set from the set of break characters
  for the current session.
  @node !Commands.Editor.Word.Capitalize

  procedure Capitalize (Repeat : Integer := 1);

  Capitalizes the first letter of the next Repeat words.

  After the operation, the cursor appears on the character after the
  last target word.
  @node !Commands.Editor.Word.Delete

  procedure Delete (Repeat : Integer := 1);

  Deletes the next Repeat words.
  @node !Commands.Editor.Word.Delete_Backward

  procedure Delete_Backward (Repeat : Integer := 1);

  Deletes the previous Repeat words from the cursor backward.
  @node !Commands.Editor.Word.Delete_Forward

  procedure Delete_Forward (Repeat : Integer := 1);

  Deletes the next Repeat words from the cursor forward.
  @node !Commands.Editor.Word.End_Of

  procedure End_Of;

  Moves the cursor to the last character of the current word.
  @node !Commands.Editor.Word.Lower_Case

  procedure Lower_Case (Repeat : Integer := 1);

  Converts the next Repeat words to lowercase.

  After the operation, the cursor appears immediately after the last
  target word.
  @node !Commands.Editor.Word.Next

  procedure Next (Repeat : Integer := 1);

  Moves the cursor forward Repeat words.

  After the operation, the cursor appears immediately after the
  Target word.
  @node !Commands.Editor.Word.Previous

  procedure Previous (Repeat : Integer := 1);

  Moves the cursor back Repeat words.

  After the operation, the cursor appears on the first character of
  the target word.
  @node !Commands.Editor.Word.Transpose

  procedure Transpose (Offset : Integer := 1);

  Exchanges the current and previous words.

  The cursor position that results depends on the value of the
  Cursor_Transpose_Moves session switch.  If the value is true,
  the cursor is moved to the word delimiter at the end of the
  exchanged word.  If it is false, the position of the cursor is
  not changed.  See SJM, Session Switches, for more information on
  session switches.

  The Offset parameter is currently not implemented and is reserved
  for future development.
  @node !Commands.Editor.Word.Upper_Case

  procedure Upper_Case (Repeat : Integer := 1);

  Converts the next Repeat words to uppercase.

  After the operation, the cursor appears immediately after the last
  target word