DevToPrd
  • Home
  • Knowledge Base
  • About Me
  1. Knowledge Base
  2. Articles
  3. JCL and Programming On the MVS Turnkey System
  • Knowledge Base
    • Articles
      • 3D Printing and CNC
      • 6502 Programming in C
      • Add Settings File to .NET Console Application
      • AMD Ryzen 3 3200G with Radeon Vega Graphics Keeps Freezing
      • Angular Cheat Sheet
      • Angular CLI
      • Arduino / Raspberry Pi Remote Sensor
      • Bad owner or permissions on ssh config file
      • Basic Arduino Uno Dev Setup in Linux (Debian-based)
      • Boilerplate Date Definitions for SQL
      • Boot Linux Mint from flash drive on a netbook
      • Boot Linux to text mode
      • Bundling a Multiple Module Python Project Into a Zip File
      • Cache Resources Exhausted in Imagemagick
      • Call Async Method from Non-Async Method
      • Check an XML file to see if it is well-formed
      • Clear Linux Cache
      • Command-Line Arduino
      • Complex Object Collections in C++
      • Component Not Found error in VirtualBox
      • Compress and Extract Entire Directory Tree With Tar
      • Conditions on aggregates in SQL
      • Configuration of hddtemp
      • Connect To MySQL From .NET
      • Create Code Behind File for Razor Page In Blazor Application
      • Create An ISO File From a CD or DVD-ROM Using the Terminal
      • Cross-Compile Rust, Targeting Windows from Linux
      • C# Language Versioning
      • Dependency Injection in .NET/C#
      • Determine path to web.config at runtime
      • Display GRUB Menu
      • Docker in Linux
      • .NET IoT
      • Entity Framework
      • Enumeration Scoping in C++
      • File Operations in Java
      • Find Duplicate Rows By Specific Columns
      • Find Unique Instances of Text in Bash
      • Flash Disk Image to SD Card
      • Flask
      • Force SSL On Domain
      • GDB and GPROF
      • Get Started With Laravel
      • Git Tips and Tricks
      • Graphical sudo
      • Hide website from search engines
      • Hostname On Linux
      • How to install a .bundle file in Ubuntu Linux
      • HP Laptop Keyboard Not Working At Boot Start
      • Install .NET From Microsoft Feed in Ubuntu
      • Install Node.js
      • Install php7-xml to avoid utf encode/decode issue
      • Install truetype fonts in Ubuntu Linux
      • Java Links
      • JCL and Programming On the MVS Turnkey System
      • List Hardware Information in Ubuntu and other Debian-based Linux
      • Mainframe Emulation on Raspberry Pi Zero
      • Making Colors in a GIF Transparent
      • Manually Install Firefox
      • Markup and Code-Behind Examples for reveal.js
      • Merge Images
      • MicroPython on ESP32
      • Microservice Notes
      • Migrating from Windows to Linux
      • MiniDLNA - A lightweight, simple media server
      • Modify Default Folders in Ubuntu Linux
      • Modify default Java runtime in Linux
      • MongoDB Quick Start in Docker
      • Mount local folder as drive C in DOSBox
      • MVS Turnkey in Docker
      • MySQL command line – quick tips
      • No Frameworks Were Found error
      • NPM Cheat Sheet
      • NT_STATUS_UNSUCCESSFUL error when browsing machines/shares in Ubuntu Linux
      • Online IoT/Embedded Simulators
      • Package and Publish To NuGet
      • Packaging Python Projects
      • Passing a value in the URL for use by PHP
      • PDF Conversion Policy Error
      • PHP Login Script Tutorial
      • Pip Behind a Corporate Proxy
      • Prevent Code Injection In PHP
      • Programming Arduino (AVR) and Raspberry Pi Pico (ARM) in C
      • Publish to Crates.io
      • Python Optimization and Language Binding
      • Python Tkinter Examples
      • Query Windows shares from the command line in Ubuntu Linux
      • RabbitMQ in Docker
      • React Cheat Sheet
      • Recursive File Search
      • Redirect in PHP
      • Remote Access for Raspberry Pi
      • Remove Duplicates From List Collection
      • Requirements Files for Python
      • Rhythmbox tray icon plugin
      • Rsync as a Backup Solution
      • Rust Books (online)
      • Rust/Cargo Behind a Corporate Proxy
      • Selective chmod for directories and files
      • Sense HAT
      • Side-by-Side .NET Core Installations
      • Simple Raspberry Pi Control With .NET IoT and Python
      • Simple Web Server, Using Python or PHP
      • Single-File / Multi-OS / Multi-Architecture Publishing in .NET
      • Slim Framework
      • SQL Server in Docker
      • SQL Server in Linux
      • SQL Transaction Template
      • Start an X Windows session in Cygwin
      • stdio.h: No such file or directory
      • Stream Media from Ubuntu/Mint Linux to XBox360
      • Supporting Material for ‘.NET and Linux’ tech talk
      • TUI Frameworks for .NET
      • Use a value from a posted form in PHP
      • Using Your Router As A Wireless Repeater
      • Verbose PHP Logging To Web Browser
      • Version Mismatch in Python Package
      • Vim Tips and Tricks
      • Virtual Environment for Python
      • Vue.js Cheat Sheet
      • WCF Export
      • Web API with ASP.NET
      • Web Frameworks, Libraries, and Plugins
    • Glossary
      • Initial Program Load (IPL)
      • Job Control Language (JCL)
      • Just-in-time compilation (JIT)
      • Model–View–Controller (MVC)
      • Multiple Virtual Storage (MVS)
      • Resource Access Control Facility (RACF)
      • Real-time locating system (RTLS)
      • Time Sharing Option (TSO)
    • Learning Paths
      • Embedded and IoT
      • Low-Level
      • Mainframe
    • Other
      • Job and Employment Tools
  • Pages
    • About Me
  • Posts
    • 2007
      • Fake Science Makes Me Angry
      • Genetic Material from T-Rex Decoded
      • Vacuum and the Nature of Mass
    • 2011
      • Unhitched
    • 2012
      • Chick-fil-A
      • Choosing a First Telescope
      • Interesting Fossil
      • Rigorous Logic and Amelia
      • Pale Blue Dot
      • Science and Youth
      • Steve Jobs: The Lost Interview
      • Theism and the Thinking Mind
    • 2013
      • Duck and Cover
      • Duct Tape
      • Firefox OS
      • Idiocracy is Upon Us
      • It’s Just a Theory
      • Ken Feder and the Myth of the Ancient Astronauts
      • Martian Exopaleontology
      • …from the Moon and Mars
      • SunWatch Video Podcast
      • Tech Generation… not?
    • 2014
      • ‘Andean Gold’ lecture at SunWatch
      • Chelyabinsk Meteor
      • Lunar Eclipse
      • A New Meteor Shower Is Coming
      • Sleep Well, Philae
      • Why do I not believe?
    • 2015
      • Early Humans in the Americas
      • SETI@Home
      • What is a fossil?
    • 2017
      • Cleaning Fossils
      • The Dating Game
      • How Firefox Got Its Groove Back
      • March For Science
      • Printing the Past
      • Who Ya Gonna Call?
    • 2018
      • 2018 AIA/SunWatch Lecture Series: Science vs. Pseudoscience
      • Coordinate Systems: Finding Your Way Around the Sky
      • Natural Selection At Work
      • Like Water For Gravity
    • 2019
      • ‘Astronomy for Beginners’ Program
      • Homeopathy
      • Scientific and Critical Thinking Omnibus
      • Show Me What You’re Made Of
      • Visitors From Space
    • 2020
      • A Dim View of Betelgeuse
      • Cleveland Archaeological Society Lecture Series
      • Going Viral
      • The Trinity Mineral
      • Venusians, Perchance
    • 2021
      • Create Extension for Visual Studio Code
      • Early .NET 6 Observations
      • The Upcoming Lunar Eclipse: Real-World Application of the Practical Astronomy .NET Library (+ Python!)
      • Enumeration Scoping in C++
      • Fossil Hunting in Central Kentucky
      • Fossil Sites Map in Leaflet.js
      • Geology of Jezero
      • Python and XML
      • Running a Mainframe Emulator on a Raspberry Pi Zero (Lunch-n-Learn)
      • Rust in the Android Platform
      • Rust Foundation
      • Speak with Elegance (or not)
      • Supporting Material for ‘.NET and Linux’ tech talk
      • Traditional Programming on Hobbyist Microcontroller Boards
      • ‘Visual Studio Code: The Swiss Army Knife of Editors’ (tech talk)
    • 2022
      • James Webb Space Telescope
      • Program Like It’s 1982
      • Rust In the Linux Kernel
    • 2023
      • .NET IoT and Terminal GUI
      • Modern .NET Tooling in VS Code
      • Perl: Is It Really That Bad?
      • Sci-Fi Recommendations
    • 2024
      • 6502 Programming in C
      • DuckDuckGo AI Chat
      • Modern Perl
      • My AI Chatbot Experience
      • Practical Astronomy Algorithms in Various Languages
      • Site Updates
      • Think Async

