# Having problem understanding an application

**URL:** <https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790>\
**Category:** Forum\
**Tags:** Adabas-Natural, Natural, Natural-on-Mainframes\
**Created:** [December 12, 2006, 5:39am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790 "2006-12-12T05:39:01Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Guest](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/guest/32/75_2.png) [@Guest](https://techcommunity.softwareag.com/u/Guest)\
**Post date:** [December 12, 2006, 5:39am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/1 "2006-12-12T05:39:01Z")

</div>

I have just been thrown into the fire to learn Natural and I would like to have an application explained to me so I can understand whats going on with it.

0010 DEFINE DATA LOCAL  
0020 01 NLM-CASE-FILE VIEW OF NLM-CASE-FILE  
0030 02 CF-FILE-TYPE-AND-NUMBER  
0040 02 CF-REC1-STATUS-DESC  
0050 02 CF-CASE-TYPE  
0060 02 CF-REC1-CASE-STATUS  
0070 02 CF-REC1-SPECIAL-CODE  
0080 02 CF-CASE-SUPER-DESC-10  
0090 \*  
0100 01 #KAARRAY (99)  
0110 02 #SPECIAL-CODE (A4)  
0120 02 #TYPE-COUNT (I2)  
0130 \*  
0140 01 #KAARRAY-CNT (I2)  
0150 01 #I (I2)  
0160 \*  
0170 END-DEFINE  
0180 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
0190 READ (200) NLM-CASE-FILE BY CF-CASE-SUPER-DESC-10 = ‘571’  
0200 IF #KAARRAY-CNT EQ 0  
0210 MOVE 1 TO #KAARRAY-CNT  
0220 MOVE CF-REC1-SPECIAL-CODE TO #SPECIAL-CODE (1)  
0230 MOVE 1 TO #TYPE-COUNT (1)  
0240 ELSE  
0250 FOR #I = 1 TO #KAARRAY-CNT STEP 1  
0260 DECIDE FOR FIRST CONDITION  
0270 WHEN CF-REC1-SPECIAL-CODE EQ #SPECIAL-CODE (#I)  
0280 ADD 1 TO #TYPE-COUNT (#I)  
0290 ESCAPE BOTTOM  
0300 WHEN #I = #KAARRAY-CNT  
0310 ADD 1 TO #KAARRAY-CNT  
0320 MOVE CF-REC1-SPECIAL-CODE TO #SPECIAL-CODE (#KAARRAY-CNT)  
0330 MOVE 1 TO #TYPE-COUNT (#KAARRAY-CNT)  
0340 ESCAPE BOTTOM  
0350 WHEN NONE  
0360 IGNORE  
0370 END-DECIDE  
0380 END-FOR  
0390 END-IF  
0400 \*  
0410 IF CF-CASE-TYPE NE ‘571’  
0420 ESCAPE BOTTOM  
0430 END-IF  
0440 \*  
0450 IF CF-REC1-CASE-STATUS \< ‘90’  
0460 DISPLAY  
0470 ‘STATUS DESC’ CF-REC1-STATUS-DESC 4X  
0480 ‘CASE TYPE’ CF-CASE-TYPE 4X  
0490 ‘CASE STATUS’ CF-REC1-CASE-STATUS 4X  
0500 END-IF  
0510 \*  
0520 AT BREAK OF CF-REC1-CASE-STATUS  
0530 SKIP 1  
0540 END-BREAK  
0550 \*  
0560 AT BREAK OF CF-REC1-CASE-STATUS  
0570 WRITE COUNT (CF-REC1-CASE-STATUS) ‘RECORDS FOUND’  
0580 ‘IN CASE STATUS’ OLD(CF-REC1-CASE-STATUS) /  
0590 END-BREAK  
0600 \*  
0610 END-READ  
0620 \*  
0630 FOR #I = 1 TO #KAARRAY-CNT STEP 1  
0640 WRITE #I  
0650 ‘SPECIAL CODE:’ #SPECIAL-CODE (#I) 7X  
0660 ‘COUNT:’ #TYPE-COUNT (#I)  
0670 END-FOR  
0680 END

Basically I dont know what is really going on between line 0220 and 0390. Please shed some light on this program for me Thanx!

---

<div class="post-metadata">

**Author:** ![Ralph\_Zbrog](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/ralph_zbrog/32/78_2.png) [@Ralph\_Zbrog](https://techcommunity.softwareag.com/u/Ralph_Zbrog)\
**Post date:** [December 12, 2006, 10:02am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/2 "2006-12-12T10:02:10Z")

</div>

As each record is read, the value of CF-REC1-SPECIAL-CODE is interrogated. If the value exists in an internal table (#SPECIAL-CODE), the associated count (#TYPE-COUNT) is incremented. Otherwise, the value is added as the next entry in the table, with a count of 1.

The purpose of the code segment is to count the number of occurrences of the values in CF-REC1-SPECIAL-CODE.

ps I presume that the code was mistakenly left-justified as it was posted here, but if if the original has the same format, I suggest that you execute the STRUCT command within the program editor to make the code easier to read.

---

<div class="post-metadata">

**Author:** ![Steve\_Robinson](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/steve_robinson/32/107_2.png) [@Steve\_Robinson](https://techcommunity.softwareag.com/u/Steve_Robinson)\
**Post date:** [December 12, 2006, 6:50pm UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/3 "2006-12-12T18:50:03Z")

</div>

> [@Ralph Zbrog](#):
>
> ps I presume that the code was mistakenly left-justified as it was posted here, but if if the original has the same format, I suggest that you execute the STRUCT command within the program editor to make the code easier to read.

Ralph’s explanation is absolutely correct. I would like to add to his comment about making the code easier to read.

As evident from your question, Natural, like most programming languages, is not really self documenting. If the potential exists for other newbies in your organization to be faced with learning this program, a few comments would help enormously. For example:

0190 READ (200) NLM-CASE-FILE BY CF-CASE-SUPER-DESC-10 = ‘571’  
0195 \*\* following if is to place first entry in table with count of one  
0200 IF #KAARRAY-CNT EQ 0  
0210 MOVE 1 TO #KAARRAY-CNT  
0220 MOVE CF-REC1-SPECIAL-CODE TO #SPECIAL-CODE (1)  
0230 MOVE 1 TO #TYPE-COUNT (1)  
0235 \*\* end of first entry code, following code either adds one to the  
0236 \*\* count for an existing table entry, or creates a new table entry  
0240 ELSE  
0250 FOR #I = 1 TO #KAARRAY-CNT STEP 1  
0260 DECIDE FOR FIRST CONDITION  
0270 WHEN CF-REC1-SPECIAL-CODE EQ #SPECIAL-CODE (#I)  
0275 \*\* add one to count for existing entry then exit FOR loop  
0280 ADD 1 TO #TYPE-COUNT (#I)  
0290 ESCAPE BOTTOM  
0300 WHEN #I = #KAARRAY-CNT  
0305 \*\* value for cf-rec1-special-code does not yet exist in table  
0306 \*\* create new entry with count of one  
0310 ADD 1 TO #KAARRAY-CNT  
0320 MOVE CF-REC1-SPECIAL-CODE TO #SPECIAL-CODE (#KAARRAY-CNT)  
0330 MOVE 1 TO #TYPE-COUNT (#KAARRAY-CNT)  
0340 ESCAPE BOTTOM /\* not necessary, potentially confusing  
0350 WHEN NONE  
0360 IGNORE  
0370 END-DECIDE  
0380 END-FOR  
0390 END-IF

Having commented about readability, the following may seem a bit contrary, however, I think it would be worth considering:

at start of data  
MOVE 1 TO #KAARRAY-CNT  
MOVE CF-REC1-SPECIAL-CODE TO #SPECIAL-CODE (1)  
MOVE 1 TO #TYPE-COUNT (1)  
end-start  
\*  
at end of data  
subtract 1 from #TYPE-COUNT (1)  
end-enddata

Without the IF…ELSE, the first code will be “double counted”; once by the at start of data clause, and once by the “table loop”. The at end of data compensates for that. the need to comment the at end of data action, is, in my view, more than compensated for by the elimination of IF…ELSE; but that is clearly very subjective.

So, KJ, if you have the authority to do so, you might want to help out those who come later, by adding a few comments.

steve

---

<div class="post-metadata">

**Author:** ![Guest](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/guest/32/75_2.png) [@Guest](https://techcommunity.softwareag.com/u/Guest)\
**Post date:** [December 12, 2006, 11:57pm UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/4 "2006-12-12T23:57:40Z")

</div>

Thanks a bunch. Like I said I have been thrown into this and have never even seen Natural before. I’m a ColdFusion programmer and my work took me out of that and decided they want me to learn Natural. Thanks for the explanations. I’m sure I’ll have more questions.

---

<div class="post-metadata">

**Author:** ![Guest](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/guest/32/75_2.png) [@Guest](https://techcommunity.softwareag.com/u/Guest)\
**Post date:** [December 13, 2006, 2:27am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/5 "2006-12-13T02:27:28Z")

</div>

OK 1 other quick question. Could you give me a definition of #KAARRAY-CNT and describe how it works.

---

<div class="post-metadata">

**Author:** ![Ralph\_Zbrog](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/ralph_zbrog/32/78_2.png) [@Ralph\_Zbrog](https://techcommunity.softwareag.com/u/Ralph_Zbrog)\
**Post date:** [December 13, 2006, 2:54am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/6 "2006-12-13T02:54:14Z")

</div>

It’s an elementary field defined by the programmer. Its name has no significance. It is used as an index into an internal array, so, in Natural, it should be defined as a 4-byte integer.

---

<div class="post-metadata">

**Author:** ![Steve\_Robinson](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/steve_robinson/32/107_2.png) [@Steve\_Robinson](https://techcommunity.softwareag.com/u/Steve_Robinson)\
**Post date:** [December 13, 2006, 4:27am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/7 "2006-12-13T04:27:47Z")

</div>

> [@kjharley](#):
>
> Thanks a bunch. Like I said I have been thrown into this and have never even seen Natural before. I’m a ColdFusion programmer and my work took me out of that and decided they want me to learn Natural. Thanks for the explanations. I’m sure I’ll have more questions.

KJ, earlier today I had occasion to write a response to someone that applies equally to you. Learning Natural on your own should not be an option. Management needs to know that unless they intend to dedicate a mentor to you, your knowledge of Natural will likely not meet their expectations.

steve

---

<div class="post-metadata">

**Author:** ![Guest](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/guest/32/75_2.png) [@Guest](https://techcommunity.softwareag.com/u/Guest)\
**Post date:** [December 13, 2006, 5:03am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/8 "2006-12-13T05:03:27Z")

</div>

Thanx Steve, yea I’m not to confident right now and my supervisors think I should know this as of yesterday and I’m struggling very bad. I’m dealing with a supervisor who looks at my code and just tells me its wrong and then walks away. I’m actually trying to get out of the unit I’ve been put into so I can get back to ColdFusion buts its a wait and see deal right now. Until then I need to try and get through as best as possible. You’ve definately validated evrything that I have said already.

---

<div class="post-metadata">

**Author:** ![Guest](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/guest/32/75_2.png) [@Guest](https://techcommunity.softwareag.com/u/Guest)\
**Post date:** [December 13, 2006, 6:37am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/9 "2006-12-13T06:37:46Z")

</div>

OK last question on this topic–my display is as such:

```
  535 RECORDS FOUND IN CASE STATUS 11       
                                            
    3 RECORDS FOUND IN CASE STATUS 20       
                                            
   15 RECORDS FOUND IN CASE STATUS 21       
                                            
 1167 RECORDS FOUND IN CASE STATUS 35       
                                            
    1 RECORDS FOUND IN CASE STATUS 4Z       
                                            
   15 RECORDS FOUND IN CASE STATUS 60       
                                            
   16 RECORDS FOUND IN CASE STATUS 64       
                                            
 3033 RECORDS FOUND IN CASE STATUS 80       
                                            
    1 RECORDS FOUND IN CASE STATUS 90       
                                            
  1 SPECIAL CODE: 7712 COUNT: 753  
  2 SPECIAL CODE: 7002 COUNT: 115  
  3 SPECIAL CODE: 7702 COUNT: 2594                                         
  4 SPECIAL CODE: 7004 COUNT: 28 
  5 SPECIAL CODE: 7708 COUNT: 424 
  6 SPECIAL CODE: 7703 COUNT: 184 
  7 SPECIAL CODE: 7701 COUNT: 8 
  8 SPECIAL CODE: 7000 COUNT: 168 
  9 SPECIAL CODE: 7710 COUNT: 57 
  10 SPECIAL CODE: LTFT COUNT: 38 
  11 SPECIAL CODE: 7003 COUNT: 5 
  12 SPECIAL CODE: 7714 COUNT: 244 
  13 SPECIAL CODE: LTFU COUNT: 5 
  14 SPECIAL CODE: 7715 COUNT: 64 
  15 SPECIAL CODE: 7713 COUNT: 109 
  16 SPECIAL CODE: 7001 COUNT: 3 
  17 SPECIAL CODE: 7707 COUNT: 3 

```

The display (lines 600-620) code has been commented out for this and escape bottom was inserted also line 580 was changed to \> 80. This is close to what I want but I need it to also show like:  
535 RECORDS FOUND IN CASE STATUS 11  
1 SPECIAL CODE: 7712 COUNT: 200  
2 SPECIAL CODE: 7002 COUNT: 200  
3 SPECIAL CODE: 7702 COUNT: 135  
3 RECORDS FOUND IN CASE STATUS 20  
1 SPECIAL CODE: 7712 COUNT: 2  
2 SPECIAL CODE: 7002 COUNT: 1  
etc…etc. I’m not sure how to get this to work. Any help would be greatly appreciated as to get the super off my case for today. Thanks.

---

<div class="post-metadata">

**Author:** ![Ralph\_Zbrog](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/ralph_zbrog/32/78_2.png) [@Ralph\_Zbrog](https://techcommunity.softwareag.com/u/Ralph_Zbrog)\
**Post date:** [December 13, 2006, 7:03am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/10 "2006-12-13T07:03:02Z")

</div>

You write the Status field (CF-REC1-CASE-STATUS) when its value changes (AT BREAK). You write the Code values after all the data is read (following the END-READ).

Write the contents of the table immediately after writing the Status field. Then clear the Code table for the next Status value.

```auto
  AT BREAK OF CF-REC1-CASE-STATUS 
     WRITE COUNT (CF-REC1-CASE-STATUS) 'RECORDS FOUND' 
      'IN CASE STATUS' OLD(CF-REC1-CASE-STATUS) / 
     /* 
     FOR #I = 1 TO #KAARRAY-CNT STEP 1 
       WRITE #I 
         'SPECIAL CODE:' #SPECIAL-CODE (#I) 7X 
         'COUNT:' #TYPE-COUNT (#I) 
     END-FOR 
     RESET #KAARRAY (*) /* Clear the table 
           #KAARRAY-CNT
  END-BREAK 
* 
END-READ 
END
```

---

<div class="post-metadata">

**Author:** ![Guest](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/guest/32/75_2.png) [@Guest](https://techcommunity.softwareag.com/u/Guest)\
**Post date:** [December 13, 2006, 7:33am UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/11 "2006-12-13T07:33:05Z")

</div>

Thanks I was missing the reset table portion. I am getting a small weird result in one of the cases it says there are only 3 but I’m getting a count of 5. Any idea what would be causing this?

---

<div class="post-metadata">

**Author:** ![Steve\_Robinson](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/steve_robinson/32/107_2.png) [@Steve\_Robinson](https://techcommunity.softwareag.com/u/Steve_Robinson)\
**Post date:** [December 13, 2006, 6:02pm UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/12 "2006-12-13T18:02:15Z")

</div>

Hi KJ;

What is the structure of the super descriptor? That is, what fields (and what positions of these fields) comprise the super?

Since you are reading by the super, it may not be straightforward to use the AT BREAK for status.

steve

---

<div class="post-metadata">

**Author:** ![Guest](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/guest/32/75_2.png) [@Guest](https://techcommunity.softwareag.com/u/Guest)\
**Post date:** [December 13, 2006, 11:37pm UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/13 "2006-12-13T23:37:01Z")

</div>

The fields are CF-CASE-TYPE 1-3, CF-REC1-CASE-STATUS 1-2 and CF-FILE-TYPE-AND-NUMBER 1-17.

---

<div class="post-metadata">

**Author:** ![thespin](https://avatars.discourse-cdn.com/v4/letter/t/8c91f0/32.png) [@thespin](https://techcommunity.softwareag.com/u/thespin)\
**Post date:** [January 2, 2007, 8:49pm UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/14 "2007-01-02T20:49:46Z")

</div>

> [@kjharley](#):
>
> Thanx Steve, yea I’m not to confident right now and my supervisors think I should know this as of yesterday and I’m struggling very bad. I’m dealing with a supervisor who looks at my code and just tells me its wrong and then walks away. I’m actually trying to get out of the unit I’ve been put into so I can get back to ColdFusion buts its a wait and see deal right now. Until then I need to try and get through as best as possible.

I don’t mean to scare you, kjharley, but have you considered the possibility that you are being set up to be fired i.e. your org would like to get rid of you ? This is the method used in many companies … more probable if a few people have been let go after being assigned to the unit you are in now … which has a hitman for a supervisor …

---

<div class="post-metadata">

**Author:** ![Guest](https://sea1.discourse-cdn.com/techcommunity/user_avatar/techcommunity.softwareag.com/guest/32/75_2.png) [@Guest](https://techcommunity.softwareag.com/u/Guest)\
**Post date:** [January 2, 2007, 11:43pm UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/15 "2007-01-02T23:43:02Z")

</div>

Oh yea, been down that road. The only plus side is that I’m a unioned employee so in all actuality I would have to quit. I kind of expected that about a week into this. The union is aware of whats going on so we’ll see. I’ve applied for a programming job in another division that is suited more to my qualifications.

---

<div class="post-metadata">

**Author:** ![system](https://global.discourse-cdn.com/techcommunity/original/3X/c/d/cd19967bb605d28a72d77eb83a1cae22f3df2eb8.svg) [@system](https://techcommunity.softwareag.com/u/system)\
**Post date:** [April 2, 2021, 2:40pm UTC](https://techcommunity.softwareag.com/t/having-problem-understanding-an-application/61790/16 "2021-04-02T14:40:59Z")

</div>


