* contrib/gtwvg/class.prg
* contrib/gtwvg/paint.prg
* contrib/gtwvg/parthdlr.prg
* contrib/gtwvg/statbar.prg
* contrib/gtwvg/tests/_dyndlgs.prg
* contrib/gtwvg/tests/_modal.prg
* contrib/gtwvg/tests/_tbrowse.prg
* contrib/gtwvg/tests/_utils.prg
* contrib/gtwvg/tests/_wvtcls.prg
* contrib/gtwvg/tests/_xbp.prg
* contrib/gtwvg/tests/demowvg.prg
* contrib/gtwvg/tests/demowvg1.prg
* contrib/gtwvg/tests/demoxbp.prg
* contrib/gtwvg/toolbar.prg
* contrib/gtwvg/wnd.prg
* contrib/hbamf/issues.txt
* contrib/hbamf/readme.txt
* contrib/hbblink/hbblink.ch
* contrib/hbct/ct.ch
* contrib/hbct/ctcom.ch
* contrib/hbct/ctrand.prg
* contrib/hbct/cttime.prg
* contrib/hbct/doc/en/addascii.txt
* contrib/hbct/doc/en/ctmath2.txt
* contrib/hbct/doc/en/ctstr.txt
* contrib/hbct/doc/en/dattime2.txt
* contrib/hbct/doc/en/finan.txt
* contrib/hbct/doc/en/ftoc.txt
* contrib/hbct/doc/en/misc1.txt
* contrib/hbct/doc/en/trig.txt
* contrib/hbct/fcopy.prg
* contrib/hbct/getinfo.prg
* contrib/hbct/getinput.prg
* contrib/hbct/getsecrt.prg
* contrib/hbct/keysave.prg
* contrib/hbct/keysec.prg
* contrib/hbct/keytime.prg
* contrib/hbct/readme.txt
* contrib/hbct/screen3.prg
* contrib/hbct/scrmark.prg
* contrib/hbct/showtime.prg
* contrib/hbct/tempfile.prg
* contrib/hbformat/utils/hbformat.prg
* contrib/hbfship/isdb.prg
* contrib/hbgd/gdimage.prg
* contrib/hbgd/tests/gdtestcl.prg
* contrib/hbgd/tests/test_out.prg
* contrib/hbgd/tests/tostring.prg
* contrib/hbgt/doc/en/hbgt.txt
* contrib/hbgt/tests/test.prg
* contrib/hbhpdf/tests/harupdf.prg
* contrib/hbhttpd/tests/carts.dbf
* contrib/hbhttpd/tests/items.dbf
* contrib/hbhttpd/tests/users.dbf
* contrib/hbmisc/doc/en/dates2.txt
* contrib/hbmisc/fcomma.prg
* contrib/hbmisc/stringp.prg
* contrib/hbmisc/tests/testhbf.prg
* contrib/hbmisc/udpds.prg
* contrib/hbmxml/tests/custom.prg
* contrib/hbmysql/diff-en.txt
* contrib/hbmysql/diff-es.txt
* contrib/hbmysql/tmysql.prg
* contrib/hbnetio/netiomt.prg
* contrib/hbnetio/utils/hbnetio/netiomgm.hb
* contrib/hbnf/adapter.prg
* contrib/hbnf/aredit.prg
* contrib/hbnf/clrsel.prg
* contrib/hbnf/default.prg
* contrib/hbnf/dispmsg.prg
* contrib/hbnf/floptst.prg
* contrib/hbnf/ftint86.ch
* contrib/hbnf/ftmenuto.ch
* contrib/hbnf/lastday.prg
* contrib/hbnf/linked.prg
* contrib/hbnf/menuto.prg
* contrib/hbnf/metaph.prg
* contrib/hbnf/nwsem.prg
* contrib/hbnf/ontick.prg
* contrib/hbnf/pegs.prg
* contrib/hbnf/popadder.prg
* contrib/hbnf/savesets.prg
* contrib/hbnf/sinkey.prg
* contrib/hbnf/tbwhile.prg
* contrib/hbnf/tempfile.prg
* contrib/hbnf/vidcur.prg
* contrib/hbnf/video2.prg
* contrib/hbnf/woy.prg
* contrib/hbodbc/tests/testodbc.prg
* contrib/hbodbc/todbc.prg
* contrib/hbpgsql/postgres.ch
* contrib/hbtip/encoder.prg
* contrib/hbtip/thtml.prg
* contrib/hbtpathy/tests/testtp.prg
* contrib/hbwin/tests/dlg.prg
* contrib/hbwin/tests/olesrv1.prg
* contrib/hbwin/tests/olesrv3.prg
* contrib/hbwin/tests/olesrv4.prg
* contrib/hbwin/tests/oletst4.prg
* contrib/hbwin/tests/testprn.prg
* contrib/hbwin/win_tbmp.prg
* contrib/hbxpp/browdbx.prg
* contrib/hbxpp/runshell.prg
* contrib/hbxpp/tthreadx.prg
* contrib/hbxpp/typefilx.prg
* contrib/hbxpp/xppop.prg
* contrib/rddads/doc/en/adsfuncs.txt
* contrib/rddads/doc/en/readme.txt
* contrib/rddads/tests/datad.prg
* contrib/rddsql/readme.txt
* contrib/xhb/cstruct.prg
* contrib/xhb/dirrec.prg
* contrib/xhb/diskhb.prg
* contrib/xhb/hbcompat.ch
* contrib/xhb/hbcomprs.prg
* contrib/xhb/hterrsys.prg
* contrib/xhb/htjlist.prg
* contrib/xhb/htmutil.prg
* contrib/xhb/stream.prg
* contrib/xhb/tcgi.prg
* contrib/xhb/thtm.prg
* contrib/xhb/ttable.prg
* contrib/xhb/txml.prg
* contrib/xhb/xcstr.prg
* contrib/xhb/xhberr.prg
* contrib/xhb/xhbmemo.prg
* contrib/xhb/xhbtedit.prg
* contrib/xhb/xhbver.prg
* doc/cmpopt.txt
* extras/gfspell/spell.ng
* extras/gfspell/spell.prg
* extras/gfspell/words.dbf
* extras/gtwvw/docs/funclist.txt
* extras/gtwvw/docs/whatsnew.txt
* extras/gtwvw/tests/_wvwmous.prg
* extras/gtwvw/tests/cbtest6.prg
* extras/gtwvw/tests/drawimg.prg
* extras/gtwvw/tests/ebtest7.prg
* extras/gtwvw/tests/inpfocus.prg
* extras/gtwvw/tests/maximize.prg
* extras/gtwvw/tests/prog0.prg
* extras/gtwvw/tests/prog1.prg
* extras/gtwvw/tests/prog2.prg
* extras/gtwvw/tests/wvwtest9.prg
* extras/gtwvw/wvt2wvw.ch
* extras/guestbk/guestbk.prg
* extras/hbdoc/tmplates.prg
* extras/hbvpdf/core.prg
* extras/httpsrv/cgifunc.prg
* extras/httpsrv/cookie.prg
* extras/httpsrv/session.prg
* extras/httpsrv/uhttpd.prg
* extras/rddado/adordd.ch
* extras/rddado/adordd.prg
* include/set.ch
* src/debug/debugger.prg
* src/rdd/dbfuncs.prg
* src/rdd/dbjoin.prg
* src/rdd/dblist.prg
* src/rdd/dbsort.prg
* src/rdd/dbstrux.prg
* src/rdd/dbstruxu.prg
* src/rdd/dbtotal.prg
* src/rdd/dbupdat.prg
* src/rdd/hbsix/sxcompat.prg
* src/rdd/hbsix/sxini.prg
* src/rdd/hbsix/sxtrig.prg
* src/rdd/usrrdd/rdds/arrayrdd.prg
* src/rdd/usrrdd/rdds/logrdd.prg
* src/rdd/usrrdd/rdds/rlcdx.prg
* src/rtl/achoice.prg
* src/rtl/adir.prg
* src/rtl/alert.prg
* src/rtl/altd.prg
* src/rtl/browdb.prg
* src/rtl/dbedit.prg
* src/rtl/devoutp.prg
* src/rtl/dircmd.prg
* src/rtl/hbi18n2.prg
* src/rtl/input.prg
* src/rtl/libname.prg
* src/rtl/listbox.prg
* src/rtl/memvarbl.prg
* src/rtl/radiobhb.prg
* src/rtl/readkey.prg
* src/rtl/readvar.prg
* src/rtl/setfunc.prg
* src/rtl/setta.prg
* src/rtl/tbrowse.prg
* src/rtl/teditor.prg
* src/rtl/text.prg
* src/rtl/tget.prg
* src/rtl/tgetlist.prg
* src/rtl/tobject.prg
* src/rtl/typefile.prg
* src/rtl/valtoexp.prg
* src/rtl/wait.prg
* src/vm/harbinit.prg
* tests/ac_test.prg
* tests/ac_test2.prg
* tests/adirtest.prg
* tests/aliaslck.prg
* tests/bldtest/bldtest.c
* tests/clsnv.prg
* tests/codebl.prg
* tests/debugtst.prg
* tests/devtest.prg
* tests/disptest.prg
* tests/gtcolors.prg
* tests/gtkeys.prg
* tests/gtwin.prg
* tests/gtxfnt.prg
* tests/inkeytst.prg
* tests/linecont.prg
* tests/mathtest.prg
* tests/memvar.prg
* tests/newrdd.prg
* tests/output.prg
* tests/readhrb.prg
* tests/seconds.prg
* tests/set_test.prg
* tests/tb1.prg
* tests/testdyn.prg
* tests/testdyn1.prg
* tests/testhrb.prg
* tests/testhtml.prg
* tests/testidle.prg
* tests/testpre.prg
* tests/testrdd2.prg
* tests/testsha1.prg
* tests/teststr.prg
* tests/ticktime.prg
* tests/transtst.prg
* tests/tstcolor.prg
* tests/tstdbi.prg
* tests/tstmacro.prg
* tests/uc16_gen.prg
* tests/usrrdd/exarr.prg
* tests/usrrdd/exlog.prg
* tests/utf8at.prg
* tests/version.prg
* tests/videotst.prg
* tests/vidtest.prg
* tests/wvtext.prg
* utils/hbmk2/hbmk2.prg
* utils/hbtest/hbtest.prg
* utils/hbtest/rt_class.prg
* utils/hbtest/rt_date.prg
* utils/hbtest/rt_hvm.prg
* utils/hbtest/rt_hvma.prg
* utils/hbtest/rt_math.prg
* utils/hbtest/rt_misc.prg
* utils/hbtest/rt_mt.prg
* utils/hbtest/rt_str.prg
* utils/hbtest/rt_stra.prg
* utils/hbtest/rt_trans.prg
* run case fixer script on all non-C file
except some certain files, which I routinely
skip when formatting.
* minor manual cleanups along the way
314 lines
7.2 KiB
Plaintext
314 lines
7.2 KiB
Plaintext
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/*
|
|
* Author....: Jim Orlowski
|
|
* CIS ID....: ?
|
|
*
|
|
* This is an original work by Jim Orlowski and is placed in the
|
|
* public domain.
|
|
*
|
|
* Modification history:
|
|
* ---------------------
|
|
*
|
|
* Rev 1.4 28 Sep 1991 02:56:56 GLENN
|
|
* Moved Jim's "Tricks used" comment out of the file header and
|
|
* into the source code area.
|
|
*
|
|
* Rev 1.3 28 Sep 1991 02:52:22 GLENN
|
|
* Jim's modifications:
|
|
*
|
|
* 1. Changed SAVESCREEN() and RESTSCREEN to use MaxRow(), MaxCol()
|
|
* instead of 24,79
|
|
*
|
|
* 2. Added Nantucket's cleaner code for:
|
|
* - Cleaned up logic around line 334 while loop section
|
|
* - Added refreshCurrent and another stabilize around line 349
|
|
* - TbSkipWhile was redone
|
|
* Note: Leo's line was changed to:
|
|
* ELSEIF n > 0 .AND. RecNo() != LastRec() + 1
|
|
*
|
|
* 3. Added DispBegin() and DispEnd() around both Stabilize sections
|
|
*
|
|
*
|
|
*
|
|
*
|
|
* Rev 1.2 15 Aug 1991 23:04:20 GLENN
|
|
* Forest Belt proofread/edited/cleaned up doc
|
|
*
|
|
* Rev 1.1 14 Jun 1991 19:53:08 GLENN
|
|
* Minor edit to file header
|
|
*
|
|
* Rev 1.0 01 Apr 1991 01:02:22 GLENN
|
|
* Nanforum Toolkit
|
|
*
|
|
*/
|
|
|
|
/* The tricks are:
|
|
*
|
|
* 1. Setting up functions for goTop() and goBottom() so that you can
|
|
* quickly move to the right record when the user presses the
|
|
* Ctrl-PgUp ( goTop() ) and Ctrl-PgDn ( goBottom() ) keys.
|
|
*
|
|
* 2. Passing and evaluating the block for the TbSkipWhil().
|
|
*/
|
|
|
|
#include "inkey.ch"
|
|
#include "setcurs.ch"
|
|
|
|
FUNCTION ft_BrwsWhl( aFields, bWhileCond, cKey, nFreeze, lSaveScrn, ;
|
|
cColorList, cColorShad, nTop, nLeft, nBottom, nRight )
|
|
|
|
LOCAL b, column, i
|
|
LOCAL cHead, bField, lKeepScrn, cScrnSave
|
|
LOCAL cColorSave, cColorBack, nCursSave
|
|
LOCAL lMore, nKey, nPassRec
|
|
|
|
__defaultNIL( @nFreeze, 0 )
|
|
__defaultNIL( @lSaveScrn, .T. )
|
|
__defaultNIL( @cColorList, "N/W, N/BG, B/W, B/BG, B/W, B/BG, R/W, B/R" )
|
|
__defaultNIL( @cColorShad, "N/N" )
|
|
__defaultNIL( @nTop, 2 )
|
|
__defaultNIL( @nLeft, 2 )
|
|
__defaultNIL( @nBottom, MaxRow() - 2 )
|
|
__defaultNIL( @nRight, MaxCol() - 2 )
|
|
|
|
lKeepScrn := PCount() > 6
|
|
|
|
dbSeek( cKey )
|
|
IF ! Found() .OR. LastRec() == 0
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
/* make new browse object */
|
|
b := TBrowseDB( nTop, nLeft, nBottom, nRight )
|
|
|
|
/* default heading and column separators */
|
|
b:headSep := hb_UTF8ToStrBox( "═╤═" )
|
|
b:colSep := hb_UTF8ToStrBox( " │ " )
|
|
b:footSep := hb_UTF8ToStrBox( "═╧═" )
|
|
|
|
/* add custom 'TbSkipWhil' (to handle passed condition) */
|
|
b:skipBlock := {| x | TbSkipWhil( x, bWhileCond ) }
|
|
|
|
/* Set up substitute goto top and goto bottom */
|
|
/* with While's top and bottom records */
|
|
b:goTopBlock := {|| TbWhileTop( cKey ) }
|
|
b:goBottomBlock := {|| TbWhileBot( cKey ) }
|
|
|
|
/* colors */
|
|
b:colorSpec := cColorList
|
|
|
|
/* add a column for each field in the current workarea */
|
|
FOR i := 1 TO Len( aFields )
|
|
cHead := aFields[ i, 1 ]
|
|
bField := aFields[ i, 2 ]
|
|
|
|
/* make the new column */
|
|
column := TBColumnNew( cHead, bField )
|
|
|
|
/* these are color setups from tbdemo.prg from Nantucket */
|
|
// IF cType == "N"
|
|
// column:defColor := { 5, 6 }
|
|
// column:colorBlock := {| x | iif( x < 0, { 7, 8 }, { 5, 6 } ) }
|
|
// ELSE
|
|
// column:defColor := { 3, 4 }
|
|
// ENDIF
|
|
|
|
/* To simplify I just used 3rd and 4th colors from passed cColorList */
|
|
/* This way 1st is SAY, 2nd is GET, 3rd and 4th are used here,
|
|
/* 5th is Unselected Get, extras can be used as in tbdemo.prg */
|
|
column:defColor := { 3, 4 }
|
|
|
|
b:addColumn( column )
|
|
NEXT
|
|
|
|
/* freeze columns */
|
|
IF nFreeze != 0
|
|
b:freeze := nFreeze
|
|
ENDIF
|
|
|
|
/* save old screen and colors */
|
|
IF lSaveScrn
|
|
cScrnSave := SaveScreen( 0, 0, MaxRow(), MaxCol() )
|
|
ENDIF
|
|
cColorSave := SetColor()
|
|
|
|
/* Background Color Is Based On First Color In Passed cColorList */
|
|
cColorBack := iif( "," $ cColorList, ;
|
|
SubStr( cColorList, 1, At( ",", cColorList ) - 1 ), cColorList )
|
|
|
|
IF ! lKeepScrn
|
|
SetColor( cColorBack )
|
|
hb_Scroll()
|
|
ENDIF
|
|
|
|
/* make a window shadow */
|
|
hb_Scroll( nTop + 1, nLeft + 1, nBottom + 1, nRight + 1,,, cColorShad )
|
|
hb_Scroll( nTop, nLeft, nBottom, nRight,,, cColorBack )
|
|
SetColor( cColorSave )
|
|
|
|
nCursSave := SetCursor( SC_NONE )
|
|
|
|
lMore := .T.
|
|
DO WHILE lMore
|
|
|
|
/* stabilize the display */
|
|
nKey := 0
|
|
DispBegin()
|
|
DO WHILE nKey == 0 .AND. ! b:stable
|
|
b:stabilize()
|
|
nKey := Inkey()
|
|
ENDDO
|
|
DispEnd()
|
|
|
|
IF b:stable
|
|
/* display is stable */
|
|
IF b:hitTop .OR. b:hitBottom
|
|
Tone( 125, 0 )
|
|
ENDIF
|
|
|
|
// Make sure that the current record is showing
|
|
// up-to-date data in case we are on a network.
|
|
DispBegin()
|
|
b:refreshCurrent()
|
|
b:forceStable()
|
|
DispEnd()
|
|
|
|
/* everything's done. just wait for a key */
|
|
nKey := Inkey( 0 )
|
|
ENDIF
|
|
|
|
/* process key */
|
|
SWITCH nKey
|
|
CASE K_DOWN
|
|
b:down()
|
|
EXIT
|
|
|
|
CASE K_UP
|
|
b:up()
|
|
EXIT
|
|
|
|
CASE K_PGDN
|
|
b:pageDown()
|
|
EXIT
|
|
|
|
CASE K_PGUP
|
|
b:pageUp()
|
|
EXIT
|
|
|
|
CASE K_CTRL_PGUP
|
|
b:goTop()
|
|
EXIT
|
|
|
|
CASE K_CTRL_PGDN
|
|
b:goBottom()
|
|
EXIT
|
|
|
|
CASE K_RIGHT
|
|
b:Right()
|
|
EXIT
|
|
|
|
CASE K_LEFT
|
|
b:Left()
|
|
EXIT
|
|
|
|
CASE K_HOME
|
|
b:home()
|
|
EXIT
|
|
|
|
CASE K_END
|
|
b:end()
|
|
EXIT
|
|
|
|
CASE K_CTRL_LEFT
|
|
b:panLeft()
|
|
EXIT
|
|
|
|
CASE K_CTRL_RIGHT
|
|
b:panRight()
|
|
EXIT
|
|
|
|
CASE K_CTRL_HOME
|
|
b:panHome()
|
|
EXIT
|
|
|
|
CASE K_CTRL_END
|
|
b:panEnd()
|
|
EXIT
|
|
|
|
CASE K_ESC
|
|
nPassRec := 0
|
|
lMore := .F.
|
|
EXIT
|
|
|
|
CASE K_ENTER
|
|
nPassRec := RecNo()
|
|
lMore := .F.
|
|
EXIT
|
|
|
|
ENDSWITCH
|
|
ENDDO
|
|
|
|
/* restore old screen */
|
|
IF lSaveScrn
|
|
RestScreen( 0, 0, MaxRow(), MaxCol(), cScrnSave )
|
|
ENDIF
|
|
SetCursor( nCursSave )
|
|
SetColor( cColorSave )
|
|
|
|
RETURN nPassRec
|
|
|
|
STATIC FUNCTION TbSkipWhil( n, bWhileCond )
|
|
|
|
LOCAL i := 0
|
|
|
|
IF n == 0 .OR. LastRec() == 0
|
|
dbSkip( 0 ) // significant on a network
|
|
|
|
ELSEIF n > 0 .AND. RecNo() != LastRec() + 1
|
|
WHILE i < n
|
|
dbSkip()
|
|
IF Eof() .OR. ! Eval( bWhileCond )
|
|
dbSkip( -1 )
|
|
EXIT
|
|
ENDIF
|
|
i++
|
|
ENDDO
|
|
|
|
ELSEIF n < 0
|
|
DO WHILE i > n
|
|
dbSkip( -1 )
|
|
IF Bof()
|
|
EXIT
|
|
ELSEIF ! Eval( bWhileCond )
|
|
dbSkip()
|
|
EXIT
|
|
ENDIF
|
|
i--
|
|
ENDDO
|
|
ENDIF
|
|
|
|
RETURN i
|
|
|
|
STATIC FUNCTION TbWhileTop( cKey )
|
|
|
|
dbSeek( cKey )
|
|
|
|
RETURN NIL
|
|
|
|
// SeekLast: Finds Last Record For Matching Key
|
|
// Developed By Jon Cole
|
|
// With softseek set on, seek the first record after condition.
|
|
// This is accomplished by incrementing the right most character of the
|
|
// string cKey by one ascii character. After SEEKing the new string,
|
|
// back up one record to get to the last record which matches cKey.
|
|
|
|
STATIC FUNCTION TbWhileBot( cKey )
|
|
|
|
dbSeek( Left( cKey, Len( cKey ) - 1 ) + Chr( Asc( Right( cKey, 1 ) ) + 1 ), .T. )
|
|
dbSkip( -1 )
|
|
|
|
RETURN NIL
|