IDENTIFICATION DIVISION.
       PROGRAM-ID.  PROGRAM3.
       AUTHOR.  GROCER.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       SELECT VSAM-FILE
           ASSIGN TO "C:\PCOBWIN\VSAMPROJ\VSAMPROJ.DAT"
           ORGANIZATION IS INDEXED
           ACCESS IS SEQUENTIAL
           RECORD KEY IS VSAM-STUDENT-ID
           ALTERNATE RECORD KEY IS
               VSAM-STUDENT-NAME WITH DUPLICATES.
       SELECT PRINT-FILE ASSIGN TO PRINTER.
      * COMMENTS:
      * This program puts out a menu asking the user to select whether
      * they want to process using the record/prime key path or the
      * alternate key path.  Depending on the user choice, they will
      * then be asked to input the starting point.  The user should be
      * allowed to repeat this process as often as they want.
      * The user also wants to be able to enter an end point so that
      * processing does not always have to go from the start point to
      * end of file.  Currently the program does not allow that.
      * The key structure described in the program must be the same
      * as the key structure that exists on the file.  So, even though
      * I am not using any of the keys, I must describe them in the
      * SELECT statement.
       DATA DIVISION.
       FILE SECTION.
       FD  VSAM-FILE
           DATA RECORD IS VSAM-REC.
       01  VSAM-REC.
           05  VSAM-STUDENT-ID          PIC XXXX.
           05  VSAM-STUDENT-NAME        PIC X(20).
           05  VSAM-STUDENT-MAJOR       PIC XXX.
           05  VSAM-STUDENT-SEM-ENTER   PIC X.
           05  VSAM-STUDENT-YR-ENTER    PIC 9999.
       FD  PRINT-FILE
           DATA RECORD IS PRINTZ.
       01  PRINTZ.
           05  FILLER                      PIC X.
           05  VSAM-STUDENT-ID-PR          PIC X(4).
           05  FILLER                      PIC X(2).
           05  VSAM-STUDENT-NAME-PR        PIC X(20).
           05  FILLER                      PIC X(2).
           05  VSAM-STUDENT-MAJOR-PR       PIC XXX.
           05  FILLER                      PIC X(2).
           05  VSAM-STUDENT-SEM-ENTER-PR   PIC X.
           05  FILLER                      PIC X(2).
           05  VSAM-STUDENT-YR-ENTER-PR    PIC 9999.
           05  FILLER                      PIC X(2).
           05  PROCESSING-MSG-PR           PIC X(20).
           05  FILLER                      PIC X(18).
       WORKING-STORAGE SECTION.
       01  INDICATORS.
           05  EOF-IND          PIC XXX          VALUE "NO ".
           05  PROCESS-MENU-ANS PIC X            VALUE SPACES.
           05  PROCESS-ID-ANS   PIC X            VALUE SPACES.
           05  PROCESS-NAME-ANS PIC X            VALUE SPACES.
       01  HOLD-AREAS.
           05  START-VSAM-ID    PIC XXXX         VALUE SPACES.
           05  START-VSAM-NAME  PIC X(20)        VALUE SPACES.
       SCREEN SECTION.
       01  MENU-SCREEN.
           05  VALUE "MENU SCREEN"           BLANK SCREEN
                                             LINE 05  COL 30.
           05  VALUE "I - RETRIEVE BY ID"    LINE 08  COL 25.
           05  VALUE "N - RETRIEVE BY NAME"  LINE 10  COL 25.
           05  VALUE "Q - STOP PROCESSING"   LINE 12  COL 25.
           05  VALUE "ENTER CHOICE:  "       LINE 15  COL 30.
           05  RESPONSE-SCR                  LINE 15  COL 44
                  PIC X        TO PROCESS-MENU-ANS.
       01  ID-ENTRY-SCREEN.
           05  VALUE "ENTRY SCREEN FOR ID"   BLANK SCREEN
                                             LINE 05  COL 30.
           05  VALUE "ENTER STARTING ID: "   LINE 08  COL 20.
           05  START-ID-SCR                  LINE 08  COL 40
                   PIC XXXX   TO START-VSAM-ID.
           05  VALUE "C - TO CONTINUE"       LINE 15  COL 35.
           05  VALUE "R - TO RETURN TO MENU" LINE 16  COL 35.
           05  VALUE "ENTER CHOICE: "        LINE 18  COL 35.
           05  RESPONSE-ID                   LINE 18  COL 50
                   PIC X      TO PROCESS-ID-ANS.
       01  NAME-ENTRY-SCREEN.
           05  VALUE "ENTRY SCREEN FOR NAME" BLANK SCREEN
                                             LINE 05  COL 30.
           05  VALUE "ENTER STARTING NAME: " LINE 08  COL 20.
           05  START-NAME-SCR                LINE 08  COL 40
                   PIC X(20)   TO START-VSAM-NAME.
           05  VALUE "C - TO CONTINUE"       LINE 15  COL 35.
           05  VALUE "R - TO RETURN TO MENU" LINE 16  COL 35.
           05  VALUE "ENTER CHOICE: "        LINE 18  COL 35.
           05  RESPONSE-NAME                 LINE 18  COL 50
                   PIC X      TO PROCESS-NAME-ANS.
       PROCEDURE DIVISION.
       MAINLINE.
           PERFORM A-100-INITIALIZE.
           PERFORM B-100-PROCESS.
           PERFORM C-100-TERMINATE.
           STOP RUN.
       A-100-INITIALIZE.
           OPEN INPUT VSAM-FILE
                OUTPUT PRINT-FILE.
       B-100-PROCESS.
           DISPLAY MENU-SCREEN.
           ACCEPT MENU-SCREEN.
           PERFORM B-200-LOOP
               UNTIL PROCESS-MENU-ANS = "Q" OR PROCESS-MENU-ANS = "q".
       B-200-LOOP.
           IF PROCESS-MENU-ANS = "I" OR PROCESS-MENU-ANS = "i"
               PERFORM B-300-PROCESS-BY-ID
           ELSE
               IF PROCESS-MENU-ANS = "N" OR PROCESS-MENU-ANS = "n"
                   PERFORM B-310-PROCESS-BY-NAME.
           DISPLAY MENU-SCREEN.
           ACCEPT MENU-SCREEN.
       B-300-PROCESS-BY-ID.
           DISPLAY ID-ENTRY-SCREEN.
           ACCEPT ID-ENTRY-SCREEN.
           IF PROCESS-ID-ANS = "C" OR PROCESS-ID-ANS = "c"
               MOVE START-VSAM-ID TO VSAM-STUDENT-ID
               START VSAM-FILE
                   KEY >= VSAM-STUDENT-ID
                   INVALID KEY
                       DISPLAY "RECORD DOES NOT EXIST  "
                               VSAM-STUDENT-ID
                   NOT INVALID KEY
                       MOVE "NO " TO EOF-IND
                       READ VSAM-FILE
                           AT END
                              MOVE "YES" TO EOF-IND
                       END-READ
                       PERFORM B-400-DETAIL-LOOP
                           UNTIL EOF-IND = "YES"
               END-START.
       B-310-PROCESS-BY-NAME.
           DISPLAY NAME-ENTRY-SCREEN.
           ACCEPT NAME-ENTRY-SCREEN.
           IF PROCESS-NAME-ANS = "C" OR PROCESS-NAME-ANS = "c"
               MOVE START-VSAM-NAME TO VSAM-STUDENT-NAME
               START VSAM-FILE
                   KEY >= VSAM-STUDENT-NAME
                   INVALID KEY
                       DISPLAY "RECORD DOES NOT EXIST  "
                               VSAM-STUDENT-NAME
                   NOT INVALID KEY
                       MOVE "NO " TO EOF-IND
                       READ VSAM-FILE
                           AT END
                              MOVE "YES" TO EOF-IND
                       END-READ
                       PERFORM B-400-DETAIL-LOOP
                           UNTIL EOF-IND = "YES"
               END-START.
       B-400-DETAIL-LOOP.
           MOVE SPACES TO PRINTZ.
           MOVE VSAM-STUDENT-ID TO VSAM-STUDENT-ID-PR.
           MOVE VSAM-STUDENT-NAME TO VSAM-STUDENT-NAME-PR.
           MOVE VSAM-STUDENT-MAJOR TO VSAM-STUDENT-MAJOR-PR.
           MOVE VSAM-STUDENT-SEM-ENTER TO VSAM-STUDENT-SEM-ENTER-PR.
           MOVE VSAM-STUDENT-YR-ENTER TO VSAM-STUDENT-YR-ENTER-PR.
           WRITE PRINTZ
               AFTER ADVANCING 1 LINES.
           READ VSAM-FILE
               AT END
                  MOVE "YES" TO EOF-IND.
       C-100-TERMINATE.
           CLOSE VSAM-FILE
                 PRINT-FILE.