Sending messages to other terminals
To reply to a different terminal, also use the ISRT
call, but use an
alternate program communication block (PCB) instead of the TP PCB.
Just as the TP PCB represents the terminal that sent the message, an alternate PCB represents the terminal to which you want to send the message.
Single alternate terminal
If you are going to send messages to
only one alternate terminal, you can define the alternate PCB for that terminal during PSB
generation. When you define an alternate PCB for a particular destination, you cannot change that
destination during program execution. Each time you issue an ISRT
call that
references that PCB, the message goes to the logical terminal whose name was specified for the
alternate PCB. To send a message to that terminal, place one message segment at a time in the I/O
area, and issue an ISRT
call referring to the alternate PCB, instead of the TP
PCB.
Several alternate terminals
To send messages to several terminals, you can define the alternate PCB as modifiable during PSB generation. Therefore, the alternate PCB represents more than one alternate terminal. You can change the destination while your program is running.
Before you can set or change the destination of an alternate PCB, you must indicate to IMS TM that the message you have been building so far with that PCB
is finished. To do this, issue a PURG
call.
PURG
allows you to send multiple output messages while processing
one input message. When you do not use PURG
, IMS TM groups message segments into a message and sends them when the program issues a
GU
for a new message, terminates, or reaches a commit point. A
PURG
call tells IMS TM that the message built
against this TP PCB or alternate PCB (by issuing one ISRT
call per message segment)
is complete. IMS TM collects the message segments that you have
inserted into one PCB as one message and sends it to the destination represented by the alternate
PCB you have referenced.
A PURG
call that does not contain the address of an I/O area indicates to IMS TM that this message is complete. If you include an I/O area in
the call, PURG
acts as an ISRT
call as well. IMS TM treats the data in the I/O area as the first segment of a new message.
When you include an I/O area on a PURG
call, you can also include a MOD name to
change the format of the screen for this message. Although specifying the MOD name is optional, when
you use it, you can specify it only once per message or in only the first ISRT
or
PURG
that begins the message.
To set the destination of a modifiable alternate PCB during program execution, you
use a CHNG
call. When you issue the CHNG
call you supply the name
of the logical terminal to which you want to send the message. The alternate PCB you use then
remains set with that destination until you do one of the following:
- Issue another
CHNG
call to reset the destination. - Issue another
GU
to the message queue to start processing a new message. In this case, the name still appears in the alternate PCB, even though it is no longer valid. - Terminate your program. When you do this, IMS TM resets the destination to blanks.
The first 8 bytes of the alternate PCB contain the name of the logical terminal to which you want to send the message.
When you issue a CHNG
call, give IMS TM the
address of the alternate PCB you are using and the destination name you want set for that alternate
PCB.
When you use the PURG
call, you give IMS TM only the address of the alternate PCB. IMS TM
sends the message you have built using that PCB.
To indicate an error situation, you can send a message by issuing an ISRT
call
followed by a PURG
call against an express PCB. These calls send the message to its
final destination immediately.
Example: The program could go through these steps:
- The program issues a
GU
call (andGN
calls, if necessary) to retrieve an input message. - While processing the message, the program encounters an abnormal situation.
- The program issues a
PURG
call to indicate to IMS TM the start of a new message. - The program issues a
CHNG
call to set the destination of an express PCB to the name of the originating logical terminal. The program can get this name from the first 8 bytes of the I/O PCB. - The program issues
ISRT
calls as necessary to send message segments. TheISRT
calls reference the express PCB. - The program issues a
PURG
call referencing the express PCB. IMS TM then sends the message to its final destination. - The program can then terminate abnormally, or it can issue a
ROLL
,ROLB
, orROLS
call to back out its database updates and cancel the output messages it has created since the last commit point.
PURG
call to
indicate the end of a message (and not to send the next message segment), you could use this call
sequence: CHNG ALTPCB1, LTERMA
ISRT ALTPCB1, SEG1
ISRT ALTPCB1, SEG2
ISRT ALTPCB1, SEG3
PURG ALTPCB1
CHNG ALTPCB1, LTERMB
ISRT ALTPCB1, SEG4
ISRT ALTPCB1, SEG5
ISRT ALTPCB1, SEG6