JES2 provides different types of JQEs or JQAs to your exit and
processes them in differing ways. The types are:
- Real JQE. Your exit receives a read or update mode JQE or JQA.
- Read-mode JQA. Your exit receives an artificial JQE that is a
temporary block of storage. This storage contains:
- Almost the same information as the real JQE.
- Information from the JQX (new in Version 2 Release 4).
- Information from BERTs (another checkpointed area).
- Update-mode JQA. Your exit receives an artificial JQE that is
a temporary block of storage. This storage is similar to the read-mode
JQA. JES2 ensures the integrity of this JQA and manages the storage
that each JQA occupies.
- Work area that contains a
prototype JQE. In certain circumstances, your exit may be passed the
address of a work area that contains a working copy of a JQE. See
Exit 47 for more information.
Exits normally use JQEs in read mode (data is extracted or pointed
to when calling service routines) or in write mode (data in the JQE
is modified). JES2 exit writers need to take the following actions
when they use a particular JQE or JQA as the JQE= keyword value on
the $DOGJQE macro:
- If the JQE is needed only to access data and that data is within
the bounds of the original real JQE, only the address of the real
JQE is needed. Regardless of what IBM® has
provided as the JQE address, use the following action to get the address
of the real JQE:
$DOGJQE ACTION=GETJQEADDR,CBADDR=jqe
- If the JQE is needed only to access data and that data is beyond
the bounds of the original real JQE (that is, it is stored in fields
where the first three characters of the field name are other than
JQE), a read mode JQA is needed. Regardless of what IBM has
provided as the JQE address, use the following action to get the address
of a read mode JQA. The address of the read mode is returned in R0.
$DOGJQE ACTION=(FETCH,READ),JQE=jqe
After you finish, use the following
action to free the memory that is used for the JQA (x is the address
that is returned from the first $DOGJQE call):
$DOGJQE ACTION=RETURN,CBADDR=x
- If the JQE is needed in write mode (the fields to be changed are
either within the bounds or not within the bounds of the original
JQE), use the following action to get the address of an update mode
JQE, regardless of what IBM has provided as the JQE address.
The address of the JQA is returned in R0. Make all changes to fields
in the update mode JQA.
$DOGJQE ACTION=(FETCH,UPDATE),JQE=jqe
After you finish, use the following
action to free the memory that is used for JQA (x is the address from
the first $DOGJQE call) and to ensure that the changes in the JQA
get propagated to the real JQE, the JQX, and the BERT area.
$DOGJQE ACTION=RETURN,CBADDR=x