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