Pointer Based Basing Pointers and Debug
Archived from comp.sys.ibm.as400.misc
All rights reside with original authors, etc.
Message-ID: <43C84A3C.38DF558@ca.ibm.com>
Date: Fri, 13 Jan 2006 19:47:56 -0500
From: Barbara Morris 
X-Mailer: Mozilla 4.8 [en] (Windows NT 5.0; U)
X-Accept-Language: en
MIME-Version: 1.0
Newsgroups: comp.sys.ibm.as400.misc
Subject: Re: When the based variable's basing pointer is pointer based...
Chris Pando wrote:
> 
> When the based variable's basing pointer is pointer based
> you can't use debug to display it.
> 
That's true when debugging RPG.  At least, you can't display the
variable directly.
But for RPG and I believe COBOL, the debugger supports an a->b->c syntax
for following multiply-based pointers.  "A" is the top level pointer, B
is the pointer based on A, and C is the variable based on B.
 d recordDS        ds                  Based(ds@)
 d  parent@                        *
 d  objLen                       10i 0
 d  objDat                       10i 0
 d  objSiz                       10i 0
 d  objVar                        1a
 d ds@             s               *   Based(ds@@)
===>  eval ds@@->ds@->objLen
You can go more levels than 3, and you can modify variables this way:
===> eval ds@@->ds@->parent@->objDat = 13
To get the debug expression, work from right to left starting with the
variable you want to display:
   objLen
Now add the basing pointer for objLen:
   ds@->objLen
Now add the basing pointer for ds@:
   ds@@->ds@->objLen
The expression is ready when you reach a pointer that is not based (ds@@).
 ===> eval  ds@@->ds@->objLen
  
 
 
 BrilligWare/ chris@pando.org / revised February 2008