proc validate_development_users, valdu(
  family,           f : name = nve
  family_user_administrator, fua: name = eval
  password,        pw : name = evalx
  user_validation, uv : file = $OPTIONAL
  display_values,  dv : boolean = false
  status)

  VAR
    administrator_name  : string = $string($value(family_user_administrator))
    create_status       : status
    display_parameters  : boolean= $value(display_values)
    family_name         : string = $string($value(family))
    line                : string = ''
    password            : string = $string($value(password))
    user_validation     : string
    validation_job      : string = ''
  VAREND

  IF NOT $SPECIFIED(user_validation) THEN
    user_validation = 'NOT_SPECIFIED'
  IFEND

  WHILE display_parameters DO
    put_line '1' output=$output
    COLLECT_TEXT o=$output substitution_mark='&' until='    end_val_display'
    --------------------------------------------------
                VALIDATE_DEVELOPMENT_USERS

    1. FAMILY_NAME = &family_name&
    2. ADMINISTRATOR_NAME = &administrator_name&
    3. PASSWORD = &password&
    4. USER_VALIDATION_FILE= &user_validation&

     Enter  GO  to validate users using the above information, or
     enter the appropriate menu number to change the values specified
     above, or enter  QUIT  to terminate the validation process.
    --------------------------------------------------
    end_val_display

    accept_line variable=line input=input p='Enter selection '
    line = $translate(lower_to_upper, line)
    IF line = 'GO' THEN
      display_parameters=false
    ELSEIF line = 'QUIT' THEN
      EXIT_PROC with $status(FALSE,'TT',0,'USER ABORTED VALIDATION PROCESS IN VALIDATE_FAMILY PROCEDURE')
    ELSEIF line = '1' THEN
      accept_line variable=family_name input=input p='specify family_name: '
    ELSEIF line = '2' THEN
      accept_line variable=administrator_name input=input p='specify administrator_name: '
    ELSEIF line = '3' THEN
      accept_line variable=password input=input p='specify password: '
    ELSEIF line = '4' THEN
      put_line l=' Requesting <permanent_file> user validation file to create users' o=$output
      put_line l='         for the afore-mentioned family. ' o=$output
      accept_line variable=user_validation input=input p='Specify user validation file: '
    ELSE
      put_line l=' IGNORING USER INPUT *'//line//'*' output=$output
      WAIT T=1500
    IFEND
  WHILEND   "for display_parameters = true"

  IF $FILE($FNAME(':'//family_name//'.$SYSTEM.$VALIDATIONS'),assigned) = TRUE THEN
    put_line l=' WARNING: Users not created, validation file already exists for family: '//family_name o=$response
    EXIT_PROC
  IFEND
  validation_job = family_name// '_validate'
  create_family fn=$name(family_name) fua=$name(administrator_name) pw=$name(password) status=create_status
  IF NOT create_status.normal THEN
    put_line l=' Call to command create_family failed. ' o=$response
    EXIT_PROC WITH create_status
  IFEND

" Create the Validation Job to set up validations for the family."

  put_line l='  ----  Submitting Validation Job for family: '//family_name o=$response
  JOB sm='&' jn=validation_job
    VAR
      admv_stat              : status
      family_name            : string  = $strrep(&family_name&)
      ignore                 : status
      issue_operator_warning : boolean = false
      sou_stat               : status
      validation_stat        : status
    VAREND

    WHEN any_fault DO
      display_value v=('The following error occurred in VALIDATION job, ..', osv$status) output=$response
      issue_operator_warning=TRUE
      CONTINUE
    WHENEND

" Initiate the System Operator Utility to allow changes to user validations.

    SYSTEM_OPERATOR_UTILITY capability=system_administration status=sou_stat
      IF NOT sou_stat.normal THEN
        display_value v=('The following error occurred calling utility SYSTEM_OPERATOR_UTILITY, ..', sou_stat) o=$response
        issue_operator_warning=TRUE
      ELSE "utility call returned normal"
    ADMINISTER_VALIDATIONS status=admv_stat
      IF NOT admv_stat.normal THEN
        display_value v=('The following error occurred calling utility ADMINISTER_VALIDATIONS, ..', admv_stat) o=$response
        issue_operator_warning=TRUE
      ELSE "utility call returned normal"
        ADMV_BLOCK: BLOCK
          WHEN any_fault DO
            display_value v=('Received the following error in utility ADMINISTER_VALIDATIONS ..', osv$status) o=$response
            issue_operator_warning=TRUE
            continue
          WHENEND

          use_validation_file vf=$fname(':&family_name&.$SYSTEM.$VALIDATIONS') status=validation_stat
          EXIT WHEN NOT validation_stat.normal
          MANAGE_USER_FIELDS
            change_account_project_field fn=creation_account_project defa=account defp=project status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_account_project_field fn=default_account_project defa=account defp=project status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_file_field fn=user_prolog dv='$system.testing_user_prolog' status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_file_field fn=user_epilog dv='$user.epilog' status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_job_class_field ad=(batch,interactive,file_transfer) id=interactive bd=batch status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_capability_field fn=explicit_remote_file dv=include status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_capability_field fn=implicit_remote_file dv=include status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_capability_field fn=network_application_management dv=include status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_capability_field fn=network_operation dv=include status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_capability_field fn=station_operation dv=include status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_capability_field fn=timesharing dv=include  status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            create_capability_field fn=read_system_memory dv=include status=validation_stat ..
              d='Allow the user to display operating system memory with the Analyze System utility.'
            EXIT WHEN NOT validation_stat.normal
          END_MANAGE_USER_FIELDS

          CHANGE_USER &administrator_name&
            change_link_attribute_password value='&password&' status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_job_class add=(maintenance) status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            change_capability add=all status=validation_stat
            EXIT WHEN NOT validation_stat.normal
          END_CHANGE_USER  WC=TRUE

          IF $strrep(&user_validation&) = 'NOT_SPECIFIED' THEN
            VAR
              num_of_users : integer = 30
              num_of_changes : integer = 2
            VAREND
            TYPE
             CHANGE_ARRAY :  ARRAY 1..num_of_changes of STRING
              USER_VALIDATION : RECORD
                USER : NAME
                PASSWORD : STRING
                CHANGE : CHANGE_ARRAY
              RECEND
            TYPEND
            VAR
              FAMILY_USERS  : ARRAY 1..num_of_users of USER_VALIDATION
              change_status : status
              chau_stat     : status
              create_status : status
              creu_stat     : status
              include_stat  : status
              ignore        : status
              index         : integer
              chng_indx     : integer
              initial_user  : user_validation
              initial_change: change_array
            VAREND
            FOR i = 1 to num_of_changes DO
              initial_change(i) = ' '
            FOREND
            INITIAL_USER = (NOT_SPECIFIED, ' ' , INITIAL_CHANGE)
            FOR i = 1 to num_of_users DO
              family_users(i) = initial_user
            FOREND
            IF family_name = 'TESTING' THEN
              FAMILY_USERS(1).USER=evt01
              FAMILY_USERS(1).PASSWORD='evt01pw'
              FAMILY_USERS(2).USER=evt02
              FAMILY_USERS(2).PASSWORD='evt02pw'
              FAMILY_USERS(3).USER=evt03
              FAMILY_USERS(3).PASSWORD='evt03pw'
              FAMILY_USERS(4).USER=evt04
              FAMILY_USERS(4).PASSWORD='evt04pw'
              FAMILY_USERS(5).USER=evt05
              FAMILY_USERS(5).PASSWORD='evt05pw'
            ELSEIF $substr(family_name, 1, 6) = 'TESTVE' THEN
              FAMILY_USERS(1).USER=ev01
              FAMILY_USERS(1).PASSWORD='ev01pw'
              FAMILY_USERS(2).USER=ev02
              FAMILY_USERS(2).PASSWORD='ev02pw'
              FAMILY_USERS(3).USER=ev03
              FAMILY_USERS(3).PASSWORD='ev03pw'
              FAMILY_USERS(4).USER=ev04
              FAMILY_USERS(4).PASSWORD='ev04pw'
              FAMILY_USERS(5).USER=ev05
              FAMILY_USERS(5).PASSWORD='ev05pw'
            ELSE
              FAMILY_USERS(1).USER=testve
              FAMILY_USERS(1).PASSWORD='testvex'
              FAMILY_USERS(1).CHANGE(1)='change_ring_privilege minimum_ring=6'
              FAMILY_USERS(2).USER=eval1
              FAMILY_USERS(2).PASSWORD='eval1pw'
              FAMILY_USERS(2).CHANGE(1)='change_job_classes add=(maintenance)'
              FAMILY_USERS(3).USER=eval2
              FAMILY_USERS(3).PASSWORD='eval2pw'
              FAMILY_USERS(4).USER=eval3
              FAMILY_USERS(4).PASSWORD='eval3pw'
              FAMILY_USERS(5).USER=ring4
              FAMILY_USERS(5).PASSWORD='ring4pw'
              FAMILY_USERS(5).CHANGE(1)='change_ring_privilege minimum_ring=4'
              FAMILY_USERS(6).USER=ring7
              FAMILY_USERS(6).PASSWORD='ring7pw'
              FAMILY_USERS(6).CHANGE(1)='change_ring_privilege minimum_ring=7'
              FAMILY_USERS(7).USER=ring10
              FAMILY_USERS(7).PASSWORD='ring10pw'
              FAMILY_USERS(7).CHANGE(1)='change_ring_privilege minimum_ring=10'
              FAMILY_USERS(8).USER=testos
              FAMILY_USERS(8).PASSWORD='testosx'
              FAMILY_USERS(8).CHANGE(1)='change_ring_privilege minimum_ring=4'
              FAMILY_USERS(9).USER=user1
              FAMILY_USERS(9).PASSWORD='user1pw'
              FAMILY_USERS(10).USER=user2
              FAMILY_USERS(10).PASSWORD='user2pw'
              FAMILY_USERS(11).USER=user3
              FAMILY_USERS(11).PASSWORD='user3pw'
              FAMILY_USERS(12).USER=user4
              FAMILY_USERS(12).PASSWORD='user4pw'
              FAMILY_USERS(13).USER=user5
              FAMILY_USERS(13).PASSWORD='user5pw'
              FAMILY_USERS(14).USER=ev01
              FAMILY_USERS(14).PASSWORD='ev01pw'
              FAMILY_USERS(15).USER=ev02
              FAMILY_USERS(15).PASSWORD='ev02pw'
              FAMILY_USERS(16).USER=ev03
              FAMILY_USERS(16).PASSWORD='ev03pw'
              FAMILY_USERS(17).USER=ev04
              FAMILY_USERS(17).PASSWORD='ev04pw'
              FAMILY_USERS(18).USER=ev05
              FAMILY_USERS(18).PASSWORD='ev05pw'
              FAMILY_USERS(19).USER=ev06
              FAMILY_USERS(19).PASSWORD='ev06pw'
              FAMILY_USERS(20).USER=ev07
              FAMILY_USERS(20).PASSWORD='ev07pw'
              FAMILY_USERS(21).USER=ev08
              FAMILY_USERS(21).PASSWORD='ev08pw'
              FAMILY_USERS(22).USER=ev09
              FAMILY_USERS(22).PASSWORD='ev09pw'
              FAMILY_USERS(23).USER=ev10
              FAMILY_USERS(23).PASSWORD='ev10pw'
              FAMILY_USERS(24).USER=utest
              FAMILY_USERS(24).PASSWORD='utestpw'
              FAMILY_USERS(24).CHANGE(1)='change_ring_privilege minimum_ring=6'
              FAMILY_USERS(24).CHANGE(2)='change_job_classes add=(maintenance)'
            IFEND
            index = 1
            WHILE (index <= num_of_users) AND (family_users(index).user <> NOT_SPECIFIED) DO
              CREATE: BLOCK
                put_line l=' Creating user: '//family_users(index).user o=$response
                CREATE_USER user=$name(family_users(index).user) status=creu_stat
                  IF NOT creu_stat.normal then
                    create_status=creu_stat
                    EXIT create WHEN NOT create_status.normal
                  IFEND
                  change_login_password new_password=$name(family_users(index).password) status=create_status
                  EXIT create WHEN NOT create_status.normal
                  change_link_attribute_password value=family_users(index).password status=create_status
                  EXIT create WHEN NOT create_status.normal
                END_CREATE_USER wc=true
              BLOCKEND create
              IF NOT create_status.normal THEN
                issue_operator_warning=true
                display_value v=('User creation failed in ADMV subutility CREATE_USER with error: ', create_status) o=$response
              ELSE
                CHANGE: BLOCK
                  put_line l=' Changing user: '//family_users(index).user o=$response
                  CHANGE_USER U=$name(family_users(index).user) status=chau_stat
                    IF NOT chau_stat.normal then
                      change_status=chau_stat
                      EXIT change WHEN NOT change_status.normal
                    IFEND
                    chng_indx = 1
                    WHILE chng_indx <= num_of_changes DO
                      IF (family_users(index).change(chng_indx) <> ' ') THEN
                        include_command c=family_users(index).change(chng_indx) ee=true status=change_status
                        EXIT change WHEN NOT change_status.normal
                        chng_indx = chng_indx + 1
                      ELSE
                        chng_indx = num_of_changes + 1
                      IFEND
                    WHILEND
                  END_CHANGE_USER wc=true
                BLOCKEND change
                IF NOT change_status.normal THEN
                  issue_operator_warning=true
                  display_value v=('User creation failed in ADMV subutility CHANGE_USER with error: ', create_status) o=$response
                IFEND
              IFEND
              index=index + 1
            WHILEND
          ELSE
            attach_file f=&user_validation& wait=yes status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            include_file f=&user_validation& status=validation_stat
            EXIT WHEN NOT validation_stat.normal
            detach_file f=&user_validation& status=validation_stat
          IFEND
        BLOCKEND ADMV_BLOCK
        IF NOT validation_stat.normal THEN
          display_value v=('The following error may not be fatal to development operations,..', ..
             'but must be noted as possibly impacting special case validations: ..', validation_stat) o=$response
          issue_operator_warning=TRUE
        IFEND
      IFEND
    include_line sl='END_ADMINISTER_VALIDATIONS' ee=true status=ignore

    IF issue_operator_warning THEN
      send_operator_message m=' Validation job failed please see printed job logs for errors.' ..
         operator_class=system_operator
    ELSE
      terminate_print name=output
    IFEND
  JOBEND
Procend validate_development_users

