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

Reply via email to