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



Hi Vern and Robert,

As you said Vern "sometimes a piercing glance at the obvious is what's needed."

My piercing glance doesn't seem to be too sharp today.

Here's the pertinent code...

D CEEISEC PR EXTProc('CEEISEC') OPDESC
D yeartocheck 10U 0
D mthtocheck 10U 0
D daytocheck 10U 0
D hourtocheck 10U 0
D minutetocheck 10U 0
D secondtocheck 10U 0
D msecondtochk 10U 0
D rtnseconds 8F
D errorcode like(fc)

D yeartocheck S 10U 0
D mthtocheck S 10U 0
D daytocheck S 10U 0
D hourtocheck S 10U 0
D minutetocheck S 10U 0
D secondtocheck S 10U 0
D msecondtocheck S 10U 0
D rtnseconds S 8F

D fc DS
D fc_Severity 5I 0
D fc_msgNbr 5I 0
D fc_msgNbrHex 2A overlay(fc_msgNbr:1)
D fc_bits 1
D fc_Facility 3
D fc_I_S_Info 10I 0

//------------------------------------------------
// Convert Hex value to Character value (cvtch)
//
//------------------------------------------------

D cvtHexToChar PR ExtProc('cvtch')
D charvalue 32767A options(*varsize)
D hexvalue 65534A options(*varsize) const
D charlen 10I 0 value

D charvalue S 4A

/free

yeartocheck = 2011;
mthtocheck = 9;
daytocheck = 21;
hourtocheck = 59;
minutetocheck = 59;
secondtocheck = 59;
msecondtocheck = 1;
clear rtnseconds;

clear fc;

//----------------------------
// Convert the date to seconds
//----------------------------

callP(E) CEEISEC(yeartocheck:mthtocheck:daytocheck:hourtocheck:
minutetocheck:secondtocheck:msecondtocheck:
rtnseconds:fc);

if (fc_msgNbr <> 0);
callP(E) cvtHexToChar(charvalue:fc_msgNbrHex:%len(fc_msgNbrHex));
rtnErrMsgID = 'CPF9897';
rtnErrMsgFile = 'QCPFMSG';
rtnErrMsgLib = '*LIBL';
rtnErrData = 'Invalid date supplied - ' + dateToCheck + '.';
rtnErrDtaLen = %len(%trimr(rtnErrData));
rc = 1;
endif;

return rc;

/end-free

The above code throws C2M3001, charvalue is x'00404040', fc_msgNbrHex = x'2510' and I assume %len(fc_msgNbrHex) is 2.




-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Vernon Hamberg
Sent: Friday, September 21, 2012 1:31 PM
To: RPG programming on the IBM i / System i
Subject: Re: Converting an into to hex to char

Hi Gary

You don't convert the number to hex - you convert the hex value of either msgnbr or msgnbrchar to its hex nybbles - so the result is a 4-character string - the first parameter of cvtch, right?

Can you show us your call to cvtch?

The 3rd parameter is the length of the 2nd parameter - so that should have a value of 2. It should be a 10i 0. First parameter is a 4-character variable, 2nd parameter can be the 5i 0 integer or its 2-character overlaid variable.

I know I'm stating the obvious. But sometimes a piercing glance at the obvious is what's needed.

Here's a prototype I have for cvtch - actually converts bytes to nybbles, once might say - these always get me a little turned around!

d convertCharacterToHex...
d pr extproc('cvtch')
d toString 512
d fromString 256
d fromStringLength...
d 10i 0 value

HTH
Vern

On 9/21/2012 2:54 PM, Monnier, Gary wrote:
All,

I've gone a bit brain dead today it seems and I'm hoping someone can help me reignite the ol' synapses.

I have a program using the Convert Integers to Seconds (CEEISEC) API. This API uses the CEE feedback structure to return error information.

D feedback DS
D severity 5I 0
D msgnbr 5I 0
D msgnbrchar 2A overlay(msgnbr:1)
D bits 1
D facility 3
D i_s_info 10I 0

When I force invalid data in debug I have a msgnbr and a facility of CEE returned. This is as expected. Trouble is msgnbr does not relate to any CEExxxx message unless I display msgnbr in hex.

For example when in debug if I supply an invalid hour and press (F11) on variable msgnbr I see 9488 for a value. There is no error message CEE9488 that I can find.

But if I display msgnbr in hex (eval msgnbr:x) I see 2510. Error message CEE2510 (The value for hour is not valid.) does exist and is in fact the error I forced.

Using msgnbr or msgnbrchar with cvtch() throws C2M3001 so I know I have to convert msgnbr to a hex value.

My quandary is how in the world do I convert integer 9488 to hex value x'2510' so I can use cvtch() to convert x'2510' to character value '2510'?

I want to build the CEExxxx message number by concatenating facility and the converted msgnbr.

Thanks,

Gary Monnier

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

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.