On this page

  • About
  • COBOL
    • Create and Submit the Job
    • Check the Results
  • FORTRAN
  • PL/1
  • C
  1. Knowledge Base
  2. Articles
  3. JCL and Programming On the MVS Turnkey System

JCL and Programming On the MVS Turnkey System

Mainframe

This assumes you’ve already set up, run, connected to, and logged in to an MVS Turnkey system. If not, you can find instructions here.

About

A job to be run consists of two parts:

  1. JCL to tell the mainframe how to run the program, and
  2. The actual program, written in a language with a supporting compiler on the mainframe.
// JCL comes first, and is prefixed by two slashes
The program source follows.

The JCL message class must be set to ‘H’, or you won’t be able to see the output from your jobs.

The ‘H’ indicates to the system that the output should be ‘Held’, making it available for viewing in the OUTLIST utility, in Data Set Utilities.

COBOL

COBOL first appeared in 1959. The latest stable release was in 2014. It’s meant to be “English-like” in syntax.

COBOL is still widely deployed. For example, as of 2017, about 95 percent of ATM swipes use COBOL code, and it powers 80 percent of in-person transactions.

Create and Submit the Job

Your starting point should be the main screen:

Enter ‘1’ to access the RFE tool:

Enter ‘3’ to access utility functions:

