Page 1 of 1

When did this change?

PostPosted: Tue Dec 13, 2011 1:33 am
by Number1Ump
I dealt with an S0C7 situation this weekend. There were some counters defined in working storage:

003556 01  CTL-COUNTERS    COMP-3.                                     
003557     03  CTL1-CTRS.                                             
003558         05  CTL1-AMT-CTRS.                                     
003559             07  CTL1-DR-AMT     PIC S9(13)V99 OCCURS 100 TIMES.
003560             07  CTL1-CR-AMT     PIC S9(13)V99 OCCURS 100 TIMES.
003561         05  CTL1-NO-CTRS.                                       
003562             07  CTL1-DR-NO      PIC S9(5)     OCCURS 100 TIMES.
003563             07  CTL1-CR-NO      PIC S9(5)     OCCURS 100 TIMES.
003564     03  CTL2-CTRS.                                             
003700         05  CTL2-AMT-CTRS.                                     
003800             07  CTL2-DR-AMT     PIC S9(13)V99 OCCURS 100 TIMES.
003850             07  CTL2-CR-AMT     PIC S9(13)V99 OCCURS 100 TIMES.
004000         05  CTL2-NO-CTRS.                                       
004100             07  CTL2-DR-NO      PIC S9(5)     OCCURS 100 TIMES.
004150             07  CTL2-CR-NO      PIC S9(5)     OCCURS 100 TIMES.
004300     03  CTL3-CTRS.                                             
004400         05  CTL3-AMT-CTRS.                                     
004500             07  CTL3-DR-AMT     PIC S9(13)V99 OCCURS 100 TIMES.
004550             07  CTL3-CR-AMT     PIC S9(13)V99 OCCURS 100 TIMES.
004700         05  CTL3-NO-CTRS.                                       
004800             07  CTL3-DR-NO      PIC S9(5)     OCCURS 100 TIMES.
004850             07  CTL3-CR-NO      PIC S9(5)     OCCURS 100 TIMES.


Of course, the program abended because the one of these fields did not have valid C-3 data. But there is an initialization paragraph to set these all to 0 at the beginning of the program. But it would loop through 105 times, and update occurance 101 through 105 even though the table is defined occurs 100 times. The abend did not occur when initializing the fields to 0. It happened later when trying to use these fields.

Here's my question for the audience - Maybe I'm wrong, I remember a day when if you were trying to reference an occurance of a COBOL table greater than the number of occurrences defined, you would get an 0C7 or other abend code. If so, when and why did this change? I saw another instance a couple of weeks ago where a subscript got set to 0 and the that worked as well. Just curious.

Thanks,
Douglas

Re: When did this change?

PostPosted: Tue Dec 13, 2011 1:47 am
by BillyBoyo
I think you are thinking of the compiler option SSRANGE, which generates code to check that any subscript/index/reference modification does not access data outside the data defined.

Re: When did this change?

PostPosted: Tue Dec 13, 2011 1:49 am
by Number1Ump
Thank you so much.

Re: When did this change?

PostPosted: Tue Dec 13, 2011 4:47 am
by BillyBoyo
No problem, glad it helped.

There is a topic here about initialising tables: http://www.ibmmainframeforum.com/ibm-cobol/topic6278.html#p26798