Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-07 - decus/20-0168/csstot.cbl
There is 1 other file named csstot.cbl in the archive. Click here to see a list.
IDENTIFICATION DIVISION.
PROGRAM-ID. CSSTOT, VERSION-5, EDIT-5.
AUTHOR. BOB CONLON.
DATE-WRITTEN. 29-OCT-75, MODIFIED 04-FEB-81.
DATE-COMPILED.
REMARKS. THIS MODULE CREATES A COBOL SOURCE FILE BASED ON THE
	 EQUATIONS QUERIED FROM THE TTY.  IT WILL IN TURN PERFORM
	 THAT MATHEMATICAL OPERATION ON THE DATA BASE.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. DECSYSTEM-10.
OBJECT-COMPUTER. DECSYSTEM-10.

INPUT-OUTPUT SECTION.
FILE-CONTROL.

    SELECT FORMAT-FILE		ASSIGN TO DSK.

    SELECT VALID-FILE		ASSIGN TO DSK.

    SELECT SOURCE-FILE		ASSIGN TO DSK.

DATA DIVISION.
FILE SECTION.

FD  FORMAT-FILE; VALUE OF IDENTIFICATION IS FORMAT-NAME.

01  FORMAT-RECORD		PIC X(4035).

FD  VALID-FILE; VALUE OF IDENTIFICATION IS VLD-NAME.

01  VALID-RECORD.
    02 VB OCCURS 4000 TIMES	PIC X.

FD  SOURCE-FILE; VALUE OF IDENTIFICATION IS SOURCE-NAME.

01  SOURCE-RECORD		PIC X(84).

WORKING-STORAGE SECTION.
77  LINE-NUM			PIC S9(3); COMP.
77  D-LINE-NUM			PIC Z(3).
77  EXTRA-IND			PIC S9(6); COMP.
77  IR-IND			PIC S9(3); COMP.
77  IA-IND			PIC S9(3); COMP.
77  DONE-FLAG			PIC 9; COMP.
77  VLD-IND			PIC S9(3); COMP.
77  WR-IND			PIC S9(3); COMP.
77  PROMPT-IND			PIC S9(3); COMP.
77  USER-PASSWORD			PIC X(6).
77  A PIC X(24); VALUE "IDENTIFICATION DIVISION.".
77  E PIC X(15); VALUE "DATE-COMPILED.".
77  G PIC X(21); VALUE "ENVIRONMENT DIVISION.".
77  H PIC X(22); VALUE "CONFIGURATION SECTION.".
77  I PIC X(30); VALUE "SOURCE-COMPUTER. DECSYSTEM-10.".
77  J PIC X(30); VALUE "OBJECT-COMPUTER. DECSYSTEM-10.".
77  K PIC X(21); VALUE "INPUT-OUTPUT SECTION.".
77  L PIC X(13); VALUE "FILE-CONTROL.".
77  O PIC X(14); VALUE "DATA DIVISION.".
77  P PIC X(13); VALUE "FILE SECTION.".
77  R PIC X(11); VALUE "01  REC-IN.".
77  S PIC X(39); VALUE "FD  FORMAT-FILE             COPY FDFMT.".
77  T PIC X(24); VALUE "WORKING-STORAGE SECTION.".
77  W PIC X(17); VALUE "01  FILE-IN-NAME.".
77  Z PIC X(40); VALUE "01  PROMPT-INFO             COPY WSFMT1.".
77  A1 PIC X(19); VALUE "PROCEDURE DIVISION.".
77  A2 PIC X(16); VALUE "OPENING SECTION.".
77  A3 PIC X(32); VALUE "CHECK-IT.          COPY PRCHKPW.".
77  A4 PIC X(33); VALUE "PRIV-CHK.          COPY PRCHKPV2.".
77  A5 PIC X(31); VALUE "OPEN-IT.           COPY PRORD.".
77  A6 PIC X(33); VALUE "CONT.              COPY PRREWIT.".
77  A7 PIC X(34); VALUE "    MOVE OP-PAGE TO OVERLAY-ARRAY.".
77  A8 PIC X(9); VALUE "TOTAL-UP.".
77  BEF-DEC				PIC S9(3); COMP.
77  OP-FLAG				PIC 9; VALUE ZERO.
77  OL-ARRAY				PIC X(18); VALUE "01  OVERLAY-ARRAY.".
77  POUND	PIC X(34); VALUE "##################################".
77  REC-TYPE			PIC S9(3); COMP.


01  ZERO-LINE.
    02 FILLER PIC X(17); VALUE "    MOVE ZERO TO ".
    02 ZL-NUM		PIC Z(3).
    02 FILLER PIC X(5); VALUE "HOLD.".

01  TOTAL-UP-LINE-1.
    02 FILLER PIC X(36); VALUE "    PERFORM TOTAL-UP VARYING I FROM ".
    02 FILLER PIC X(17); VALUE "1 BY 1 UNTIL I > ".
    02 TUL1-NUM		PIC Z(3).
    02 FILLER PIC X; VALUE ".".

01  C.
    02 FILLER PIC X(8);VALUE "AUTHOR. ".
    02 AUTH-NAME		PIC X(32).
    02 FILLER 		PIC X; VALUE ".".

