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

⟦58fa4483c⟧ TextFile

    Length: 41813 (0xa355)
    Types: TextFile
    Notes: R1k Text-file segment

Derivation

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

TextFile

INSERT
!Commands.Access_List'spec
!Commands.Access_List.Add_Default 'parent'next
!Commands.Access_List.Remove
      procedure Remove (Group : String := ">>SIMPLE NAME<<";
                        For_Object : Name := "<SELECTION>";
                        Response : String := "<PROFILE>");
      --
      -- Remove the group from the specified object(s)' access list(s).
      -- Changing the access list requires "Owner" access to the containing
      -- world.  Sends messages to a log that is under control of the
      -- Response parameter.
      
***
INSERT
!Commands.Access_List'spec
!Commands.Access_List.Remove 'parent'next
!Commands.Access_List.Remove_Default
      procedure Remove_Default (Group : String := ">>SIMPLE NAME<<";
                                For_World : Name := "<SELECTION>";
                                Response : String := "<PROFILE>");
      --
      -- Remove the group from the specified world(s)' default access list(s).
      -- Owner access to each world is required.  Sends messages to the log that
      -- is under control of the Response parameter.  Wildcards are allowed
      -- in the name.  Any non-world objects referenced are ignored.

***
REPLACE
!Commands.Archive'spec
!Commands.Archive.Save 'parent'next
!Commands.Archive.Save

    -- Save a set of objects (files, Ada units, etc.) to a tape or directory
    -- such that they may be restored to their original form at a later time
    -- or on another system.

    -- The Objects parameter specifies the primary objects to be saved.  It
    -- can be any naming expression.  By default, the current image is saved
    -- unless there is a selection on that image, in which case the selected
    -- object is saved.  Normally, the specified object(s) and all contained
    -- objects are archived; this feature can be disabled.

    -- The Options parameter specifies the type of tape to be written and
    -- options to control what is saved.  The Options parameter for each of
    -- the Archive operations is written as a sequence of option
    -- names separated by spaces or commas.  Options with arguments are
    -- given as an option name followed by an equal sign followed by a
    -- value.

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

    -- The save options are:
    --
    --   FORMAT = R1000 | R1000_LONG | ANSI
    --      R1000
    --        Writes an ANSI tape with the data file followed by the index
    --        file.  The images of the objects being saved are written
    --        directly to the tape. This is the default.

    --      R1000_LONG
    --        like R1000 format but the data file is written to one ANSI tape
    --        and the index file to a second ANSI tape.

    --      ANSI
    --        Writes the data to a temporary file and then writes both index
    --        and data file to a tape using ANSI tape facilities.

    --   LABEL=(<any balanced string>)
    --      An identifying string written at the head of the archived data.
    --      The label parameter allows the user to specify a string that
    --      will be put at the front of the index file.  When a restore is
    --      done the label specified to the restore procedure will be
    --      checked against the one on the save tape.

    --   NONRECURSIVE
    --      Save only the objects resolved to by the Objects parameter.  Do
    --      not recursively save objects that are inside of other objects.
    --      The default is to save the objects mentioned in the Objects
    --      parameter and all objects contained in them.
    --      To save a world and a subset of its contents one can say:
    --      Save (Objects => "[!FOO?,~!FOO.ABC?,~!FOO.DEF?]", ...,
    --            Options => "R1000 NONRECURSIVE");

    --   AFTER=<time_expression>
    --      Only objects changed after the time represented by
    --      <time_expression> will be archived.  The <time_expression>
    --      should be acceptable to the time_utilities.value function.

    --   STARTING_AT=<time_expression>
    --      the archive will delay until the given time
    --      (after the mount request has been processed).

    --   EFFORT_ONLY
    --      The EFFORT_ONLY option causes a list to be printed of the names
    --      of the units that would be saved if the archive command
    --      was given with this set of parameters.

    --   CODE [=load_proc_list]
    --      The CODE option specifies that code is to be archived for the
    --      named load procs. If no specification follows the
    --      CODE option, the Objects parameter specification is used
    --      instead.

    --   COMPATIBILITY_DATABASE (CDB) [=<Subsystems>]
    --      Causes the full compatibility database for each subsystem
    --      specified to be archived. If no subsystems are specified with
    --      the option, the Objects parameter specification is used instead.

    --      When Ada units in a subsystem are archived, the relevant
    --      portions of the subsystem Compatibility Database is
    --      automatically archived with them.  Therefore, this option is
    --      required only in special situations, primarily when one needs to
    --      "sync up" a primary and a secondary subsystem.

    --      To archive just Compatibility Databases, use
    --      Save ("Subsystems", "CDB");

    --      To archive compatibility databases with other objects, use
    --      Save ("Other Stuff", "CDB=Subsystems");

    --      The "Subsystems" and "Other Stuff" specifications will usually
    --      describe disjoint sets of objects.

    --   IGNORE_CDB
    --      Specifies that no compatibility database information is to be
    --      saved.

    --   LINKS [=<worlds>]
    --      Causes only the link pack for each world specified to be archived.
    --      If no worlds are specified with the option, the Objects
    --      parameter specification is used instead.

    --   PREFIX=<naming pattern>
    --      A naming pattern that is saved with the archived objects, which
    --      can be recalled as the For_Prefix when the data is Restored.
    --      When set to an appropriate value, the restorer need not know
    --      exactly the names of the archived objects to be able to restore
    --      them to a new place.  If this option is not given, the value
    --      used is derived from the Objects parameter.

    --   UNLOAD
    --      A boolean option.  When True (the default), causes the tape to
    --      be rewound and unloaded after the operation is complete.  When
    --      False, this option causes the tape to be rewound to the beginning
    --      and to remain online and available for subsequent requests.
    --      When the tape is left online, subsequent requests send a tape-
    --      mount request to the operator's console, which must be answered
    --      before the tape can be accessed.

    -- For downward compatibility the following options are provided.
    --
    --   DELTA0
    --      write a tape which can be read on a delta0 system.
    --
    --   DELTA1
    --      write a tape which can be read on a delta1 system.
    --
    --   VERSION=<archive_version_number>
    --      write a tape that can be read by a version of source
    --      earlier than the current one. The argument is a three digit
    --      integer. For example, version=440.


    -- The Device parameter can be set to the name of a directory.  In this
    -- case the index and data files are written to that directory.  The
    -- tape format option is irrelevant in this case.

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

