gnucobol-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [open-cobol-list] PLEASE HELP new to coboL PROGRAMMING


From: Dave Stratford
Subject: Re: [open-cobol-list] PLEASE HELP new to coboL PROGRAMMING
Date: Tue, 21 Dec 2010 23:08:24 -0000 (GMT)
User-agent: SquirrelMail/1.4.8-5.el5.centos.10

John Culleton wrote:
> On Monday 20 December 2010 07:19:43 rathin wrote:
>> IDENTIFICATION DIVISION.
> (etc.)
>
> The program is written in the older fixed format. It conforms to COBOL
> 85  apparently.
>
> Only a few changes are needed.
> Put seven spaces before IDENTIFICATION DIVISION.

7 to 10 spaces.

> You need to add a PROGRAM-ID. paragraph.
> The LABEL RECORDS ARE STANDARD clause is obsolete and should be
> eliminated.
> The RECORD CONTAINS 80 CHARACTERS clause is obsolete and should be
> eliminated.

Haven't cheecked the OC compiler, but will the presence of these cause is
to barf, or will it simply ignore them? My understanding of the COBOL
standards is that it should accept them but ignore them.

> Don.t forget to put a period at the end of the FD lines in each case.
>
>
> With these few changes the program as you submitted it compiles
> without error using
>
> cobc -x cobsamp.cbl
>
> The corrected program is listed below. Note that DIVISION, SECTION, FD
> and 01 headers begin with seven spaces.  Named paragraphs begin with
> 7 spaces. Other lines in your sample begin with 9 spaces, but should
> really begin with 11 spaces to conform to the old fixed format.

7 to 10 spaces is column A, 11 to 72 is column B. Some elements MUST start
in column A, some MUST start in column B, a few can start in either area.
But, most importantly, can start anywhere within that area.

Division, Section and Paragraph headers must start in A, WS level numbers
can be in A or B, most(all?) other bits must start somehwere in column B.

