  TYPE
    pft$move_object_info = record
      class_statistics: pft$class_movement_statistics,
      dest_volume_list_p: ^array [1 .. * ] of ^pft$mo_volume,
      mass_storage_class: dmt$class,
      move_bytes_threshold: ost$non_negative_integers,
      move_status: pft$move_status,
      overall_statistics: pft$movement_statistics,
      perform_move: boolean,
      performance_statistics: pft$performance_statistics,
      release_mass_storage: pft$mo_release_mass_storage,
      set_name: ost$name,
      set_volume_list_p: ^pft$mo_volume_list,
      source_volume_list_p: ^array [1 .. * ] of ^pft$mo_volume,
      update_available_space_total: ost$non_negative_integers,
      volume_overflow_allowed: boolean,
      wait: boolean,
    recend;

  TYPE
    pft$mo_volume = record
      available: boolean,
      bytes_moved_from: ost$non_negative_integers,
      bytes_moved_to: ost$non_negative_integers,
      bytes_released: ost$non_negative_integers,
      catalogs_moved_from: ost$non_negative_integers,
      catalogs_moved_to: ost$non_negative_integers,
      cycles_moved_from: ost$non_negative_integers,
      cycles_moved_to: ost$non_negative_integers,
      cycles_released: ost$non_negative_integers,
      logical_unit_number: iot$logical_unit,
      mass_storage_available: ost$non_negative_integers,
      mass_storage_before: ost$non_negative_integers,
      mass_storage_capacity: ost$non_negative_integers,
      move_bytes_threshold_exceeded: boolean,
      ms_class: dmt$class,
      recorded_vsn: rmt$recorded_vsn,
      volume_type: pft$mo_volume_type,
    recend;

  TYPE
    pft$mo_volume_list = array [1 .. * ] of pft$mo_volume,
    pft$mo_volume_list_p = array [1 .. * ] of ^pft$mo_volume;

  TYPE
    pft$mo_release_mass_storage = (pfc$always, pfc$never, pfc$when_insufficient_space);

  TYPE
    pft$mo_volume_type = (pfc$source_volume, pfc$destination_volume, pfc$unspecified_volume);

  TYPE
    pft$movement_statistics = record
      abnormal_status: ost$non_negative_integers,
      bytes_moved: ost$non_negative_integers,
      bytes_released: ost$non_negative_integers,
      cycle_busy: ost$non_negative_integers,
      cycles_released: ost$non_negative_integers,
      insufficient_space: ost$non_negative_integers,
      no_available_space: ost$non_negative_integers,
      objects_moved: ost$non_negative_integers,
      objects_not_moved: ost$non_negative_integers,
      unrecovered_read_error: ost$non_negative_integers,
    recend;

  TYPE
    pft$class_movement_statistics = array ['A' .. 'Z'] of pft$movement_statistics;

  TYPE
    pft$reason_for_move_failure = (pfc$cycle_busy, pfc$data_released, pfc$device_class_not_ms,
          pfc$insufficient_space, pfc$io_error, pfc$no_available_space, pfc$operator_skip,
          pfc$operator_terminate, pfc$set_threshold_exceeded, pfc$unexpected_abort,
          pfc$volume_threshold_exceeded);

  TYPE
    pft$mo_operator_response = (pfc$retry_move, pfc$skip_object, pfc$terminate_command);

  TYPE
    pft$move_status = record
      allocated_size: ost$non_negative_integers,
      ms_class: dmt$class_member,
      new_subfile_list_p: ^pft$subfile_list,
      old_subfile_list_p: ^pft$subfile_list,
      volume_list_storage_p: ^SEQ (*),
      case move_successful: boolean of
      = TRUE =
        data_residence: pft$data_residence,
        modification_date_time: ost$date_time,
      = FALSE =
        reason_for_move_failure: pft$reason_for_move_failure,
      casend,
    recend;

  TYPE
    pft$performance_statistics = record
      catalog_count: ost$non_negative_integers,
      cycle_count: ost$non_negative_integers,
      file_count: ost$non_negative_integers,
      initial_date_time: ost$date_time,
      initial_microsecond_clock: integer,
      initial_task_cp_time: pmt$task_cp_time,
    recend;

*copyc dmt$class
*copyc iot$logical_unit
*copyc osd$integer_limits
*copyc ost$date_time
*copyc ost$name
*copyc pft$data_residence
*copyc pft$subfile_list
*copyc pmt$task_cp_time
*copyc rmt$recorded_vsn
