Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bankers algorithm in cobol

The issue I am getting is that line COLUMNS that i define in the working storage section and when it is used within the 200-BANKER-FILL section is giving me a syntax error in which COLUMNS is unexpected. the actual error is

'error: syntax error, unexpected COLUMNS'

I cannot seem to understand how the declaration of COLUMNS within the working storage section would be considered unexpected, any help would be great

   IDENTIFICATION DIVISION.
   PROGRAM-ID.BankerAlgoritm.
   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT BANKER-FILE-IN  ASSIGN TO 's1.txt'
           ORGANIZATION IS LINE SEQUENTIAL.

   *> FUNCTION NUMVAL (STRING) 

   DATA DIVISION.
   FILE SECTION.
   FD  BANKER-FILE-IN.
   01  BANKER-LINE                   PIC X(9).
   WORKING-STORAGE SECTION.
   01  ARE-THERE-MORE-RECORDS        PIC X(3)        VALUE 'YES'.
           88  NO-MORE-RECORDS                       VALUE 'NO '.
   01  ROWS                          PIC 9.
   01  COLUMNS                       PIC 9.
   01   BANKER-TABLE-ASSIGN.
        05   ASSIGN-ROW OCCURS 5 TIMES INDEXED BY X.
            10   ASSIGN-COLUMN OCCURS 4 TIMES INDEXED BY Y.
                20  ASSIGN-RESOURCE         PIC 9.
   01   BANKER-TABLE-MAX.
        05   MAX-ROW OCCURS 5 TIMES INDEXED BY X.
            10   MAX-COLUMN OCCURS 4 TIMES INDEXED BY Y.
                20  MAX-RESOURCE         PIC 9.
   01   BANKER-TABLE-AVAL.
        05   AVAL-COLUMN OCCURS 4 TIMES INDEXED BY Y.
            10  AVAL-RESOURCE            PIC 9.
   01   BANKER-TABLE-REQUEST.
        05   REQUEST-COLUMN OCCURS 4 TIMES INDEXED BY Y.
            10  REQUEST-RESOURCE         PIC 9.
   01   BANKER-REQUEST-LINE.
        05  REQUEST-LINE                 PIC 9.
        05  SPACER                       PIC X.
        05  REQUEST-ONE                  PIC 9.
        05                               PIC X.
        05  REQUEST-TWO                  PIC 9.
        05                               PIC X.
        05  REQUEST-THREE                PIC 9.
        05                               PIC X.
        05  REQUEST-FOUR                 PIC 9.
   01   MATRIX.
        05  ONE                          PIC 9.
        05                               PIC X.
        05  TWO                          PIC 9.
        05                               PIC X.
        05  THREE                        PIC 9.
        05                               PIC X.
        05  FOUR                         PIC 9.
   01   HOLDING-VAL-SINGLE               PIC 9.
   01   LINE-COUNT                       PIC 99 VALUE 0.
   01   SAFE-STATE                       PIC XXXXX VALUE 'FALSE'.
   PROCEDURE DIVISION.
  *>****************************************
  *>  Controls direction of program logic  *
  *>  and reads the first record.          *
  *>****************************************
   100-MAIN-MODULE.
       PERFORM UNTIL NO-MORE-RECORDS
           READ BANKER-FILE-IN
               AT END
                 MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
               NOT AT END
                 PERFORM 200-BANKER-FILL
           END-READ
       END-PERFORM         
      *> PERFORM 300-FILL-NEED
      *> PERFORM 400-SAFE-STATE
      *>IF SAFE-STATE = 'TRUE'
        *>  PERFORM 500-REQUEST             
    *>   PERFORM 600-END-OF-JOB-RTN
       STOP RUN.
  200-BANKER-FILL.
        ADD 1 TO LINE-COUNT
        IF LINE-COUNT IS EQUAL TO 1
            MOVE BANKER-LINE TO ROWS
        END-IF
        IF LINE-COUNT IS EQUAL TO 3
            MOVE BANKER-LINE TO COLUMNS
        END-IF
        IF LINE-COUNT >= 5 AND <= 10
        *>FILL ASSIGNED MATRIX
            MOVE BANKER-LINE TO MATRIX
            MOVE ONE TO ASSIGN-COLUMN(LINE-COUNT - 4, 1)
            MOVE TWO TO ASSIGN-COLUMN(LINE-COUNT - 4, 2)
            MOVE THREE TO ASSIGN-COLUMN(LINE-COUNT - 4, 3)
            MOVE FOUR TO ASSIGN-COLUMN(LINE-COUNT - 4, 4)
        END-IF
        IF LINE-COUNT >= 12 AND <= 17
        *>FILL IN MAX MATRIX
            MOVE BANKER-LINE TO MATRIX
            MOVE ONE TO MAX-COLUMN(LINE-COUNT - 11, 1)
            MOVE TWO TO MAX-COLUMN(LINE-COUNT - 11, 2)
            MOVE THREE TO MAX-COLUMN(LINE-COUNT - 11, 3)
            MOVE FOUR TO MAX-COLUMN(LINE-COUNT - 11, 4)
        END-IF
        IF LINE-COUNT = 19
        *> FILL IN AVAILIBLE MATRIX
            MOVE BANKER-LINE TO MATRIX
            MOVE ONE TO AVAL-COLUMN(1)
            MOVE TWO TO AVAL-COLUMN(2)
            MOVE THREE TO AVAL-COLUMN(3)
            MOVE FOUR TO AVAL-COLUMN(4)
        END-IF
        IF LINE-COUNT = 21
        *> FILL IN REQUEST
            MOVE BANKER-LINE TO BANKER-REQUEST-LINE
        END-IF.
  *>*************************************************
  *>  Performed from 100-MAIN-MODULE. Closes files  *
  *>*************************************************
   600-END-OF-JOB-RTN.
       CLOSE BANKER-FILE-IN.

the next part is the input file

5

4

0 0 1 2
1 0 0 0
1 3 5 4
0 6 3 2
0 0 1 4

0 0 1 2
1 7 5 0
2 3 5 6
0 6 5 2
0 6 5 6

1 5 2 0

1:0 4 2 0
like image 433
user3737986 Avatar asked Apr 26 '26 11:04

user3737986


1 Answers

COLUMN is a reserved word in COBOL. Here is a list of reserved words for future reference.

like image 181
Christian Westbrook Avatar answered Apr 28 '26 03:04

Christian Westbrook



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!