PROC validate_user, valu (
  user, u                             : name = $required
  password, pw                        : name = $required
  project, p                          : list 2 of name = (account, project)
  user_prolog, up                     : string = '$system.testing_user_prolog'
  user_epilog, ue                     : string = '$user.epilog'
  job_classes, job_class, jc          : list of key batch, b, interactive, i, maintenance, m, ..
                                            file_transfer, ft = (b, i, file_transfer)
  minimum_ring, mr                    : integer 1..15 = 11
  nominal_ring, nr                    : integer 1..15 = 11
  explicit_remote_file, erf           : boolean = true
  hpa_ve_initiator, hvi               : boolean = true
  implicit_remote_file, irf           : boolean = true
  network_application_management, nam : boolean = true
  network_operation, no               : boolean = true
  station_operation, so               : boolean = true
  timesharing, t                      : boolean = true
  status                              : var of status = $optional
  )

  create_variable name=create_status kind=status

  CREATE_USER user=$value(user)
  create: ..
    BLOCK
      change_login_password new_password=$value(password) status=create_status
      EXIT create WHEN NOT create_status.normal
      change_link_attribute_password value=$string($value(password)) status=create_status
      EXIT create WHEN NOT create_status.normal
      change_default_account_project account=$value(project 1) project=$value(project 2) status=create_status
      EXIT create WHEN NOT create_status.normal
      change_user_prolog value=$value(user_prolog) status=create_status
      EXIT create WHEN NOT create_status.normal
      change_user_epilog value=$value(user_epilog) status=create_status
      EXIT create WHEN NOT create_status.normal
      change_job_class delete=all interactive_default=none batch_default=none status=create_status
      EXIT create WHEN NOT create_status.normal
      FOR i = 1 TO $set_count(job_classes) DO
        IF ($string($value(job_classes, i)) = 'BATCH') OR ..
              ($string($value(job_classes, i)) = 'B') THEN
          change_job_class add=batch batch_default=batch status=create_status
        ELSEIF ($string($value(job_classes, i)) = 'INTERACTIVE') OR ..
              ($string($value(job_classes, i)) = 'I') THEN
          change_job_class add=interactive interactive_default=interactive status=create_status
        ELSEIF ($string($value(job_classes, i)) = 'MAINTENANCE') OR ..
              ($string($value(job_classes, i)) = 'M') THEN
          change_job_class add=maintenance status=create_status
        ELSEIF ($string($value(job_classes, i)) = 'FILE_TRANSFER') OR ..
              ($string($value(job_classes, i)) = 'FT') THEN
          change_job_class add=file_transfer status=create_status
        IFEND
        EXIT create WHEN NOT create_status.normal
      FOREND
      change_ring_privilege minimum_ring=$value(minimum_ring) nominal_ring=$value(nominal_ring) ..
            status=create_status
      change_capability delete=all status=create_status
      EXIT create WHEN NOT create_status.normal
      IF $value(explicit_remote_file) THEN
        change_capability add=explicit_remote_file status=create_status
        EXIT create WHEN NOT create_status.normal
      IFEND
      IF $value(implicit_remote_file) THEN
        change_capability add=implicit_remote_file status=create_status
        EXIT create WHEN NOT create_status.normal
      IFEND
      IF $value(network_application_management) THEN
        change_capability add=network_application_management status=create_status
        EXIT create WHEN NOT create_status.normal
      IFEND
      IF $value(network_operation) THEN
        change_capability add=network_operation status=create_status
        EXIT create WHEN NOT create_status.normal
      IFEND
      IF $value(station_operation) THEN
        change_capability add=station_operation status=create_status
        EXIT create WHEN NOT create_status.normal
      IFEND
      IF $value(timesharing) THEN
        change_capability add=timesharing status=create_status
        EXIT create WHEN NOT create_status.normal
      IFEND
    BLOCKEND create
  END_CREATE_USER
  IF NOT create_status.normal THEN
    delete_user user=$value(user)
  IFEND
  EXIT_PROC WITH create_status

PROCEND validate_user