01  TOTAL-UP-LINE-2.
    02 FILLER PIC X(12); VALUE "    COMPUTE ".
    02 TUL2-NUM1 PIC Z(3).
    02 FILLER PIC X(7); VALUE "HOLD = ".
    02 TUL2-NUM2 PIC Z(3).
    02 FILLER PIC X(7); VALUE "HOLD + ".
    02 TUL2-NUM3 PIC Z(3).
    02 FILLER PIC X(6); VALUE "IN(I).".

01  IND.
    02 FILLER PIC X(29); VALUE "77  I".
    02 FILLER PIC X(16); VALUE "PIC S9(4); COMP.".

01  03-SYM.
    02 FILLER PIC X(10); VALUE "       03 ".
    02 03-ISYM-NUM1		PIC Z(3).
    02 FILLER PIC X(20); VALUE "INN".
    02 FILLER PIC X(4); VALUE "PIC ".
    02 03-ISYM-TYPE		PIC X(2).
    02 FILLER PIC X; VALUE "(".
    02 03-ISYM-NUM2		PIC 9(3).
    02 FILLER PIC X; VALUE ")".
    02 03-ISYM-PIC-INFO.
       03 03-ISYM-P-OR-V		PIC X(3).
       03 03-ISYM-NUM3			PIC 9(3).
       03 03-ISYM-PAREN2		PIC XX.
       03 03-ISYM-LIT		PIC X(17).

01  77-LINE.
    02 FILLER PIC X(4); VALUE "77  ".
    02 77-NUM1		PIC Z(3).
    02 FILLER PIC X(22); VALUE "HOLD".
    02 FILLER PIC X(7); VALUE "PIC S9(".
    02 77-NUM2			PIC 9(3).
    02 FILLER PIC X; VALUE ")".
    02 77-PIC-INFO.
       03 77-P-OR-V		PIC X(3).
       03 77-NUM3		PIC 9(3).
       03 77-PAREN2		PIC X(8).


01  OA-LINE.
    02 FILLER PIC X(17); VALUE "    02 OA OCCURS ".
    02 OAL-NUM1			PIC Z(3).
    02 FILLER PIC X(7); VALUE " TIMES.".

01  OA-LINE-OUT.
    02 FILLER PIC X(10); VALUE "       03 ".
    02 OALO-NUM1			PIC Z(3).
    02 FILLER PIC X(16); VALUE "IN".
    02 FILLER PIC X(4); VALUE "PIC ".
    02 OALO-TYPE		PIC X(3).
    02 OALO-NUM2		PIC 9(3).
    02 FILLER PIC X; VALUE ")".
    02 OALO-PIC-INFO.
       03 OALO-P-OR-V		PIC X(3).
       03 OALO-NUM3		PIC 9(3).
       03 OALO-PAREN2		PIC X(2).

01  B.
    02 FILLER PIC X(13); VALUE "PROGRAM-ID.".
    02 B-NAME			PIC X(6).
    02 FILLER			PIC X; VALUE ".".

01  D.
    02 FILLER PIC X(14); VALUE "DATE-WRITTEN.".
    02 D-DD		PIC Z9.
    02 FILLER		PIC X; VALUE "-".
    02 D-MON		PIC X(3).
    02 FILLER		PIC X; VALUE "-".
    02 D-YY		PIC 99.
    02 FILLER		PIC X; VALUE ".".

01  F.
    02 FILLER PIC X(21); VALUE "REMARKS.  THIS PROGRA".
    02 FILLER PIC X(21); VALUE "M WRITTEN BY CSSTOT.".

01  M.
    02 FILLER PIC X(18); VALUE "    SELECT FILE-IN".
    02 FILLER PIC X(19); VALUE SPACES.
    02 FILLER PIC X(13); VALUE "ASSIGN TO DSK".

01  M1.
    02 FILLER PIC X(37); VALUE SPACES.
    02 FILLER PIC X(22); VALUE "ACCESS MODE IS INDEXED".

01  M2.
    02 FILLER PIC X(37); VALUE SPACES.
    02 FILLER PIC X(23); VALUE "SYMBOLIC KEY IS SYM-KEY".

01  M3.
    02 FILLER PIC X(37); VALUE SPACES.
    02 FILLER PIC X(22); VALUE "RECORD KEY IS REC-KEY.".

01  N.
    02 FILLER PIC X(22); VALUE "    SELECT FORMAT-FILE".
    02 FILLER PIC X(15); VALUE SPACES.
    02 FILLER PIC X(14); VALUE "ASSIGN TO DSK.".

01  Q.
    02 FILLER PIC X(29); VALUE "FD  FILE-IN; RECORD CONTAINS".
    02 Q-NUM			PIC Z(4).
    02 FILLER PIC X(11); VALUE " CHARACTERS".

01  Q1.
    02 FILLER PIC X(28); VALUE "             BLOCK CONTAINS".
    02 Q1-NUM			PIC Z(3).
    02 FILLER PIC X(8); VALUE " RECORDS".

01  Q2.
    02 FILLER PIC X(13); VALUE SPACES.
    02 FILLER PIC X(40); VALUE "VALUE OF IDENTIFICATION IS FILE-IN-NAME.".

01  U.
    02 FILLER PIC X(13); VALUE "77  VERS-NUM".
    02 FILLER PIC X(15); VALUE SPACES.
    02 FILLER PIC X(16); VALUE "PIC 9(3); VALUE ".
    02 U-NUM			PIC Z(3).
    02 FILLER PIC X; VALUE ".".

