PROC validate_family, valf (
  family,           f : name = please_specify
  family_user_administrator, fua: name = please_specify
  password,        pw : name = please_specify
  validate_users,  vu : boolean = false
  user_validation, uv : file = $system.validate_testing_users
  display_values,  dv : boolean = false
  status)

  WHEN any_fault DO
    display_value ('-- Following error occurred in family validation --', osv$status, ..
'-- Enter Continue or Exit_Proc or commands --') output=$output
    include_file command prompt='validate_family error--'
  WHENEND

  create_variable dsv$status kind=status
  create_variable parameters kind=string dimension=4 value=' '
    parameters(1) = 'FAMILY_NAME'
    parameters(2) = 'ADMINISTRATOR_NAME'
    parameters(3) = 'PASSWORD'
    parameters(4) = 'YES_to_validate_users'

  family_name  = $string($value(family))
  administrator_name  = $string($value(family_user_administrator))
  password = $string($value(password))
  yes_to_validate_users=$strrep($value(validate_users))
  user_validation = $string($value(user_validation))
  display_parameters= $value(display_values)
  line=' '
WHILE display_parameters DO
  put_line '1' output=$output
COLLECT_TEXT $output   substitution_mark='&'
--------------------------------------------------
             VALIDATE_FAMILY

    FAMILY_NAME = &family_name&
    ADMINISTRATOR_NAME = &administrator_name&
    PASSWORD = &password&
    VALIDATE_USERS = &yes_to_validate_users&
    USER_VALIDATION = &user_validation&

--------------------------------------------------
**
  put_line (' ', ' ENTER  GO  TO VALIDATE THE ABOVE FAMILY,', ' ENTER  QUIT  TO TERMINATE VALIDATION, ') ..
        output=$output
  put_line (' ENTER  PROMPT  TO ASSIGN NEW VALUES,') output=$output
  accept_line variable=line input=input ..
        prompt='OR ENTER VARIABLE = ''STRING_VALUE'' (AS LISTED ABOVE) - '
  put_line ' ' output=$output
  line = $translate(lower_to_upper, line)
  IF line = 'GO' THEN
    display_parameters=false
    FOR i = 1 to 3 DO
      IF $name(parameters(i)) = 'PLEASE_SPECIFY' THEN
        display_parameters=true
        put_line ($STRREP(' --ERROR-- '//parameters(I)//' NOT SPECIFIED'), ' ') output=$output
        accept_line variable=line input=input prompt=$STRREP('ENTER '//PARAMETERS(I)//'  - ')
        line = $translate(lower_to_upper, line)
        $NAME(parameters(i)) = line
      IFEND
    FOREND
  ELSEIF line = 'QUIT' THEN
    EXIT_PROC
  ELSEIF line = 'PROMPT' THEN
    I=1
    display_parameters=false
    WHILE (I<5) AND (display_parameters=false) DO
      accept_line variable=line input=input ..
            prompt=$STRREP('ENTER '//PARAMETERS(I)//', PROMPT, OR CYCLE - ')
      line = $translate(lower_to_upper, line)
      IF line = 'CYCLE' THEN
        display_parameters=true
      ELSEIF line <> 'PROMPT' THEN
        $NAME(parameters(i)) = line
      IFEND
      I= I + 1
    WHILEND
    IF ($name(yes_to_validate_users)) AND (display_parameters=false) THEN
      REPEAT
        put_line ' VALIDATION FILE MUST BE A PERMANENT FILE: enter CYCLE to use default, ' o=$output
        accept_line variable=line input=input prompt='or enter desired USER_VALIDATION FILENAME - '
        line = $translate(lower_to_upper, line)
      UNTIL (line='CYCLE') OR ($FILE($FNAME(line),permanent))
      IF $file($fname(line), permanent) THEN
        detach_file $fname(line)
        user_validation = line
      IFEND
    IFEND
    display_parameters=true
  ELSEIF $scan_string('=', line) <> 0 THEN
    line = $translate(lower_to_upper, line)
    put_line ' INCLUDING COMMAND *'//line//'*' output=$output
    IF $scan_string('VALIDATE_USERS', line) <> 0 THEN
       yes_to_validate_users = $strrep(($scan_string('YES', LINE) <> 0))
    ELSE
       include_line line
    IFEND
  ELSE
    put_line ' IGNORING COMMAND *'//line//'*' output=$output
    WAIT T=1500
  IFEND
WHILEND "FOR DISPLAY_PARAMETERS = TRUE"

IF (NOT DISPLAY_PARAMETERS) AND ($SPECIFIED(FAMILY)) THEN
  validation_job = family_name// '_validation_job'
  create_family $name(family_name) family_user_administrator=$name(administrator_name)
  change_file_attributes $fname(user_validation) ring_attributes=(3 13 13) status=dsv$status
  detach_file $fname(user_validation) status=dsv$status
"Create the Validation Job to set up validations for the family."
  display_message to=job m='----  Submitting Validation Job for family '//family_name
  JOB sm='&'
    ADMINISTER_VALIDATIONS
      use_validation_file validation_file=$fname(':&family_name&.$SYSTEM.$VALIDATIONS')
      WHEN any_fault DO
        display_value ('The following error occurred in user validation, ..' osv$status) output=$response
        CONTINUE
      WHENEND
      CHANGE_USER &administrator_name&
        change_login_password new_password=&password&
        change_link_attribute_password value='&password&'
        change_user_prolog value='$system.testing_user_prolog'
        change_user_epilog value='$user.epilog'
        change_job_class delete=all add=(batch, maintenance, interactive, file_transfer) batch_default=batch ..
              interactive_default=interactive
        change_capability delete=all
        change_capability add=family_administration
        change_capability add=system_administration
        change_capability add=network_application_management
        change_capability add=network_operation
        change_capability add=station_operation
        change_capability add=timesharing
        change_capability add=explicit_remote_file
        change_capability add=implicit_remote_file
      END_CHANGE_USER
      attach_file &user_validation& lfn=validate_users wait=yes
      attach_file $system.validate_user
      validate_users family=&family_name&
    END_ADMINISTER_VALIDATIONS
    terminate_print name=output
  JOBEND
IFEND

PROCEND validate_family
