*copyc osd$default_pragmats
?? RIGHT := 110 ??
??
NEWTITLE := ' NOS/VE Backup/Restore Utilities:  restore_all_files ', EJECT ??
MODULE pum$restore_all_files;

?? NEWTITLE := '   Global Declarations', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc osc$nosve_system_set
*copyc pud$hierarchy_list
*copyc pue$error_condition_codes
*copyc amt$local_file_name
*copyc ost$status
*copyc stt$set_name
?? POP ??
*copyc amp$get_file_attributes
*copyc avp$family_administrator
*copyc avp$system_administrator
*copyc clp$scan_parameter_list
*copyc osp$set_status_abnormal
*copyc pup$build_catalog_header
*copyc pup$build_entry
*copyc pup$close_backup_file
*copyc pup$crack_file
*copyc pup$determine_if_set_exists
*copyc pup$determine_record_type
*copyc pup$display_restore_totals
*copyc pup$get_summary_status
*copyc pup$initialize_restore_listing
*copyc pup$open_backup_file
*copyc pup$restore_sub_levels
*copyc pup$set_restore_subcmd_defaults
*copyc pup$write_os_status
?? TITLE := '    [XDCL] pup$restore_all_files_command ', EJECT ??

  PROCEDURE [XDCL] pup$restore_all_files_command (parameter_list: clt$parameter_list;
    VAR status: ost$status);

    VAR
      backup_file: amt$local_file_name,
      local_status: ost$status;

    crack_resaf (parameter_list, backup_file, status);
    IF status.normal THEN
      restore_all_files (backup_file, status);
    IFEND;
  PROCEND pup$restore_all_files_command;

?? TITLE := '    crack_resaf ', EJECT ??

  PROCEDURE crack_resaf (parameter_list: clt$parameter_list;
    VAR backup_file: amt$local_file_name;
    VAR status: ost$status);

{ pdt restore_all_files_pdt (
{ backup_file,bf:file=$required
{ status)

?? PUSH (LISTEXT := ON) ??

    VAR
      restore_all_files_pdt: [STATIC, READ, cls$pdt] clt$parameter_descriptor_table :=
        [^restore_all_files_pdt_names, ^restore_all_files_pdt_params];

    VAR
      restore_all_files_pdt_names: [STATIC, READ, cls$pdt_names_and_defaults] array [1 .. 3] of
        clt$parameter_name_descriptor := [['BACKUP_FILE', 1], ['BF', 1], ['STATUS', 2]];

    VAR
      restore_all_files_pdt_params: [STATIC, READ, cls$pdt_parameters] array [1 .. 2] of
        clt$parameter_descriptor := [

{ BACKUP_FILE BF }
      [[clc$required], 1, 1, 1, 1, clc$value_range_not_allowed, [NIL, clc$file_value]],

{ STATUS }
      [[clc$optional], 1, 1, 1, 1, clc$value_range_not_allowed, [NIL, clc$variable_reference,
        clc$array_not_allowed, clc$status_value]]];

?? POP ??

    clp$scan_parameter_list (parameter_list, restore_all_files_pdt, status);
    IF status.normal THEN
      pup$crack_file ('BACKUP_FILE', backup_file, status);
    IFEND;
  PROCEND crack_resaf;

?? TITLE := '    restore_all_files ', EJECT ??

  PROCEDURE restore_all_files (backup_file: amt$local_file_name;
    VAR status: ost$status);

    restore_existing_set ( {set_name=} osc$nosve_system_set,
          {new_set_name=} osc$nosve_system_set, backup_file, status);
  PROCEND restore_all_files;

?? TITLE := '    restore_existing_set ', EJECT ??

  PROCEDURE restore_existing_set (set_name: stt$set_name;
        new_set_name: stt$set_name;
        backup_file: amt$local_file_name;
    VAR status: ost$status);

    VAR
      backup_file_id: put$file_identifier,
      dummy_cycle_selector: pft$cycle_selector,
      local_status: ost$status,
      p_catalog_header: ^put$catalog_header,
      p_new_catalog_header: ^put$catalog_header,
      set_entry: put$entry,
      set_exists: boolean;

    pup$build_entry (set_name, dummy_cycle_selector, puc$valid_set_entry, set_entry);
    PUSH p_catalog_header: [1 .. 1];
    pup$build_catalog_header (set_name, NIL, p_catalog_header^);
    PUSH p_new_catalog_header: [1 .. 1];
    pup$build_catalog_header (new_set_name, NIL, p_new_catalog_header^);
    pup$determine_if_set_exists (new_set_name, set_exists, status);
    IF status.normal THEN
      IF set_exists THEN
        pup$open_backup_file (backup_file, puc$restore_permanent_files, amc$open_at_boi,
            backup_file_id, status);
        IF status.normal THEN
          pup$initialize_restore_listing (' RESTORE ALL FILES: ', p_catalog_header^, set_entry,
                p_new_catalog_header^.path, dummy_cycle_selector, status);
          IF status.normal THEN
            pup$set_restore_subcmd_defaults (NOT (avp$system_administrator() OR avp$family_administrator()));
            pup$restore_sub_levels (set_entry, p_catalog_header^, {password_specified} FALSE,
                  {password} osc$null_name, p_new_catalog_header^, {restore_n_levels} FALSE,
                  {p_selected_cycles} NIL, backup_file_id, status);
          IFEND;
          pup$close_backup_file (backup_file_id, local_status);
          IF status.normal THEN
            status := local_status;
          IFEND;
          pup$display_restore_totals;
          pup$get_summary_status (status);
          pup$write_os_status (status, local_status);
        IFEND;
      ELSE
        osp$set_status_abnormal (puc$pf_utility_id, pue$unknown_set, new_set_name, status);
      IFEND;
    IFEND;
  PROCEND restore_existing_set;
MODEND pum$restore_all_files;
