IBM Z and LinuxONE Software

Software

Software

In order to compete you have to be trusted. System software delivers high-performing system and database management, faster insights, secure cloud and agile DevOps, plus the reliability, flexibility and protection you expect from the mainframe.

 View Only
  • 1.  SORT

    Posted Fri November 15, 2024 09:38 PM

    Hi,

    In comparing the load module sizes, it looks like the collating sequence does not always work.

    I used TRAN=UNHEX option and then performed a compare and it seems to work properly.

    In converting the UNHEX, which I think created a 4-byte field, an additional zero is being added to the end of the value.

    Please let me know if there is way to get rid of the additional zero.

    Thank you very much.



    ------------------------------
    Girish Sajja
    ------------------------------


  • 2.  RE: SORT

    Posted Mon November 18, 2024 03:47 AM

    >In comparing the load module sizes, it looks like the collating sequence does not always work.

    Girish,

    Conflicting information.  You say you are comparing LOAD modules SIZES and how does Collatin sequence come into picture?  Are you sorting the 3.4 listing of load module pds?

    >>In converting the UNHEX, which I think created a 4-byte field, an additional zero is being added to the end of the value.

    I highly doubt that UNHEX is creating an additional zeros if you are converting a 4 byte or 8 byte. 

    We would like to see the control cards. please show us the complete job and a sample of what you think is an additional zero 



    ------------------------------
    Sri Hari Kolusu
    ------------------------------



  • 3.  RE: SORT

    Posted Mon November 18, 2024 10:56 AM

    Hi,

    The following is the job:

    //@BTLDCGS JOB (BTT),'LOAD MODULE COMPARE ',MSGCLASS=T,CLASS=4,
    //         NOTIFY=&SYSUID
    //*
    //SETDSNS  SET DSN1=DVPNV.#1.PROD.POLOADBT,DSN1HLQ=DVPNV,
    //             DSN2=TSTBT.U2A9.CICSLOAD,DSN2HLQ=TSTBT
    //*
    //JS010    EXEC PGM=FMNMAIN
    //IDIOFF   DD DUMMY
    //FMNCOB   DD DUMMY
    //SYSPRINT DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //SYSTERM  DD SYSOUT=*
    //FMNROPT  DD SYSOUT=*
    //FMNRPRM  DD SYSOUT=*
    //FMNRPRC  DD SYSOUT=*
    //DDIN     DD DSN=&DSN1,
    //            DISP=SHR
    //*MNREPT  DD DSN=TSTBT.TEMP.LOADMOD1,
    //*           DISP=(,CATLG),
    //*           SPACE=(TRK,(255,15),RLSE),
    //*           DATACLAS=COMPZEDC,
    //*           MGMTCLAS=TTEMP
    //FMNREPT  DD DSN=&&FMNREPT1,
    //            DISP=(,PASS),
    //            SPACE=(TRK,(255,15),RLSE)
    //FMNRSUM  DD SYSOUT=*
    //SYSIN    DD *
    $$FILEM VLM ,
    $$FILEM DATEFORM=YYMMDD,XLABEL=YES,SUMMARY=YES
    /*
    //*
    //*
    //JS020    EXEC PGM=FMNMAIN
    //IDIOFF   DD DUMMY
    //FMNCOB   DD DUMMY
    //SYSPRINT DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //SYSTERM  DD SYSOUT=*
    //FMNROPT  DD SYSOUT=*
    //FMNRPRM  DD SYSOUT=*
    //FMNRPRC  DD SYSOUT=*
    //DDIN     DD DSN=&DSN2,
    //            DISP=SHR
    //*MNREPT  DD DSN=TSTBT.TEMP.LOADMOD2,
    //*           DISP=(,CATLG),
    //*           SPACE=(TRK,(255,15),RLSE),
    //*           DATACLAS=COMPZEDC,
    //*           MGMTCLAS=TTEMP
    //FMNREPT  DD DSN=&&FMNREPT2,
    //            DISP=(,PASS),
    //            SPACE=(TRK,(255,15),RLSE)
    //FMNRSUM  DD SYSOUT=*
    //SYSIN    DD *
    $$FILEM VLM ,
    $$FILEM DATEFORM=YYMMDD,XLABEL=YES,SUMMARY=YES
    /*
    //JS030    EXEC PGM=ICETOOL,
    //             PARM=('JP0"&DSN1HLQ"','JP1"&DSN2HLQ"')
    //SYMNOUT  DD SYSOUT=*
    //TOOLMSG  DD SYSOUT=*
    //DFSMSG   DD SYSOUT=*
    //JNF1JMSG DD SYSOUT=*
    //JNF2JMSG DD SYSOUT=*
    //FMNREPT1 DD DSN=*.JS010.FMNREPT,
    //            DISP=OLD
    //FMNREPT2 DD DSN=*.JS020.FMNREPT,
    //            DISP=OLD
    //REFMT1   DD DSN=&&REFMT1,
    //            DISP=(,),
    //            RECFM=VB,
    //            SPACE=(TRK,(255,15))
    //REFMT2   DD DSN=&&REFMT2,
    //            DISP=(,),
    //            RECFM=VB,
    //            SPACE=(TRK,(255,15))
    //*EFMTO1  DD SYSOUT=*,RECFM=V
    //REFMTO1  DD DSN=&&REFMTO1,
    //            DISP=(,),
    //            RECFM=VB,
    //            SPACE=(TRK,(255,15))
    //*EFMTO2  DD SYSOUT=*,RECFM=V
    //REFMTO2  DD DSN=&&REFMTO2,
    //            DISP=(,),
    //            RECFM=VB,
    //            SPACE=(TRK,(255,15))
    //*EFMTO3  DD SYSOUT=*,RECFM=V
    //REFMTO3  DD DSN=&&REFMTO3,
    //            DISP=(,),
    //            RECFM=VB,
    //            SPACE=(TRK,(255,15))
    //*EFMTO4  DD SYSOUT=*,RECFM=V
    //REFMTO4  DD DSN=&&REFMTO4,
    //            DISP=(,),
    //            RECFM=VB,
    //            SPACE=(TRK,(255,15))
    //*EFMTO5  DD SYSOUT=*
    //REFMTO5  DD DSN=&&REFMTO5,
    //            DISP=(,),
    //            SPACE=(TRK,(255,15))
    //DUPLICAT DD SYSOUT=* RECFM=V
    //NOTFND   DD SYSOUT=* RECFM=V
    //NOTFNDF2 DD SYSOUT=* RECFM=V
    //REFMTO6  DD SYSOUT=*
    //TOOLIN   DD  *
      COPY    FROM(FMNREPT1) TO(REFMT1)        USING(INPT)

      COPY    FROM(FMNREPT2) TO(REFMT2)        USING(INPT)

      COPY    FROM(REFMT1)   TO(REFMTO1)       USING(REFM)

      COPY    FROM(REFMT2)   TO(REFMTO2)       USING(REF2)

      SPLICE FROM(REFMTO1) WITHANY       -
             ON(84,6,ZD)                 - ID
             WITH(49,8)                  - LOAD MODULE
             WITH(57,20)                 - DATE/TIME
             WITH(77,7)                  - LOAD MOD SIZE (HEX)
        TO(REFMTO3)

      SPLICE FROM(REFMTO2) WITHANY       -
             ON(84,6,ZD)                 - ID
             WITH(49,8)                  - LOAD MODULE
             WITH(57,20)                 - DATE/TIME
             WITH(77,7)                  - LOAD MOD SIZE (HEX)
        TO(REFMTO4)

      COPY  JKFROM                            USING(OUTP)

      COPY    FROM(REFMTO5)  TO(REFMTO6)      USING(REF5)
    /*
    //*
    //INPTCNTL DD  *
      INCLUDE COND=(8,12,CH,EQ,C'Load Library',OR,
                    8,12,CH,EQ,C'Load Module ',OR,
                    13,10,CH,EQ,C'Linked on ',OR,
                    30,5,CH,EQ,C'Size ')
      INREC IFOUTLEN=89,
            IFTHEN=(WHEN=(8,12,CH,EQ,C'Load Library'),
             PARSE=(%00=(ABSPOS=23,ENDBEFR=C' ',FIXLEN=44)),
             BUILD=(1,4,%00)),
            IFTHEN=(WHEN=(8,12,CH,EQ,C'Load Module '),
             PARSE=(%01=(ABSPOS=23,ENDBEFR=C' ',FIXLEN=8)),
             BUILD=(1,4,44X,%01)),
            IFTHEN=(WHEN=(13,10,CH,EQ,C'Linked on '),
             PARSE=(%02=(ABSPOS=23,ENDBEFR=C' by ',FIXLEN=20)),
             BUILD=(1,4,52X,%02)),
            IFTHEN=(WHEN=(30,5,CH,EQ,C'Size '),
             PARSE=(%03=(ABSPOS=35,ENDBEFR=C' ',FIXLEN=7)),
             BUILD=(1,4,72X,%03))
      OPTION COPY,VLSCMP
    /*
    //*
    //REFMCNTL DD  *
      OUTREC IFTHEN=(WHEN=GROUP,
        BEGIN=(5,5,CH,EQ,JP0),
        PUSH=(84:ID=6))
    /*
    //*
    //REF2CNTL DD  *
      OUTREC IFTHEN=(WHEN=GROUP,
        BEGIN=(5,5,CH,EQ,JP1),
        PUSH=(84:ID=6))
    /*
    //*
    //OUTPCNTL DD  *
      JOIN UNPAIRED,F2
      JOINKEYS F1=REFMTO3,FIELDS=(49,8,A)
      JOINKEYS F2=REFMTO4,FIELDS=(49,8,A)
      REFORMAT FIELDS=(F1:1,89,F2:1,89,?)
      OPTION COPY
      OUTFIL VTOF,FNAMES=DUPLICAT,
             INCLUDE=(179,1,CH,EQ,C'B'),
             BUILD=(5,44,X,49,8,X,57,8,X,69,8,X,77,7,/,
                   94,44,X,138,8,X,146,8,X,158,8,X,166,7,/)
      OUTFIL VTOF,FNAMES=REFMTO5,
             INCLUDE=(179,1,CH,EQ,C'B'),
             BUILD=(5,44,X,49,8,X,57,8,X,69,8,X,77,7,TRAN=UNHEX,X,
                   94,44,X,138,8,X,146,8,X,158,8,X,166,7,TRAN=UNHEX)
      OUTFIL VTOF,FNAMES=NOTFND,
             INCLUDE=(179,1,CH,EQ,C'1'),
             BUILD=(5,44,X,49,8,X,57,8,X,69,8,X,77,7,/)
      OUTFIL VTOF,FNAMES=NOTFNDF2,
             INCLUDE=(179,1,CH,EQ,C'2'),
             BUILD=(94,44,X,138,8,X,146,8,X,158,8,X,166,7,/)
    /*
    //*
    //REF5CNTL DD  *
      INCLUDE COND=((46,8,CH,EQ,123,8,CH),AND,  Program
                  ((55,8,CH,GE,132,8,CH),OR,    Create Date
                   (73,4,BI,GE,150,4,BI)))      Module Size
      OUTFIL BUILD=(1,72,73,4,TRAN=HEX,/,78,72,150,4,TRAN=HEX,/)
    /*
    //*

    The following is the output to REFMT06:

    DVPNV.#1.PROD.POLOADBT                       BTOAPPTR 23/10/30 10:08:05 0032BD00
    TSTBT.U2A9.CICSLOAD                          BTOAPPTR 24/09/26 12:47:49 00329980

    DVPNV.#1.PROD.POLOADBT                       BTOAPRRS 24/09/13 09:57:43 002F4E80
    TSTBT.U2A9.CICSLOAD                          BTOAPRRS 24/10/28 13:17:56 002F1F00

    DVPNV.#1.PROD.POLOADBT                       BTOLOGMP 24/04/03 16:50:53 00051200
    TSTBT.U2A9.CICSLOAD                          BTOLOGMP 24/10/25 11:18:11 00050100

    DVPNV.#1.PROD.POLOADBT                       BTOMQCDP 24/07/01 15:02:24 000A9440
    TSTBT.U2A9.CICSLOAD                          BTOMQCDP 24/08/21 05:55:39 000A93C0

    DVPNV.#1.PROD.POLOADBT                       BTOMSICI 24/09/13 09:59:07 000789C0
    TSTBT.U2A9.CICSLOAD                          BTOMSICI 24/10/17 09:49:51 000789C0

    Thank you.



    ------------------------------
    Girish Sajja
    ------------------------------



  • 4.  RE: SORT

    Posted Tue November 19, 2024 01:24 AM

    Girish,

    The reason you are getting an additional zero is because you are Unhex'ing an ODD number of digits ( 7 bytes in this case)  and the documentation clearly explains that under TRAN=UNHEX 

    Search for =UNHEX on this page https://www.ibm.com/docs/en/zos/3.1.0?topic=statements-outfil-control and you will find this 

    m can be 1 to 32752. The output length will be (m+1)/2 bytes.
    If m is odd, the last nibble will be 0. As an example, C'C1F1F' would translate to X'C1F1F0' (C'A10').

    That is the reason as to why you are getting incorrect decimal values for the size.

    Anywho as I mentioned earlier, you don't need 8 passes of data as it can ALL be done in a single pass of Joinkeys

    so your JCL should just have 

    1. File manager step1
    2. File manager step2
    3. Joinkeys step which is shown below (wrote this on the fly and untested)

    //***************************************************************               
    //* Compare the load modules using DFSORT joinkeys              *               
    //***************************************************************               
    //CMPLMODS EXEC PGM=SORT                                                        
    //SYSOUT   DD SYSOUT=*                                                          
    //SYMNOUT  DD SYSOUT=*                                                          
    //SYMNAMES DD *                                                                 
    ** Temp-record layout for each file                                             
    POSITION,200                                                                    
    TREC-BEGIN,*                                                                    
    TLDSN,=,44,CH             # Dataset name                                        
    SKIP,1                                                                          
    TLMOD,*,08,CH             # Load module name                                    
    SKIP,1                                                                          
    TLNKD,*,20,CH             # Link date (yyyymmdd at hh:mm:ss)                    
    SKIP,1                                                                          
    TSIZE,*,08,CH             # Size of Load module                                 
     TSIZE1,=,01,CH           # first byte                                          
     TSIZE2,*,07,CH           # seven bytes of size                                 
    SKIP,1                                                                          
    TMTIN,*,01,CH             # match record indicator                              
    SKIP,1                                                                          
    TREC-END,86               # Total lengths including skip                        
    ** JNF1/JNF2 Record layout                                                      
    RDW,01,04,BI                                                                    
    JREC-BEGIN,*                                                                    
    JDSN,*,44,CH              # Dataset name                                        
    SKIP,1                                                                          
    JLMOD,*,08,CH             # Load module name                                    
    SKIP,1                                                                          
    JLNKD,*,20,CH             # Link date (yyyymmdd at hh:mm:ss)                    
    SKIP,1                                                                          
    JSIZE,*,08,CH             # Size of Load module                                 
    SKIP,1                                                                          
    JMTIN,*,01,CH             # match record indicator                              
    SKIP,1                                                                          
    JREC-END,86               # Total lengths including skip                        
    ** Matched record layout                                                        
    POSITION,1                                                                      
    M1DSN,*,44,CH             # Dataset name                                        
    SKIP,1                                                                          
    M1LMOD,*,08,CH            # Load module name                                    
    SKIP,1                                                                          
    M1LNKD,*,20,CH            # Link date (yy/mm/dd at hh:mm:ss)                    
    M1LCRDT,=,08,UFF          # date                                                
    M1Ltime,*,12,CH           # time                                                
    SKIP,1                                                                          
    M1SIZE,*,08,CH            # Size of Load module                                 
    SKIP,1                                                                          
    M1MTIN,*,01,CH            # match record indicator                              
    SKIP,1                                                                          
    M2DSN,*,44,CH             # Dataset name                                        
    SKIP,1                                                                          
    M2LMOD,*,08,CH            # Load module name                                    
    SKIP,1                                                                          
    M2LNKD,*,20,CH            # Link date (yyyymmdd at hh:mm:ss)                    
    M2LCRDT,=,08,UFF          # date                                                
    M2Ltime,*,12,CH           # time                                                
    SKIP,1                                                                          
    M2SIZE,*,08,CH            # Size of Load module                                 
    SKIP,1                                                                          
    M2MTIN,*,01,CH            # match record indicator                              
    SKIP,1                                                                          
    JFMIND,*,01,CH            # Joinkeys match indicator                            
    ** another temp area layout to convert size                                     
    POSITION,200                                                                    
    JTSIZE1,*,04,BI                                                                 
    SKIP,1                                                                          
    JTSZRD1,*,09,UFF                                                                
    SKIP,1                                                                          
    JTSIZE2,*,04,BI                                                                 
    SKIP,1                                                                          
    JTSZRD2,*,09,UFF                                                                
    SKIP,1                                                                          
    JCRDAT1,*,06,Y2T          # File-1 create date as yy/mm/dd                      
    SKIP,1                                                                          
    JCRGDT1,*,08,Y4T          # File-1 Create date in Greogorian format             
    SKIP,1                                                                          
    JCRDAT2,*,06,Y2T          # File-2 Create date as yy/mm/dd                      
    SKIP,1                                                                          
    JCRGDT2,*,08,Y4T          # File-2 Create date in Greogorian format             
    SKIP,1                                                                          
    //INA      DD DISP=(OLD,PASS),DSN=&&FMNREPT1                                    
    //INB      DD DISP=(OLD,PASS),DSN=&&FMNREPT2                                    
    //DUPLICAT DD SYSOUT=*                                                          
    //ONLYF1   DD SYSOUT=*                                                          
    //ONLYF2   DD SYSOUT=*                                                          
    //LMODRPT  DD SYSOUT=*                                                          
    //SYSIN    DD *                                                                 
      OPTION COPY                                                                   
      JOINKEYS F1=INA,FIELDS=(JLMOD,A,JMTIN,A)                                      
      JOINKEYS F2=INB,FIELDS=(JLMOD,A,JMTIN,A)                                      
      JOIN UNPAIRED                                                                 
      REFORMAT FIELDS=(F1:JREC-BEGIN,JREC-END,                                      
                       F2:JREC-BEGIN,JREC-END,                                      
                       ?)                                                           
                                                                                    
      OMIT COND=(M1MTIN,SS,EQ,C'A,B,C',OR,                                          
                 M2MTIN,SS,EQ,C'E,F,G')                                             
                                                                                    
      INREC OVERLAY=(JTSIZE1:M1SIZE,TRAN=UNHEX,                                     
                     JTSZRD1:JTSIZE1,BI,M10,LENGTH=9,                               
                                                                                    
                     JTSIZE2:M2SIZE,TRAN=UNHEX,                                     
                     JTSZRD2:JTSIZE2,BI,M10,LENGTH=9,                               
                                                                                    
                     JCRDAT1:M1LCRDT,M10,LENGTH=6,                                  
                     JCRGDT1:JCRDAT1,TOGREG=Y4T,                                    
                                                                                    
                     JCRDAT2:M2LCRDT,M10,LENGTH=6,                                  
                     JCRGDT2:JCRDAT2,TOGREG=Y4T)                                    
                                                                                    
      OUTFIL FNAMES=DUPLICAT,                                                       
      INCLUDE=(JFMIND,EQ,C'B'),                                                     
        BUILD=(01,84,JTSZRD1,/,                                                     
               87,84,JTSZRD2)                                                       
                                                                                    
      OUTFIL FNAMES=DUPLICAT,                                                       
      INCLUDE=(JFMIND,EQ,C'B'),                                                     
        BUILD=(01,84,JTSZRD1,/,                                                     
               87,84,JTSZRD2)                                                       
                                                                                    
      OUTFIL FNAMES=ONLYF1,                                                         
      INCLUDE=(JFMIND,EQ,C'1'),                                                     
        BUILD=(01,84,JTSZRD1)                                                       
                                                                                    
      OUTFIL FNAMES=ONLYF2,                                                         
      INCLUDE=(JFMIND,EQ,C'2'),                                                     
        BUILD=(87,84,JTSZRD2)                                                       
                                                                                    
      OUTFIL FNAMES=LMODRPT,                                                        
      INCLUDE=(JFMIND,EQ,C'B',AND,                # in both file                    
              (M1LMOD,EQ,M2LMOD),AND,             # Program                         
              (JCRGDT1,CH,GE,JCRGDT2,CH),AND,     # Create date                     
              (JTSZRD1,GE,JTSZRD2)),              # Module size                     
        BUILD=(01,84,JTSZRD1,/,                                                     
               87,84,JTSZRD2)                                                       
    /*                                                                              


    PS:  File manager has the ability to compare Load module (look up CLM function)



    ------------------------------
    Sri Hari Kolusu
    ------------------------------