× 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: bsearch on partial array elements
  • From: Alan Campin <Alan.Campin@xxxxxxxxxxxxx>
  • Date: Fri, 14 Jan 2000 13:31:20 -0700

Yes, use this all the time nowdays. Just pointer arithmetic. I used to use
occurs to move through a user space but know I just use pointer arithmetic.
For Example ( >> lines are the pointer 
arithmetic). Note pointer arithmetic was added in later releases. V3R2?

     d cFieldUserSpaceName...
     d                 c                   const('FXFLDUSRSP')
     d SpaceSize       s                   like(StdIntSml)    
     d CurrentRecord   s                   like(StdIntSml)    
     d                                       inz(0)            

     * - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     * Field list mapped to user space FXFLDLIST in QTEMP.      
    d ptrFieldList...
    d                 s                   like(StdPtr)          
    d dsFieldList...
    d                 ds                  based(ptrFldList)     
    d  ssFieldId                          like(StdInt)          
    d  ssFieldType                        like(FDFLDTYPE)       
    d  ssFieldLength...
    d                                     like(FDFLDLEN)        
    d  ssFieldDecimalPositions...
    d                                     like(FDFLDDECP)       
    d  ssInDateFormat...
    d                                     like(FDIDATEFMT)      
    d  ssOutDateFormat...
    d                                     like(FDODATEFMT)      

    d ptrFieldUserSpace...

    d                 s                   like(StdPtr)
     * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
     * Get a pointer to the user space.                              
    c                   eval      ehResult = GetPtrToUsrSpc(         
    c
cFieldUserSpaceName:'QTEMP':ptrFieldUserSpace)         
     *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
     * Now read in all fields and build list for lookup.               
    c                   dou       %eof(FXFLDDSC00)                     
    c                   read      FXFLDDSC00                           
    c                   if        not %eof(FXFLDDSC00)                 
    c                   eval      CurrentRecord = CurrentRecord + 1

 >> c                   eval      ptrFieldList = ptrFieldUserSpace +

 >> c                               ((CurrentRecord - 1) *
%size(dsFieldList)) 
    c                   eval      ssFieldId           = FDFIELDID

    c                   eval      ssFieldType         = FDFLDTYPE

    c                   eval      ssFieldLength       = FDFLDLEN

    c                   eval      ssFieldDecPositions = FDFLDDECP

    c                   eval      ssInDateFormat      = FDIDATEFMT

    c                   eval      ssOutDateFormat     = FDODATEFMT

    c                   endif                                          
    c                   enddo                                          

-----Original Message-----
From: Chris Bipes [mailto:rpg@cross-check.com]
Sent: Friday, January 14, 2000 12:38 PM
To: RPG400-L@midrange.com
Subject: RE: bsearch on partial array elements


Is it possible to subtract the ending pointer from the starting pointer to
see the byte count?  I have not tried this and wonder if it is even possible
to use pointer in an expression such as
D P_to_Variable              *   Inz(%addr(Search_String))
D P_to_found                 *
C                eval bytes = P_to_found - P_to_variable

Christopher K. Bipes    Mailto:chrisb@cross-check.com
CrossCheck, Inc.        http://www.cross-check.com
 

-----Original Message-----
From: David.Biggs@bernardmatthews.com
[mailto:David.Biggs@bernardmatthews.com]
Sent: Friday, January 14, 2000 5:55 AM
To: RPG400-L@midrange.com
Subject: Re: bsearch on partial array elements




Thanks Jon and others.
 I knew about the basing pointers but wasn't sure what the C routine would
do
when comparing (in my case) a 30 byte key with a 37 byte element. I've tried
it
for myself and it works just fine.

I have another question though: in RPG LOKUP (or LOOKUP), you can specify a
field that is set to the element number of the search argument if the search
is
successful. The C 'bsearch' returns a pointer to the key value being sought,
not
its ordinal position in the array. This seems a bit stupid as I already know
what I'm looking for, what I want is whereabouts it is. Any way I can get
this
directly ?

Regards,
Dave
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator:
david@midrange.com
+---
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-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 ...


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.