Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

  To:       Distribution

  From:     Lee A. Newcomb

  Date:     02/27/86

  Subject:  Systems' Development and Support Facilities

  1 ABSTRACT

       There are several different  systems development and support
  facilities used  for the Multics system.  Many  are private tools
  which have  proven their value over the  years.  These facilities
  do  not  have  common  interfaces  or  conventions,  and  are not
  complete  by  themselves.   The  DPS6  follow-on  (new) operating
  system (NOS)  development also requires high  quality development
  and configuration management tools.

       The objective  of this project  is to install  a consistent,
  unified, and generally extensible set  of these tools for NOS and
  Multics development and maintenance.  This MTB covers the general
  philosophy  and design  of the  Systems' Development  and Support
  Facilities (SDSF), and its first phase implementation.

  Comments should be sent to the author:

  via Multics Forum:
     >udd>m>mtgs>Software_Development_Tools -at System-M
  via Multics Mail:
     Newcomb -at System-M

  via Telephone:
     (HVN) 492-9341, or (617) 492-9341

  _________________________________________________________________

  Multics  project  internal  working  documentation.   Not  to  be
  reproduced or distributed outside the Multics project without the
  consent of the author or the author's management.

  Multics Technical Bulletin                                MTB-739

                             CONTENTS

                                                         Page

                 1  Abstract  . . . . . . . . . . . . .     i
                 2  Introduction  . . . . . . . . . . .     1
                 3  Requirements  . . . . . . . . . . .     2
                    3.1 Software Configuration
                     Management . . . . . . . . . . . .     2
                       3.1.1 Change Requests  . . . . .     2
                       3.1.2 Modification Tracking  . .     3
                       3.1.3 System Integration
                        Requests  . . . . . . . . . . .     3
                       3.1.4 Installation Auditing  . .     3
                       3.1.5 Installation Tracking  . .     4
                       3.1.6 Installation of
                        Development Modules . . . . . .     4
                    3.2 Multiple Libraries/Systems  . .     4
                    3.3 Module Management . . . . . . .     5
                       3.3.1 Module Opening and
                        Installation  . . . . . . . . .     6
                       3.3.2 Versioning . . . . . . . .     6
                    3.4 Problem Detection . . . . . . .     6
                    3.5 (Sub)System Building  . . . . .     7
                 4  Existing Tools  . . . . . . . . . .     7
                    4.1 Installed Multics Commands  . .     7
                    4.2 Multics/MCR Tools . . . . . . .     8
                    4.3 Subsystem exec_com's and Vector
                     DBs  . . . . . . . . . . . . . . .     8
                    4.4 ACTC FORTRAN Maintenance
                     exec_com's . . . . . . . . . . . .     9
                 5  Other Systems . . . . . . . . . . .     9
                 6  Initial Design  . . . . . . . . . .    10
                    6.1 Databases . . . . . . . . . . .    10
                       6.1.1 Per-Library Definition
                        Database  . . . . . . . . . . .    10
                       6.1.2 Per-Subsystem Database . .    11
                    6.2 Finding Libraries and
                     Subsystems . . . . . . . . . . . .    11
                    6.3 Description of the library
                     Command  . . . . . . . . . . . . .    12
                 7  Problems  . . . . . . . . . . . . .    12
                 8  References  . . . . . . . . . . . .    12
                 Appendix A - Per-library Data Model  .    14
                 Appendix B - Per-subsystem Data Model     17



                         CONTENTS (cont)

                                                         Page

                 Appendix C - library Command
                  Description . . . . . . . . . . . . .    21
                    library . . . . . . . . . . . . . .    21

  System Dev. & Support Fac.

  2 INTRODUCTION

       Multics has  long been one  of the best  systems development
  and  maintenance systems  in existence.   Its facilities  include
  high  level  languages,  excellent  debugging  subsystems, a good
  philosophy   of  software   development,  good   editors,  online
  documentation, and a good  configuration management policy; these
  facilities are not  discussed for the remainder of  this paper as
  they are assumed to be available.  Many of these items, taken for
  granted  by Multics  users, have  become standard  parts of newer
  systems.  The  recent B2 security evaluation has  helped make the
  already  good  Multics  software  configuration  management  even
  better.

       However, other  vendors and recent developments  are leaving
  Multics'  tools in  the dust.   Several commercial  products have
  been introduced which are as good as the Multics tools, and cover
  more areas of the systems support environment than Multics.  Many
  of  these areas  are covered  by private  tools on  Multics; and,
  while  useful, are  at times   difficult to  use together.   Some
  common problems are:
    a) not all developers know of a tool's existence;
    b) one  developer may want  a tool changed  to better suit  his
       work habits;  many times creating multiple copies  of a tool
       with increasing  divergence from the original  operation and
       interface; or
    c) one developer's tool is considered too slow for the benefits
       received by others.

       The  object of  this project  is to  install a  high quality
  system's development and support facilities (SDSF).  This package
  will be used to aid Multics  maintenance thru the next decade and
  to  develop  the  DPS6/MOD400  follow-on  (new)  operating system
  (NOS).  The emphasis is on how  to support the system library and
  its subsystems; however, the  design also supports individual and
  project  libraries so  private, third  party, and  completely new
  product investigations can be easily managed.

       Much of the following is  based on Multics' B2 configuration
  management  and the  subsys tools  written by  Lindsey Spratt and
  Matt  Pierret.   Many  of  the  terms  used  below  have roots in
  Multics, but have been generalized for NOS usage.

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

  3 REQUIREMENTS

       There are several requirements for SDSF.  The major ones are
  reviewed below.  There is  a general requirement of expandability
  as the first  implementation of SDSF will not  cover the complete
  set of all  useful tools.  The tools are expected  to be added to
  as resources become available and as new functionality is needed.
  Expected improvements in database technology must also be usable,
  such as distributed DBs.

       Of all  the requirements below, the  availability of library
  databases and development checkout and installation tools are the
  foremost.  The reason for  the more comprehensive presentation is
  to  avoid problems other  tools have encountered  in the past  of
  tacking on interfaces not  originally allowed for, with resulting
  interface and database problems.

  3.1 Software Configuration Management

       Multics received  a B2 security  rating in August  1985 from
  the National  Computer Security Center  (NCSC).  As part  of this
  effort,   the  configuration    management  policies   have  been
  formalized and new tools written  to aid in using/enforcing these
  policies.  The following are  some major configuration management
  policies which SDSF must support.   The reader is referred to the
  Multics  Administrative   Bulletins,  or  MABs,  listed   in  the
  "References" section for more details.

  3.1.1 CHANGE REQUESTS

       To  modify a  system module,  a system  change request (SCR)
  must  first  be  approved;  these  are  known  as  Multics Change
  Requests,  or MCRs,  for Multics   development.  A  user may  not
  request  modules to  be installed   unless such  an SCR  has been
  acquired.    It  is   recommended  modules   be  examined  before
  submitting a SCR and the SCR'd changes to the modules not be done
  until the SCR is approved;  however, this is not always possible.
  SCRs should be marked satisfied when the change is installed.

  3.1.2 MODIFICATION TRACKING

       Each change the  developer makes to a source  module must be
  summarized  in  that  module.   This  is  currently  done via the
  Multics history_comment (hcom) command.   For more information on
  hcom,  the reader  should see  its online  documentation.  An SCR
  will be rejected if all the  modules contained in it have not had
  their modification  history updated, or  have no such  section at
  all.

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

  3.1.3 SYSTEM INTEGRATION REQUESTS

       When a developer is ready  to integrate his changes with the
  current system, a system integration request (SIR) is filled out;
  these are known  as Multics System Change Requests,  or MSCRs, in
  the  current  organization.   The  SIR  lists  all  modules to be
  installed  (whether  modified,  needs  recompiling,  etc.),  what
  directory the  system integration unit  can find the  modules for
  official  installation,  and  any  special  instructions  for the
  integration process.  An SIR must  reference one or more approved
  SCRs, be a  critical fix, or have special  management approval in
  order for the modules in the SIR to be installed.

       When special management approval  is given, the reasons must
  be  recorded  in  the  SIR  as  to  why installation approval was
  granted.  The record must show the rationale behind not following
  standard  procedures.  The  library keeper  will reject  any SIRs
  with this approval type lacking this information.

  3.1.4 INSTALLATION AUDITING

       Several steps occur between the time the developer fills out
  the SIR and the installer receives it.  One of the most important
  of these is peer auditing;  the developer picks another developer
  (the  auditor) who  is qualified   to examine  the modules  being
  installed  for  problems.   If  the  auditor  passes  the modules
  (normal case),  he records this fact, along  with any non-failing
  audit comments, and  passes the SIR on to  the documentation unit
  for review.  If any of the modules fail, all comments and the SIR
  are passed  back to the  developer for correction.   A module may
  not be installed with any failing audit comments outstanding.

       If there are changes to  the system's Trusted Computing Base
  (TCB), the  security auditor must  also examine the  TCB changes;
  again, failure causes the SIR to  be kicked back to the developer
  for correction  and passage results  in forwarding of  the SIR to
  the documentation unit.

       A  documentation unit  member must  sign off  on the  SIR to
  indicate either 1) no documentation  changes are necessary, or 2)
  all  information  to  update  the  user  documentation  has  been
  received  and any  online info  files in  the SIR  are correct in
  content and format.  The changes  required to a particular manual
  are recorded with  a notation as to what SCR/SIR  the changes can
  be found in.  It is  still the developer's responsibility to have
  all upgraded documentation in the installation, however.

       The SIR then passes to  the developer's manager for approval
  and forwarding to the systems integration unit.

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

  3.1.5 INSTALLATION TRACKING

       All changes to the system must  be tracked and be able to be
  summarized.   This   is  currently  done  via   filing  of  SIRs,
  Installations.log    and   Installations.info    (*.changes.info)
  segments, and  to some extent  the system release  bulletin (SRB)
  and system installation bulletin (SIB).  This information must be
  kept in  a way that allows dependencies  between installations to
  be easily detected; this  helps prevent inconsistent backouts and
  the  premature freeing  of modules   for more  work (see  "Module
  Opening and Installation" below).

  3.1.6 INSTALLATION OF DEVELOPMENT MODULES

       All  modules must  go through  an experimental  phase before
  being installed in a system library.  A hierarchy exists for this
  phase of a module.  The  above configuration management steps may
  be done  before the experimental  copy is installed,  but in this
  case,  the developer  will act  as the  installer and  no SIR  is
  created.  If the experimental version is audited, the results are
  recorded.  When the SIR is submitted, the auditor is provided the
  results of any previous  audits, including information on whether
  the module has changed since the audit.

       A  user may  also define  one or  more developmental  phases
  lower  than the  experimental phase;  this is  commonly done with
  large  projects (e.g., Multics  Data Management went  through two
  phases,  development and  bound_development, before  reaching the
  experimental phase).  In this case, modules do not require an SCR
  to be installed, and generally  auditing is not done.  However, a
  module's modification history must still be maintained.

  3.2 Multiple Libraries/Systems

       SDSF  must handle  multiple libraries  (and multiple systems
  someday).  Examples of libraries are the system library, a user's
  or  project's  private  library,  and  a  third  party's software
  library.  These libraries have various properties; e.g.:  various
  subsystems, access permissions for  use and installation, content
  types, and what notifications are to be sent for an installation.

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

       A  library is  ideally a  set of  modules related  by common
  purpose  or  functionality,  including  source,  executable,  and
  documentation modules.   A library usually consists  of more than
  one  hierarchy holding the  library's modules (e.g.,  the Multics
  system library  uses >system_library_standard, >system_library_1,
  >library_dir_dir,  >experimental,  etc.);  a  hierarchy  does not
  contain  modules from  more than  library.  N.B.,  this is  not a
  proposal  to totally  restructure the  Multics library hierarchy,
  the  above mentioned  directories will  continue to  be used, but
  other   directories  will   also  be   handled  by   SDSF  (e.g.,
  >udd>m>dms_sys>dms.ssd).

       This is a deviation from the current definition of a library
  on   Multics.    SDSF   allows   subsystems   within  a  library,
  particularly  if the  library is   very large  (e.g., the  system
  library).  Examples  of subsystems in the  Multics system library
  are:  the   hardcore  supervisor,  data_management,   MRDS,  mail
  system,  and the  answering  service.   The reasons  for allowing
  subsystems  are:  a)  to  allow  the  assigning  of  access  to a
  specific   subsystem   to   avoid   accidental   damage,  and  b)
  distributing  developmental  versions   of  modules  through  the
  hierarchy.

       Currently, Multics development  is distributed over multiple
  systems.  This  distribution of effort is expected  to carry over
  to  NOS development.   Thus SDSF   must be  easily upgradable  to
  directly  supporting  distributed  databases.   The  handling  of
  distributed  systems will  continue to  be done  "by hand"  as is
  currently done  between System-M, CISL, ACTC, and  MIT, with some
  tools to aid in this effort.

  3.3 Module Management

       The basic element of a library  is a module.  These are used
  to build executable units, subsystems,  commands, etc., and to do
  other random tasks (e.g., access  control).  All modules are part
  of a library, and a  library's subsystem; and thus are registered
  in the  library database and the  appropriate subsystem database.
  A  module's various  properties are  also registered:  what bound
  unit holds the module,  version, current disposition, and special
  attributes (e.g.,  ring brackets and access settings)  are a few.
  The reader is referred to the  data models in the appendicies for
  the SDSF databases' proposed structures.

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

  3.3.1 MODULE OPENING AND INSTALLATION

       A module must be opened before modifications are made to it;
  the  terms "locked"  and "checked   out" are  also used  for this
  operation,  but we  will generally  use "opened"  in this  paper.
  Opening a  module protects the user's work.   Another user cannot
  work  on the same  module without both  users being aware  of it;
  possibly  preventing duplicate  work or  causing one  developer's
  work to be  invalidated.  The SDSF tools will refuse  to work for
  any module which has not been opened; in particular, the auditing
  and installation tools will not function.

       Tools will be provided to aid in the processing of each step
  of an installation, for all phases of libraries.  Developers will
  be able  to install into the development  and experimental phase,
  but  a  library's  access  is  constructed  so  only  one  of the
  library's integration group may do final installations.  For many
  private libraries, the distinction is unnecessary.

  3.3.2 VERSIONING

       To aid the user during  development and support, versions of
  modules  are maintained.  These  versions are used  for auditing,
  passing on enhancements and corrections  to sites, and backing up
  to a  known version.  Complete copies  of a version are  kept for
  each shipped release (e.g.,  MR10.2, MR11.0, MOD400 Release 3.1),
  the current  system version, and the  lowest developmental phase.
  Other versions  may be kept as  comparison files; a tool  will be
  provided to re-create a complete  version from the partial.  When
  a  version becomes  obsolete (e.g.,  unnecessary partial versions
  and unsupported releases), it is discarded.

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

  3.4 Problem Detection

       There  are  many  problems  library  tools  can help detect,
  particularly   in  software   development  phases.    This  early
  detection may help reduce  audit comments (and possibly failures)
  and either remind  or inform users of changes to  the system they
  did  not  know  about  (e.g.,   a  piece  of  software  has  been
  obsoleted).  This is not meant to hold up all installations until
  all  problems  are  fixed,  particularly  in  the development and
  experimental phases of a module; it  is meant to warn the user of
  possible problems.  Some of these are:
    a) modules improperly called;
    b) the  use  of  obsolete  (e.g.,  ios_)  or discouraged (e.g.,
       hcs_$initiate) objects;
    c) control  argument mis-usage  in commands  or user  subsystem
       requests;
    d) calls    to   non-existant     modules   (via    a   dynamic
       cross-reference);
    e) modules  registered  in  a  bindfile,  but  not  in the bind
       archive  (unless registered  as freestanding),  or the other
       way around.

  3.5 (Sub)System Building

       SDSF should  aid in the creation of  commands and subsystems
  with standard interfaces:  argument  processing, control argument
  names and short-forms, error  reporting, etc.  However, it should
  not enforce  this with an iron  fist as there are  times when the
  standard or  registered interfaces do not  suffice.  For example,
  users should be encouraged to  use the registered command control
  arguments, but if none of these fit the bill, then the user still
  needs the control argument.  By the same token, the standards and
  registered interfaces should be kept as up-to-date as possible.

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

  4 EXISTING TOOLS

  4.1 Installed Multics Commands

       There  are several  installed Multics  commands for  library
  installations    and   maintenance.    These    are   update_seg,
  get_library_segment,   and   the    library_*   commands   (e.g.,
  library_fetch).   update_seg  does  a   good  job  of  doing  the
  installation,  but many  users have   trouble using  it with  the
  current interface.   The library_* commands are  also useful, but
  most users do  not seem to know them too  well, sometimes causing
  problems.   The  get_library_segment  command,  though supposedly
  obsoleted  by library_fetch,  is still   in active  use since  it
  searches  all   the  Multics  libraries  (which   SDSF  considers
  subsystems of the Multics system library).

  4.2 Multics/MCR Tools

       The  Multics Change  Request  (MCR)  tools handle  SCRs very
  well, but is not installed  in standard libraries.  They also use
  private software of an ex-MDC member which was deleted and had to
  be  recovered.  These  tools must  be upgraded  to interface with
  SDSF;  this is expected  to mainly be  in the form  of additional
  interfaces.

       The Multics  library (>udd>Multics>library) has  many useful
  tools  which  are  used  for  debugging,  development, regression
  testing,  structure cross-referencing,  and auditing.   The major
  problem is that  not everyone knows of these tools  or the useful
  features supported.   As these tools  are not installed,  they do
  not aid library users at other sites.

  4.3 Subsystem exec_com's and Vector DBs

       Lindsey Spratt and Matt Pierret developed a set of exec_coms
  commonly  referred to  as the  subsystem development  (or subsys)
  tools.  They have proved very  useful in Multics' Data Management
  and B2 functional tests development.   These are well thought out
  tools  and remove  some of   the hassles  of update_seg  from the
  installer.   Much of  SDSF is  based upon  the subsys  tools, and
  lessons learned while working on them.

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

       These  tools have  been growing  incrementally during  their
  life.  Some of the changes made do not fit will into the original
  mechanism.  One  example is binding,  which was added  during the
  Data Management  project.  It was relatively easy  to add support
  for bound modules, but some adjustments  had to be made in module
  handling which required database reloading.  However, these tools
  are very  slow, due in large  part to their being  implemented as
  exec_coms.

       The  subsystem tools use  vector databases, a  private DBMS,
  which  is relatively  easy to  use compared  with many relational
  database products.  However, vector databases are easily damaged.
  These  tools are  also written   with exec_com,  adding to  their
  slowness.  The library database is  difficult to expand to handle
  large  libraries,  such  as  the  entire  Multics system library,
  because it has a maximum size  of one segment.  This has caused a
  few times  reloading the subsys databases  when the functionality
  was expanded.

  4.4 ACTC FORTRAN Maintenance exec_com's

       The Advanced  Computing Technology Center (ACTC)  at Calgary
  has  developed several  tools for  their support  of the  FORTRAN
  compiler.   Of particular  interest  is  the recreate.ec  tool to
  allow  versioning to be  handled easily.  This  was MCR'd at  one
  time,  but   changes  were  requested  before   allowing  general
  installation.  A set of tools akin to this is required to support
  multiple  versions of  modules,  either  between releases  or for
  backup capability.

  5 OTHER SYSTEMS

       There  are several  other systems  in use  on other systems.
  The  reader  is  referred  to  the  References  section  for more
  information on these systems.

    Ada Programming Support Environment (APSE, KAPSE).
    AT&T DMERT Software Control System
    UNIX  (TM)  Source  Code  Control  System  (SCCS)  and Revision
       Control System (RCS)
    Honeywell  Software  Development  Environment  (SDE,  only runs
       under UCOS III).

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

  6 INITIAL DESIGN

       The following  is the initial design to  satisfy the minimum
  initial   requirement  of   being  able   to  open   modules  for
  modifications, and  install them in the  various phases necessary
  for  development, testing,  and release.   Auditing, binding, and
  module building  will be done  early after the  initial system is
  operating as phase two of the SDSF project.

  6.1 Databases

       SDSF   uses   three   databases:  the   per-system   library
  definition  database,   the  per-library  module   and  subsystem
  definition  database,  and  the  subsystem  module database.  The
  proposed data  models for these databases are  presented in their
  own sections below.  N.B.:  all the defined relations will not be
  used  in the  first implementation,  but are  included to  aid in
  understanding the SDSF mechanisms.

       The databases will be implemented on Multics using MRDS with
  Data Management (DM) files, not vfile_ files.  While DM databases
  are  slower, they  are also   protected from  process and  system
  failure.   It is  felt the  SDSF interfaces  usage will  be small
  compared to the entire work done to prepare a change to a library
  and  the small slow-down  caused by using  DM for reliability  is
  worth the cost.

  6.1.1 PER-LIBRARY DEFINITION DATABASE

       All subsystems  and modules in a single  library are defined
  in the per-library definition database.  All modules in a library
  have a  minimum of information which is  required, in particular,
  the subsystem the module belongs to, the version installed in the
  system library,  and the module's owner.  Each  subsystem is also
  defined with various attributes.  It also holds a small amount of
  general information about the library, such as the current owner,
  and historical  information.  See sdsf.library.cmdb for  the data
  model (Appendix A).

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

  6.1.2 PER-SUBSYSTEM DATABASE

       All  modules' working information  is kept in  the subsystem
  database.  This includes the current  state of a module's version
  other than the system version, who  is working on the module, and
  the phase of the module (e.g., experimental).  Provision has been
  made   to   support   the   dynamic   cross-referencer,   binding
  information, interface checking,  auditing, and properties; these
  are   not   planned   for   the   initial   implementation.   See
  sdsf.subsystem.cmdb (Appendix B).

       It is important to  remember the per-subsystem relations may
  actually  occur in the  per-library database.  This  allows small
  libraries, such as those owned  by an individual users to require
  only  one  database;  at  the  same  time,  the system library is
  allowed to have its component subsystems split away for quota and
  access reasons.

       A module  name IS NOT  necessarily unique within  a library,
  but IS unique within its  containing subsystem.  This requires us
  to  include  the  subsystem  name  in  the  primary  key  of  the
  per-library module  relation and the  per-subsystem module_state,
  etc.  relations.

  6.2 Finding Libraries and Subsystems

       There will  be three ways  for a user  to find a  library or
  subsystem.   Which  mechanism  is  used  will  depend  on how the
  library is asked for when the library command is used.

       A user process will normally have a default library set.  If
  a library is  not explicitly requested, the default  is used.  If
  the library specified is either  an absolute or relative pathname
  (i.e., contains  either a ">"  or "<" character),  the library is
  looked for at the given location.

  If the  library is specified only  by a name, the  library search
  list is used  to locate the library.  The  default library search
  path  is >site>libraries  and it  ideally contains  links to  all
  publicly  available libraries.   As  with  forum meetings,  it is
  expected some users and projects will have their own paths to add
  to the search list.

  A process may also have a default subsystem set, but only for the
  default library.   In all other cases, the  subsystem will either
  need  to be  explicitly specified,  or will  be evident  from the
  module  being worked with.   If a module  is not unique  within a
  library, the subsystem must always be explicitly set.

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

  6.3 Description of the library Command

       A new command,  library, will be added to  the system.  This
  will implement the phase one  SDSF requirements.  It will replace
  get_library_segment and  library_fetch for those  libraries which
  use  SDSF.   The  library   install  operation  will  either  use
  update_seg or its internals.   Manual style documentation for the
  library command can be found in Appendix C.

  7 PROBLEMS

       The major  problem with the initial  design is it is  a very
  small  subset of  the required  functionality.  It  also does not
  provide for multiple locks on  the same module which is sometimes
  necessary with large, multi-developer projects.

       The  install operation  is  still  rather primitive.   It is
  difficult to save  work when interrupted, such as  when work must
  be dropped for a meeting.  One complaint of the subsys exec_com's
  was the length of time to do an installation was very long.  This
  was in part due to the use of exec_com's for implementing subsys.
  But the  ability to have an  absentee do (or at  least do initial
  preparation of) an installation was requested several times.

  8 REFERENCES

  The Ada Language System
       by Martin  I. Wolfe, Wayne Babich, Richard  Simpson, Richard
       Thall,  and Larry  Weissman, Computer,  Vol. 14, No. 6, June
       1981, pg. 37-45.

  The Ada Environment:  A Perspective
       by  Vic Stenning,  Terry Froggat,  Roger Gilbert,  and Ellis
       Thomas, Computer, Vol. 14, No. 6, June 1981, pg. 26-36.

  The 3B20D   Processor  and   DMERT  Operating   System:  Software
       Development System
       by B. R. Rowland and R. J. Welsch, The Bell System Technical
       Journal, Vol. 62, No. 1, Part 2, January 1983.

  The 3B20D Processor and  DMERT Operating System:  Integration and
       System Test
       by  W. F. Klinksiek  and  H. L. Mitchell,  The  Bell  System
       Technical Journal, Vol. 62, No. 1, Part 2, January 1983.

  SDE I - Software Development Environment
       by  Mark D. Spinrad  (Honeywell CSC),  The Computer Sciences
       Forum, Vol. 9, No. 2, April 1985.

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

  Multics Library Maintenance SDN, Preliminary Edition
       Order No. AN80, May 1979 (out of print).

  MAB032-01:  Experimental Library (EXL)
       by Paul W. Benjamin, November 1982.

  MAB056-02:  Multics Configuration Management:  Installing Planned
       Changes in System Libraries
       by Frank W. Martinson and Gary E. Johnson, August 1985.

  MAB057-02:  Multics     Configuration     Management:  Installing
       Emergency Changes in System Libraries
       by Gary E. Johnson, August 1985.

  MAB063-01:  Multics Configuration Management:  Critical Fixes for
       Released Software
       by Gary C. Dixon, August 1985.

  MAB066:  Multics Configuration Management:  Software Development
       by Benson I. Margulies and Ron Barstad, August 1985.

  MAB067:  Procedures for Software Installation and Integration
       by W. Olin Sibert, August 1985.

  MAB068:  Multics Configuration Management:  Programming Standards
       by Ron Barstad, August 1985.

  MAB069:  Multics   Configuration    Management:  Guidelines   for
       Auditing Software
       by Gary C. Dixon, August 1985.

  MAB070:  Multics Configuration Management:  Policy Statement
       by Charles T. Clingen and Joe M. Stansbury, August 1985.

  MAB071:  Multics      Security      Coordinator:  Duties      and
       Responsibilities
       by Joe M. Stansbury, August 1985.

  MTB416:  New Program Coordination Facility
       by David Spector, 14 May 1979.

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

                    Appendix A - Per-library Data Model

  /* ***********************************************************
     *                                                         *
     * Copyright, (C) Honeywell Information Systems Inc., 1986 *
     *                                                         *
     *********************************************************** */

  /* DESCRIPTION

            Data  model  for a SDSF library.  All modules which are
       to   be  handled  by  the  system  development  and  support
       facilities  (SDSF)  must be registered in a library (and the
       library  must  be  registered  in the SDSF system database).
       This  database  plus all subsystem databases for the library
       are  equivalent  to  the  subsys  tools  databases  perm.vd,
       location.perm.vd, and include_file.perm.vd.

            ACCESS:   r   for  all,  rw  for  developers  and  SDSF
       installers (unless the library is private).

            A  library  maintainer may define subsystems within the
       library.  A subsystem may have a database separated from the
       library  database,  though it is logically a part of the it.
       This ability is provided to:
          a)  assign  access  of  a  specific  subsystem  to  avoid
               accidental damage,
          b)  distribute  database storage through the hierarchy as
               is done with the modules comprising the library, and
          c)  increase  the  speed  of access to the database(s) of
               very  large libraries, as the Multics system library
               or a site's local applications library.

            The  relations  for  a  subsystem  database  should  be
       defined  in  this  model.   For  clarity  during  the review
       process,    they    are    not   and   may   be   found   in
       sdsf.subsystem.cmdb.   It  is  also expected a large library
       will  have a miscellaneous subsystem defined, which will use
       the subsystem relations in the library database.

            NOTE: a module_name is not unique within a library, but
       is unique within a single subsystem.
  */

  /* HISTORY COMMENTS:
    1) change(86-01-23,Newcomb), approve (), audit ():
       Initial prototype.
                                            END HISTORY COMMENTS */

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

  domain:
       command        char (256) varying aligned,
       comment        char (256) varying aligned,
       location       char (168) aligned,
       name           char (32) aligned,
       time_created   fixed bin (71)
  ; /* end domain definitions */

  attribute:
       command_dev              command,
       creation_approval        name,
       held_by                  name,
       library_comment          comment,
       library_creation_approval name,
       library_name             name,
       library_owner            name,
       library_state            name,
       library_time_created     time_created,
       module_name              name,
       module_type              name,
       owner                    name,
       subsystem_name           name,
       subsystem_name_key       name,
       subsystem_state          name,
       version                  name
  ; /* end attribute declarations */

  relation:
    library_info (              /* general info */
       library_name*            /* only primary, e.g., rpi_chess,
                                   but not chess and chs */
       library_state            /* e.g., development, experimental,
                                   active (normal state), obsolete,
                                   permanently_frozen (as rpi_chess is),
                                   damaged */
       library_owner            /* "responsible" user, e.g., Roth.Mcc */
       library_time_created     /* history, e.g., 19771001 */
       library_creation_approval /* history, e.g., Johnson.SysAdmin */
       library_comment          /* extra info, if desired */
  ),
    subsystem_names (
       subsystem_name*          /* e.g., dms, data_mgt, and
                                          data_management_system */
       subsystem_name_key       /* e.g., data_management_system */
  ),
    subsystem (
       subsystem_name_key*      /* e.g., data_management */
       location                 /* of subsystem's database,
                                   e.g., >udd>m>dms_sys>dms.ssd */
       subsystem_state          /* see sdsf.system's library rel. */
       owner                    /* "responsible user": used for

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

                                   problem routing, reporting,
                                   charges, etc.; e.g., Data_Mgt */
       time_created             /* history */
       creation_approval        /* history (SCR or manager) */
       held_by                  /* should only be a lib. maintainer;
                                   if null, subsystem is free */
  ),
    module (
       module_name*             /* e.g., before_journal_status */
       subsystem_name_key*      /* e.g., data_management again */
       creation_approval        /* SCR or manager */
       owner                    /* user of primary responsibility */
       version                  /* version in "system" hierarchy */
       module_type              /* lang., object, exec_com, etc. */
       command                  /* if different from normal command;
                                   for use with modules like as_who.pl1,
                                   which will not compile with -tb */
  ),
    compilation_command (
       module_type*   /* e.g., pl1, compose, alm */
       command        /* e.g., do "pl1 &r1 -ot -map &rf2" */
       command_dev    /* e.g., do "pl1 &r1 -tb -map -prefix..." */

  ); /* end of relation definitions */

  index:
       subsystem (owner subsystem_state held_by),
       module (subsystem_name_key owner module_type)
  ; /* end of index definitions */

  /* end of SDSF per-library definition data model */

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

                   Appendix B - Per-subsystem Data Model

  /* ***********************************************************
     *                                                         *
     * Copyright, (C) Honeywell Information Systems Inc., 1986 *
     *                                                         *
     *********************************************************** */

  /* DESCRIPTION

            Data  model for a SDSF subsystem library database.  All
       modules  which  are  to be handled by the system development
       and  support  facilities  (SDSF)  must be registered in this
       database;  in  addition, they must also be registered in the
       SDSF  library  database to which the subsystem belongs.  See
       sdsf.library.cmdb.

            ACCESS:  r for all, rw for all subsystem developers and
       SDSF installers (unless the library is private).

  */

  /* HISTORY COMMENTS:
    1) change(86-01-23,Newcomb):
       Initial prototype.
                                            END HISTORY COMMENTS */

  domain:
       control_flag   bit (1) aligned,
       date_time      fixed bin (71),
       long_string    char (256) varying aligned,
       name           char (32) aligned,
       pathname       char (168) aligned
  ;
  /* end of domain definitions */

  attribute:
       access_list              long_string,
       add_name                 name,
       auditor                  name,
       audit_state              name,
       bound_module_name        name,
       called_entry_name        name,
       called_module_name       name,
       command                  long_string,
       comment                  long_string,
       date_audited             date_time,
       declaration              long_string,
       directory                pathname,
       directory_type           name,
       do_not_link_entries      control_flag,

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

       entry_name               name,
       held_by                  name,
       include_file_name        name,
       interface_type           name,
       location                 pathname,
       module_name              name,
       module_state             name,
       no_link_entry            name,
       notification_type        name,
       old_module_name          name,
       old_version              name,
       phase                    name,
       retain_entry             name,
       retain_all_entries       control_flag,
       retain_table_flag        control_flag,
       ring_brackets            long_string, /* under investigation */
       subsystem_name_key       name,
       time_phase_changed       date_time,
       time_state_changed       date_time,
       user                     name,
       version                  name
  ;
  /* end of attribute declarations */

  relation:
    directory_info (
       directory_type*          /* e.g., source */
       subsystem_name_key*      /* e.g., system_standard */
       directory*               /* e.g., >ldd>sss>s, >sss */
       phase                    /* e.g., done, exl, dev */
  ),
    module_state_info (
       module_name*             /* may only occur once per subsys */
       subsystem_name_key*
       held_by*                 /* who is currently working
                                   on the module */
       version*                 /* and what version is it? */
       module_state             /* open or shut */
       time_state_changed       /* history and metering */
       phase                    /* see above */
       time_phase_changed       /* history and metering */
       comment                  /* for user */
  ),
    module_names (    /* used mainly for commands and exec_com's */
       module_name*
       add_name*      /* also generates synonym statements if module
                         is bound in a larger executable unit */
       subsystem_name_key*
  ),
    notification (          /* for sending various notifications */
       module_name*         /* may be starname or name */

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

       user*                /* who wants to know? */
       notification_type*   /* always, or we can register a temp so
                               conflicting openings can be allowed */
       subsystem_name_key*
  ),
    interface (       /* for crossreferencing, depd, validation */
       module_name*   /* e.g., bjm_write */
       entry_name*    /* e.g., begin_mark */
       version*
       subsystem_name_key*
       declaration    /* entry (bit (36) aligned,...) */
       interface_type /* internal, external, data */
  ),
    external_dependency (       /* for crossreference, validation */
       module_name*
       version*
       called_module_name*
       called_entry_name*
       subsystem_name_key*
  ),
    include_file_dependency (   /* for crossreferene, validation */
       module_name*
       version*
       include_file_name*
       subsystem_name_key*
  ),
    special_property (
       module_name*
       subsystem_name_key*
       access_list    /* used for privileged gates, etc. */
       ring_brackets  /* used for gates, etc. */
  ),
    audit_info (      /* how did a module fare in audit? */
       module_name*
       version*       /* what version was auditing */
       subsystem_name_key*
       phase          /* what phase was audited */
       auditor        /* who did the audit? */
       audit_state    /* passed, failed, passed w/cmts, unaudited */
       date_audited   /* when was the last audit done? */
  ),
    recreate_info (   /* how do we get back to an older version */
       module_name*
       version*
       subsystem_name_key*
       old_module_name*         /* in case of renaming */
       old_version
       location                 /* of re-creation info */
       command                  /* ... to to the transformation */
  ),
    binding_info (              /* how do we package things? Used to

  MTB-739                                Multics Technical Bulletin
                                         System Dev. & Support Fac.

                                   create and/or validate bindfiles */
       module_name*             /* ...being bound */
       subsystem_name_key*
       bound_module_name        /* container execution unit */
       retain_table_flag        /* yes ==> save symbol table; default
                                   is to not retain it */
       retain_all_entries       /* yes ==> :global, else check the
                                   binding_retain_info relation */
       do_not_link_entries      /* yes ==> :global, else check the
                                   binding_no_link_info relation */
  ),
    binding_retain_info (       /* entries to be retained */
       module_name*
       subsystem_name_key*
       retain_entry*
  ),
    binding_no_link_info (      /* entries to not be prelinked */
       module_name*
       subsystem_name_key*
       no_link_entry*
  );
  /* end of relation definitions */

  index: /* note: first component of a primary not indexed */
       module_state_info (held_by version module_state phase),
       notification (user notification_type),
       include_file_dependency (include_file_name),
       interface (entry_name version),
       external_dependency (called_module_name called_entry_name
            version),
       audit_info (audit_state auditor),
       binding_info (bound_module_name)
  ;
  /* end of index definitions */

  /* end of SDSF per-subsystem definition data model */

  Multics Technical Bulletin                                MTB-739
  System Dev. & Support Fac.

                 Appendix C - library Command Description

               ________________________________________

  NAME: LIBRARY

  SYNTAX AS A COMMAND

  library operation args {-control_args}

  SYNTAX AS AN ACTIVE FUNCTION

  [library operation {-control_args}]

  FUNCTION

  The library command/AF is the interface to the System Development
  and  Support Facilities (SDSF).   It allows a  user to extract  a
  module  (optionally  locking  against  modification  by  others),
  install  one or  more modules,  release a  module's lock,  and do
  various administrative functions.

  ARGUMENTS

  operation
     designates  the  operation  to  be  performed.   See  "List of
     Operations"  below for  a description  of each  operation, its
     command syntax line, and specific application.

  CONTROL ARGUMENTS
     can  be  one  or  more  control  arguments,  depending  on the
     particular operation.

  NOTES ON LOCKING

  The  locking  of  modules  is  used  to  aid  productivity  in  a
  multi-user environment.  It is also possible to lock a library or
  subsystem, but  only for administrative purposes,  except for the
  one case  of extra large  installations.  There is  currently one
  lock per module, with a  per-version module lock being considered
  for future implementation.  A module's lock ID is the user's name
  and project.

  A module  should only be locked  if it is going  to be deleted or
  modified.   Investigation is  a normal   start of  the above  two
  activities;   users  should   lock   a   module  from   the  time
  investigation of modifications start until the time the module is
  installed  or  the  investigation  turns  out  negatively.   In a
  multi-user  development/maintenance environment,  it is  possible

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  for two people to start the same work without realizing it.  When
  a  second user  tries to  lock a  module already  open to someone
  else,  he is  informed of  the  other  user's work  via the  lock
  mechanism.  This saves valuable time.

  NOTES ON FINDING LIBRARIES

  The user process  normally has a current default  library set and
  it  is this  library which  is searched.   The user  may use  any
  library he has  access to via the -library  control argument.  If
  -library's  argument is  a relative  or absolute  pathname (i.e.,
  contains either a  ">" or "<" character), the library  must be at
  the location specified.   If the argument is a  name, the library
  search list is used to find the requested library.

  LIST OF OPERATIONS

  Each  operation   is  described  in  the  general   format  of  a
  command/active function.   Where appropriate, notes  and examples
  are included for clarity.

  Operation:  cleanup

  SYNTAX AS A COMMAND

  library cleanup {NAMES} {-control_args}

  FUNCTION

  deletes library/subsystem  modules no longer  necessary.  Library
  modules matching  one or more search name  arguments are selected
  as candidates for possible deletion.   If their contents have not
  been modified or used within a  given grace period, then they are
  eligible for deletion.

  ARGUMENTS

  NAMES
     are the search names used  to locate modules as candidates for
     deletion.  The Multics star convention can be used to identify
     a group of modules with a single search name.  Up to 30 search
     names  can be  given in  the command.   (Default search  name:
     "!??????????????")

  CONTROL ARGUMENTS

  -brief, -bf
     only  lists modules  eligible for   deletion when  a list  was
     requested.  (Default)

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  -date_time STR, -dt STR
     causes  a  module  to  not  be  eligible  for  deletion if its
     date/time  contents  modified  and  used  are  after  the time
     specified by  STR.  This control overrides  the -time control.
     (Default:  the earlier of the current time minus seven days or
     the system bootload time)

  -delete, -dl
     causes  the  modules  that  are  eligible  for  deletion to be
     deleted.  (Default)

  -library NAME, -lib NAME
     specifies  the  library  to  be  searched  for  modules  to be
     deleted.  (Default:  process' current default library)

  -list, -ls
     causes a list  of the modules are eligible for  deletion to be
     printed on the user's terminal.  (Default)

  -long, -lg
     causes the names  of all modules matching the  search names to
     be  printed  on  the  user's  terminal,  even  if they are not
     eligible  for deletion  according to  their date/time contents
     modified/used.   Modules that  are eligible  for deletion  are
     flagged with  an asterisk (*).   If -delete is  used, only the
     modules eligible for deletion are removed from the library.

  -name NAME, -nm NAME
     explicitly  identifies  a  search  name  regardless of special
     characters or whitespace in NAME (see NAMES above).

  -no_delete, -ndl
     indicates eligible modules are not to be deleted.

  -no_list, -nls
     does not create any listing of modules eligible for deletion.

  -no_query
     indicates  the user  is not  to be  queried for  permission to
     delete modules.

  -query
     asks the user for permission to delete modules before actually
     doing so.  (Default)

  -subsystem NAME, -ss NAME
     specifies the subsystem within the  library to be searched for
     modules to be deleted.

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  -time days, -tm days
     gives  a  grace  period   in  days.   Matching  modules  whose
     date/time  contents modified or  used falls within  this grace
     period are not eligible for deletion.  (Default:  either seven
     days,  or the  system bootload  date minus  the current  date,
     whichever is larger)

  ACCESS REQUIRED

  If  an entry that  is eligible for  deletion resides in  an inner
  ring,     library_cleanup     must     call     the    privileged
  installation_tools_  gate to  change its  ring brackets  prior to
  deleting it.  If the user does not have access to this gate, then
  no cleanup is done and an error is reported.

  Operation:  create, cr

  SYNTAX AS A COMMAND

  library cr PATH {-control_args}

  FUNCTION

  creates a new library, prompting for information if necessary.

  ARGUMENTS

  PATH
     the  name of  the library  and the  location where  to put its
     database.

  CONTROL ARGUMENTS

  -input_file PATH, -if PATH
     causes the library setup information  to be retrieved from the
     file PATH.  If not all  the required information is found, the
     user is prompted for what is missing, first being asked if the
     request loop should be entered.   See "Notes on create's input
     file" below.  This control overrides -request_loop.

  -prompt
     prompts the  user for library creation  information; overrides
     -input_file.  (Default)

  -register
     sends mail to the SDSF  system administrator requesting a link
     to the  new library be  put in the  system-wide library search
     directory,  >site>libraries.  It   is recommended  any library
     meant for public consumption be linked to.

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  -request_loop, -rql
     enter  the  creation  request  loop;  this  control  overrides
     -input_file.  (Default)

  NOTES

  The user  creating the library is given  administrative access to
  the  library.   For  existing  libraries  using  Multics  library
  descriptors, it is recommended the descriptor source be used as a
  starting  point  for  creating  the  library creation information
  file.   No automatic  conversion tools   exist for  going from  a
  library  descriptor to  an SDSF   database as  there are  several
  differences   between   the   SDSF   library/subsystem   creation
  information and a library descriptor.

  NOTES ON CREATE'S INPUT FILE

  A library  creation file exists as  a text file with  a suffix of
  "lib_cr" with  a required syntax.  The  file is used to  load the
  library's and  its subsystems' databases.  There  is a one-to-one
  correspondence  between the  tuples to   be loaded  and the  file
  contents,  except  for  some  values  provided  by  the  creation
  routines (e.g., time of library creation).

  The  lib_cr file  has  statements,  values, and  delimiters.  The
  statements are described below with sample values in the example.
  A semi-colon  (";") ends a  statement.  A colon  (":") delimits a
  keyword and its values.  Commas are used to delimit values within
  the  same statement; whitespace  is generally ignored  unless the
  value is quoted.

  There  are three  major keywords   for a  lib_cr file:   Library,
  Subsystem,  and Compilation.  Only  one Library statement  may be
  used.  Any number of Subsystem  and Compilation statements may be
  given.  There are various minor statements allowed for each major
  statement  and  these  correspond  to  various  attributes of the
  relations in the library and subsystem databases.  They are shown
  in the example below:

  /* sample specification for library creation */

  Library:  Newcomb_lib, lan_lib;             /* primary {, add} */
    comment: string;   /* used in system library registration DB */

  Subsystem:  public_tools, pub;
    location:  >udd>Multics>Newcomb>library /*>public_tools.db */
    state:  active;
    owner:  Newcomb.Multics;
    approval:  <none>; /* and none needed in this case */
    directory_info: /* next stmts must be triplets */

  _______                                                   _______

  library                                                   library
  _______                                                   _______

      directory:  >udd>Multics>Newcomb>library>source;
        type:  source;
        phase:  done;
      directory:  >udd>Multics>Newcomb>library;
        type:  executable;
        phase:  done;
      directory: >udd>Multics>Newcomb>work;
        type: source, executable;
        phase: exl; /* No development dir */

  Subsystem:  private_tools, prvt;
    location:  >udd>Multics>Newcomb>library /*>public_tools.db */
    state:  active;
    owner:  Newcomb.Multics;
    approval:  <none>;
    directory_info: /* next stmts must be triplets */
      directory:  >udd>Multics>Newcomb>library>private>source;
        type:  source;
        phase:  done;
      directory:  >udd>Multics>Newcomb>library; /* uses ACL's */
        type:  executable;                /* to control access */
        phase:  done;
      directory: >udd>Multics>Newcomb>work;
        type: source, executable;
        phase: exl; /* No development dir */

  Compilation: /* minor stmts must be in triplets */
    module_type:  pl1;
      command:  "do ""pl1 &r1 -ot -map""";
      command_dev:  "do ""pl1 &r1 -tb -map -prefix size,stringrange
  c,subscriptrange,stringsize"";
    module_type:  alm;
      command:  "do ""alm &r1 -list""";
      command_dev:  "do ""alm &r1 -list""";

  /* end of example creation file */

  It is possible to have a  system default mechanism for the module
  type  specification for the  Compilation statement.  This  is not
  done to give the user more control over the library and what goes
  in it by allowing evaluation of the new module type.

  Operation:  extract

  SYNTAX AS A COMMAND

  library extract MODULE {-control_args}

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  SYNTAX AS AN ACTIVE FUNCTION

  [library extract MODULE {-control_args}]

  FUNCTION

  extracts  a  module  from  a  library  into  the  user's  working
  directory, optionally locking the  module against modification by
  other users.   The AF returns  true if the  module was extracted,
  false otherwise.

  ARGUMENTS

  MODULE
     is the name of the module to be fetched from the library.

  CONTROL ARGUMENTS

  -exists
     indicates  the  module  being  copied  from  the  library must
     already exist.  This overrides -new.  (Default)

  -extract
     extracts  the module,  even when  -lock USER_ID  is specified.
     (Default)

  -force, -fc
     extracts  and  locks  the  module,  overriding  another user's
     existing  lock.  This  requires administrative  access to  the
     library/subsystem  containing the  module.  A  notification is
     sent to the user whose lock is being bypassed.

  -library NAME, -lib NAME
     extract the module from the  library named NAME instead of the
     user's current default library.

  -lock {USER_ID}
     locks the module to the user when it is extracted.  If USER_ID
     is specified,  it is used as  the lock ID.  If  the lock ID is
     not   same  as   the  current   process'  lock   ID  (requires
     administrative  access), a  notification is  sent to  the user
     being given the module's lock.  If the module's lock cannot be
     set, the operation is aborted.   See "Notes on Locking" above.
     (Default:  -lock [user name].[user project])

  -name MODULE, -nm MODULE
     explicitly  identifies MODULE as  the name of  a module to  be
     copied, regardless  of special characters or  whitespace; also
     provided for abbrevs and self-documenting exec_coms.

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  -new
     only "extracts" the module if it does not already exist in the
     library/subsystem.  This may only be used with -lock.

  -notify, -nt
     registers  the user  for notification  of when  the module  is
     released from an existing lock.  When the notification message
     is sent, the registration is deleted.

  -no_extract
     do  not copy the  module from the  library.  This may  only be
     used when -lock is used.  (Default  with -lock when lock ID is
     not current user's lock ID)

  -no_force, -nfc
     does not  override another user's existing lock  on the module
     being copied.  (Default)

  -no_lock
     indicates  the module  is not   to be  locked upon  retrieval;
     counteracts -lock.  (Default)

  -no_notify, -nnt
     do not register  the user for notification when  the module is
     released from an existing lock.  (Default)

  -no_template, -ntmp
     do not create a template module when -new is given.  (Default)

  -subsystem NAME, -ss NAME
     specifies the subsystem within the library the module is to be
     extracted from.  This is used to differentiate between modules
     of the same  name in a library (N.B., a  module name is unique
     within a subsystem, but not always within a library).

  -template, -tmp
     extracts  a template module  if -new was  used and the  module
     type has a template defined for it; e.g., exec_com's, pl1, and
     C type source modules may return a template source file.  (Not
     currently supported.)

  -version STR
     specifies  which version  of the  module is  to be  extracted.
     Currently, there is  only one lock per module,  not per module
     per version.  (Default:  system installed version).

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  NOTES

  If  the current  lock ID  is  different  from the  default ID,  a
  warning  is sent to  the library administrator  indicating normal
  configuration management policies have  been bypassed.  Users who
  lock modules  should have the  modules in the  user hierarchy for
  working  them over,  as the  library copy  is not  supposed to be
  directly modified.   The case of locking a  module in preparation
  for deletion, though  not a violation of CM  policy, still causes
  the warning message to be sent to the administrator.

  Operation:  install

  SYNTAX AS A COMMAND

  library install {MODULE} {-control_args}

  FUNCTION

  installs one or more  modules into a library/subsystem, prompting
  the  user   for  needed  information.   Only   developmental  and
  experimental installations are currently supported.

  ARGUMENTS

  MODULE
     is  one or more  module names to  be installed by  addition or
     modification.   If not specified,  all modules in  the current
     directory   default  to   the  installation   set.   The  star
     convention is allowed, as are relative and absolute pathnames.

  CONTROL ARGUMENTS

  -delete MODULE, -dl MODULE
     specifies those modules to be  installed via deletion from the
     library/subsystem.  The star convention is NOT allowed.

  -library NAME, -lib NAME
     specifies the  library where the  installation is to  be done.
     If not specified, the user's current default library is used.

  -name MODULE, -nm MODULE
     explicitly  identifies MODULE as  the name of  a module to  be
     installed via addition or  modification, regardless of special
     characters or whitespace.

  -subsystem NAME, -ss NAME

  _______                                                   _______

  library                                                   library
  _______                                                   _______

     specifies the subsystem within the library where installations
     are to be  done.  If modules are to be  installed in more than
     one subsystem  in one installation, this argument  may be used
     more than once, or not at all.

  NOTES

  Modules  are  installed  according  to  the  control  information
  recorded  in  the  subsystem   database  containing  the  module.
  Modules  are  installed  at  the  newest  level  defined  for the
  subsystem.  If  a subsystem has a developmental  level, the first
  installation is done at that level.  If the installation is being
  done from the developmental level,  then the next higher level is
  used (e.g., experimental).

  EXAMPLES
  Data  Management  has  three   module  levels  defined:   system,
  experimental, and development.  A modification is first installed
  at the  developmental level, then "promoted"  to the experimental
  level, and finally installed at  the system level.  The last step
  is not currently supported in SDSF's first implementation phase.

  Operation:  lock

  SYNTAX AS A COMMAND

  library lock {-control_args}

  SYNTAX AS AN ACTIVE FUNCTION

  [library lock {-control_args}]

  FUNCTION

  locks  an entire  library or  a library's  subsystem so  only the
  locking  user may  access  the  library/subsystem.  At  least one
  control  argument specifying  the object   to be  locked must  be
  given.   A module may  not be locked  via this command;  that may
  only be done via the  library extract operation.  Other users may
  hold locks to modules in the library/subsystem, but they will not
  be able to access them.

  CONTROL ARGUMENTS

  -library NAME, -lib NAME
     lock the library  NAME, or find the subsystem to  be locked in
     the  library NAME.   NAME may  be the  name of  the library as
     registered in a library  registration database, or an absolute
     or relative pathname to the library.

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  -subsystem NAME, -ss NAME
     lock the subsystem NAME within a library.

  Operation:  notify, nt

  SYNTAX AS A COMMAND

  library nt MODULE {-control_args}

  FUNCTION

  registers the user for notification  of when a new module version
  is installed.

  ARGUMENTS

  MODULE
     are one  or more names of  modules to be notified  about.  The
     star convention is allowed to identify a group of modules with
     an single name (e.g.,  lister*.*.**, **.ec, bjm*.*).  The name
     is  stored as  given, with   no validation  that any  existing
     modules in the library/subsystem  match the name.  This allows
     the user to be notified when new modules are installed without
     having to periodically update the notification registry.

  CONTROL ARGUMENTS

  -library NAME, -lib NAME
     specifies the  library to search when  notifications are being
     sent.  If  not used, the  process' current default  library is
     used.

  -name MODULE, -nm MODULE
     explicitly identifies MODULE  as the name of the  module to be
     notified   about,   regardless   of   special   characters  or
     whitespace.

  -remove, -rm
     deletes existing notification registrations matching the given
     specifications.

  -set
     registers the given modules for notification.  (Default)

  -subsystem NAME, -ss NAME
     specifies  the  subsystem  within  the  library  to search for
     modules when sending notifications.

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  -to ADDR
     indicates  the notification mail  is to be  sent to ADDR;  for
     those who  use several systems.  (Default:   [user name].[user
     project])

  NOTES

  This notification registration is  a "permanent" registration; it
  is  not  removed  after  a  notification  is  sent.  Cf. with the
  temporary  notification  registration  which  may  be  set by the
  extract operation.

  Operation:  set_defaults, sdft

  SYNTAX AS A COMMAND

  library sdft -control_args

  SYNTAX AS AN ACTIVE FUNCTION

  [library sdft -control_args]

  FUNCTION

  sets or resets the per-process default library and/or subsystem.

  CONTROL ARGUMENTS

  -library NAME, -lib NAME
     specifies  the library  to  be  the process'  default library,
     overriding any existing default.

  -no_query
     do not query for permission to override any existing defaults.
     (Default)

  -reset {STR}, -rs {STR}
     clears out the process'  default library and/or subsystem.  If
     STR is  no given or is  equal to "library" or  "lib", the both
     the  process' default subsystem  and library are  cleared.  If
     STR  is  "subsystem"  or  "ss",  the  default  library  is not
     changed, but the subsystem default is reset.

  -query
     asks the user for permission to change an existing default.

  -subsystem NAME, -ss NAME

  _______                                                   _______

  library                                                   library
  _______                                                   _______

     sets  the  subsystem  named  NAME  within  the current default
     library  to  be  the  process'  default  subsystem.  A default
     library  must  already  be  set,  or  be  set  by  the current
     invocation of this operation.

  Operation:  unlock

  SYNTAX AS A COMMAND

  library unlock {MODULE} {-control_args}

  SYNTAX AS AN ACTIVE FUNCTION

  [library unlock {MODULE} {-control_args}]

  FUNCTION

  unlocks  a  module,  subsystem,  or  library,  depending  on  the
  arguments  specified.  The  active function  returns true  if the
  requested lock was released, false otherwise.  At least one thing
  to be unlocked must be given.

  ARGUMENTS

  MODULE
     the name of the module to  be unlocked.  Normally, a module is
     unlocked by the install operation.

  CONTROL ARGUMENTS

  -force, -fc
     force the release  of the specified lock, even if  the user is
     not  the  holder  of  the  lock;  this requires administrative
     access to the library/subsystem, or SDSF administrative access
     if a library is being unlocked.  A notification is sent to the
     user  holding the  lock informing  him of  the unusual  action
     taken.

  -library NAME, -lib NAME
     specifies library NAME is to  be unlocked, or the subsystem or
     module to be  unlocked in library NAME.  NAME may  be the name
     of  the  library  as  registered  in  a  library  registration
     database, or an absolute or relative pathname to the library.

  -name MODULE, -nm MODULE
     explicitly identifies MODULE  as the name of the  module to be
     unlocked,  regardless  of  special  characters  or whitespace;
     provided for abbrevs and self-documenting exec_coms.

  _______                                                   _______

  library                                                   library
  _______                                                   _______

  -no_force, -nfc
     does not  force the release of  a lock if the  user is not the
     holder of the lock.  (Defualt)

  -subsystem NAME, -ss NAME
     specifies subsystem NAME within the library is to be unlocked,
     or the module to be unlocked is contained in subsystem NAME.