|
Support & Downloads
Technical Documents
Document Types
White Paper-Technical
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. |
  | |
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
|

