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


  • Subject: Re: asdbget - precision
  • From: Sean Porterfield <sporter@xxxxxxxxxxxx>
  • Date: Fri, 17 Mar 2000 11:27:13 -0500
  • Organization: Best Distributing Co.

Working correctly...

Sorry about my last message saying it wasn't working.  I looked at an old XML 
file
instead of the new one I just got.  There are no longer any negative precision 
in that
particular file.  I'll do some more testing today, though.

Thanks!

"Jason M. Felice" wrote:

> On Thu, Mar 16, 2000 at 06:03:46PM -0500, Sean Porterfield wrote:
> > Sean Porterfield wrote:
> >
> > > Response at end...
> > >
> > > "Jason M. Felice" wrote:
> > >
> > > > On Wed, Mar 15, 2000 at 05:20:28PM -0500, Sean Porterfield wrote:
> > > > > Toward the end of this function, what is the purpose of "v = -v;" ?
> > > > > It's what is causing my precision to show as negative on some fields 
>in
> > > > > my XML (I haven't yet found a pattern or reason).  Before I just 
>comment
> > > > > it out, I wanted to see if it had a purpose.  It may well be 
>indicitive
> > > > > of a hidden bug somewhere, of a misunderstanding due to OS400 version
> > > > > differences.
> > > > >
> > > > > (I'm on V4R2)
> > > > >
> > > > > /* Convert a signed decimal field to a C `int' */
> > > > > static int
> > > > > signed2int (buf, len)
> > > > >         Byte *buf;
> > > > >         int len;
> > > > > {
> > > > >   int v = 0;
> > > > >   while (len)
> > > > >     {
> > > > >       v *= 10;
> > > > >       v += buf[0] & 0x0f;
> > > > >       len--;
> > > > >       buf++;
> > > > >     }
> > > > >   if ((buf[0] & 0xf0) == 0xd0)
> > > > >     v = -v;
> > > > >   return v;
> > > > > }
> > > >
> > > > This converts an AS/400 signed field to an integer (we should probably 
>be
> > > > converting to a long, but that doesn't matter on 32-bit architectures). 
> This
> > > > is IBM's zoned-decimal format, which stores one digit per byte and 
>zone-shifts
> > > > the last digit if the field is negative.
> > > >
> > > > Basically, ebcdic digits zero through nine are X'F0' - X'F9', but the 
>last
> > > > digit is converted to X'D0' - X'D9' for a negative number.
> > > >
> > > > However, looking over it for the fifth time, the function is in error.  
>Try
> > > > this instead:
> > > >
> > > > /* Convert a signed decimal field to a C `int' */
> > > > static int
> > > > signed2int (buf, len)
> > > >         Byte *buf;
> > > >         int len;
> > > > {
> > > >   int v = 0;
> > > >   while (len)
> > > >     {
> > > >       v *= 10;
> > > >       v += buf[0] & 0x0f;
> > > >       len--;
> > > >       if (--len == 0 && (buf[0] & 0xf0) == 0xd0)
> > > >         v = -v;
> > > >       buf++;
> > > >     }
> > > >   return v;
> > > > }
> > > >
> > > > It seems we were checking the zone of a random garbage character (the 
>first
> > > > character after the end of the field).  I've just fixed this in CVS.
> > > >
> > > > -Jay 'Eraserhead' Felice
> > > >
> > >
> > > CVS code doesn't have the len--; line in it.  When I keyed exactly as you 
>have it
> > > here, I got a seg fault/core dump when it was "RETR QTEMP/FIELDS"
> > >
> > > Using the code from CVS does not cause the crash.  I haven't checked for 
>any other
> > > problems yet.
> >
> > Well, it doesn't crash that way, but it does still show negative numbers on 
>my
> > precision in some fields.
> >
> > argh!
>
> Is the precision correct other than the sign?  I would suspect that it's
> not, most likely because the field is in a different place from where it 
>should
> be according to the hard-coded position in asdbget.
>

+---
| This is the LINUX5250 Mailing List!
| To submit a new message, send your mail to LINUX5250@midrange.com.
| To subscribe to this list send email to LINUX5250-SUB@midrange.com.
| To unsubscribe from this list send email to LINUX5250-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...

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.