
  PROCEDURE fsp$get_open_information (file_identifier: amt$file_identifier;
*IF $true(osv$unix)
    VAR device_class: rmt$device_class);
*ELSE
        attachment_information: ^fst$attachment_information;
        catalog_information: ^fst$catalog_information;
        cycle_attribute_sources: ^fst$cycle_attribute_sources;
        cycle_attribute_values: ^fst$cycle_attribute_values;
        instance_information: ^fst$open_instance_information;
        resolved_file_reference: ^fst$resolved_file_reference;
        user_defined_attributes: ^SEQ ( * );
    VAR user_defined_attribute_size: fst$user_defined_attribute_size;
    VAR status: ost$status);
*IFEND

?? PUSH (LISTEXT := ON) ??
*block
*copyc bap$get_open_information
*copyc amp$set_file_instance_abnormal
*blockend
?? POP ??

    VAR
*IF $true(osv$unix)
      terminal_device: ost_c_boolean;
*ELSE
      attachment_information_seq: ^SEQ ( * ),
      catalog_information_seq: ^SEQ ( * ),
      cycle_attribute_sources_seq: ^SEQ ( * ),
      cycle_attribute_values_seq: ^SEQ ( * ),
      instance_information_seq: ^SEQ ( * ),
      resolved_file_reference_seq: ^SEQ ( * ),
      user_defined_attr_size_int: ost$non_negative_integers;
*IFEND

*IF $true(osv$unix)
    rmp_isatty (file_identifier, terminal_device);
    CASE terminal_device OF
    = 0 =
      device_class := rmc$mass_storage_device;
    ELSE
      device_class := rmc$terminal_device;
    CASEND;
*ELSE
    status.normal := TRUE;


    IF attachment_information <> NIL THEN
      attachment_information_seq := #seq (attachment_information^);
    ELSE
      attachment_information_seq := NIL;
    IFEND;

    IF catalog_information <> NIL THEN
      catalog_information_seq := #seq (catalog_information^);
    ELSE
      catalog_information_seq := NIL;
    IFEND;

    IF cycle_attribute_sources <> NIL THEN
      cycle_attribute_sources_seq := #seq (cycle_attribute_sources^);
    ELSE
      cycle_attribute_sources_seq := NIL;
    IFEND;

    IF cycle_attribute_values <> NIL THEN
      cycle_attribute_values_seq := #seq (cycle_attribute_values^);
    ELSE
      cycle_attribute_values_seq := NIL;
    IFEND;

    IF instance_information <> NIL THEN
      instance_information_seq := #seq (instance_information^);
    ELSE
      instance_information_seq := NIL;
    IFEND;

    IF resolved_file_reference <> NIL THEN
      resolved_file_reference_seq := #seq (resolved_file_reference^);
    ELSE
      resolved_file_reference_seq := NIL;
    IFEND;

    bap$get_open_information (file_identifier, attachment_information_seq,
          catalog_information_seq, cycle_attribute_sources_seq,
          cycle_attribute_values_seq, instance_information_seq,
          resolved_file_reference_seq, user_defined_attributes,
          user_defined_attr_size_int, status);
    IF (NOT status.normal) AND
      (status.condition <> fse$file_contents_truncated) THEN
      RETURN;
    IFEND;

    IF user_defined_attr_size_int <= UPPERVALUE (user_defined_attribute_size)
          THEN
      user_defined_attribute_size := user_defined_attr_size_int;
    ELSE
      amp$set_file_instance_abnormal (file_identifier,
            fse$get_file_info_internal, fsc$get_open_information_req, 'user_de'
        CAT 'fined_attribute_size exceeds maximum allowed by fsp$get_open_info'
        CAT 'rmation', status);
    IFEND;
*IFEND

  PROCEND fsp$get_open_information;

?? PUSH (LISTEXT := ON) ??
*IF NOT $true(osv$unix)
*copyc amc$condition_code_limits
*copyc ame$attribute_validation_errors
*copyc ame$improper_file_id
*copyc ame$ring_validation_errors
*IFEND
*copyc amt$file_identifier
*IF $true(osv$unix)
*copyc rmt$device_class
*copyc rmp_isatty
*ELSE
*copyc fse$get_info_validation_errors
*copyc fst$attachment_information
*copyc fst$catalog_information
*copyc fst$cycle_attribute_sources
*copyc fst$cycle_attribute_values
*copyc fst$open_instance_information
*copyc fst$resolved_file_reference
*copyc fst$user_attribute_descriptor
*copyc fst$user_defined_attribute_size
*copyc osd$integer_limits
*copyc ost$status
*IFEND
?? POP ??
