DSN8SPM
THIS MODULE DISPLAYS AN APPLICATION SELECTION PANEL.
DSN8SPM: PROC OPTIONS (MAIN);
/********************************************************************/
/* MODULE NAME = DSN8SPM */
/* */
/* DESCRIPTIVE NAME = DB2 SAMPLE APPLICATION */
/* ISPF DB2 CONNECTION MANAGER */
/* ISPF/TSO */
/* PL/I */
/* */
/* LICENSED MATERIALS - PROPERTY OF IBM */
/* 5695-DB2 */
/* (C) COPYRIGHT 1982, 1995 IBM CORP. ALL RIGHTS RESERVED. */
/* */
/* STATUS = VERSION 4 */
/* */
/* FUNCTION = THIS MODULE DISPLAYS AN APPLICATION */
/* SELECTION PANEL. THE SELECTED APPLICATION */
/* IS INVOKED USING THE CALL ATTACH FACILITY. */
/* */
/* NOTES = NONE */
/* */
/* MODULE TYPE = */
/* PROCESSOR = DB2 PREPROCESSOR, PL/I COMPILER */
/* MODULE SIZE = SEE LINKEDIT */
/* ATTRIBUTES = REUSABLE */
/* */
/* ENTRY POINT = DSN8SPM */
/* PURPOSE = SEE FUNCTION */
/* LINKAGE = ISPF */
/* */
/* INPUT = PARAMETERS EXPLICITLY PASSED TO THIS PROGRAM: */
/* SYMBOLIC LABEL/NAME = NONE */
/* DESCRIPTION = NOT APPLICABLE */
/* */
/* OUTPUT = PARAMETERS EXPLICITLY RETURNED: */
/* SYMBOLIC LABEL/NAME = NONE */
/* DESCRIPTION = NOT APPLICABLE */
/* */
/* EXIT-NORMAL = RETURN CODE 0 */
/* */
/* EXIT-ERROR = */
/* RETURN CODE = NONE */
/* ABEND CODES = NONE */
/* ERROR MESSAGES = NONE */
/* */
/* DSN8080E APPLICATION TERMINATED WITH CALL ATTACH */
/* REASON CODE ........ */
/* DSN8081E RESULTS FROM THE CALL ATTACH TRANSLATE */
/* SERVICE */
/* DSN8082E THE DISCONNECT TERMINATED WITH REASON */
/* CODE ........ */
/* DSN8083E AN UNKNOWN SERVICE ............ WAS */
/* REQUESTED */
/* */
/* MESSAGES = NONE */
/* */
/* EXTERNAL REFERENCES = */
/* ROUTINES/SERVICES = ISPLINK - ISPF SERVICES */
/* DATA AREAS = NONE */
/* CONTROL BLOCKS = NONE */
/* TABLES = NONE */
/* CHANGE ACTIVITY = */
/* 03-01-94 INITIALIZE THE ISPF PANEL MESSAGE WITH BLANKS */
/* AND UPDATE COPYRIGHT INFO PN52970 KEF1040 @40 */
/* */
/* *PSEUDOCODE* */
/* */
/* DECLARATIONS */
/* INITIALIZATION */
/* DO WHILE ^EXIT */
/* DISPLAY APPLICATION SELECTION PANEL */
/* IF END IS REQUESTED THEN */
/* --DO */
/* | EXIT = YES */
/* | IF CONNECTED THEN */
/* | --DO */
/* | | DISCONNECT FROM DB2 */
/* | | IF DISCONNECT FAILED THEN */
/* | | DISPLAY LINE MODE MESSAGE */
/* | --END */
/* --END */
/* IF ^EXIT THEN */
/* --DO */
/* | IF (CONNECTED TO DB2)&(SSID ^= CONNECTED SSID) THEN */
/* | --DO */
/* | | DISCONNECT FROM DB2 */
/* | | IF DISCONNECT FAILED THEN */
/* | | --DO */
/* | | | CONTINUE = NO */
/* | | | PUT REASON CODE OUT */
/* | | --END */
/* | | ELSE */
/* | | CONNECTED = NO */
/* | --END */
/* | IF (^CONNECTED TO DB2) & (CONTINUE) THEN */
/* | --DO */
/* | | CONNECTION TO DB2 */
/* | | IF CONNECTION IS SUCCESSFUL THEN */
/* | | --DO */
/* | | | CONTINUE = YES */
/* | | | CONNECTED = YES */
/* | | --END */
/* | | ELSE */
/* | | --DO */
/* | | | CONTINUE = NO */
/* | | | PUT OUT REASON CODE */
/* | | --END */
/* | --END */
/* | IF CONTINUE THEN */
/* | --DO */
/* | | OPEN */
/* | | IF OPEN IS SUCCESSFUL THEN */
/* | | CONTINUE = YES */
/* | | ELSE */
/* | | --DO */
/* | | | TRANSLATE */
/* | | | CONTINUE = NO */
/* | | | PUT OUT REASON CODE */
/* | | --END */
/* | --END */
/* | IF CONTINUE THEN */
/* | --DO */
/* | | ISPLINK TO THE APPLICATION PROGRAM */
/* | | IF BAD RETURN THEN */
/* | | SPECIFY 'ABRT' AS THE TERMINATION OPTION */
/* | | ELSE */
/* | | SPECIFY 'SYNC' AS THE TERMINATION OPTION */
/* | --END */
/* | IF CONTINUE THEN */
/* | --DO */
/* | | CLOSE */
/* | | IF CLOSE FAILS THEN */
/* | | --DO */
/* | | | IF CAF-RESET THEN */
/* | | | CONNECTED = NO */
/* | | | PUT REASON CODE OUT */
/* | | --END */
/* | --END */
/* --END */
/* END */
/********************************************************************/
/* PROGRAM IDENTIFICATION SECTION */
%DCL COMPILETIME BUILTIN;
%DCL COMPTIME CHAR;
%COMPTIME = '''' || COMPILETIME || '''';
DCL 1 PROGRAM_ID STATIC,
2 PROGRAM_NAME CHAR(20) INIT('PROGRAM DSN8SPM '),
2 PROGRAM_VERSION CHAR(19) INIT('VERSION 5 COMPILED '),
2 PROGRAM_DATIME CHAR(18) INIT(COMPTIME); /*@40*/
DCL $$COIBM EXT CHAR(49)
INIT('COPYRIGHT = 5695-DB2 (C) COPYRIGHT IBM CORP. 1995'); /*@40*/
/********************************************************************/
/* BUILT-IN FUNCTION DECLARATIONS */
/********************************************************************/
DCL PLIRETV BUILTIN;
DCL STRING BUILTIN;
DCL STG BUILTIN;
/********************************************************************/
/* FILE DECLARATION FOR MESSAGES OUTSIDE OF ISPF */
/********************************************************************/
DCL SYSPRINT FILE;
/********************************************************************/
/* INTERNAL WORKING VARIABLE DECLARATIONS */
/********************************************************************/
DCL CONN_SSID CHAR(4) INIT(' '); /* CURRENT CONNECTED SUBSYSTEM */
DCL RET_CODE FIXED DECIMAL(4,0); /* RETURN CODE */
DCL CONNECTED BIT(1); /* CONNECTION INDICATOR */
DCL CONTINUE BIT(1); /* CONTINUE PROCESSING FLAG */
DCL EXIT BIT(1); /* EXIT REQUESTED FLAG */
/********************************************************************/
/* MISCELLANEOUS CONSTANTS */
/********************************************************************/
DCL YES BIT(1) STATIC INIT('1'B);
DCL NO BIT(1) STATIC INIT('0'B);
/********************************************************************/
/* ISPF DIALOG VARIABLE NAMES */
/********************************************************************/
DCL SSID_NAME CHAR(8) STATIC INIT('DSN8SSID');
DCL PROG_NAME CHAR(8) STATIC INIT('DSN8PROG');
DCL PLAN_NAME CHAR(8) STATIC INIT('DSN8PLAN');
DCL REAS_NAME CHAR(8) STATIC INIT('DSN8REAS');
DCL MSGS_NAME CHAR(8) STATIC INIT('DSN8MSGS');
DCL SQCA_NAME CHAR(8) STATIC INIT('DSN8SQCA');
DCL TECB_NAME CHAR(8) STATIC INIT('DSN8TECB');
DCL SECB_NAME CHAR(8) STATIC INIT('DSN8SECB');
DCL TERM_NAME CHAR(8) STATIC INIT('DSN8TERM');
DCL ACTN_NAME CHAR(8) STATIC INIT('DSN8ACTN');
DCL SERV_NAME CHAR(8) STATIC INIT('DSN8SERV');
/********************************************************************/
/* CALL ATTACH 'CLOSE THREAD' TERMINATION OPTIONS */
/********************************************************************/
DCL SYNC CHAR(4) STATIC INIT('SYNC');
DCL ABRT CHAR(4) STATIC INIT('ABRT');
/********************************************************************/
/* ISPF DIALOG SERVICES DECLARATIONS */
/********************************************************************/
/* ISPF DIALOG SERVICE TYPES */
DCL I_VDEFINE CHAR(8) STATIC INIT('VDEFINE ');
DCL I_VGET CHAR(8) STATIC INIT('VGET ');
DCL I_VPUT CHAR(8) STATIC INIT('VPUT ');
DCL I_DISPLAY CHAR(8) STATIC INIT('DISPLAY ');
DCL I_SELECT CHAR(8) STATIC INIT('SELECT ');
/* ISPF CALL MODIFIERS */
DCL I_CHAR CHAR(8) STATIC INIT('CHAR');
DCL I_FIXD CHAR(8) STATIC INIT('FIXED');
/* PANEL NAME */
DCL MAIN_MENU CHAR(8) STATIC INIT('DSN8SSM');
/* LOCAL VARIABLES FOR ISPF VARIABLES */
DCL SSID CHAR(4) INIT(' '); /* SUBSYSTEM ID */
DCL PROGRAM CHAR(8); /* PROGRAM NAME */
DCL PLAN CHAR(8); /* PLAN NAME */
DCL REASON CHAR(8); /* CAF REASON CODE */
DCL TECB FIXED BIN(31) INIT(0); /* TERMINATION ECB */
DCL SECB FIXED BIN(31) INIT(0); /* START ECB */
DCL TERM CHAR(4); /* TERMINATION OPTION */
DCL ACTN CHAR(12); /* CAF SERVICE REQUEST */
DCL 1 MSGS CHAR(71) INIT(' '); /* INIT ISPF PANEL MESSAGE @40*/
/* CALL ATTACH FACILITY ASSEMBLER INTERFACE PROGRAM */
DCL 1 PGMCA,
2 FILLER1 CHAR(11) INIT('PGM(DSN8CA)');
DCL PGMCA_LEN FIXED BIN(31) INIT(STG(PGMCA));
/* APPLICATION PROGRAM */
DCL 1 APPL_PGM,
2 FILLER1 CHAR(04) INIT('PGM('),
2 APPL_NAME CHAR(08),
2 FILLER2 CHAR(01) INIT(')');
DCL APPL_LEN FIXED BIN(31) INIT(STG(APPL_PGM));
/* GENERAL ERROR MESSAGE */
DCL 1 MSG1,
2 MSG_NUM CHAR(09) INIT(' DSN8080E'),
2 FILLER1 CHAR(01) INIT(' '),
2 MSG_TEXT CHAR(51) INIT
('APPLICATION TERMINATED WITH CALL ATTACH REASON CODE'),
2 FILLER2 CHAR(01) INIT(' '),
2 MSG_REAS CHAR(08) INIT(' '),
2 FILLER3 CHAR(01) INIT(' ');
/* DISCONNECT ERROR MESSAGE */
DCL 1 DISC_MSG,
2 DISC_NUM CHAR(09) INIT(' DSN8082E'),
2 FILLER1 CHAR(03) INIT(' '),
2 DISC_TEXT CHAR(42) INIT
('THE DISCONNECT TERMINATED WITH REASON CODE'),
2 FILLER2 CHAR(01) INIT(' '),
2 DISC_REAS CHAR(08) INIT(' '),
2 FILLER3 CHAR(08) INIT(' ');
/* TRANSLATE MESSAGE */
DCL 1 TRAN_MSG,
2 TRAN_NUM CHAR(09) INIT(' DSN8081E'),
2 FILLER1 CHAR(03) INIT(' '),
2 TRAN_TEXT CHAR(46) INIT
('RESULTS FROM THE CALL ATTACH TRANSLATE SERVICE'),
2 FILLER2 CHAR(13) INIT(' ');
/* INVALID SERVICE REQUEST MESSAGE */
DCL 1 BADFN_MSG,
2 FN_NUM CHAR(09) INIT(' DSN8083E'),
2 FILLER1 CHAR(03) INIT(' '),
2 FN_TEXT1 CHAR(19) INIT
('AN UNKNOWN SERVICE '),
2 SERV CHAR(12) INIT(' '),
2 FN_TEXT2 CHAR(14) INIT
(' WAS REQUESTED'),
2 FILLER2 CHAR(14) INIT(' ');
/********************************************************************/
/* CALL ATTACH FACILITY SERVICES DECLARATIONS */
/********************************************************************/
DCL CONN_FN CHAR(12) INIT('CONNECT ');
DCL OPEN_FN CHAR(12) INIT('OPEN ');
DCL CLOS_FN CHAR(12) INIT('CLOSE ');
DCL DISC_FN CHAR(12) INIT('DISCONNECT ');
DCL XLAT_FN CHAR(12) INIT('TRANSLATE ');
/********************************************************************/
/* REASON CODE WHEN CAF HAS CLEANED UP AFTER DB2 HAS BEEN DOWN */
/********************************************************************/
DCL CAF_RES CHAR(08) INIT('00C10824');
/********************************************************************/
/* SQL COMMUNICATION AREA */
/********************************************************************/
EXEC SQL INCLUDE SQLCA;
/********************************************************************/
/* EXTERNAL ENTRY DECLARATION */
/********************************************************************/
DCL ISPLINK EXTERNAL ENTRY OPTIONS(ASM INTER RETCODE);
/********************************************************************/
/* DEFINE PL/I - SPF VARIABLES */
/********************************************************************/
CALL ISPLINK(I_VDEFINE, SSID_NAME, SSID , I_CHAR, STG(SSID ));
CALL ISPLINK(I_VDEFINE, PROG_NAME, PROGRAM , I_CHAR, STG(PROGRAM ));
CALL ISPLINK(I_VDEFINE, PLAN_NAME, PLAN , I_CHAR, STG(PLAN ));
CALL ISPLINK(I_VDEFINE, MSGS_NAME, MSGS , I_CHAR, STG(MSGS ));
CALL ISPLINK(I_VDEFINE, REAS_NAME, REASON , I_CHAR, STG(REASON ));
CALL ISPLINK(I_VDEFINE, SQCA_NAME, SQLCA , I_CHAR, STG(SQLCA ));
CALL ISPLINK(I_VDEFINE, TECB_NAME, TECB , I_FIXD, STG(TECB ));
CALL ISPLINK(I_VDEFINE, SECB_NAME, SECB , I_FIXD, STG(SECB ));
CALL ISPLINK(I_VDEFINE, TERM_NAME, TERM , I_CHAR, STG(TERM ));
CALL ISPLINK(I_VDEFINE, ACTN_NAME, ACTN , I_CHAR, STG(ACTN ));
CALL ISPLINK(I_VDEFINE, SERV_NAME, SERV , I_CHAR, STG(SERV ));
/********************************************************************/
/* INITIALIZATION */
/********************************************************************/
CONNECTED = NO; /* NOT INITIALLY CONNECTED */
EXIT = NO; /* EXIT NOT PRESSED */
CALL ISPLINK(I_VGET, SSID_NAME); /* GET SSID FROM ISPF POOL */
IF SSID = ' ' THEN SSID = 'DSN'; /* DEFAULT SSID */
/********************************************************************/
/* DISPLAY SELECTION PANEL UNTIL EXIT REQUESTED */
/********************************************************************/
DO WHILE (^EXIT);
CONTINUE = YES; /* RESET THE CONTINUE FLAG */
CALL ISPLINK(I_VPUT, MSGS_NAME); /* SET/RESET MSG ON PANEL */
CALL ISPLINK(I_DISPLAY, MAIN_MENU); /* DISPLAY SELECTION PANEL */
RET_CODE = PLIRETV;
IF RET_CODE = 8 THEN /* EXIT REQUESTED? */
DO;
EXIT = YES; /* SET EXIT FLAG */
/**************************************************************/
/* IF CONNECTED TO DB2, DISCONNECT */
/**************************************************************/
IF CONNECTED THEN /* IF CONNECTED TO DB2 */
DO;
ACTN = DISC_FN; /* DISCONNECT FROM DB2 */
CALL ISPLINK(I_VPUT, ACTN_NAME);
CALL ISPLINK(I_SELECT, PGMCA_LEN, PGMCA);
RET_CODE = PLIRETV;
/**********************************************************/
/* IF THE DISCONNECT IS NOT SUCCESSFUL THEN PUT OUT AN */
/* ERROR MESSAGE */
/**********************************************************/
IF RET_CODE ^= 0 THEN /* DISC FAILED */
DO;
CALL ISPLINK(I_VGET, REAS_NAME); /* GET REASON CODE */
DISC_REAS = REASON;
PUT SKIP LIST(STRING(DISC_MSG)); /* PUT OUT MESSAGE */
END;
ELSE /* DISCONNECT WAS SUCCESSFUL */
CONNECTED = NO; /* NO LONGER CONNECTED TO DB2 */
END; /* END IF CONNECTED */
END; /* END IF EXIT REQUESTED */
/****************************************************************/
/* IF EXIT NOT REQUESTED, PROCESS THE REQUEST */
/****************************************************************/
IF ^EXIT THEN
DO;
CALL ISPLINK(I_VGET, SSID_NAME); /* GET SSID FROM PANEL */
MSGS = ' '; /* RESET MESSAGE FIELD */
/************************************************************/
/* IF ALREADY CONNECTED TO A DIFFERENT SUBSYSTEM, DISCONNECT*/
/************************************************************/
IF CONNECTED & (SSID ^= CONN_SSID) THEN
DO;
ACTN = DISC_FN; /* DISCONNECT FROM DB2 */
CALL ISPLINK(I_VPUT, ACTN_NAME);
CALL ISPLINK(I_SELECT, PGMCA_LEN, PGMCA);
RET_CODE = PLIRETV;
/********************************************************/
/* IF DISCONNECT IS NOT SUCCESSFUL THEN PUT OUT AN */
/* ERROR MESSAGE */
/********************************************************/
IF RET_CODE ^= 0 THEN /* IF DISC FAILED */
DO;
CONTINUE = NO; /* DO NOT PROCESS FURTHER */
CALL ISPLINK(I_VGET, REAS_NAME);
DISC_REAS = REASON;
MSGS = STRING(DISC_MSG); /* FILL THE MESSAGE FIELD */
END; /* END IF DISC FAILED */
ELSE /* DISCONNECT SUCCESSFUL */
CONNECTED = NO; /* NO LONGER CONNECTED */
END; /* END IF DIFF DB2 CONN */
/************************************************************/
/* IF NOT CONNECTED, MAKE THE CONNECTION */
/************************************************************/
IF ^CONNECTED & CONTINUE THEN /* TRY CONNECT TO DB2 */
DO;
ACTN = CONN_FN; /* CONNECT TO DB2 */
CALL ISPLINK(I_VPUT, ACTN_NAME);
CALL ISPLINK(I_SELECT, PGMCA_LEN, PGMCA);
RET_CODE = PLIRETV;
/********************************************************/
/* IF CONNECT IS SUCCESSFUL THEN SET FLAGS AND SAVE */
/* THE SSID THAT IS CURRENTLY CONNECTED */
/********************************************************/
IF RET_CODE = 0 THEN /* CONNECT SUCCESSFUL */
DO;
CONN_SSID = SSID; /* SAVE CONNECTED SSID */
CONTINUE = YES; /* CONTINUE TO PROCESS */
CONNECTED = YES; /* CONNECTED TO DB2 */
END; /* END CONN SUCCESSFUL */
/********************************************************/
/* THE CONNECT FAILED. FILL THE MESSAGE FIELD WITH */
/* AN ERROR MESSAGE */
/********************************************************/
ELSE /* CONNECT FAILED */
DO;
CONTINUE = NO; /* STOP PROCESSING */
CALL ISPLINK(I_VGET, REAS_NAME);
MSG_REAS = REASON;
MSGS = STRING(MSG1); /* FILL MESSAGE FIELD */
END; /* END CONNECT FAILED */
END; /* END TRY DB2 CONN */
/************************************************************/
/* IF CONTINUE, OPEN DB2 THREAD */
/************************************************************/
IF CONTINUE THEN /* DB2 CONNECTION MADE */
DO; /* TRY TO OPEN THREAD */
ACTN = OPEN_FN; /* OPEN A THREAD */
CALL ISPLINK(I_VPUT, ACTN_NAME);
CALL ISPLINK(I_SELECT, PGMCA_LEN, PGMCA);
RET_CODE = PLIRETV;
IF RET_CODE = 0 THEN /* OPEN SUCCESSFUL */
CONTINUE = YES; /* PROCESS FURTHER */
/********************************************************/
/* THE OPEN FAILED. REQUEST THE CALL ATTACH FACILITY */
/* TRANSLATE SERVICE TO OBTAIN MORE INFORMATION ABOUT */
/* THE OPEN FAILURE. THE SQLCA WILL BE DISPLAYED. */
/********************************************************/
ELSE /* OPEN FAILED */
DO;
CONTINUE = NO; /* STOP PROCESSING */
CALL ISPLINK(I_VGET, REAS_NAME);
MSG_REAS = REASON;
MSGS = STRING(MSG1);
ACTN = XLAT_FN; /* TRANSLATE */
CALL ISPLINK(I_VPUT, ACTN_NAME);
CALL ISPLINK(I_VPUT, SQCA_NAME);
CALL ISPLINK(I_SELECT, PGMCA_LEN, PGMCA);
PUT SKIP LIST(STRING(TRAN_MSG)); /* FILL MSG FLD */
CALL ISPLINK(I_VGET, SQCA_NAME); /* GET SQLCA */
PUT SKIP DATA(SQLCA); /* DISPLAY SQLCA */
END; /* END OPEN FAIL */
END; /* END TRY OPEN THREAD */
/************************************************************/
/* IF CONTINUE, CALL THE APPLICATION PROGRAM */
/************************************************************/
IF CONTINUE THEN /* LINK TO APPL PGM */
DO;
CALL ISPLINK(I_VGET, PROG_NAME);
APPL_PGM.APPL_NAME = PROGRAM;
CALL ISPLINK(I_SELECT, APPL_LEN, APPL_PGM);
RET_CODE = PLIRETV;
/********************************************************/
/* IF THE RETURN CODE FROM THE APPLICATION IS NOT ZERO */
/* THE APPLICATION ENCOUNTERED ERRORS. THE OPTION IN */
/* CLOSING THE THREAD SHOULD SPECIFY ROLLBACK. IF THE */
/* RETURN CODE IS ZERO, THE OPTION IN CLOSING THE */
/* THREAD SHOULD SPECIFY COMMIT. */
/********************************************************/
IF RET_CODE ^= 0 THEN /* PROBLEMS IN APPL */
TERM = ABRT; /* ROLLBACK OPTION */
ELSE
TERM = SYNC; /* COMMIT OPTION */
CALL ISPLINK(I_VPUT, TERM_NAME);
CALL ISPLINK(I_VGET, MSGS_NAME); /* WAS MSG SET BY APPL?*/
END; /* END LINK TO APPL */
/************************************************************/
/* IF CONTINUE, CLOSE THE DB2 THREAD */
/************************************************************/
IF CONTINUE THEN /* TRY CLOSE THREAD */
DO;
ACTN = CLOS_FN; /* CLOSE THE THREAD */
CALL ISPLINK(I_VPUT, ACTN_NAME);
CALL ISPLINK(I_SELECT, PGMCA_LEN, PGMCA);
RET_CODE = PLIRETV;
/********************************************************/
/* THE CLOSE FAILED. IF THE REASON CODE IS 00C10824 */
/* THE CALL ATTACH FACILITY WILL RESET THE CONTROL */
/* BLOCKS. THIS MEANS THAT THE CONNECTION TO DB2 NO */
/* LONGER EXISTS. */
/********************************************************/
IF RET_CODE > 0 THEN /* CLOSE FAILED */
DO;
CALL ISPLINK(I_VGET, REAS_NAME);
IF REASON = CAF_RES THEN /* REASON = CAF RESET? */
CONNECTED = NO; /* NO DB2 CONNECTION */
MSG_REAS = REASON;
MSGS = STRING(MSG1); /* FILL MESSAGE FIELD */
END; /* END CLOSE FAILED */
END; /* END TRY TO CLOSE */
END; /* END IF ^EXIT */
/*******************************************************************/
/* A SERVICE WAS REQUESTED THAT WAS NOT RECOGNIZED AS A VALID */
/* SERVICE REQUEST */
/*******************************************************************/
IF RET_CODE = 11 THEN /* UNKNOWN SERVICE REQ */
DO;
CALL ISPLINK(I_VGET, SERV_NAME);
MSGS = STRING(BADFN_MSG); /* FILL MESSAGE FIELD */
END; /* END UNKNOWN SERVICE */
END; /* END WHILE ^EXIT */
END DSN8SPM;