It's about 50 years ago since I wrote Jol, the replacement or enhancement language for JCL. And it's my birthday, so I thought I might say a word or two.

One of the reasons I wrote Jol was to incorporate PL/I style IF's into the language.  And to generally simply the whole JCL process.

Now, unfortunately Google have changed the way you do websites, and so the Jol website is definitely not fully operational at the moment.  However, here is a link to the Jol IF statement: https://sites.google.com/oscar-jol.com/jol-if/home

And here is a link to the entire website: www.Oscar-Jol.com

You can read all about the IF here: https://sites.google.com/oscar-jol.com/jol-if/home

In essence, the IF Statement can:

 * Compare the values of return codes from executed programs with
   either constants or other program return codes.
 * Compare the current value of symbolic variables with constants or
   other symbolic variables.
 * Test if a program has executed or if a symbolic is declared.
 * Test if End-Of-File (EOF) has been reached on an input file opened
   by OPENFILE
 * Test if an ERROR has occurred.
 * Test the LAST and/or MAXIMUM completion code.

Jol has had other features that are just relatively new to JCL too, such as replacing symbolics in card files, a full macro language, an easy way to make full screen 3270 panels with Menus, Popups and so on.  There is a scheduling package, too.

Since it was originally written in assembler, I developed versions in C that ran under OS/2, Windows and Linux.

I would be happy to work with IBM to get it running on the latest and greatest Z/OS systems, including the Unix subsystems.  It did run AMOCO's entire computer centre for decades, and other large shops such as Shell, Air New Zealand and others.


Cheers,

Clem Clarke


Here is a small Jol job and the equivalent JCL to give you an idea of the language.

Simplified Jol Scripting Language for Z/OS, TSO, Linux and Windows

Payroll: Job class C 1000 k;
Exec Validate Input.Trans, Trans.Action(+1); /* Validate Transations */
if Validate=0
then do;
    Sort transaction(+1) to Sorted.Trans.Actions(+1)
        Fields(10,10,CH,A);
    Exec Update Payroll.Master(0), Sorted.Trans.Action(+1),
        Payroll.Master(+1);
    If Update = 0
    then do;
        Catalog Payroll.Master(+1), Sorted.Trans.Action(+1);
        Submit Job2;
    end;
end;
else Stop 'Error in PAYROLL Job';

________________________________

Equivalent Existing Job Control Language

//PAYROLL    JOB      CLASS=C,REGION=1000K
//VALIDATE   EXEC     PGM=VALIDATE
//SYSPRINT   DD       SYSOUT=*
//INTRANS    DD       DSN=INPUT.TRANS,DISP=SHR
//OUTTRANS   DD       DSN=TRANS.ACTIONS(+1),DISP=(NEW,PASS),
//                    DCB=(RECFM=VB,LRECL=200,BLKSIZE=13030),
//                    SPACE=(CYL,(10,10),RLSE),
//                    UNIT=SYSDA,VOL=SER=WORK01
//SORT       EXEC     PGM=SORT,COND=(VALIDATE,NE,0)
//SYSOUT     DD       SYSOUT=*
//SORTWK01   DD       UNIT=SYSDA,SPACE=(CYL,20)
//SORTWK02   DD       UNIT=SYSDA,SPACE=(CYL,20)
//SORTWK03   DD       UNIT=SYSDA,SPACE=(CYL,20)
//SORTIN     DD       DSN=TRANS.ACTIONS(+1),DISP=(SHR,PASS)
//SORTOUT    DD       DSN=SORTED.TRANS.ACTIONS(+1),
//                    DISP=(NEW,PASS),
//                    DCB=(RECFM=VB,LRECL=200,BLKSIZE=13030),
//                    SPACE=(CYL,(10,10),RLSE),
//                    UNIT=SYSDA,VOL=SER=WORK01
//SYSIN      DD   *
    SORT FIELDS=(10,10,CH,A)
//UPDATE     EXEC     PGM=UPDATE,COND=(VALIDATE,NE,0)
//SYSPRINT   DD       SYSOUT=*
//MASTIN     DD       DSN=PAYROLL.MASTER(0),DISP=SHR
//TRANS      DD       DSN=TRANS.ACTION(+1),DISP=(SHR,PASS)
//MASTOUT    DD       DSN=PAYROLL.MASTER(+1),DISP=(NEW,PASS),
//                    DCB=(RECFM=VB,LRECL=200,BLKSIZE=13030),
//                    SPACE=(CYL,(10,10),RLSE),
//                    UNIT=SYSDA,VOL=SER=WORK01
//CATLG      EXEC     PGM=IEFBR14,COND=(UPDATE,NE,0)
//DUMMY1     DD       DSN=PAYROLL.MASTER(+1),DISP=(SHR,CATLG)
//DUMMY2     DD       DSN=SORTED.TRANS.ACTIONS(+1),
//                    DISP=(SHR,CATLG)
//SUBMIT     EXEC     PGM=IEBGENER,COND=(UPDATE,NE,0)
//SYSPRINT   DD       SYSOUT=*
//SYSUT1     DD       DSN=SUBMIT.LIBRARY(JOB2),DISP=SHR
//SYSUT2     DD       SYSOUT=(*,INTRDR)
//SYSIN      DD       DUMMY
//ERRMSG     EXEC     PGM=SHOWERR,COND=(VALIDATE,EQ,0),
//           PARM='Error in PAYROLL Job'

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to