//EXER3F   JOB (),'<name>',REGION=0M,
//   MSGCLASS=H,NOTIFY=&SYSUID
//* ***************************************************************
//* The following code is sample code created by IBM Corporation. 
//* This sample code is not part of any standard IBM product and  
//* is provided to you solely for the purpose of assisting you in 
//* the development of your applications.  The code is provided   
//* 'as is', without warranty or condition of any kind.  IBM shall
//* not be liable for any damages arising out of your use of the  
//* sample code, even if IBM has been advised of the possibility  
//* of such damages.                                              
//* ***************************************************************
//MYPROCS JCLLIB ORDER=SYS1.ECOBOL.SIGYPROC
//*
//COBOL EXEC IGYWCL,
//     PARM.COBOL='NODYNAM,LIST,DATA(31),RENT',
//     PARM.LKED='LIST,XREF,LET,MAP,AMODE(31),RMODE(ANY),CALL'
/*
//COBOL.SYSIN  DD  *
       IDENTIFICATION DIVISION.
       PROGRAM-ID. EXER3F.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
      * REG and URG parms
       01 daemongroup                  PIC X(8) VALUE LOW-VALUES.
       01 node-name                    PIC X(8).
       01 server-name                  PIC X(8).
       01 register-name                PIC X(12) VALUE SPACES.
       01 minconn                      PIC 9(8) COMP VALUE 1.
       01 maxconn                      PIC 9(8) COMP VALUE 10.
       01 regopts                      PIC 9(8) COMP VALUE 0.
       01 urgopts                      PIC 9(8) COMP VALUE 0.
       01 rc                           PIC 9(8) COMP VALUE 0.
       01 rsn                          PIC 9(8) COMP VALUE 0.
       01 rv                           PIC 9(8) COMP VALUE 0.
      * RCS and SRP parms
       01 RCS-service-name             PIC X(255).
       01 RCS-service-name-length      PIC 9(8) COMP.
       01 RCS-rqst-area                PIC X(120).
       01 RCS-rqst-area-addr           USAGE POINTER.
       01 RCS-rqst-area-length         PIC 9(8) COMP.
       01 RCSasync                     PIC 9(8) COMP VALUE 0.
       01 SRP-resp-area                PIC X(120).
       01 SRP-resp-area-addr           USAGE POINTER.
       01 SRP-resp-area-length         PIC 9(8) COMP.
       01 connect-handle               PIC X(12).
       01 wait-time                    PIC 9(8) USAGE BINARY.
      * ASCII/ECDIC Conversion Variables
       01 EBCDIC-CCSID                 PIC 9(4) BINARY VALUE 1140.
       01 ASCII-CCSID                  PIC 9(4) BINARY VALUE 819.
       01 INPUT-EBCDIC                 PIC X(120).
       01 OUTPUT-EBCDIC                PIC X(120).
       01 INPUT-ASCII                  PIC X(120).
       01 OUTPUT-ASCII                 PIC X(120).
      * Working Variables
       01 reply-message                PIC X(120).
       01 reply-message-count          PIC X(125).
       01 loop-counter                 PIC 9(6) COMP VALUE 0.
       01 loop-counter-text            PIC X(8).
       01 stop-loop-flag               PIC 9(1) COMP VALUE 0.
       01 eval-string                  PIC X(2).
       01 clear-with-low               PIC X(255) VALUE LOW-VALUES.

      * Procedures Section
       PROCEDURE DIVISION.
       MAINLINE SECTION.
           MOVE 'EXER3F'                       TO register-name.
           MOVE 'cccccc'                       TO daemongroup.
           MOVE 'nnnnnnn'                      TO node-name.
           MOVE 'sssssss'                      TO server-name.
           MOVE 'ServiceName'                  TO RCS-service-name.
           MOVE 'This is my reply back!'       TO reply-message.

           INSPECT daemongroup CONVERTING ' ' to LOW-VALUES.

           CALL 'BBOA1REG' USING
                 daemongroup,
                 node-name,
                 server-name,
                 register-name,
                 minconn,
                 maxconn,
                 regopts,
                 rc,
                 rsn.

           IF rc > 0 THEN
             DISPLAY "OLA - BBOA1REG problem -- rc/rsn : " rc "/" rsn
             GO TO Bad-RC
           ELSE
             DISPLAY "Successfully registered into " daemongroup
           END-IF.

           CALL 'BBOA1CNG' USING
                 register-name,
                 connect-handle,
                 wait-time,
                 rc,
                 rsn.

           IF rc > 0 THEN
             DISPLAY "OLA - BBOA1CNG problem, rc/rsn: " rc "/" rsn
             GO TO Bad-RC
           END-IF.

           MOVE LENGTH OF RCS-rqst-area TO RCS-rqst-area-length.
           SET RCS-rqst-area-addr TO ADDRESS OF RCS-rqst-area.
           INSPECT RCS-service-name CONVERTING ' ' to LOW-VALUES.

           PERFORM UNTIL stop-loop-flag EQUAL 1

             PERFORM Clear-Fields

             COMPUTE loop-counter = loop-counter + 1
             MOVE loop-counter TO loop-counter-text

             CALL 'BBOA1RCS' USING
                 connect-handle,
                 RCS-service-name,
                 RCS-service-name-length,
                 RCS-rqst-area-length,
                 RCSasync,
                 rc,
                 rsn

             IF rc > 0 THEN
               DISPLAY "OLA - BBOA1RCS problem, rc/rsn: " rc "/" rsn
               GO TO Bad-RC
             END-IF

             CALL 'BBOA1GET' USING
                   connect-handle,
                   RCS-rqst-area-addr
                   RCS-rqst-area-length
                   rc,
                   rsn,
                   rv

             IF rc > 0 THEN
               DISPLAY "OLA - BBOA1GET problem, rc/rsn: " rc "/" rsn
               GO TO Bad-RC
             END-IF

      * Data conversion and setup for SRP

             DISPLAY "Your message in original ASCII: " RCS-rqst-area
             MOVE RCS-rqst-area TO INPUT-ASCII
             PERFORM ASCII-TO-EBCDIC
             MOVE OUTPUT-EBCDIC TO RCS-rqst-area
             DISPLAY "Your message converted to EBCDIC: " RCS-rqst-area

             MOVE RCS-rqst-area TO eval-string

             EVALUATE eval-string
               WHEN "ST"
                 MOVE 1 to stop-loop-flag
                 MOVE "Okay I will stop!" TO reply-message
               WHEN "RE"
                 MOVE 0 to loop-counter
             END-EVALUATE

             STRING
               loop-counter-text DELIMITED BY SIZE
               reply-message DELIMITED BY SIZE
               INTO reply-message-count
             END-STRING

             DISPLAY "My reply in EBCDIC: " reply-message-count

             MOVE reply-message-count TO INPUT-EBCDIC
             PERFORM EBCDIC-TO-ASCII
             MOVE OUTPUT-ASCII TO SRP-resp-area
             DISPLAY "My reply converted to ASCII: " SRP-resp-area

             MOVE LENGTH OF SRP-resp-area TO SRP-resp-area-length
             SET SRP-resp-area-addr TO ADDRESS OF SRP-resp-area

             CALL 'BBOA1SRP' USING
                 connect-handle,
                 SRP-resp-area-addr,
                 SRP-resp-area-length,
                 rc,
                 rsn

             IF rc > 0 THEN
               DISPLAY "OLA - BBOA1SRP problem, rc/rsn: " rc "/" rsn
               GO TO Bad-RC
             END-IF

           END-PERFORM.

           CALL 'BBOA1CNR' USING
                 connect-handle,
                 rc,
                 rsn.

           IF rc > 0 THEN
             DISPLAY "OLA - BBOA1CNR problem, rc/rsn: " rc "/" rsn
             GO TO Bad-RC
           END-IF.

           CALL 'BBOA1URG' USING
               register-name,
               urgopts,
               rc,
               rsn.

           IF rc > 0 THEN
             DISPLAY "OLA - BBOA1URG problem -- rc/rsn: " rc "/" rsn
             GO TO Bad-RC
           ELSE
             DISPLAY "Successfully unregistered from " daemongroup
           END-IF.

           GOBACK.

      *  Clear the fields

       Clear-Fields.
           MOVE clear-with-low TO reply-message-count.
           MOVE clear-with-low TO RCS-rqst-area.
           MOVE clear-with-low TO SRP-resp-area.
           MOVE clear-with-low TO INPUT-EBCDIC.
           MOVE clear-with-low TO INPUT-ASCII.
           MOVE clear-with-low TO OUTPUT-EBCDIC.
           MOVE clear-with-low TO OUTPUT-ASCII.

      *  Code Page Conversions

       EBCDIC-to-ASCII.
           MOVE FUNCTION DISPLAY-OF
           (FUNCTION NATIONAL-OF (INPUT-EBCDIC EBCDIC-CCSID),
               ASCII-CCSID)
           TO OUTPUT-ASCII.

       ASCII-to-EBCDIC.
           MOVE FUNCTION DISPLAY-OF
           (FUNCTION NATIONAL-OF (INPUT-ASCII ASCII-CCSID),
               EBCDIC-CCSID)
           TO OUTPUT-EBCDIC.

      *  Section used to exit batch if any API returned RC>0

       Bad-RC.
           DISPLAY "OLA - EXITING program due to non-RC=0."
           GOBACK.

/*
//LKED.SYSLIB DD DSN=<your hlq.SCEELKED>,DISP=SHR
//            DD DSN=<your WOLA module loadlib,DISP=SHR
//LKED.SYSLMOD DD DSN=<your_loadlib>(EXER3F),DISP=SHR
//LKED.SYSPRINT DD SYSOUT=*
//LKED.SYSIN  DD  *
  NAME EXER3F(R)
/*
