Jon, I was trying to show a very basic use of AREAD, something so the OP
had something of an example.
Back to the OP's question, where he wanted to build a large table. I
have attached an example of just that using AREAD. It's from one of my
message programs. I have striped out the program code and just left the
macro, the dsect for the final table, and the input to the table. One
major advantage over individual macro calls is that I can fit everything
for each message in one line. With a macro call, each entry would take
at least two lines and have to have the right continuation syntax.
This is my fifth attempt to post the example. I had to delete several
hundred lines of input to the macro because the size of the email
exceeded the list max. I also had to remove some of the quoted text.
My Branch_On macro is simplistic, but one of the key things it does is
verify that the subscript passed is within range, even if I added more
possible outcomes. I have some programs that branch based on over a 100
possible index values. And, some random index values in the middle are
invalid. Since IBM keeps adding more values, with my BRANCH_ON, I can
just add another branch pointer and not worry about changing all the
edits. And, with 100's of entries, it's a lot less typing that keying a
macro call on each line of the program. Basically, it makes my life a
lot simpler.
Tony Thigpen
Jon Perryman wrote on 3/8/19 5:21 PM:
How is your BRANCH_ON macro improved by AREAD? You chose BRANCH_ON because it was a simpler macro but you have correctly coded AREAD macro's.
Regards, Jon.
On Friday, March 8, 2019, 2:00:50 AM PST, Tony Thigpen <[email protected]>
wrote:
*PROCESS NORENT
*PROCESS FLAG(PAGE0)
PRINT OFF
MACRO
MTABLE &TYPE
ACTR 10000
AIF ('&TYPE' EQ 'DSECT').DSECT
LCLA &C,&I,&J,&Z
LCLC &MSG(500),&TPY(500)
LCLC &V1(500),&L1(500),&V2(500),&L2(500)
LCLC &V3(500),&L3(500),&V4(500),&L4(500)
LCLC &CON(500),&LST(500),&TXT(500),&TAG
LCLA &L
LCLC &T,&M
.READ ANOP
&CARD AREAD NOSTMT
AIF ('&CARD'(1,5) EQ 'FFFFF').CARDEND
AIF ('&CARD'(1,1) EQ '*').READ
&C SETA &C+1
&MSG(&C) SETC '&CARD'(1,4)
&TYP(&C) SETC '&CARD'(5,1)
&CON(&C) SETC '&CARD'(6,1)
&LST(&C) SETC '&CARD'(7,1)
&V1(&C) SETC '&CARD'(8,1)
&L1(&C) SETC '&CARD'(9,2)
&V2(&C) SETC '&CARD'(11,1)
&L2(&C) SETC '&CARD'(12,2)
&V3(&C) SETC '&CARD'(14,1)
&L3(&C) SETC '&CARD'(15,2)
&V4(&C) SETC '&CARD'(17,1)
&L4(&C) SETC '&CARD'(18,2)
&Z SETA 73-(18+2+1) LENGTH OF TEXT IN INPUT CARD
&TXT(&C) SETC '&CARD'(18+2+1,&Z)
AGO .READ
.CARDEND ANOP
MESSAGE_TABLE DS 0D
.TABLE ANOP
&I SETA &I+1
AIF (&I GT &C).DOTEXT
AIF ('&MSG(&I)'(1,1) EQ '*').TABLE
&TAG SETC 'M_'.'&MSG(&I)'
DC H'&MSG(&I)',H'0'
DC CL1'&TYP(&I)',CL1'&CON(&I)',CL1'&LST(&I)',C' '
DC A(&TAG)
DC H'&L1(&I)',C'&V1(&I)',C' '
DC H'&L2(&I)',C'&V2(&I)',C' '
DC H'&L3(&I)',C'&V3(&I)',C' '
DC H'&L4(&I)',C'&V4(&I)',C' '
AGO .TABLE
.DOTEXT ANOP
DC X'FFFFFFFF'
.TEXT ANOP
&J SETA &J+1
AIF (&J GT &C).DONE
AIF ('&MSG(&J)'(1,1) EQ '*').TEXT
.* GET MESSAGE AND CALCULATE LENGTH
&M SETC '&TXT(&J)'
&M SETC '&M'(1,&Z)
&L SETA &Z
.TRIM AIF ('&M'(&L,1) NE ' ').DOUBLE
&L SETA &L-1
AGO .TRIM
.DOUBLE ANOP
&T SETC (DOUBLE '&M'(1,&L))
&TAG SETC 'M_'.'&MSG(&J)'
&TAG DC H'&L'
DC C'&T'
AGO .TEXT
.DONE MEXIT
.DSECT ANOP
MESSAGES DSECT DSECT FOR PARM AREA
M_NBR DS H MESSAGE NUMBER
DS H RESERVED
M_TYPE DS C MESSAGE TYPE
M_CONSOLE DS C MESSAGE LOCATION
M_SYSLST DS C MESSAGE LOCATION
DS C RESERVED
M_@TEXT DS A ADDRESS OF MESSAGE TEXT
M_L1 DS H RESULT LENGTH OF REPLACEMENT 1
M_M1 DS C METHOD OF REPLACEMENT 1
M_M_NONE EQU C' ' NO REPLACEMENT
M_M_CHAR EQU C'C' CHARACTER
M_M_PACK EQU C'P' PACK8
M_M_HEX EQU C'X' HEX (DISPLAY BASE 16)
M_M_BYTE EQU C'B' BYTE (DISPLAY BASE 10)
M_M_HALF EQU C'H' HALFWORD (DISPLAY BASE 10)
M_M_FULL EQU C'F' FULLWORD (DISPLAY BASE 10)
M_M_IP EQU C'I' 16 BYTE IP ADDRESS
DS C RESERVED
M_L2 DS H RESULT LENGTH OF REPLACEMENT 2
M_M2 DS C METHOD OF REPLACEMENT 2
DS C RESERVED
M_L3 DS H RESULT LENGTH OF REPLACEMENT 3
M_M3 DS C METHOD OF REPLACEMENT 3
DS C RESERVED
M_L4 DS H RESULT LENGTH OF REPLACEMENT 4
M_M4 DS C METHOD OF REPLACEMENT 4
DS C RESERVED
M_LENGTH EQU *-M_NBR
MEND
<<<<<< main program code deleted
MTABLE
*
* CC DESCRIPTION
* ------- ------------------------------------------------------------
* 01-04 MESSAGE MUMBER
* 05 MESSAGE TYPE
* 06 PRINT ON CONSOLE FLAG (Y OR A) (A=ASIS - NO PREFIX)
* 'Y' - YES
* 'A' - ASIS - NO PREFIX
* 'S' - "STICKY" - WILL NOT ROLL OFF CONSOLE
* 'R' - REPLY REQUESTED
* 07 PRINT ON SYSLST FLAG (Y OR A) (A=ASIS = NO PREFIX)
* 08-10 FIRST REPLACEMENT DATA TYPE AND DISPLAY LENGTH
* ' ' - NO REPLACEMENT, PUT OUT THE '|' CHARACTER
* 'C' - INPUT FORMAT IS CHARACTER
* 'P' - INPUT FORMAT IS PACK, LENGTH OF 8
* 'X' - INPUT FORMAT IS BINARY, DISPLAY AS HEX
* 'H' - INPUT FORMAT IS HALFWORD BINARY, DISPLAY AS BASE10
* 'F' - INPUT FORMAT IS FULLWORD BINARY, DISPLAY AS BASE10
* 'I' - INPUT FORMAT IS 16 CHARACTER IP ADDRESS. USE NTOP
* 09-10 IS THE DISPLAY LENGTH, NOT THE INPUT LENGTH
* 11-13 SECOND REPLACEMENT DATA TYPE AND DISPLAY LENGTH (SEE ABOVE)
* 14-16 THIRD REPLACEMENT DATA TYPE AND DISPLAY LENGTH (SEE ABOVE)
* 17-19 FOURTH REPLACEMENT DATA TYPE AND DISPLAY LENGTH (SEE ABOVE)
* 20 BLANK FOR READABILITY
* 21-72 MESSAGE TEXT. '|' DENOTES REPLACMENT LOCATION
*
0000IYYC16 00 00 00 VSE2PDF VERSION: |
0001IY 00 00 00 00 ENTER PDF SYSTEM COMMANDS.
0002IYYC20 00 00 00 INVALID VALUE FOR PARAMETER: |
0003IYYC20 00 00 00 INVALID PARAMETER: |
0004IYYI45 00 00 00 UNABLE TO VERIFY SMTP HOST: |.
0005EYY 00 00 00 00 PDF SYSTEM HAS EXPIRED.
0006EYYC08X02 00 00 CDLOAD FAILED FOR PHASE: | VSE-CODE=|
0007EYY 00 00 00 00 CONFLICT BETWEEN PHASE LEVELS.
0008IYYC03 00 00 00 PDF SYSTEM EXPIRES IN | DAYS.
0009EYY 00 00 00 00 INCORRECT CPU ID.
0010IYYC64 00 00 00 TCP HOST NAME IS |
0011IYY 00 00 00 00 TCP HOST NAME IS UNAVAILABLE.
0012EYYC16 00 00 00 TRANSLATE TABLE NOT FOUND: |.
0013EYY 00 00 00 00 REQUIRED TRANSLATE LIBR MEMBER NOT FOUND.
0014EYYC16 00 00 00 REQUIRED TRANSLATE TABLE NOT FOUND: |.
0015EYY 00 00 00 00 COMMAND NOT VALID UNLESS YOU PSTOP VSE2PDF.
0016WYYC02 00 00 00 CAN NOT FIND TCP/IP PARTITION FOR TCP_SYSID |.
0017IYYC02 00 00 00 TCP_SYSID=| HAS BEEN ASSIGNED.
0018IYYC45 00 00 00 TCP HOST ADDRESS IS |
0019IYY 00 00 00 00 TCP HOST ADDRESS IS UNAVAILABLE.
0020IYYC08X02 00 00 FREEVIS FAILURE FOR | AREA. R15 = |
0021IYYC08X02 00 00 GETVIS FAILURE FOR | AREA. R15 = |
0022I YI45 00 00 00 ADDRESS RESOLVED AS |.
0023IYYC30 00 00 00 DNS LOOKUP FAILED: |
0024IYYC02 00 00 00 TCP_SYSID=| IS NOW BEING USED.
0025EYYC20 00 00 00 REQUIRED STARTUP OPTION MISSING: |.
0026IYYC08X02 00 00 PRODID | MACRO FAILED. R15 = |
0027I YC08X02 00 00 PRODID | MACRO FAILED. R15 = |
0028EYY 00 00 00 00 PRODUCT KEY SUPPLIED IS ONLY VALID WITH IPV6/VSE
0030I YC08C08C06X08 PHASE | | |LOADED AT |.
0031I YC08X08X08 00 | BUFFER ALLOCATED FROM | TO |.
0032I YC08X08X08 00 | BUFFER FREED FROM | TO |.
0040I YC12X04H02H03 POWER DEFINE: |,|,|,| (NAME,KEY,OCCURANCES,LENGTH)
0050EYY 00 00 00 00 ERROR LOADING SYSTEM FCBS.
0051EYY 00 00 00 00 ERROR LOADING SYSTEM FONTDEFS.
0052EYY 00 00 00 00 ERROR LOADING SYSTEM COLORDEFS.
0053EYY 00 00 00 00 ERROR LOADING SYSTEM PAGEDEFS.
0054EYY 00 00 00 00 ERROR LOADING SYSTEM JSEPDEFS.
0100IY C08 00 00 00 DEVICE | WAITING FOR PSTART COMMAND.
0101IY C08 00 00 00 DEVICE | WAITING FOR WORK.
0102IYYC08 00 00 00 | DEVICE PROCESS ENDING.
0103EYY 00 00 00 00 PROCESSING ERROR. OUTPUT ABORTED.
0104IYY 00 00 00 00 VSE/POWER IS CURRENTLY BEING SHUTDOWN.
0105I YC04 00 00 00 VSE2PDF STARTING CLASS(S): |
0106I YC64 00 00 00 VSE2PDF STARTING DESTINATION(S): |
0107IYY 00 00 00 00 JOB ACCOUNTING NOT AVAILABLE WITHIN SUPERVISOR.
0108IYY 00 00 00 00 JOB ACCOUNTING AREA FULL. INFORMATION LOST.
0109IYY 00 00 00 00 POWER JOB ACCOUNTING NOT SUPPORTED.
0110IYYC08C05 00 00 JNM=| JNO=| LEFT IN QUEUE WITH A DISP=Y SETTING.
0111IYYC08C05 00 00 JNM=| JNO=| FLUSHED.
0113WSYC08C05 00 00 JNM=| JNO=| LEFT IN QUEUE WITH A DISP=Y SETTING.
0112I YC08C05 00 00 JNM=| JNO=| PROCESSING COMPLETE.
0114EYYF08F08 00 00 ONLY | GOOD SEGMENTS PRODUCED. RESTART PAGES = |.
0120EYY 00 00 00 00 DMF NOT AVAILABLE. SMF DATA LOST.
0121EYYX02 00 00 00 DMF WRITE FAILURE. SMF DATA LOST. RC |.
0122IYYX02 00 00 00 DMF NOT LOGGING | TYPE RECORDS.
0123EYY 00 00 00 00 DMF LOGS FULL. SMF DATA LOST.
0124EYY 00 00 00 00 OS390 EXEC CARD OPTION REQUIRED FOR SMF RECORDING.
0125IYY 00 00 00 00 DMF COMMUNICATIONS RE-ESTABLISHED. LOGGING STARTED.
FFFFFF XXX
*
MTABLE DSECT
*