Displaying Source Code(s)
|
|
Program of USSR naval stock list
--------------------------------------------------------------------------------
Description : contact me in mail
$ SET SOURCEFORMAT"FREE"
IDENTIFICATION DIVISION.
PROGRAM-ID. DP173EXAM.
AUTHOR. Jai Ganesh.
*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.
--------------------------------------------------------------------------------
|
|
|