      Process pgmname(longmixed),lib,thread NSYMBOL(NATIONAL)
      ******************************************************
      * THIS PROGRAM IS CALLED TO PROCESS RECORDS          *
      * PASSED TO THIS PROGRAM THAT WILL THEN CALL THE JAVA*
      * IOCE JAVA JAR.   DATA IS RETURNED                  *
      ******************************************************
       IDENTIFICATION DIVISION.
       PROGRAM-ID. "OCE240JV" RECURSIVE.
      ************************
      * ENV / DATA DIVISIONS *
      ************************
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       REPOSITORY.
           Class ZUtil   is "com.ibm.jzos.ZUtil"
           Class Base is "java.lang.Object"
           Class jstring is "jstring"
           Class MainframeApi is
               "gov/cms/oce/api/MainframeApi".
      ******************************************************
      * CLASS ZUTIL WAS ADDED TO REROUTE SYSOUT            *
      ******************************************************
       DATA DIVISION.
      ******************************************************
      * WORKING STORAGE                                    *
      ******************************************************
       WORKING-STORAGE SECTION.
       01  WS-Parm-String   object reference jstring.
       01  WS-Return-String object reference jstring.
       01  WS-Return-String-length object reference jstring.
       01  WS-length-field                   PIC S9(9) COMP-5.
       01  RC                                PIC S9(9) COMP-5.
       01  VOID                              PIC S9(9) COMP-5.
       01  DISP-IND                          PIC  X(1).
       01  WS-INTERFACE-AREA-1               PIC X(35011).
      *add 1 byte. 97821 instead of 97820
      *Required for the x'00' for newstringplatform
       01  WS-INTERFACE-AREA-2               PIC X(97821).
      ******************************************************
      ******************************************************
      * COMMUNICATION AREA                                 *
      ******************************************************
       LINKAGE SECTION.
       01  LNK-INTERFACE-AREA-1                  PIC X(35011).
       01  LNK-INTERFACE-AREA-2                  PIC X(97820).
       COPY JNI.
      ******************************************************
      * PROGRAM EXECUTION                                  *
      ******************************************************
       PROCEDURE DIVISION USING
                 LNK-INTERFACE-AREA-1
                 LNK-INTERFACE-AREA-2.
       0100-MAINLINE.
           SET ADDRESS OF JNIENV TO JNIENVPTR.
           SET ADDRESS OF JNINATIVEINTERFACE TO JNIENV.
           MOVE LNK-INTERFACE-AREA-1 TO WS-INTERFACE-AREA-1.
           MOVE LNK-INTERFACE-AREA-1 (811:1) TO DISP-IND.
           IF DISP-IND = '1' OR '9'
              MOVE 'Y' TO DISP-IND.
           IF DISP-IND = 'Y'
              DISPLAY "0100 COMPILE DATE 10/28/2022"
              DISPLAY "     COBOL PROGRAM OCE240JV ENTERED".
      ******************************************************
      * BELOW CLASS ADDED TO REROUTE SYSOUT                *
      ******************************************************
           Invoke ZUtil "redirectStandardStreams"
           IF DISP-IND = 'Y'
           Display "Returned from ZUtil.redirectStandardStreams".
      *------------------------------------------------------------*
      *    Call NewStringPlatform to convert from EBCDIC to jstring
      *------------------------------------------------------------*
           IF DISP-IND = 'Y'
              DISPLAY "    about to call NewStringPlatform".
           CALL "NewStringPlatform"
               USING BY VALUE   JNIEnvPtr
                     ADDRESS OF WS-INTERFACE-AREA-1
                     ADDRESS OF WS-Parm-String
                     0
                     RETURNING RC
           IF RC NOT = ZERO THEN
              DISPLAY "Error occurred creating jstring OBJECT"
              DISPLAY "in NewStringPlatform call"
              DISPLAY "NewStringPlatform RC  " RC
              GOBACK
      *       STOP RUN
           END-IF.
           IF DISP-IND = 'Y'
              DISPLAY "    returned from NewStringPlatform"
              DISPLAY "    RC                             " RC.
      *------------------------------------------------------------*
      *    Call (process ) method
      *------------------------------------------------------------*
           IF DISP-IND = 'Y'
              DISPLAY "    JUST BEFORE process CALL".
           INVOKE MainframeApi  "process"
                  USING   BY VALUE
                             WS-Parm-String
                  RETURNING  WS-Return-String
           END-INVOKE.
           IF DISP-IND = 'Y'
              DISPLAY "   RETURNED FROM JAVA process".
      *------------------------------------------------------------*
      *    Call getStringPlatform to convert from jstring to EBCDIC
      *------------------------------------------------------------*
           IF DISP-IND = 'Y'
              DISPLAY "     ABOUT TO CALL GetStringPlatform".
           CALL "GetStringPlatform"
               USING BY VALUE   JNIEnvPtr
                     WS-Return-String
                     ADDRESS OF WS-INTERFACE-AREA-2
                     LENGTH  OF WS-INTERFACE-AREA-2
                     0
                     RETURNING RC
           IF DISP-IND = 'Y'
           DISPLAY "1st 440 char of string displayed       "
                    WS-INTERFACE-AREA-2 (1:440)
           DISPLAY "CLAIM RET BUFF INFO                    "
                    WS-INTERFACE-AREA-2 (18:8).
           IF RC NOT = ZERO
              DISPLAY "Error occurred creating EBCDIC  OBJECT"
      *       DISPLAY "RETURN CODE " RC
              DISPLAY "in GetStringPlatform call"
              DISPLAY "GetStringPlatform RC  " RC
              GOBACK
      *       STOP RUN
           END-IF.
           IF DISP-IND = 'Y'
              DISPLAY "     BACK FROM CALL TO GetStringPlatform"
              DISPLAY "     WS-INTERFACE-AREA-2         "
                            WS-INTERFACE-AREA-2.
           MOVE WS-INTERFACE-AREA-2 TO LNK-INTERFACE-AREA-2.
      *------------------------------------------------------------*
      *    Call DeleteLocalRef to free up jstring object
      *------------------------------------------------------------*
           IF DISP-IND = 'Y'
              DISPLAY 'Del Local Ref WS-Parm-String '.
           CALL  DeleteLocalRef
               USING BY VALUE   JNIEnvPtr
                     WS-Parm-String
                     RETURNING VOID.
      *------------------------------------------------------------*
      *    Call DeleteLocalRef to free up jstring object
      *------------------------------------------------------------*
           IF DISP-IND = 'Y'
              DISPLAY 'Del Local Ref WS-Return-String '.
           CALL  DeleteLocalRef
               USING BY VALUE   JNIEnvPtr
                     WS-Return-String
                     RETURNING VOID.
           GOBACK.
