I am not a sysprog, and I don't often write assembler (and when I do I've often forgotten many things I once knew). I'm wondering if someone might take a look at a little assembler routine I wrote to load a 'data only assembler table' and retrieve its length as well. It will be called with something like this: identification division. program-id. sizetst. data division. working-storage section. 01 modsize pic s9(8) comp-5. 01 modname pic x(8). 01 rowcnt pic s9(9) comp-5. linkage section. 01 mytab. 05 myrow pic x(80) occurs unbounded depending on rowcnt indexed by rownbr. procedure division. move 'XML1V2K' to modname call 'MODLOAD' using modname modsize address of mytab compute rowcnt = modsize / 80 perform varying rownbr from 1 by 1 until rownbr > rowcnt display myrow(rownbr) end-perform goback. end program sizetst.
And here is the program: *PROCESS RENT SYSSTATE ARCHLVL=2 MODLOAD CEEENTRY MAIN=NO,AUTO=L'LOCALSTG DROP R11 WE DON'T NEED NO STINKIN' BASE REG! USING LOCALSTG,CEEDSA Auto stg and DSA use the same base LR R11,R1 SAVE ARG LIST ADDR IN R11 USING ARGS,R11 BLDLSIZE DS 0C CALL BLDL TO GET MODULE SIZE LHI IDX,0 R2 = INDEX TO ARG 1 L R10,ARG(IDX) USING MODNAME,R10 MVHHI BLDL_FF,1 NBR OF RESULT ENTRIES FOR BLDL MVHHI BLDL_LL,BLDLDELN LEN OF EACH BLDL ENTRY MVC PDS2NAME,MODNAME BLDL 0,BLDLAREA LTR R15,R15 CHECK RETURN CODE JNZ RETURN RETURN IF NOT ZERO AFI IDX,L'ARG INDEX NEXT ARG (ARG 2) L R10,ARG(IDX) USING MODSIZE,R10 MVI MODSIZE,0 INITIALIZE BYTE 1 MVC MODSIZE+1(3),PDS2STOR COPY 2-4 FROM PDS2STOR LOAD DS 0C CALL LOAD TO LOAD THE MODULE LA R4,PDS2NAME BLDL ENTRY FOR DE PARM AFI IDX,L'ARG INDEX NEXT ARG (ARG 3) L R5,ARG(IDX) LOADPT WILL BE STORED IN ARG 3 LOAD DE=(R4),LOADPT=(R5) NOW LOAD THE MODULE RETURN CEETERM RC=(R15),MODIFIER=(R0) DROP R11,R10 DROP R13 * PPA CEEPPA VER=1,REL=1,MOD=0 SERVICE=? CEEDSA , CEECAA , * ARGS DSECT , ARG LIST ARG DS 3A 3 ARGS * MOD_NAME DSECT , ARG #1 MODNAME DS CL8 * MOD_SIZE DSECT , ARG #2 MODSIZE DS F * @LOCALSTG DSECT , AUTOMATIC STORAGE WORK AREA ORG *+CEEDSASZ Leave space for the DSA fixed partBLDLAREA DS 0CL77 BLDL_FF DS H NUMBER OF ENTRIES BLDL_LL DS H NUMBER OF BYTES PER ENTRY IHAPDS DSECT=NO LOCALSTG EQU @LOCALSTG,*-@LOCALSTG,C'C'* BLDLDELN EQU L'BLDLAREA-L'BLDL_FF-L'BLDL_LL YREGS , IDX EQU R2 It works as designed. Any and all constructive comments are welcome!Thanks,Frank
