For anyone who would care to have source code for my little TESTPARM JCL aid,
it is reproduced below.
For the code critics: I know it could be better with UNSTRING, and it would be
trivial in PL/I or C. But as it is, it works. Improvements are for the young.
Us old-timers have only so many more clock cycles left.
John
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTPARM.
*****************************************************************
* PROGRAM NAME: TESTPARM. *
* *
* DESC: Utility to examine positional parameters within the *
* EXEC PARM string and set the RETURN-CODE accordingly. *
* Typical usage is to make the first positional value *
* a symbol. E.G. PARM='&SYM,X,Y,Z'. The program is *
* useful as a JCL AID to allow steps to be made *
* conditional depending on the value of a symbol. *
* *
* EXAMPLES: *
* (1) //S000 EXEC PGM=TESTPARM,PARM='A,B,C,D,A' will set *
* RETURN-CODE to 4. *
* (2) //S000 EXEC PGM=TESTPARM,PARM='CAT,DOG,MOOSE,CAT' *
* sets RETURN-CODE to 3. *
* (3) //S000 EXEC PGM=TESTPARM,PARM='CAT,DOG,MOOSE,FISH' *
* sets RETURN-CODE to 99. *
*****************************************************************
ENVIRONMENT DIVISION.
*===============================================================*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-VARS.
05 I PIC S9(4) COMP-5.
05 J PIC S9(4) COMP-5.
05 L PIC S9(4) COMP-5.
01 WS-SUBPARM-TABLE.
05 WS-SUBPARM-CNT PIC S9(4) COMP-5 VALUE ZERO.
05 WS-SUBPARM OCCURS 50 TIMES PIC X(8).
LINKAGE SECTION.
01 LS-PARM.
05 LS-PARM-LEN PIC S9(4) COMP-5.
05 LS-PARM-STR PIC X(100).
PROCEDURE DIVISION USING LS-PARM.
0000-MAIN.
PERFORM 1000-LOAD-TABLE.
PERFORM 2000-TABLE-LOOKUP.
GOBACK.
1000-LOAD-TABLE.
IF LS-PARM-LEN > +2 THEN
MOVE +1 TO J
PERFORM VARYING I FROM +1 BY +1 UNTIL I > +101
IF I > LS-PARM-LEN THEN
ADD +1 TO WS-SUBPARM-CNT
COMPUTE L = I - J
IF L > 0 THEN
MOVE LS-PARM-STR(J:L)
TO WS-SUBPARM(WS-SUBPARM-CNT)
ELSE
MOVE SPACES TO WS-SUBPARM(WS-SUBPARM-CNT)
END-IF
MOVE +9999 TO I
ELSE
IF LS-PARM-STR(I:1) = ',' THEN
ADD +1 TO WS-SUBPARM-CNT
COMPUTE L = I - J
IF L > 0 THEN
MOVE LS-PARM-STR(J:L)
TO WS-SUBPARM(WS-SUBPARM-CNT)
ELSE
MOVE SPACES TO WS-SUBPARM(WS-SUBPARM-CNT)
END-IF
COMPUTE J = I + 1
END-IF
END-IF
END-PERFORM
END-IF.
2000-TABLE-LOOKUP.
MOVE 99 TO RETURN-CODE.
IF WS-SUBPARM-CNT > 1 THEN
PERFORM VARYING I FROM +2 BY +1 UNTIL I > WS-SUBPARM-CNT
IF WS-SUBPARM(1) = WS-SUBPARM(I) THEN
COMPUTE RETURN-CODE = I - 1
MOVE +9999 TO I
END-IF
END-PERFORM
END-IF.
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN