The Clarion COBOL Call!

Perknose

Forum Director & Omnipotent Overlord
Forum Director
Oct 9, 1999
46,042
8,740
136

cytg111

Lifer
Mar 17, 2008
23,202
12,852
136
Legacy software. We love you. Well I am not there yet but Java C# and such in finance will have its day...
 

KB

Diamond Member
Nov 8, 1999
5,396
383
126
Its a huge challenge to rewrite a working application, but its not impossible and in the long run it may save them money. Instead of recruiting cobol devs, they should create a joint effort to write something new.

I often wonder when I will get the call for legacy C# developers. Technology changes so fast that a technology is legacy within about a decade.
 

Perknose

Forum Director & Omnipotent Overlord
Forum Director
Oct 9, 1999
46,042
8,740
136
Its a huge challenge to rewrite a working application, but its not impossible and in the long run it may save them money. Instead of recruiting cobol devs, they should create a joint effort to write something new.

I often wonder when I will get the call for legacy C# developers. Technology changes so fast that a technology is legacy within about a decade.
COBOL is not that complicated to learn, imho. One of the problems may be early COBOL coding could be spaghetti code, i.e. rampant use of "GoTo" statements. Easy when coding, difficult to follow afterwards.
 

interchange

Diamond Member
Oct 10, 1999
8,017
2,860
136
Been a while since I was in the field, but before entering medicine the place I worked was a small-medium company whose principal product was an RTOS. I basically found it by going to a career fair and not having patience enough to wait in line at all the places I thought I would want to work. I went back and represented my company at a future career fair. Practically no one stopped by because they had never heard of us. But I started out about $15k above where I may have been offered at a bigger company and in an area with a pretty low cost of living. The person who I talked to at the career fair ended up being my direct boss. And the company had a much more diverse group of engineers, including hiring some older folks after I got there, although a lot of those were on the contractor side. I don't know how reflective that is of the current state of things.
 

fleshconsumed

Diamond Member
Feb 21, 2002
6,483
2,352
136
Its a huge challenge to rewrite a working application, but its not impossible and in the long run it may save them money. Instead of recruiting cobol devs, they should create a joint effort to write something new.

One of the big problems with systems that old is lack of documentation and loss of institutional knowledge of the inner workings of all the system components. Often times the code is the only documentation there and there isn't anybody who has complete picture of the whole system. I mean just the other day I was asked to consult on one of the apps that was having issues, apparently I was the one who actually wrote the thing 5 years ago and I completely forgot that I did. I remembered nothing about it. You need to redocument everything before even beginning to redesign, and that's a whole project in on itself. And with systems that old you're lucky if you even have source code available, much less documentation.
 

hal2kilo

Lifer
Feb 24, 2009
23,431
10,327
136
We who are about to code, salute you!



My ears are burning! I may have to answer the call!

Now, get off my lawn, you whippersnappers with your fancy phones and your blueteeth and such! ;)

https://onezero.medium.com/ctrl-alt-delete-the-planned-obsolescence-of-old-coders-9c5f440ee68
It kills me that the states have such antiquated systems. But this still happens in private industry. My ex-brother in law was the Systems Analyst for Fingerhut for years, and kept being called back after he retired to maintain some Assembler CODE! Of course maybe, it was his own fault.;)
 

dank69

Lifer
Oct 6, 2009
35,329
28,592
136
It kills me that the states have such antiquated systems. But this still happens in private industry. My ex-brother in law was the Systems Analyst for Fingerhut for years, and kept being called back after he retired to maintain some Assembler CODE! Of course maybe, it was his own fault.;)
Yeah, I was tasked with updating some old Fortran programs a couple of years ago for the private sector. Legacy shit started in the 60s and touched by probably 20 or more different people over the decades. Hollerith constants, common blocks where the variable names don't match, if arithmetic. The very definition of spaghetti.
 

hal2kilo

Lifer
Feb 24, 2009
23,431
10,327
136
Yeah, I was tasked with updating some old Fortran programs a couple of years ago for the private sector. Legacy shit started in the 60s and touched by probably 20 or more different people over the decades. Hollerith constants, common blocks where the variable names don't match, if arithmetic. The very definition of spaghetti.
What's really fun when you are working on a little project with your boss, who is very smart, but never had any formal classes. He'd just declare variables on the fly, never documented anything. I would have to interpret what he was doing, put in comments, make the variable declaration statements, ah, good times.
 
  • Like
Reactions: dank69

Lanyap

Elite Member
Dec 23, 2000
8,106
2,157
136
Its a huge challenge to rewrite a working application, but its not impossible and in the long run it may save them money. Instead of recruiting cobol devs, they should create a joint effort to write something new.

I often wonder when I will get the call for legacy C# developers. Technology changes so fast that a technology is legacy within about a decade.



Cost is big factor for government agencies and some big corps. They don't want to spend the money or they can't get the project money.

Maybe I need to be a COBOL Cowboy. Interesting stats from their website.

THE LANGUAGE OF BUSINESS
COBOL supports close to 90% of Fortune 500 business systems today.

COBOL IS ALIVE AND WELL
COBOL is 65% of active code used today; and runs 85% of all business transactions.

UNRIVALED PERFORMANCE
200 billion lines of COBOL code are still in use today by various industries, according to IBM.

STAYING POWER
71% of universities surveyed are convinced that companies will rely on COBOL for the next decade and more.



Reminds me of the good ole days. I wrote quite a few COBOL and Assembler programs for our data center ops group back in the 80's. I still have the code. :p