01  V.
    02 FILLER PIC X(27); VALUE "77  SYM-KEY".
    02 FILLER PIC X(4); VALUE "PIC ".
    02 SK-PIC				PIC XX.
    02 FILLER			PIC X; VALUE "(".
    02 V-NUM			PIC 9(3).
    02 FILLER PIC XX; VALUE ").".


01  X.
    02 FILLER PIC X(27); VALUE "    02 FIN".
    02 FILLER PIC X(16); VALUE "PIC X(6); VALUE ".
    02 FILLER PIC X; VALUE QUOTE.
    02 X-FNAME			PIC X(6).
    02 FILLER PIC X; VALUE QUOTE.
    02 FILLER PIC X; VALUE ".".

01  Y.
    02 FILLER PIC X(27); VALUE "    02 FILLER".
    02 FILLER PIC X(16); VALUE "PIC X(3); VALUE".
    02 FILLER PIC X; VALUE QUOTE.
    02 FILLER PIC X(3); VALUE "IDX".
    02 FILLER PIC X; VALUE QUOTE.
    02 FILLER PIC X; VALUE ".".

01  P-TODAY.
    02 TOD.
       03 P-YY		PIC 99.
       03 P-MM		PIC 99.
       03 P-DD		PIC 99.
    02 FILLER		PIC X(6).

01  MONTH-REGISTER.
    02 FILLER PIC X(36); VALUE "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC".

01  MONTH-ARRAY REDEFINES MONTH-REGISTER.
    02 M-BUFF OCCURS 12 TIMES PIC X(3).

01  IN-SYM.
    02 FILLER PIC X(7); VALUE "    02 ".
    02 IS-NUM1			PIC ZZ9.
    02 FILLER PIC X(3); VALUE "INN".
    02 IS-REDEF			PIC X(20).
    02 FILLER PIC X(4); VALUE "PIC".
    02 IS-PIC			PIC XX.
    02 FILLER			PIC X; VALUE "(".
    02 IS-NUM2			PIC 9(3).
    02 FILLER PIC X; VALUE ")".
    02 IS-PIC-INFO.
       03 IP-PERIOD-OR-V		PIC X(3).
       03 IP-NUM1			PIC 9(3).
       03 IP-PAREN2			PIC XX.
       03 IP-LIT			PIC X(17).

01  REC-K.
    02 FILLER PIC X(33); VALUE "    02 REC-KEY".
    02 FILLER PIC X(4); VALUE "PIC ".
    02 RK-PIC			PIC XX.
    02 FILLER PIC X; VALUE "(".
    02 RK-NUM			PIC 9(3).
    02 FILLER PIC XX; VALUE ").".

01  IA-BUFFER.
    02 IA-1 PIC X(12); VALUE "    COMPUTE ".
    02 IA-2			PIC X(72).



01  LEDFMT-RECORD.
    02 PROMPT-TABLE OCCURS 150 TIMES	PIC X(20).
    02 LENGTH-OF-FIELD OCCURS 150 TIMES PIC 9(3).
    02 NUMBER-FIELDS                    PIC 9(3).
    02 NAMES OCCURS 28 TIMES		PIC X(6).
    02 VAL-ID			PIC X.
    02 AC-DAT			PIC X.
    02 SPC			PIC X.
    02 FILLER			PIC X(3).
    02 IND-BLOCK-FACT			PIC 9(3).
    02 OVER-LAY-PAGE			PIC 9(3).
    02 BLOCKING-FACTOR			PIC 9(3).
    02 PRI.
       03 PRIV OCCURS 28 TIMES		PIC 9(3).
    02 FILLER			PIC X(3).
    02 VERSION-NUMBER			PIC 9(3).
    02 NUM-CHARS			PIC 9(4).
    02 POS-KEY				PIC 99.
    02 NUM-PAGES			PIC 9(3).
    02 TOP-LINE OCCURS 50 TIMES		PIC 9(3).
    02 DECIMAL-POSIT OCCURS 150 TIMES	PIC 9.

01  WORK-RECORD.
    02 WR-BUFF OCCURS 34 TIMES PIC X.

01  INPUT-REGISTER.
    02 IR-BUFF OCCURS 72 TIMES PIC X.

01  INPUT-ARRAY.
    02 IA-BUFF OCCURS 31 TIMES PIC X(72).

01  IN-HOLD.
    02 IN1			PIC 9.
    02 IN2			PIC 9.
    02 IN3			PIC 9.

01  IN-HOLD1 REDEFINES IN-HOLD PIC 9(3).

01  FORMAT-NAME.
    02 F-NAME.
       03 FNAME		PIC X(3).
       03 FNAME1		PIC X(3).
    02 FILLER			PIC X(3); VALUE "FMT".

01  SOURCE-NAME.
    02 SNAME.
       03 FILLER PIC X(3); VALUE "TOT".
       03 S-NAME			PIC X(3).
    02 SEXT PIC X(3); VALUE "CBL".

01  VLD-NAME.
    02 VLDNAME			PIC X(6).
    02 FILLER			PIC X(3); VALUE "VLD".

