I'm learning WTO macro's executable form and tried the below simple code to display 'Hello World' message.
Code:
WTOVAR START
BALR 12,0
USING *,12
WTO MF=(E,WTOMSG)
BR 14
WTOMSG DC AL2(WTOEND-*,0)
MESSAGE DC C'HELLO WORLD'
WTOEND EQU *
END WTOVAR
I din't understand the WTOMSG contents i.e. AL2(WTOEND-*,0).
WTOEND-* is referring to which location and why is second parameter here 0?
Can anyone tell me what happened here?
TITLE 'IPOWTO - OPERATIONS COMMUNICATION' 00010000
*/* LIB: IPO1.SAMPLIB 00020000
*/* OBJ: IPO1.LINKLIB 00030000
*/* GDE: CBIPO MVS CUSTOMIZATION 00040000
*/* DOC: THIS PROGRAM PROVIDES PROGRAMMER TO OPERATOR COMMUNICATION. 00050000
*********************************************************************** 00060000
* $MOD(IPOWTO) PROD(PROCESS): /*@D1C*/* 00070000
* * 00080000
* MODULE NAME = IPOWTO /*@D1C*/* 00090000
* * 00100000
* DESCRIPTIVE NAME = MVS CUSTOM-BUILT IPO * 00110000
* SUPPLIED PROGRAM FOR PROGRAMMER TO COMMUNICATE WITH OPERATOR * 00120000
* * 00130000
* COPYRIGHT = 5751-CS1 IBM CORP 1983, 1988 * 00140000
* * 00150000
* STATUS = RELEASE 1.0 * 00160000
* * 00170000
* FUNCTION = * 00180000
* SERVICE THE COMMUNICATIONS NEEDS OF A PROGRAM TO THE * 00190000
* CONSOLE OPERATOR BY READING SYSIN AND ISSUING WTO'S * 00200000
* TO DISPLAY THESE MESSAGES TO THE OPERATOR. THE * 00210000
* PROGRAM THEN ISSUES A WTOR: * 00220000
* 'ENTER C TO CONINUE PROCESSING OR R TO REPEAT DISPLAY'* 00230000
* 00240000
* OPERATION = * 00250000
* IPOWTO READS CARD IMAGES FROM SYSIN AND THEN /*@D1C*/* 00260000
* (1) DISPLAYS THEM TO THE OPERATOR USING WTO MACRO * 00270000
* (2) WRITES THEM TO SYSPRINT USING PUT MACRO * 00280000
* (3) ISSUES A WTOR MACRO TO LET THE OPERATOR CONTINUE * 00290000
* PROCESSING (REPLY C) OR TO REPEAT DISPLAY (REPLY R) * 00300000
* NOTE THAT IF A PARM IS PASSED, IT IS USED AS FIRST MESSAGE * 00310000
* * 00320000
* NOTES = * 00330000
* * 00340000
* DEPENDENCIES = CHARACTER IS EBCDIC. REASSEMBLE * 00350000
* IF A DIFFERENT CHARACTER SET IS NEEDED. * 00360000
* * 00370000
* RESTRICTIONS = MUST SUPPLY DCB ATTRIBUTES ON * 00380000
* SYSPRINT DD CARD, E.G. * 00390000
* DCB=(RECFM=FB,LRECL=80,BLKSIZE=800) * 00400000
* * 00410000
* PATCH LABEL = N/A * 00420000
* * 00430000
* MODULE TYPE = PROCEDURE * 00440000
* * 00450000
* PROCESSOR = ASM * 00460000
* * 00470000
* MODULE SIZE = 1K * 00480000
* * 00490000
* ATTRIBUTES = PROTECT KEY 8, NONREUSABLE * 00500000
* * 00510000
* ENTRY POINTS = IPOWTO (ONLY ENTRY POINT) /*@D1C*/* 00520000
* * 00530000
* LINKAGE = // EXEC PGM=IPOWTO /*@D1C*/* 00540000
* * 00550000
* INPUT = REGISTER 1 POINTS TO PARM FIELD ON EXEC CARD * 00560000
* * 00570000
* OUTPUT = WTO OF PARM FIELD IF AVAILABLE * 00580000
* WTO OF SYSIN CARD IMAGES * 00590000
* WTOR TO OPERATOR ASKING FOR PERMISSION TO * 00600000
* CONTINUE PROCESSING OR REDISPLAY MSG. * 00610000
* * 00620000
* EXIT - NORMAL = AT PROGRAM END VIA BRANCH REGISTER 14 * 00630000
* * 00640000
* OUTPUT = NONE * 00650000
* * 00660000
* RETURN CODE = ZERO * 00670000
* * 00680000
* EXIT - ERROR = NONE * 00690000
* * 00700000
* EXTERNAL REFERENCES = NONE * 00710000
* * 00720000
* ROUTINES = NONE * 00730000
* * 00740000
* DATA AREAS = NONE * 00750000
* * 00760000
* CONTROL BLOCKS = NONE * 00770000
* * 00780000
* TABLES = NONE * 00790000
* * 00800000
* MACROS = WTO,WTOR * 00810000
* * 00820000
* CHANGE ACTIVITY : * 00830000
* * 00840000
* $D1 = DCR6052,1.0,063086,CAO: RENAMED WTO TO IPOWTO DUE TO * 00850000
* CONFUSION WITH CUSTOMERS * 00860000
* (ACTUALLY AN ACTIVITY RECORD 6052 * 00870000
* RECORDED AS DCR TO ADHERE TO CHANGE * 00880000
* FLAGGING STANDARDS) * 00890000
* * 00900000
* * 00910000
* * 00920000
* MESSAGES = NO ERROR MESSAGES ISSUED * 00930000
* * 00940000
* ABEND CODES = 013 IF DCB ATTRIBUTES NOT SUPPLIED ON * 00950000
* SYSPRINT DD CARD * 00960000
* * 00970000
*********************************************************************** 00980000
* REGISTER USAGE FOLLOWS... * 00990000
R0 EQU 0 WORK REG * 01000000
R1 EQU 1 PTR TO INPUT PARM * 01010000
R2 EQU 2 WORK REG * 01020000
R11 EQU 11 PTR TO FIRST MESSAGE IF NOZERO PARM* 01030000
R12 EQU 12 BASE REG * 01040000
R13 EQU 13 PTR TO IPOSAVE * 01050000
R14 EQU 14 LINKAGE REG * 01060000
R15 EQU 15 LINKAGE REG * 01070000
ML EQU 70 MSG LENGTH * 01080000
*********************************************************************** 01090000
IPOWTO CSECT BEGINING OF PROGRAM /*@D1C*/ 01100000
USING *,R12 SET UP BASE REG 01110000
SAVE (14,12),,IPO.WTO..&SYSDATE SAVE REGESTERS 01120000
LR R12,R15 SET UP ADDRESSABILITY 01130000
LR R2,R13 SAVE ADDR OF PREVIOUS SAVEAREA 01140000
LA R13,IPOSAVE POINT TO CURRENT SAVEAREA 01150000
ST R13,8(R2) LINK PREVIOUS SAVEAREA TO IPOSAVE 01160000
ST R2,4(R13) LINK IPOSAVE TO PREVIOUS SAVEAREA 01170000
LR R11,R1 PTR PARM ADDR - FIRST COMMAND 01180000
L R11,0(R11) SAVE ADDR OF PARM IN R11 01190000
IPOPARM LH R2,0(R11) LENGTH TO R2 01200000
C R2,=F'0' PARM LENGTH = 0? 01210000
BE IPOGETIN YES - GET RECORD FROM SYSIN 01220000
C R2,=A(ML) COMPARE LENGTH OF TO MAX LENGTH 01230000
BNH IPOMOVE LENGTH OF PARM OKAY 01240000
LA R2,ML RESET PARM LENGTH TO MAX 01250000
IPOMOVE MVC IPOMSG,=CL(ML)' ' CLEAR OUT MSG AREA 01260000
BCTR R2,0 LENGTH-1 FOR MVC 01270000
EX R2,IPOMVC MOVE PARM INTO MSGAREA 01280000
B IPOGOTIN PROCESS FIRST MSG 01290000
IPOGETIN TM INPUT+48,X'10' INPUT FILE OPEN? 01300000
BO IPOGET BR IF SO 01310000
OPEN (INPUT) OPEN IT 01320000
TM INPUT+48,X'10' DID IT OPEN 01330000
BZ IPOEND NO - NO VERICATION (NO WTOR) 01340000
IPOGET GET INPUT READ RECORD FROM SYSIN 01350000
MVC IPOMSG,0(R1) MOVE ML CHAR OF INPUT TO MSG AREA 01360000
IPOGOTIN CLC IPOMSG,=CL(ML)' ' TEST FOR BLANK MESSAGE 01370000
BE IPOGETIN SKIP BLANK RECORD 01380000
MVC IPOWTOL+4(ML),IPOMSG PLUG WTO MSG 01390000
WTO MF=(E,IPOWTOL) DISPLAY MSG 01400000
TM OUTPUT+48,X'10' OUTPUT FILE OPEN? 01410000
BO IPOOUT BR IF SO 01420000
OPEN (OUTPUT,(OUTPUT)) OPEN IT 01430000
TM OUTPUT+48,X'10' DID OUTPUT OPEN 01440000
BZ IPOOUTNO NO - SKIP OUTPUT 01450000
IPOOUT PUT OUTPUT,IPOMSG SAME MSG TO OUTPUT FILE 01460000
IPOOUTNO B IPOGETIN READ NEXT RECORD 01470000
IPOEOD MVI IPORPECB,0 CLEAR OUT ECB FOR REPLY 01480000
WTOR 'REPLY C TO CONTINUE PROCESSING OR R TO REPEAT DISPLAY',X01490000
IPOREPLY,1,IPORPECB,ROUTCDE=(1,5,11) 01500000
WAIT 1,ECB=IPORPECB WAIT FOR OPERATOR TO REPLY 01510000
CLI IPOREPLY,C'C' IS IT CONTINUE? 01520000
BE IPOEND YES - CONTINUE PROCESSING 01530000
CLI IPOREPLY,C'R' IS IT REPEAT MESSAGE? 01540000
BNE IPOEOD NO - ASK OPERATOR AGAIN 01550000
CLOSE (INPUT) YES - REPEAT MSG - CLOSE INPUT 01560000
B IPOPARM GO TO FIRST MSG 01570000
IPOEND L R13,IPOSAVE+4 RESTORE R13 01580000
RETURN (14,12),T,RC=0 RETURN TO MVS 01590000
OUTPUT DCB DDNAME=SYSPRINT,DSORG=PS,MACRF=(PM) 01600000
INPUT DCB DDNAME=SYSIN,DSORG=PS,MACRF=(GL),EODAD=IPOEOD 01610000
IPOMVC MVC IPOMSG(0),2(R11) EXEC INSTRUCTION TO MOVE PARM 01620000
IPOSAVE DS 18F IPOSAVE AREA 01630000
IPORPECB DC F'0' ECB FOR WTOR 01640000
IPOAREA DC 0F'0',AL2(ML+4,0) LENGTH FOR OUTPUT IF RECFM=VB 01650000
IPOMSG DC CL(ML)' ' STORAGE FOR ONE MSG 01660000
IPOPAD DC CL(80-ML)' ' PAD TO 80 CHARACTERS 01670000
IPOREPLY DS CL1 REPLY FOR WTO 01680000
IPOWTOL WTO '1234567891123456789212345678931234567894123456789512345X01690000
678961234567897',ROUTCDE=(1,5,11),DESC=(7),MF=L 01700000
LTORG , LTORG NEEDED FOR ADDRESSABILITY 01710000
END , END OF PROGRAM 01720000