IBM Crypto Education Community

  • 1.  Create compiler for cobol job

    Posted Tue July 30, 2024 08:15 AM

    CSNBKRD unresolved member couldn't be included from the designated call library



    ------------------------------
    Morteza Moradi
    ------------------------------


  • 2.  RE: Create compiler for cobol job

    Posted Tue July 30, 2024 08:43 AM

    This sounds like a binder error. You would first compile the code and then bind it with the called services.

    Could you provide what your compile job and link/bind job look like?



    ------------------------------
    Eric Rossman
    ------------------------------



  • 3.  RE: Create compiler for cobol job

    Posted Tue July 30, 2024 09:53 AM

    **************************
    IDENTIFICATION DIVISION.
    ***************************
    PROGRAM-ID. COBOLXMP.
    *****************************
    ENVIRONMENT DIVISION.
    *****************************************************************
    CONFIGURATION SECTION.
    SOURCE-COMPUTER. IBM-370.
    OBJECT-COMPUTER. IBM-370.
    *****************************
    DATA DIVISION.
    *****************************************************************
    FILE SECTION.
    WORKING-STORAGE SECTION.
    77 INPUT-TEXT PIC X(24)
    VALUE 'ABCDEFGHIJKLMN0987654321'.
    77 OUTPUT-TEXT PIC X(24)
    VALUE LOW-VALUES.
    77 COMPARE-TEXT PIC X(24)
    VALUE LOW-VALUES.
    77 CIPHER-PROCESSING-RULE PIC X(08)
    VALUE 'CUSP '.
    77 KEY-FORM PIC X(08)
    VALUE 'OP '.
    77 KEY-LENGTH PIC X(08)
    VALUE 'SINGLE '.
    77 KEY-TYPE-1 PIC X(08)
    VALUE 'DATA '.
    77 KEY-TYPE-2 PIC X(08)
    VALUE ' '.
    77 ICV PIC X(08)
    VALUE LOW-VALUES.
    77 PAD PIC X(01)
    VALUE LOW-VALUES.
    ************* DEFINE SAPI INPUT/OUTPUT PARAMETERS ************
    01 SAPI-REC.
    05 RETURN-CODE-S PIC 9(08) COMP.
    05 REASON-CODE-S PIC 9(08) COMP.
    05 EXIT-DATA-LENGTH-S PIC 9(08) COMP.
    05 EXIT-DATA-S PIC X(04).
    05 KEK-KEY-ID-1-S PIC X(64)
    VALUE LOW-VALUES.
    05 KEK-KEY-ID-2-S PIC X(64)
    VALUE LOW-VALUES.
    05 DATA-KEY-ID-S PIC X(64)
    VALUE LOW-VALUES.
    05 NULL-KEY-ID-S PIC X(64)
    VALUE LOW-VALUES.
    05 KEY-FORM-S PIC X(08).
    05 KEY-LENGTH-S PIC X(08).
    05 DATA-KEY-TYPE-S PIC X(08).
    05 NULL-KEY-TYPE-S PIC X(08).
    05 TEXT-LENGTH-S PIC 9(08) COMP.
    05 TEXT-S PIC X(24).
    05 ICV-S PIC X(08).
    05 PAD-S PIC X(01).
    05 CPHR-TEXT-S PIC X(24).
    05 COMP-TEXT-S PIC X(24).
    05 RULE-ARRAY-COUNT-S PIC 9(08) COMP.
    05 RULE-ARRAY-S.
    10 RULE-ARRAY PIC X(08).
    05 CHAINING-VECTOR-S PIC X(18).
    *****************************************************************
    PROCEDURE DIVISION. 

    *****************************************************************
    MAIN-RTN.
    ************* CALL KEY GENERATE ***************************
    MOVE 0 TO EXIT-DATA-LENGTH-S.
    MOVE KEY-FORM TO KEY-FORM-S.
    MOVE KEY-LENGTH TO KEY-LENGTH-S.
    MOVE KEY-TYPE-1 TO DATA-KEY-TYPE-S.
    MOVE KEY-TYPE-2 TO NULL-KEY-TYPE-S.
    CALL 'CSNBKGN' USING RETURN-CODE-S
    REASON-CODE-S
    EXIT-DATA-LENGTH-S
    EXIT-DATA-S
    KEY-FORM-S
    KEY-LENGTH-S
    DATA-KEY-TYPE-S
    NULL-KEY-TYPE-S
    KEK-KEY-ID-1-S
    KEK-KEY-ID-2-S
    DATA-KEY-ID-S
    NULL-KEY-ID-S.
    IF RETURN-CODE-S NOT = 0 OR
    REASON-CODE-S NOT = 0 THEN
    DISPLAY '*** KEY-GENERATE ***'
    DISPLAY '*** RETURN-CODE = ' RETURN-CODE-S
    DISPLAY '*** REASON-CODE = ' REASON-CODE-S
    ELSE
    MOVE 24 TO TEXT-LENGTH-S
    MOVE INPUT-TEXT TO TEXT-S
    MOVE 1 TO RULE-ARRAY-COUNT-S
    MOVE CIPHER-PROCESSING-RULE TO RULE-ARRAY-S
    MOVE LOW-VALUES TO CHAINING-VECTOR-S
    MOVE ICV TO ICV-S.
    MOVE PAD TO PAD-S.
    ************* CALL ENCIPHER ************************************
    CALL 'CSNBENC' USING RETURN-CODE-S
    REASON-CODE-S
    EXIT-DATA-LENGTH-S
    EXIT-DATA-S
    DATA-KEY-ID-S
    TEXT-LENGTH-S
    TEXT-S
    ICV-S
    RULE-ARRAY-COUNT-S
    RULE-ARRAY-S
    PAD-S
    CHAINING-VECTOR-S
    CPHR-TEXT-S
    IF RETURN-CODE-S NOT = 0 OR
    REASON-CODE-S NOT = 0 THEN
    DISPLAY '*** ENCIPHER ***'
    DISPLAY '*** RETURN-CODE = ' RETURN-CODE-S
    DISPLAY '*** REASON-CODE = ' REASON-CODE-S
    ELSE
    ************* CALL DECIPHER ************************************
    CALL 'CSNBDEC' USING RETURN-CODE-S
    REASON-CODE-S
    EXIT-DATA-LENGTH-S
    EXIT-DATA-S
    DATA-KEY-ID-S
    TEXT-LENGTH-S
    CPHR-TEXT-S
    ICV-S
    RULE-ARRAY-COUNT-S
    RULE-ARRAY-S
    CHAINING-VECTOR-S
    COMP-TEXT-S
    IF RETURN-CODE-S NOT = 0 OR

    REASON-CODE-S NOT = 0 THEN
    DISPLAY '*** DECIPHER ***'
    DISPLAY '*** RETURN-CODE = ' RETURN-CODE-S
    DISPLAY '*** REASON-CODE = ' REASON-CODE-S
    ELSE
    IF COMP-TEXT-S = TEXT-S THEN
    DISPLAY '*** DECIPHERED TEXT = PLAIN TEXT ***'
    ELSE
    DISPLAY '*** DECIPHERED TEXT ê= PLAIN TEXT ***'.
    DISPLAY '*** TEST PROGRAM ENDED ***'
    STOP RUN.

    this code i found it but Idon't know how can i write compiler

    ===================================================================================

    //JOBLIB  DD  DISP=SHR,DSN=DSNB10.SDSNEXIT                  
    //        DD  DISP=SHR,DSN=DSNB10.SDSNLOAD                  
    //        DD  DISP=SHR,DSN=CEE.SCEERUN                      
    //PH02CS03 EXEC DSNHICOB,MEM=TST1,                          
    //         COND=(4,LT),                                     
    //         PARM.PC=('HOST(IBMCOB)',APOST,APOSTTST1,SOURCE,  
    //         NOXREF,'TST1(DB2)','DEC(31)'),                   
    //         PARM.COB=(NOSEQUENCE,QUOTE,RENT,                 
    //         'PGMNAME(LONGUPPER)','ARITH(EXTEND),LIB')        
    //PC.DBRMLIB   DD DSN=ETL.DSND.DBRMLIB.DATA(TST1),          
    //             DISP=SHR                                     
    //PC.SYSLIB    DD DSN=ETL.DSND.SRCLIB.DATA,                 
    //             DISP=SHR                                     
    //PC.SYSIN     DD DSN=DBA.JCL(TST1),      * its my cobol source code                  
    //             DISP=SHR                                     
    //LKED.SYSLMOD DD DSN=ETL.DSND.RUNLIB.LOAD(TST1),           
    //             DISP=SHR                                     
    //LKED.RUNLIB DD DSN=ETL.DSND.RUNLIB.LOAD,                  
    //             DISP=SHR                                     
    //LKED.SYSIN   DD *                                         
         INCLUDE SYSLIB(DSNELI) 

    =========================================================================================

    and i find this job

    //LKEDENC JOB
    //*-----------------------------------------------------------------*
    //* *
    //* The JCL links the ICSF encipher callable service, CSNBENC, *
    //* into an application called ENCIPHER. *
    //* *
    //*-----------------------------------------------------------------*
    //LINK EXEC PGM=IEWL,
    // PARM='XREF,LIST,LET'
    //SYSPRINT DD SYSOUT=*
    //SYSLIB DD DSN=CSF.SCSFSTUB,DISP=SHR * SERVICES ARE IN HERE
    //SYSLMOD DD DSN=MYAPPL.LOAD,DISP=SHR * MY APPLICATION LIBRARY
    //SYSLIN DD DSN=MYAPPL.ENCIPHER.OBJ,DISP=SHR * MY ENCIPHER PROGRAM
    // DD *
    ENTRY ENCIPHER
    NAME ENCIPHER(R)
    /*

    How Can I convert this two jcl jobs? and create my compiler? I am so confused to compile that code.  I dont know what is MYAPPL.LOAD and MYAPPL.ENCIPHER.OBJ.



    ------------------------------
    Morteza Moradi
    ------------------------------



  • 4.  RE: Create compiler for cobol job

    Posted Tue July 30, 2024 10:23 AM
    Edited by Eric Rossman Tue July 30, 2024 10:22 AM
    OK, I understand your confusion. I went and found some helpful information for you.
     
    On z/OS, there are several steps to building an executable.
     
    Let's assume that your user ID on z/OS is MORTEZA and you are trying to build an executable named CALLFLE
     
    You have a source code data set, for example MORTEZA.COBOL.SRC is a PDS (or PDSE) which is FB 80 and there is a single member called CALLFLE containing code to call CSNBFLE
     
    You would compile that and the object code would go to the object data set (which you can let the job define for you).
     
    Then, you would link/bind that object with the callable service stub(s) into an executable in a load library, for example MORTEZA.COBOL.LOADLIB is a PDS or PDSE and is U0 with whatever block size defaults (could be 6144, as an example).
     
    The only thing you might need help finding is the name of the ICSF callable services stubs data set. The default is usually one of these three:
    SYS1.SCSFSTUB
    SYS1.CSF.SCSFSTUB
    CSF.SCSFSTUB
    In this sample:
    COBOL.SYSIN   defines where the COBOL source code comes from
    LKED.SCSFSTUB defines where the ICSF callable service stubs come from
    LKED.SYSLMOD  defines where the output executable is stored
    LKED.SYSIN    defines any extra objects/stubs to be included and the name of the executable you are creating.
     
    //PGMINJCL JOB 'COBOL PGM IN JCL',CLASS=A,
    //             MSGLEVEL=(1,1),MSGCLASS=X
    //*********************************************************************
    //* THIS STEP COMPILES AND LINKS A COBOL PROGRAM                      *
    //*********************************************************************
    //STEP05   EXEC IGYWCL
    //SYSPRINT DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //COBOL.SYSIN DD DISP=OLD,DSN=MORTEZA.COBOL.SRC(CALLFLE)
    //LKED.SCSFSTUB DD DISP=SHR,DSN=SYS1.CSF.SCSFSTUB
    //LKED.SYSLMOD  DD DISP=OLD,DSN=MORTEZA.COBOL.LOADLIB
    //LKED.SYSIN DD *
      INCLUDE SCSFSTUB(CSNBFLE)
      NAME CALLFLE
    /*


    ------------------------------
    Eric Rossman
    ------------------------------



  • 5.  RE: Create compiler for cobol job

    Posted Tue July 30, 2024 01:12 PM

    Thank you for you're response I use this code:

    //PGMINJCL JOB 'COBOL PGM IN JCL',CLASS=A,                
    //             MSGLEVEL=(1,1),MSGCLASS=X                  
    //********************************************************
    //* THIS STEP COMPILES AND LINKS A COBOL PROGRAM          
    //********************************************************
    //STEP05   EXEC IGYWCL                                    
    //SYSPRINT DD SYSOUT=*                                    
    //SYSOUT   DD SYSOUT=*                                    
    //COBOL.SYSIN DD DISP=OLD,DSN=DBA.JCL(TST1)               
    //LKED.SCSFSTUB DD DISP=SHR,DSN=CSF.SCSFMOD0              
    //LKED.SYSLMOD  DD DISP=OLD,DSN=ETL.DSNP.RUNLIB.LOAD(TST1)
    //LKED.SYSIN DD *                                         
      INCLUDE SCSFMOD0(CSNBKGN)                               
      NAME TST1                                               
    /* 

    I get this Error:

     STMT NO. MESSAGE                                                              
            2 IEFC001I PROCEDURE IGYWCL WAS EXPANDED USING SYSTEM LIBRARY CPAC.PROCLIB
    ICH70001I MORADI   LAST ACCESS AT 19:02:29 ON TUESDAY, JULY 30, 2024           
    IEFA107I PGMINJCL COBOL STEP05 STEPLIB - DATA SET IGY.V5R1M0.SIGYCOMP NOT FOUND
    IEF272I PGMINJCL COBOL STEP05 - STEP WAS NOT EXECUTED.   

    what PGM I will use?



    ------------------------------
    Morteza Moradi
    ------------------------------



  • 6.  RE: Create compiler for cobol job

    Posted Tue July 30, 2024 02:01 PM

    That will depend on your system. You will need to talk to whoever maintains your machine to find out where the COBOL compiler is.



    ------------------------------
    Eric Rossman
    ------------------------------