Sample UCS COBOL Program Illustration for OS 2200

The following UCS COBOL sample code shows the use of APIs in OS 2200. For OS 2200, the header files are not required. To build UCS COBOL, build script must include HTTP Client Library. Building and linking of the library for UCS COBOL application varies depending on the OS 2200 machine.

      *                                                                             
      * This is User Program for calling the HTTP Client Library.  
      * This is calling GETATMS Rest API from 
      * Ebanksamplewebservice Web Service
      *                                                                             
       IDENTIFICATION DIVISION. 
       PROGRAM-ID.   USERPROGRAMBANK1. 
       ENVIRONMENT DIVISION. 
       CONFIGURATION SECTION. 
       SOURCE-COMPUTER. UNIVAC-2200. 
       OBJECT-COMPUTER. UNIVAC-2200. 
       SPECIAL-NAMES.   PRINTER IS PTR. 
       DATA DIVISION. 
       WORKING-STORAGE SECTION. 
       01 VERSION          PIC X(11).                                                         
       01 SESSIONS         PIC S9(10)  usage binary value 0.                                               
       01 TIME-OUT         PIC S9(10)  usage binary value 0.   
       01 LOG-LEVEL        PIC S9(10)  usage binary value 0. 			  		                                            
       01 LOG-FILE         PIC X(255).                                              					  
       01 SYNC-MODE        PIC S9(10)  usage binary value 0.  
       01 COMAPIMODE       PIC X(1).														
       01 HANDLE           PIC S9(18)  usage binary value 0.						
       01 SERVER           PIC X(125).                                                           
       01 PORT-NUM         PIC S9(10)  usage binary value 0.                                                  
       01 URL              PIC X(255).                                                          			   
       01 KEEP-ALIVE       PIC S9(10)  usage binary value 0.                                               
       01 AUTH-TYPE        PIC S9(10)  usage binary value 0.                                      
       01 CREDENTIALS      PIC X(255). 
       01 CALL-ID          PIC X(255).                                             
       01 SOL-SSL          PIC S9(10)  usage binary value 0.                                                   
       01 OPTION           PIC S9(10)  usage binary value 0.                                                    
       01 OPTION-VALUE     PIC X(30).                                                     
       01 OPTION-LEN       PIC S9(10)  usage binary value 0.                                                
       01 OPTION-RESULT    PIC S9(10)  usage binary value 0.  
       01 REQ-CONTENT      PIC X(24250).                                                   
       01 REQ-CONTENT-LEN  PIC S9(10)  usage binary value 0.                                           
       01 STATUS-CODE      PIC S9(10)  usage binary value 0. 
       01 RES-CONTENT      PIC X(20000).                                                   
       01 RES-CONTENT-LEN  PIC S9(10)  usage binary value 0.                                           
       01 REASON           PIC X(255).                                                          
       01 METHOD           PIC X(10) VALUE "POST". 
       01 RESULT           PIC S9(10)  usage binary value 0.                                                    
       77 TEMP-INDEX       PIC S9(5)  BINARY  VALUE 0.
       77 INDEX1           PIC S9(5)  BINARY  VALUE 1.
       77 RESPONSE-CODE    PIC X(15).
   
      ********************REQ-EBANKSAMPLEWEBSERVICE********************

       01  REQ-EBANKSAMPLEWEBSERVICE.
           03  OPERATIONID PIC X(22).
      * GetATMS
             88  GETATMS VALUE "GETATMS               ".
           03  REQ-BUFFER PIC X(2403).

      *****************************GETATMS*****************************

      * Summary:Get all ATMs
      * GetATMS
           03  GETATMS REDEFINES REQ-BUFFER.
             05  FILLER PIC X(2403).

      ********************RSP-EBANKSAMPLEWEBSERVICE********************

       01  RSP-EBANKSAMPLEWEBSERVICE.
           03  RSP-CODE PIC X(30).
      * GetATMS
             88  GET-400-GETATMS VALUE "GET-400-GETATMS               ".
      * GetATMS
             88  GET-401-GETATMS VALUE "GET-401-GETATMS               ".
      * GetATMS
             88  GET-200-GETATMS VALUE "GET-200-GETATMS               ".
           03  RSP-BUFFER  PIC X(2508).
       
      *****************************GETATMS*****************************

      * Get-400-GetATMS
      * Description: Bad Request
           03  GET-400-GETATMS REDEFINES RSP-BUFFER.
             05  LEN-DESCRIPTION PIC 9(5).
             05  DESCRIPTION PIC X(100).
             05  FILLER PIC X(2403).

      * Get-401-GetATMS
      * Description: Unauthorized
           03  GET-401-GETATMS REDEFINES RSP-BUFFER.
             05  LEN-DESCRIPTION PIC 9(5).
             05  DESCRIPTION PIC X(100).
             05  FILLER PIC X(2403).

      * Get-200-GetATMS
      * Description: Success
           03  GET-200-GETATMS REDEFINES RSP-BUFFER.
             05  LEN-DESCRIPTION PIC 9(5).
             05  DESCRIPTION PIC X(100).
      * Schema Name: Unisys.eBankSampleWebService.ATM
      * Description: Unisys-eBankSampleWebServi, Actual elements count
      * in the array.
             05  CNT-UNISYS-EBANKSAMPLEWEBSERVI PIC S9(3).
             05  UNISYS-EBANKSAMPLEWEBSERVI OCCURS 10 TIMES.
      * Description: id, ATM ID
              06  ID PIC S9(9).
      * Description: name, Name
              06  LEN-NAME PIC S9(3).
              06  NAME PIC X(30).
      * Description: street, Street
              06  LEN-STREET PIC S9(3).
              06  STREET PIC X(100).
      * Description: state, State
              06  LEN-STATE PIC S9(3).
              06  STATE PIC X(30).
      * Description: country, Country
              06  LEN-COUNTRY PIC S9(3).
              06  COUNTRY PIC X(30) VALUE "UNITED STATES".
      * Schema Name: current
      * Description: X-current, Time stamp - COBOL keyword
              06  X-CURRENT.
                      08 YEAR PIC 9(4).
                      08 MONTH PIC 9(2).
                      08 X-DAY PIC 9(2).
                      08 X-TIME.
                       10 HOUR PIC 9(2).
                       10 MIN PIC 9(2).
                       10 SEC PIC 9(2).
                       10 MS PIC 9(2).
      * Description: zipCode, Zip Code
      * Pattern: ^\d{5}(-\d{4})?$
              06  LEN-ZIPCODE PIC S9(3).
              06  ZIPCODE PIC X(10).

      ******************EBANKSAMPLEWEBSERVICE-DEFAULT******************

       01  EBANKSAMPLEWEBSERVICE-DEFAULT.

           03  RSP-CODE PIC X(30).
      * HTTP Status Message
           03  X-MESSAGE-LEN PIC 9(3).
           03  X-MESSAGE PIC X(256).
      * HTTP Response Code
           03  X-CODE PIC 9(3).
      * Local Response Subcode (Unisys-specific response subcodes)
           03  SUBCODE PIC 9(3).
      * HTTP Response Message
           03  RESPONSE-LEN PIC 9(3).
           03  RESPONSE PIC X(2560).

      *****************************MAIN-PROCEDURE*****************************

       PROCEDURE DIVISION. 
       MAIN-PROCEDURE. 
           GO TO INIT-PROCEDURE. 
      * 
       INIT-PROCEDURE. 
           MOVE 4 TO LOG-LEVEL.
           MOVE "VERSION 1.0" TO VERSION.
           MOVE 0 TO  SYNC-MODE.
           MOVE 5000 TO TIME-OUT.      
           MOVE "A" TO COMAPIMODE.  
           MOVE 1 TO SESSIONS.
           CALL "INITHTTPLIBRARY" USING VERSION SESSIONS TIME-OUT 
               LOG-LEVEL LOG-FILE SYNC-MODE COMAPIMODE RESULT.
           IF RESULT = 1  GO TO CREATE-PROCEDURE. 
           IF RESULT = 0 THEN
               DISPLAY "CALL HTTP INITIALIZATION FAILED. ERROR : " 
                   RESULT 
               GO TO CLOSELIB-PROCEDURE 
           END-IF.
      * 
       CREATE-PROCEDURE.
           MOVE "/api/Ebankrestwebservice/GETATMS" TO URL.
           MOVE "10.62.156.227" TO SERVER.
           MOVE 5000 TO PORT-NUM.
           MOVE 0 TO HANDLE.
           MOVE "USER:PASS" TO CREDENTIALS.
           CALL "CREATEHTTPSESSION" USING HANDLE SERVER  
               PORT-NUM URL KEEP-ALIVE AUTH-TYPE CREDENTIALS RESULT.
           IF RESULT = 1  GO TO SEND-PROCEDURE. 
           IF RESULT = 0 THEN
               DISPLAY "CALL HTTP SESSION CREATION FAILED. ERROR=" 
                   RESULT 
               GO TO CLOSELIB-PROCEDURE 
           END-IF.
      *
       SEND-PROCEDURE.
           MOVE SPACES TO REQ-BUFFER. 
           MOVE "GETATMS               " TO OPERATIONID.
           MOVE 2425 TO REQ-CONTENT-LEN.
           MOVE REQ-EBANKSAMPLEWEBSERVICE TO REQ-CONTENT.
           CALL "SENDHTTPREQUEST" USING HANDLE OPERATIONID 
               REQ-CONTENT REQ-CONTENT-LEN STATUS-CODE RESULT.
           IF RESULT = 1  GO TO RECEIVE-PROCEDURE. 
           IF RESULT = 0 THEN
               DISPLAY "CALL HTTP SEND REQUEST FAILED. ERROR : " 
                   RESULT 
               GO TO CLOSE-PROCEDURE 
           END-IF.
      *
       RECEIVE-PROCEDURE.
           CALL "RECEIVEHTTPRESPONSE" USING HANDLE RES-CONTENT
                   RES-CONTENT-LEN STATUS-CODE REASON RESULT.
           IF RESULT = 1  GO TO READ-PROCEDURE. 
           IF RESULT = 0 THEN
               DISPLAY "CALL HTTP RECEIVE REQUEST FAILED. ERROR : " 
                   RESULT 
               DISPLAY "REASON : " REASON
               GO TO CLOSE-PROCEDURE 
           END-IF.
      *
       READ-PROCEDURE. 
           MOVE RES-CONTENT TO RSP-EBANKSAMPLEWEBSERVICE.                      
           MOVE RSP-CODE OF RSP-EBANKSAMPLEWEBSERVICE TO RESPONSE-CODE.                           
           DISPLAY "RESPONSE-CODE = " RESPONSE-CODE.  
           
           IF RESPONSE-CODE = "GET-400-GETATMS" THEN
               DISPLAY "DESCRIPTION = " DESCRIPTION OF GET-400-GETATMS 
                   OF RSP-EBANKSAMPLEWEBSERVICE  
           END-IF.
           IF RESPONSE-CODE = "GET-401-GETATMS" THEN
               DISPLAY "DESCRIPTION = " DESCRIPTION OF GET-401-GETATMS 
                   OF RSP-EBANKSAMPLEWEBSERVICE 
           END-IF.
           IF RESPONSE-CODE = "GET-200-GETATMS" THEN  
               GO TO DISPLAY-PROCEDURE 
           END-IF. 
           GO TO CLOSE-PROCEDURE.  
      *
       DEFAULT-ERROR-DISPLAY.
           MOVE RES-CONTENT TO EBANKSAMPLEWEBSERVICE-DEFAULT.                      
           DISPLAY "------------ERROR MESSAGE-----------".         
           DISPLAY "                                    ".         
           DISPLAY "RSP-CODE = " RSP-CODE 
               OF EBANKSAMPLEWEBSERVICE-DEFAULT.  
           DISPLAY "X-MESSAGE = " X-MESSAGE 
               OF EBANKSAMPLEWEBSERVICE-DEFAULT.  
           DISPLAY "X-CODE = " X-CODE 
               OF EBANKSAMPLEWEBSERVICE-DEFAULT.  
           DISPLAY "SUBCODE = " SUBCODE 
               OF EBANKSAMPLEWEBSERVICE-DEFAULT.  
           DISPLAY "RESPONSE = " RESPONSE 
               OF EBANKSAMPLEWEBSERVICE-DEFAULT.  
           DISPLAY "                                    ".             
           DISPLAY "----------------DONE----------------".             
           GO TO CLOSE-PROCEDURE. 
      *
       DISPLAY-PROCEDURE.
           DISPLAY "------------RESULT------------------".         
           DISPLAY "                                    ".         
           DISPLAY "DESCRIPTION = " DESCRIPTION OF GET-200-GETATMS 
               OF RSP-EBANKSAMPLEWEBSERVICE. 
           DISPLAY "Total Count = " CNT-UNISYS-EBANKSAMPLEWEBSERVI 
               OF GET-200-GETATMS OF RSP-EBANKSAMPLEWEBSERVICE.
           DISPLAY "                                    ".             

           PERFORM WITH TEST AFTER UNTIL INDEX1 = 
               CNT-UNISYS-EBANKSAMPLEWEBSERVI OF GET-200-GETATMS
           
               DISPLAY "ID = " ID 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)           
               DISPLAY "NAME = " NAME 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)             
               DISPLAY "CITY = " STREET 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)             
               DISPLAY "STATE = " STATE 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "COUNTRY = " COUNTRY 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "ZIPCODE = " ZIPCODE 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "YEAR = " YEAR OF X-CURRENT 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "MONTH = " MONTH OF X-CURRENT 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "X-DAY = " X-DAY OF X-CURRENT 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "HOUR = " HOUR OF X-TIME OF X-CURRENT 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "MIN = " MIN OF X-TIME OF X-CURRENT 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "SEC = " SEC OF X-TIME OF X-CURRENT 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               DISPLAY "MS = " MS OF X-TIME OF X-CURRENT 
                   OF UNISYS-EBANKSAMPLEWEBSERVI(INDEX1)
               ADD 1 TO INDEX1
               DISPLAY "                                    "             
           END-PERFORM.
           DISPLAY "------------RESULT DONE-------------".             
           GO TO CLOSE-PROCEDURE. 
      *
       CLOSE-PROCEDURE.
           CALL "DESTROYHTTPSESSION" USING HANDLE RESULT.
           IF RESULT = 0 
               DISPLAY "CALL HTTP SESSION DESTROY FAILED. ERROR : " 
                   RESULT. 
           GO TO CLOSELIB-PROCEDURE. 
      *
       CLOSELIB-PROCEDURE.
           CALL "CLOSEHTTPLIBRARY" USING RESULT.
           IF RESULT = 0 
               DISPLAY "CALL HTTP CLOSE LIBRARY FAILED. ERROR : " 
                   RESULT. 
           STOP RUN.