PROCEDURE DIVISION.
OPENING-SECTION.
CHECK-IT.
    ENTER MACRO NAMDAT.
    DISPLAY "TYPE NAME OF INPUT FORMAT FILE: "; WITH NO ADVANCING.
    ACCEPT F-NAME.
    IF FNAME NOT = "DBM" DISPLAY "ILLEGAL FILE NAME" GO TO CHECK-IT.
    OPEN INPUT FORMAT-FILE.
    READ FORMAT-FILE; AT END STOP RUN.
    MOVE FORMAT-RECORD TO LEDFMT-RECORD.
    IF SPC = "(" MOVE 0 TO REC-TYPE, ENTER MACRO UNSSCR USING REC-TYPE, LEDFMT-RECORD.
    IF VAL-ID NOT = "Y" DISPLAY "YOU MUST HAVE A VALIDATION FILE TO RUN CSSTOT"
    ,STOP RUN.
    ENTER MACRO NOECHO USING PROMPT-IND, BREAK-1, PRI, USER-PASSWORD.
    SET PROMPT-IND TO ZERO.

LOOP1.
    SET PROMPT-IND UP BY 1.
    IF PROMPT-IND > 28 GO TO BREAK-1.
    IF USER-PASSWORD = NAMES(PROMPT-IND) GO TO BREAK-1.
    GO TO LOOP1.

BREAK-1.
    IF PROMPT-IND > 28 DISPLAY "CANNOT ACCESS THIS DATA", STOP RUN.
    DISPLAY " ".
    IF PRIV(PROMPT-IND) < 3 DISPLAY "NO PRIVILEGES TO RUN THIS PROGRAM"
    ,STOP RUN.
    MOVE F-NAME TO VLDNAME.
    DISPLAY "CSS ARITHMETIC PROCESSOR CSSTOT(V05-5)".
    DISPLAY " ".
    DISPLAY "TYPE A 3 CHARACTER IDENTIFIER FOR THIS APPLICATION:  "; WITH NO ADVANCING.
    ACCEPT S-NAME.

GET-AUTH.
    DISPLAY " ".
    DISPLAY "TYPE IN YOUR NAME:  "; WITH NO ADVANCING.
    ACCEPT AUTH-NAME.
    IF AUTH-NAME = SPACES GO TO GET-AUTH.
    OPEN INPUT VALID-FILE.
    READ VALID-FILE; AT END STOP RUN.
    MOVE ZERO TO IR-IND, IA-IND, LINE-NUM.
    DISPLAY "TYPE IN UP TO 30 EQUATIONS; TERMINATE EACH WITH A .<CR>".
    DISPLAY " ".

LOOP2.
    IF DONE-FLAG = 1 SET LINE-NUM TO IA-IND.
    SET LINE-NUM UP BY 1.
    MOVE LINE-NUM TO D-LINE-NUM.
    DISPLAY D-LINE-NUM " : "; WITH NO ADVANCING.
    ACCEPT INPUT-REGISTER.
    IF INPUT-REGISTER NOT = "L" GO TO LOOP2-CONT.
    DISPLAY "#"; WITH NO ADVANCING.
    ACCEPT LINE-NUM.
    SET LINE-NUM DOWN BY 1.
    MOVE LINE-NUM TO IA-IND.
    GO TO LOOP2.

LOOP2-CONT.
    IF INPUT-REGISTER = SPACES GO TO NEW-PROGRAM.
    MOVE ZERO TO DONE-FLAG.
    PERFORM CHK-NUM THRU CN-EXIT VARYING IR-IND FROM 1
    ,BY 1 UNTIL IR-IND > 72.
    IF DONE-FLAG = 1 , GO TO LOOP2.
    EXAMINE INPUT-REGISTER TALLYING ALL "@".
    IF TALLY = ZERO GO TO NO-AT.
    IF OVER-LAY-PAGE > ZERO GO TO NO-AT.
    DISPLAY "YOUR DATA BASE HAS NO OVERLAY PAGE CAPABILITIES".
    DISPLAY "@ IS ILLEGAL".
    SET DONE-FLAG TO 1.
    GO TO LOOP2.

NO-AT.
    EXAMINE INPUT-REGISTER TALLYING ALL "(".
    MOVE TALLY TO EXTRA-IND.
    EXAMINE INPUT-REGISTER TALLYING ALL ")".
    IF TALLY NOT = EXTRA-IND DISPLAY "WRONG NUMBER OF PARENTHESIS"
    ,SET DONE-FLAG TO 1, GO TO LOOP2.
    EXAMINE INPUT-REGISTER TALLYING ALL ".".
    IF TALLY NOT = 1 DISPLAY "WRONG NUMBER OF PERIODS IN STATEMENT"
    ,SET DONE-FLAG TO 1, GO TO LOOP2.
    SET IA-IND UP BY 1.
    IF IA-IND > 30 GO TO NEW-PROGRAM.
    PERFORM GET-AT THRU GA-EXIT VARYING IR-IND FROM 1 BY 1
    ,UNTIL IR-IND > 72.
    MOVE INPUT-REGISTER TO IA-BUFF(IA-IND).
    GO TO LOOP2.




