|
Thanks for the help. As for going to RPG world, I don't think the company would spring for a trip from New Zealand to Las Vegas (even though the States was originally home for me), since the company attitude is that RPG will be dead here at some point anyway.... I picked up a fair bit on prototypes from the Sorcerers guide, and tried to pull what I could from the RPG reference, but I definitely don't have as much documentation as I'd like. Simple prototyping of a simple routine was easy - but now I've been working on a modularity concept that starts with basic building blocks and then more complex modules built on top of those, etc. - so leaks are starting to show as the modules become stacked on each other, and I'm questioning some of my basic concepts before I go farther. The information you just sent is very helpful actually, cause it defines some basic 'rules' for me that I can adopt and understand; where program examples (while useful to solve a similar task) sometimes don't give you the underlying 'why'. So you start with an example that's close, bend it to work to what you need, and then assume that everything is fine the way you changed it. Not always the case unless you understand the reasons. Thanks again for the help. I have a lot of re-work to do now, but it's the only way to improve. 'Cheers JPW -----Original Message----- From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Bob Cozzi Sent: Wednesday, 1 March 2006 10:01 To: 'RPG programming on the AS400 / iSeries' Subject: RE: CWCCVTDT continued.... It seems you're just picking up on prototypes and you need to learn more. If I were you, I'd go to RPG World in May (www.rpgworld.com) and learn all about it. To answer you specific question about return value lengths... you want 16-bytes or fewer for return values. RPG and OS/400 do not handle return values very well at all when they exceed that length. Why 64 bytes instead of 32k? Sometimes RPG creates copies of input parameters. If the input is defined as 32k or 64k then it will create a temporary variable of that length, copy your data into it and then use that temp. Even if you only need 10 bytes. This doesn't happen every time, it's a bit tricky as to when/if it will actually happen. I choose 64 bytes for some reason that I don't recall now, but I believe it was based on the returned data's maximum possible length and then rounded up to a 32-byte multiple. Also, for input parameter that never exceed the length of the prototype, CONST _and_ OPTIONS(*VARSIZE) are often problematic and in this case you should probably remove the OPTIONS(*VARSIZE), as follow: >> D QWCCVTDT PR ExtPgm('QWCCVTDT') >> D inFmt 10A CONST >> D inDate 64A CONST >> D outFmt 10A CONST >> D outDate 64A OPTIONS(*VARSIZE) >> D api_error LikeDS(QUSEC) >> D OPTIONS(*VARSIZE) This allows you to still pass in a shorter value, but pads it to the declared length of the prototype. If I had 32k declared, you'd have a 32k temp variable being passed instead of a 10 position or 64 position one. -Bob Cozzi www.RPGxTools.com RPG xTools - Enjoy programming again. -----Original Message----- From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Jim Wiant Sent: Tuesday, February 28, 2006 2:16 PM To: RPG programming on the AS400 / iSeries Subject: RE: CWCCVTDT continued.... It is just a type and max length verification yes, but then why not always use 32767 or 65535? And does the same apply to return values on the prototype definition? If the PR has 32767 for the return value, does that mean the maximum that the routine could return - not the amount that will be allocated? Sorry for the request of details, but recent conversations has made me want to review all the prototyped modules I've written so far looking for improvements and/or elimination of bad habits I've developed. JPW The bitterness of poor quality remains long after low pricing is forgotten! Cautillo, Leon M. -----Original Message----- From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Bob Cozzi Sent: Wednesday, 1 March 2006 8:53 To: 'RPG programming on the AS400 / iSeries' Subject: RE: CWCCVTDT continued.... The length on the prototype is not a field declaration. It is the limit of the size of the value you can pass to the program/procedure. So 64 or 65535 makes no difference in this prototype in this context. -Bob Cozzi www.RPGxTools.com RPG xTools - Enjoy programming again. -----Original Message----- From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Jim Wiant Sent: Tuesday, February 28, 2006 1:10 PM To: RPG programming on the AS400 / iSeries Subject: RE: CWCCVTDT continued.... >>If you go to the downloads page on rpgiv.com you can download the API prototypes >>for several APIs. >>Here's the prototype for QWCCVTDT. >> D QWCCVTDT PR ExtPgm('QWCCVTDT') >> D inFmt 10A Const OPTIONS(*VARSIZE) >> D inDate 64A Const OPTIONS(*VARSIZE) >> D outFmt 10A Const OPTIONS(*VARSIZE) >> D outDate 64A OPTIONS(*VARSIZE) >> D api_error LikeDS(QUSEC) >> D OPTIONS(*VARSIZE) I'm curious Bob. I just checked IBM's website and it still looks like this for the input variable to the API: Input Variable Format This table shows the format used for the input variable parameter. Input Format Input Variable *CURRENT Parameter is ignored. *DTS System time-stamp. The first 8 characters are used. *YYMD, *MDYY, *DMYY, *LONGJUL The first 17 characters are used. See 17-Byte Character Date and Time Value Structure. All other character formats The first 16 characters are used. See 16-Byte Character Date and Time Value Structure. Why define 64 with a variable size? Wouldn't 17 be enough? Thanks JPW This message has been sent from Foodstuffs (Auckland) Limited ("Foodstuffs"). The information contained in this message and or attachments is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any system and destroy any copies. The views and opinions expressed in this message may be those of the individual and not necessarily those of Foodstuffs, and are not given or endorsed by it. Please note that this communication does not designate an information system for the purposes of the Electronic Transactions Act 2002.
As an Amazon Associate we earn from qualifying purchases.
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.