PROCEDURE (ram$comuv) compare_unlabeled_volumes, comuv (
  volume_one, vo: any of
      name 1..6
      string 1..6
    anyend = $required
  volume_two, vt: any of
      name 1..6
      string 1..6
    anyend = $required
  error_limit, el: (BY_NAME) integer 0..4398046511103 = 0
  volume_one_density, vod: (BY_NAME) key
      mt9$800, mt9$1600, mt9$6250, mt18$38000
    keyend = osd$reqmt_default_density, mt9$1600
  volume_two_density, vtd: (BY_NAME) key
      mt9$800, mt9$1600, mt9$6250, mt18$38000
    keyend = $optional
  status)

  VAR
    consecutive_tapemarks_read: integer 0..3
    first_file: file = $unique($local)
    first_temp: file = $unique($local)
    ignore_status: status
    local_status: status
    parameter_names: list of key mt9$800, mt9$1600, mt9$6250, mt18$38000 keyend=
        (mt9$800, mt9$1600, mt9$6250, mt18$38000)
    parameter_values: list of integer 0..2147483647 = (0 0 0 0)
    second_file: file = $unique($local)
    second_temp: file = $unique($local)
    temp_list: file = $unique($local)
  VAREND

  WHEN any_fault exit terminate DO
    delete_file first_file status= ignore_status
    delete_file second_file status= ignore_status
    delete_file first_temp status= ignore_status
    delete_file second_temp status= ignore_status
    delete_file temp_list status= ignore_status
    release_resource mt9$800=all mt9$1600=all mt9$6250=all mt18$38000=all ..
          status=ignore_status
    EXIT compare_unlabeled_volumes WITH osv$status
  WHENEND

  request_magnetic_tape first_file density=volume_one_density ..
        external_vsn=volume_one ring=no
  IF $specified(volume_two_density) THEN
    request_magnetic_tape second_file density=volume_two_density ..
          external_vsn=volume_two ring=no
    local_volume_two_density = volume_two_density
  ELSE
    request_magnetic_tape second_file density=volume_one_density ..
          external_vsn=volume_two ring=no
    local_volume_two_density = volume_one_density
  IFEND
  set_file_attributes first_file block_type=user_specified ..
        file_label_type=unlabeled record_type=undefined

  set_file_attributes second_file block_type=user_specified ..
        file_label_type=unlabeled record_type=undefined

  FOR i = 1 TO $size(parameter_names) DO
    IF volume_one_density = parameter_names(i) THEN
      parameter_values(i) = parameter_values(i) + 1
    IFEND
    IF local_volume_two_density = parameter_names(i) THEN
      parameter_values(i) = parameter_values(i) + 1
    IFEND
  FOREND

  reserve_resource mt9$800=parameter_values(1) mt9$1600=parameter_values(2) ..
        mt9$6250=parameter_values(3) mt18$38000=parameter_values(4)

  consecutive_tapemarks_read = 0
  i = 0

  REPEAT
    copy_file input=first_file.$asis output=first_temp status=local_status
    IF local_status.normal THEN
      copy_file input=second_file.$asis output=second_temp status=local_status
      IF local_status.normal THEN
        compare_file file=first_temp with=second_temp ..
              error_limit= error_limit output=temp_list status=local_status
      IFEND
      i = i+1
    IFEND
    IF (NOT local_status.normal) AND ..
          (local_status.condition = ame$input_after_eoi) THEN
      consecutive_tapemarks_read = consecutive_tapemarks_read + 1
      IF consecutive_tapemarks_read < 3 THEN
        local_status.normal = true
      IFEND
    IFEND
  UNTIL NOT local_status.normal

  IF (i > 1) AND (NOT local_status.normal) AND ..
        (local_status.condition = ame$input_after_eoi) THEN
    EXIT_PROC
  ELSE
    EXIT_PROC WITH local_status
  IFEND

PROCEND compare_unlabeled_volumes
