Graphics Programming from a Bygone Era
I was recently asked “what is JCL?” so went to my archive to find an example. JCL or Job Control Language was used on IBM mainframes (IBM 360, 370 +). Programs were submitted as decks of punch cards or via character-based terminals. The mainframe then put the job in a queue and ran them in order of submission… often it took half an hour or more before the results came back.
This is an example of what it took to run a simple Fortran program in 1977. I wrote this when I worked as a co-op engineering student at the Nebraska Public Power District in Columbus, Nebraska. At that time NPPD bought additional computer time from the University of Nebraska’s Computing Network. A remote card reader/printer was installed in Columbus and connected to the UN Med Center computer in Omaha via a leased phone line.
This is a very simple example – the JCL statements all start with // and sometimes there were dozens of them. This is a program that plotted a graph of electrical load data, which had to be sent to a Calcomp pen plotter in Lincoln with instructions to the operator at the Med Center to mount a tape, then send it to Lincoln. The Lincoln operator had to mount the tape, plot on 30” paper, etc, then return the paper to Columbus and the tape to the UNMC tape library. So I’d run this from Columbus and wait a few days for the plot to arrive to see if it worked. If it didn’t, I’d repeat the process and wait a few more days.
//DAHMKE JOB (NPPDAA541500,MARK,99,99),DAHMKE,CLASS=A,PRTY=6
// EXEC PGM=CONSOL
//READF DD *
UNMC: MOUNT TAPE = NPPLOT WITH RING IN. THANKS.
MESSAGE TO LINCOLN I/O CLERK:
PLOT ON 30 INCH WHITE PAPER WITH INDIA INK. (TAPE=NPPLOT)
RETURN TO MARK DAHMKE, PLANNING DEPT OF NPPD COLUMBUS.
RETURN TAPE TO UNMC
// EXEC FORTGCLP,TIME.GO=5
//FORT.SYSIN DD *
DO 10 I = 1,365
CALL SYMBOL(-73.4,73.4,.2,’HOUR INTERVALS’,-45.,14)
CALL AXIS(0.,0.,’NPPD SYSTEM LOAD 1976′,-21,365.,0.,0.,1.,10.)
CALL AXIS(-88.08,88.08, ‘LOAD IN MW * 10.’,16,150.,90.,0.,10.,10.
DO 20 J=1,24
DO 30 I=1,365
30 CALL PLOT(X,EEI(I,J)/10.,2)
//GO.SYSIN DD *
[data goes here]