Code:
       IDENTIFICATION DIVISION.
       PROGRAM-ID.    S802CTSR.
       INSTALLATION. 
       DATE-WRITTEN.  NOV 12,1982.
       DATE-COMPILED. JAN 18,1988.
       REMARKS.       MECHANIZED CONTROL PRODUCTION.
      *
      * THIS MODULE READS THE SAR MICROFICHE FILE AND COMPUTES
      * TOTALS FOR JOBS SUBMITTED, JOBS REVIEWED AND INCIDENT REPORTS
      * OPENED BY CONTROL CLERKS. IT WILL CALCULATE PRODUCTION
      * MINUTES AND GENERATE A REPORT WITH THE RESULTS. THE DATA
      * IS ALSO ACCUMULATED IN A MASTER FILE.
      *
      * UPDATES:   (LATEST CHANGES INDICATED BY CHANGE BAR-| )
      * 04/24/84 - ADDED LOGIC TO CHECK SORT-RETURN CODE
      * 05/02/84 - ADDED LOGIC TO CHECK CONTROL CLERK TABLE OVERFLOW
      * 05/14/84 - MODIFIED VERIFY-PARM LOGIC;
      *            REMOVED COND-CODE DATA NAME
      * 05/15/84 - CHANGED RETRIEVE-DSN-VSN-JESNO TO
      *            RETRIEVE-DSN-JESNO-DATE-TIME;
      *            MOVED DATE AND TIME RETRIEVAL FROM VERIFY-PARM TO
      *            RETRIEVE-DSN-JESNO-DATE-TIME;
      *            ADDED COMMENTS
      * 05/16/84 - ADDED JES LOG COUNT
      * 05/25/84 - CHANGED G0000V00 TO GDG
      * 08/10/84 - ADDED LOGIC TO CHECK FOR SCANS AND SUBTRACT FROM
      *            SUBMIT TOTALS
      * 08/13/84 - ADDED LOG RECORDS WRITTEN COUNT AND MESSAGE
      * 11/30/84 - ADDED LOGIC TO SUBTRACT SCANS FROM REVIEW TOTALS
      * 02/01/85 - CHANGED SORT FIELDS.
      * 02/14/85 - ADDED LOGIC TO PICKUP INITIALS BEGINNING WITH '0'
      *            AND CHANGE IT TO 'O' (I.E. 0MR WOULD CHANGE TO OMR);
      *            ADDED 'NEW' FIELD TO CONTROL CLERK CARD RECORD AND
      *            TABLE
      * 03/20/85 - ADDED LOGIC TO GET REVIEW AND SUBMIT TIME AND PUT
      *            IT IN THE LOG RECORD;
      *            ADDED NEW OUTPUT FILE WHICH WILL CONTAIN LOG RECORDS
      *            AND TROUBLE REPORTS FOR NEW CONTROL CLERKS.
      * 07/30/85 - USE DATE READ FROM JES LOG INSTEAD OF START DATE
      *            FOR SUBMIT DATE;
      *            HANDLE INCOMPLETE FLOWLOGS
      * 12/30/85 - SPLIT JOBS SUBMITTED INTO TWO CATAGORIES, JSUBMIT
      *            AND NON-JSUBMIT
      * 03/25/86 - PICKUP INITIALS BEGINNING WITH "S" AND "C";
      *            USE JOB START TIME FOR SCANS;
      *            INCREASED CREDIT TABLE LIMIT FROM 100 TO 120
      * 06/23/87 - CONVERTED TO SAR/MIRS
      * 10/12/87 - REMOVED LOGIC THAT SET RETURN-CODE 4 WHEN YEARLY
      *            PROCESSING TAKES PLACE
      * 12/07/87 - ADDED LOGIC TO HANDLE NEW FLOWLOG FORMAT
      * 01/18/88 - ADDED LOGIC TO PICKUP UCC7 NUMBER AND ADD TO LOG;
      *            ADDED SHIFT ID TO LOG RECORD
      *
      *
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER. IBM-370-3081.
       OBJECT-COMPUTER. IBM-370-3081.
       SPECIAL-NAMES.
           C01 IS TOP-OF-PAGE.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SAR-FICHE        ASSIGN TO UT-6250-S-INFICHE.
           SELECT IR-FILE          ASSIGN TO UT-3380-S-IRFILE.
           SELECT CARD-FILE        ASSIGN TO UT-3380-S-INCARDS.
           SELECT SORTIN-FILE      ASSIGN TO UT-3380-S-SORTIN.
           SELECT SORTOUT-FILE     ASSIGN TO UT-3350-S-SORTOUT.
           SELECT IN-MAST-FILE     ASSIGN TO UT-3380-S-INMAST.
           SELECT OUT-MAST-FILE    ASSIGN TO UT-3350-S-OUTMAST.
           SELECT STATS-REPORT     ASSIGN TO UR-S-STATS.
           SELECT MESSAGE-REPORT   ASSIGN TO UR-S-MESSAGES.
           SELECT LOG-REPORT       ASSIGN TO UR-S-LOG.
           SELECT OUT-NEW-FILE     ASSIGN TO UT-3350-S-OUTNEW.
           SELECT SORT-WORK-FILE   ASSIGN TO UT-3350-S-SORTWK01.
      *
       DATA DIVISION.
       FILE SECTION.
       SD  SORT-WORK-FILE.
       01  SORT-RCD.
           05  SORT-SHIFT-ID             PIC X(1).
           05  SORT-INITIALS             PIC X(3).
           05  FILLER                    PIC X(1).
           05  SORT-MONTH-DAY            PIC X(4).
           05  SORT-YEAR                 PIC X(2).
           05  SORT-REST                 PIC X(69).
       FD  SAR-FICHE
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 206 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE STANDARD.
       01  IN-RCD                        PIC X(206).
       FD  IR-FILE
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 206 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE STANDARD.
       01  IN-IR-LINE                    PIC X(206).
       FD  CARD-FILE
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 80 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE OMITTED.
       01  IN-CRD                        PIC X(80).
       FD  SORTIN-FILE
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 80 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE STANDARD.
       01  SORTIN-LINE                   PIC X(80).
       FD  SORTOUT-FILE
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 80 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE STANDARD.
       01  SORTOUT-LINE                  PIC X(80).
       FD  IN-MAST-FILE
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 80 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE STANDARD.
       01  IN-MAST-LINE                  PIC X(80).
       FD  OUT-MAST-FILE
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 80 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE STANDARD.
       01  OUT-MAST-LINE                 PIC X(80).
       FD  STATS-REPORT
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 133 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE OMITTED.
       01  OUT-STATS-LINE                PIC X(133).
       FD  MESSAGE-REPORT
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 80 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE OMITTED.
       01  OUT-MSG-LINE                  PIC X(80).
       FD  LOG-REPORT
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 80 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE OMITTED.
       01  OUT-LOG-LINE                  PIC X(80).
       FD  OUT-NEW-FILE
           BLOCK CONTAINS 0 RECORDS
           RECORD CONTAINS 80 CHARACTERS
           RECORDING MODE IS F
           LABEL RECORDS ARE STANDARD.
       01  OUT-NEW-LINE                  PIC X(80).
       WORKING-STORAGE SECTION.
       01  BEGIN-WS                      PIC X(29)
                          VALUE '*** BEGIN WORKING STORAGE ***'.
       01  TABLE-COUNT                   PIC 9(3)   VALUE ZEROS.
       01  CARD-COUNT                    PIC 9(3)   VALUE ZEROS.
       01  MAX-TABLE-COUNT               PIC 9(3)   VALUE ZEROS.
       01  MAX-CARD-COUNT                PIC 9(3)   VALUE ZEROS.
       01  STATS-LINE-COUNT              PIC 99     VALUE ZEROS.
       01  STORE-SUBMIT-INITIALS         PIC X(3)   VALUE SPACES.
       01  STORE-SUBMIT-DATE             PIC 9(6)   VALUE ZEROS.
       01  STORE-REVIEW-DATE             PIC 9(6)   VALUE ZEROS.
       01  STORE-JSUBMIT-MIN             PIC 9(5)   VALUE ZEROS.
       01  STORE-NJSUBMIT-MIN            PIC 9(5)   VALUE ZEROS.
       01  STORE-REVIEW-MIN              PIC 9(5)   VALUE ZEROS.
       01  STORE-TROUBLE-MIN             PIC 9(4)   VALUE ZEROS.
       01  STORE-TOTAL-MIN               PIC 9(6)   VALUE ZEROS.
       01  STORE-MF-INITIALS             PIC X(3)   VALUE SPACES.
       01  STORE-MF-MONTH                PIC 99     VALUE ZEROS.
       01  TEMP-CREDIT-DATE              PIC 9(6)   VALUE ZEROS.
       01  TEMP-JULIAN                   PIC 9(3)   VALUE ZEROS.
       01  TEMP-REVIEW-TOTAL             PIC 9(6)   VALUE ZEROS.
       01  REV-REM                       PIC 9(4)   VALUE ZEROS.
       01  GREG-DAY                      PIC 9(3)   VALUE ZEROS.
       01  CALC-DAY                      PIC 9(3)   VALUE ZEROS.
       01  LEAP-YEAR                     PIC 9(2)   VALUE ZEROS.
       01  DUMMY-YEAR                    PIC 9(2)   VALUE ZEROS.
       01  MONTH-POINTER                 PIC 9(2)   VALUE ZEROS.
       01  PREV-MONTH                    PIC 9(2)   VALUE ZEROS.
       01  ONE                           PIC S9(5)  VALUE +1 COMP SYNC.
       01  S90102RV                      PIC X(8)   VALUE 'S90102RV'.
       01  S90102JN                      PIC X(8)   VALUE 'S90102JN'.
       01  JES-NUM                       PIC X(5)   VALUE SPACES.
       01  DDNAME                        PIC X(8)   VALUE 'INFICHE '.
       01  SAR-GEN-X                     PIC X(4)   VALUE SPACES.
       01  TEST-MF-TOTALS                PIC 9(5)   VALUE ZEROS.
       01  STORE-SAR-GDG                 PIC 9(4)   VALUE ZEROS.
       01  OLD-SAR-GDG                   PIC 9(4)   VALUE ZEROS.
       01  SAR-GDG-DIFF                  PIC S9(4)  VALUE ZEROS.
       01  SCAN-TALLY                    PIC 9(2)   VALUE ZEROS.
       01  SCAN-FIELD                    PIC X(4)   VALUE SPACES.
    |  01  SUBMIT-TYPE                   PIC X(11)
    |      VALUE 'SUBMITTED/J'.
       01  BLANK-LINE                    PIC X(80)  VALUE SPACES.
       01  IN-FICHE-RCD.
           05  FILLER                    PIC X(11).
           05  JCL-SLASH                 PIC X(2).
           05  FILLER                    PIC X(3).
           05  REVIEW-LINE.
               10  SUBMIT-LINE           PIC X(10).
               10  FILLER                PIC X(13).
           05  FILLER                    PIC X(2).
           05  FLOWLOG-LINE              PIC X(15).
           05  FILLER                    PIC X(15).
           05  TROUBLE-LINE              PIC X(8).
           05  FILLER                    PIC X(127).
       01  IN-SAR-RCD   REDEFINES    IN-FICHE-RCD.
           05  FILLER                    PIC X.
           05  SAR-HEADER                PIC X(3).
           05  SAR-PAGE                  PIC X(4).
           05  FILLER                    PIC X(8).
           05  SAR-JOB-NAME              PIC X(8).
           05  SAR-JES-NUM               PIC X(8).
           05  SAR-ARCH-MONTH            PIC 9(2).
           05  FILLER                    PIC X.
           05  SAR-ARCH-DAY              PIC 9(2).
           05  FILLER                    PIC X.
           05  SAR-ARCH-YEAR             PIC 9(2).
           05  SAR-ARCH-HOUR             PIC 9(2).
           05  FILLER                    PIC X.
           05  SAR-ARCH-MIN              PIC 9(2).
           05  FILLER                    PIC X(158).
       01  IN-INITIAL-RCD   REDEFINES    IN-FICHE-RCD.
           05  FILLER                    PIC X(25).
           05  IN-SUBMIT-INITIALS        PIC X(3).
           05  FILLER                    PIC X(10).
           05  IN-JOB-NAME.
               10  IN-REVIEW-INITIALS    PIC X(3).
               10  FILLER                PIC X(5).
           05  IN-REVIEW-TIME REDEFINES  IN-JOB-NAME.
               10  IN-REVIEW-TIME-H      PIC X(2).
               10  FILLER                PIC X.
               10  IN-REVIEW-TIME-M      PIC X(2).
               10  FILLER                PIC X(3).
           05  FILLER                    PIC X(32).
           05  IN-TROUBLE-INITIALS       PIC X(3).
           05  FILLER                    PIC X(125).
       01  IN-DATE-RCD     REDEFINES     IN-FICHE-RCD.
           05  FILLER                    PIC X.
           05  IN-FICHE-80.
               10  FILLER                PIC X(15).
               10  JOB-DATE              PIC X(22).
               10  IN-DATE.
                   20  IN-YEAR           PIC 99.
                   20  IN-JULIAN         PIC 9(3).
               10  FILLER                PIC X(38).
           05  FILLER                    PIC X(125).
    |  01  IN-UCC7-RCD     REDEFINES     IN-FICHE-RCD.
    |      05  FILLER                    PIC X(15).
    |      05  IN-UCC7-LINE              PIC X(10).
    |      05  FILLER                    PIC X(1).
    |      05  IN-UCC7-NUM               PIC X(4).
    |      05  FILLER                    PIC X(176).
       01  IN-TIME-RCD     REDEFINES     IN-FICHE-RCD.
           05  FILLER                    PIC X(20).
           05  IN-ADC-MSG                PIC X(7).
           05  FILLER                    PIC X(9).
           05  IN-READ-MSG               PIC X(9).
           05  IN-READ-DATE-M            PIC X(2).
           05  FILLER                    PIC X.
           05  IN-READ-DATE-D            PIC X(2).
           05  FILLER                    PIC X.
           05  IN-READ-DATE-Y            PIC X(2).
           05  FILLER                    PIC X(5).
           05  IN-READ-H                 PIC X(2).
           05  FILLER                    PIC X.
           05  IN-READ-M                 PIC X(2).
           05  FILLER                    PIC X(143).
       01  IN-CARD.
           05  IN-CARD-DATA.
               10  IN-SHIFT-CODE         PIC X.
               10  CRD-FILL1             PIC X.
               10  IN-CARD-INITIALS      PIC X(3).
               10  CRD-FILL2             PIC X.
               10  IN-CARD-NAME          PIC X(20).
               10  FILLER                PIC X(43).
               10  IN-CARD-NEW-CLERK     PIC X(3).
               10  FILLER                PIC X(7).
           05  FILLER                    PIC X.
       01  OUT-CARD.
           05  FILLER                    PIC X      VALUE SPACE.
           05  OUT-CARD-DATA             PIC X(79)  VALUE SPACES.
       01  OUT-STATS-RCD.
           05  FILLER                    PIC X      VALUE SPACE.
           05  OUT-STATS-DATE.
               10  OUT-STATS-MONTH       PIC 99.
               10  FILLER                PIC X      VALUE '/'.
               10  OUT-STATS-DAY         PIC 99.
               10  FILLER                PIC X      VALUE '/'.
               10  OUT-STATS-YEAR        PIC 99.
           05  FILLER                    PIC X(4)   VALUE SPACES.
           05  OUT-STATS-INITIALS        PIC X(3).
           05  FILLER                    PIC X(6)   VALUE SPACES.
           05  OUT-STATS-JSUBMIT-TOTAL   PIC ZZZ9.
           05  FILLER                    PIC X(4)   VALUE SPACES.
           05  OUT-STATS-JSUBMIT-MIN     PIC ZZZ9.
           05  FILLER                    PIC X(5)   VALUE SPACES.
           05  OUT-STATS-NJSUBMIT-TOTAL  PIC ZZZ9.
           05  FILLER                    PIC X(3)   VALUE SPACES.
           05  OUT-STATS-NJSUBMIT-MIN    PIC ZZZ9.
           05  FILLER                    PIC X(7)   VALUE SPACES.
           05  OUT-STATS-REVIEW-TOTAL    PIC ZZZ9.
           05  FILLER                    PIC X(3)   VALUE SPACES.
           05  OUT-STATS-REVIEW-MIN      PIC ZZZ9.
           05  FILLER                    PIC X(9)   VALUE SPACES.
           05  OUT-STATS-TROUBLE-TOTAL   PIC Z9.
           05  FILLER                    PIC X(6)   VALUE SPACES.
           05  OUT-STATS-TROUBLE-MIN     PIC ZZ9.
           05  FILLER                    PIC X(7)   VALUE SPACES.
           05  OUT-STATS-TOTAL-MIN       PIC ZZZZ9.
           05  FILLER                    PIC X(33)  VALUE SPACES.
       01  TEMP-MF-RCD.
           05  TEMP-MF-LINE.
               10  TEMP-MF-SHIFT-ID      PIC X.
               10  MF-INITIALS           PIC X(3).
               10  FILLER                PIC X      VALUE SPACE.
               10  MF-DATE.
                   20  MF-MONTH          PIC 99.
                   20  MF-DAY            PIC 99.
                   20  MF-YEAR           PIC 99.
               10  FILLER                PIC X      VALUE SPACE.
               10  MF-JSUBMIT-TOTAL      PIC 9(4).
               10  FILLER                PIC XX     VALUE '  '.
               10  MF-JSUBMIT-MIN        PIC 9(4).
               10  FILLER                PIC XX     VALUE '  '.
               10  MF-NJSUBMIT-TOTAL     PIC 9(4).
               10  FILLER                PIC XX     VALUE '  '.
               10  MF-NJSUBMIT-MIN       PIC 9(4).
               10  FILLER                PIC XX     VALUE '  '.
               10  MF-REVIEW-TOTAL       PIC 9(4).
               10  FILLER                PIC XX     VALUE '  '.
               10  MF-REVIEW-MIN         PIC 9(4).
               10  FILLER                PIC XX     VALUE '  '.
               10  MF-TROUBLE-TOTAL      PIC 99.
               10  FILLER                PIC XX     VALUE '  '.
               10  MF-TROUBLE-MIN        PIC 9(3).
               10  FILLER                PIC XX     VALUE '  '.
               10  MF-TOTAL-MIN          PIC 9(4).
               10  FILLER                PIC X(7)   VALUE '  0000 '.
               10  FILLER                PIC X(4)   VALUE SPACES.
               10  OUT-MF-SAR-GEN        PIC X(8)   VALUE SPACES.
       01  STORE-MF-RCD.
           05  STORE-MF-LINE.
               10  STORE-MF-SHIFT-ID     PIC X(1).
               10  OLD-MF-INITIALS       PIC X(3).
               10  FILLER                PIC X(5).
               10  OLD-MF-YEAR           PIC 99.
               10  FILLER                PIC X(61).
               10  OLD-SAR-GEN.
                   20  FILLER            PIC X.
                   20  TEST-SAR-GDG      PIC X(4).
                   20  FILLER            PIC X(3).
       01  LOG-RCD.
    |      05  LOG-SHIFT-ID              PIC X      VALUE SPACE.
           05  LOG-INITIALS              PIC X(3)   VALUE SPACES.
           05  FILLER                    PIC X      VALUE SPACE.
           05  LOG-DATE                  PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X      VALUE SPACE.
           05  LOG-JOB                   PIC X(8)   VALUE SPACES.
           05  FILLER                    PIC X      VALUE SPACE.
           05  LOG-JES                   PIC X(8)   VALUE SPACES.
           05  FILLER                    PIC X      VALUE SPACE.
    |      05  LOG-MSG                   PIC X(11)  VALUE SPACES.
    |      05  FILLER                    PIC X      VALUE SPACE.
    |      05  LOG-UCC7-NUM              PIC X(4)   VALUE SPACES.
    |      05  FILLER                    PIC X(6)   VALUE SPACE.
           05  LOG-SCAN                  PIC X(4)   VALUE SPACES.
           05  FILLER                    PIC X      VALUE SPACE.
           05  LOG-SUBMIT-TIME           PIC 9(4)   VALUE ZEROS.
           05  FILLER                    PIC X      VALUE SPACE.
           05  LOG-REVIEW-TIME-H         PIC X(2)   VALUE SPACES.
           05  LOG-REVIEW-TIME-M         PIC X(2)   VALUE SPACES.
           05  FILLER                    PIC X(10)  VALUE SPACES.
           05  FILLER                    PIC X(4)   VALUE HIGH-VALUES.
       01  SAVE-PARM.
           05  TEST-JSUB-SECS            PIC X(3).
           05  PARM-JSUB-SECS REDEFINES  TEST-JSUB-SECS
                                         PIC 9(3).
           05  PARM-FILL1                PIC X.
           05  TEST-NJSUB-SECS           PIC X(3).
           05  PARM-NJSUB-SECS REDEFINES TEST-NJSUB-SECS
                                         PIC 9(3).
           05  PARM-FILL2                PIC X.
           05  TEST-REV-SECS             PIC X(3).
           05  PARM-REV-SECS  REDEFINES  TEST-REV-SECS
                                         PIC 9(3).
           05  PARM-FILL3                PIC X.
           05  TEST-TRB-SECS             PIC X(3).
           05  PARM-TRB-SECS  REDEFINES  TEST-TRB-SECS
                                         PIC 9(3).
           05  PARM-FILL4                PIC X.
           05  PARM-RETRV                PIC X.
           05  PARM-FILL5                PIC X.
           05  PARM-CHECK-TOTALS         PIC X.
           05  PARM-FILL6                PIC X.
           05  PARM-STATS-ALL            PIC X.
       01  DSN-TABLE.
           05  DSN-MAX                   PIC S9(3)  VALUE +5  COMP.
           05  DSN-SIZE                  PIC S9(3)  COMP.
           05  FILLER                    OCCURS 5 TIMES.
               10  DSN-DSN               PIC X(44).
               10  DSN-NVOL              PIC S9(3)  COMP.
               10  DSN-SUB               PIC S9(3)  COMP.
       01  VSN-TABLE.
           05  VSN-MAX                   PIC S9(3)  VALUE +5  COMP.
           05  VSN-SIZE                  PIC S9(3)  COMP.
           05  VSN-VSN                   OCCURS 5 TIMES
                                         PIC X(6).
       01  SAR-DSN.
           05  FILLER                    PIC X(24)  VALUE SPACES.
           05  GDG.
               10  FILLER                PIC X      VALUE 'G'.
               10  SAR-GEN               PIC 9(4)   VALUE ZEROS.
               10  FILLER                PIC X(3)   VALUE 'V00'.
           05  FILLER                    PIC X(12)  VALUE SPACES.
       01  TEMP-INITIALS.
           05  ZERO-INITIAL              PIC X      VALUE SPACE.
           05  FILLER                    PIC X(2)   VALUE SPACES.
       01  TEMP-READ-DATE.
           05  TEMP-READ-MONTH.
               10  TEMP-READ-FILL        PIC X.
               10  FILLER                PIC X.
           05  TEMP-READ-D               PIC X(2).
           05  TEMP-READ-Y               PIC X(2).
       01  TEMP-READ-DATE-2  REDEFINES   TEMP-READ-DATE
                                         PIC 9(6).
       01  TEMP-READ-1.
           05  TEMP-READ-H               PIC X(2).
           05  TEMP-READ-M               PIC X(2).
       01  TEMP-READ-2     REDEFINES     TEMP-READ-1
                                         PIC 9(4).
       01  READ-TIME-P                   PIC 9(4)   COMP-3.
       01  TEMP-TIME.
           05  TEMP-HOUR                 PIC 99.
           05  TEMP-MINUTES              PIC 99.
           05  TEMP-SECONDS              PIC 99.
       01  TEMP-DATE.
           05  TEMP-MONTH                PIC 99     VALUE ZEROS.
           05  TEMP-DAY                  PIC 99     VALUE ZEROS.
           05  TEMP-YEAR                 PIC 99     VALUE ZEROS.
       01  SYSTEM-DATE.
           05  SYSTEM-MONTH              PIC 99.
           05  FILLER                    PIC X.
           05  SYSTEM-DAY                PIC 99.
           05  FILLER                    PIC X.
           05  SYSTEM-YEAR               PIC 99.
       01  MONTH-VALUES.
           05  MONTH-1                   PIC 99     VALUE 31.
           05  MONTH-2                   PIC 99     VALUE 28.
           05  MONTH-3                   PIC 99     VALUE 31.
           05  MONTH-4                   PIC 99     VALUE 30.
           05  MONTH-5                   PIC 99     VALUE 31.
           05  MONTH-6                   PIC 99     VALUE 30.
           05  MONTH-7                   PIC 99     VALUE 31.
           05  MONTH-8                   PIC 99     VALUE 31.
           05  MONTH-9                   PIC 99     VALUE 30.
           05  MONTH-10                  PIC 99     VALUE 31.
           05  MONTH-11                  PIC 99     VALUE 30.
           05  MONTH-12                  PIC 99     VALUE 31.
       01  DAYS-IN-MONTH-TABLE           REDEFINES  MONTH-VALUES.
           05  DAYS-IN-MONTH             OCCURS 12 TIMES
                                         PIC 99.
       01  MONTHS.
           05  MONTH-NAME-1              PIC X(9)   VALUE 'JANUARY  '.
           05  MONTH-NAME-2              PIC X(9)   VALUE 'FEBRUARY '.
           05  MONTH-NAME-3              PIC X(9)   VALUE 'MARCH    '.
           05  MONTH-NAME-4              PIC X(9)   VALUE 'APRIL    '.
           05  MONTH-NAME-5              PIC X(9)   VALUE 'MAY      '.
           05  MONTH-NAME-6              PIC X(9)   VALUE 'JUNE     '.
           05  MONTH-NAME-7              PIC X(9)   VALUE 'JULY     '.
           05  MONTH-NAME-8              PIC X(9)   VALUE 'AUGUST   '.
           05  MONTH-NAME-9              PIC X(9)   VALUE 'SEPTEMBER'.
           05  MONTH-NAME-10             PIC X(9)   VALUE 'OCTOBER  '.
           05  MONTH-NAME-11             PIC X(9)   VALUE 'NOVEMBER '.
           05  MONTH-NAME-12             PIC X(9)   VALUE 'DECEMBER '.
       01  MONTH-LIST     REDEFINES      MONTHS.
           05 MONTH-NAME                 OCCURS 12 TIMES
                                         PIC X(9).
       01  SWITCHES.
           05  CARD-EOF-SWITCH           PIC X      VALUE 'N'.
           05  FICHE-EOF-SWITCH          PIC X      VALUE 'N'.
           05  IR-EOF-SWITCH             PIC X      VALUE 'N'.
           05  TABLE-SWITCH              PIC X      VALUE 'N'.
           05  FLOWLOG-SWITCH            PIC X      VALUE 'N'.
           05  CONV-DATE-SWITCH          PIC X      VALUE 'N'.
           05  OLD-MF-EOF-SWITCH         PIC X      VALUE 'N'.
           05  NEW-MF-EOF-SWITCH         PIC X      VALUE 'N'.
           05  FORCE-END-OF-FLOWLOG      PIC X      VALUE 'N'.
           05  NJSUBMIT-IND              PIC X      VALUE 'N'.
       01  CARD-INITIAL-TABLE.
           05  CARD-TABLE-CONTENTS       OCCURS 50 TIMES.
               10  CARD-SHIFT-ID         PIC X.
               10  CARD-CLERK-INITIALS   PIC X(3).
               10  CARD-CLERK-NAME       PIC X(20).
               10  CARD-NEW-CLERK        PIC X(3).
       01  CREDIT-TABLE.
           05  TABLE-CONTENTS            OCCURS 120 TIMES.
               10  CREDIT-DATE           PIC 9(6).
               10  CLERK-INITIALS        PIC X(3).
               10  JSUBMIT-TOTAL         PIC 9(3).
               10  NJSUBMIT-TOTAL        PIC 9(3).
               10  REVIEW-TOTAL          PIC 9(3).
               10  TROUBLE-TOTAL         PIC 9(2).
               10  SCAN-TOTAL            PIC 9(3).
       01  MESSAGE-1.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(31)
               VALUE 'MICROFICHE RECORDS READ      = '.
           05  FICHE-COUNT               PIC 9(7)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-1A.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(32)
               VALUE 'JES LOGS PROCESSED            = '.
           05  JES-LOG-COUNT             PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-2.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(32)
               VALUE 'JSUBMIT  RECORDS PROCESSED    = '.
           05  JSUBMIT-COUNT             PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-2A.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(32)
               VALUE 'NON-JSUBMIT RECORDS PROCESSED = '.
           05  NJSUBMIT-COUNT            PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-3.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(32)
               VALUE 'REVIEW  RECORDS PROCESSED     = '.
           05  REVIEW-COUNT              PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-4.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(32)
               VALUE 'INCIDENT RECORDS PROCESSED    = '.
           05  TROUBLE-COUNT             PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-5.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(32)
               VALUE 'SUBMIT DATE RECORDS PROCESSED = '.
           05  SUBMIT-DATE-COUNT         PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-6.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(32)
               VALUE 'REVIEW DATE RECORDS PROCESSED = '.
           05  REVIEW-DATE-COUNT         PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-6A.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(32)
               VALUE 'LOG RECORDS WRITTEN           = '.
           05  LOG-RCD-COUNT             PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-7.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(28)
               VALUE 'INPUT SAR MICROFICHE DSN  = '.
           05  OUT-MSG-DSN               PIC X(44)  VALUE SPACES.
           05  FILLER                    PIC X(7)   VALUE SPACES.
       01  MESSAGE-8.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(28)
               VALUE 'INPUT SAR MICROFICHE VSN  = '.
           05  OUT-MSG-VSN               PIC X(6)   VALUE SPACES.
           05  FILLER                    PIC X(45)  VALUE SPACES.
       01  MESSAGE-9.
           05  FILLER                    PIC X(16)  VALUE SPACES.
           05  FILLER                    PIC X(28)
               VALUE 'CONTENTS OF STATISTICS TABLE'.
           05  FILLER                    PIC X(36)  VALUE SPACES.
       01  MESSAGE-10.
           05  FILLER                    PIC X(40)
               VALUE '  DATE   CLERK  JSUBMIT  NON-JSUBMIT  RE'.
           05  FILLER                    PIC X(40)
               VALUE 'VIEW  INCIDENTS SCANS                   '.
       01  MESSAGE-11.
           05  FILLER                    PIC X      VALUE SPACE.
           05  MSG-DATE                  PIC 9(6)   VALUE ZEROS.
           05  FILLER                    PIC X(3)   VALUE SPACES.
           05  MSG-INITIALS              PIC X(3)   VALUE SPACES.
           05  FILLER                    PIC X(5)   VALUE SPACES.
           05  MSG-JSUBMIT               PIC ZZ9    VALUE ZEROS.
           05  FILLER                    PIC X(9)   VALUE SPACES.
           05  MSG-NJSUBMIT              PIC ZZ9    VALUE ZEROS.
           05  FILLER                    PIC X(7)   VALUE SPACES.
           05  MSG-REVIEW                PIC ZZ9    VALUE ZEROS.
           05  FILLER                    PIC X(6)   VALUE SPACES.
           05  MSG-TROUBLE               PIC Z9     VALUE ZEROS.
           05  FILLER                    PIC X(4)   VALUE SPACES.
           05  MSG-SCAN                  PIC ZZ9    VALUE ZEROS.
           05  FILLER                    PIC X(22)  VALUE SPACES.
       01  MESSAGE-12.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(35)
               VALUE 'TOTAL NUMBER OF ENTRIES IN TABLE = '.
           05  TABLE-ENTRY-COUNT         PIC 9(3)   VALUE ZEROS.
           05  FILLER                    PIC X(41)  VALUE SPACES.
       01  MESSAGE-13.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(34)
               VALUE 'THE FOLLOWING CONTROL CLERK CARDS '.
           05  FILLER                    PIC X(32)
               VALUE 'WERE INPUT INTO PROGRAM S802CTDY'.
           05  FILLER                    PIC X(13)  VALUE SPACES.
       01  MESSAGE-14.
           05  FILLER                    PIC X(11)  VALUE SPACES.
           05  FILLER                    PIC X(22)
               VALUE 'MASTER FILE STATISTICS'.
           05  FILLER                    PIC X(47)  VALUE SPACES.
       01  MESSAGE-15.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE 'OLD MASTER FILE RECORDS READ          = '.
           05  OLD-MF-RCDS-READ          PIC 9(5)   VALUE ZEROS.
           05  FILLER                    PIC X(34)  VALUE SPACES.
       01  MESSAGE-16.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE 'OLD MASTER FILE RECORDS DROPPED       = '.
           05  OLD-MF-RCDS-DROPPED       PIC 9(5)   VALUE ZEROS.
           05  FILLER                    PIC X(34)  VALUE SPACES.
       01  MESSAGE-17.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE 'DUPLICATE MASTER FILE RECORDS DROPPED = '.
           05  DUP-MF-RCDS-DROPPED       PIC 9(5)   VALUE ZEROS.
           05  FILLER                    PIC X(34)  VALUE SPACES.
       01  MESSAGE-18.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE 'NEW MASTER FILE RECORDS ADDED         = '.
           05  NEW-MF-RCDS-ADDED         PIC 9(5)   VALUE ZEROS.
           05  FILLER                    PIC X(34)  VALUE SPACES.
       01  MESSAGE-19.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE 'MASTER FILE RECORDS WRITTEN           = '.
           05  MF-RCDS-WRITTEN           PIC 9(5)   VALUE ZEROS.
           05  FILLER                    PIC X(34)  VALUE SPACES.
       01  MESSAGE-20.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(43)
               VALUE 'YEARLY MASTER FILE PROCESSING HAS OCURRED.'.
           05  FILLER                    PIC X(36)  VALUE SPACES.
       01  MESSAGE-21.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE 'VERIFY THAT THE CURRENT MONTH AND YEAR I'.
           05  FILLER                    PIC X(10)
               VALUE 'S JUNE, 19'.
           05  MSG-YEAR                  PIC 99     VALUE ZEROS.
           05  FILLER                    PIC X(27)  VALUE SPACES.
       01  MESSAGE-22.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(30)
               VALUE '*** THE FOLLOWING MASTER FILE '.
           05  FILLER                    PIC X(30)
               VALUE 'RECORD IS A DUPLICATE AND WAS '.
           05  FILLER                    PIC X(11)
               VALUE 'DROPPED ***'.
           05  FILLER                    PIC X(8)   VALUE SPACES.
       01  MESSAGE-23.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(16)
               VALUE 'TABLE ENTRY FOR '.
           05  OLD-INITIALS              PIC X(3)   VALUE SPACES.
           05  FILLER                    PIC X(21)
               VALUE ' HAS BEEN CHANGED TO '.
           05  NEW-INITIALS              PIC X(3)   VALUE SPACES.
           05  FILLER                    PIC X(36)  VALUE SPACES.
       01  PARM-ERROR.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(29)
               VALUE 'ERROR(S) DETECTED IN PARM - ('.
           05  OUT-PARM-DATA             PIC X(21)  VALUE SPACES.
           05  FILLER                    PIC X      VALUE ')'.
           05  FILLER                    PIC X(28)  VALUE SPACES.
       01  TABLE-ERROR-1.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(42)
               VALUE '*** CONTROL CLERK TABLE HAS REACHED ITS LI'.
           05  FILLER                    PIC X(37)
               VALUE 'MIT OF 50 ***                        '.
       01  TABLE-ERROR-2.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(42)
               VALUE '*** CREDIT TABLE HAS REACHED ITS LIMIT OF '.
           05  FILLER                    PIC X(37)
               VALUE '120 ***                              '.
       01  CARD-ERROR.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE '*** ERROR(S) DETECTED IN THE FOLLOWING C'.
           05  FILLER                    PIC X(21)
               VALUE 'ONTROL CLERK CARD ***'.
           05  FILLER                    PIC X(18)  VALUE SPACES.
       01  CALL-ERROR-1.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE 'RETURN CODE FROM PROGRAM S90102RV (RETRI'.
           05  FILLER                    PIC X(19)
               VALUE 'EVE DSN AND VSN) = '.
           05  CALL-RETURN-1             PIC S9(4)  VALUE ZEROS.
           05  FILLER                    PIC X(16)  VALUE SPACES.
       01  CALL-ERROR-2.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE 'RETURN CODE FROM PROGRAM S90102JN (RETRI'.
           05  FILLER                    PIC X(18)
               VALUE 'EVE JES NUMBER) = '.
           05  CALL-RETURN-2             PIC S9(4)  VALUE ZEROS.
           05  FILLER                    PIC X(17)  VALUE SPACES.
       01  GEN-ERROR-1.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE '*** WARNING - POSSIBLE ERROR DETECTED IN'.
           05  FILLER                    PIC X(38)
               VALUE ' SAR MICROFICHE GENERATIONS           '.
           05  FILLER                    PIC X      VALUE SPACES.
       01  GEN-ERROR-2.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(47)
               VALUE 'SAR  MICROFICHE GENERATION INPUT INTO THIS RUN '.
           05  FILLER                    PIC X(6)
               VALUE '    = '.
           05  FILLER.
               10  FILLER                PIC X      VALUE 'G'.
               10  CURR-SAR-GEN-ERR      PIC X(4)   VALUE SPACES.
               10  FILLER                PIC X(3)   VALUE 'V00'.
           05  FILLER                    PIC X(18)  VALUE SPACES.
       01  GEN-ERROR-3.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(47)
               VALUE 'SAR  MICROFICHE GENERATION INPUT INTO PREVIOUS '.
           05  FILLER                    PIC X(6)
               VALUE 'RUN = '.
           05  FILLER.
               10  FILLER                PIC X      VALUE 'G'.
               10  OLD-SAR-GEN-ERR       PIC X(4)   VALUE SPACES.
               10  FILLER                PIC X(3)   VALUE 'V00'.
           05  FILLER                    PIC X(18)  VALUE SPACES.
       01  FICHE-TOTAL-ERROR.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE '*** WARNING - ONE OR MORE TOTALS FOR REC'.
           05  FILLER                    PIC X(38)
               VALUE 'ORDS PROCESSED IS ZERO                '.
           05  FILLER                    PIC X      VALUE SPACES.
       01  MF-TOTAL-ERROR.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(40)
               VALUE '*** WARNING - MASTER FILE TOTALS ARE OUT'.
           05  FILLER                    PIC X(38)
               VALUE 'OF BALANCE                            '.
           05  FILLER                    PIC X      VALUE SPACES.
       01  HEADER-1.
           05  FILLER                    PIC X(36)  VALUE SPACES.
           05  FILLER                    PIC X(39)
               VALUE 'DAILY CONTROL SECTION PRODUCTION REPORT'.
           05  FILLER                    PIC X(58)  VALUE SPACES.
       01  HEADER-2.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(15)
               VALUE 'CONTROL CLERK: '.
           05  HDR-CLERK-NAME            PIC X(20)  VALUE SPACES.
           05  FILLER                    PIC X(48)  VALUE SPACES.
           05  FILLER                    PIC X(10)
               VALUE 'DATE RUN: '.
           05  RUN-DATE.
               10  RUN-MONTH             PIC 99.
               10  FILLER                PIC X.
               10  RUN-DAY               PIC 99.
               10  FILLER                PIC X.
               10  RUN-YEAR              PIC 99.
           05  FILLER                    PIC X(25)  VALUE SPACES.
       01  HEADER-3.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(15)
               VALUE 'REPORT MONTH : '.
           05  HDR-REPORT-MONTH          PIC X(9)   VALUE SPACES.
           05  FILLER                    PIC X(59)  VALUE SPACES.
           05  FILLER                    PIC X(10)
               VALUE 'TIME RUN: '.
           05  RUN-TIME.
               10  RUN-HOUR              PIC 99.
               10  FILLER                PIC X      VALUE ':'.
               10  RUN-MINUTES           PIC 99.
           05  FILLER                    PIC X(34)  VALUE SPACES.
       01  HEADER-4.
           05  FILLER                    PIC X      VALUE SPACE.
           05  FILLER                    PIC X(15)
               VALUE 'SHIFT        : '.
           05  HDR-SHIFT                 PIC X(6)   VALUE SPACES.
           05  FILLER                    PIC X(62)  VALUE SPACES.
           05  FILLER                    PIC X(9)
               VALUE 'JES  NUM:'.
           05  HDR-JES-NUM               PIC X(5)   VALUE SPACES.
           05  FILLER                    PIC X(36)  VALUE SPACES.
       01  HEADER-5.
           05  FILLER                    PIC X(84)  VALUE SPACES.
           05  FILLER                    PIC X(10)
               VALUE 'PAGE    : '.
           05  HDR-PAGE                  PIC 9      VALUE ZERO.
           05  FILLER                    PIC X(30)  VALUE SPACES.
       01  HEADER-6.
           05  FILLER                    PIC X(40)
               VALUE '                              JOBS SUBMI'.
           05  FILLER                    PIC X(40)
               VALUE 'TTED                                    '.
           05  FILLER                    PIC X(53)  VALUE SPACES.
       01  HEADER-7.
           05  FILLER                    PIC X(40)
               VALUE '  REPORT    CLERK        JSUBMIT        '.
           05  FILLER                    PIC X(40)
               VALUE 'NON-JSUBMIT      JOBS REVIEWED     INCID'.
           05  FILLER                    PIC X(40)
               VALUE 'ENT REPORTS     TOTAL                   '.
           05  FILLER                    PIC X(13)  VALUE SPACES.
       01  HEADER-8.
           05  FILLER                    PIC X(40)
               VALUE '   DATE    INITIAL    TOTAL  MINUTES   T'.
           05  FILLER                    PIC X(40)
               VALUE 'OTAL MINUTES     TOTAL MINUTES     TOTAL'.
           05  FILLER                    PIC X(40)
               VALUE '   MINUTES     MINUTES                  '.
           05  FILLER                    PIC X(13)  VALUE SPACES.
       01  HEADER-9.
           05  FILLER                    PIC X(40)
               VALUE ' ________  _______    _____  _______   _'.
           05  FILLER                    PIC X(40)
               VALUE '____ _______     _____ _______     _____'.
           05  FILLER                    PIC X(40)
               VALUE '   _______     _______                  '.
           05  FILLER                    PIC X(13)  VALUE SPACES.
       01  END-WS                        PIC X(27)
                          VALUE '*** END WORKING STORAGE ***'.
       LINKAGE SECTION.
       01  IN-PARM.
           05  PARM-LEN                  PIC S9(4)  COMP.
           05  PARM-DATA                 PIC X(21).
      *
       PROCEDURE DIVISION USING IN-PARM.
      *
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  MAIN-ROUTINE : THIS ROUTINE CONTROLS THE FLOW OF THE     ***
      ***  PROGRAM.                                                 ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       MAIN-ROUTINE.
           OPEN OUTPUT MESSAGE-REPORT.
           PERFORM VERIFY-PARM.
           PERFORM RETRIEVE-DSN-JESNO-DATE-TIME.
           OPEN INPUT  SAR-FICHE
                INPUT  IR-FILE
                INPUT  CARD-FILE
                INPUT  IN-MAST-FILE
                OUTPUT LOG-REPORT
                OUTPUT OUT-NEW-FILE
                OUTPUT SORTIN-FILE.
           PERFORM GET-CARD.
           PERFORM BUILD-TABLE
               UNTIL CARD-EOF-SWITCH = 'Y'.
           PERFORM GET-IR-RCD.
           PERFORM PROCESS-FICHE-RCD
               UNTIL IR-EOF-SWITCH = 'Y'.
           PERFORM GET-FICHE-RCD.
           PERFORM PROCESS-FICHE-RCD
               UNTIL FICHE-EOF-SWITCH = 'Y'.
           PERFORM GET-OLD-MF-RCD.
           PERFORM PROCESS-OLD-MF-RCD
               UNTIL OLD-MF-EOF-SWITCH = 'Y'.
           CLOSE SAR-FICHE
                 IR-FILE
                 CARD-FILE
                 IN-MAST-FILE
                 LOG-REPORT
                 OUT-NEW-FILE
                 SORTIN-FILE.
           IF RETURN-CODE > 4
               GO TO END-OF-JOB
           ELSE
               SORT SORT-WORK-FILE
                   ON ASCENDING KEY SORT-SHIFT-ID, SORT-INITIALS,
                       SORT-YEAR, SORT-MONTH-DAY, SORT-REST
                   USING SORTIN-FILE
                   GIVING SORTOUT-FILE.
           IF SORT-RETURN NOT = 0
               MOVE SORT-RETURN TO RETURN-CODE
               GO TO END-OF-JOB
           ELSE
               NEXT SENTENCE.
           OPEN INPUT  SORTOUT-FILE
                OUTPUT STATS-REPORT
                OUTPUT OUT-MAST-FILE.
           PERFORM GET-NEW-MF-RCD.
           PERFORM PROCESS-NEW-MF-RCD
               UNTIL NEW-MF-EOF-SWITCH = 'Y'.
           CLOSE SORTOUT-FILE
                 OUT-MAST-FILE
                 STATS-REPORT.
           IF PARM-CHECK-TOTALS = 'Y'
               PERFORM CHECK-TOTALS
           ELSE
               NEXT SENTENCE.
       END-OF-JOB.
           CLOSE MESSAGE-REPORT.
           STOP RUN.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  GET-FICHE-RCD, GET-CARD, GET-OLD-MF-RCD AND              ***
      ***  GET-NEW-MF-RCD : THESE ROUTINES ARE USED TO READ THE     ***
      ***  FILES INPUT INTO THIS PROGRAM.                           ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       GET-IR-RCD.
           READ IR-FILE INTO IN-FICHE-RCD
               AT END MOVE 'Y' TO IR-EOF-SWITCH.
       GET-FICHE-RCD.
           READ SAR-FICHE INTO IN-FICHE-RCD
               AT END MOVE 'Y' TO FICHE-EOF-SWITCH.
       GET-CARD.
           READ CARD-FILE INTO IN-CARD
               AT END MOVE 'Y' TO CARD-EOF-SWITCH.
       GET-OLD-MF-RCD.
           READ IN-MAST-FILE INTO STORE-MF-RCD
               AT END MOVE 'Y' TO OLD-MF-EOF-SWITCH.
       GET-NEW-MF-RCD.
           READ SORTOUT-FILE INTO TEMP-MF-RCD
               AT END MOVE 'Y' TO NEW-MF-EOF-SWITCH.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  VERIFY-PARM : THIS ROUTINE CHECKS THE PARM DATA PASSED   ***
      ***  FROM THE JCL. IT VERIFIES THAT THE DATA IS IN THE        ***
      ***  CORRECT FORMAT AND THE FIELDS CONTAIN VALID VALUES.      ***
      ***  THIS ROUTINE IS ACCESSED BY MAIN-ROUTINE.                ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       VERIFY-PARM.
           MOVE PARM-DATA TO SAVE-PARM, OUT-PARM-DATA.
           IF  TEST-JSUB-SECS NOT NUMERIC OR
               TEST-NJSUB-SECS NOT NUMERIC OR
               TEST-REV-SECS NOT NUMERIC OR
               TEST-TRB-SECS NOT NUMERIC OR
               PARM-JSUB-SECS = 0 OR
               PARM-NJSUB-SECS = 0 OR
               PARM-FILL1 NOT = ',' OR
               PARM-FILL2 NOT = ',' OR
               PARM-FILL3 NOT = ',' OR
               PARM-FILL4 NOT = ',' OR
               PARM-FILL5 NOT = ',' OR
               PARM-FILL6 NOT = ',' OR
               PARM-RETRV NOT = 'Y' AND
               PARM-RETRV NOT = 'N' OR
               PARM-CHECK-TOTALS NOT = 'Y' AND
               PARM-CHECK-TOTALS NOT = 'N' OR
               PARM-STATS-ALL NOT = 'Y' AND
               PARM-STATS-ALL NOT = 'N'
                   WRITE OUT-MSG-LINE FROM PARM-ERROR
                       AFTER ADVANCING TOP-OF-PAGE
                   MOVE 8 TO RETURN-CODE
                   GO TO END-OF-JOB
           ELSE
               NEXT SENTENCE.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  RETRIEVE-DSN-JESNO-DATE-TIME : THIS ROUTINE              ***
      ***  RETRIEVES THE CURRENT DATE AND TIME FROM THE SYSTEM,     ***
      ***  THE JES NUMBER OF THE JOB EXECUTING THIS PROGRAM AND     ***
      ***  THE DATA SET NAME AND VOLUME SERIAL NUMBER OF THE SAR    ***
      ***  MICROFICHE FILE INPUT INTO THIS PROGRAM. THIS ROUTINE    ***
      ***  IS ACCESSED BY MAIN-ROUTINE.                             ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       RETRIEVE-DSN-JESNO-DATE-TIME.
           MOVE CURRENT-DATE TO RUN-DATE, SYSTEM-DATE.
           MOVE SYSTEM-YEAR TO MSG-YEAR.
           MOVE TIME-OF-DAY TO TEMP-TIME.
           MOVE TEMP-HOUR TO RUN-HOUR.
           MOVE TEMP-MINUTES TO RUN-MINUTES.
           SUBTRACT 1 FROM SYSTEM-MONTH GIVING PREV-MONTH.
           IF SYSTEM-MONTH = 1
               MOVE 12 TO PREV-MONTH
           ELSE
               NEXT SENTENCE.
           CALL 'S9010260' USING ONE, S90102JN, JES-NUM.
           IF RETURN-CODE = 0
               MOVE JES-NUM TO HDR-JES-NUM
           ELSE
               MOVE RETURN-CODE TO CALL-RETURN-2
               WRITE OUT-MSG-LINE FROM CALL-ERROR-2
                   AFTER ADVANCING 2 LINES
               MOVE 0 TO RETURN-CODE.
           IF PARM-RETRV = 'Y'
               CALL 'S9010260' USING ONE, S90102RV, DDNAME, DSN-TABLE,
                   VSN-TABLE
               MOVE DSN-DSN (1) TO SAR-DSN, OUT-MSG-DSN
               MOVE GDG TO OUT-MF-SAR-GEN
               MOVE VSN-VSN (1) TO OUT-MSG-VSN
               IF RETURN-CODE NOT = 0
                   MOVE RETURN-CODE TO CALL-RETURN-1
                   WRITE OUT-MSG-LINE FROM CALL-ERROR-1
                       AFTER ADVANCING 2 LINES
                   GO TO END-OF-JOB
           ELSE
               NEXT SENTENCE.
           MOVE SAR-GEN TO SAR-GEN-X.
           IF SAR-GEN-X NOT NUMERIC
               MOVE ZEROS TO SAR-GEN
           ELSE
               NEXT SENTENCE.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  BUILD-TABLE : THIS ROUTINE READS A CARD MEMBER THAT      ***
      ***  CONTAINS A CARD FOR EVERY CONTROL CLERK IN THE DPC.      ***
      ***  EACH CARD CONTAINS THE CONTROL CLERK'S INITIALS, NAME,   ***
      ***  AND THE SHIFT THEY WORK ON. A TABLE IS THEN CREATED      ***
      ***  WITH AN ENTRY FOR EACH OF THESE CARDS. THIS ROUTINE      ***
      ***  IS ACCESSED BY MAIN-ROUTINE.                             ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       BUILD-TABLE.
           ADD 1 TO TABLE-COUNT.
           IF TABLE-COUNT = 1
               WRITE OUT-MSG-LINE FROM MESSAGE-13
                   AFTER ADVANCING TOP-OF-PAGE
               WRITE OUT-MSG-LINE FROM BLANK-LINE
                   AFTER ADVANCING 2 LINES
           ELSE
               IF TABLE-COUNT > 49
                   WRITE OUT-MSG-LINE FROM TABLE-ERROR-1
                       AFTER ADVANCING TOP-OF-PAGE
                   MOVE 'Y' TO FICHE-EOF-SWITCH
                   MOVE 'Y' TO IR-EOF-SWITCH
                   MOVE 'Y' TO CARD-EOF-SWITCH
                   MOVE 'Y' TO OLD-MF-EOF-SWITCH
                   MOVE 'Y' TO NEW-MF-EOF-SWITCH
                   MOVE 36 TO RETURN-CODE.
           MOVE IN-CARD-DATA TO OUT-CARD-DATA.
           IF IN-SHIFT-CODE = '1' AND
               CRD-FILL1 = ',' AND
               CRD-FILL2 = ',' OR
               IN-SHIFT-CODE = '2' AND
               CRD-FILL1 = ',' AND
               CRD-FILL2 = ',' OR
               IN-SHIFT-CODE = '3' AND
               CRD-FILL1 = ',' AND
               CRD-FILL2 = ','
                   MOVE IN-SHIFT-CODE TO CARD-SHIFT-ID (TABLE-COUNT)
                   MOVE IN-CARD-INITIALS TO
                        CARD-CLERK-INITIALS (TABLE-COUNT)
                   MOVE IN-CARD-NAME TO CARD-CLERK-NAME (TABLE-COUNT)
                   MOVE IN-CARD-NEW-CLERK TO
                        CARD-NEW-CLERK (TABLE-COUNT)
                   MOVE TABLE-COUNT TO MAX-CARD-COUNT
                   WRITE OUT-MSG-LINE FROM OUT-CARD
           ELSE
               WRITE OUT-MSG-LINE FROM CARD-ERROR
                  AFTER ADVANCING 2 LINES
               WRITE OUT-MSG-LINE FROM OUT-CARD
               WRITE OUT-MSG-LINE FROM BLANK-LINE
                   AFTER ADVANCING 2 LINES
               MOVE 'Y' TO FICHE-EOF-SWITCH
               MOVE 'Y' TO IR-EOF-SWITCH
               MOVE 'Y' TO OLD-MF-EOF-SWITCH
               MOVE 'Y' TO NEW-MF-EOF-SWITCH
               MOVE 12 TO RETURN-CODE.
           PERFORM GET-CARD.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  PROCESS-FICHE-RCD :                                      ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       PROCESS-FICHE-RCD.
           ADD 1 TO FICHE-COUNT.
           IF SAR-HEADER = 'SAR' AND
              SAR-PAGE NOT EQUAL TO 'PAGE' AND
              STORE-SUBMIT-INITIALS NOT EQUAL TO '   '
                  PERFORM END-OF-FLOWLOG
           ELSE
               NEXT SENTENCE.
           IF SAR-HEADER = 'SAR' AND
              SAR-PAGE NOT EQUAL TO 'PAGE'
                 MOVE SAR-JOB-NAME TO LOG-JOB
    |            MOVE SPACES TO SCAN-FIELD, LOG-UCC7-NUM
                 MOVE 'N' TO NJSUBMIT-IND
    |            MOVE 'SUBMITTED/J' TO SUBMIT-TYPE
                 ADD 1 TO JES-LOG-COUNT
                 MOVE SAR-JES-NUM TO LOG-JES
                 MOVE SAR-ARCH-MONTH TO TEMP-MONTH
                 MOVE SAR-ARCH-DAY   TO TEMP-DAY
                 MOVE SAR-ARCH-YEAR  TO TEMP-YEAR
                 MOVE TEMP-DATE TO STORE-SUBMIT-DATE
                 ADD 1 TO SUBMIT-DATE-COUNT
                 MOVE SAR-ARCH-HOUR  TO TEMP-READ-H
                 MOVE SAR-ARCH-MIN   TO TEMP-READ-M
                 MOVE SAR-ARCH-MONTH TO TEMP-MONTH
                 MOVE SAR-ARCH-DAY   TO TEMP-DAY
                 MOVE SAR-ARCH-YEAR  TO TEMP-YEAR
                 MOVE TEMP-DATE TO STORE-REVIEW-DATE
                 ADD 1 TO REVIEW-DATE-COUNT
                 MOVE SAR-ARCH-HOUR  TO LOG-REVIEW-TIME-H
                 MOVE SAR-ARCH-MIN   TO LOG-REVIEW-TIME-M
           IF TROUBLE-LINE = 'CLERK: O' OR
              TROUBLE-LINE = 'CLERK: 0' OR
              TROUBLE-LINE = 'CLERK: C'
               MOVE ZEROS TO TABLE-COUNT
               MOVE 'N' TO TABLE-SWITCH
               MOVE STORE-REVIEW-DATE TO TEMP-CREDIT-DATE, LOG-DATE
               MOVE IN-TROUBLE-INITIALS TO TEMP-INITIALS, LOG-INITIALS
               PERFORM UPDATE-TABLE
                   UNTIL TABLE-SWITCH = 'Y'
               ADD 1 TO TROUBLE-TOTAL (TABLE-COUNT)
               ADD 1 TO TROUBLE-COUNT
    |          MOVE 'IR OPENED  ' TO LOG-MSG
               MOVE 9999 TO LOG-SUBMIT-TIME
    |          MOVE '9' TO LOG-SHIFT-ID
    |          PERFORM ASSIGN-SHIFT-ID-LOG-RCD VARYING CARD-COUNT
    |              FROM 1 BY 1 UNTIL CARD-COUNT > MAX-CARD-COUNT
               WRITE OUT-LOG-LINE FROM LOG-RCD
               WRITE OUT-NEW-LINE FROM LOG-RCD
               ADD 1 TO LOG-RCD-COUNT
           ELSE
               NEXT SENTENCE.
           IF REVIEW-LINE = 'REVIEW CLERK    ===>  O' OR
              REVIEW-LINE = 'REVIEW CLERK    ===>  0' OR
              REVIEW-LINE = 'REVIEW CLERK    ===>  C'
               MOVE ZEROS TO TABLE-COUNT
               MOVE 'N' TO TABLE-SWITCH
               MOVE STORE-REVIEW-DATE TO TEMP-CREDIT-DATE, LOG-DATE
               MOVE IN-REVIEW-INITIALS TO TEMP-INITIALS, LOG-INITIALS
               PERFORM UPDATE-TABLE
                   UNTIL TABLE-SWITCH = 'Y'
               ADD 1 TO REVIEW-TOTAL (TABLE-COUNT)
               ADD 1 TO REVIEW-COUNT
    |          MOVE 'REVIEWED   ' TO LOG-MSG
               MOVE 9999 TO LOG-SUBMIT-TIME
               WRITE OUT-LOG-LINE FROM LOG-RCD
               WRITE OUT-NEW-LINE FROM LOG-RCD
               ADD 1 TO LOG-RCD-COUNT
           ELSE
               NEXT SENTENCE.
           IF JCL-SLASH = '//' AND SCAN-FIELD = SPACES
               MOVE ZEROS TO SCAN-TALLY
               INSPECT IN-FICHE-RCD
                   TALLYING SCAN-TALLY FOR ALL 'TYPRUN=SCAN'
               IF SCAN-TALLY > 0
                   MOVE 'SCAN' TO SCAN-FIELD
           ELSE
               NEXT SENTENCE.
    |      IF IN-UCC7-LINE = 'UCC7 JOB#='
    |          MOVE IN-UCC7-NUM TO LOG-UCC7-NUM
    |      ELSE
    |          NEXT SENTENCE.
           IF IN-ADC-MSG = 'ADC001I' AND IN-READ-MSG = ' READ    '
               MOVE IN-READ-H TO TEMP-READ-H
               MOVE IN-READ-M TO TEMP-READ-M
               MOVE IN-READ-DATE-M TO TEMP-READ-MONTH
               MOVE IN-READ-DATE-D TO TEMP-READ-D
               MOVE IN-READ-DATE-Y TO TEMP-READ-Y
               MOVE TEMP-READ-DATE-2 TO STORE-SUBMIT-DATE
                   IF TEMP-READ-FILL = ' '
                       MOVE '0' TO TEMP-READ-FILL
                       MOVE TEMP-READ-DATE-2 TO STORE-SUBMIT-DATE
           ELSE
               NEXT SENTENCE.
           IF FLOWLOG-LINE = 'OB FLOW********' OR
              FLOWLOG-LINE = 'OW-ORIGINAL****'
               MOVE 'Y' TO FLOWLOG-SWITCH
           ELSE
               NEXT SENTENCE.
           IF FLOWLOG-SWITCH = 'Y'
               PERFORM INSIDE-FLOWLOG
           ELSE
               NEXT SENTENCE.
           MOVE SPACES TO IN-FICHE-RCD.
           IF IR-EOF-SWITCH = 'N'
               PERFORM GET-IR-RCD
           ELSE
               PERFORM GET-FICHE-RCD.
           IF FICHE-EOF-SWITCH = 'Y'
               WRITE OUT-MSG-LINE FROM MESSAGE-1
                   AFTER ADVANCING TOP-OF-PAGE
               WRITE OUT-MSG-LINE FROM MESSAGE-1A
               WRITE OUT-MSG-LINE FROM MESSAGE-2
               WRITE OUT-MSG-LINE FROM MESSAGE-2A
               WRITE OUT-MSG-LINE FROM MESSAGE-3
               WRITE OUT-MSG-LINE FROM MESSAGE-4
               WRITE OUT-MSG-LINE FROM MESSAGE-5
               WRITE OUT-MSG-LINE FROM MESSAGE-6
               WRITE OUT-MSG-LINE FROM MESSAGE-6A
               WRITE OUT-MSG-LINE FROM MESSAGE-7
                   AFTER ADVANCING 2 LINES
               WRITE OUT-MSG-LINE FROM MESSAGE-8
                   AFTER ADVANCING 2 LINES
               WRITE OUT-MSG-LINE FROM MESSAGE-9
                   AFTER ADVANCING TOP-OF-PAGE
               WRITE OUT-MSG-LINE FROM BLANK-LINE
                   AFTER ADVANCING 2 LINES
               WRITE OUT-MSG-LINE FROM MESSAGE-10
               MOVE ZEROS TO TABLE-COUNT
               PERFORM PRINT-TABLE
                  UNTIL TABLE-COUNT = MAX-TABLE-COUNT
               MOVE MAX-TABLE-COUNT TO TABLE-ENTRY-COUNT
               WRITE OUT-MSG-LINE FROM MESSAGE-12
                   AFTER ADVANCING 2 LINES
               MOVE ZEROS TO TABLE-COUNT
               PERFORM CONVERT-ZERO-INITIALS
                  UNTIL TABLE-COUNT = MAX-TABLE-COUNT
               PERFORM SEARCH-TABLE VARYING CARD-COUNT
                   FROM 1 BY 1 UNTIL CARD-COUNT > MAX-CARD-COUNT
           ELSE
               NEXT SENTENCE.
       INSIDE-FLOWLOG.
           IF SUBMIT-LINE = 'INITIALS O' OR
              SUBMIT-LINE = 'INITIALS 0' OR
              SUBMIT-LINE = 'INITIALS C'
               MOVE IN-SUBMIT-INITIALS TO STORE-SUBMIT-INITIALS
           ELSE
               NEXT SENTENCE.
           IF SUBMIT-LINE = 'USE "F XX '
               MOVE 'Y' TO NJSUBMIT-IND
    |          MOVE 'SUBMITTED/N' TO SUBMIT-TYPE
           ELSE
               NEXT SENTENCE.
           IF FLOWLOG-LINE = 'ND JOB FLOW****' OR
               FORCE-END-OF-FLOWLOG = 'Y'
                   PERFORM END-OF-FLOWLOG
           ELSE
               NEXT SENTENCE.
       END-OF-FLOWLOG.
           IF STORE-SUBMIT-INITIALS NOT EQUAL TO '   '
               MOVE ZEROS TO TABLE-COUNT
               MOVE 'N' TO TABLE-SWITCH
               MOVE STORE-SUBMIT-DATE TO TEMP-CREDIT-DATE, LOG-DATE
               MOVE STORE-SUBMIT-INITIALS TO TEMP-INITIALS,
                   LOG-INITIALS
               PERFORM UPDATE-TABLE
                   UNTIL TABLE-SWITCH = 'Y'
               MOVE SUBMIT-TYPE TO LOG-MSG
               MOVE SCAN-FIELD TO LOG-SCAN
               PERFORM SCAN-ROUTINE
               MOVE TEMP-READ-2 TO READ-TIME-P
               MOVE READ-TIME-P TO LOG-SUBMIT-TIME
               MOVE '99' TO LOG-REVIEW-TIME-H, LOG-REVIEW-TIME-M
    |          MOVE '9' TO LOG-SHIFT-ID
    |          PERFORM ASSIGN-SHIFT-ID-LOG-RCD VARYING CARD-COUNT
    |              FROM 1 BY 1 UNTIL CARD-COUNT > MAX-CARD-COUNT
               WRITE OUT-LOG-LINE FROM LOG-RCD
               WRITE OUT-NEW-LINE FROM LOG-RCD
               ADD 1 TO LOG-RCD-COUNT
               MOVE SPACES TO SCAN-FIELD, LOG-SCAN
               IF  NJSUBMIT-IND = 'Y'
                   ADD 1 TO NJSUBMIT-TOTAL (TABLE-COUNT)
                   ADD 1 TO NJSUBMIT-COUNT
               ELSE
                   ADD 1 TO JSUBMIT-TOTAL (TABLE-COUNT)
                   ADD 1 TO JSUBMIT-COUNT
           ELSE
               NEXT SENTENCE.
           MOVE SPACES TO STORE-SUBMIT-INITIALS.
           MOVE 'N' TO FLOWLOG-SWITCH, FORCE-END-OF-FLOWLOG.
       SCAN-ROUTINE.
           IF LOG-SCAN = 'SCAN'
               ADD 1 TO SCAN-TOTAL (TABLE-COUNT)
           ELSE
               NEXT SENTENCE.
    |  ASSIGN-SHIFT-ID-LOG-RCD.
    |      IF CARD-CLERK-INITIALS (CARD-COUNT) = LOG-INITIALS
    |          MOVE CARD-SHIFT-ID (CARD-COUNT) TO LOG-SHIFT-ID
    |      ELSE
    |          NEXT SENTENCE.
       UPDATE-TABLE.
           ADD 1 TO TABLE-COUNT.
           IF MAX-TABLE-COUNT < TABLE-COUNT
               MOVE TABLE-COUNT TO MAX-TABLE-COUNT
               MOVE TEMP-INITIALS TO CLERK-INITIALS (TABLE-COUNT)
               MOVE TEMP-CREDIT-DATE TO CREDIT-DATE (TABLE-COUNT)
               MOVE ZEROS TO JSUBMIT-TOTAL (TABLE-COUNT)
               MOVE ZEROS TO NJSUBMIT-TOTAL (TABLE-COUNT)
               MOVE ZEROS TO REVIEW-TOTAL (TABLE-COUNT)
               MOVE ZEROS TO TROUBLE-TOTAL (TABLE-COUNT)
               MOVE ZEROS TO SCAN-TOTAL (TABLE-COUNT)
               MOVE 'Y' TO TABLE-SWITCH
           ELSE
               NEXT SENTENCE.
           IF TEMP-INITIALS = CLERK-INITIALS (TABLE-COUNT) AND
               TEMP-CREDIT-DATE = CREDIT-DATE (TABLE-COUNT)
                   MOVE 'Y' TO TABLE-SWITCH
           ELSE
               NEXT SENTENCE.
           IF MAX-TABLE-COUNT > 118
               WRITE OUT-MSG-LINE FROM TABLE-ERROR-2
                   AFTER ADVANCING TOP-OF-PAGE
               MOVE 'Y' TO FICHE-EOF-SWITCH
               MOVE 'Y' TO CARD-EOF-SWITCH
               MOVE 'Y' TO OLD-MF-EOF-SWITCH
               MOVE 'Y' TO NEW-MF-EOF-SWITCH
               MOVE 28 TO RETURN-CODE
           ELSE
               NEXT SENTENCE.
       PRINT-TABLE.
           ADD 1 TO TABLE-COUNT.
           MOVE CREDIT-DATE (TABLE-COUNT) TO MSG-DATE.
           MOVE CLERK-INITIALS (TABLE-COUNT) TO MSG-INITIALS.
           MOVE JSUBMIT-TOTAL (TABLE-COUNT) TO MSG-JSUBMIT.
           MOVE NJSUBMIT-TOTAL (TABLE-COUNT) TO MSG-NJSUBMIT.
           MOVE REVIEW-TOTAL (TABLE-COUNT) TO MSG-REVIEW.
           MOVE TROUBLE-TOTAL (TABLE-COUNT) TO MSG-TROUBLE.
           MOVE SCAN-TOTAL (TABLE-COUNT) TO MSG-SCAN.
           WRITE OUT-MSG-LINE FROM MESSAGE-11.
       CONVERT-ZERO-INITIALS.
           ADD 1 TO TABLE-COUNT.
           MOVE CLERK-INITIALS (TABLE-COUNT) TO TEMP-INITIALS.
           IF ZERO-INITIAL = '0'
               MOVE TEMP-INITIALS TO OLD-INITIALS
               MOVE 'O' TO ZERO-INITIAL
               MOVE TEMP-INITIALS TO NEW-INITIALS,
                   CLERK-INITIALS (TABLE-COUNT)
               WRITE OUT-MSG-LINE FROM MESSAGE-23
                   AFTER ADVANCING 2 LINES
           ELSE
               NEXT SENTENCE.
       SEARCH-TABLE.
           PERFORM MATCH-RECORDS VARYING TABLE-COUNT
               FROM 1 BY 1 UNTIL TABLE-COUNT > MAX-TABLE-COUNT.
       MATCH-RECORDS.
           IF CARD-CLERK-INITIALS (CARD-COUNT) =
              CLERK-INITIALS (TABLE-COUNT)
                   PERFORM CALCULATE-TOTALS
                   MOVE CREDIT-DATE (TABLE-COUNT) TO  MF-DATE
                   MOVE CLERK-INITIALS (TABLE-COUNT) TO MF-INITIALS
                   MOVE CARD-SHIFT-ID (CARD-COUNT) TO TEMP-MF-SHIFT-ID
                   WRITE SORTIN-LINE FROM TEMP-MF-RCD
                   WRITE OUT-LOG-LINE FROM TEMP-MF-RCD
                   ADD 1 TO LOG-RCD-COUNT
                   ADD 1 TO NEW-MF-RCDS-ADDED
           ELSE
               NEXT SENTENCE.
       CALCULATE-TOTALS.
           IF  SCAN-TOTAL (TABLE-COUNT) < NJSUBMIT-TOTAL (TABLE-COUNT)
             OR SCAN-TOTAL (TABLE-COUNT) = NJSUBMIT-TOTAL (TABLE-COUNT)
                SUBTRACT SCAN-TOTAL (TABLE-COUNT) FROM
                    NJSUBMIT-TOTAL (TABLE-COUNT)
           ELSE
               NEXT SENTENCE.
           IF  SCAN-TOTAL (TABLE-COUNT) < REVIEW-TOTAL (TABLE-COUNT) OR
               SCAN-TOTAL (TABLE-COUNT) = REVIEW-TOTAL (TABLE-COUNT)
                   SUBTRACT SCAN-TOTAL (TABLE-COUNT) FROM
                       REVIEW-TOTAL (TABLE-COUNT)
           ELSE
               NEXT SENTENCE.
           MOVE JSUBMIT-TOTAL (TABLE-COUNT) TO MF-JSUBMIT-TOTAL.
           MOVE NJSUBMIT-TOTAL (TABLE-COUNT) TO MF-NJSUBMIT-TOTAL.
           MOVE REVIEW-TOTAL (TABLE-COUNT) TO MF-REVIEW-TOTAL.
           MOVE TROUBLE-TOTAL (TABLE-COUNT) TO MF-TROUBLE-TOTAL.
           COMPUTE STORE-JSUBMIT-MIN = (PARM-JSUB-SECS * JSUBMIT-TOTAL
               (TABLE-COUNT)) / 60.
           COMPUTE STORE-NJSUBMIT-MIN = (PARM-NJSUB-SECS *
               NJSUBMIT-TOTAL (TABLE-COUNT)) / 60.
           MULTIPLY PARM-REV-SECS BY REVIEW-TOTAL (TABLE-COUNT)
               GIVING TEMP-REVIEW-TOTAL.
           DIVIDE TEMP-REVIEW-TOTAL BY 60
               GIVING STORE-REVIEW-MIN
               REMAINDER REV-REM.
           IF REV-REM NOT = 0
               ADD 1 TO STORE-REVIEW-MIN
           ELSE
               NEXT SENTENCE.
           COMPUTE STORE-TROUBLE-MIN = (PARM-TRB-SECS * TROUBLE-TOTAL
               (TABLE-COUNT)) / 60.
           COMPUTE STORE-TOTAL-MIN = STORE-JSUBMIT-MIN +
             STORE-NJSUBMIT-MIN + STORE-REVIEW-MIN + STORE-TROUBLE-MIN.
           MOVE STORE-JSUBMIT-MIN TO MF-JSUBMIT-MIN.
           MOVE STORE-NJSUBMIT-MIN TO MF-NJSUBMIT-MIN.
           MOVE STORE-REVIEW-MIN TO MF-REVIEW-MIN.
           MOVE STORE-TROUBLE-MIN TO MF-TROUBLE-MIN.
           MOVE STORE-TOTAL-MIN TO MF-TOTAL-MIN.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  PROCESS-OLD-MF-RCD :                                     ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       PROCESS-OLD-MF-RCD.
           ADD 1 TO OLD-MF-RCDS-READ.
           IF TEST-SAR-GDG NUMERIC
               MOVE TEST-SAR-GDG TO OLD-SAR-GDG
               IF OLD-SAR-GDG > STORE-SAR-GDG
                   MOVE OLD-SAR-GDG TO STORE-SAR-GDG
           ELSE
               NEXT SENTENCE.
           IF SYSTEM-MONTH NOT = 6 OR
              SYSTEM-MONTH = 6 AND OLD-MF-YEAR = SYSTEM-YEAR
                  MOVE '9' TO STORE-MF-SHIFT-ID
                  PERFORM ASSIGN-SHIFT-ID VARYING CARD-COUNT
                      FROM 1 BY 1 UNTIL CARD-COUNT > MAX-CARD-COUNT
                  WRITE SORTIN-LINE FROM STORE-MF-RCD
           ELSE
               ADD 1 TO OLD-MF-RCDS-DROPPED
               IF OLD-MF-RCDS-DROPPED = 1
      *            MOVE 4 TO RETURN-CODE
                   WRITE OUT-MSG-LINE FROM MESSAGE-20
                       AFTER ADVANCING TOP-OF-PAGE
                   WRITE OUT-MSG-LINE FROM MESSAGE-21
                       AFTER ADVANCING 2 LINES.
           PERFORM GET-OLD-MF-RCD.
           IF OLD-MF-EOF-SWITCH = 'Y'
               MOVE SPACES TO STORE-MF-RCD, TEMP-MF-RCD
               IF PARM-RETRV = 'Y'
                   SUBTRACT STORE-SAR-GDG FROM SAR-GEN
                       GIVING SAR-GDG-DIFF
                   IF SAR-GDG-DIFF NOT = +1
                       MOVE 4 TO RETURN-CODE
                       MOVE SAR-GEN TO CURR-SAR-GEN-ERR
                       MOVE STORE-SAR-GDG TO OLD-SAR-GEN-ERR
                       WRITE OUT-MSG-LINE FROM GEN-ERROR-1
                           AFTER ADVANCING TOP-OF-PAGE
                       WRITE OUT-MSG-LINE FROM GEN-ERROR-2
                           AFTER ADVANCING 2 LINES
                       WRITE OUT-MSG-LINE FROM GEN-ERROR-3
                           AFTER ADVANCING 2 LINES
           ELSE
               NEXT SENTENCE.
       ASSIGN-SHIFT-ID.
           IF CARD-CLERK-INITIALS (CARD-COUNT) = OLD-MF-INITIALS
               MOVE CARD-SHIFT-ID (CARD-COUNT) TO STORE-MF-SHIFT-ID
           ELSE
               NEXT SENTENCE.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  PROCESS-NEW-MF-RCD :                                     ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       PROCESS-NEW-MF-RCD.
           IF TEMP-MF-LINE = STORE-MF-LINE
               ADD 1 TO DUP-MF-RCDS-DROPPED
               MOVE 4 TO RETURN-CODE
               IF DUP-MF-RCDS-DROPPED = 1
                   WRITE OUT-MSG-LINE FROM MESSAGE-22
                       AFTER ADVANCING TOP-OF-PAGE
                   WRITE OUT-MSG-LINE FROM TEMP-MF-RCD
                       AFTER ADVANCING 2 LINES
               ELSE
                   WRITE OUT-MSG-LINE FROM MESSAGE-22
                       AFTER ADVANCING 2 LINES
                   WRITE OUT-MSG-LINE FROM TEMP-MF-RCD
                       AFTER ADVANCING 2 LINES
           ELSE
               WRITE OUT-MAST-LINE FROM TEMP-MF-RCD
               ADD 1 TO MF-RCDS-WRITTEN
                   IF MF-MONTH = SYSTEM-MONTH AND
                      MF-YEAR = SYSTEM-YEAR OR
                      MF-MONTH = PREV-MONTH AND
                      SYSTEM-DAY < 8 AND
                      MF-YEAR = SYSTEM-YEAR OR
                      MF-MONTH = PREV-MONTH AND
                      SYSTEM-DAY < 8 AND
                      MF-MONTH = 12 OR
                      PARM-STATS-ALL = 'Y'
                   MOVE MF-MONTH TO OUT-STATS-MONTH
                   MOVE MF-DAY TO OUT-STATS-DAY
                   MOVE MF-YEAR TO OUT-STATS-YEAR
                   MOVE MF-INITIALS TO OUT-STATS-INITIALS
                   MOVE MF-JSUBMIT-TOTAL TO OUT-STATS-JSUBMIT-TOTAL
                   MOVE MF-JSUBMIT-MIN TO OUT-STATS-JSUBMIT-MIN
                   MOVE MF-NJSUBMIT-TOTAL TO OUT-STATS-NJSUBMIT-TOTAL
                   MOVE MF-NJSUBMIT-MIN TO OUT-STATS-NJSUBMIT-MIN
                   MOVE MF-REVIEW-TOTAL TO OUT-STATS-REVIEW-TOTAL
                   MOVE MF-REVIEW-MIN TO OUT-STATS-REVIEW-MIN
                   MOVE MF-TROUBLE-TOTAL TO OUT-STATS-TROUBLE-TOTAL
                   MOVE MF-TROUBLE-MIN TO OUT-STATS-TROUBLE-MIN
                   MOVE MF-TOTAL-MIN TO OUT-STATS-TOTAL-MIN
                   IF MF-INITIALS NOT = STORE-MF-INITIALS OR
                      MF-MONTH NOT = STORE-MF-MONTH
                       MOVE ZERO TO HDR-PAGE
                       PERFORM SETUP-HEADER
                       MOVE MF-INITIALS TO STORE-MF-INITIALS
                       MOVE MF-MONTH TO STORE-MF-MONTH
                       WRITE OUT-STATS-LINE FROM OUT-STATS-RCD
                           AFTER ADVANCING 2 LINES
                       ADD 1 TO STATS-LINE-COUNT
                   ELSE
                       PERFORM CHECK-LINE-COUNT
                       WRITE OUT-STATS-LINE FROM OUT-STATS-RCD
                           AFTER ADVANCING 2 LINES
                       ADD 1 TO STATS-LINE-COUNT.
           MOVE TEMP-MF-RCD TO STORE-MF-RCD.
           PERFORM GET-NEW-MF-RCD.
               IF NEW-MF-EOF-SWITCH = 'Y'
                   WRITE OUT-MSG-LINE FROM MESSAGE-14
                       AFTER ADVANCING TOP-OF-PAGE
                   WRITE OUT-MSG-LINE FROM MESSAGE-15
                       AFTER ADVANCING 2 LINES
                   WRITE OUT-MSG-LINE FROM MESSAGE-16
                   WRITE OUT-MSG-LINE FROM MESSAGE-17
                   WRITE OUT-MSG-LINE FROM MESSAGE-18
                   WRITE OUT-MSG-LINE FROM MESSAGE-19
                   COMPUTE TEST-MF-TOTALS = ((OLD-MF-RCDS-READ -
                       OLD-MF-RCDS-DROPPED) - DUP-MF-RCDS-DROPPED) +
                       NEW-MF-RCDS-ADDED
                   IF TEST-MF-TOTALS NOT = MF-RCDS-WRITTEN
                       MOVE 32 TO RETURN-CODE
                       WRITE OUT-MSG-LINE FROM MF-TOTAL-ERROR
                           AFTER ADVANCING TOP-OF-PAGE
               ELSE
                   NEXT SENTENCE.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  SETUP-HEADER, GET-HDR-INITIALS AND CHECK-LINE-COUNT :    ***
      ***  THESE ROUTINES SETUP THE HEADER FOR THE STATISTICS       ***
      ***  REPORT. THESE ROUTINES ARE ACCESSED BY                   ***
      ***  PROCESS-NEW-MF-RCD.                                      ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       SETUP-HEADER.
           ADD 1 TO HDR-PAGE.
           MOVE ZEROS TO STATS-LINE-COUNT.
           MOVE ZEROS TO CARD-COUNT.
           MOVE 'N' TO TABLE-SWITCH.
           PERFORM GET-HDR-INITIALS
               UNTIL CARD-COUNT = MAX-CARD-COUNT OR
               TABLE-SWITCH = 'Y'.
           MOVE '* NAME NOT ON FILE *' TO HDR-CLERK-NAME.
           MOVE SPACES TO HDR-SHIFT.
           IF TABLE-SWITCH = 'Y'
               MOVE CARD-CLERK-NAME (CARD-COUNT) TO HDR-CLERK-NAME
               IF CARD-SHIFT-ID (CARD-COUNT) = '1'
                   MOVE 'FIRST ' TO HDR-SHIFT
               ELSE
                   IF CARD-SHIFT-ID (CARD-COUNT) = '2'
                       MOVE 'SECOND' TO HDR-SHIFT
                   ELSE
                       IF CARD-SHIFT-ID (CARD-COUNT) = '3'
                           MOVE 'THIRD ' TO HDR-SHIFT
                       ELSE
                           NEXT SENTENCE.
           MOVE MONTH-NAME (MF-MONTH) TO HDR-REPORT-MONTH.
           WRITE OUT-STATS-LINE FROM HEADER-1
               AFTER ADVANCING TOP-OF-PAGE.
           WRITE OUT-STATS-LINE FROM HEADER-2
               AFTER ADVANCING 2 LINES.
           WRITE OUT-STATS-LINE FROM HEADER-3.
           WRITE OUT-STATS-LINE FROM HEADER-4.
           WRITE OUT-STATS-LINE FROM HEADER-5.
           WRITE OUT-STATS-LINE FROM HEADER-6
               AFTER ADVANCING 3 LINES.
           WRITE OUT-STATS-LINE FROM HEADER-7.
           WRITE OUT-STATS-LINE FROM HEADER-8.
           WRITE OUT-STATS-LINE FROM HEADER-9
               AFTER ADVANCING 0 LINES.
       GET-HDR-INITIALS.
           ADD 1 TO CARD-COUNT.
           IF MF-INITIALS = CARD-CLERK-INITIALS (CARD-COUNT)
               MOVE 'Y' TO TABLE-SWITCH
           ELSE
               NEXT SENTENCE.
       CHECK-LINE-COUNT.
           IF STATS-LINE-COUNT > 23
               PERFORM SETUP-HEADER
           ELSE
               NEXT SENTENCE.
      *****************************************************************
      *****************************************************************
      ***                                                           ***
      ***  CHECK-TOTALS :                                           ***
      ***                                                           ***
      *****************************************************************
      *****************************************************************
       CHECK-TOTALS.
           IF SUBMIT-DATE-COUNT = ZEROS OR
              REVIEW-DATE-COUNT = ZEROS OR
              TROUBLE-COUNT = ZEROS OR
              REVIEW-COUNT = ZEROS OR
              JSUBMIT-COUNT = ZEROS OR
              NJSUBMIT-COUNT = ZEROS OR
              JES-LOG-COUNT = ZEROS
              WRITE OUT-MSG-LINE FROM FICHE-TOTAL-ERROR
                  AFTER ADVANCING TOP-OF-PAGE
              IF RETURN-CODE = 4
                  MOVE 24 TO RETURN-CODE
              ELSE
                  MOVE 20 TO RETURN-CODE
           ELSE
               NEXT SENTENCE.
 
  • Like