CHK-NUM.
    IF DONE-FLAG = 1 GO TO CN-EXIT.
    MOVE ZEROES TO IN-HOLD.
    IF IR-BUFF(IR-IND) NOT = "I" GO TO CN-EXIT.
    MOVE IR-IND TO EXTRA-IND.
    SET EXTRA-IND DOWN BY 1.
    IF EXTRA-IND = ZERO DISPLAY "INVALID SYMBOL 0INN"
    ,SET DONE-FLAG TO 1, GO TO CN-EXIT.
    IF IR-BUFF(EXTRA-IND) NOT NUMERIC DISPLAY "INVALID SYMBOL INN"
    ,SET DONE-FLAG TO 1, GO TO CN-EXIT.
    MOVE IR-BUFF(EXTRA-IND) TO IN3.
    IF EXTRA-IND = 1 PERFORM CHK-P-IND THRU CP-EXIT, GO TO CN-EXIT.
    SET EXTRA-IND DOWN BY 1.
    IF IR-BUFF(EXTRA-IND) NOT NUMERIC PERFORM CHK-P-IND THRU CP-EXIT, GO TO CN-EXIT.
    MOVE IR-BUFF(EXTRA-IND) TO IN2.
    IF EXTRA-IND = 1 PERFORM CHK-P-IND THRU CP-EXIT, GO TO CN-EXIT.
    SET EXTRA-IND DOWN BY 1.
    IF IR-BUFF(EXTRA-IND) NOT NUMERIC PERFORM CHK-P-IND THRU CP-EXIT, GO TO CN-EXIT.
    MOVE IR-BUFF(EXTRA-IND) TO IN1.
    PERFORM CHK-P-IND THRU CP-EXIT.


CN-EXIT.





CHK-P-IND.
    IF IN-HOLD1 > NUMBER-FIELDS DISPLAY IN-HOLD1 "INN DOESN'T EXIST"
    ,GO TO CP-EXIT.
    MOVE ZERO TO VLD-IND.
    PERFORM TOTAL-UP VARYING PROMPT-IND FROM 1 BY 1 UNTIL 
    PROMPT-IND = IN-HOLD1.
    MOVE POUND TO WORK-RECORD.
    ADD 1 TO VLD-IND.
    MOVE ZERO TO WR-IND.
    PERFORM GET-VLD VARYING VLD-IND FROM VLD-IND BY 1 UNTIL
    ,WR-IND = LENGTH-OF-FIELD(IN-HOLD1).
    EXAMINE WORK-RECORD TALLYING ALL SPACES.
    IF TALLY = LENGTH-OF-FIELD(IN-HOLD1) GO TO CP-EXIT.
    EXAMINE WORK-RECORD TALLYING ALL "N".
    IF TALLY NOT = LENGTH-OF-FIELD(IN-HOLD1)
    ,DISPLAY IN-HOLD1 "INN IS NOT NUMERIC IN THE VALIDATION FILE"
    ,SET DONE-FLAG TO 1.

CP-EXIT.  EXIT.


TOTAL-UP.
    COMPUTE VLD-IND = VLD-IND + LENGTH-OF-FIELD(PROMPT-IND).

GET-VLD.
    SET WR-IND UP BY 1.
    MOVE VB(VLD-IND) TO WR-BUFF(WR-IND).

GET-AT.
    IF IR-BUFF(IR-IND) NOT = "@" GO TO GA-EXIT.
    MOVE "D" TO IR-BUFF(IR-IND).
    COMPUTE EXTRA-IND = IR-IND - 1.
    MOVE "L" TO IR-BUFF(EXTRA-IND).
    SET EXTRA-IND DOWN BY 1.
    MOVE "O" TO IR-BUFF(EXTRA-IND).
    SET EXTRA-IND DOWN BY 1.
    MOVE "H" TO IR-BUFF(EXTRA-IND).

GA-EXIT.  EXIT.

NEW-PROGRAM SECTION.
NP-OPENERS.
    DISPLAY "    CREATING " SNAME "." SEXT "  ...   "; WITH NO ADVANCING.
    OPEN OUTPUT SOURCE-FILE.
    WRITE SOURCE-RECORD FROM A.
    MOVE SNAME TO B-NAME.
    WRITE SOURCE-RECORD FROM B.
    WRITE SOURCE-RECORD FROM C.
    MOVE TODAY TO P-TODAY.
    MOVE P-DD TO D-DD.
    MOVE M-BUFF(P-MM) TO D-MON.
    MOVE P-YY TO D-YY.
    WRITE SOURCE-RECORD FROM D.
    WRITE SOURCE-RECORD FROM E.
    WRITE SOURCE-RECORD FROM F BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM G.
    WRITE SOURCE-RECORD FROM H.
    WRITE SOURCE-RECORD FROM I.
    WRITE SOURCE-RECORD FROM J BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM K.
    WRITE SOURCE-RECORD FROM L BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM M.
    WRITE SOURCE-RECORD FROM M1.
    WRITE SOURCE-RECORD FROM M2.
    WRITE SOURCE-RECORD FROM M3 BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM N BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM O.
    WRITE SOURCE-RECORD FROM P BEFORE ADVANCING 3 LINES.
    MOVE NUM-CHARS TO Q-NUM.
    WRITE SOURCE-RECORD FROM Q.
    MOVE BLOCKING-FACTOR TO Q1-NUM.
    WRITE SOURCE-RECORD FROM Q1.
    WRITE SOURCE-RECORD FROM Q2 BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM R.
    SET VLD-IND TO 1.
    PERFORM RO-SETUP THRU RO-EXIT VARYING PROMPT-IND FROM 1 BY 1
    ,UNTIL LENGTH-OF-FIELD(PROMPT-IND) = ZERO.
    MOVE SPACES TO SOURCE-RECORD.
    WRITE SOURCE-RECORD BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM S BEFORE ADVANCING 3 LINES.
    WRITE SOURCE-RECORD FROM T.
    IF OVER-LAY-PAGE = ZERO GO TO NO-OVERLAY-1.
    MOVE TOP-LINE(OVER-LAY-PAGE) TO PROMPT-IND.
    MOVE ZERO TO VLD-IND.
    PERFORM TOTAL-UP VARYING PROMPT-IND FROM 1 BY 1
    ,UNTIL PROMPT-IND = TOP-LINE(OVER-LAY-PAGE).
    SET VLD-IND UP BY 1.
    COMPUTE IR-IND = OVER-LAY-PAGE + 1.
    PERFORM 77-SETUP THRU 77-DONE VARYING PROMPT-IND FROM PROMPT-IND
    ,BY 1 UNTIL PROMPT-IND = TOP-LINE(IR-IND).
    WRITE SOURCE-RECORD FROM IND.

