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



Chris,

Take a look at GLNOWRK at netshare400. (63.167.147.10) use your telnet client 
and log on as wyatterp.

See if it behaves the way you want.  But this is the portion that handles 
subfile positioning.

XGPSN$ - Position to request string
XGBGN$ - subfile key beginning value
XGLST$ - subfile key last value
XGTOP# - subfile page starting record number
XGBTM# - subfile bottom number (number of records in subfile)
XGSFL# - current subfile record number
XGPGSZ - subfile page size
@XGGET - performs XGSFL# CHAIN to subfile, returns Ind 90/N90
XGKEY  - subfile record key value

Basically what the routine does is perform a halving to determine which page
the requested entry may be located on then loops through the entries on that
page looking for a match or higher key value.

Once that has been determined, field XGTOP# is set and used in the DDS to
position the subfile display.  BTW, we do a DSPATR(PR ND)on the position to
fields if subfile size is LE page size so it's not handled in this routine.

Routine $CF17 (Top) just sets XGTOP# to 1, and $CF18 basically does a
XGTOP# = (XGBTM# - XGPGSZ) + 1.

It's not really RPGLE, it's just plain old RPG/400 run through the CVTSRC.

0035.00 C* -----------------------------------------------------------------*@
0036.00 C     @XGPSN        BEGSR
0037.00 C*
0038.00 C     XGPSN$        CASLE     XGBGN$        $CF17                   Top
0039.00 C     XGPSN$        CASGE     XGLST$        $CF18                   
Bottom
0040.00 C                   CAS                     @XGSET                  
Position to
0041.00 C                   END
0042.00 C*
0043.00 C                   ENDSR
0044.00 C* ------------------------------------------------------------------
0045.00 C     @XGSET        BEGSR
0046.00 C*
0047.00 C     *LIKE         DEFINE    XGTOP#        BHTOP#
0048.00 C     *LIKE         DEFINE    XGBTM#        BHBTM#
0049.00 C     *LIKE         DEFINE    XGSFL#        BHSPAN
0050.00 C                   Z-ADD     *ZERO         BHTOP#
0051.00 C* At this point the search argument must be within the subfile
0052.00 C*    range of values, so perform binary halving to locate entry.
0053.00 C                   Z-ADD     XGBTM#        BHBTM#
0055.00 C     BHBTM#        DIV       2             BHSPAN
0056.00 C     BHTOP#        ADD       BHSPAN        XGSFL#
0057.00 C* Find the page which contains the record requested
0059.00 C     BHSPAN        DOWGE     XGPGSZ
0060.00 C                   EXSR      @XGGET
0061.00 C* IF you happen to hit right on, set the subfile cursor
0062.00 C     XGPSN$        IFEQ      XGKEY
0063.00 C                   Z-ADD     XGSFL#        XGTOP#
0064.00 C                   LEAVE
0065.00 C                   ENDIF
0066.00 C* ELSE Determine which way to look
0067.00 C     XGPSN$        IFLT      XGKEY
0068.00 C                   Z-ADD     XGSFL#        BHBTM#
0069.00 C                   ELSE
0070.00 C                   Z-ADD     XGSFL#        BHTOP#
0071.00 C                   ENDIF
0072.00 C* Slice the section in half again
0073.00 C     BHBTM#        SUB       BHTOP#        BHSPAN
0074.00 C     BHSPAN        DIV       2             BHSPAN
0075.00 C     BHTOP#        ADD       BHSPAN        XGSFL#
0076.00 C                   ENDDO
0077.00 C* Once the section is located, perform loop to find requested entry
0078.00 C     XGPSN$        IFNE      XGKEY
0079.00 C* Position file cursor
0080.00 C                   Z-ADD     BHTOP#        XGSFL#
0081.00 C                   EXSR      @XGGET
0082.00 C* Loop through page
0083.00 C     XGKEY         DOWLT     XGPSN$
0084.00 C                   ADD       1             XGSFL#
0085.00 C                   EXSR      @XGGET
0086.00 C  N90              ENDDO
0087.00 C   90              SUB       1             XGSFL#
0088.00 C*
0089.00 C                   Z-ADD     XGSFL#        XGTOP#
0090.00 C                   ENDIF
0091.00 C*
0092.00 C                   ENDSR
        ****************** End of data ****************************************







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.