Reactions: NTMBK

interchange

Diamond Member
Oct 10, 1999
8,017
2,860
136
What's really fun when you are working on a little project with your boss, who is very smart, but never had any formal classes. He'd just declare variables on the fly, never documented anything. I would have to interpret what he was doing, put in comments, make the variable declaration statements, ah, good times.

Man Fortran sounds fun and almost modern in that way. I personally love some of the kludges you get with php or JavaScript code that's been copied around and works by sheer accident because of the "features" of those languages. Don't get me started on python. Give me pointer arithmetic any day over those things.

Anyone here a fan of Go? Wish that was around when programming was a part of my life.
 

JEDIYoda

Lifer
Jul 13, 2005
33,981
3,318
126
Its a huge challenge to rewrite a working application, but its not impossible and in the long run it may save them money. Instead of recruiting cobol devs, they should create a joint effort to write something new.

I often wonder when I will get the call for legacy C# developers. Technology changes so fast that a technology is legacy within about a decade.
don`t hold your breath -- You won`t!!
 

woolfe9998

Lifer
Apr 8, 2013
16,188
14,092
136
My dad used to program in COBOL, and also for a time. FORTRAN. Back in the 60's when they used punch cards.
 

Perknose

Forum Director & Omnipotent Overlord
Forum Director
Oct 9, 1999
46,042
8,740
136
My dad used to program in COBOL, and also for a time. FORTRAN. Back in the 60's when they used punch cards.
Lololol, in college (liberal arts major) I remember fooling around in the science labs using punch cards for FORTRAN. This was the late 1960s.
 

