× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



If you are on V5R3, you may want to try %SUBARR when doing your DUMP.
I am NOT certain if it works with the DUMP instruction, but you never know.
For example:

   dump(%subarr(a:1:nbrElements));

This built-in was provided for just this kind of thing; a dynamic array
where you only want to access a subset of the array for things like SORTA
and XFOOT.

-Bob Cozzi


-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Bramley, Stu
Sent: Friday, November 19, 2004 8:26 AM
To: 'RPG programming on the AS400 / iSeries'
Subject: V5R3 Dynamic Array Dump problem

In OS/400 V5R2, if an RPG program containing a dynamic array is dumped, the
dump contains output similar to the following: 

NAME                  ATTRIBUTES           VALUE                 
                      DS                                         
  ARRAYELEMENT        CHAR(10)             DIM(32767)            
                        (1-32767)          NOT ADDRESSABLE       

In i5/OS V5R3, the dump contains output 

   ARRAYELEMENT        CHAR(10)             DIM(32767)     
                         (1)                NOT ADDRESSABLE
                         (2)                NOT ADDRESSABLE
                         (3)                NOT ADDRESSABLE
                         (4)                NOT ADDRESSABLE
                         (5)                NOT ADDRESSABLE
                         (6)                NOT ADDRESSABLE
                         (7)                NOT ADDRESSABLE
                         (8)                NOT ADDRESSABLE
                         ..(snipped)..                       
  
                                This continues for a number of elements
(variable in different jobs) until 

                        (1195)             NOT ADDRESSABLE   
                        (1196)             NOT ADDRESSABLE   
                        (1197)             NOT ADDRESSABLE   
                        (1198-32767)       NOT ADDRESSABLE   

This can make the size of the dumps very large and time consuming to produce
when the technique has been used.

Moreover, in attempting to address the individual elements of the dynamic
array that have not yet had memory allocated to them, the dump process
causes large number of authority failures (domain violations) to appear in
the security audit journals. 

These authority failures appear against an object of type *QTCPS. 

If a dynamic array has been declared with an arbitrary maximum length of
32767 elements then there can be in the region of 64000 authority failures
in the journal - which can very quickly consume a large amount of disk
space. 

The actual number of failures does not seem to bear an exact mathematical
relationship to the declared size of the array (i.e. it is not double the
size, or double minus the number of elements before the 'block' not
addressable entry) however it seems to be more than coincidence that it is
nearly double the number of array elements. 

If the basing pointer is de-allocated before the dump, the problem still
occurs. 

If the basing pointer is de-allocated with the (N) extender to set it to
null before the dump, the problem does not occur. 

This problem can be re-created with the following test harness (move/amend
the dealloc line to observe the changes in behaviour):

D dynamicArray@   S               *                              
D                 DS                  BASED(dynamicArray@)       
D  arrayElement                 10A   DIM(32767)                 
                                                                 
D nbrElements     S              5i 0 INZ(100)                   
                                                                 
 /FREE                                                           
   dynamicArray@ = %alloc(nbrElements * %size(arrayElement));    
   arrayElement(1) = 'TEST';

   dump(a);
   dealloc(n) dynamicArray@;

   *inlr = *on;                                                  
   return;                                                       
 /END-FREE                                                       

This problem does not occur at V5R2. 

Has anyone else experienced this and know of a workaround? We are planning
to place a call with IBM about this shortly... 

Regards,
Stu

Stuart Bramley 
Senior Technical Developer 
Skandia Life::GroupIT 
Southampton 
t: 023 80 72 64 29 e: stu.bramley@xxxxxxxxxxxxx 
IBM Certified Specialist
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.