IDENTIFICATION DIVISION.
       PROGRAM-ID.  STARTSCR.
       AUTHOR.	GROCER.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       SELECT MASTER-FILE ASSIGN TO "C:\MFCOBOL\VSAM\VSAM1.DAT"
	   ORGANIZATION IS INDEXED
	   ACCESS IS SEQUENTIAL
	   RECORD KEY IS MID.
       SELECT PRINT-FILE ASSIGN TO PRINTER.
      *COMMENTS:
      *This program allows the user to process groups of records.
      *The user can specify certain starting and stopping points
      *in the file.  Note that in this example the stopping point
      *is not included in the list.  Slight programming changes
      *could include it.
      *The user can start and stop as many times as needed.
       DATA DIVISION.
       FD  MASTER-FILE
	   DATA RECORD IS MASTER-REC.
       01  MASTER-REC.
           05  MID              PIC 9(3).
	   05  MITEM-NAME	PIC X(20).
	   05  MNUM-HAND	PIC 999.
	   05  MNUM-ORDER	PIC 999.
	   05  MREORD-PT	PIC 999.
	   05  MCOST		PIC 999V99.
	   05  MPRICE		PIC 999V99.
       FD  PRINT-FILE
	   DATA RECORD IS PRINTZ.
       01  PRINTZ.
	   05  FILLER		PIC X.
           05  PID              PIC 9(3).
	   05  FILLER		PIC X(2).
	   05  PITEM-NAME	PIC X(20).
	   05  FILLER		PIC X(2).
	   05  PNUM-HAND	PIC ZZ9.
	   05  FILLER		PIC X(2).
	   05  PNUM-ORDER	PIC ZZ9.
	   05  FILLER		PIC X(2).
	   05  PREORD-PT	PIC ZZ9.
	   05  FILLER		PIC X(2).
	   05  PCOST		PIC ZZ9.99.
	   05  FILLER		PIC X(2).
	   05  PPRICE		PIC ZZ9.99.
	   05  FILLER		PIC X(2).
	   05  PMSG		PIC X(20).
	   05  FILLER		PIC X.
       WORKING-STORAGE SECTION.
       01  HOLD-AREAS.
           05  START-PT         PIC 9(3).
           05  END-PT           PIC 9(3).
       01  INDICATORS.
	   05  EOF-MSTR		PIC XXX 	 VALUE "NO ".
	   05  MSTR-FOUND	PIC XXX 	 VALUE SPACES.
       01 RESPONSES.
	     05	 TERMINATE-ANS	 PIC X	      VALUE SPACES.
       SCREEN SECTION.
       01  START-END-POINT-SCREEN.
	   05  VALUE "START DATA SCREEN"      BLANK SCREEN
					      LINE 01 COL 30.
	   05  VALUE "ENTER START POINT:  "   LINE 05 COL 05.
	   05  START-SCR		      LINE 05 COL 35
                   PIC 999     TO START-PT.
           05  VALUE "ENTER END POINT: "      LINE 07 COL 05.
           05  END-PT-SCR                     LINE 07 COL 35
                   PIC 999     TO END-PT.
	   05  VALUE "C - TO CONTINUE"	      LINE 16 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 TERMINATE-ANS.
       PROCEDURE DIVISION.
       MAINLINE.
           PERFORM A-100-INITIALIZE.
           PERFORM B-100-PROCESS.
           PERFORM C-100-TERMINATE.
           STOP RUN.
       A-100-INITIALIZE.
	   OPEN INPUT MASTER-FILE
                OUTPUT PRINT-FILE.
       B-100-PROCESS.
           PERFORM U-010-START-END-POINT-SCREEN.
           PERFORM B-200-LOOP
	       UNTIL TERMINATE-ANS = "Q".
       B-200-LOOP.
	   MOVE SPACES TO PRINTZ.
	   MOVE START-PT TO MID.
	   MOVE "YES" TO MSTR-FOUND.
	   START MASTER-FILE
	       KEY = MID
	       INVALID KEY
		   MOVE "NO " TO MSTR-FOUND.
	   IF MSTR-FOUND = "YES"
               PERFORM U-000-RD-MSTR
               PERFORM B-300-PROCESS
		   UNTIL MID = END-PT OR MID > END-PT
		      OR EOF-MSTR = "YES"
	       IF EOF-MSTR = "YES"
		   MOVE SPACES TO EOF-MSTR
	       ELSE
		   NEXT SENTENCE
	   ELSE
               PERFORM U-020-PRINT-EXCEPTION-REPORT.
           PERFORM U-010-START-END-POINT-SCREEN.
       B-300-PROCESS.
	   MOVE MID TO PID.
	   MOVE MITEM-NAME TO PITEM-NAME.
	   MOVE MNUM-HAND TO PNUM-HAND.
	   MOVE MNUM-ORDER TO PNUM-ORDER.
	   MOVE MREORD-PT TO PREORD-PT.
	   MOVE MCOST TO PCOST.
	   MOVE MPRICE TO PPRICE.
	   WRITE PRINTZ
	       AFTER ADVANCING 1 LINES.
           PERFORM U-000-RD-MSTR.
       U-000-RD-MSTR.
	   READ MASTER-FILE
	       AT END
                   MOVE "YES" TO EOF-MSTR.
      * Note, some versions of COBOL require that at EOF the file
      * be closed and reopened for processing to continue.
      *            CLOSE MASTER-FILE
      *            OPEN INPUT MASTER-FILE.
       U-010-START-END-POINT-SCREEN.
	   DISPLAY START-END-POINT-SCREEN.
	   ACCEPT START-END-POINT-SCREEN.
       U-020-PRINT-EXCEPTION-REPORT.
	   MOVE MID TO PID.
	   MOVE "START POINT MISSING " TO PMSG.
	   WRITE PRINTZ
               AFTER ADVANCING 1 LINES.
       C-100-TERMINATE.
           CLOSE MASTER-FILE
                 PRINT-FILE.