Est. 1975 Beginner

Vision:Report (Quikjob)

The IBM mainframe report writer that started life in the mid-1970s as QUIKJOB from Systems Software Support, passed through Goal Systems and Sterling Software, was renamed ANSWER:Report and then VISION:Report, ended up as CA - now Broadcom - product, and still executes today from a JCL step that reads PGM=QUIKJOB

Created by No individual is credited anywhere in the public record. QUIKJOB was a product of Systems Software Support, Inc. (also written Systems Support Software), an American mainframe software vendor of the 1970s whose principals are not named in any surviving source found. Ownership then passed, on a date no source found records, to Goal Systems International of Columbus, Ohio - the owner of record on the QUIKJOB trademark filed in September 1979, though that field also reflects later assignments - and from Goal to Sterling Software in 1988, which folded it into the Dylakor-derived product line run by its Information Management Division in Woodland Hills, California

Paradigm Procedural fourth-generation report writer. A program is a flat sequence of numbered statements over a fixed set of named storage areas, with an explicit read loop, explicit GOTOs and a PERFORM/THRU for subroutines; there are no blocks, no procedures with parameters, no data structures and no scope. Layered on top of that is a declarative report generator - REPORT, TITLE, HDR, BREAK, ACCUM, CHECKBREAKS - where you name the columns and the control-break levels and the runtime writes the headings, the subtotals and the grand totals for you
Typing Untyped in the modern sense; positional and physical instead. A field is not declared with a type but with a location and a representation: EQU HR-RATE INF46-49 2C names bytes 46 through 49 of the input record and says to treat them as a number with two decimal places, and INF54-58-P says the same bytes are packed decimal. The supported representations are character/EBCDIC, zoned decimal, packed decimal, binary and what the manual calls unconventional data. Conversion between them happens in MOVE, with automatic decimal alignment and rounding that the programmer can override
First Appeared Mid-1970s, as QUIKJOB from Systems Software Support, Inc. No launch date survives. The earliest firm evidence is the 1979 Datapro Software Honor Roll, published in Computerworld on 14 January 1980, where Quikjob appears as a six-time member - meaning it had been rated highly by ten or more surveyed users in six separate annual surveys by the end of the 1970s
Latest Version Release 16.1, as documented in the Advantage VISION:Report / Advantage VISION:Forms Reference Guide 16.1 published by Computer Associates; the sample report output printed in that guide is dated 17 September 2002. Releases 15.0, 15.1, 16.0 and 16.1 are all referenced inside the guide. No later release is documented publicly, and VISION:Report does not appear on Broadcom's current mainframe product portfolio or its mainframe product lifecycle table, though third-party references list it as still supported and customers were still being answered about it on CA's community forum in 2014 (a thread now hosted on Broadcom's community site)

VISION:Report is a language almost nobody chose to write in and a great many people wrote in anyway. It began in the middle of the 1970s as QUIKJOB, a report writer and file utility for IBM mainframes sold by Systems Software Support, Inc., at a moment when the alternative to a one-off COBOL program was another one-off COBOL program. It was bought, renamed, bought, renamed again and bought again - Goal Systems, Sterling Software, Computer Associates, Broadcom; QUIKJOB II, QUIKJOB III, DYL-QUIKJOB, Sterling QUIKJOB, ANSWER:Report, VISION:Report, Advantage VISION:Report - and through all of it the thing you put in your JCL never changed:

//STEP1   EXEC  PGM=QUIKJOB,REGION=512K

Fifty years and four owners later, the load module is still called QUIKJOB. That line, printed in a Computer Associates manual whose sample output is dated 2002, is the most honest summary of the product’s history available.

What it was for

The pitch was time. A COBOL program that copies a tape to disk needs an IDENTIFICATION DIVISION, an ENVIRONMENT DIVISION, a FILE SECTION with an FD and an 01 record layout for both files, a PROCEDURE DIVISION, a compile, a link and a go. The QUIKJOB equivalent, reproduced verbatim from the reference guide’s first example, is five lines:

010  GET
     MOVE  INF1-352      TO  OFA1
     WRITE OFA
     GOTO 010
9999 END

There is no file description because there is no need for one: INF is the input area, OFA is the first output area, and their sizes come from the JCL. A field is a byte range. GET with no operand reads the primary input file. The statement numbered 9999 ends the program. The manual’s claim - “first time users can be up and running after less than eight hours of training” - is a vendor claim, but it is not an unreasonable one for a language of this shape.

That economy is the whole design. As CA’s guide puts it, “because VISION:Report requires you to define only those fields to be used, time-consuming COBOL file definition activity is eliminated.” You describe the parts of the record you care about and ignore the other three hundred bytes.

The storage model

VISION:Report has no variables. It has areas, each with a fixed name and a fixed role, and a field is a named window onto one of them:

AreaRole
INF, INA-INZ, DETInput record areas; GET INx fills one
OFA-OFZOutput record areas; assemble with MOVE, then WRITE OFx
WST, SAVWorking storage, sized by the WSTSIZE and SAVAREA options
PRTThe print line, written to SYSPRINT (MVS) or SYSLST (VSE)
PUNAn 80-byte card punch area
HDA-HDFReport header areas holding the HDR statements
CTR, CTA-CTPSixteen 8-byte packed accumulators, one set per control-break level plus grand totals
VALThe communication area - dates, record counts, file names, VSAM feedback, SQLCA, return codes
PTA-PTH, PTRPointers, for variable address indexing
FUNA 100-byte area holding the function half of a matched table entry

Fields are cut out of those areas by EQU:

EQU PLANT     INF1-2
EQU DEPT      INF3-5
EQU EMP-NAME  INF10-25
EQU HR-RATE   INF46-49    2C
EQU GROSS-PAY INF54-58-P  2C
EQU SAVE-DEPT WST1-3      SPACES

INF46-49 2C is bytes 46 to 49 of the input record, treated as a number with two decimals and edited as ZZZ,ZZZ,ZZ9.99 on output. The -P suffix says packed decimal; -B says binary; 2E gives the European edit mask ZZZ.ZZZ.ZZ9,99. This is a language in which data representation is something you spell out per field, in the field definition, because the files it was built to read were laid out by somebody else long ago.

VAL deserves a note of its own. It is a several-hundred-byte communication area whose every offset is documented in the manual: VAL67-70 holds the ABEND code you want issued, VAL180 tells you whether you are at grand-total time, offsets 240 through 260 are the VSAM feedback block, 273-280 hold the literal SQLCA, and 285-288 are the DB2 return code. Programs poke it and peek at it. It is the API.

The report writer

The other half of the language is declarative, and it is the half the product was sold on. You describe the report and the control-break structure; the runtime does the headings, the spacing, the page breaks, the subtotals and the grand totals. From the manual’s twenty-fifth example:

SORT FILE INF ON PLANT DEPT

TITLE1 'COMPUTER ASSOCIATES'
TITLE2 'PAYROLL DISTRIBUTION FOR PLANT $PLANT$'

REPORT DEPT (DEPT-NAME)                /* FIELD 1
       SPACE9
       SAVE-DEPT (DEPT-NO)
       HR-WORKED (HOURS-WORKED)        /* FIELD 2
       GROSS-PAY                       /* FIELD 3
       AVG-RATE (AVERAGE-HOURLY.RATE)  /* FIELD 4
       NR-EMP (NUMBER-OF-EMPLOYEES)    /* FIELD 5

BREAK 1 DEPT  SB 1 SA 1 PRINT C'DEPT TOTAL'
BREAK 2 PLANT SB 1 SA E PRINT C'PLANT TOTAL'

010 GET INF ATEND EOJ
    CHECKBREAKS ON BREAKS PERFORM 100 THRU 200
    MOVE  DEPT TO SAVE-DEPT
    ACCUM HR-WORKED IN A 4 BYTE CTA
    ACCUM GROSS-PAY IN A 5 BYTE CTB
    ACCUM NONE      IN A 3 BYTE CTC
    ACCUM ONE       IN A 3 BYTE CTD
    PRINT REPORT SUMMARY
    GOTO 010

100  DIVD CTB4-8-P 2D BY CTA5-8-P 0D GIVING CTC6-8-P 2D
     IF VAL180 EQ C'F'
        MOVE C'DIVISION TOTALS' TO PRT1.
200  EXIT
     GOTO EOJ
9999END

Several idioms of the language are visible at once. Column headings come from the parenthesised names, with a period standing in for a space in a heading word (AVERAGE-HOURLY.RATE prints as two stacked lines). $PLANT$ interpolates a field’s value into a title. BREAK levels are numbered, with SB/SA giving lines to space before and after and SA E meaning eject. ACCUM ONE counts records; ACCUM NONE reserves an accumulator that nothing feeds, so a control-break routine can compute into it - which is how the weighted average above gets calculated. And the trailing period on the MOVE is not punctuation: per Rule K of the manual’s general rules, a period ends true-condition processing and marks the next statement as the start of the false branch.

Changing PRINT REPORT to PRINT REPORT SUMMARY suppresses every detail line and leaves only the totals. One word, one line, a different report - which is about as compact a demonstration of what a 4GL was for as the era produced.

What else is in there

For a language with no block structure, VISION:Report accumulated a large surface. IF takes compound conditions, nests, has ELSE and ENDIF, and supports class tests - NUMERIC, ALPHA, SPACES, ZEROS, HIVALUES, LOVALUES - plus ONTABLE for table lookup and test-under-mask operands for bit work, alongside AND, OR, XOR, TRAN and TRNT. Arithmetic is ADD/SUB/MULT/DIVD ... GIVING with per-operand decimal counts. SORT AREA with RELEASE and RETURN runs an internal sort inside the same pass. CALL invokes Assembler or COBOL subroutines, and a shelf of supplied ones covers date arithmetic (QUIKDATE), tables (QUIKTABL), timing (QUIKTIME), ASCII/EBCDIC translation (QUIKTRAN), PDS access (QUIKPDS), random numbers and more. QUIKVSAM wraps VSAM; optional interfaces reach CA-IDMS/DB, IMS and DL/I, DB2 and SQL/DS, ADABAS, TOTAL and DBOMP. Source can be pulled from PDS members, CA-Librarian or CA-Panvalet.

The claimed efficiency argument was the single pass: “conditional record selection, sorting, translating, matching, and merging can all occur with only one read of the master file.” On a machine where the master file was on tape and the tape was the bottleneck, that was the argument that mattered. It is worth being precise about what is and is not claimed here - the manual asserts the single-pass structure, not any measured throughput figure, and no benchmark comparing VISION:Report against COBOL or against its rivals has been found.

Per the reference guide, VISION:Report runs under z/OS, OS/390, MVS/SP/XA/ESA, VSE/SP/ESA and VM/CMS. No implementation outside the IBM mainframe environment is documented in any source found.

The ownership chain

The product’s corporate history is more eventful than its technical one.

Systems Software Support, Inc. sold QUIKJOB through the 1970s, and the QUIKJOB trademark filed in September 1979 carries Goal Systems International of Columbus, Ohio as its owner of record - a data-centre software house that Legent acquired in 1992. Exactly when the product passed from Systems Software Support to Goal is not documented in any source found; the trademark record does not settle it, since ownership fields there are updated on assignment. What is dated is the next step: Sterling Software bought QUIKJOB from Goal in 1988 and dropped it into the product line it had built around Dylakor, the Woodland Hills company behind the DYL-260 and DYL-280 report writers. That put QUIKJOB in the same catalogue as the report writers it had spent more than a decade competing against, which is why the 1997 Sterling catalogue lists VISION:Report (ex-QUIKJOB), VISION:Sixty (ex-DYL-260), VISION:Eighty (ex-DYL-280) and VISION:Results (ex-DYL-280 II) as four separate products doing broadly the same job.

Sterling renamed everything twice - first to ANSWER: prefixes, then in the mid-1990s to VISION: - and Computer Associates bought Sterling in 2000 and applied its own Advantage prefix on top. Broadcom acquired CA in 2018. Four renames and four owners produced no visible change in the language, and the JCL still says PGM=QUIKJOB.

Where it stands

VISION:Report is dormant, and has been for roughly two decades. Release 16.1’s reference guide, with sample output dated September 2002, is the last public documentation; the product is absent from Broadcom’s current mainframe portfolio pages and from its mainframe product lifecycle table, though the manual is still served from Broadcom’s own documentation host and independent trackers still record the product as supported. Customers were being answered about it on CA’s forums as recently as 2014.

What activity there is now is mostly the activity of leaving. Pacific Systems Group sells a Quikjob-syntax-compatible version of its own report writer on the explicit promise that existing programs and JCL need no changes. UV Software publishes a guide for converting QuikJob programs to Unix utilities. mLogica has a case study on translating about 150 QUICKJOB programs - some 33,000 lines - to Micro Focus COBOL for an insurer, and its framing is telling: QUICKJOB was “initially perceived as an ancillary system component” and turned out to be the thing that blocked the cutover.

Why it matters

QUIKJOB belongs to a family of products - Easytrieve, DYL-280, Mark IV, RPG’s various descendants - that solved the same problem in the same decade and were collectively far more consequential than their obscurity suggests. Between them they wrote a large fraction of the reports that businesses ran on for thirty years, and they did it by making a bet that has been made repeatedly since: that most data processing is the same handful of shapes, and that a small language which knows those shapes will beat a general-purpose one that has to be told them each time.

The bet paid. It also produced exactly the situation that “legacy” now means. The programs were quick to write, which meant a lot of them got written, which meant they were still running when the language stopped being sold. Nothing in a five-line QUIKJOB program tells you it is doing something important; the one-shot job that “often became regular production”, as UV Software’s guide puts it, is the characteristic artefact of the whole genre.

Its last distinction is the one it never lost. Systems Software Support named the program QUIKJOB sometime around 1975, and in 2026 the name survives in every JCL deck that still runs it - outliving the company that wrote it, the three companies that resold it and the brands that were painted over it.

Timeline

1975
QUIKJOB is released for IBM mainframes by Systems Software Support, Inc. The year is approximate - Lookup Mainframe Software dates the original release to the mid 1970s and no launch announcement survives - but the product is in broad commercial use well before the decade ends. It is a load-and-go report writer and file utility: one program, one pass of the file, no compile-link-go cycle and no COBOL data division to write
1979
Quikjob appears on the 1979 Datapro Software Honor Roll as a six-time member, reported in Computerworld on 14 January 1980. Datapro built the list from ratings supplied by users rather than vendors, and only packages named by ten or more respondents qualified; Easytrieve, Fast/Dump/Restore and Syncsort appear alongside it in the same listing. On 17 September the same year, a trademark application for QUIKJOB is filed with the USPTO; Goal Systems International is the owner of record on that filing, though USPTO ownership fields also reflect later assignments, so the filing does not by itself date Goal's acquisition of the product
1988
Sterling Software buys QUIKJOB from Goal Systems International, the Columbus, Ohio vendor that had come to own it. Sterling already owned Dylakor - acquired earlier in the 1980s - whose DYL-260 and DYL-280 report writers were QUIKJOB's direct competitors, and QUIKJOB joins them in what becomes the Information Management Division's product line. It is renamed repeatedly over the following years; the former-names list in Sterling's own catalogue implies DYL-QUIKJOB and Sterling QUIKJOB before ANSWER:Report, though the catalogue gives no dates
1997
Sterling Software's public product catalogue lists VISION:Report as "Program development and report writing tool utilizing a free-format, COBOL-like language" and records its former names in one line: DYL-QUIKJOB, Sterling QUIKJOB, ANSWER:Report, QUIKJOB II, QUIKJOB III, QUIKJOB. The catalogue also lists VISION:Forms, formerly QUIKWRITE, a fill-in-the-form front end that generates VISION:Report programs. The VISION: rebranding itself happened at some point in the mid-1990s; the July 1997 capture is the earliest one available
2000
Computer Associates acquires Sterling Software, and with it the whole VISION: family. VISION:Report is eventually marketed under CA's Advantage brand as Advantage VISION:Report, packaged together with Advantage VISION:Forms
2002
The Advantage VISION:Report / Advantage VISION:Forms Reference Guide 16.1 is published - 522 pages, with several dozen worked examples whose sample output is dated September 2002. It documents releases 15.0 through 16.1 and, incidentally, records what has and has not changed: release 15.0 raised the print line to 161 characters and allowed sequence numbers longer than four digits; 16.0 let native VSAM statements be mixed with calls to QUIKVSAM; 16.1 moved user storage above the 16MB line as standard. This remains the last public documentation of the language
2014
A customer posts to CA's community forum asking how large TABLSPEC - the parameter that sizes a VISION:Report program's table area - can safely be set, and is answered with a citation from the reference guide. The thread's subject line, "CA VISION:Report V16L1 (formerly Sterling Software / QuikJob)", is a fair summary of the product's position by then: four owners deep, one release for over a decade, still in production
2018
Broadcom completes its acquisition of CA Technologies and inherits VISION:Report. The product does not appear on Broadcom's published mainframe product portfolio or on its mainframe product lifecycle table, but the 16.1 reference guide is still served from Broadcom's documentation host and third-party trackers continue to list the product as supported

Notable Uses & Legacy

IBM mainframe batch data centres, 1970s-1990s

QUIKJOB's constituency was the working batch shop: copy this tape to disk, match a transaction file against a master, validate a feed, produce the quarterly earnings report, generate test data. The Datapro Software Honor Roll placings through the 1970s - awarded on user ratings, not vendor submissions, and in the same bracket as Easytrieve and Syncsort - are the clearest surviving measure of how widely it was installed

Insurance company mainframe modernization (mLogica case study)

An undated mLogica case study describes converting roughly 150 QUICKJOB programs - 32,797 lines, of which 26,249 are code and 6,548 comments - to Micro Focus COBOL as part of a larger mainframe migration at a large insurer. The study frames QUICKJOB as a "last mile" technology: not noticed during planning, then critical at cutover because nobody had a plan for it

Pacific Systems Group ZWQUIK

PSG sells a variant of its z/Writer report writer that implements Quikjob syntax, on the promise that existing Quikjob programs and their JCL run unchanged. Its published statement list - ACCUM, BREAK, CHECKBREAKS, DIVD, EQU, GET, HDR, LIMITREADS, MOVE, OPTION and the rest - is a useful independent record of the language, and the existence of the product at all is evidence of an installed base large enough to be worth competing for

Vancouver Utilities QuikJob conversions

UV Software publishes a conversion guide for moving QuikJob programs to uvcopy and uvqrpg on Unix, opening with a description that any Quikjob site would recognise: "a Mainframe utility for performing file maintenance & generating reports. As the name implies it is often used for those quick 1 shot jobs (which often became regular production)"

VISION:Forms (formerly QUIKWRITE)

Sterling, and then CA, sold a companion product that let a user fill in a form describing a report and emitted VISION:Report source from it - a code generator whose target language was this one. The two were documented in a single manual by the time of release 16.1

Language Influence

Influenced By

Running Today

Run examples using the official Docker image:

docker pull
Last updated: