Compile & Execute, COBOL / C / Java / Rexx / Shell in Mainframe MVS / OMVS

Sourav K Sahu
5 min readJul 23, 2022

A sample COBOL program named CBLHELLO

        IDENTIFICATION DIVISION.      
PROGRAM-ID. HELLO .
PROCEDURE DIVISION.
DISPLAY "COBOL SAYS HELLO!".
GOBACK.

JCL to compile & execute the COBOL program named CBLHELLO

//* generate COBOL executable to default load lib
//COMPILE EXEC IGYWCL,MBR=CBLHELLO
//*
//* execute COBOL executable from default load lib
//RUN EXEC PGM=CBLHELLO
//STEPLIB DD DSN=&SYSUID..LOAD,DISP=SHR

TSO command to execute COBOL executable from default load lib

TSO CALL LOAD(CBLHELLO)

A sample C program named CHELLO

# include <stdio.h>            
int main() {
printf("C says Hello!");
}

JCL to compile & execute the C program named CHELLO

//* generate C executable to default load lib
//COMPILE EXEC IGYWCL,MBR=CHELLO
//*
//* execute C executable from default load lib
//RUN EXEC PGM=CHELLO
//STEPLIB DD DSN=&SYSUID..LOAD,DISP=SHR

TSO command to execute C executable from default load lib

TSO CALL LOAD(CHELLO)

A sample Java program named pgmjava.java

public class pgmjava {                         
public static void main(String[] args) {

System.out.println("Java says Hello!");
}
}

JCL to compile & execute the Java program named pgmjava.java

//* generate Java executable to default load lib
//COMPILE EXEC PGM=BPXBATCH,
// PARM='sh javac pgmjava.java'
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//CEEDUMP DD DUMMY
//*
//* execute Java executable from default load lib
//RUN EXEC PGM=BPXBATCH,REGION=0M,
// PARM='sh java pgmjava'
//STDOUT DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//STDERR DD SYSOUT=*
//CEEDUMP DD DUMMY

compile & execute the Java program named pgmjava.java inside OMVS

javac pgmjava.javajava pgmjava

A sample shell script named shellhello.sh

#!/bin/bash
echo "Shell Says Hello"

JCL to execute the shell program named shellhello.sh

//* execute shell executable from default load lib
//RUN EXEC PGM=BPXBATCH,REGION=0M,
// PARM='sh shellhello.sh'
//STDOUT DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//STDERR DD SYSOUT=*
//CEEDUMP DD DUMMY

compile & execute the Java program named pgmjava.java inside OMVS

sh shellhello.sh

A sample Rexx program named REXXPGM

/* REXX */say add(5,6)
exit

add:
parse arg a,b
return a + b

JCL to execute the Rexx program named REXXPGM (compilation not required)

