× 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: "extract" command enhancement (subfiles and BIFs)
  • From: "James W. Kilgore" <qappdsn@xxxxxxx>
  • Date: Wed, 22 Sep 1999 09:27:34 -0700
  • Organization: Progressive Data Systems, Inc.

David, et al

"position to" in our shop is performed by a binary halving of the subfile and
changing the top record number.  We also set an indicator for positioning the
cursor on the record for a match.

I've included a code snippet, hopefully it's self explanatory.

XGTOP# = the subfile beginning record number
XGBTM# = the subfile last record number
XGSFL# = the subfile current record number
XGPSN$ = the requested "position to"
XGKEY  = the subfile value (index ordered)
@XGGET = a subroutine that does a chain to the subfile by record number (and
other stuff not related to "position to")

 FMT *  ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
...+...
0043.00      C*
------------------------------------------------------------------
0044.00      C           @XGSET    BEGSR
0045.00      C*
0046.00      C           *LIKE     DEFN XGTOP#    BHTOP#
0047.00      C           *LIKE     DEFN XGBTM#    BHBTM#
0048.00      C           *LIKE     DEFN XGSFL#    BHSPAN
0049.00      C                     Z-ADD1         BHTOP#           Set SFL Top
0050.00      C* At this point the search arguement must be within the subfile
0051.00      C*    range of values, so perform binary halving to locate entry.
0052.00      C                     Z-ADDXGBTM#    BHBTM#           Set SFL 
Bottom

0053.00      C           BHBTM#    SUB  BHTOP#    BHSPAN           Find spread
0054.00      C           BHSPAN    DIV  2         BHSPAN           Split spread
0055.00      C           BHTOP#    ADD  BHSPAN    XGSFL#           Position
cursor
0056.00      C* Find the page which contains the record requested
0057.00      C                     SETOF                     90
0058.00      C           BHSPAN    DOWGEXGPGSZ                     Until page
size
0059.00      C                     EXSR @XGGET                     GET SFL 
RECORD

0060.00      C* IF you happen to hit right on, set the subfile cursor
0061.00      C           XGPSN$    IFEQ XGKEY
0062.00      C                     Z-ADDXGSFL#    XGTOP#
0063.00      C                     LEAVE
0064.00      C                     END
0065.00      C* ELSE Determine which way to look
0066.00      C           XGPSN$    IFLT XGKEY                      Too low
0067.00      C                     Z-ADDXGSFL#    BHBTM#           In top half
0068.00      C                     ELSE
0069.00      C                     Z-ADDXGSFL#    BHTOP#           In bottom 
half

0070.00      C                     END
0071.00      C* Slice the section in half again
0072.00      C           BHBTM#    SUB  BHTOP#    BHSPAN           Find spread
0073.00      C           BHSPAN    DIV  2         BHSPAN           Slit spread
0074.00      C           BHTOP#    ADD  BHSPAN    XGSFL#           Position
cursor
0075.00      C                     ENDDO
0076.00      C* Once the section is located, perform loop to find requested 
entry

0077.00      C           XGPSN$    IFNE XGKEY
0078.00      C* Position file cursor
0079.00      C                     Z-ADDBHTOP#    XGSFL#
0080.00      C                     EXSR @XGGET
0081.00      C* Loop through page
0082.00      C           XGKEY     DOWLTXGPSN$
0083.00      C                     ADD  1         XGSFL#
0084.00      C                     EXSR @XGGET
0085.00      C  N90                ENDDO
0086.00      C   90                SUB  1         XGSFL#
0087.00      C*
0088.00      C                     Z-ADDXGSFL#    XGTOP#
0089.00      C                     END
0090.00      C*
0091.00      C                     ENDSR

 FMT A* .....A*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
...+... 8
0175.00      A*
-----------------------------------------------------------------------*
0176.00      A          R XGWRKSFL                  SFL
0177.00      A                                      TEXT('"Work with" Subfile')
0178.00      A  70                                  SFLNXTCHG
0179.00      A            XGOPT$         1A  B 10  3TEXT('OPTION')
0180.00      A                                      VALUES(' ' '2' '4' '8')
0181.00      A N70                                  DSPATR(CS UL)
0182.00      A  70                                  DSPATR(RI)
0183.00      A            XGGLNO    R        O 10  7DSPATR(HI)
0184.00      A            XGSTAT    R        O 10 15
0185.00      A            XGNAME    R        O 10 19DSPATR(HI)
0186.00      A            XGABBR    R        O 10 52
0187.00      A            XGTYPE    R        O 10 71
0188.00      A            XGRSET    R        O 10 78
0189.00      A*
-----------------------------------------------------------------------*
0190.00      A          R XGWRKCTL                  SFLCTL(XGWRKSFL)
0191.00      A                                      TEXT('"Work with" Control')
0192.00      A                                      SFLSIZ(12) SFLPAG(11)
0193.00      A                                      OVERLAY
0194.00      A N99                                  SFLEND(*MORE)
0195.00      A  98                                  SFLCLR
0196.00      A  97                                  SFLDSPCTL
0197.00      A  96                                  SFLDSP
0198.00      A            XGTOP#         4S 0H      SFLRCDNBR(CURSOR *TOP)
0199.00      A*
0200.00      A                                  4  2'Type options, press ENTER.'
0201.00      A                                      COLOR(BLU)
0202.00      A                                  4 51'Position list to. .:'
0203.00      A            XGPSN$    R     A  B  4 72REFFLD(XGGLNO)
0204.00      A                                      CHECK(RZ ER)
0205.00      A                                      DSPATR(CS UL)
0206.00      A*
0207.00      A                                  5  3'1=Create'
0208.00      A                                      COLOR(BLU)
0209.00      A                                  5 16'2=Edit'
0210.00      A                                      COLOR(BLU)
0211.00      A                                  5 25'4=Delete'
0212.00      A                                      COLOR(BLU)
0213.00      A                                  5 36'8=Display'
0214.00      A                                      COLOR(BLU)
0215.00      A*
0216.00      A                                  7
2'                                  -
0217.00
A                                                                         -
0218.00      A                                                '
0219.00      A                                      DSPATR(HI UL)
0220.00      A                                  8  2'Opt  ACCT#  Sts  Full
description -
0221.00      A                                                      Abbreviated
desc  T-
0222.00      A                                      ype  Reset'
0223.00      A                                      DSPATR(HI UL)
0224.00      A            WSOPT$    R        B  9  3REFFLD(XGOPT$ *SRC)
0225.00      A                                      VALUES(' ' '1' '2' '4' '8')
0226.00      A N74                                  DSPATR(CS UL)
0227.00      A  74                                  DSPATR(RI PC)
0228.00      A            WSGLNO    R        B  9  7REFFLD(XGGLNO)
0229.00      A                                      COMP(GE 0)
0230.00      A N73                                  DSPATR(CS UL)
0231.00      A  73                                  DSPATR(RI PC)


"Kahn, David [JNJFR]" wrote:

> >if you want "Position to:" functionality, you need SFLPAG=SFLSIZ
>
> My standard template, refined over the years, is SFLSIZ>SFLPAG loaded page
> at a time, and it has "position to". You simply clear the subfile and reload
> the first page starting from the positioned to record, enabling roll down if
> this is not also the first record in the file. Roll down is processed by
> locating the new top record and treating this like another position to. It's
> efficient and slick apart from one big hole. The big hole is that any
> pending selections are lost when rolling past the current start of the
> subfile. BRMS incidentally has this same "feature" in its subfiles.
>

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

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 copyright@midrange.com.

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.