ENVIRONMENT DIVISION.
	INPUT-OUTPUT SECTION.
	FILE-CONTROL.
         
	DATA DIVISION.
	FILE SECTION.
	FD IN-FILE
		DATA RECORD IS IN-RECORD.
	01 IN-RECORD.
		02 IN-ID                  PIC 9(5).
		02 IN-LAST-NAME           PIC X(15).
		02 IN-FIRST-NAME          PIC X(10).
		02 IN-CITY                PIC X(12).
		02 IN-STATE               PIC X(2).
		88 VALID-STATE-CODE                      VALUES 'AK'
               'AL' 'AR' 'AZ' 'CA' 'CO' 'CT' 'DC' 'DE' 'FL' 'GA'
               'HI' 'IA' 'ID' 'IL' 'IN' 'KS' 'KY' 'LA' 'MA' 'MD'
               'ME' 'MI' 'MN' 'MO' 'MS' 'MT' 'NC' 'ND' 'NE' 'NH'
               'NJ' 'NM' 'NV' 'NY' 'OH' 'OK' 'OR' 'PA' 'RI' 'SC'
               'SD' 'TN' 'TX' 'UT' 'VA' 'VT' 'WA' 'WI' 'WV' 'WY'.

	FD OUT-FILE
		DATA RECORD IS OUT-RECORD.
	01 OUT-RECORD                PIC X(80).

	SD SORT-FILE
		DATA RECORD IS SORT-RECORD.
	01 SORT-RECORD.
		02 SORT-ID                PIC 9(5).
		02 SORT-LAST-NAME         PIC X(15).
		02 SORT-FIRST-NAME        PIC X(10).
		02 SORT-CITY              PIC X(12).
		02 SORT-STATE             PIC X(2).

	WORKING-STORAGE SECTION.

	01 DETAIL-LINE.
		02 DETAIL-ID              PIC 9(5).
		02                        PIC X(3) VALUE SPACES.
		02 DETAIL-LAST-NAME       PIC X(15).
		02                        PIC X(3) VALUE SPACES.
		02 DETAIL-FIRST-NAME      PIC X(10).
		02                        PIC X(3) VALUE SPACES.
		02 DETAIL-CITY            PIC X(12).
		02                        PIC X(3) VALUE SPACES.
		02 DETAIL-STATE           PIC X(2).

	01 SORTED-DATA-SWITCH        PIC X             VALUE 'N'.
		88 NO-MORE-SORTED-DATA    VALUE 'Y'.

	01 EOF-SWITCH                PIC X             VALUE 'N'.
		88 NO-MORE-INPUT-RECORDS  VALUE 'Y'.

	PROCEDURE DIVISION.
	MAIN-LOGIC.
		SORT SORT-FILE
			ON ASCENDING KEY SORT-LAST-NAME
			INPUT PROCEDURE IS INPUT-LOGIC
			OUTPUT PROCEDURE IS CREATE-REPORT.
		STOP RUN.

	INPUT-LOGIC.
		OPEN INPUT IN-FILE.
		READ IN-FILE
			AT END MOVE 'Y' TO EOF-SWITCH.
		PERFORM DATA-LOOP
			UNTIL NO-MORE-INPUT-RECORDS.
		CLOSE IN-FILE.

	DATA-LOOP.
		IF VALID-STATE-CODE
			MOVE IN-RECORD TO SORT-RECORD
			RELEASE SORT-RECORD.
		READ IN-FILE
			AT END MOVE 'Y' TO EOF-SWITCH.

	CREATE-REPORT.
		OPEN OUTPUT OUT-FILE.
		RETURN SORT-FILE
			AT END MOVE 'Y' TO SORTED-DATA-SWITCH.
		PERFORM REPORT-LOOP
			UNTIL NO-MORE-SORTED-DATA.
		CLOSE OUT-FILE.

	REPORT-LOOP.
		MOVE SORT-ID TO DETAIL-ID
		MOVE SORT-LAST-NAME TO DETAIL-LAST-NAME.
		MOVE SORT-FIRST-NAME TO DETAIL-FIRST-NAME.
		MOVE SORT-CITY TO DETAIL-CITY.
		MOVE SORT-STATE TO DETAIL-STATE.
		WRITE OUT-RECORD FROM DETAIL-LINE.
		RETURN SORT-FILE
			AT END MOVE 'Y' TO SORTED-DATA-SWITCH.
