$ SET SOURCEFORMAT"FREE" IDENTIFICATION DIVISION. PROGRAM-ID. DP173EXAM. AUTHOR. Michael Coughlan. *Originally written for VAX COBOL 1983 *Converted to Microfocus COBOL 2002# *One of a series of "Big Brother" or security based specs * as we approached 1984 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT VESSEL-FILE ASSIGN TO "UVMF.DAT" ORGANIZATION IS LINE SEQUENTIAL. SELECT WORK-FILE ASSIGN TO "WORK.DAT". SELECT SORTED-FILE ASSIGN TO "SORTED.DAT" ORGANIZATION IS LINE SEQUENTIAL. SELECT PRINT-FILE ASSIGN TO "USSRSHIP.RPT". DATA DIVISION. FILE SECTION. FD VESSEL-FILE. 01 FA-VESSEL-RECORD. 02 FA-VESSEL-NAME PIC X(20). 02 FA-VESSEL-TYPE PIC 99. 88 SUBMARINE VALUE 5,6. 02 FA-TONNAGE PIC 9(6). 88 MAJOR-VESSEL VALUE 3500 THRU 999999. 02 FA-CREW PIC 9(5). 02 FA-LOCATION-CODE PIC X. SD WORK-FILE. 01 FB-WORK-RECORD. 02 FILLER PIC X(20). 02 FB-VESSEL-TYPE PIC 99. 02 FILLER PIC 9(6). 02 FILLER PIC 9(5). 02 FB-LOCATION-CODE PIC X. FD SORTED-FILE. 01 FC-VESSEL-RECORD. 02 FC-VESSEL-NAME PIC X(20). 02 FC-TYPE PIC 99. 02 FC-TONNAGE PIC 9(6). 02 FC-CREW PIC 9(5). 02 FC-LOCATION PIC 9. FD PRINT-FILE. 01 FD-PRINT-RECORD PIC X(97). WORKING-STORAGE SECTION. 01 WA-DETAIL-LINE. 02 WA-PRINT-LOCATION PIC X(17). 02 WA-PRINT-FUNCTION PIC BBX(22). 02 WA-PRINT-NAME PIC BBX(20). 02 WA-PRINT-TONNAGE PIC BBBBZZZ,ZZ9. 02 WA-PRINT-CREW PIC BBZZ,ZZ9. 02 WA-PRINT-MONTHLY-COST PIC BBB$$$,$$$,$$9. 01 WB-MAIN-HEADING. 02 FILLER PIC X(25) VALUE SPACES. 02 FILLER PIC X(42) VALUE "U.S.S.R. NAVAL VESSEL INVENTORY REPORT". 01 WC-TITLES. 02 FILLER PIC X(47) VALUE " LOCATION NAME VESSEL FUNCTION ". 02 FILLER PIC X(50) VALUE "VESSEL NAME TONNAGE CREW MONTHLY COST". 01 WD-NAME-TABLE. 02 WD-TABLE-VALUES. 03 FILLER PIC X(22) VALUE "AIRCRAFT CARRIER ". 03 FILLER PIC X(22) VALUE "CRUISER/BATTLESHIP ". 03 FILLER PIC X(22) VALUE "DESTROYER ". 03 FILLER PIC X(22) VALUE "FRIGATE ". 03 FILLER PIC X(22) VALUE "NUCLEAR SUBMARINE ". 03 FILLER PIC X(22) VALUE "CONVENTIONAL SUBMARINE". 03 FILLER PIC X(22) VALUE "ASSAULT SHIP ". 03 FILLER PIC X(22) VALUE "SUPPLY SHIP ". 03 FILLER PIC X(22) VALUE "CORVETTE ". 03 FILLER PIC X(22) VALUE "MINE LAYER/HUNTER ". 03 FILLER PIC X(22) VALUE "FAST ATTACK CRAFT ". 03 FILLER PIC X(22) VALUE "COSTAL PATROL CRAFT ". 02 FILLER REDEFINES WD-TABLE-VALUES. 03 WD-VESSEL-FUNCTION PIC X(22) OCCURS 12 TIMES. 01 WE-RATE-TABLE. 02 WE-TABLE-VALUES. 03 FILLER PIC X(48) VALUE "261023502050099925502510078906320770087007500636". 03 FILLER PIC X(48) VALUE "256023000960098624362400071006110720083307100606". 03 FILLER PIC X(48) VALUE "240020100960086022002386067005500700080006850596". 03 FILLER PIC X(48) VALUE "258623352100099624862435076006050750085007400620". 03 FILLER PIC X(48) VALUE "250021850900091024002336069605860716083006960610". 02 FILLER REDEFINES WE-TABLE-VALUES. 03 WE-LOCATION OCCURS 5 TIMES. 04 WE-VESSEL-TYPE OCCURS 12 TIMES. 05 WE-MONTHLY-RATE PIC 9(4). 01 WF-LOCATION-TABLE. 02 WF-TABLE-VALUES. 03 FILLER PIC X(17) VALUE "THE PACIFIC ". 03 FILLER PIC X(17) VALUE "THE ATLANTIC ". 03 FILLER PIC X(17) VALUE "THE MEDITERRANEAN". 03 FILLER PIC X(17) VALUE "THE INDIAN OCEAN ". 03 FILLER PIC X(17) VALUE "THE OTHER SEAS ". 02 FILLER REDEFINES WF-TABLE-VALUES. 03 WF-LOCATION PIC X(17) OCCURS 5 TIMES. 01 WG-FLAGS. 02 IS-IT-END-OF-FILE PIC X(3). 88 END-OF-FILE VALUE "YES". 01 WH-OTHER-VARIABLES. 02 WH-PREVIOUS-TYPE PIC 99. 02 WH-PREVIOUS-LOCATION PIC X. 02 WH-MONTHLY-TOTAL PIC 9(8). PROCEDURE DIVISION. MAIN SECTION. 10-START. SORT WORK-FILE ON ASCENDING KEY FB-LOCATION-CODE FB-VESSEL-TYPE INPUT PROCEDURE IS SELECT-MAJOR-SHIPS GIVING SORTED-FILE. OPEN INPUT SORTED-FILE. OPEN OUTPUT PRINT-FILE. READ SORTED-FILE AT END MOVE "YES" TO IS-IT-END-OF-FILE. MOVE SPACES TO FD-PRINT-RECORD. WRITE FD-PRINT-RECORD AFTER ADVANCING PAGE. WRITE FD-PRINT-RECORD FROM WB-MAIN-HEADING AFTER ADVANCING 1 LINES. WRITE FD-PRINT-RECORD FROM WC-TITLES AFTER ADVANCING 3 LINES. PERFORM 20-PRODUCE-REPORT UNTIL END-OF-FILE. CLOSE PRINT-FILE SORTED-FILE. STOP RUN. 20-PRODUCE-REPORT. MOVE FC-LOCATION TO WH-PREVIOUS-LOCATION. MOVE WF-LOCATION(FC-LOCATION) TO WA-PRINT-LOCATION. PERFORM 30-PRODUCE-REPORT-FOR-LOCATION UNTIL FC-LOCATION NOT EQUAL TO WH-PREVIOUS-LOCATION OR END-OF-FILE. 30-PRODUCE-REPORT-FOR-LOCATION. MOVE FC-TYPE TO WH-PREVIOUS-TYPE. MOVE WD-VESSEL-FUNCTION(FC-TYPE) TO WA-PRINT-FUNCTION. PERFORM 40-PRODUCE-FUNCTION-REPORT UNTIL FC-TYPE NOT EQUAL TO WH-PREVIOUS-TYPE OR FC-LOCATION NOT EQUAL TO WH-PREVIOUS-LOCATION OR END-OF-FILE. 40-PRODUCE-FUNCTION-REPORT. MULTIPLY FC-CREW BY WE-MONTHLY-RATE(FC-LOCATION, FC-TYPE) GIVING WH-MONTHLY-TOTAL. MOVE WH-MONTHLY-TOTAL TO WA-PRINT-MONTHLY-COST. MOVE FC-CREW TO WA-PRINT-CREW. MOVE FC-TONNAGE TO WA-PRINT-TONNAGE. MOVE FC-VESSEL-NAME TO WA-PRINT-NAME. WRITE FD-PRINT-RECORD FROM WA-DETAIL-LINE AFTER ADVANCING 2 LINES. MOVE SPACES TO WA-DETAIL-LINE. READ SORTED-FILE AT END MOVE "YES" TO IS-IT-END-OF-FILE. SELECT-MAJOR-SHIPS SECTION. 10-START-PROCEDURE. OPEN INPUT VESSEL-FILE. READ VESSEL-FILE AT END MOVE "YES" TO IS-IT-END-OF-FILE. PERFORM 20-GET-MAJOR-VESSELS UNTIL END-OF-FILE. CLOSE VESSEL-FILE. MOVE "NO" TO IS-IT-END-OF-FILE. GO TO 30-EXIT-SELECT-MAJOR-SHIPS. 20-GET-MAJOR-VESSELS. IF SUBMARINE OR MAJOR-VESSEL RELEASE FB-WORK-RECORD FROM FA-VESSEL-RECORD. READ VESSEL-FILE AT END MOVE "YES" TO IS-IT-END-OF-FILE. 30-EXIT-SELECT-MAJOR-SHIPS. EXIT.