There is something strange about return code when you use ISPF service calls. This article will outline the steps taken and code involved so you may trace this development effort with me.
Below is the listing of the invoking clist.
[codesyntax lang=”text”]
PROC 0 CONTROL LIST FREE FI(FSOUT SYSOUT) ALLOC FI(FSOUT) DA(TST) SHR ALLOC FI(SYSOUT) DA(OUT) SHR CALL 'AMBMVS.PDS.LOAD(ABM00003)' FREE FI(FSOUT SYSOUT)
[/codesyntax]
Our main program is listed below.
[codesyntax lang=”cobol”]
000100 IDENTIFICATION DIVISION. 00010000 000200 PROGRAM-ID. BCSCOB01. 00020000 000300 AUTHOR. ARCH BROOKS. 00030000 000400 INSTALLATION BROOKS COMPUTING SYSTEMS, LLC. 00040000 000500 DATE-WRITTEN. 09/18/2014. 00050000 000600 DATE-COMPILED. 09/18/2014. 00060000 000700 ENVIRONMENT DIVISION. 00070000 000800 CONFIGURATION SECTION. 00080000 000900 SOURCE-COMPUTER. IBM-Z-OS. 00090000 001000 OBJECT-COMPUTER. IBM-Z-OS. 00100000 001100 DATA DIVISION. 00110000 001200 WORKING-STORAGE SECTION. 00120000 001210 01 CMDBUF PIC X(500). 00121000 001220 01 RC PIC S9(4) COMP. 00122008 001230 01 OUT-AREA. 00123004 001240 05 RECVAL PIC 9(5). 00124008 001250 05 FILLER PIC X. 00125004 001260 05 MSG PIC X(74). 00126004 001300 PROCEDURE DIVISION. 00130000 001301 CALL 'ABS00003'. 00130104 001302 MOVE 'EDIT DATASET(PDS.COBOL(ABS00004))' TO CMDBUF. 00130203 001310 CALL 'ABS00001' USING CMDBUF RC. 00131003 001311 MOVE RC TO RECVAL. 00131104 001312 MOVE 'FIRST CALL TO ROUTINE' TO MSG. 00131204 001320 CALL 'ABS0003A' USING OUT-AREA. 00132005 001321 MOVE 'EDIT DATASET(PDS.COBOL(ABS00004)' TO CMDBUF. 00132104 001322 CALL 'ABS00001' USING CMDBUF RC. 00132204 001323 MOVE RC TO RECVAL. 00132304 001324 MOVE 'SECOND CALL TO ROUTINE' TO MSG. 00132404 001325 CALL 'ABS0003A' USING OUT-AREA. 00132505 001330 CALL 'ABS0003B'. 00133004 001400 GOBACK. 00140000
[/codesyntax]
Sub routine ABS00003 performs physical sequential output to a fixed block logical record length of 80 characters.
[codesyntax lang=”cobol”]
000100 IDENTIFICATION DIVISION. 00010000 000200 PROGRAM-ID. ABS00003. 00020000 000300 AUTHOR. ARCH BROOKS. 00030000 000400 INSTALLATION BROOKS COMPUTING SYSTEMS, LLC. 00040000 000500 DATE-WRITTEN. 09/15/2014. 00050000 000600 DATE-COMPILED. 09/15/2014. 00060000 000700 ENVIRONMENT DIVISION. 00070000 000710 INPUT-OUTPUT SECTION. 00071000 000720 FILE-CONTROL. 00072000 000730 SELECT F-FILE ASSIGN TO UT-S-FSOUT 00073000 000740 ORGANIZATION IS SEQUENTIAL. 00074000 000750 DATA DIVISION. 00075000 000760 FILE SECTION. 00076000 000770 FD F-FILE 00077000 000780 DATA RECORD IS F-RECORD 00078000 000781 BLOCK CONTAINS 0 RECORDS 00078103 000790 RECORDING MODE IS F. 00079000 000900 01 F-RECORD PIC X(80). 00090000 001000 WORKING-STORAGE SECTION. 00100000 001100 LINKAGE SECTION. 00110000 001200 01 EOF-SW PIC X. 00120000 001210 01 LSBUF PIC X(80). 00121000 001220 PROCEDURE DIVISION. 00122000 001230 OPEN OUTPUT F-FILE. 00123000 001240 GOBACK. 00124000 001250 ENTRY 'ABS0003A' USING LSBUF. 00125004 001251 WRITE F-RECORD FROM LSBUF. 00125100 001280 GOBACK. 00128000 001290 ENTRY 'ABS0003B'. 00129001 001300 CLOSE F-FILE. 00130000 001400 GOBACK. 00140000
[/codesyntax]
Here is the source code that issues the ISPF command to make the dialog function.
[codesyntax lang=”cobol”]
000100 IDENTIFICATION DIVISION. 00010000 000200 PROGRAM-ID. ABS00001. 00020000 000300 AUTHOR. ARCH BROOKS. 00030000 000400 INSTALLATION BROOKS COMPUTING SYSTEMS, LLC. 00040000 000500 DATE-WRITTEN. 09/18/2014. 00050009 000600 DATE-COMPILED. 09/18/2014. 00060009 000700 ENVIRONMENT DIVISION. 00070000 000800 CONFIGURATION SECTION. 00080000 000900 SOURCE-COMPUTER. IBM-Z-OS. 00090000 001000 OBJECT-COMPUTER. IBM-Z-OS. 00100000 001100 DATA DIVISION. 00110000 001200 WORKING-STORAGE SECTION. 00120000 001210 01 RVAL PIC 9999. 00121024 001300 01 RCL PIC S9(5) COMP. 00130020 001400 01 OBUF. 00140021 001500 05 RET PIC 9999. 00150021 001510 05 FILLER PIC X. 00151021 001520 05 MSG PIC X(75). 00152021 001600 LINKAGE SECTION. 00160000 001700 01 COMD PIC X(500). 00170000 001710 01 RC PIC S9(4) COMP. 00171019 001800 PROCEDURE DIVISION USING COMD RC. 00180010 001900 CALL 'ABS00004' USING COMD, RCL. 00190024 001930 CALL 'ISPEXEC' USING RCL, COMD. 00193025 001931 DISPLAY 'RETURN CODE IS *' RETURN-CODE '*'. 00193127 001933 MOVE RETURN-CODE TO RET. 00193325 001934 MOVE RETURN-CODE TO RC. 00193426 001935 MOVE 'IN SUBROUTINE' TO MSG. 00193522 001936 CALL 'ABS0003A' USING OBUF. 00193622 002000 GOBACK. 00200000
[/codesyntax]
Notice the display statement immediately after calling ISPEXEC. It also indicates the return code is 4.
Next we will view the code that determines the usable length of the command string in the 500 byte command buffer.
[codesyntax lang=”cobol”]
000100 IDENTIFICATION DIVISION. 00010000 000200 PROGRAM-ID. ABS00004 00020000 000300 AUTHOR. ARCH BROOKS. 00030000 000400 INSTALLATION BROOKS COMPUTING SYSTEMS, LLC. 00040000 000500 DATE-WRITTEN. 09/18/2014. 00050000 000600 DATE-COMPILED. 09/18/2014. 00060000 000700 ENVIRONMENT DIVISION. 00070000 000800 CONFIGURATION SECTION. 00080000 000900 SOURCE-COMPUTER. IBM-Z-OS. 00090000 001000 OBJECT-COMPUTER. IBM-Z-OS. 00100000 001100 DATA DIVISION. 00110000 001200 WORKING-STORAGE SECTION. 00120000 001210 LINKAGE SECTION. 00121000 001211 01 FSBUF PIC X(500). 00121100 001212 01 FSBUF-RED REDEFINES FSBUF. 00121200 001213 05 BS PIC X OCCURS 500 TIMES. 00121300 001214 01 BC PIC S9(5) COMP. 00121404 001215 PROCEDURE DIVISION USING FSBUF BC. 00121500 001250 PERFORM 0010-FIND-NS VARYING BC FROM 500 BY -1 00125000 001260 UNTIL ((BS (BC) NOT EQUAL SPACES) OR 00126002 001270 (BC IS LESS THAN 2)). 00127003 001320 GOBACK. 00132000 001330 0010-FIND-NS. 00133000
[/codesyntax]
I am sure there is a logical explanation to this problem but right now I do no know what it is.
I am including the compiled listing for ABS00001 to show the compile options used. The options are the same for all the compiled programs.
[codesyntax lang=”cobol”]
1PP 5655-S71 IBM Enterprise COBOL for z/OS 4.1.0 Date 09/19/2014 Time 06:04:26 Page 1 0Invocation parameters: VBREF 0Options in effect: NOADATA ADV QUOTE ARITH(COMPAT) NOAWO BUFSIZE(4096) NOCICS CODEPAGE(1140) NOCOMPILE(S) NOCURRENCY DATA(31) NODATEPROC DBCS NODECK NODIAGTRUNC NODLL NODUMP NODYNAM NOEXIT NOEXPORTALL NOFASTSRT FLAG(I,I) NOFLAGSTD INTDATE(ANSI) LANGUAGE(EN) NOLIB LINECOUNT(60) NOLIST NOMAP NOMDECK NONAME NSYMBOL(NATIONAL) NONUMBER NUMPROC(NOPFD) OBJECT NOOFFSET NOOPTIMIZE OUTDD(SYSOUT) PGMNAME(COMPAT) RENT RMODE(AUTO) SEQUENCE SIZE(MAX) SOURCE SPACE(1) NOSQL SQLCCSID NOSSRANGE NOTERM NOTEST NOTHREAD TRUNC(STD) VBREF NOWORD 1PP 5655-S71 IBM Enterprise COBOL for z/OS 4.1.0 Date 09/19/2014 Time 06:04:26 Page 2 0 XMLPARSE(XMLSS) XREF(FULL) YEARWINDOW(1900) ZWB 1PP 5655-S71 IBM Enterprise COBOL for z/OS 4.1.0 ABS00002 Date 09/19/2014 Time 06:04:26 Page 3 LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7-|--+----8 Map and Cross Reference 0 000001 000100 IDENTIFICATION DIVISION. 00010000 000002 000200 PROGRAM-ID. ABS00002. 00020000 000003 000300 AUTHOR. ARCH BROOKS. 00030000 000004 000400 INSTALLATION BROOKS COMPUTING SYSTEMS, LLC. 00040000 000005 000500 DATE-WRITTEN. 09/15/2014. 00050000 000006 000600 DATE-COMPILED. 09/19/14. 00060000 000007 000700 ENVIRONMENT DIVISION. 00070000 000008 000710 INPUT-OUTPUT SECTION. 00071000 000009 000720 FILE-CONTROL. 00072000 000010 000730 SELECT V-FILE ASSIGN TO UT-S-VSINP 00073021 14 000011 000740 ORGANIZATION IS SEQUENTIAL. 00074002 000012 001100 DATA DIVISION. 00110000 000013 001110 FILE SECTION. 00111000 000014 001120 FD V-FILE 00112005 000015 001121 DATA RECORD IS V-RECORD 00112116 * 000016 001122 BLOCK CONTAINS 0 RECORDS 00112224 000017 001123 RECORDING MODE IS V 00112310 000018 001124 RECORD IS VARYING IN SIZE FROM 1 TO 255 DEPENDING ON REC-LEN.00112426 * 000019 001130 01 V-RECORD PIC X(255). 00113026 000020 001200 WORKING-STORAGE SECTION. 00120000 000021 001201 01 REC-LEN PIC 9(5). 00120125 000022 001210 LINKAGE SECTION. 00121000 000023 001211 01 EOF-SW PIC X. 00121120 000024 001220 01 LSBUF PIC X(80). 00122000 000025 001300 PROCEDURE DIVISION. 00130020 000026 001310 OPEN INPUT V-FILE. 00131006 14 000027 001400 GOBACK. 00140000 000028 001500 ENTRY 'ABS0002A' USING LSBUF, EOF-SW. 00150020 24 23 000029 001600 READ V-FILE INTO LSBUF 00160000 14 24 000030 1 001700 AT END MOVE 'X' TO EOF-SW. 00170000 23 000031 001800 GOBACK. 00180000 000032 001900 ENTRY 'ABS0002B'. 00190022 000033 002000 CLOSE V-FILE. 00200000 14 000034 002100 GOBACK. 00210000 1PP 5655-S71 IBM Enterprise COBOL for z/OS 4.1.0 ABS00002 Date 09/19/2014 Time 06:04:26 Page 4 0 Count Cross-reference of verbs References 1 CLOSE. . . . . . . . . . . . . 33 2 ENTRY. . . . . . . . . . . . . 28 32 3 GOBACK . . . . . . . . . . . . 27 31 34 1 MOVE . . . . . . . . . . . . . 30 1 OPEN . . . . . . . . . . . . . 26 1 READ . . . . . . . . . . . . . 29 1PP 5655-S71 IBM Enterprise COBOL for z/OS 4.1.0 ABS00002 Date 09/19/2014 Time 06:04:26 Page 5 0An "M" preceding a data-name reference indicates that the data-name is modified by this reference. Defined Cross-reference of data names References 23 EOF-SW . . . . . . . . . . . . 28 M30 24 LSBUF. . . . . . . . . . . . . 28 M29 21 REC-LEN. . . . . . . . . . . . 18 14 V-FILE . . . . . . . . . . . . 10 26 29 33 19 V-RECORD 1PP 5655-S71 IBM Enterprise COBOL for z/OS 4.1.0 ABS00002 Date 09/19/2014 Time 06:04:26 Page 6 0 Defined Cross-reference of programs References 2 ABS00002 -* Statistics for COBOL program ABS00002: * Source records = 34 * Data Division statements = 4 * Procedure Division statements = 9 0End of compilation 1, program ABS00002, no statements flagged. 0Return code 0
[/codesyntax]
Mr. Arch Brooks, Software Engineer, Brooks Computing Systems, LLC authored this article.