
  PROCEDURE [INLINE] fsp$determine_global_access
    (    ring_of_execution: ost$valid_ring;
         job_environment_information_p: ^fst$job_environment_information;
         file_object_p: ^fst$goi_object;
         cycle_object_p: ^fst$goi_object;
         ring_attributes: amt$ring_attributes;
     VAR global_access_modes: pft$usage_selections);

?? PUSH (LISTEXT := ON) ??
    VAR
      allowed_access_modes: fst$file_access_options,
      usage_option: pft$usage_options,
      usage_selections: pft$usage_selections;

{ Determine global access modes.

    IF (job_environment_information_p <> NIL) AND job_environment_information_p^.cycle_attached THEN
      allowed_access_modes := job_environment_information_p^.attached_access_modes -
            job_environment_information_p^.prevented_open_access_modes;
      #UNCHECKED_CONVERSION (allowed_access_modes, global_access_modes);
    ELSEIF (file_object_p <> NIL) AND (file_object_p^.applicable_file_permit <> NIL) THEN
      global_access_modes := $pft$usage_selections [];
      FOR usage_option := LOWERVALUE (pft$usage_options) TO UPPERVALUE (pft$usage_options) DO
        IF usage_option IN file_object_p^.applicable_file_permit^.usage_permissions THEN
          global_access_modes := global_access_modes + $pft$usage_selections [usage_option];
        IFEND;
      FOREND;
      IF (cycle_object_p <> NIL) AND (cycle_object_p^.cycle_information <> NIL) THEN
        global_access_modes := global_access_modes -
              cycle_object_p^.cycle_information^.prevented_access_modes;
      IFEND;
      IF ring_of_execution > ring_attributes.r3 THEN
        global_access_modes := $pft$usage_selections [];
      ELSEIF ring_of_execution > ring_attributes.r2 THEN
        global_access_modes := global_access_modes * $pft$usage_selections
              [pfc$execute];
      ELSEIF ring_of_execution > ring_attributes.r1 THEN
        global_access_modes := global_access_modes * $pft$usage_selections
              [pfc$read, pfc$execute];
      IFEND;
    ELSE
      global_access_modes := fmv$system_file_attributes.descriptive_label.global_access_mode;
    IFEND;

  PROCEND fsp$determine_global_access;

*copyc amt$ring_attributes
*copyc fmv$system_file_attributes
*copyc fst$file_access_options
*copyc fst$goi_object
*copyc fst$job_environment_information
*copyc osd$virtual_address
*copyc pft$usage_options
*copyc pft$usage_selections
?? POP ??
