
  PROCEDURE dmp$get_unique_fmd_volume_list
    (    p_fmd: {input} ^dmt$stored_fmd;
     VAR p_unique_volume_list: {input/output} ^pft$unique_volume_list;
     VAR status: ost$status);

?? PUSH (LISTEXT := ON) ??

    VAR
      p_fmd_header: ^dmt$stored_ms_fmd_header,
      p_fmd_version: ^dmt$stored_ms_version_number,
      p_stored_fmd: ^dmt$stored_fmd,
      p_stored_subfile: ^dmt$stored_ms_fmd_subfile,
      subfile_count: dmt$subfile_index;

    status.normal := TRUE;

    p_stored_fmd := p_fmd;
    RESET p_stored_fmd;

    NEXT p_fmd_version IN p_stored_fmd;
    IF p_fmd_version = NIL THEN
      osp$set_status_abnormal (dmc$device_manager_ident, dme$fmd_too_small,
            'FMD too small 1 - dmp$get_stored_fmd_volume_list.', status);
      RETURN;
    IFEND;

    NEXT p_fmd_header: [dmc$current_fmd_version] IN p_stored_fmd;
    IF p_fmd_header = NIL THEN
      osp$set_status_abnormal (dmc$device_manager_ident, dme$fmd_too_small,
            'FMD too small 2 - dmp$get_stored_fmd_volume_list.', status);
      RETURN;
    IFEND;

    IF (p_unique_volume_list = NIL) OR
          (UPPERBOUND (p_unique_volume_list^) < p_fmd_header^.version_0_0.number_fmds) THEN
      osp$set_status_abnormal (dmc$device_manager_ident,
            dme$volume_list_too_small, 'The supplied volume list is NIL or' CAT
            ' too small - dmp$get_stored_fmd_volume_list.', status);
      RETURN;
    IFEND;

    FOR subfile_count := 1 TO p_fmd_header^.version_0_0.number_fmds DO
      NEXT p_stored_subfile: [dmc$current_fmd_version] IN p_stored_fmd;
      IF p_stored_subfile = NIL THEN
        osp$set_status_abnormal (dmc$device_manager_ident, dme$fmd_too_small,
              'FMD too small 3 - dmp$get_stored_fmd_volume_list.', status);
        RETURN;
      IFEND;
      p_unique_volume_list^ [subfile_count].internal_vsn := p_stored_subfile^.version_0_0.internal_vsn;
      p_unique_volume_list^ [subfile_count].recorded_vsn := p_stored_subfile^.version_0_0.recorded_vsn;
    FOREND;
  PROCEND dmp$get_unique_fmd_volume_list;

*copyc dmt$error_condition_codes
*copyc dmt$stored_fmd
*copyc dmt$stored_ms_fmd_header
*copyc dmt$subfile_index
*copyc ost$status
*copyc pft$unique_volume_list
?? POP ??
