Parameters and Arrays


Having some problems converting some code to 4.1.3 compatibility.

What I have is a Subprogram that was coded on 3.1.5 and has subsequently never been upgraded - but now things are to change.

The subprogram has 2 dimensional array parameter

1 #A-STD-REQUIREMENTS                
  2 #N-STD-REQ-DATE        (N8/40,20)
  2 #N-STD-RCV-DATE        (N8/40,20)

and the calling program passes the following


Now how do I get the latter compliant with 4.1.3 - I would like to know how the 1 dimensional was mapped to the 2 dimensional in version 3.1.5
(Oldest version we have in an environment is 3.1.6 - but this version produces runtime errors when passing 1 dimensional to 2 dimensional)

What >should< the code be doing? Does the calling program have enough occurrences (800) to map to the 2 dimensional array? Or is it expecting to pass one vector (n,) or (,m) where n is 1 thru 40 or m is 1 thru 20?

Making the Natural 4 program recreate incorrect code seem unproductive to me.:?

Not quite sure what the code has to do - but the subprogram looks through all occurences (n,m) and processes the data. Why someone coded the calling program to only pass through a 1 dimensional I don’t know (It’s been coded that way in two programs) - No one has ever complained about that program which means it must have been doing whatever it is was supposed to do correctly. The calling program has the fields defined as (1:20).
All I have to do is just make sure it compiles in a 4.1.3 environment.


Not even remotely true. First, the source and object codes may be out of synch. In other words, it may be that the source codes show a one dimensional array and a two dimensional array, but the object codes may be either both one-dimensional or both two dimensional. Second, are you certain the subprogram is ever used?

Very suspicious. The earliest Version I have access to is also 3.1.6, and, like your version, this does not work. Take a look at your definitions. Are you sure the calling fields which are 1:20 are not contained within a Group that is (1:40)? If not, there is no way the subprogram could “intelligently” be processing 800 “cells” if there are only 20 cells in the sender?

Calling program
SAVED ON … 2003-06-01 08:50:46
CATALOGED ON 2003-06-01 08:50:46

SAVED ON … 2002-09-13 08:58:41
CATALOGED ON 2002-09-13 08:58:41

The object and source are in sync for both

  2  #A-BRANCH-RECD-IND    (A01/20)    /* MAP MJ7034A                   
  2  #A-STD-REQUIREMENT    (A30/20)                                     
  2  #N-STD-REQ-DATE       (N8/20)                          /* CWY - Y2K
  2  #N-STD-RCV-DATE       (N8/20)                          /* CWY - Y2K

The subprogram does get used by other programs (that have the definitions correct), but I’m not 100% sure though if the subprogram ever gets called by the faulty program though (don’t have access to that part of the system).

Well that pretty well says it all. The Subprogram is clearly correct since every where else it is properly called with two dimensional arrays.

Hence, the program has not, at least since 3.1.5, ever called the subprogram. Just in case it does want to call the subprogram some day, it would be a good idea to fix the CALLNAT. That would involve finding out the nature of the data that should be passed to the Subprogram (what is the second dimension?).

The comment that it is not part of the system you are looking at, or not in your purview, does not “fly”. If the two objects interact, you MUST have access to both.