?? NEWTITLE := '  NOS/VE Set Management ' ??
MODULE stm$change_access_to_set;
?? RIGHT := 110 ??

{ PURPOSE:
{   This module provides the compilation unit for the stp$change_access_to_set
{   request.
{
{ DESIGN:
{   This lives in 23d.

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc cle$ecc_lexical
*copyc ste$error_condition_codes
*copyc ost$status
*copyc ost$user_identification
?? POP ??
*copyc clp$validate_name
*copyc osp$append_status_parameter
*copyc osp$set_status_abnormal
*copyc pmp$get_user_identification
*copyc stp$change_ast_access_status
*copyc stp$clear_exclusive_access
*copyc stp$search_ast_by_set
*copyc stp$set_exclusive_access
*copyc stp$valid_access_status
*copyc stp$validate_owner
?? OLDTITLE ??
?? NEWTITLE := '  [XDCL] stp$change_access_to_set ', EJECT ??
*copyc sth$change_access_to_set

  PROCEDURE [XDCL] stp$change_access_to_set
    (    set_name: stt$set_name;
         access_status: stt$access_status;
     VAR status: ost$status);

    VAR
      ast_entry: stt$active_set_entry,
      ast_index: stt$ast_index,
      cap_set_name: stt$set_name,
      change_status: ost$status,
      job_owner: ost$user_identification,
      job_owner_status: ost$status,
      set_found: boolean,
      valid_owner: boolean;

    change_status.normal := TRUE;
    verify_change_param (set_name, access_status, cap_set_name, change_status);
    IF change_status.normal THEN
      stp$set_exclusive_access;
      stp$search_ast_by_set (cap_set_name, ast_entry, ast_index, set_found);
      IF set_found THEN
        stp$validate_owner (ast_entry.set_owner, valid_owner);
        IF valid_owner THEN
{         only the set owner or administrator may perform this request.
          stp$change_ast_access_status (ast_index, access_status, status);
          {assumes you never get bad status here}
        ELSE
          pmp$get_user_identification (job_owner, job_owner_status);
          osp$set_status_abnormal (stc$set_management_id, ste$set_not_job_owner, job_owner.user,
                change_status);
          osp$append_status_parameter (osc$status_parameter_delimiter, job_owner.family, change_status);
          osp$append_status_parameter (osc$status_parameter_delimiter, set_name, change_status);
        IFEND;
      ELSE
{       The set must be active to perform this request.
        osp$set_status_abnormal (stc$set_management_id, ste$set_not_active, stc$null_parameter,
              change_status);
      IFEND;
      stp$clear_exclusive_access;
    IFEND;
    status := change_status;

  PROCEND stp$change_access_to_set;


?? OLDTITLE ??
?? NEWTITLE := '  verify_change_param ', EJECT ??

  PROCEDURE verify_change_param
    (    set_name: stt$set_name;
         access_status: stt$access_status;
     VAR cap_set_name: stt$set_name;
     VAR parameter_status: ost$status);

{  PURPOSE:
{    This procedure determines if the user supplied parameters on the request
{    stp$change_access_to_set are valid.

    VAR
      local_name: ost$name,
      valid_name: boolean;

    clp$validate_name (set_name, local_name, valid_name);
    IF valid_name THEN
      cap_set_name := local_name;
      IF stp$valid_access_status (access_status) THEN
        parameter_status.normal := TRUE;
      ELSE
        osp$set_status_abnormal (stc$set_management_id, ste$bad_access_status, stc$null_parameter,
              parameter_status);
      IFEND;
    ELSE
      osp$set_status_abnormal (stc$set_management_id, ste$bad_set_name, set_name, parameter_status);
    IFEND;

  PROCEND verify_change_param;
?? OLDTITLE ??
MODEND stm$change_access_to_set;
