Sybase Business Intelligence Solutions - Database Management, Data Warehousing Software, Mobile Enterprise Applications and Messaging
  Worldwide [Change] Contact Us  |  My Sybase  |  Shopping Cart - Buy Business Intelligence Products - Database Management, Data Warehousing and Mobile Software  
view all search results


Support & Downloads / Technical Documents / Document Types / White Paper-Technical / COBOL II RSP Sample - How to code for keyword inpu...

COBOL II RSP Sample - How to code for keyword input

This document contains COBOL II RSP code sample that reads up to 50 keywords and echos the keywords and their values back to the client via a STD pipe.
 
Share Tell a Friend Print This Page

RSP4C

RSP SAMPLE THAT READS UP TO 50 KEWYORDS AND ECHOS THE KEYWORDS AND THEIR VALUES BACK TO THE CLIENT VIA A STD OUTPUT PIPE.

Below are the contents of an input file fed into ISQL.EXE to feed any number of keywords and values to an RSP program named "RSP4C".  RSP4C is set up to receive keywords that are up to fifteen characters in length (including the ampersand) and keyword-values up to 28 in length.  All keywords and their values will be returned via a standard output pipe for display.  The rightmost five characters of the keyword-values will be overwritten with the length of the values as determined by the Access Server and sent to the RSP via the keyword variable table (see RSP/CSA Programmer's Reference).  


CONTENTS OF "RSP4C.SQL"
=======================================================================

USE PROCEDURE RSP4C &KEY1='A Test of keywords' &KEY2=Another test &KEY3="SO?"
GO

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


The following are the results from the above call to RSP4C.

CONTENTS OF "RSP4C.LOG"
=======================================================================

1> 2> 1> 2>  
COLUMN01                                                
-------------------------------------------------------
**--> THE FOLLOWING IS A LIST OF THE KEYWORDS SENT.    
KEYW-> 01:&KEY1          = 'A Test of keywords'    0020
KEYW-> 02:&KEY2          = ANOTHER                 0007
KEYW-> 03:&KEY3          = 'SO?'                   0005

(4 rows affected)
1>

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

Below is an example of the whole ISQL command using the above listed files "RSP4C.SQL" and "RSP4C.LOG"


ISQL -SDB2T -Uxxxxxxxx -Pyyyyyyyy -iRSP4C.SQL -oRSP4C.LOG









Below are the queries and results of envoking the RSP named RSP4C through ISQL to see messages and codes sent back to the client.
==================================================================

SET VERBOSE YES
GO

1> 2>

USE PROCEDURE RSP4C &ERRORMSG=TESTIT
GO
1> 2>  
COLUMN01                                                
-------------------------------------------------------
**--> THE FOLLOWING IS A LIST OF THE KEYWORDS SENT.    
KEYW-> 01:&ERRORMSG      = TESTIT                  0006
DG21001: The following messages were generated by the database server.
DG21000: THIS IS YOUR ERROR MESSAGE TEXT.
Msg 21002, Level 16, State 0:
DG21002: Result failed.  Database server error code         .

(2 rows affected)


USE PROCEDURE RSP4C &STATUSMSG=YES
GO
1> 2>  
COLUMN01                                                
-------------------------------------------------------
**--> THE FOLLOWING IS A LIST OF THE KEYWORDS SENT.    
KEYW-> 01:&STATUSMSG     = YES                     0003
Msg 21002, Level 16, State 0:
DG21002: Result failed.  Database server error code ERR12345.

(2 rows affected)
1>























      IDENTIFICATION DIVISION.
      PROGRAM-ID.  RSP4C.
     ******************************************************************
     *  RSP4C - DOCTORED STORED PROCEDURE                             *
     *                                                                *
     *  THIS SAMPLE STORED PROCEDURE WAS WRITTEN TO USE A "STD"       *
     *  OUTPUT PIPE AND KEYWORDS FOR ILLUSTRATION.  IT REQUIRES AT    *
     *  LEAST ONE KEYWORD/VALUE BE PASSED TO IT WHEN INVOKED.         *
     *                                                                *
     *  USE PROCEDURE RSP4C &FIRSTKEYWORD=FIRSTVALUE ;                *
     *                                                                *
     *  THIS PROGRAM IS SET UP TO ACCEPT KEYWORDS OF UP TO 15 CHARS   *
     *  IN LENGTH AND UP TO 28 CHARS FOR THE KEYWORD VALUES.  ALL     *
     *  KEYWORDS, KEYWORD VALUES, WILL BE RETURNED                    *
     *  THROUGH THE OUTPUT PIPE AS VERIFICATION.                      *
     *                                                                *
     *  ALSO:  2 SPECIAL KEYWORDS ARE SET UP TO TEST ERROR MESSAGING  *
     *  THE ERROR CONDITIONS SEND 'E' TO SPSTATUS                     *
     *   - ONE USING "MESSAGE" AND ONE USING "STATUS".                *
     *  &ERRORMSG  : 'E' TO SPSTATUS, MSG TO SPMSG, CALLS 'MESSAGE'   *
     *  &STATUSMSG : 'E' TO SPSTATUS, MSG TO SPCODE, CALLS 'STATUS'   *
     *                                                                *
     ******************************************************************

      ENVIRONMENT DIVISION.

      DATA DIVISION.

      WORKING-STORAGE SECTION.

     ******************************************************************
     * POINTERS TO INPUT AND OUTPUT RECORD AREA.                      *
     ******************************************************************
      01  WS-POINTERS.
          10 WS-OUTPUT-POINTER        USAGE IS POINTER.

     ******************************************************************
     * SWITCHES FOR RECORD PROCESSING CONTROL.                        *
     ******************************************************************
      01  WS-SWITCHES.
          10 WS-ERROR-MSG-SW              PIC X(01) VALUE 'N'.
             88 SEND-TEST-ERROR-MSG       VALUE 'Y'.
             88 NO-MSG-REQUIRED           VALUE 'N'.

          10 WS-ERROR-STATUS-MSG-SW       PIC X(01) VALUE 'N'.
             88 SEND-TEST-ERR-STATUS-MSG  VALUE 'Y'.
             88 NO-STATUS-REQUIRED        VALUE 'N'.

          10 WS-ERROR-HAPPENED-SW         PIC X(01) VALUE 'N'.
             88 ERROR-HAPPENED            VALUE 'Y'.
             88 NO-ERROR-YET              VALUE 'N'.

     ******************************************************************
     * A NUMBER FOR INCRIMENTING.                                     *
     ******************************************************************
      01  WS-VARIABLES.
          05  WS-INCRINUM                 PIC 99  VALUE ZEROES.
          05  WS-DIS-NUM                  PIC 9(4) VALUE ZEROES.
          05  VTABLE-CTR                  PIC S9(8) COMP VALUE 1.
          05  ERROR-CHECK                 PIC X(15) VALUE
                                          '&ERRORMSG      '.
          05  STATUS-CHECK                PIC X(15) VALUE
                                          '&STATUSMSG     '.

      01 MESSAGES.
         05  ERROR1-MSG.
             07  ERROR1-TEXT1             PIC X(19)  VALUE
                 'ERROR WITH CALL TO '.
             07  ERROR1-CALL              PIC X(10)  VALUE SPACES.
             07  ERROR1-TEXT2             PIC X(14)  VALUE
                 ' - SPRC CODE: '.
             07  ERROR1-SPRC              PIC X(03)  VALUE SPACES.

     ******************************************************************
     * OUTPUT RECORD DESCRIPTION.                                     *
     ******************************************************************

      01  WS-OUT-KEYWORD-MSG.
          10 FILLER                       PIC X(55) VALUE
          '**--> THE FOLLOWING IS A LIST OF THE KEYWORDS SENT.    '.

      01  H-TABLE-NAME.
          10 H-TABLE-NAME-T OCCURS 15 TIMES.
             15 H-T-NAME                  PIC X.
      01  H-TABLE-VALUE.
          10 H-TABLE-VALUE-T OCCURS 28 TIMES.
             15 H-T-VALUE                 PIC X.

      01  WS-KEYWORD-REC.
          10 WS-KEY-MSG-AREA.
             15 FILLER                    PIC X(07) VALUE 'KEYW-> '.
             15 WS-KEY-MSG-NUM            PIC X(02) VALUE SPACES.
             15 FILLER                    PIC X(01) VALUE ':'.
          10 WS-KEYWORD-OUT               PIC X(15) VALUE SPACES.
          10 FILLER                       PIC X(02) VALUE '= '.
          10 WS-KEY-VALUE-OUT.
             15 FILLER                    PIC X(24) VALUE SPACES.
             15 WS-KEY-VAL-LEN            PIC X(04) VALUE SPACES.

      LINKAGE SECTION.

      01  DFHCOMMAREA.

     **************************************************************
     * THE LINKAGE SECTION DEFINES MASKS FOR DATA AREAS THAT ARE
     * PASSED BETWEEN THIS PROGRAM AND THE MDI ACCESS SERVER.
     **************************************************************
          COPY SPAREAC.

     **************************************************************
     * THIS IS THE MASK FOR THE KEYWORD VARIABLE TABLE THAT THE
     * MDI ACCESS SERVER WILL CREATE FOR YOUR RSP TO PROCESS.
     **************************************************************
      01  KEYWORD-VTABLE.
          10 VTABLE-SIZE                  PIC S9(8) COMP.
          10 VTABLE-ENTRY OCCURS 0 TO 50 TIMES
                          DEPENDING ON VTABLE-SIZE
                          INDEXED BY VTABLE-INDEX.
             15 VTABLE-NAME               USAGE IS POINTER.
             15 VTABLE-VALUE              USAGE IS POINTER.
             15 VTABLE-NAME-LENGTH        PIC S9(4) COMP.
             15 VTABLE-VALUE-LENGTH       PIC S9(4) COMP.

     **************************************************************
     * THESE ARE THE DATA VARIABLES THAT THE KEYWORDS AND THE
     * KEYWORD VALUES WILL BE PLACED INTO FOR ACCESS BY THE RSP.
     * IN THIS CASE THE LENGTHS WERE SET TO 15 FOR KEYWORDS AND
     * 28 FOR THE KEYWORD VALUE FOR TESTING PURPOSES.
     **************************************************************
      01  TABLE-NAME                      PIC X(15).
      01  TABLE-VALUE                     PIC X(28).

      01  LS-OUTPUT-REC.
          10 LS-OUTPUT-DATA               PIC X(55).


     *============================================================*
      PROCEDURE DIVISION.
     *============================================================*

      000-MAIN-PROCESSING.

          PERFORM 100-INITIALIZE             THRU 100-EXIT.

          IF NO-ERROR-YET
              PERFORM 500-PROCESS-I-O        THRU 500-EXIT.

          IF NO-ERROR-YET
              PERFORM 900-WRAP-UP            THRU 900-EXIT.

          EXEC CICS
               RETURN
          END-EXEC.

          GOBACK.

      000-EXIT.
          EXIT.


      100-INITIALIZE.

          MOVE 'OK'                         TO SPSTATUS.

     ******************************************************************
     * ALLOCATE A BLOCK OF STORAGE TO BE USED FOR THE DATA
     * SET POINTER VARIABLE TO ADDRESS OF ALLOCATED STORAGE
     ******************************************************************

          EXEC CICS
            GETMAIN SET(WS-OUTPUT-POINTER)
                    LENGTH(55)
          END-EXEC.
          SET ADDRESS OF LS-OUTPUT-REC TO WS-OUTPUT-POINTER.

          PERFORM 120-OPEN-OUTPUT-PIPE      THRU 120-EXIT.

      100-EXIT.
          EXIT.

      120-OPEN-OUTPUT-PIPE.
     ******************************************************************
     * OPEN THE OUTPUT PIPE.                                          *
     ******************************************************************
          MOVE 'STD'                        TO SPFORMAT.
          MOVE 55                           TO SPMAXLEN.
          MOVE 'OUTPUT'                     TO SPMODE.

          CALL 'OPENPIPE' USING SPAREA.

     ******************************************************************
     * IF OPEN FAILED, THEN ISSUE AN ERROR MESSAGE.                   *
     ******************************************************************
          IF SPRC NOT = '000'
              SET ERROR-HAPPENED            TO TRUE
              MOVE 'OPENPIPE'               TO ERROR1-CALL
              PERFORM 800-ERROR-MESSAGE     THRU 800-EXIT.

      120-EXIT.
          EXIT.


      500-PROCESS-I-O.

          PERFORM 510-KEYWORD-INPUT-CHECK   THRU 510-EXIT.

          IF NO-ERROR-YET
              PERFORM 520-PROCESS-KEYWORDS  THRU 520-EXIT.

      500-EXIT.
          EXIT.

      510-KEYWORD-INPUT-CHECK.
     ******************************************************************
     * MAKE SURE AT LEAST ONE KEYWORD WAS SENT ALONG WITH PROGRAM     *
     ******************************************************************

          MOVE 0                            TO WS-INCRINUM.

          IF SPVARTAB = NULL
              PERFORM 700-LOAD-KEYWORD-ERROR   THRU 700-EXIT
              GO TO 510-EXIT.

          IF VTABLE-SIZE NOT > 0
              PERFORM 700-LOAD-KEYWORD-ERROR   THRU 700-EXIT
              GO TO 510-EXIT.

          SET ADDRESS OF KEYWORD-VTABLE     TO SPVARTAB.

      510-EXIT.
          EXIT.


      520-PROCESS-KEYWORDS.

          PERFORM 522-SEND-KEYWORD-HEADING     THRU 522-EXIT.

          IF NO-ERROR-YET
              PERFORM 524-READ-WRITE-KEYWORDS  THRU 524-EXIT.

          IF NO-ERROR-YET
              PERFORM 548-TEST-FOR-ERR-KEY  THRU 548-EXIT.

      520-EXIT.
          EXIT.


      522-SEND-KEYWORD-HEADING.

          MOVE WS-OUT-KEYWORD-MSG           TO LS-OUTPUT-REC.
          MOVE 55                           TO SPRECLEN.
          SET SPFROM TO ADDRESS OF LS-OUTPUT-REC.

          CALL 'PUTPIPE' USING SPAREA.

          IF SPRC NOT = '000'
              SET ERROR-HAPPENED            TO TRUE
              MOVE 'PUTPIPE '               TO ERROR1-CALL
              PERFORM 800-ERROR-MESSAGE     THRU 800-EXIT.

      522-EXIT.
          EXIT.


      524-READ-WRITE-KEYWORDS.
     ******************************************************************
     * OBTAIN THE KEYWORD VARIABLES AND DISPLAY THEM DOWN OUTPUT PIPE *
     * THE KEYWORD VALUE LENGTH (VTABLE-VALUE-LENGTH(VTABLE-INDEX))   *
     * PASSED FROM THE ACCESS SERVER WILL BE PLACED AT THE LAST FOUR  *
     * BYTES OF THE KEYWORD VALUE DISPLAY.  THIS WILL DEMONSTATE THAT *
     * WAY THE ACCESS SERVER DETERMINES THE LENGTH OF THE KEYWORD     *
     * VALUE MAY NOT MATCH EXACTLY WHAT WAS SENT BECAUSE THE COUNTING *
     * STOPS AT THE FIRST SPACE IF THE DATA IS NOT DELIMITED.         *
     * NOTE THAT THIS DOES NOT MEAN ONLY PART OF THE KEYWORD VALUE    *
     * DATA WAS SENT - IT ONLY MEANS THE COUNTING STOPS AT THE SPACE  *
     ******************************************************************
          PERFORM WITH TEST AFTER
                  VARYING VTABLE-INDEX FROM 1 BY 1
                  UNTIL VTABLE-SIZE = VTABLE-INDEX
              SET ADDRESS OF TABLE-NAME   TO VTABLE-NAME(VTABLE-INDEX)
              MOVE TABLE-NAME               TO H-TABLE-NAME
              MOVE VTABLE-NAME-LENGTH(VTABLE-INDEX)
                                            TO VTABLE-CTR
              ADD 1                         TO VTABLE-CTR
              PERFORM UNTIL VTABLE-CTR > 16
                MOVE SPACE                  TO H-T-NAME (VTABLE-CTR)
                ADD 1                       TO VTABLE-CTR
              END-PERFORM
              MOVE H-TABLE-NAME             TO WS-KEYWORD-OUT
              IF WS-KEYWORD-OUT = ERROR-CHECK
                  MOVE 'Y'                  TO WS-ERROR-MSG-SW
              END-IF
              IF WS-KEYWORD-OUT = STATUS-CHECK
                  MOVE 'Y'                  TO WS-ERROR-STATUS-MSG-SW
              END-IF
              SET ADDRESS OF TABLE-VALUE
                                         TO VTABLE-VALUE(VTABLE-INDEX)
              MOVE TABLE-VALUE              TO H-TABLE-VALUE
              MOVE VTABLE-VALUE-LENGTH(VTABLE-INDEX)
                                            TO VTABLE-CTR, WS-DIS-NUM
              ADD 1                         TO VTABLE-CTR
              PERFORM UNTIL VTABLE-CTR > 29
                MOVE SPACE                  TO H-T-VALUE (VTABLE-CTR)
                ADD 1                       TO VTABLE-CTR
              END-PERFORM
              MOVE H-TABLE-VALUE            TO WS-KEY-VALUE-OUT
              MOVE WS-DIS-NUM               TO WS-KEY-VAL-LEN
              ADD 1                         TO WS-INCRINUM
              MOVE WS-INCRINUM              TO WS-KEY-MSG-NUM
              MOVE WS-KEYWORD-REC           TO LS-OUTPUT-REC
              SET SPFROM TO ADDRESS OF LS-OUTPUT-REC
              MOVE 55                       TO SPRECLEN
              CALL 'PUTPIPE' USING SPAREA
              IF SPRC NOT = '000'
                  SET ERROR-HAPPENED        TO TRUE
                  MOVE 'PUTPIPE '           TO ERROR1-CALL
                  PERFORM 800-ERROR-MESSAGE THRU 800-EXIT
              END-IF
          END-PERFORM.


      524-EXIT.
          EXIT.


      548-TEST-FOR-ERR-KEY.
     ******************************************************************
     * TEST FOR ERROR MESSAGE REQUESTED - SEND ONE IF SO.             *
     ******************************************************************
          IF SEND-TEST-ERROR-MSG
              MOVE 'N'                      TO WS-ERROR-MSG-SW
              MOVE 'THIS IS YOUR ERROR MESSAGE TEXT.'
                                            TO SPMSG
              MOVE 'ERR54321'               TO SPCODE
              PERFORM 800-ERROR-MESSAGE     THRU 800-EXIT.

      548-EXIT.
          EXIT.


      700-LOAD-KEYWORD-ERROR.
     ******************************************************************
     * IF AT LEAST ONE KEYWORD IS NOT SUPPLIED - SEND MSG AND STOP.   *
     ******************************************************************

          SET ERROR-HAPPENED                TO TRUE.
          MOVE '* ERROR - NO KEYWORDS SENT' TO SPMSG.
          MOVE 'E'                          TO SPSTATUS.
          CALL 'MESSAGE' USING SPAREA.

      700-EXIT.
          EXIT.

      800-ERROR-MESSAGE.
     ******************************************************************
     * SOMETHING FAILED, SO ISSUE AN ERROR MESSAGE AND GET OUT.       *
     ******************************************************************
          MOVE SPRC                         TO ERROR1-SPRC.
          MOVE ERROR1-MSG                   TO SPMSG.
          MOVE 'E'                          TO SPSTATUS.

          CALL 'MESSAGE' USING SPAREA.

          IF SPRC NOT = '000'
              SET ERROR-HAPPENED            TO TRUE.

      800-EXIT.
          EXIT.


      900-WRAP-UP.
     ******************************************************************
     * CLOSE PIPES - ISSUE STATUS.                                    *
     ******************************************************************

          MOVE 'OUTPUT'                     TO SPMODE.
          CALL 'CLOSPIPE' USING SPAREA.

          IF SPRC NOT = '000'
              SET ERROR-HAPPENED            TO TRUE
              MOVE 'CLOSPIPE'               TO ERROR1-CALL
              PERFORM 800-ERROR-MESSAGE     THRU 800-EXIT.

          IF NO-ERROR-YET
              IF SEND-TEST-ERR-STATUS-MSG
                  MOVE 'N'                  TO WS-ERROR-MSG-SW
                  MOVE 'THIS IS YOUR STATUS MESSAGE TEXT.'
                                            TO SPMSG
                  MOVE 'ERR12345'           TO SPCODE
                  MOVE 'E'                  TO SPSTATUS
                  CALL 'STATUS' USING SPAREA
              ELSE
                  MOVE 'OK'                 TO SPSTATUS
                  CALL 'STATUS'   USING SPAREA
                  IF SPRC NOT = '000'
                      SET ERROR-HAPPENED    TO TRUE
                      MOVE 'STATUS  '       TO ERROR1-CALL
                      PERFORM 800-ERROR-MESSAGE THRU 800-EXIT
                  END-IF
              END-IF
          END-IF.

      900-EXIT.
          EXIT.


 



Document Attributes
Last Revised: May 01, 1997
Product: Open ClientConnect, Open ServerConnect
Technical Topics: Application Development
  
Business or Technical: Technical
Content Id: 81606
Infotype: White Paper-Technical