> --------------------------------------
>       IDENTIFICATION DIVISION.
>        PROGRAM-ID. SAMPLE.
>        ENVIRONMENT DIVISION.
>        CONFIGURATION SECTION.
>        INPUT-OUTPUT SECTION.
>        FILE-CONTROL.
>            SELECT TAX-TABLE-FILE ASSIGN TO  "INPUT-FILE"
>                                     ORGANIZATION IS LINE SEQUENTIAL.
>            SELECT SALARY-FILE ASSIGN TO "INPUT-FILE"
>                   ORGANIZATION IS LINE SEQUENTIAL.
>            SELECT SALARY-REPORT ASSIGN TO "OUTPUT-FILE"
>                   ORGANIZATION IS LINE SEQUENTIAL.
>        DATA DIVISION.
>        FILE SECTION.
>       *
>        FD  TAX-TABLE-FILE.
>        01  TAX-TABLE-REC.
>            05  T-MAX-TAX-INCOME             PIC 9(06).
>            05  T-FED-TAX                    PIC V9(3).
>            05  T-STATE-TAX                  PIC V9(3).
>            05                               PIC X(68).
>        FD  SALARY-FILE.
>        01  SALARY-FILE-REC.
>            05  EMPLOYEE-NO                  PIC 9(05).
>            05  EMPLOYEE-NAME                PIC X(20).
>            05                               PIC X(03).
>            05  ANNUAL-SALARY                PIC 9(05).
>            05                               PIC X(08).
>            05  NO-DEPENDENTS                PIC 9(01).
>            05                               PIC X(38).
>        FD  SALARY-REPORT.
>        01  SALARY-REPORT-REC                PIC X(80).
>       *
>        WORKING-STORAGE SECTION.
>        01  WORKING-ITEMS.
>            05  MORE-RECS                    PIC X(01).
>            05  X1                           PIC 9(02).
>            05  MORE-TABLE-RECS              PIC X(01)  VALUE 'Y'.
>            05  FED-TAX-DEDUCTION            PIC 9(05).
>            05  STATE-TAX-DEDUCTION          PIC 9(05).
>            05  MONTHLY-TAKE-HOME-PAY        PIC 9(05)V9(02).
>            05  FOUND-MATCH                  PIC X(01)  VALUE 'N'.
>            05  TEMP-INCOME                  PIC 9(06)  VALUE ZEROES.
>        01  WS-DATE.
>            05  WS-DATE-YEAR                 PIC 9(02).
>            05  WS-DATE-MONTH                PIC 9(02).
>            05  WS-DATE-DAY                  PIC 9(02).
>        01  WS-REPORT-DATE.
>            05  RD-MONTH                     PIC 9(02).
>            05                               PIC X(01)  VALUE '/'.
>            05  RD-DAY                       PIC 9(02).
>            05                               PIC X(01)  VALUE '/'.
>            05  RD-YEAR                      PIC 9(02).
>        01  TAX-TABLE.
>            05  TABLE-ENTRIES OCCURS 6 TIMES.
>                10  WS-MAX-TAX-INCOME        PIC 9(06).
>                10  WS-FED-TAX               PIC V9(3).
>                10  WS-STATE-TAX             PIC V9(3).
>        01  HEADER-1.
>            05                               PIC X(12).
>            05                               PIC X(21)  VALUE
>                            'MONTHLY SALARY REPORT'.
>            05                               PIC X(03).
>            05  DATE-OUT                     PIC 99/99/99.
>            05                               PIC X(02).
>       *    05                               PIC X(04)  VALUE
>       *                    'PAGE'.
>       *    05  PAGE-OUT                     PIC 9(02).
>        01  HEADER-2.
>            05                               PIC X(08)  VALUE
>                            'EMPLOYEE'.
>            05                               PIC X(19).
>            05                               PIC X(17)  VALUE
>                            'MONTHLY TAKE HOME'.
>        01  HEADER-3.
>            05                               PIC X(02).
>            05                               PIC X(04)  VALUE
>                            'NAME'.
>            05                               PIC X(28).
>            05                               PIC X(03)  VALUE
>                            'PAY'.
>        01  LIST-LINE-1.
>            05  EMPLOYEE-NAME-OUT            PIC X(20).
>            05                               PIC X(11).
>            05  MONTHLY-TAKE-HOME-PAY-OUT    PIC $ZZ,ZZZ.99.
>        01  LIST-LINE-2.
>            05                               PIC X(05).
>            05                               PIC X(35) VALUE
>                            'NO MATCH WAS FOUND IN THE TAX TABLE'.
>        PROCEDURE DIVISION.
>        000-MAIN-RTN.
>            PERFORM 100-INITIALIZE-RTN
>            PERFORM 200-TABLE-ENTRY
>            PERFORM 300-PROCESS-RTN
>                        UNTIL MORE-RECS = 'N'
>            PERFORM 900-CLOSE-FILES-RTN.
>        100-INITIALIZE-RTN.
>            OPEN INPUT  TAX-TABLE-FILE
>                        SALARY-FILE
>                 OUTPUT SALARY-REPORT
>            MOVE 'Y' TO MORE-RECS
>            PERFORM 110-SET-DATE-RTN
>            PERFORM 120-WRITE-HEADERS-RTN.
>        110-SET-DATE-RTN.
>            ACCEPT WS-DATE FROM DATE
>            MOVE WS-DATE-YEAR TO RD-YEAR
>            MOVE WS-DATE-MONTH TO RD-MONTH
>            MOVE WS-DATE-DAY TO RD-DAY
>            MOVE WS-REPORT-DATE TO DATE-OUT.
>        120-WRITE-HEADERS-RTN.
>            WRITE SALARY-REPORT-REC FROM HEADER-1
>                          AFTER ADVANCING 5 LINES
>            WRITE SALARY-REPORT-REC FROM HEADER-2
>                          AFTER ADVANCING 2 LINES
>            WRITE SALARY-REPORT-REC FROM HEADER-3
>                           AFTER ADVANCING 1 LINE.
>        200-TABLE-ENTRY.
>            PERFORM VARYING X1 FROM 1 BY 1
>                            UNTIL X1 > 7 OR MORE-TABLE-RECS = 'N'
>                READ TAX-TABLE-FILE
>                    AT END
>                        MOVE 'N' TO MORE-TABLE-RECS
>                    NOT AT END
>                        PERFORM 250-TABLE-LOAD
>                END-READ
>            END-PERFORM
>            IF X1 < 7
>                DISPLAY 'TOO FEW RECORDS IN THE FILE'
>            END-IF
>            IF MORE-TABLE-RECS NOT = 'N'
>                DISPLAY 'TOO MANY RECORDS IN THE FILE'
>            END-IF.
>        250-TABLE-LOAD.
>            MOVE T-MAX-TAX-INCOME TO WS-MAX-TAX-INCOME (X1)
>            MOVE T-FED-TAX TO WS-FED-TAX (X1)
>            MOVE T-STATE-TAX TO WS-STATE-TAX (X1).
>        300-PROCESS-RTN.
>            READ SALARY-FILE
>                AT END
>                    MOVE 'N' TO MORE-RECS
>                NOT AT END
>                    PERFORM 350-COMPARE-RTN
>            END-READ.
>        350-COMPARE-RTN.
>            MOVE 1 TO X1
>            PERFORM 353-INCREMENT-SUBSCRIPT-RTN
>                           UNTIL FOUND-MATCH = 'Y' OR X1 > 7
>            IF X1 > 7 AND FOUND-MATCH = 'N'
>                THEN WRITE SALARY-REPORT-REC FROM LIST-LINE-2
>                CONTINUE
>            END-IF
>            PERFORM 356-CALCULATE-RTN
>            PERFORM 359-WRITE-RTN
>            MOVE 'N' TO FOUND-MATCH
>            MOVE ZEROES TO TEMP-INCOME.
>        353-INCREMENT-SUBSCRIPT-RTN.
>            IF ANNUAL-SALARY > TEMP-INCOME AND <= WS-MAX-TAX-INCOME
> (X1)
>                THEN MOVE 'Y' TO FOUND-MATCH
>            ELSE
>                MOVE WS-MAX-TAX-INCOME (X1) TO TEMP-INCOME
>                ADD 1 TO X1
>            END-IF.
>        356-CALCULATE-RTN.
>            COMPUTE FED-TAX-DEDUCTION =
>                       ANNUAL-SALARY * WS-FED-TAX (X1)
>            COMPUTE STATE-TAX-DEDUCTION =
>                       ANNUAL-SALARY * WS-STATE-TAX (X1)
>            COMPUTE MONTHLY-TAKE-HOME-PAY = (ANNUAL-SALARY -
>                         (FED-TAX-DEDUCTION + STATE-TAX-DEDUCTION))/12.
>        359-WRITE-RTN.
>            MOVE EMPLOYEE-NAME TO EMPLOYEE-NAME-OUT
>            MOVE MONTHLY-TAKE-HOME-PAY TO MONTHLY-TAKE-HOME-PAY-OUT
>            WRITE SALARY-REPORT-REC FROM LIST-LINE-1
>                             AFTER ADVANCING 1 LINE.
>        900-CLOSE-FILES-RTN.
>            CLOSE TAX-TABLE-FILE
>                  SALARY-FILE
>                  SALARY-REPORT
>            STOP RUN.
>
> Of course the program will not run unless the two input files are
> available.
>
> To learn COBOL I recommend purchase of a good textbook, (in this case
> the older the better) and of course study of the Open Cobol Manual
> which is an excellent reference guide.
> --
> John Culleton,
>  typesetting and indexing http://wexfordpress.com
> book sales http://wexfordpress.net
> Free  barcode: http://www.tux.org/~milgram/bookland/
>
>
> ----------------------------------------------------------------------------

Dave

-- 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]