IDENTIFICATION DIVISION.
       PROGRAM-ID. VEHICLE-REPORT.
       AUTHOR. JONAS WIK.
       DATE-WRITTEN. 04/27/2000.
       DATE-COMPILED.
      ***************************************************************
      **
      **   DESCRIPTION:
      **       THIS PROGRAM FIRST READS IN THE CLASSIFICATIONS AND
      **       RATES AND STORES THEM IN A TABLE 90 ENTRIES LONG AND
      **       THEN GOES THRU A FILE COMPUTING THE REGULATION FEE BASED
      **       ON THE WEIGHT OF THE VEHICLE AND THE RATE FOR ITS CLASS.
      **       A REPORT IS THEN PRINTED.
      **   
      **   INPUT: CLASS-FILE
      **       VCLASS                     2 CHARS
      **       VRATE                      3 DIGITS 2 DEC
      **      
      **   INPUT: TRANS-FILE
      **       VEH-CLASS                  2 CHARS
      **       VNAME                     20 CHARS
      **       VWEIGHT                    5 DIGITS NO DEC
      **       VYEAR                      4 DIGITS
      **       VDESCR                     9 CHARS
      **
      **   OUTPUT: CLASS-RPT
      **       DATA                        STARTS IN COL.
      **       DET-CLASS                        8
      **       DET-NAME                        17
      **       DET-WEIGHT
      **       DET-FEE
      **
      ***************************************************************
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
      **
       FILE-CONTROL.
           SELECT CLASS-FILE ASSIGN TO 'J:/COBOL/VCLASS.DAT'
           ORGANIZATION IS LINE SEQUENTIAL.
           SELECT TRANS-FILE ASSIGN TO 'J:/COBOL/VTRANS.DAT'
           ORGANIZATION IS LINE SEQUENTIAL.
           SELECT CLASS-RPT  ASSIGN TO 'J:/COBOL/VEHICLE.TXT'.
      **
       DATA DIVISION.
      **
       FILE SECTION.
      **
       FD  CLASS-FILE
           LABEL RECORD ARE STANDARD
           RECORD CONTAINS 5 CHARACTERS.
       01  CLASS-FILE-REC.
           05 VCLASS                   PIC XX.
           05 VRATE                    PIC 9V99.
      **
       FD  TRANS-FILE
           LABEL RECORDS ARE STANDARD
           RECORD CONTAINS 40 CHARACTERS.
       01  TRANS-FILE-REC.
           05 VEH-CLASS                PIC XX.
           05 VNAME                    PIC X(20).
           05 VWEIGHT                  PIC 9(5).
           05 VYEAR                    PIC 9999.
           05 VDESCR                   PIC X(9).
      **
       FD  CLASS-RPT
           LABEL RECORDS ARE OMITTED
           RECORD CONTAINS 60 CHARACTERS.
       01  CLASS-REC                   PIC X(60).
      **
       WORKING-STORAGE SECTION.
      **
       01  WV-VARIABLES.
           05 REGFEE                   PIC 9(5)V99   VALUE 0.
           05 GRANDTOT                 PIC 9(9)V99   VALUE 0.
           05 X1                       PIC 99        VALUE 1.
           05 X2                       PIC 99.
      **
       01  WV-YEARS-TOTS.
           05 YEAR-TOT OCCURS 3 TIMES PIC 9(7)V99
                               VALUE 0.
      **
       01  WV-RATE-TABLE.
           05 RATE-TABLE OCCURS 90 TIMES.
              10 VEHICLE-CLASS         PIC XX.
              10 VEH-RATE              PIC 9V99.

       01  WS-COUNTS.
      **
           05 WC-PAGECOUNT             PIC 999
                               VALUE 1.
           05 WC-LINECOUNT             PIC 99
                               VALUE 0.
              88 WC-EOP        VALUE 60.
           05 WC-COUNT                 PIC 99
                               VALUE 0.
      **
       01  WS-DATE.
      **
           05                          PIC XX.
           05 WD-YEAR                  PIC 99.
           05 WD-MONTH                 PIC 99.
           05 WD-DAY                   PIC 99.
           05                          PIC X(13).
      **
       01  WS-SWITCH.
           05  EOF-TABLE               PIC XXX.
               88 EOF-CLASS-FILE       VALUE 'YES'.
           05  WS-FOUND                PIC XXX.
           05  EOF-MAIN-FILE           PIC XXX.
               88 EOF-MAIN             VALUE 'YES'.
      **
       01  HEAD1.
           05 FILLER                   PIC X(20)
                               VALUE SPACES.
           05                          PIC X(21)
                               VALUE 'REGISTRATION REPORT  '.
           05 HEADING-MONTH            PIC Z9.
           05                          PIC X
                               VALUE '/'.
           05 HEADING-DAY              PIC Z9.
           05                          PIC X
                               VALUE '/'.
           05 HEADING-YEAR             PIC 99.
           05                          PIC X(6)
                               VALUE ' PAGE '.
           05 HEAD-PAGE                PIC 99.
           05 FILLER                   PIC XXX
                               VALUE SPACES.
      **
       01  HEAD2.
           05                          PIC X(11)
                               VALUE '  JONAS WIK'.
           05 FILLER                   PIC X(49)
                               VALUE SPACES.
      **
       01  HEAD3.
           05                          PIC X(15)
                               VALUE '  VEHICLE CLASS'.
           05                          PIC X(6)
                               VALUE '  NAME'.
           05 FILLER                   PIC X(19)
                               VALUE SPACES.
           05                          PIC X(6)
                               VALUE 'WEIGHT'.
           05 FILLER                   PIC X(5)
                               VALUE SPACE.
           05                          PIC XXX
                               VALUE 'FEE'.
           05 FILLER                   PIC X(6)
                               VALUE SPACES.

      **
       01  VEH-DETAIL.
           05 FILLER                   PIC X(7)
                               VALUE SPACES.
           05 DET-CLASS                PIC XX.
           05 FILLER                   PIC X(7).
           05 DET-NAME                 PIC X(20).
           05 FILLER                   PIC XXXX
                               VALUE SPACES.
           05 DET-WEIGHT               PIC 9(5).
           05 FILLER                   PIC X(5)
                               VALUE SPACES.
           05 DET-FEE                  PIC $$$,$$Z.99.
      **
       01  FOOT1.
           05 FILLER                   PIC XX VALUE SPACE.
           05                          PIC X(16)
                               VALUE 'TOTAL FOR 1988: '.
           05 FOOT-TOT-88              PIC $$,$$$,$$$.99.
           05 FILLER                   PIC X(29)
                               VALUE SPACE.
       01  FOOT2.
           05 FILLER                   PIC XX VALUE SPACE.
           05                          PIC X(16)
                               VALUE 'TOTAL FOR 1989: '.
           05 FOOT-TOT-89              PIC $$,$$$,$$$.99.
           05 FILLER                   PIC X(29)
                               VALUE SPACES.
       01  FOOT3.
           05 FILLER                   PIC XX VALUE SPACES.
           05                          PIC X(16)
                               VALUE 'TOTAL FOR 1990: '.
           05 FOOT-TOT-90              PIC $$,$$$,$$$.99.
           05 FILLER                   PIC X(29)
                               VALUE SPACES.
       01  FOOT4.
           05 FILLER                   PIC XX VALUE SPACES.
           05                          PIC X(15)
                               VALUE 'GRAND TOTAL:  '.
           05 GRAND                    PIC $$$,$$$,$$$.99.
           05 FILLER                   PIC X(33)
                               VALUE SPACES.
      **
       PROCEDURE DIVISION.

      ***************************************************************
      **
      **   THIS IS THE MAIN MODULE WHICH EXECUTES 800-LOAD TABLE,
      **   110-INITIALIZE PARAGRAPH, THE 200-COMPUTE PARAGRAPH UNTIL END
      **   OF FILE, AND THEN WRITES OUT THE FOOTER.
      **
      ***************************************************************

       100-MAIN.
      **
           PERFORM 800-LOAD-TABLE THRU 800-EXIT.
           PERFORM 110-INITIALIZE THRU 110-EXIT.
           PERFORM 200-CALC THRU 200-EXIT
                           UNTIL EOF-MAIN.
           PERFORM 950-FOOT THRU 950-EXIT.
           CLOSE TRANS-FILE
                 CLASS-RPT.
           STOP RUN.
      **
      ***************************************************************
      **
      **   110-INITIALIZE OPENS FILES AND CALLS 700-READ-TRANS,
      **   500-DATE-MOVE AND 900-HEAD.
      **
      ***************************************************************

       110-INITIALIZE.
      **
           OPEN INPUT  TRANS-FILE.
           OPEN OUTPUT CLASS-RPT.
           MOVE 'NO' TO EOF-MAIN-FILE.
           PERFORM 700-READ-TRANS THRU 700-EXIT.
           PERFORM 500-DATE-MOVE THRU 500-EXIT.
           PERFORM 900-HEAD THRU 900-EXIT.
      **
       110-EXIT.EXIT.

      ***************************************************************
      **
      **   THIS PARAGRAPH EXECUTES A SEARCH FOR CLASSIFICATION CODE
      **   UNTIL IT IS FOUND OR NOT IN THE TABLE, IT THEN COMPUTES THE
      **   REGULATION FEE BY: RATE * WEIGHT
      **   IF END OF PAGE IS REACHED, A NEW SET OF HEADERS IS PRINTED
      **   ON THE NEXT PAGE. THE DETAIL LINE IS THEN PRINTED THRU
      **   910-DETAIL, AND THE TOTAL IS ADDED TO THE TOTAL FOR THE
      **   YEAR. AT THE END A NEW TRANSACTION RECORD IS READ.
      **
      ***************************************************************
       200-CALC.
           MOVE 'NO' TO WS-FOUND.
           PERFORM 300-SEARCH THRU 300-EXIT
               VARYING X1 FROM 1 BY 1
               UNTIL WS-FOUND = 'YES' OR X1 >90.
           IF WS-FOUND = 'NO'
               INITIALIZE REGFEE
           ELSE
               COMPUTE REGFEE ROUNDED = VEH-RATE(X2) * VWEIGHT
               IF  WC-EOP
                   PERFORM 900-HEAD THRU 900-EXIT
               END-IF
               PERFORM 910-DETAIL   THRU 910-EXIT
               PERFORM 250-YEAR-TOT THRU 250-EXIT
           END-IF.
           PERFORM 700-READ-TRANS THRU 700-EXIT.
       200-EXIT.EXIT.

      ***************************************************************
      **
      **  THIS PARAGRAPH ADDS THE REGULATION FEE TO THE APPROPRIATE
      **  YEAR TOTAL.
      **
      ***************************************************************

       250-YEAR-TOT.
           EVALUATE VYEAR
               WHEN 1988
                   ADD REGFEE TO YEAR-TOT(1)
               WHEN 1989
                   ADD REGFEE TO YEAR-TOT(2)
               WHEN 1990
                   ADD REGFEE TO YEAR-TOT(3)
           END-EVALUATE.
       250-EXIT.EXIT.

      **
      ***************************************************************
      **
      **   THIS PARAGRAPH SEARCHES FOR A MATCH OF CLASSIFICATIONS
      **   BETWEEN THE TABLE AND THE TRANSACTION FILE.
      **
      ***************************************************************


       300-SEARCH.
           IF VEHICLE-CLASS(X1) = VEH-CLASS
               MOVE 'YES' TO WS-FOUND
               MOVE X1 TO X2
           END-IF.
       300-EXIT.EXIT.

      ***************************************************************
      **
      **   THIS PARAGRAPH MOVES THE CURRENT DATE TO THE HEADING
      **
      ***************************************************************
       500-DATE-MOVE.
      **
           MOVE FUNCTION CURRENT-DATE TO WS-DATE.
           MOVE WD-MONTH TO HEADING-MONTH.
           MOVE WD-DAY TO HEADING-DAY.
           MOVE WD-YEAR TO HEADING-YEAR.
      **
       500-EXIT.EXIT.

      **
      ***************************************************************
      **
      **   THIS PARAGRAPH READS THE TRANSACTION INPUT FILE.
      **
      ***************************************************************
       700-READ-TRANS.
      **
           READ TRANS-FILE
               AT END MOVE 'YES' TO EOF-MAIN-FILE.
      **
       700-EXIT.EXIT.

      ***************************************************************
      **
      **   THIS PARAGRAPH OPENS INPUT CLASS-FILE CALLS 810-READ AND
      **   820-FILL, AND THEN CLOSES THE FILE.
      **
      ***************************************************************

       800-LOAD-TABLE.
           OPEN INPUT CLASS-FILE.
           PERFORM 810-READ THRU 810-EXIT.
           PERFORM 820-FILL THRU 820-EXIT
               UNTIL EOF-CLASS-FILE.
           CLOSE CLASS-FILE.
       800-EXIT.EXIT.

      **************************************************************
      **
      **   THIS PARAGRAPH READS THE CLASS-FILE
      **
      **************************************************************

       810-READ.
           READ CLASS-FILE
               AT END MOVE 'YES' TO EOF-TABLE.
       810-EXIT. EXIT.

      **************************************************************
      **
      **   THIS PARAGRAPH FILLS THE TABLE WITH CLASSIFICATION AND RATE
      **
      **************************************************************
       820-FILL.
           MOVE VCLASS TO VEHICLE-CLASS(X1).
           MOVE VRATE  TO VEH-RATE(X1).
           ADD 1 TO X1.
           IF X1 > 90
               MOVE 'YES' TO EOF-TABLE
           ELSE
               PERFORM 810-READ THRU 810-EXIT
           END-IF.
       820-EXIT. EXIT.
      **
      ***************************************************************
      **
      **   THIS PARAGRAPH WRITES HEADINGS AND INCREMENTS PAGENUMBER
      **
      ***************************************************************
       900-HEAD.
      **
           MOVE SPACES TO CLASS-REC.
           WRITE CLASS-REC AFTER ADVANCING PAGE.
           MOVE WC-PAGECOUNT TO HEAD-PAGE.
           ADD 1 TO WC-PAGECOUNT.
           WRITE CLASS-REC FROM HEAD1
               AFTER ADVANCING 5 LINES.
           WRITE CLASS-REC FROM HEAD2
               AFTER ADVANCING 1 LINE.
           WRITE CLASS-REC FROM HEAD3
               AFTER ADVANCING 2 LINES.
      **
       900-EXIT.
           EXIT.

      ***************************************************************
      **
      **   THIS PARAGRAPH MOVES & WRITES THE DETAIL AND INCREMENTS THE
      **   LINECOUNT.
      **
      ***************************************************************

       910-DETAIL.
           MOVE REGFEE TO DET-FEE.
           MOVE VWEIGHT TO DET-WEIGHT.
           MOVE VNAME TO DET-NAME.
           MOVE VEH-CLASS TO DET-CLASS
           WRITE CLASS-REC FROM VEH-DETAIL
               AFTER ADVANCING 2 LINES.
           ADD 2 TO WC-LINECOUNT.
       910-EXIT. EXIT.

      ***************************************************************
      **
      **   THIS PARAGRAPH MOVES THE YEAR-TOTS TO THE FOOTERS,
      **   COMPUTES THE GRANGTOT BY ADDING THE THREE YEARS UP
      **   MOVES THE GRANDTOT TO THE FOOTER AND PRINTS THE
      **   FOOTERS.
      **
      ***************************************************************


       950-FOOT.
           MOVE YEAR-TOT(1) TO FOOT-TOT-88.
           WRITE CLASS-REC FROM FOOT1
               AFTER ADVANCING 3 LINES.
           MOVE YEAR-TOT(2) TO FOOT-TOT-89.
           WRITE CLASS-REC FROM FOOT2
               AFTER ADVANCING 1 LINE.
           MOVE YEAR-TOT(3) TO FOOT-TOT-90.
           WRITE CLASS-REC FROM FOOT3
               AFTER ADVANCING 1 LINE.
           COMPUTE GRANDTOT =
                   YEAR-TOT(1) + YEAR-TOT(2) + YEAR-TOT(3).
           MOVE GRANDTOT TO GRAND.
           WRITE CLASS-REC FROM FOOT4
               AFTER ADVANCING 1 LINE.
       950-EXIT. EXIT.