{
{   The purpose of this request is to copy one file to another.
{   If file attributes are not explicitly specified for the output file,
{ the output file will inherit the attributes of the input file (except
{ for the ring attributes which default to the ring of the caller of
{ this request).
{   The copy terminates when end of information (EOI) is reached on the
{ input file or if the input file is an unlabelled tape file, the copy
{ terminates when a tapemark is encountered on the input file.  If an
{ unlabelled tape contains data followed by a single tapemark then more
{ data followed by another single tapemark, etc., this request must be issued
{ once for each data set terminated by a tapemark in order to obtain a
{ complete copy of the information on the input file.  This request does not
{ copy single tapemarks; however a tape volume is always terminated according
{ to convention.
{   The open position ($BOI, $ASIS, $EOI) of the input and output files may be
{ specified by suffixing the file path with the open position, e.g.
{ $user.x.$eoi.
{
{   The attachment of the input file to the job by this request will have the
{ following specifications:
{     Access_and_share_modes first choice:
{           access modes: (fsc$read)
{           share modes:  (fsc$read, fsc$execute)
{     Open_share_modes first choice: (fsc$read, fsc$execute)
{     Open_share_modes second choice: ALL, with the condition that some
{           instance of open within the same task specified a subset of
{           (fsc$read, fsc$execute) for Open_share_modes.
{
{   The attachment of the output file to the job by this request will have the
{ following specifications:
{     Access_and_share_modes first choice:
{           access modes: (fsc$append, fsc$shorten)
{           share modes:  no sharing
{     Access_and_share_modes second choice:
{           access modes: (fsc$append)
{           share modes:  no sharing
{     Open_share_modes first choice: no sharing
{     Open_share_modes second choice: ALL
{
{   The parameters input_attribute_validation and output_attribute_validation
{ are provided to ensure that both files, if previously created, conform to
{ the requirements of the caller.
{   The parameter output_creation_attributes is only used if the output file
{ is created as a result of the copy operation.  Attributes specified with this
{ parameter, are passed to fsp$open_file as mandated_creation_attributes.
{ Refer
{ to the discussion of fsp$open_file.
{
{     FSP$COPY_FILE (INPUT, OUTPUT, INPUT_ATTRIBUTE_VALIDATION,
{       OUTPUT_ATTRIBUTE_VALIDATION, OUTPUT_CREATION_ATTRIBUTES, STATUS)
{
{ INPUT: (input) This parameter specifies the name of the file from which
{     data is to be copied.
{
{ OUTPUT: (input) This parameter specifies the name of the file to which
{     data is to be copied.
{
{ INPUT_ATTRIBUTE_VALIDATION: (input) This parameter specifies the desired
{       attribute values of the input file.  Values of attributes specified
{       by this parameter are compared with those in effect for the input file;
{       an ame$attribute_validation_error abnormal status will be returned if
{       the values specified do not match those of the input file.
{
{       This parameter allows alternatives to be specified for each attribute
{       to be validated.  To specify an alternative value for an attribute,
{       simply provide another record in the array giving the alternate,
{       acceptable value.   Alternatives are processed in the order given.
{       If an alternative matches the value of the corresponding file
{       attribute, subsequent validation specifications of the attribute are
{       ignored.
{
{ OUTPUT_ATTRIBUTE_VALIDATION: (input) This parameter specifies the desired
{       attribute values of the output file.  Values of attributes specified
{       by this parameter are compared with those in effect for the output
{       file;
{       an ame$attribute_validation_error abnormal status will be returned if
{       the values specified do not match those of the output file.
{
{       This parameter allows alternatives to be specified for each attribute
{       to be validated.  To specify an alternative value for an attribute,
{       simply provide another record in the array giving the alternate,
{       acceptable value.   Alternatives are processed in the order given.
{       If an alternative matches the value of the corresponding file
{       attribute, subsequent validation specifications of the attribute are
{       ignored.
{
{ OUTPUT_CREATION_ATTRIBUTES: (input) This parameter specifies file attribute
{       values which will be mandated for the output file, if it is created
{       by this request.  If the output file was previously created, this
{       parameter will be ignored.  Attribute values specified using this
{       parameter have greater precedence than those of the input file or
{       any other command or request which may be used to specify attributes
{       for the output file.  A value of NIL for this parameter implies that
{       no mandated creation attributes are provided for the output file.
{       in this case all attributes will default to the values of the
{       corresponding attributes of the input file.  If the same attribute
{       is specified multiple times in the array, the last specification
{       is used.
{
{ STATUS: (output) This parameter specifies the request status.
{       CONDITION:
{                   aae$altkey_part_negative_pos,
{                   aae$cant_copy_several_nfs_to_1,
{                   aae$cant_replace_main_file,
{                   aae$copying_attributes_only,
{                   aae$copying_ek_to_non_ek,
{                   aae$copying_non_ek_to_ek,
{                   aae$main_file_will_be_used,
{                   aae$merge_with_emb_key_chg,
{                   aae$partial_copy_occurred,
{                   ame$attribute_validation_error,
{                   ame$concurrent_open_limit,
{                   ame$concurrent_tape_limit,
{                   ame$conflicting_block_types,
{                   ame$conflicting_file_access,
{                   ame$damaged_file_attributes,
{                   ame$file_not_known,
{                   ame$input_after_eoi,
{                   ame$local_file_limit,
{                   ame$mbl_less_than_mibl,
{                   ame$mbl_less_than_mrl,
{                   ame$multiple_open_of_tape,
{                   ame$no_permission_for_access,
{                   ame$non_ANSI_blocking,
{                   ame$put_beyond_file_limit,
{                   ame$record_exceeds_mbl,
{                   ame$ring_validation_error,
{                   ame$terminal_task_limit,
{                   ame$unable_to_load_collate_tabl,
{                   ame$unable_to_load_error_exit,
{                   ame$unable_to_load_fap,
{                   ame$unrecovered_read_error,
{                   ame$unrecovered_write_error,
{                   cle$improper_name,
{                   fse$block_lengths_unequal,
{                   fse$concurrent_access_conflict,
{                   fse$concurrent_share_conflict,
{                   fse$conflicting_block_types,
{                   fse$conflicting_file_addresses,
{                   fse$conflicting_file_contents,
{                   fse$conflicting_record_types,
{                   fse$copy_device_conflict,
{                   fse$copy_internal_error,
{                   fse$empty_input_file,
{                   fse$fap_names_not_identical,
{                   fse$from_list_input_unsupported,
{                   fse$improper_fo_for_copy,
{                   fse$input_and_output_same_file,
{                   fse$input_file_at_eoi,
{                   fse$insufficient_record_length,
{                   fse$line_numbers_unequal,
{                   fse$output_record_truncated,
{                   fse$padding_characters_unequal,
{                   fse$record_lengths_unequal,
{                   fse$redundant_access_choice,
{                   fse$size_exceeds_output_limits,
{                   fse$statement_idents_unequal,
{                   fse$to_list_input_unsupported,
{                   fse$to_list_output_unsupported,
{                   pfe$cycle_busy,
{                   pfe$cycle_overflow,
{                   pfe$cycle_underflow,
{                   pfe$duplicate_cycle,
{                   pfe$incorrect_password,
{                   pfe$invalid_ring_access,
{                   pfe$lfn_in_use,
{                   pfe$name_already_subcatalog,
{                   pfe$name_not_permanent_file,
{                   pfe$nth_name_not_subcatalog,
{                   pfe$path_too_short,
{                   pfe$pf_system_error,
{                   pfe$sharing_not_permitted,
{                   pfe$undefined_data,
{                   pfe$unknown_cycle,
{                   pfe$unknown_family,
{                   pfe$unknown_master_catalog,
{                   pfe$unknown_nth_subcatalog,
{                   pfe$unknown_permanent_file,
{                   pfe$usage_not_permitted;
{
{       IDENTIFIER: amc$access_method_id.
{