NO-OVERLAY-1.
    MOVE VERSION-NUMBER TO U-NUM.
    WRITE SOURCE-RECORD FROM U.
    MOVE LENGTH-OF-FIELD(POS-KEY) TO V-NUM.
    WRITE SOURCE-RECORD FROM V.
    MOVE "77  LINE-COUNT      PIC S9(3); COMP." TO SOURCE-RECORD.
    WRITE SOURCE-RECORD BEFORE ADVANCING 3 LINES.
    IF OVER-LAY-PAGE = ZERO GO TO NO-OVERLAY-2.
    WRITE SOURCE-RECORD FROM OL-ARRAY.
    COMPUTE IR-IND = (NUM-PAGES - OVER-LAY-PAGE) + 1.
    MOVE IR-IND TO OAL-NUM1, TUL1-NUM.
    WRITE SOURCE-RECORD FROM OA-LINE.
    MOVE ZERO TO VLD-IND.
    PERFORM TOTAL-UP VARYING PROMPT-IND FROM 1 BY 1
    ,UNTIL PROMPT-IND = TOP-LINE(OVER-LAY-PAGE).
    SET VLD-IND UP BY 1.
    MOVE TOP-LINE(OVER-LAY-PAGE) TO PROMPT-IND.
    COMPUTE IR-IND = OVER-LAY-PAGE + 1.
    PERFORM OA-SETUP THRU OA-EXIT VARYING PROMPT-IND FROM PROMPT-IND
    ,BY 1 UNTIL PROMPT-IND = TOP-LINE(IR-IND).
    MOVE SPACES TO SOURCE-RECORD.
    WRITE SOURCE-RECORD.

NO-OVERLAY-2.
    WRITE SOURCE-RECORD FROM W.
    MOVE F-NAME TO X-FNAME.
    WRITE SOURCE-RECORD FROM X.
    WRITE SOURCE-RECORD FROM Y BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM Z BEFORE ADVANCING 3 LINES.
    WRITE SOURCE-RECORD FROM A1.
    WRITE SOURCE-RECORD FROM A2.
    WRITE SOURCE-RECORD FROM A3.
    WRITE SOURCE-RECORD FROM A4 BEFORE ADVANCING 2 LINES.
    WRITE SOURCE-RECORD FROM A5.
    PERFORM DUMP-IA THRU DIA-CONT VARYING IA-IND FROM 1 BY 1
    ,UNTIL IA-BUFF(IA-IND) = SPACES.
    WRITE SOURCE-RECORD FROM A6.
    MOVE "WRONG.  COPY PRRTWR." TO SOURCE-RECORD, WRITE SOURCE-RECORD.
    IF OVER-LAY-PAGE = ZERO GO TO NO-OVERLAY-4.
    WRITE SOURCE-RECORD FROM A8.
    MOVE ZERO TO VLD-IND.
    PERFORM TOTAL-UP VARYING PROMPT-IND FROM 1 BY 1
    ,UNTIL PROMPT-IND = TOP-LINE(OVER-LAY-PAGE).
    SET VLD-IND UP BY 1.
    COMPUTE IR-IND = OVER-LAY-PAGE + 1.
    PERFORM TOT-LIN-SETUP THRU TL-EXIT VARYING PROMPT-IND FROM PROMPT-IND
    ,BY 1 UNTIL PROMPT-IND = TOP-LINE(IR-IND).

NO-OVERLAY-4.
    CLOSE SOURCE-FILE, FORMAT-FILE, VALID-FILE.
    STOP RUN.

RO-SETUP.
    MOVE "." TO IS-PIC-INFO, 03-ISYM-PIC-INFO.
    MOVE LENGTH-OF-FIELD(PROMPT-IND) TO IS-NUM2, 03-ISYM-NUM2.
    PERFORM GET-PIC THRU GP-DONE.
    MOVE SPACES TO IS-REDEF.
    IF PROMPT-IND = POS-KEY PERFORM GET-REC-KEY.
    MOVE PROMPT-IND TO IS-NUM1, 03-ISYM-NUM1.
    IF OVER-LAY-PAGE = ZERO GO TO RO-WRITE.
    IF PROMPT-IND < TOP-LINE(OVER-LAY-PAGE) GO TO RO-WRITE.
    IF OP-FLAG = 1 GO TO RO-WRITE-03.
    MOVE "    02 OP-PAGE." TO SOURCE-RECORD.
    WRITE SOURCE-RECORD.
    SET OP-FLAG TO 1.

