|
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 mailing list archive is Copyright 1997-2025 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.