PROC dum$SET_EXCHANGE_PACKAGE set_exchange_package, setep, setxp (
  gtid                : integer -281474976710655..281474976710655 = $optional
  ijlo                : integer -281474976710655..281474976710655 = $optional
  job_address, ja     : integer -281474976710655..281474976710655 = $optional
  monitor_address, ma : integer -281474976710655..281474976710655 = $optional
  )

  crev (ptlep, xcbo, ijlep, es, ajlo, a, lgtid)
  crev s k=status
  crev v$xcb_pva s=job status=s
  IF NOT s.normal THEN
    crev v$xcb_pva s=xref status=s
  IFEND
  IF $specified(gtid) THEN
    get_ijlep_via_gtid $value(gtid) ijlep
    lgtid = $value(gtid)
  ELSEIF $specified(ijlo) THEN
    get_ijlep_via_ijlo $value(ijlo) ijlep
    fetch_memory ijlep jmt$initiated_job_list_entry job_monitor_taskid lgtid
  ELSEIF $specified(job_address) THEN
    v$xcb_pva = $value(job_address)
    chapr jps=$rma($value(job_address))
    chad e=j
    EXIT_PROC
  ELSEIF $specified(monitor_address) THEN
    v$xcb_pva = $mod($value(monitor_address), 100000000(16)) + 300000000(16)
    chapr jps=$rma($value(monitor_address) m)
    chad e=j
    EXIT_PROC
  ELSE
    putl ' One of the parameters is required'
    EXIT_PROC
  IFEND

  fetch_memory ijlep jmt$initiated_job_list_entry entry_status es
  IF es > 2 THEN
    putl ' Job swapped out'
    EXIT_PROC
  IFEND
  fetch_memory ijlep jmt$initiated_job_list_entry ajl_ordinal ajlo
  get_ptlep_via_gtid lgtid ptlep
  fetch_memory ptlep tmt$primary_task_list_entry xcb_offset xcbo
  a = (ajlo + 14(16)) * 100000000(16) + xcbo

  v$xcb_pva = 3 * 100000000(16) + xcbo
  chapr jps=$rma(a, m)
  chad e=j

PROCEND dum$set_exchange_package