//* execute Rexx 
//RUN EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
EX &SYSUID..LOAD(REXXPGM)
ICH408I
/*

TSO command to execute Rexx program named REXXPGM

EX C11111..LOAD(REXXPGM)

A sample COBOL program named CBLFILE with i/o files

              *-----------------------                  
IDENTIFICATION DIVISION.
*-----------------------
PROGRAM-ID. CBLFILE.

ENVIRONMENT DIVISION.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT REC-OUT ASSIGN TO RECOUT.
SELECT REC-IN ASSIGN TO RECIN
ORGANIZATION IS SEQUENTIAL.
*
DATA DIVISION.
FILE SECTION.
FD REC-IN RECORDING MODE F.
01 REC-IN-MSG PIC X(80).
*
FD REC-OUT RECORDING MODE F.
01 REC-OUT-MSG PIC X(80).
*
WORKING-STORAGE SECTION.
01 FLAGS.
05 LASTREC PIC X VALUE SPACE.
88 LAST-REC VALUE "N".
*
PROCEDURE DIVISION.
OPEN-FILES.
OPEN INPUT REC-IN.
OPEN OUTPUT REC-OUT.
*
READ-NEXT-RECORD.
PERFORM UNTIL LAST-REC
PERFORM READ-RECORD
PERFORM STOP-AT-LAST-RECORD
PERFORM CHANGE-RECORD
PERFORM WRITE-RECORD
END-PERFORM.
*
READ-RECORD.
READ REC-IN
AT END SET LAST-REC TO TRUE
END-READ.
*
STOP-AT-LAST-RECORD.
IF LAST-REC THEN
CLOSE REC-IN
CLOSE REC-OUT
STOP RUN.
*
CHANGE-RECORD.
INSPECT REC-IN-MSG
REPLACING ALL "??? ?" by "IBM Z".
*
WRITE-RECORD.
MOVE REC-IN-MSG TO REC-OUT-MSG
WRITE REC-OUT-MSG.
*

JCL to compile & execute the COBOL program named CBLFILE with i/o files

//* generate COBOL executable to default load lib
//COMPILE EXEC IGYWCL,MBR=CBLFILE
//*
//* execute COBOL executable from default load lib
//RUN EXEC PGM=CBLFILE
//STEPLIB DD DSN=&SYSUID..LOAD,DISP=SHR
//*
//RECIN DD DSN=dataset1,DISP=SHR
//*
//RECOUT DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//CEEDUMP DD DUMMY

A sample C program named CFILE with i/o files

#include <stdio.h>                                  
#include <string.h>
int main ()
{
FILE *iFile, *oFile;
char recLine [80];
char * chLine;
oFile = fopen ("DD:RECOUT","w");
iFile = fopen ("DD:RECIN","r");
if (iFile==NULL) perror ("Error opening file");
else
{
do {
fgets (recLine,80,iFile);
chLine = strstr (recLine,"###");
strncpy (chLine,"x86",3);
fputs (recLine,oFile);
} while (recLine == NULL);
fclose (iFile);
fclose (oFile);
}
return 0;
}

JCL to compile & execute the C program named CFILE with i/o files

//* generate C executable to default load lib
//COMPILE EXEC CBCXCB,MBR=CFILE
//*
//* execute C executable from default load lib
//RUN EXEC PGM=CFILE
//STEPLIB DD DSN=&SYSUID..LOAD,DISP=SHR
//RECIN DD DSN=dataset1,DISP=SHR
//RECOUT DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//CEEDUMP DD DUMMY

A sample Java program named javafile.java with i/o files

import com.ibm.jzos.ZFile;                                           
public class javafile {

public static void main(String[] args) throws Exception {

ZFile zFileIn = new ZFile("//DD:RECIN", "rb,type=record,noseek");
long count = 0;
try {byte[] recBuf = new byte[zFileIn.getLrecl()];
int nRead;

while((nRead = zFileIn.read(recBuf)) >= 0) {
String rec = new String(recBuf, 0, nRead);
String newRec = rec.replace("Ram", "Shyam");
System.out.println(newRec);
count++;
};

} finally {zFileIn.close();}
}

JCL to compile & execute the Java program named javafile.java with i/o files

//* generate Java executable to default load lib
//COMPILE EXEC PGM=BPXBATCH,
// PARM='sh javac javafile.java'
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//CEEDUMP DD DUMMY
//*
//* execute Java executable from default load lib
//RUN EXEC PGM=BPXBATCH,REGION=0M,
// PARM='sh java javafile'
//RECIN DD DSN=dataset1,DISP=SHR
//STDOUT DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//STDERR DD SYSOUT=*
//CEEDUMP DD DUMMY

A sample Java program named javadb2.java with DB2

import java.sql.Connection;                          
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class db2java {

public static void main(String[] args) {
//#TRY BLOCK IS A SET OF STATEMENTS WHERE AN EXCEPTION CAN OCCUR
try {
//#LOAD THE DB2 DRIVER
Class.forName("com.ibm.db2.jcc.DB2Driver");

//#ESTABLISH A CONNECTION TO DB2
Connection db2Conn = DriverManager.getConnection
("jdbc:db2://192.86.32.91:5040/DALLASC:"
+ "user=z11111;" + "password=j11111;");

//#USE A STATEMENT TO GATHER DATA FROM THE DATABASE
Statement st = db2Conn.createStatement();
String myQuery = "SELECT employeenumber from ibmuser.vphone " + "where phonenumber = '2167'";
//#EXECUTE THE QUERY
ResultSet resultSet = st.executeQuery(myQuery);

//#CYCLE THROUGH THE RESULTSET
while (resultSet.next()) {
String empnum = resultSet.getString("employeenumber");
System.out.println("Employee Number:" + empnum);
}

//#CLEAN UP RESOURCES
resultSet.close();
st.close();
db2Conn.close();
}

//#IF EXECUTION PROBLEMS, REPORT DETAILS OF PROBLEM
catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
catch (SQLException sqle) {
sqle.printStackTrace();
}
}
}

JCL to compile & execute the Java program named javadb2.java with DB2

//* generate Java executable to default load lib
//COMPILE EXEC PGM=BPXBATCH,
// PARM='sh javac javadb2.java'
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//CEEDUMP DD DUMMY
//*
//* execute Java executable from default load lib
//RUN EXEC PGM=BPXBATCH,REGION=0M,
// PARM='sh java javadb2'
//STDOUT DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//STDERR DD SYSOUT=*
//CEEDUMP DD DUMMY

If you like this content, then please endorse me on linkedin @ www.linkedin.com/in/souravksahu

--

--

Sourav K Sahu

An IT Consultant, who has 8 years of experience, undertakes complex assignments and delivers high value software solutions.