|
In this example, an application program known as APPLA
is receiving data with an any-mode RECEIVE. After it receives the
data, it moves the data into a buffer contained in a control block
used by the application program to represent a conversation. (The
control block is one in a chain of conversation blocks. The application
program uses the returned conversation identifier to find the proper
block.) The application program then issues another any-mode RECEIVE.
*
APPCCMD CONTROL=RECEIVE, X
QUALIFY=ANY, X
RPL=RPLA, X
AAREA=RPLAX, X
ACB=APPLA, X
AREA=RECAREA, X
AREALEN=255, X
CONMODE=CS, X
OPTCD=SYN
*
LTR 15,15 * CHECK GENERAL RETURN CODE IN 15
BNZ BADGENRC * HANDLE NONZERO RETURN CODE
LTR 0,0 * CHECK CONDITIONAL COMPLETION
BNZ BADCOND * HANDLE NONZERO RETURN CODE
*
* RETURN CODES WERE GOOD. FIND THE CONVERSATION BLOCK AND MOVE DATA.
*
LA 10,RPLA * LOAD RPL ADDRESS
USING IFGRPL,10 * ESTABLISH ADDRESSABILITY
LA 9,RPLAX * LOAD RPL EXTENSION ADDRESS
USING ISTRPL6X,9 * ESTABLISH ADDRESSABILITY
L 8,BLKCHAIN * GET START OF BLOCK CHAIN
USING BLKMAP,8 * ESTABLISH ADDRESSABILITY
SEARCHLP LTR 8,8 * IF CHAIN ZERO, BLOCK NOT FOUND
BZ ERROR * HANDLE ERROR IF SO
CLC RPL6CNVD,BLKCNVD * RIGHT CONVERSATION BLOCK?
BE STOREBUF * IF SO, TRANSFER DATA
L 8,BLKNEXT * GET NEXT IN CHAIN
B SEARCHLP * GO AND CHECK NEW POINTER VALUE
STOREBUF MVC BLKBUF(255),RECAREA * MOVE DATA FROM RECEIVE BUFFER
MVC BLKBUFLN,RPLRLEN * STORE LENGTH OF RECEIVED DATA
•
•
•
BLKCHAIN DS A * POINTER TO CHAIN OF BLOCKS
RECAREA DS XL255 * RECEIVE BUFFER
RPLA RPL AM=VTAM * RPL STORAGE
RPLAX ISTRPL6 * RPL EXTENSION STORAGE
APPLA ACB AM=VTAM,MACRF=LOGON,APPLID=APPLNAME * ACB STORAGE
•
•
•
BLKMAP DSECT
BLKCNVD DS XL4 * CONVERSATION ID
BLKNEXT DS A * NEXT IN CHAIN
BLKBUFLN DS XL4 * LENGTH OF DATA IN BUFFER
BLKBUF DS XL255 * CONVERSATION BUFFER
Once the application program has finished receiving data
on the conversation, the conversation can be returned to continue-any
state by using the CONMODE operand or by using the RESETRCV macroinstruction.
This example could be coded as follows: *
RECLOOP APPCCMD CONTROL=RECEIVE, X
QUALIFY=SPEC, X
RPL=RPLA, X
AAREA=RPLAX, X
ACB=APPLA, X
CONVID=(8), X
AREA=RECAREA, X
AREALEN=255, X
FILL=LL, X
CONMODE=CS, X
OPTCD=SYN
*
LTR 15,15 * CHECK GENERAL RETURN CODE IN 15
BNZ BADGENRC * HANDLE NONZERO RETURN CODE
LTR 0,0 * CHECK CONDITIONAL COMPLETION
BNZ BADCOND * HANDLE NONZERO RETURN CODE
*
* RETURN CODES WERE GOOD, CHECK WHAT-RECEIVED INDICATOR.
*
LA 9,RPLAX * LOAD RPL EXTENSION ADDRESS
USING ISTRPL6X,9 * ESTABLISH ADDRESSABILITY
BAL 14,PROCDATA * BRANCH TO HANDLE RECEIVED DATA
TM RPL6RCV1,RPL6WDAC * CHECK DATA COMPLETE INDICATOR
BNO RECLOOP * IF DATA LEFT, DO ANOTHER RECEIVE
*
* DATA ALL RECEIVED. RESET CONTINUATION MODE
*
APPCCMD CONTROL=RESETRCV,
RPL=RPLA, X
AAREA=RPLAX, X
ACB=APPLA, X
CONVID=(8), X
CONMODE=BUFFCA, X
OPTCD=SYN
*
LTR 15,15 * CHECK GENERAL RETURN CODE IN 15
BNZ BADGENRC * HANDLE NONZERO RETURN CODE
LTR 0,0 * CHECK CONDITIONAL COMPLETION
BNZBAD COND * HANDLE NONZERO RETURN CODE
*
* RETURN CODES WERE GOOD, CONTINUATION MODE RESET.
*
•
•
•
RECAREA DS XL255 * RECEIVE BUFFER
RPLA RPL AM=VTAM * RPL STORAGE
RPLAX ISTRPL6 * RPL EXTENSION STORAGE
APPLA ACB AM=VTAM,MACRF=LOGON,APPLID=APPLNAME * ACB STORAGE
|