RO-WRITE-03.
    WRITE SOURCE-RECORD FROM 03-SYM.
    GO TO RO-EXIT.

RO-WRITE.
    WRITE SOURCE-RECORD FROM IN-SYM.

RO-EXIT.  EXIT.

GET-PIC.
    MOVE " X" TO IS-PIC, RK-PIC, 03-ISYM-TYPE.
    MOVE POUND TO WORK-RECORD.
    MOVE ZERO TO WR-IND.
    PERFORM GET-VLD VARYING VLD-IND FROM VLD-IND BY 1
    ,UNTIL WR-IND = LENGTH-OF-FIELD(PROMPT-IND).
    EXAMINE WORK-RECORD TALLYING ALL SPACES.
    IF TALLY = LENGTH-OF-FIELD(PROMPT-IND) GO TO GP-NUM.
    EXAMINE WORK-RECORD TALLYING ALL "N".
    IF TALLY NOT = LENGTH-OF-FIELD(PROMPT-IND) GO TO GP-DONE.

GP-NUM.

*** THE NEXT TWO STATEMENTS WERE MODIFIED TO ALWAYS CAUSE THE KEY ***
*** PICTURE STATEMENTS TO BE DEFINED AS PIC X                     ***

    IF PROMPT-IND = POS-KEY GO TO GP-DONE.
    MOVE "S9" TO IS-PIC, 03-ISYM-TYPE.
*** THE NEXT STATEMENT REMOVES THE "BLANK WHEN ZERO" FROM NON-DECIMAL ITEMS.
*** THE STATEMENT FOLLOWING WILL INCLUDE "BLANK WHEN ZERO" IF EXECUTED.
    IF DECIMAL-POSIT(PROMPT-IND) = ZERO GO TO GP-DONE.
*   IF DECIMAL-POSIT(PROMPT-IND) = ZERO PERFORM LIT-SETUP, GO TO GP-DONE.
    COMPUTE BEF-DEC = LENGTH-OF-FIELD(PROMPT-IND) - DECIMAL-POSIT(PROMPT-IND).
    MOVE BEF-DEC TO IS-NUM2, 03-ISYM-NUM2.
    MOVE "V9(" TO IP-PERIOD-OR-V, 03-ISYM-P-OR-V.
    MOVE DECIMAL-POSIT(PROMPT-IND) TO IP-NUM1, 03-ISYM-NUM3.
*** REMOVAL OF THE NEXT 2 STATEMENTS ELIMINATES "BLANK WHEN ZERO"
*** STATEMENTS ON ELEMENTS WITH DECIMALS.
*   MOVE ");" TO IP-PAREN2, 03-ISYM-PAREN2.
*   MOVE " BLANK WHEN ZERO." TO IP-LIT, 03-ISYM-LIT.
    MOVE ")." TO IP-PAREN2, 03-ISYM-PAREN2.

GP-DONE.  EXIT.

77-SETUP.
    MOVE POUND TO WORK-RECORD.
    MOVE ZERO TO WR-IND.
    PERFORM GET-VLD VARYING VLD-IND FROM VLD-IND BY 1
    ,UNTIL WR-IND = LENGTH-OF-FIELD(PROMPT-IND).
    EXAMINE WORK-RECORD TALLYING ALL SPACES.
    IF TALLY = LENGTH-OF-FIELD(PROMPT-IND) GO TO 77-NUM.
    EXAMINE WORK-RECORD TALLYING ALL "N".
    IF TALLY NOT = LENGTH-OF-FIELD(PROMPT-IND) GO TO 77-DONE.

77-NUM.
    MOVE LENGTH-OF-FIELD(PROMPT-IND) TO 77-NUM2.
    MOVE PROMPT-IND TO 77-NUM1.
    MOVE "; COMP." TO 77-PIC-INFO.
    IF DECIMAL-POSIT(PROMPT-IND) = ZERO GO TO 77-WRITE.
    COMPUTE BEF-DEC = LENGTH-OF-FIELD(PROMPT-IND) - DECIMAL-POSIT(PROMPT-IND).
    MOVE "V9(" TO 77-P-OR-V.
    MOVE BEF-DEC TO 77-NUM2.
    MOVE DECIMAL-POSIT(PROMPT-IND) TO 77-NUM3.
    MOVE "); COMP." TO 77-PAREN2.

77-WRITE.
    WRITE SOURCE-RECORD FROM 77-LINE.

77-DONE.  EXIT.

OA-SETUP.
    MOVE POUND TO WORK-RECORD.
    SET WR-IND TO ZERO.
    PERFORM GET-VLD VARYING VLD-IND FROM VLD-IND BY 1
    ,UNTIL WR-IND = LENGTH-OF-FIELD(PROMPT-IND).
    MOVE PROMPT-IND TO OALO-NUM1.
    MOVE " X(" TO OALO-TYPE.
    MOVE LENGTH-OF-FIELD(PROMPT-IND) TO OALO-NUM2.
    MOVE "." TO OALO-PIC-INFO.
    EXAMINE WORK-RECORD TALLYING ALL SPACES.
    IF TALLY = LENGTH-OF-FIELD(PROMPT-IND) GO TO OA-NUM.
    EXAMINE WORK-RECORD TALLYING ALL "N".
    IF TALLY NOT = LENGTH-OF-FIELD(PROMPT-IND) GO TO OA-EXIT.

OA-NUM.
    MOVE "S9(" TO OALO-TYPE.
    IF DECIMAL-POSIT(PROMPT-IND) = ZERO GO TO OA-EXIT.
    COMPUTE BEF-DEC = LENGTH-OF-FIELD(PROMPT-IND) - DECIMAL-POSIT(PROMPT-IND).
    MOVE BEF-DEC TO OALO-NUM2.
    MOVE DECIMAL-POSIT(PROMPT-IND) TO OALO-NUM3.
    MOVE "V9(" TO OALO-P-OR-V.
    MOVE ")." TO OALO-PAREN2.

OA-EXIT.
    WRITE SOURCE-RECORD FROM OA-LINE-OUT.
GET-REC-KEY.
    MOVE LENGTH-OF-FIELD(POS-KEY) TO RK-NUM.
    WRITE SOURCE-RECORD FROM REC-K.
    MOVE " REDEFINES REC-KEY" TO IS-REDEF.
    MOVE " X" TO SK-PIC.

*** THIS PREVIOUS PARAGRAPH WAS MODIFIED DELETING 4 LINES OF CODE ***
*** WHICH CHECKED AND CHANGED THE SYMBOLIC PICTURE STATEMENT IF   ***
*** VALIDATION DATA SHOWED THE KEY TO BE NUMERIC                  ***

DUMP-IA.
    EXAMINE IA-BUFF(IA-IND) TALLYING ALL "H".
    IF TALLY = 0 GO TO DIA-CONT.
*** FROM HERE TO DIA-CONT WAS MOVED SO THAT THE COLLECTIVE COMPUTATION ***
*** WILL BE DONE AFTER EVERYTHING IS COMPUTED.                             ***

    IF OVER-LAY-PAGE = ZERO GO TO DIA-CONT.
    MOVE ZERO TO VLD-IND.
    PERFORM TOTAL-UP VARYING PROMPT-IND FROM 1 BY 1
    ,UNTIL PROMPT-IND = TOP-LINE(OVER-LAY-PAGE).
    SET VLD-IND UP BY 1.
    COMPUTE IR-IND = OVER-LAY-PAGE + 1.
    PERFORM Z-LINE-SETUP THRU ZL-EXIT VARYING PROMPT-IND FROM PROMPT-IND
    ,BY 1 UNTIL PROMPT-IND = TOP-LINE(IR-IND).
    MOVE "    MOVE OP-PAGE TO OVERLAY-ARRAY." TO SOURCE-RECORD.
    WRITE SOURCE-RECORD.
    WRITE SOURCE-RECORD FROM TOTAL-UP-LINE-1.

DIA-CONT.
    MOVE IA-BUFF(IA-IND) TO IA-2.
    WRITE SOURCE-RECORD FROM IA-BUFFER.

Z-LINE-SETUP.
    MOVE POUND TO WORK-RECORD.
    MOVE ZERO TO WR-IND.
    PERFORM GET-VLD VARYING VLD-IND FROM VLD-IND BY 1
    ,UNTIL WR-IND = LENGTH-OF-FIELD(PROMPT-IND).
    EXAMINE WORK-RECORD TALLYING ALL SPACES.
    IF TALLY = LENGTH-OF-FIELD(PROMPT-IND) GO TO Z-NUM.
    EXAMINE WORK-RECORD TALLYING ALL "N".
    IF TALLY NOT = LENGTH-OF-FIELD(PROMPT-IND) GO TO ZL-EXIT.

Z-NUM.
    MOVE PROMPT-IND TO ZL-NUM.
    WRITE SOURCE-RECORD FROM ZERO-LINE.

ZL-EXIT.  EXIT.

TOT-LIN-SETUP.
    MOVE POUND TO WORK-RECORD.
    MOVE ZERO TO WR-IND.
    PERFORM GET-VLD VARYING VLD-IND FROM VLD-IND BY 1
    ,UNTIL WR-IND = LENGTH-OF-FIELD(PROMPT-IND).
    EXAMINE WORK-RECORD TALLYING ALL SPACES.
    IF TALLY = LENGTH-OF-FIELD(PROMPT-IND) GO TO TOT-NUM.
    EXAMINE WORK-RECORD TALLYING ALL "N".
    IF TALLY NOT = LENGTH-OF-FIELD(PROMPT-IND) GO TO TL-EXIT.

TOT-NUM.
    MOVE PROMPT-IND TO TUL2-NUM1, TUL2-NUM2, TUL2-NUM3.
    WRITE SOURCE-RECORD FROM TOTAL-UP-LINE-2.

TL-EXIT.  EXIT.

LIT-SETUP.
    MOVE "; BLANK WHEN ZERO." TO IS-PIC-INFO, 03-ISYM-PIC-INFO.