On 28/04/2009, at 6:52 AM, Steve Moland wrote:
I orignally posted an issue that a program would not convert to V6R1
from an
earlier release even though all "creation" data was there.
I read the earlier stuff but didn't bother much with it. Looking back
at what you wrote I note some inconsistencies:
1) You showed the module being compiled on 430 with a target of 230
2) You showed the CRTCMOD command with TGTRLS(V3R2M0)
3) You showed the CRTPGM command with TGTRLS(V4R2M0)
Do you spot the anomaly?
I've came across this code below which is some where down in the
bowels of
it all. I know what it is doing, but I'm not comfortable that I really
understand the "how", and I see a reference to QUSRTOOL and MI
Instruction.
The qusrtool/qattsysc(opusapi) is a reference to an include that no
longer exists. I don't expect this to be the cause of your conversion
issue because that include simply declares prototypes and structures
for the various User Space APIs. However, to successfully compile on a
recent release you will need to alter the source to refer to the
current includes in QSYSINC/H. (I don't recall when the System C
includes were removed from QUSRTOOL but they were present in 310 and
gone by 440.)
miptrnam.h still exists and is fairly innocuous. It's used by the code
to access the Compare Pointer Type MI instruction. The code appears to
presume that if it got a space pointer then the caller supplied a user
space name or an empty string otherwise it must be junk. Seems an odd
way of doing this. However, that doesn't appear to be the cause of the
conversion error either.
The person who wrote this had a reasonable grip on the 400 in 1993
and a
huge knowledge years later. He hated doing a "hack" but would do so
if need
be. Later on through networking he obtained lots more knowledge of
the 400.
Is this a hack and is it likely to be something that V6R1 under
level 40
would not approve off?
Not really a hack but can be modernised and simplified. You could
easily remove the MI references and change to use the current QSYSINC
includes then recompile.
BTW, the cross platform stuff for PC_DOS is not longer supported so
it could
be removed if somehow it might be hanging around to confuse V6R1.
The code uses the C pre-compiler to exclude or include the appropriate
code. As long as PC_DOS is not defined during the compile then the
compiler will not include any of the PC-specific code. It won't be in
the compiled object so can't cause a problem. You can leave it or
trash it as you wish.
Regards,
Simon Coulter.
--------------------------------------------------------------------
FlyByNight Software OS/400, i5/OS Technical Specialists
http://www.flybynight.com.au/
Phone: +61 2 6657 8251 Mobile: +61 0411 091 400 /"\
Fax: +61 2 6657 8251 \ /
X
ASCII Ribbon campaign against HTML E-Mail / \
--------------------------------------------------------------------
As an Amazon Associate we earn from qualifying purchases.