IDENTIFICATION DIVISION.
       PROGRAM-ID. EDITINTR.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
	   SELECT EDITED-TRAN-FILE
                ASSIGN TO "C:\PCOBWIN\EDITUPDT\EDITED.DAT"
		ORGANIZATION IS LINE SEQUENTIAL
		ACCESS IS SEQUENTIAL.
	   SELECT PRINT-FILE ASSIGN TO PRINTER.
       DATA DIVISION.
       FILE SECTION.
       FD  EDITED-TRAN-FILE
	   DATA RECORD IS EDITED-TRAN-REC.
       01  EDITED-TRAN-REC	     PIC X(31).
       FD  PRINT-FILE
	   DATA RECORD IS PRINTZ.
       01  PRINTZ		     PIC X(80).
       WORKING-STORAGE SECTION.
       01  RESPONSES.
           05  USER-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  SUBSCRIPTS.
	   05  SUBZ		 PIC 9	      VALUE 0.
           05  SUBZ-TO-PR        PIC 99       VALUE 0.
           05  SUBZ-OUT          PIC 99       VALUE 0.
       01  MESSAGES.
           05  ID-ERR-MSG        PIC X(35)    VALUE SPACES.
           05  NAME-ERR-MSG      PIC X(35)    VALUE SPACES.
           05  CODE-ERR-MSG      PIC X(35)    VALUE SPACES.
           05  AMT-ERR-MSG       PIC X(35)    VALUE SPACES.
       01  ERROR-TO-PRINT-TABLE VALUE SPACES.
               05  AREAZ    OCCURS 20 TIMES.
                   10  DATA-AREA     PIC X(20).
                   10  MSG-AREA      PIC X(30).
       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.
	   05  TEMP-CHK-DGT	 PIC 99       VALUE 0.
       01  ACCUMULATORS.
	   05  DGT-SUM		 PIC 999      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).
	   05  FILLER		 PIC X(5)     VALUE SPACES.
	   05  DATA-PR		 PIC X(20).
	   05  FILLER		 PIC X(5)     VALUE SPACES.
	   05  MSG-PR		 PIC X(30).
	   05  FILLER		 PIC X(8)     VALUE SPACES.
       SCREEN SECTION.
       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)     USING EIDNO.
           05  ID-MSG-SCR                     LINE 06 COL 30
                   PIC X(35)    FROM ID-ERR-MSG.
	   05  VALUE "CUSTOMER NAME:"	      LINE 07 COL 05.
	   05  NAME-SCR 		      LINE 07 COL 30
                   PIC X(20)   USING ENAME.
           05  NAME-MSG-SCR                   LINE 08 COL 30
                   PIC X(35)    FROM NAME-ERR-MSG.
	   05  VALUE "TRANSACTION CODE:"      LINE 09 COL 05.
	   05  CODE-SCR			      LINE 09 COL 30
                   PIC X       USING ECODEZ.
           05  CODE-MSG-SCR                   LINE 10 COL 30
                   PIC X(35)    FROM CODE-ERR-MSG.
	   05  VALUE "AMOUNT:"		      LINE 11 COL 05.
	   05  AMT-SCR			      LINE 11 COL 30
                   PIC 999     USING EAMT.
           05  AMT-MSG-SCR                    LINE 12 COL 30
                   PIC X(35)    FROM AMT-ERR-MSG.
           05  VALUE "P - TO PROCESS RECORD"  LINE 14 COL 30.
           05  VALUE "C - TO CANCEL RECORD"   LINE 15 COL 30.
	   05  VALUE "Q - TO QUIT"	      LINE 17 COL 30.
	   05  VALUE "ENTER CHOICE:"	      LINE 19 COL 30.
	   05  RESPONSE-SCR		      LINE 19 COL 45
                   PIC X     TO USER-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
			PRINT-FILE.
            MOVE 0 TO EIDNO, EAMT.
            MOVE SPACES TO ENAME, ECODEZ.
       B-100-PROCESS.
	    DISPLAY DATA-ENTRY-SCREEN.
	    ACCEPT DATA-ENTRY-SCREEN.
            PERFORM B-200-LOOP
               UNTIL USER-ANS = "Q".
       B-200-LOOP.
            IF USER-ANS = "P"
               MOVE "Y" TO VALID-REC-IND
               PERFORM B-300-EDIT
               IF VALID-REC-IND = "Y"
                  WRITE EDITED-TRAN-REC FROM EDIT-AREA
                  MOVE 0 TO EIDNO, EAMT
                  MOVE SPACES TO ENAME, ECODEZ
                  MOVE SPACES TO USER-ANS, MESSAGES
                  MOVE 0 TO SUBZ-TO-PR
                  MOVE SPACES TO ERROR-TO-PRINT-TABLE
               ELSE
                  MOVE SPACES TO USER-ANS
           ELSE
               IF USER-ANS = "C"
                   PERFORM U-000-ERROR-REPORT
                       VARYING SUBZ-OUT FROM 1 BY 1
                       UNTIL SUBZ-OUT > SUBZ-TO-PR
                   MOVE 0 TO EIDNO, EAMT
                   MOVE SPACES TO ENAME, ECODEZ
                   MOVE SPACES TO USER-ANS, MESSAGES
                   MOVE 0 TO SUBZ-TO-PR
                   MOVE SPACES TO ERROR-TO-PRINT-TABLE.
	    DISPLAY DATA-ENTRY-SCREEN.
	    ACCEPT DATA-ENTRY-SCREEN.
       B-300-EDIT.
           PERFORM B-400-CHK-DIGIT-VALIDATE.
           PERFORM B-410-NAME-VALIDATE.
           PERFORM B-420-CODE-AMT-VALIDATE.
       B-400-CHK-DIGIT-VALIDATE.
	   MOVE 0 TO DGT-SUM.
	   MOVE 1 TO SUBZ.
	   MOVE 7 TO WT.
           PERFORM 6 TIMES
               MULTIPLY DGT(SUBZ) BY WT
                   GIVING ANS
               ADD ANS TO DGT-SUM
               ADD 1 TO SUBZ
               SUBTRACT 1 FROM WT.
      *Note: Frequently an END-PERFORM is used to make it clearer
      *      where the code that is being performed terminates.
	   IF CHK-DGT = "X"
	       ADD 10 TO DGT-SUM
	   ELSE
               ADD RDF-CHK-DGT TO DGT-SUM
           END-IF
	   DIVIDE DGT-SUM BY 11
	       GIVING RSLT
	       REMAINDER REMNDR.
	   IF REMNDR NOT = 0
               MOVE "N" TO VALID-REC-IND
               MOVE "CHECK DIGIT INVALID" TO ID-ERR-MSG
               ADD 1 TO SUBZ-TO-PR
               IF SUBZ-TO-PR > 19
                   MOVE 20 TO SUBZ-TO-PR
                   MOVE "OVER MSG LIMIT" TO MSG-AREA (SUBZ-TO-PR)
               ELSE
                   MOVE EIDNO TO DATA-AREA (SUBZ-TO-PR)
                   MOVE "INVALID CHECK DIGIT" TO MSG-AREA (SUBZ-TO-PR)
               END-IF
           END-IF.
       B-410-NAME-VALIDATE.
	   IF ENAME = SPACES
	       MOVE "N" TO VALID-REC-IND
               MOVE "NAME CANNOT BE BLANK" TO NAME-ERR-MSG
               ADD 1 TO SUBZ-TO-PR
               IF SUBZ-TO-PR > 19
                   MOVE 20 TO SUBZ-TO-PR
                   MOVE "OVER MSG LIMIT" TO MSG-AREA (SUBZ-TO-PR)
               ELSE
                   MOVE ENAME TO DATA-AREA (SUBZ-TO-PR)
                   MOVE "BLANK NAME" TO MSG-AREA (SUBZ-TO-PR)
               END-IF
            END-IF.
       B-420-CODE-AMT-VALIDATE.
	   IF EAMT IS NUMERIC
	       IF ECODEZ = "A"
		   IF EAMT < 500
		       NEXT SENTENCE
		   ELSE
		       MOVE "N" TO VALID-REC-IND
                       MOVE "CODE A MUST HAVE AMOUNT < 500" TO
                           AMT-ERR-MSG
                       ADD 1 TO SUBZ-TO-PR
                       IF SUBZ-TO-PR > 19
                           MOVE 20 TO SUBZ-TO-PR
                           MOVE "OVER MSG LIMIT" TO
                               MSG-AREA (SUBZ-TO-PR)
                       ELSE
                           MOVE EAMT TO DATA-AREA (SUBZ-TO-PR)
                           MOVE "AMOUNT => 500 FOR CODE A" TO
                               MSG-AREA (SUBZ-TO-PR)
                       END-IF
                   END-IF
	       ELSE
		   IF ECODEZ = "B"
		       IF EAMT > 200 AND EAMT < 600
			   NEXT SENTENCE
		       ELSE
			   MOVE "N" TO VALID-REC-IND
                           MOVE "AMT OUTSIDE 200-600 FOR CODE B"
                              TO AMT-ERR-MSG
                           ADD 1 TO SUBZ-TO-PR
                           IF SUBZ-TO-PR > 19
                               MOVE 20 TO SUBZ-TO-PR
                               MOVE "OVER MSG LIMIT" TO
                                   MSG-AREA (SUBZ-TO-PR)
                           ELSE
                               MOVE EAMT TO DATA-AREA (SUBZ-TO-PR)
                               MOVE "AMT OUTSIDE 200-600 FOR CODE B"
                                  TO MSG-AREA (SUBZ-TO-PR)
                           END-IF
                       END-IF
		   ELSE
		       MOVE "N" TO VALID-REC-IND
                       MOVE "CODE MUST BE A OR B" TO CODE-ERR-MSG
                       ADD 1 TO SUBZ-TO-PR
                       IF SUBZ-TO-PR > 19
                           MOVE 20 TO SUBZ-TO-PR
                           MOVE "OVER MSG LIMIT" TO
                               MSG-AREA (SUBZ-TO-PR)
                       ELSE
                           MOVE ECODEZ TO DATA-AREA (SUBZ-TO-PR)
                           MOVE "INVALID CODE" TO
                               MSG-AREA (SUBZ-TO-PR)
                       END-IF
                   END-IF
	   ELSE
	       MOVE "N" TO VALID-REC-IND
               MOVE "AMOUNT MUST BE NUMERIC" TO AMT-ERR-MSG
               ADD 1 TO SUBZ-TO-PR
               IF SUBZ-TO-PR > 19
                   MOVE 20 TO SUBZ-TO-PR
                   MOVE "OVER MSG LIMIT" TO MSG-AREA (SUBZ-TO-PR)
               ELSE
                   MOVE EAMT TO DATA-AREA (SUBZ-TO-PR)
                   MOVE "AMOUNT IS NOT NUMERIC" TO
                       MSG-AREA (SUBZ-TO-PR)
                   END-IF
           END-IF.
       U-000-ERROR-REPORT.
	   MOVE EIDNO TO IDNO-PR.
           MOVE DATA-AREA (SUBZ-OUT) TO DATA-PR.
           MOVE MSG-AREA (SUBZ-OUT) TO MSG-PR.
	   WRITE PRINTZ FROM ERROR-LINE
	       AFTER ADVANCING 1 LINES.
       C-100-TERMINATE.
            CLOSE EDITED-TRAN-FILE
                  PRINT-FILE.