IDENTIFICATION DIVISION.
       PROGRAM-ID. CALTVSAM.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT INPUT-FILE ASSIGN TO "C:\PCOBWIN\VSAM\FSTDATA.DAT".
       SELECT VSAM-FILE ASSIGN TO "C:\PCOBWIN\VSAM\VSAMALT.DAT"
               ORGANIZATION IS INDEXED
               ACCESS IS SEQUENTIAL
               RECORD KEY IS VSAM-ID
               ALTERNATE RECORD KEY IS VSAM-NAME WITH DUPLICATES.
      * COMMENTS:
      * This program creates an indexed sequential VSAM file.
      * The organization is indexed and since the creation process is
      * sequential the access is sequential.  The record key is the
      * prime key that the file is being indexed on.  It must be
      * defined in the FILE SECTION (under the 01 level of the FD
      * for the file being created.
      * An alternate key on name is also created.  This key allows for
      * duplicates in the name field.
      * In the B-200-LOOP, before the record is written, the programmer
      * must make sure that the record key VSAM-ID contains the data
      * that the record will be keyed on.
      * Invalid key would be triggered by a record out of sequence or
      * a duplicate.  This would cause a message to be displayed on the
      * screen and a pause for the record to be read.  Obviously in the
      * "real world", errors would be handled so there was a trail.
       DATA DIVISION.
       FILE SECTION.
       FD  INPUT-FILE.
       01  INPUT-REC.
           05  INPUT-ID         PIC 999.
           05  INPUT-NAME       PIC X(20).
           05  INPUT-DATA       PIC X(19).
       FD  VSAM-FILE.
       01  VSAM-REC.
           05  VSAM-ID          PIC 999.
           05  VSAM-NAME        PIC X(20).
           05  VSAM-DATA        PIC X(19).
       WORKING-STORAGE SECTION.
       01  INDICATORS.
           05  EOF-IND                     PIC XXX  VALUE "NO ".
           05  PRESS-ANY-KEY-TO-CONTINUE   PIC X    VALUE SPACES.
       PROCEDURE DIVISION.
       MAINLINE.
           PERFORM A-100-INITIALIZE.
           PERFORM B-100-PROCESS.
           PERFORM C-100-WRAPUP.
           STOP RUN.
       A-100-INITIALIZE.
           OPEN INPUT INPUT-FILE
                OUTPUT VSAM-FILE.
       B-100-PROCESS.
           READ INPUT-FILE
               AT END
                  MOVE "YES" TO EOF-IND.
           PERFORM B-200-LOOP
               UNTIL EOF-IND = "YES".
       B-200-LOOP.
           MOVE INPUT-ID TO VSAM-ID.
           MOVE INPUT-NAME TO VSAM-NAME.
           MOVE INPUT-DATA TO VSAM-DATA.
           WRITE VSAM-REC
               INVALID KEY
                  DISPLAY "WRITE INVALID KEY FOR " VSAM-ID
                  ACCEPT PRESS-ANY-KEY-TO-CONTINUE.
           READ INPUT-FILE
               AT END
                  MOVE "YES" TO EOF-IND.
       C-100-WRAPUP.
           CLOSE INPUT-FILE
                 VSAM-FILE.