//EXER3A   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. EXER3A.
       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.
      * SRV and SRP parms
       01 SRV-service-name             PIC X(255).
       01 SRV-service-name-length      PIC 9(8) COMP.
       01 SRV-rqst-area                PIC X(120).
       01 SRV-rqst-area-addr           USAGE POINTER.
       01 SRV-rqst-area-length         PIC 9(8) COMP.
       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).

      * Procedures Section
       PROCEDURE DIVISION.
       MAINLINE SECTION.
           MOVE 'EXER3A'                       TO register-name.
           MOVE 'cccccc'                       TO daemongroup.
           MOVE 'nnnnnnn'                      TO node-name.
           MOVE 'sssssss'                      TO server-name.
           MOVE 'ServiceName'                  TO SRV-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.

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

           CALL 'BBOA1SRV' USING
               register-name,
               SRV-service-name,
               SRV-service-name-length,
               SRV-rqst-area-addr,
               SRV-rqst-area-length,
               connect-handle,
               wait-time,
               rc,
               rsn,
               rv.

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

      * Data conversion and setup for SRP

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

           DISPLAY "My reply in original EBCDIC: " reply-message.
           MOVE reply-message 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.

           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.

      *  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>(EXER3A),DISP=SHR
//LKED.SYSPRINT DD SYSOUT=*
//LKED.SYSIN  DD  *
  NAME EXER3A(R)
/*