Lanyap

Elite Member
Dec 23, 2000
8,106
2,157
136
Another recent article about needing COBOL programmers. IBM has setup a website to help get people and organizations connected and help with support.





I still have one of these...

1586795471686.jpeg


And a collection of these
images
 

ShookKnight

Senior member
Dec 12, 2019
646
658
96
CO... COBOL!?

tenor.gif


Stupid question; wouldn't have Y2K efforts made everyone realize how antiquated everything was and then move towards to or plan to move towards to something more modern/flexible?
 

pauldun170

Diamond Member
Sep 26, 2011
9,133
5,072
136
CO... COBOL!?

tenor.gif


Stupid question; wouldn't have Y2K efforts made everyone realize how antiquated everything was and then move towards to or plan to move towards to something more modern/flexible?

Example workflow of how that works
They replaced it in 2001 for 3 million
They then replaced that in 2009 because it didn't scale well and half the vendors ended up disappearing under closures, mergers and etc ect. Cost them 5 million
They replaced that in 2016 because of years prior higherups decide all the in house developed stuff should be replaced with off the shelf stuff and let contractors deal with the implementation. Plus virtual all the things.
They are now scheduling to re-write all that because cloud all the things and the vendor stuff they put in in 2016 is a bloated mess and it takes to much effort for the vendor to put in enhancements.

