>>SOURCE FORMAT IS FREE
IDENTIFICATION DIVISION.
PROGRAM-ID.  DP173EXAM.
AUTHOR.  Michael Coughlan.
*>Originally written for VAX COBOL 1983
*>Converted to GnuCOBOL 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.