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 lists...@bama.ua.edu with the message: INFO IBM-MAIN