Enter ‘4’ to access the Data Set list:

Enter ‘SYS2.JCLLIB’ to filter the Data Set list:

Tab to the detail line for SYS2.JCLLIB, then enter ‘e’ in the S column, for Edit:

The Data Set list will display:

If you press [F8] (page down) a few times, you’ll see several Data Sets with names that begin with ‘TEST’. These are test programs for various languages:

We’ll be using TESTCOB as a template for our COBOL job. We don’t want to use it directly, creating a copy instead. The first thing to do is to create a new, empty Data Set, with the name NEWCOB:

The new, empty Data Set opens in REVEDIT.

Next, we indicate that we want to populate it with a copy of the contents of TESTCOB:

The editor will display the copied text:

Make a few edits to the copied text. First, in line 0001, change TESTCOB to NEWCOB:

In line 0002, update the description:

Finally, in line 0004, change the MSGCLASS to ‘H’:

(This will ensure that the output from the job is retained and viewable after we run it)

Save your changes:

Submit the job:

You’ll see a confirmation message, indicating that the job has been submitted:

Check the Results

If you aren’t already on the main screen, press [F3] until it’s displayed:

Enter ‘1’ to access the RFE tool:

Enter ‘3’ to access utility functions:

Enter ‘8’ to access held job output:

Enter ’ST *’, indicating that you want to display all held jobs:

You’ll see ‘NEWCOB’, the job you recently submitted, at the end of the list:

Enter ‘S’ in the S column for the NEWCOB job:

Job output is displayed:

Press [F8] to page down, and you’ll see the ‘Hello World’ output:

Press [F3] several times to return to the main screen.

FORTRAN

FORTRAN first appeared in 1957. The latest stable release was in 2018. It’s widely used in scientific and engineering applications.

Follow the COBOL instructions, with the following differences:

  1. Copy ‘TESTFORT’ instead of ‘TESTCOB’, and name it ‘NEWFORT’ instead of ‘NEWCOB’.
  2. When you edit NEWFORT, change the job name and description to indicate NEWFORT instead of NEWCOB.

PL/1

You may also see the name written as ‘PL/I’. It first appeared in 1964, and the latest stable release was in 2019.

Follow the COBOL instructions, with the following differences:

  1. Copy ‘TESTPL1’ instead of ‘TESTCOB’, and name it ‘NEWPL1’ instead of ‘NEWCOB’.
  2. When you edit NEWPL1, change the job name and description to indicate NEWPL1 instead of NEWCOB.

There’s an additional change, and it’s important:

There’s a critical “gotcha” in Pl/1 programs. MVS requires a JOBLIB statement in the JCL, and it’s not included in the turnkey sample programs. The following additional line is required in the Data Set. This should be added as a new line at the end of the JCL section:

//JOBLIB DD DSN=SYS1.PL1LIB,DISP=SHR

To add a new line in the editor, enter an ‘I’ in the first column of a row, and the new row will be inserted after. Example location:

You can also delete a line by entering a ‘D’ in the same location.

C

C first appeared in 1972, and the latest stable release was in 2018. It’s the most actively used “old language” by far, heavily used in operating system and kernel development, device drivers, and embedded development.

It’s a dangerous language: Memory management is tricky. But, it’s also extremely powerful, as it’s well suited for getting close to the hardware.

Follow the COBOL instructions, with the following differences:

  1. Copy ‘TESTJCC’ instead of ‘TESTCOB’, and name it ‘NEWJCC’ instead of ‘NEWCOB’. Use TESTJCC as your copy source, not TESTGCC. The GCC compiler ABENDs (throws an error) in the MVS Turnkey system.
  2. When you edit NEWJCC, change the job name and description to indicate NEWJCC instead of NEWCOB.
 

Copyright 2024, Jim Carr

Cookie Preferences