× 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.



This is a situation that often occurs in debug when the dealing with variables that are pointer based.

It is something to do with a limit on the number of levels of indirection that the debugger can handle. I’m betting that this is the same issue. I see it a lot when working with OA handlers.

Barbara can probably explain it better.


On Jan 26, 2016, at 12:02 PM, Buck Calabro <kc2hiz@xxxxxxxxx> wrote:

I was slapping together a quick proof of concept for
QIBM_QCA_CHG_COMMAND for my colleagues, and since I didn't want the exit
point program to actually do anything, I used dump(a) to dump the
variables out. I was a little surprised that one of the variables I'm
using displays NOT ADDRESSABLE. Did I miss something in the 7.2 Memo To
Users in how DUMP behaves?

RPGLE:
**free
/copy qrpglesrc,stdhspec

// QIBM_QCA_CHG_COMMAND example

//
http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/apis/xcachg.htm%23HDRCACHGX?lang=en

// ADDEXITPGM EXITPNT(QIBM_QCA_CHG_COMMAND)
// FORMAT(chgc0100)
// PGMNBR(*HIGH)
// PGM(BUCK/CHG_CMD)
// TEXT('Testing for Buck')
// PGMDTA(*JOB 20 'RS BUCK ')

// *ENTRY PLIST

dcl-pi CHG_CMD extproc('CHG_CMD');
chgCmdExitInfo char(65535);
rplCmd char(32000);
rplCmdLen int(10);
end-pi ;

dcl-ds chgc0100 based(chgc0100Ptr) qualified;
exitName char(20);
exitFormat char(8);
cmdName char(10);
cmdLib char(10);
chgAllowed char(1);
prompt char(1);
reserved char(2);
cmdOffset int(10);
cmdLen int(10);
proxyOffset int(10);
proxyCount int(10);
// cmd
// list of proxyCmd
// proxyLib
end-ds;
dcl-s cmd char(32000) based(cmdPtr);
dcl-ds proxy based(proxyPtr) qualified;
cmd char(10);
lib char(10);
end-ds;

dcl-s i int(10);
dcl-s msg char(50);

// point the main DS at the input parm
chgc0100Ptr = %addr(chgCmdExitInfo);

// now look at the incoming command
cmdPtr = chgc0100Ptr + chgc0100.cmdOffset;

if cmd = *blanks;
dsply 'blank command';
else;
i = chgc0100.cmdLen;
if i > %size(msg);
i = %size(msg);
endif;
msg = %subst(cmd: 1: i);
dsply msg;
endif;

// for completeness, set the proxy chain pointer too
proxyPtr = chgc0100Ptr + chgc0100.proxyOffset;

dump(a);

*inlr = *on;

Dump:
CHGCMDEXITINFO CHAR(65535) NOT ADDRESSABLE
CHGC0100 DS
CHGALLOWED CHAR(1) '1'
CMDLEN INT(10) 37
CMDLIB CHAR(10) 'BUCK '
CMDNAME CHAR(10) 'RS '
CMDOFFSET INT(10) 76
EXITFORMAT CHAR(8) 'CHGC0100'
EXITNAME CHAR(20) 'QIBM_QCA_CHG_CO
VALUE IN HEX 'D8C9C2D46DD8C3C
PROMPT CHAR(1) '0'
PROXYCOUNT INT(10) 0
PROXYOFFSET INT(10) 113
RESERVED CHAR(2) ' '
CHGC0100PTR POINTER SPP:D50F8EF50300
CMD CHAR(32000) NOT ADDRESSABLE
CMDPTR POINTER SPP:D50F8EF50300
I INT(10) 37
MSG CHAR(50) 'RS SQLSTM('sele

As you can see, MSG is a substring of CMD. The dump shows the contents
of MSG, so clearly the code was able to access CMD, yet CMD is NOT
ADDRESSABLE. Neither are the input parameters. Strange.

--
--buck

Visit wiki.midrange.com and register for an account. Edit a page that
helps you, and because it's public, you'll help someone else, too!

--
This is the RPG programming on the IBM i (AS/400 and 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.

Please contact support@xxxxxxxxxxxx for any subscription related questions.

Jon Paris

www.partner400.com
www.SystemiDeveloper.com


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
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.