***
REPLACE
!Commands.Archive'spec
!Commands.Archive.Restore 'parent'next
!Commands.Archive.Restore

    -- Restore an object or a set of objects from an Archive Tape.

    -- If the archive is on a tape then the tape format option given to
    -- Restore should be the same as that given during the save.  If the
    -- archive is in a directory then the device parameter on the restore
    -- should be set to that directory.

    -- The Objects parameter may be any wildcard pattern specifying the
    -- objects to be restored.
    --
    -- For example:
    --     !USERS.FOO.CLI.TEST
    --     [!USERS.FOO.TESTS.@, !USERS.FOO.LOGS.ABC]

    -- The pattern in the Objects parameter is compared against the full
    -- names of the saved objects. The objects whose names match the Objects
    -- parameter specification are restored. If the name denotes an Ada
    -- unit all of its parts are restored from the tape. If the name denotes
    -- a world or directory all of its subcomponents are restored.

    -- The Use_Prefix and For_Prefix parameters provide a simple means for
    -- changing the names of the archived objects when they are restored.

    -- If the Use_Prefix is the special default value, "*", the For_Prefix
    -- is ignored and the objects are restored using the names they had when
    -- they were saved.

    -- If the Use_Prefix is not "*", it must specify the name of an object
    -- into which the archived objects can be restored.  The name for a
    -- restored object is derived from the name of the archived object by
    -- replacing the shortest portion of the name matched by the For_Prefix
    -- with the value of the Use_Prefix.  If the For_Prefix is "*" the
    -- archived objects are restored using the Default_Prefix stored with
    -- the archived data.

    -- For example:
    --
    --   Restore (Objects    => "!A.B.C.D.E",
    --            Use_Prefix => "!X.Y",
    --            For_Prefix => "!A.B.C");
    --
    -- will restore to !X.Y.D.E.

    -- The For_Prefix may contain wildcard characters (#, @, ?) and the
    -- Use_Prefix parameter may contain substitution characters (@ or # only).

    -- For example:
    --
    --   Restore (Objects    => "[!A.B.TEST1, !D.E.F.TEST2]"
    --            For_Prefix => "?.@"
    --            Use_Prefix => "!C.D.@");
    --
    --   will restore to !C.D.TEST1 and !C.D.TEST2

    -- If the object named by the prefix of the target name of an object
    -- being restored doesn't exist, that object will be created as a set of
    -- nested libraries. So, for example, if the For_Prefix is !A.B and the
    -- unit being restored is then !A.B.X.Y.Z and ...X.Y hasn't been saved on
    -- the tape then !A, !A.B, !A.B.X, !A.B.X.Y will be created.

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

    -- The following options are allowed in the Options parameter:
    --
    --   FORMAT and LABEL
    --      as in the save option.

    --   NONRECURSIVE
    --      prevents subcomponents of libraries and Ada units from being
    --      implicitly restored. for example:
    --       Archive.Restore
    --          (Objects => "[!USERS.FOO, !USERS.FOO.CLI, !USERS.FOO.CLI.@]",
    --           Options => "R1000 NONRECURSIVE");
    --       will restore only the named objects and not their substructure.

    --   ALL_OBJECTS
    --      All specified objects are restored.  This is the default.

    --   NEW_OBJECTS
    --      Only specified objects that don't already exist on the target
    --      machine are restored.

    --   UPDATED_OBJECTS
    --      Only specified objects that already exists on the target are
    --      restored, but only if the update time of the archived object
    --      is greater than the update time on the target object.

    --   CHANGED_OBJECTS
    --      Restore both new and updated Objects.

    --   EXISTING_OBJECTS
    --      Only specified objects that already exists on the target
    --      are restored.

    --   DIFFERENT_OBJECTS
    --      Only specified objects that already exists on the target
    --      and have a different update time from the archived object are
    --      restored.

    --   REPLACE
    --       Given an object that is being restored that already exists
    --       on the target, this option will cause the restore operation
    --        (1) to unfreeze the target object if it is frozen.
    --        (2) If the target object is an installed or coded Ada unit
    --            with clients, it is demoted to source using Compilation.
    --            Demote with the "<ALL_WORLDS>" parameter.
    --            Any frozen dependents will be unfrozen.
    --        (3) if the parent library into which an object is being
    --            restored is frozen, the parent will be unfrozen to restore
    --            the object then refrozen.

    --   PROMOTE
    --      After they are restored, any Ada units will be promoted to the
    --      state they were in when they were archived.

    --   REMAKE [=NO_MAINS]
    --      Like the promote option with the further effect that
    --      any objects outside the restore set which were demoted
    --      because the replace option was given will be repromoted.
    --      If no_mains is specified dependent main programs will not
    --      be recoded.

    --   GOAL_STATE = ARCHIVED | SOURCE | INSTALLED | CODED
    --      Specify that all ada objects restored should (if possible)
    --      end up in the given state.

    --   EFFORT_ONLY
    --      Show what would be restored if restore is run with this
    --      set of parameters.

    --   CODE [=load_proc_list>]
    --      Specifies that just the Code Archive Object for the named
    --      load_procs are to be restored.  This option is needed only when
    --      it is desired to restore a Code Archive Object from an archive
    --      that also contains the spec for that load_proc, which is not
    --      to be restored.

    --   COMPATIBILITY_DATABASE, (CDB) [=<Subsystems>]
    --      Specifies that the Compatibility Databases for just the named
    --      subsystems are to be restored.

    --   IGNORE_CDB
    --      Specifies that no compatibility information is to be restored.

    --   LINKS [=<worlds>]
    --      specifies that just the link packs for the named worlds are to
    --      be restored. if no argument is given all link packs of all worlds
    --      on the tape are restored.

    --   PRIMARY
    --      restore the compatibility database as a primary, rather than as a
    --      secondary (which is the default).

    --   REVERT_CDB
    --      allow the compatibility database to be overwritten by the values
    --      in the restore.

    --   OBJECT_ACL=<acl_value>
    --   WORLD_ACL=<acl_value>
    --   DEFAULT_ACL=<acl_value>
    --      Specifies the Access Control List for restored objects
    --      (OBJECT_ACL) and worlds (WORLD_ACL) and the default ACL for
    --      restored worlds (DEFAULT_ACL).
    --      The value is either an ACL specification or one of the special
    --      values RETAIN, ARCHIVED, INHERIT.
    --      - RETAIN means to set the final acl of an already existing object
    --        to the value it had before the restore. If the object doesn't
    --        exist the archived acl value will be used. This is the default.
    --      - ARCHIVED means to use the ACL archived with the object.
    --      - INHERIT means to use the standard inheritence rules for new
    --        versions of objects.

    --   BECOME_OWNER
    --      Modify the ACL of all restored objects such that the restorer
    --      becomes the owner of the restored object.

    --   TRAILING_BLANKS=integer
    --      Specifies the number of trailing blanks which are to be
    --      considered significant when parsing ada units during the
    --      restore. If a line ends in more than this number of blanks,
    --      the line break will be preserved in the image of the restored
    --      ada unit. The default is 2.

    --   UNCONTROL
    --      specifies that controlled objects which are checked in
    --      will be made uncontrolled before being overwritten.
    --      objects will be recontrolled at the end of the archive.
    --      only valid if the replace option is also given.

    --   REQUIRE_PARENTS
    --      require that the parent context for a unit to be restored
    --      already exists. default is false.

    --   VOLUME
    --      specifies which volume archive is to create worlds on.

    --   VERBOSE
    --      Specifies that extra log messages are to be generated describing
    --      more fully the steps of the restore process.

    --   UNLOAD
    --      A boolean option.  When True (the default), causes the tape to
    --      be rewound and unloaded after the operation is complete.  When
    --      False, this option causes the tape to be rewound to the beginning
    --      and to remain online and available for subsequent requests.
    --      When the tape is left online, subsequent requests send a tape-
    --      mount request to the operator's console, which must be answered
    --      before the tape can be accessed.

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

***
REPLACE
!Commands.Archive'spec
!Commands.Archive.Copy 'parent'next
!Commands.Archive.Copy

    -- Copy objects from one location to another, including between
    -- machines on the same network.

    -- The Objects parameter specifies where the objects are to be gotten
    -- from as in an Archive.Save.

    -- The Objects and Use_prefix parameters consist of an (optional)
    -- machine name followed directly by an objects name.
    -- A machine name has the form !!name.
    --   Example:
    --     !!machine1!users.foo
    -- Another acceptable way to say the same thing is !!machine1.users.foo
    --
    -- The machine name on the objects parameter specifies the source machine.
    -- The machine name on the use prefix specifies the destination machine.
    -- If either machine is the one on which the command is being given
    -- it is not necessary to give the machine name.

    -- The non-machine name part of the Objects parameter is a name like that
    -- given to the save operation.
    --
    -- The Use_Prefix/For_Prefix parameters specify where the objects
    -- are to go as in Archive.Restore.

    -- If the Use_Prefix parameter is "*" or just a machine name, then the
    -- source Objects are moved to the same place on the destination machine
    -- as specified by the source.  The For_Prefix parameter is ignored.

    -- If neither Objects nor Use_Prefix have a machine name then the
    -- objects are copied from the source to the Use_Prefix on the
    -- current machine.
    --
    -- If it is desired to transfer the same set of objects to multiple
    -- targets in the same command a set of target names can be
    -- specified as the use_prefix in one of the following two ways.
    --   The use prefix can be of the form:
    --     [use_prefix1, ..., use_prefixn]<optional_naming_expression>
    --     examples:
    --       archive.copy (..., use_prefix => "[m1,m2]", ...);
    --       archive.copy (..., use_prefix => "[m1,m2,m3]!users.foo", ...);
    --
    --   The use prefix can be of the form:
    --      _filename<optional_naming_expression_beginning_with_!>
    --   The filename should contain a list of use_prefix's, one per line.
    --     examples:
    --       archive.copy (... use_prefix => "_targets", ...);
    --       archive.copy (... use_prefix => "_targets!users.foo", ...);
    --     where targets is a text file containing (e.g)
    --       m1
    --       m2
    --
    -- In both of the above cases the leading !! in machine names is optional.

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

    -- The Options parameter has the following options.
    --
    --   AFTER, CODE, CDB, LINKS, IGNORE_CDB
    --   NONRECURSIVE, EFFORT_ONLY
    --      as in the save operation.
    --
    --   ALL_OBJECTS, NEW_OBJECTS, UPDATED_OBJECTS, CHANGED_OBJECTS,
    --   EXISTING_OBJECTS, DIFFERENT_OBJECTS
    --   PROMOTE, REPLACE, UNCONTROL, REMAKE, GOAL_STATE,
    --   PRIMARY, REVERT_CDB, REQUIRE_PARENTS, VOLUME
    --   BECOME_OWNER, OBJECT_ACL, WORLD_ACL, DEFAULT_ACL
    --   VERBOSE
    --      as in the restore operation.

    --  ENABLE_PRIVILEGES
    --      cause the archive server (and the copy job) to attempt to
    --      enable_privileges.

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

    -- Examples of calls:
    --
    --  Copy (Objects    => "!USERS.JMK.CLI",
    --        Use_Prefix => "!!M1");
    --
    --    will copy the CLI directory in !USERS.JMK on the
    --    current machine to machine M1 !USERS.JMK.CLI.
    --
    --  Copy (Objects => "!!M2!USERS.OLLIE.CLI");
    --
    --    will copy !USERS.OLLIE.CLI on M2 to !USERS.OLLIE.CLI on the
    --    current machine.
    --
    --  Copy (Objects    => "!!M3!USERS.JMK.CLI.CMD",
    --        Use_Prefix => "!USERS.OLLIE",
    --        For_Prefix => "!USERS.JMK.CLI");
    --
    --    will copy the file !USERS.JMK.CLI.CMD on M3 to
    --    !USERS.OLLIE.CMD on the current machine.
    --    note when repositioning Objects it is necessary to give a
    --    for_prefix which is a prefix of the Objects part of the
    --    source parameter.
    --
    --  Copy (Objects    => "!!M1!USERS.JMK.ILFORD",
    --        Use_Prefix => "!!M2!AGFA",
    --        For_Prefix => "!USERS.JMK");
    --
    --    will copy !USERS.JMK.ILFORD from machine M1 to
    --    machine M2 !AGFA!ILFORD
    --
    --  Copy (Objects    => "!USERS.JMK.CLI",
    --        Use_Prefix => "!!M1",
    --        Options    => "REPLACE AFTER=12/25/86");
    --
    --    will copy those files which have changed since 12/25/86 in
    --    !USERS.JMK.CLI on the current machine to machine M1 !USERS.JMK.CLI
    --    Any existing files with the same names will be overwritten.

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

***
REPLACE
!Commands.Queue'spec
!Commands.Queue.Add 'parent'next
!Commands.Queue.Add
    -- Options :
    --        XON_XOFF, RTS, DTR indicate what flow control is to be used.
    --        Host => name indicates that a telnet connection is to be used
    --        If Host is given, Socket may be specified:  Socket => (0, 23).
    --
    --        Options can also have the value FTP.  In this case, Device is
    --        the name of a file whose first line is a host name, whose
    --        second line is a directory name, whose third line is a suffix
    --        to append to each file name, and whose fourth line is the
    --        name of a remote passwords file.  Each print request will
    --        be transferred to the specified host and directory using an
    --        FTP login for the host from the specified remote passwords file.
    --        The directory name in the file must have any trailing punctuation
    --        so that a simple filename can be concatenated to it.  A log file
    --        is created in !Machine.Queues.Ftp under the device name (which
    --        is the simple name of the device file) to record any FTP
    --        problems.


***
REPLACE
!Tools.Networking.Tcp_Ip_Boot'spec
!Tools.Networking.Tcp_Ip_Boot 'pragmas'next(3)
!Tools.Networking.Tcp_Ip_Boot

-- Download the Ethernet controller with TCP/IP networking software,
-- and start it.  The controller may be an Excelan EXOS-204 with
-- EXOS 8010 software, or a CMC ENP-100i with CMC TCP/IP software.

-- Software for the Excelan EXOS-204 controller is stored in files
-- named EXOS_PREFIX & "EXOS_p_x_y"; where p is the Excelan product
-- number, and x and y are the software version number.  For example,
-- the file "EXOS_8010_3_2" contains the 8010 software, version 3.2.
-- Software for the CMC ENP-100i controller is stored in files named
-- EXOS_PREFIX & "CMC_TCP_IP_x_y_z"; where x, y and z are the software
-- version number.  For example, the file "CMC_TCP_IP_2_6_1" contains
-- software version 2.6.1.

-- Tcp_Ip_Boot loads the most recent version of the software that is
-- present in the EXOS_PREFIX directory.  So, if both versions 3.2 and
-- 3.1 are present, 3.2 will be loaded.

-- HOST_ID_FILE is the name of a text file which begins with the
-- Internet address of this machine, in decimal dotted notation.  This
-- value is used to initialize the TCP/IP software, so that it will
-- respond to ARP queries and IP datagrams directed to this address.

-- The file named "TCP_IP_Subnet_Mask", if it exists in the same
-- directory as HOST_ID_FILE, begins with the subnet mask, in decimal
-- dotted notation.  Each non-zero bit of the IP subnet mask indicates
-- that the corresponding bit of this machine's IP address is part of
-- the network or subnetwork number.

-- ETHER_ID_FILE is the name of a text file which, if it exists,
-- begins with the Ethernet address of this machine, in decimal dotted
-- notation.  If this file does not exist or is illegible, the address
-- will be taken from PROM on the Ethernet controller.  Ordinarily
-- this file does not exist; the use of the PROM value is recommended.

-- The HOST_ID_FILE, TCP_IP_Subnet_Mask and/or ETHER_ID_FILE may
-- optionally contain a Machine.Id, written as a decimal number, after
-- the address (and some blank space).  If the Machine.Id is present,
-- but does not match Machine.Get_Id, the file contents will not be
-- used.  In the case of HOST_ID_FILE, Tcp_Ip_Boot fails, and the
-- controller is not started.  In the case of ETHER_ID_FILE, the
-- address in PROM on the controller will be used.

-- The HOST_ID_FILE, TCP_IP_Subnet_Mask and/or ETHER_ID_FILE may
-- optionally contain comments, at the end of a line, marked by --.

-- Decimal dotted notation means the form nn.nn.nn.nn; where each nn
-- is the (decimal) representation of one byte of the address.  The
-- most significant byte comes first.  For example, network number 89
-- is commonly used for private IP networks: such addresses will have
-- the form "89.nn.nn.nn" in decimal dotted notation.

-- USE_ARP determines whether the TCP/IP software will use ARP
-- (the Address Resolution Protocol) to find the Ethernet addresses
-- of other hosts it wants to talk to, and to advertise its own
-- Ethernet address to other hosts that want to connect to it.

-- ENABLE_LINK_LEVEL, if true, enables the use of Ethernet link level
-- I/O.  This form of I/O allows application programs to transmit
-- arbitrary frames on the Ethernet, and to receive frames that do
-- not contain TCP/IP data.

-- USE_CHECKSUMS, if true, enables the calculation and checking
-- of IP header checksums and TCP checksums.

-- DIAGNOSTIC, if true, causes the procedure to do a dry run; that is,
-- scan the code file, calculate memory allocation and initial data
-- settings, and print out information about the results, all without
-- actually affecting the Ethernet controller.  This is intended for
-- debugging Tcp_Ip_Boot.
***
INSERT
!Tools.Networking.Transport'spec
!Tools.Networking.Transport.Get_Statistics 'parent'next
!Tools.Networking.Transport.Route
    package Route is
        -- A table of 4-tuples, used for Transport level routing.
        -- See package Transport_Route for background information.

        procedure Define (Network     :     Transport_Defs.Network_Name;
                          Destination :     Transport_Defs.Host_Id;
                          Subnet_Mask :     Transport_Defs.Host_Id;
                          Route       :     Transport_Defs.Host_Id;
                          Status      : out Transport_Defs.Status_Code);

        procedure Undefine (Network     :     Transport_Defs.Network_Name;
                            Destination :     Transport_Defs.Host_Id;
                            Subnet_Mask :     Transport_Defs.Host_Id;
                            Route       :     Transport_Defs.Host_Id;
                            Status      : out Transport_Defs.Status_Code);

        type Iterator is private;
        procedure Init (Iter : out Iterator);
        procedure Next (Iter : in out Iterator);
        function  Done (Iter : Iterator) return Boolean;
        function  Network (Iter : Iterator) return Transport_Defs.Network_Name;
        function  Destination (Iter : Iterator) return Transport_Defs.Host_Id;
        function  Subnet_Mask (Iter : Iterator) return Transport_Defs.Host_Id;
        function  Route (Iter : Iterator) return Transport_Defs.Host_Id;

    end Route;

***
INSERT
!Tools.Networking.Transport_Defs'spec
!Tools.Networking.Transport_Defs.Not_Registered 'parent(2)
!Tools.Networking.Transport_Defs.Network_Unreachable
    Network_Unreachable    : constant Status_Code := 20;
    Host_Unreachable       : constant Status_Code := 21;
    Protocol_Not_Supported : constant Status_Code := 22;
    No_Such_Socket         : constant Status_Code := 30;
    No_Response            : constant Status_Code := 31;
    Data_Too_Long          : constant Status_Code := 32;

***
INSERT
!Tools.Networking.Transport_Name'spec
!Tools.Networking.Transport_Name.Host_Id_To_Host'n(2) 'parent
!Tools.Networking.Transport_Name.Is_Network_Object_Name

    -- A network object name consists of "!!", followed by a host
    -- name, followed by either "." or "!", followed by the name
    -- of an object within that host.

    function Is_Network_Object_Name (Name : String) return Boolean;
    -- Return true iff the name is a syntactically correct
    -- network object name.  The host_name need not be defined.

    function Network_Object_To_Host (Name : String) return String;
    -- If not Is_Network_Object_Name (Name) then raise Constraint_Error.
    -- Otherwise, return the host name part of a network object name,
    -- without the leading "!!" or trailing punctuation "!" or ".".
    -- The returned name is not neccessarily defined.

    function Network_Object_To_Rest (Name : String) return String;
    -- if not Is_Network_Object_Name (Name) then raise Constraint_Error.
    -- Otherwise, return the object name part of a network object name,
    -- beginning with "!" (even if the original punctuation was ".").
    -- The returned name does not neccessarily denote an extant object.

    package Service is
        -- A mapping from the name of a service to where it is available;
        -- that is, the Network(s) and Socket_Id(s) where its servers wait.

        -- This mapping is stored in the text object named
        File_Name : constant String := "!Machine.Transport_Services";

        -- Within this object, each non-empty text line contains
        --   * a Transport_Defs.Network_Name,
        --   * a Transport_Defs.Socket_Id,
        --   * a service name, and
        --   * optionally a machine name;
        -- in that order, separated by white space (blanks or tabs).
        -- Characters from "--" to the end of the line are a comment.  A
        -- Network_Name, Socket_Id, service name or machine name must not
        -- contain any white space or the character sequence "--".  The
        -- Transport_Defs.Socket_Id is in decimal dotted notation; that is, a
        -- sequence of non-negative decimal integers separated by periods.
        -- Each integer represents one or more bytes, as minimally required to
        -- represent that integer in binary form, most significant byte first.
        -- For example, 258 and 1.2 represent the same Socket_Id, which is
        -- expressed in Ada as (1,2).  A service name or a machine name should
        -- be a valid Ada identifier.  The case (upper or lower) of a service
        -- name or a machine name is not significant.

        -- A line signifies that the named service is available via the given
        -- network at the given socket in the given machine; if no machine
        -- name is given, the line signifies that the named service is
        -- available via the given network at the given socket in all machines
        -- not specifically named in other lines.

        function Normalize (Service_Name : String) return String;
        -- change to lower case, and strip leading or trailing white space.

        function Socket  (Service_Name, Host_Name : String)
                        return Transport_Defs.Socket_Id;
        function Network (Service_Name, Host_Name : String)
                         return Transport_Defs.Network_Name;
        -- Return the first defined Socket or Network associated with
        -- the given Service_Name and Host_Name.  If no such specific
        -- association is defined, return Socket (Service_Name) or
        -- Network (Service_Name), below.

        function Socket (Service_Name : String) return Transport_Defs.Socket_Id;
        function Network (Service_Name : String)
                         return Transport_Defs.Network_Name;
        -- Return the first defined Socket or Network associated with
        -- the given Service_Name, but no specific Host_Name.
        -- If no such association is defined, raise

        Undefined : exception;

        function Local_Socket
                    (Service_Name : String;
                     Network      : Transport_Defs.Network_Name := "TCP/IP")
                    return Transport_Defs.Socket_Id;
        -- Return the socket at which the given service is available in
        -- this machine as identified in the given Network.  That is:
        -- begin
        --     return Socket (Service_Name,
        --                    Transport_Name.Local_Host_Name (Network));
        -- exception
        --     when Transport_Name.Undefined =>
        --         return Socket (Service_Name);
        -- end;
        -- This function may raise Transport_Name.Service.Undefined.

        function Local_Network
                    (Service_Name : String;
                     Network      : Transport_Defs.Network_Name := "TCP/IP")
                    return Transport_Defs.Network_Name;
        -- Return the network via which the given service is available in
        -- this machine as identified in the given Network.  That is:
        -- begin
        --     return Network (Service_Name,
        --                     Transport_Name.Local_Host_Name (Network));
        -- exception
        --     when Transport_Name.Undefined =>
        --         return Network (Service_Name);
        -- end;
        -- This function may raise Transport_Name.Service.Undefined.


        -- A service may be available on multiple Socket/Network pairs;
        -- they may be found by iterating through all service definitions
        -- searching for definitions that match the service and host name:

        type Iterator is limited private;
        procedure Init   (Iter : in out Iterator);
        procedure Next   (Iter : in out Iterator);
        procedure Finish (Iter : in out Iterator); -- Done (Iter) becomes True.
        -- You are encouraged to Finish an Iterator when you're done using it,
        -- to release any global resource (actions, file handles) it may hold.

        function Done (Iter : Iterator) return Boolean;
        function Network (Iter : Iterator) return Transport_Defs.Network_Name;
        function Socket (Iter : Iterator) return Transport_Defs.Socket_Id;
        function Service_Name (Iter : Iterator) return String;
        function Host_Name (Iter : Iterator) return String;

        function Matches (Iter : Iterator; Service_Name, Host_Name : String)
                         return Boolean;
        -- Return true iff Service_Name (Iter) = Normalize (Service_Name)
        -- and Host_Name (Iter) = Normalize (Host_Name).

        function Matches (Iter : Iterator; Service_Name : String)  
                         return Boolean;
        -- Return true iff Service_Name (Iter) = Normalize (Service_Name)
        -- and Host_Name (Iter) = "".

    private
        type Iterator is
            record
                File : Text_Io.File_Type;
                Last : Natural;
                Line : String (1 .. 2048);
            end record;
    end Service;


***
REPLACE
!Commands.Abbreviations.Print'spec
!Commands.Abbreviations.Print'Spec 'pragmas'next
!Commands.Abbreviations.Print'Spec

-- Prints one or more objects.
-- Additional parameters specify how the object(s) should be printed.
-- The printer used is based on the user via a map set up by the system manager.
--
-- The parameters have the following effects:
--      Object_Or_Image     Specifies the object(s) to be printed.  Can
--                          designate (via value "<cursor>") mail messages,
--                          I/O windows, etc.
--                          If more than one object is specified, then the print
--                          style is based on the first object in the list.
--
--    The following options only apply to printing on laser printers:
--
--      From_First_Page     Have the first printed page be as specified, if
--                          possible.
--      To_Last_Page        Have the last printed page be as specified, if
--                          possible.
--
--      Disply_As_Twoup     Causes printing in 2-up format if possible
--
--      Display_Border      Show a border around each page, if possible.
--
--      Display_Filename    Show the filename being printed on each page, if
--                          possible.
--      Display_Date        Show the file date on each page, if possible.
--
--
--      Ignore_Display_Parameters_For_Postscript
--                          If the object being printed is a PostScript file,
--                          causes Display_Two_Up, Display_Date, Display_Filename,
--                          and Display_Page_Border to be ignored.
--
--      Highlight_Reserved_Words_For_Ada
--                          If the object being printed is Ada, use Ada format
--                          which highlights keywords, italicizes comments, etc.
--
--
--    The following options apply to all files:
--
--      Other_Options       Standard Queue.Print options can be
--                          specified here.  The options specified here
--                          override any other option specifications.
--                          The options from above will be combined with these
--                          options, if they are still applicable.
--
--      Number_Of_Copies    Prints the specified number of copies.
--
--      Printer             Use the specified printer.  By default, determine
--                          the printer based on the user name.  (each user
--                          has a default printer).
--      Effort_Only         If true, don't print anything, but check
--                          parameter values and construct the command
--                          that would be sent to the Queue.Print command.
--
--  To print a wide listing, in landscape mode on a laser printer, the
--  following options should be used:
--
--      Display_As_Twoup => False
--      Other_Options = "Postscript => (Wide,Spacing=10,Size=10)"
--
--
***
REPLACE
!Commands.Library'spec
!Commands.Library.Create 'parent'next
!Commands.Library.Create
    --
    -- Create a library of the specified type.  The Nil volume represents
    -- the 'best' volume (The 'best' volume does not necessarily mean the
    -- volume with the most space.  The 'best' volume calculation takes into
    -- account the percentage of a volume that is available and an estimate
    -- of the real consumption of previously allocated worlds).  Vol is
    -- ignored for Subpackages, which are not control points, and must be on
    -- the same volume as their parent.  When creating a World, links are
    -- copied from Model (unless it is "").


***
INSERT
!Tools.Access_List_Tools'spec
!Tools.Access_List_Tools 'Context
!Tools.Access_List_Tools.Grants
with Action
***
INSERT
!Tools.Access_List_Tools'spec
!Tools.Access_List_Tools.Amend 'parent'next
!Tools.Access_List_Tools.Grants
    function Grants (For_List  : Acl;
                     Desired   : Access_Class;
                     User_Name : String := "") return Boolean;

    -- Raise Access_Tools_Error if For_List, Desired, or User_Name are
    -- illegal. Return true or false depending on whether For_List grants
    -- User_Name Desired access.  User_Name ="" (the default) performs the
    -- check for the identity of the calling job.


    procedure Set (For_Object :        Directory.Version;
                   To_List    :        Acl;
                   Status     : in out Simple_Status.Condition;
                   Action_Id  :        Action.Id);

    procedure Set_Default (For_World :        Name;
                           To_List   :        Acl;
                           Status    : in out Simple_Status.Condition;
                           Action_Id :        Action.Id);
    -- same as above with an action_id parameter.

    procedure Remove (Group       :     String;
                      Initial_Acl :     Bounded_String.Variable_String;
                      New_Acl     : out Bounded_String.Variable_String;
                      Group_Found : out Boolean);

    --
    -- Removes the groups's entry from the specified access list

    function Is_Valid_Group (Name : String) return Boolean;

    function Is_In_Group (User_Name  : String;  
                          Group_Name : String) return Boolean;
    -- Return true if the User_Name is a member of Group_Name


***
REPLACE
!Tools.System_Utilities'spec
!Tools.System_Utilities.Get_Board_Info 'parent'next
!Tools.System_Utilities.Get_Board_Info
    -- return information about the specified board in the machine.  The
    -- string identifies the information.
    --  Board specifies the particular board:
    --      0 : IOA
    --      1 : SYS/IOC
    --      2 : SEQ
    --      3 : VAL
    --      4 : TYP
    --      5 : FIU
    --      100 : MEM0
    --      101 : MEM1
    --      102 : MEM2
    --      103 : MEM3
    --    etc.

**