Meanwhile, the antiquated system that still left chugging along, big sign on the CRT text terminal that say "do not touch without Bob's permission" has been cranking out transactions since that day everyone was complaining about having to move from Lotus Notes to Outlook. Also, Bob died 10 years ago.

They didn't replace during the Y2K cash cow because when you have a bajillion critical transactions a requirement that says 99.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999% availability , migrating off legacy mainframe+cobol over to the equivalent tech of the day was a bit dicey.


As for government infrastructure...
Well, it's self explanatory.
You have what needs to be done and then you political realities.
 

cytg111

Lifer
Mar 17, 2008
23,202
12,852
136
Example workflow of how that works
They replaced it in 2001 for 3 million
They then replaced that in 2009 because it didn't scale well and half the vendors ended up disappearing under closures, mergers and etc ect. Cost them 5 million
They replaced that in 2016 because of years prior higherups decide all the in house developed stuff should be replaced with off the shelf stuff and let contractors deal with the implementation. Plus virtual all the things.
They are now scheduling to re-write all that because cloud all the things and the vendor stuff they put in in 2016 is a bloated mess and it takes to much effort for the vendor to put in enhancements.

Meanwhile, the antiquated system that still left chugging along, big sign on the CRT text terminal that say "do not touch without Bob's permission" has been cranking out transactions since that day everyone was complaining about having to move from Lotus Notes to Outlook. Also, Bob died 10 years ago.

They didn't replace during the Y2K cash cow because when you have a bajillion critical transactions a requirement that says 99.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999% availability , migrating off legacy mainframe+cobol over to the equivalent tech of the day was a bit dicey.


As for government infrastructure...
Well, it's self explanatory.
You have what needs to be done and then you political realities.
Jfc this. Cloud and microservices... the next dogme to save people from doing stupid shit. Its the same shit over and over and over again.
 

hal2kilo

Lifer
Feb 24, 2009
23,431
10,327
136
Another recent article about needing COBOL programmers. IBM has setup a website to help get people and organizations connected and help with support.





I still have one of these...

View attachment 19560


And a collection of these
images
Jeez, those look so familiar. Card puller, mag tape write protect ring?
 

Ken g6

Programming Moderator, Elite Member
Moderator
Dec 11, 1999
16,250
3,845
75
Never worked with COBOL, but I should probably get a job someday working with legacy Perl code. :smilingimp: