IDENTIFICATION DIVISION.
       PROGRAM-ID. EDITBTH2.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
	   SELECT EDITED-TRAN-FILE
                ASSIGN TO "C:\MFCOBOL\SOURCEPG\EDITED.DAT".
	   SELECT EDIT-ERROR-TRAN-FILE
                ASSIGN TO "C:\MFCOBOL\SOURCEPG\EDITERR.DAT".
	   SELECT PRINT-FILE ASSIGN TO PRINTER.
       DATA DIVISION.
       FILE SECTION.
       FD  EDITED-TRAN-FILE
	   LABEL RECORDS ARE STANDARD
	   DATA RECORD IS EDITED-TRAN-REC.
       01  EDITED-TRAN-REC	     PIC X(31).
       FD  EDIT-ERROR-TRAN-FILE
	   LABEL RECORDS ARE STANDARD
	   DATA RECORD IS EDIT-ERROR-TRAN-REC.
       01  EDIT-ERROR-TRAN-REC	     PIC X(31).
       FD  PRINT-FILE
	   LABEL RECORDS ARE STANDARD
	   DATA RECORD IS PRINTZ.
       01  PRINTZ		     PIC X(80).
       WORKING-STORAGE SECTION.
       01  RESPONSES.
	   05  DATA-ANS		 PIC X	      VALUE SPACES.
	       88  PROC-DATA-ANS	      VALUE "P", "B", "T".
	   05  BATCH-ANS	 PIC X	      VALUE SPACES.
       01  EDIT-AREA.
	   05  EIDNO.
	       10  DGT		 PIC 9	      OCCURS 6 TIMES.
	       10  CHK-DGT	 PIC X.
	       10  RDF-CHK-DGT REDEFINES CHK-DGT PIC 9.
	   05  ENAME		 PIC X(20).
	   05  ECODEZ		 PIC X.
	   05  EAMT		 PIC 999.
       01  HOLD-BATCH-OF-RECORDS.
	   05  RECORDZ		 PIC X(31)    OCCURS 30 TIMES.
       01  BATCH-AREA.
	   05  BATCH-NUM	 PIC X(5)     VALUE SPACES.
	   05  BATCH-NUM-TRANS	 PIC 99       VALUE 0.
	   05  BATCH-TOTAL-AMT	 PIC 9(6)     VALUE 0.
       01  SUBSCRIPTS.
	   05  SUBZ		 PIC 9	      VALUE 0.
	   05  IN-TABLE-SUB	 PIC 99       VALUE 0.
	   05  WRITE-SUB	 PIC 99       VALUE 0.
	   05  ERROR-SUB	 PIC 99       VALUE 0.
       01  WORK-AREAS.
	   05  WT		 PIC 9	      VALUE 0.
	   05  ANS		 PIC 99       VALUE 0.
	   05  RSLT		 PIC 99       VALUE 0.
	   05  REMNDR		 PIC 99       VALUE 0.
       01  ACCUMULATORS.
	   05  DGT-SUM		 PIC 999      VALUE 0.
	   05  NUM-TRANS-TOT	 PIC 99       VALUE 0.
	   05  TOTAL-AMT-TOT	 PIC 9(6)     VALUE 0.
       01  INDICATORS.
	   05  VALID-REC-IND	 PIC X	      VALUE SPACES.
       01  ERROR-LINE.
	   05  FILLER		 PIC X(5)     VALUE SPACES.
	   05  IDNO-PR		 PIC X(7)     VALUE SPACES.
	   05  FILLER		 PIC X(5)     VALUE SPACES.
	   05  DATA-PR		 PIC X(20)    VALUE SPACES.
	   05  FILLER		 PIC X(5)     VALUE SPACES.
	   05  MSG-PR		 PIC X(30)    VALUE SPACES.
	   05  FILLER		 PIC X(8)     VALUE SPACES.
       01  BATCH-LINE-ONE.
	   05  FILLER		     PIC X(20)
				     VALUE " FROM BATCH HEADER  ".
	   05  BATCH-NUM-PR	     PIC X(5)	VALUE SPACES.
	   05  FILLER		     PIC X(5)	VALUE SPACES.
	   05  BATCH-NUM-TRANS-PR    PIC Z9.
	   05  FILLER		     PIC X(5)	VALUE SPACES.
	   05  BATCH-TOTAL-AMT-PR    PIC ZZZ,ZZ9.
	   05  FILLER		     PIC X(16)	VALUE SPACES.
       01  BATCH-LINE-TWO.
	   05  FILLER		     PIC X(20)
				     VALUE " ACCUMULATED TOTALS ".
	   05  FILLER		 PIC X(10)    VALUE SPACES.
	   05  NUM-TRANS-TOT-PR  PIC Z9.
	   05  FILLER		 PIC X(5)     VALUE SPACES.
	   05  TOTAL-AMT-TOT-PR  PIC ZZZ,ZZ9.
	   05  FILLER		 PIC X(16)    VALUE SPACES.
       01  BATCH-LINE-THREE.
	   05  FILLER		 PIC X(30)    VALUE SPACES.
	   05  BATCH-MSG-PR	 PIC X(40)    VALUE SPACES.
	   05  FILLER		 PIC X(10)    VALUE SPACES.
       SCREEN SECTION.
       01  BATCH-ENTRY-SCREEN.
	   05  VALUE "BATCH ENTRY SCREEN"     BLANK SCREEN
					      LINE 01 COL 30.
	   05  VALUE  "BATCH NUMBER:"	      LINE 05 COL 05.
	   05  BATCH-NUM-SCR		      LINE 05 COL 30
		    PIC X(5)	TO BATCH-NUM.
	   05  VALUE "NUMBER OF TRANSACTIONS:"
					      LINE 07 COL 05.
	   05  BATCH-NUM-TRANS-SCR	      LINE 07 COL 30
		    PIC 99	TO BATCH-NUM-TRANS.
	   05  VALUE "TOTAL AMOUNT:"	      LINE 09 COL 05.
	   05  TOTAL-AMT-SCR		      LINE 09 COL 30
		    PIC 9(6)	TO BATCH-TOTAL-AMT.
	   05  VALUE "S - TO START TRANSACTIONS FOR THIS BATCH"
					      LINE 15 COL 30.
	   05  VALUE "C - TO CANCEL THIS BATCH HEADER"
					      LINE 16 COL 30.
	   05  VALUE "T - TO TERMINATE PROCESSING"
					      LINE 17 COL 30.
	   05  VALUE "ENTER CHOICE:"	      LINE 19 COL 30.
	   05  BATCH-RESPONSE-SCR	      LINE 19 COL 45
		    PIC X	TO BATCH-ANS.
       01  DATA-ENTRY-SCREEN.
	   05  VALUE "DATA ENTRY SCREEN"      BLANK SCREEN
					      LINE 01 COL 30.
	   05  VALUE "IDENTIFICATION NUMBER:" LINE 05 COL 05.
	   05  ID-SCR			      LINE 05 COL 30
		   PIC X(7)	TO EIDNO.
	   05  VALUE "CUSTOMER NAME:"	      LINE 07 COL 05.
	   05  NAME-SCR 		      LINE 07 COL 30
		   PIC X(20)   TO ENAME.
	   05  VALUE "TRANSACTION CODE:"      LINE 09 COL 05.
	   05  CODE-SCR			      LINE 09 COL 30
		   PIC X       TO ECODEZ.
	   05  VALUE "AMOUNT:"		      LINE 11 COL 05.
	   05  AMT-SCR			      LINE 11 COL 30
		   PIC 999     TO EAMT.
	   05  VALUE "P - TO PROCESS"	      LINE 14 COL 30.
	   05  VALUE "B - TO PROCESS LAST RECORD IN THE BATCH"
					      LINE 15 COL 30.
	   05  VALUE "C - TO CANCEL THIS TRANSACTION"
					      LINE 16 COL 30.
	   05  VALUE "T - TO TERMINATE ALL PROCESSING"
					      LINE 17 COL 30.
	   05  VALUE "ENTER CHOICE:"	      LINE 19 COL 30.
	   05  RESPONSE-SCR		      LINE 19 COL 45
		   PIC X     TO DATA-ANS.
       PROCEDURE DIVISION.
       MAINLINE.
            PERFORM A-100-INITIALIZE.
            PERFORM B-100-PROCESS.
            PERFORM C-100-TERMINATE.
            STOP RUN.
       A-100-INITIALIZE.
	    OPEN OUTPUT EDITED-TRAN-FILE
			EDIT-ERROR-TRAN-FILE
                        PRINT-FILE.
       B-100-PROCESS.
            PERFORM B-200-LOOP
	       UNTIL DATA-ANS = "T" OR BATCH-ANS = "T".
	    IF DATA-ANS = "T"
               PERFORM U-050-BATCH-NOT-PROCESSED.
       B-200-LOOP.
            PERFORM U-040-BATCH-ENTRY-ROUTINE
		UNTIL BATCH-ANS = "S" OR BATCH-ANS = "T".
	    IF BATCH-ANS = "S"
                PERFORM U-030-DATA-ENTRY-ROUTINE
		    UNTIL PROC-DATA-ANS
		IF DATA-ANS = "P" OR DATA-ANS = "B"
                    PERFORM B-300-EDIT
		    IF DATA-ANS = "B"
                        PERFORM B-310-BATCH-PROC-ROUTINE
			MOVE SPACES TO DATA-ANS
		    ELSE
			MOVE SPACES TO DATA-ANS.
       B-300-EDIT.
	   MOVE "Y" TO VALID-REC-IND.
	   ADD 1 TO NUM-TRANS-TOT.
           PERFORM B-400-CHK-DIGIT-VALIDATE.
           PERFORM B-410-NAME-VALIDATE.
           PERFORM B-420-CODE-AMT-VALIDATE.
	   IF VALID-REC-IND = "Y"
	       ADD 1 TO IN-TABLE-SUB
	       MOVE EDIT-AREA TO RECORDZ (IN-TABLE-SUB)
	   ELSE
	       WRITE EDIT-ERROR-TRAN-REC FROM EDIT-AREA.
	   MOVE SPACES TO EDIT-AREA.
       B-310-BATCH-PROC-ROUTINE.
	   MOVE BATCH-NUM TO BATCH-NUM-PR.
	   MOVE BATCH-NUM-TRANS TO BATCH-NUM-TRANS-PR.
	   MOVE NUM-TRANS-TOT TO NUM-TRANS-TOT-PR.
	   MOVE BATCH-TOTAL-AMT TO BATCH-TOTAL-AMT-PR.
	   MOVE TOTAL-AMT-TOT TO TOTAL-AMT-TOT-PR.
	   IF BATCH-NUM-TRANS = NUM-TRANS-TOT
	       IF BATCH-TOTAL-AMT = TOTAL-AMT-TOT
		   MOVE 1 TO WRITE-SUB
                   PERFORM U-010-WRITE-RECORDS
			IN-TABLE-SUB TIMES
		   MOVE SPACES TO HOLD-BATCH-OF-RECORDS
		   MOVE "BATCH BALANCES" TO BATCH-MSG-PR
	       ELSE
		   MOVE "TOTAL AMOUNT OUT OF BALANCE" TO BATCH-MSG-PR
	   ELSE
	       IF BATCH-TOTAL-AMT = TOTAL-AMT-TOT
		    MOVE "NUMBER OF TRANSACTIONS OUT OF BALANCE"
			 TO BATCH-MSG-PR
	       ELSE
		    MOVE "BOTH TOTALS OUT OF BALANCE" TO BATCH-MSG-PR.
	   IF BATCH-MSG-PR NOT EQUAL TO "BATCH BALANCES"
	       MOVE 1 TO ERROR-SUB
               PERFORM  U-020-WRITE-ERRORS
		    IN-TABLE-SUB TIMES
	       MOVE SPACES TO HOLD-BATCH-OF-RECORDS.
	   WRITE PRINTZ FROM BATCH-LINE-ONE
	       AFTER ADVANCING 2 LINES.
	   WRITE PRINTZ FROM BATCH-LINE-TWO
	       AFTER ADVANCING 1 LINES.
	   WRITE PRINTZ FROM BATCH-LINE-THREE
	       AFTER ADVANCING 1 LINES.
	   MOVE SPACES TO PRINTZ.
	   WRITE PRINTZ
	       AFTER ADVANCING 1 LINES.
	   MOVE 0 TO NUM-TRANS-TOT.
	   MOVE 0 TO TOTAL-AMT-TOT.
	   MOVE 0 TO IN-TABLE-SUB.
	   MOVE SPACES TO BATCH-ANS.
           PERFORM U-040-BATCH-ENTRY-ROUTINE
	       UNTIL BATCH-ANS = "S" OR BATCH-ANS = "T".
       B-400-CHK-DIGIT-VALIDATE.
	   MOVE 0 TO DGT-SUM.
	   MOVE 1 TO SUBZ.
	   MOVE 7 TO WT.
           PERFORM B-500-DGT-ROUT
	       6 TIMES.
	   IF CHK-DGT = "X"
	       ADD 10 TO DGT-SUM
	   ELSE
	       ADD RDF-CHK-DGT TO DGT-SUM.
	   DIVIDE DGT-SUM BY 11
	       GIVING RSLT
	       REMAINDER REMNDR.
	   IF REMNDR NOT = 0
	       MOVE "N" TO VALID-REC-IND
	       MOVE EIDNO TO DATA-PR
	       MOVE "INVALID CHECK DIGIT" TO MSG-PR
               PERFORM U-000-ERROR-REPORT.
       B-410-NAME-VALIDATE.
	   IF ENAME = SPACES
	       MOVE "N" TO VALID-REC-IND
	       MOVE ENAME TO DATA-PR
	       MOVE "BLANK NAME" TO MSG-PR
               PERFORM U-000-ERROR-REPORT.
       B-420-CODE-AMT-VALIDATE.
	   IF EAMT IS NUMERIC
	       ADD EAMT TO TOTAL-AMT-TOT
	       IF ECODEZ = "A"
		   IF EAMT < 500
		       NEXT SENTENCE
		   ELSE
		       MOVE "N" TO VALID-REC-IND
		       MOVE EAMT TO DATA-PR
		       MOVE "AMOUNT => 500 FOR CODE A" TO MSG-PR
                       PERFORM U-000-ERROR-REPORT
	       ELSE
		   IF ECODEZ = "B"
		       IF EAMT > 200 AND EAMT < 600
			   NEXT SENTENCE
		       ELSE
			   MOVE "N" TO VALID-REC-IND
			   MOVE EAMT TO DATA-PR
			   MOVE "AMOUNT OUTSIDE 200-600 FOR CODE B"
				TO MSG-PR
                           PERFORM U-000-ERROR-REPORT
		   ELSE
		       MOVE "N" TO VALID-REC-IND
		       MOVE ECODEZ TO DATA-PR
		       MOVE "INVALID CODE" TO MSG-PR
                       PERFORM U-000-ERROR-REPORT
	   ELSE
	       MOVE "N" TO VALID-REC-IND
	       MOVE EAMT TO DATA-PR
	       MOVE "AMOUNT IS NOT NUMERIC" TO MSG-PR
               PERFORM U-000-ERROR-REPORT.
       B-500-DGT-ROUT.
	   MULTIPLY DGT(SUBZ) BY WT
	       GIVING ANS.
	   ADD ANS TO DGT-SUM.
	   ADD 1 TO SUBZ.
	   SUBTRACT 1 FROM WT.
       U-000-ERROR-REPORT.
	   MOVE EIDNO TO IDNO-PR.
	   WRITE PRINTZ FROM ERROR-LINE
	       AFTER ADVANCING 1 LINES.
       U-010-WRITE-RECORDS.
	   WRITE EDITED-TRAN-REC FROM RECORDZ (WRITE-SUB).
	   ADD 1 TO WRITE-SUB.
       U-020-WRITE-ERRORS.
	   WRITE EDIT-ERROR-TRAN-REC FROM RECORDZ (ERROR-SUB).
	   ADD 1 TO ERROR-SUB.
       U-030-DATA-ENTRY-ROUTINE.
	   DISPLAY DATA-ENTRY-SCREEN
	   ACCEPT DATA-ENTRY-SCREEN.
       U-040-BATCH-ENTRY-ROUTINE.
	   DISPLAY BATCH-ENTRY-SCREEN.
	   ACCEPT BATCH-ENTRY-SCREEN.
       U-050-BATCH-NOT-PROCESSED.
	   MOVE "LAST BATCH NOT PROCESSED" TO BATCH-MSG-PR.
	   WRITE PRINTZ FROM BATCH-LINE-THREE
	       AFTER ADVANCING 2 LINES.
           DISPLAY "LAST BATCH NOT PROCESSED".
       C-100-TERMINATE.
           CLOSE EDITED-TRAN-FILE
                 EDIT-ERROR-TRAN-FILE
                 PRINT-FILE.