{
{   The purpose of this request is to register a file in the specified catalog,
{ to assign the file to a mass storage device with particular attributes, and
{ to create an attachment of the file to the requesting job.  The file is
{ attached with all modes of access and no sharing.
{
{   A DETACH_FILE command or amp$return request must be issued to explicitly
{ terminate the attachment of this file to the job.  An fsp$close_file request
{ will not detach a file whose attachment originated with this request.
{
{   This request is optional because NOS/VE assigns files to the mass storage
{ device class in the absence of a request such as this one.
{
{   This request will be rejected if the file cycle is already registered in
{ the specified catalog.
{
{   Each user is validated to have his/her files on a specific mass storage
{ set.  Each set is composed of one or more volumes of mass storage which are
{ candidates for assignment to this file.  This request provides four ways to
{ select from this list of candidate volumes the initial volume to which the
{ file will be assigned.
{
{     1.  If the INITIAL_VOLUME parameter is given a value other than
{         rmc$unspecified_vsn, then the volume identified by the recorded_vsn
{         is selected.
{
{     2.  If FILE_CLASS is given a value other than rmc$unspecified_file_class,
{         then the file will be assigned to a member of the designated class.
{
{     3.  If both INITIAL_VOLUME and FILE_CLASS are specified, then the
{         specific volume will be selected if and only if the mass storage
{         volume is a member of the class specified.
{
{     4.  If both rmc$unspecified_vsn and rmc$unspecified_file_class are
{         selected then the system will pick a candidate volume which has the
{         most available space.
{
{   One may use either the ALLOCATION_SIZE parameter or the ESTIMATED_FILE_SIZE
{ parameter to select the size of allocation to be used for the file; using
{ both parameters to make the selection is not permitted.  Using neither of the
{ two parameters to select allocation size will cause the system's nominal
{ allocation size to be used.
{
{       RMP$REQUEST_MASS_STORAGE (FILE, ALLOCATION_SIZE, ESTIMATED_FILE_SIZE,
{         FILE_CLASS, INITIAL_VOLUME, VOLUME_OVERFLOW_ALLOWED, STATUS)
{
{ FILE: (input)  This parameter specifies the name of the file which is to be
{       registered in a catalog and assigned to the mass storage device class.
{       The cycle reference must not refer to $HIGH or $LOW.  If the cycle
{       reference is omitted for a temporary file, the value 1 will be used.
{       If the cycle reference is omitted for a permanent file and there are no
{       existing cycles, the value 1 will be used for the cycle number;
{       otherwise, a value one higher than the current highest cycle will be
{       used.
{
{ ALLOCATION_SIZE: (input)  This parameter specifies the amount of contiguous
{       mass storage space, in bytes, which is to be allocated to the file each
{       time additional space is needed.  The system will use the value of this
{       parameter as a guide in selecting the quantum of allocation for this
{       file.  The actual allocation size for the file may be more or less than
{       the specified value due to the characteristics of the device determined
{       by the other parameters of this request.
{
{       The value rmc$unspecified_allocation_size will cause the allocation
{       size to be determined by the ESTIMATED_FILE_SIZE parameter.
{
{ ESTIMATED_FILE_SIZE: (input)  This parameter specifies the likely size of the
{       file in bytes.  This information is used to select the allocation size
{       which would minimize the amount of mass storage space assigned to the
{       file should it ulimately reach the estimated size.  This parameter is
{       not implemented at this time.
{
{       The value rmc$unspecified_file_size will cause the allocation size to
{       be determined by the ALLOCATION_SIZE parameter.
{
{ FILE_CLASS: (input)  This parameter specifies the class of the file which is
{       to be assigned.  NOS/VE supports up to 26 classes of files.  Each class
{       is identified by an alphabetic character (upper and lower cases are
{       equivalent).  NOS/VE will select a volume which belongs to the class
{       specified by this parameter; abnormal status will be returned if no
{       candidate volume belongs to the specified class.
{
{       Only the user $SYSTEM may specify the following values:
{
{           rmc$msc_system_swap_files      (C)
{           rmc$msc_system_catalogs        (J)
{           rmc$msc_system_permanent_files (K)
{           rmc$msc_user_catalogs          (L)
{           rmc$msc_system_critical_files  (Q)
{
{       A task executing in rings 6..4 may specify any file class except C, J,
{       K, L, and Q.
{
{       A task executing in rings 13..7 may specify rmc$user_permanent_files (M)
{       for a permanent file and rmc$user_temporary_files (N) for a temporary
{       file.
{
{       The value rmc$unspecified_file_class causes NOS/VE to place the file on
{       the volume specified by the INITIAL_VOLUME parameter.
{
{       If the value rmc$unspecified_vsn is used for the INITIAL_VOLUME
{       parameter and rmc$unspecified_file_class is also specified for this
{       parameter, NOS/VE will assign the file to a volume that belongs to the
{       class that is appropriate for the file and the job in which the file is
{       created.  Refer to the System Performance and Maintenance manual for
{       information about the NOS/VE default file assignments in effect for this
{       release.
{
{       Specification of any non-alphabetic character will cause abnormal
{       status to be returned.
{
{ INITIAL_VOLUME: (input)  This parameter specifies the identification of a
{       specific mass storage volume to which this file is to be assigned.
{
{       If volume overflow is not allowed, the entire file will reside on this
{       volume; otherwise, this volume will be the initial volume assigned to
{       the file.  Refer to the VOLUME_OVERFLOW_ALLOWED parameter.
{
{       If the requested volume has no space available or the volume does not
{       exist in the active configuration, this request will be rejected.
{
{       If FILE_CLASS is given a value other than rmc$unspecified_file_class,
{       then the volume specified by this parameter must belong to the file
{       class specified or the request will be rejected.
{
{       The user $SYSTEM may use this parameter to place a file on any volume
{       in the configuration; however, rmc$unspecified_file_class will need to
{       be specified for the FILE_CLASS parameter.
{
{       A user executing in the maintenance job class may use this parameter to
{       place a temporary file on any volume in the configuration, regardless
{       of whether or not the volume belongs to the temporary file class (N);
{       however, rmc$unspecified_file_class will need to be specified for the
{       FILE_CLASS parameter.
{
{       A task executing in rings 6..4 may specify any volume that belongs to
{       one of the following classes:  B, D ..I, M .. P, R .. Z.
{
{       A task executing in rings 13..7 may specify any volume that belongs to
{       class M for a permanent file or class N for a temporary file.
{
{       The value rmc$unspecified_vsn will cause the consideration of all
{       candidate volumes belonging to the file class specified (or defaulted).
{
{ VOLUME_OVERFLOW_ALLOWED: (input)  This parameter specifies whether or not the
{       file can be assigned to more than one volume.  If TRUE is specified,
{       the file may span any volume subject to validation and FILE_CLASS
{       constraints.  If FALSE is specified, the file will be confined to the
{       initial volume to which it is assigned.  Specifying no volume overflow
{       would typically be used in conjunction with requesting a specific mass
{       storage volume; this is generally done for fault tolerance reasons.
{       For example, all the files which are required for a particular feature
{       or product (e.g.  those required for system maintenance or operation)
{       must reside on the same volume (usually the system deadstart device) to
{       ensure their availability in case of a failure on any of the other
{       volumes.  Of course, copies of the files may be located on a second
{       volume (preferably on a different hardware path) to maximize
{       availability.
{
{       Specification of FALSE is permitted only in a job which has system
{       administrative privilege or maintenance privilege.
{
{       STATUS: (output)  This parameter specifies the request status.
{
{        CONDITIONS: pfe$bad_cycle_number
{                    pfe$bad_cycle_option
{                    pfe$bad_family_name
{                    pfe$bad_local_file_name
{                    pfe$bad_log_option
{                    pfe$bad_master_catalog_name
{                    pfe$bad_nth_subcatalog_name
{                    pfe$bad_password
{                    pfe$bad_permanent_file_name
{                    pfe$bad_retention_period
{                    pfe$catalog_full
{                    pfe$cycle_overflow
{                    pfe$cycle_underflow
{                    pfe$duplicate_cycle
{                    pfe$incorrect_password
{                    pfe$lfn_in_use
{                    pfe$name_already_subcatalog
{                    pfe$nth_name_not_subcatalog
{                    pfe$path_too_short
{                    pfe$pf_system_error
{                    pfe$unknown_family
{                    pfe$unknown_master_catalog
{                    pfe$unknown_nth_subcatalog
{                    pfe$usage_not_permitted
{                    rme$file_class_not_valid
{                    rme$improper_alloc_size_value
{                    rme$improper_cycle_reference
{                    rme$improper_est_file_size
{                    rme$improper_file_class
{                    rme$improper_recorded_vsn,
{                    rme$improper_vol_overflow
{                    rme$job_not_privileged,
{                    rme$redundant_alloc_size_spec,
{                    rme$vsn_not_part_of_set
{
{       IDENTIFIER: rmc$resource_management_id.
{
