PROCEDURE rap$create_scheduling_class, create_scheduling_classes, cresc (
  option, o: any of
      key
        all
      keyend
      list of key
        default, ptf_qtf, basisp, nfs, netarc, x_client
      keyend
    anyend = default
  basisp_scheduling_class, bsc: name = DM_KERNEL
  activate_profile, ap: boolean = true
  status)

" This procedure creates and activates the scheduling profile file.

  "$FORMAT=OFF"
  VAR
    option_list           : list 1..7 of name = default
    local_status          : status
    error_flag            : boolean = false
    save_changes          : boolean = true
  VAREND
  "$FORMAT=ON"

"Create the default scheduling profile file.

  ADMINISTER_SCHEDULING

  administer_scheduling_block: ..
    BLOCK

      IF $generic_type(option)= key THEN
        "Assume that the entry was ALL.
       option_list = (default,ptf_qtf,basisp,nfs,netarc,x_client)
      ELSE
        option_list=$apply(option $name(x))
      IFEND

      IF $subset(default, option_list) THEN
        create_default_profile r=$user.scheduling_profile
      IFEND

  file_transfer_block: ..
    BLOCK

      IF $subset(ptf_qtf, option_list) THEN
        create_job_category cn=file_transfer oan=(osa$file_transfer_server, ftpd)

"This command will clean up any duplicate job categories.

        change_job_category cn=file_transfer oan=(osa$file_transfer_server, ftpd)
        ADMINISTER_SERVICE_CLASS
          create_class cn=file_transfer dv=batch status=local_status
          IF (local_status.normal) THEN
            change_attribute a=ft maxaj=40
          IFEND
        QUIT
        EXIT file_transfer_block WHEN NOT local_status.normal
        ADMINISTER_JOB_CLASS
          create_class cn=file_transfer dv=batch status=local_status
          IF (local_status.normal) THEN
            change_attribute iic=true il=40 isc=file_transfer rc=file_transfer a=ft
          IFEND
        QUIT
      IFEND

    BLOCKEND file_transfer_block

    IF NOT (local_status.normal) AND ($condition(local_status.condition)<> 'JME$OBJECT_ALREADY_KNOWN') THEN
      error_flag=true
      save_changes=false
      EXIT administer_scheduling_block
    IFEND

  basisp_block: ..
    BLOCK
      local_status.normal=true

      IF $subset(basisp, option_list) THEN
        ADMINISTER_SERVICE_CLASS
          create_class cn=basisp_scheduling_class dv=maintenance status=local_status
          IF (local_status.normal) THEN
            change_attribute a=dm
          IFEND
        QUIT
        EXIT basisp_block WHEN NOT local_status.normal
        ADMINISTER_JOB_CLASS
          create_class cn=basisp_scheduling_class dv=maintenance status=local_status
          IF (local_status.normal) THEN
            change_attribute a=dm
          IFEND
        QUIT
      IFEND

    BLOCKEND basisp_block

  nfs_block: ..
    BLOCK
      local_status.normal=true

      IF $subset(nfs, option_list) THEN
        ADMINISTER_SERVICE_CLASS
          create_class cn=network_file_system dv=system status=local_status
          IF (local_status.normal) THEN
            change_attribute a=nfs dc=((p9,unlimited,1,1))
          IFEND
          create_class cn=portmap_pcnfs dv=system status=local_status
          IF (local_status.normal) THEN
            change_attribute a=pp dc=((p6,unlimited,1,1))
          IFEND
        QUIT
        EXIT nfs_block WHEN NOT local_status.normal
        ADMINISTER_JOB_CLASS
          create_class cn=network_file_system dv=system status=local_status
          IF (local_status.normal) THEN
            change_attribute a=nfs isc=network_file_system
          IFEND
          create_class cn=portmap_pcnfs dv=system status=local_status
          IF (local_status.normal) THEN
            change_attribute a=pp isc=portmap_pcnfs
          IFEND
        QUIT
      IFEND

    BLOCKEND nfs_block

  netarc_block: ..
    BLOCK
      local_status.normal=true

      IF $subset(netarc, option_list) THEN
        ADMINISTER_SERVICE_CLASS
          create_class cn=network_archiving dv=system status=local_status
          IF (local_status.normal) THEN
            change_attribute a=netarc dc=((p9,5000,1,1) (p5,8000,1,1))
          IFEND
        QUIT
        EXIT netarc_block WHEN NOT local_status.normal
        ADMINISTER_JOB_CLASS
          create_class cn=network_archiving dv=system status=local_status
          IF (local_status.normal) THEN
            change_attribute a=netarc isc=network_archiving
          IFEND
        QUIT
      IFEND

    BLOCKEND netarc_block

  x_client_block: ..
    BLOCK
      local_status.normal=true

      IF $subset(x_client, option_list) THEN
        ADMINISTER_SERVICE_CLASS
          create_class cn=x_client dv=interactive status=local_status
          IF (local_status.normal) THEN
            change_attribute a=xc dc=((p6,1000,1,1) (p5,unlimited))
          IFEND
        QUIT
        EXIT x_client_block WHEN NOT local_status.normal
        ADMINISTER_APPLICATION
          create_application an=x_client status=local_status
          IF (local_status.normal) THEN
            change_attribute service_class=x_client
          IFEND
        QUIT
        EXIT x_client_block WHEN NOT local_status.normal
        ADMINISTER_JOB_CLASS
          create_class cn=x_client dv=interactive status=local_status
          IF (local_status.normal) THEN
            change_attribute a=xc isc=x_client
          IFEND
        QUIT
      IFEND

    BLOCKEND x_client_block

    IF NOT (local_status.normal) AND ($condition(local_status.condition)<> 'JME$OBJECT_ALREADY_KNOWN') THEN
      error_flag=true
      save_changes=false
    IFEND

  BLOCKEND administer_scheduling_block

  QUIT sc=save_changes

  EXIT_PROC WITH local_status WHEN error_flag

  IF (activate_profile = true) THEN
    MANAGE_ACTIVE_SCHEDULING
      activate_profile p=$user.scheduling_profile ejr=true o=$null
    QUIT sc=no
  IFEND

PROCEND rap$create_scheduling_class
