home *** CD-ROM | disk | FTP | other *** search
- /*-- AutoRev header do NOT edit!
- *
- * Program : Search.c
- * Copyright : Copyright © 1991-92 Jaba Development
- * Author : Jan van den Baard
- * Creation Date : 05-Apr-92
- * Current version : 2.0
- * Translator : Dice v2.06.40
- *
- * REVISION HISTORY
- *
- * Date Version Comment
- * --------- ------- ------------------------------------------
- * 05-Apr-92 2.0 Search routines. (rewrite)
- *
- *-- REV_END --*/
-
- #include "View.h"
-
- Prototype void Find( void );
- Prototype void FindNP( long );
- Prototype void DoFound( void );
-
- extern struct Screen *vwScreen;
- extern struct Window *vwWindow;
- extern struct AsciiText *vwText;
- extern struct Line *vwFirst, *vwLast;
- extern struct StringScan vwSearch;
- extern UBYTE vwFBuf[], ClearStr[], vwFound;
- extern UWORD vwMode, vwMaxLin, vwYMax;
- extern ULONG vwShown;
-
- void Find( void )
- {
- if ( rtGetString( vwFBuf, 256, "Type string to find...", NULL, RT_Window, vwWindow,
- RT_ReqPos, REQPOS_CENTERSCR,
- RT_WaitPointer, TRUE,
- TAG_DONE )) {
- Busy();
- ErrorLine( "Searching..." );
- if ( FindFrom( vwText, vwFBuf, &vwSearch, vwFirst, vwMode )) {
- vwFound = TRUE;
- DoFound();
- } else
- DisplayBeep( vwScreen );
- InfoLine();
- Ready();
- }
- }
-
- void FindNP( long dir )
- {
- long ret;
-
- if ( ! vwText ) return;
-
- if ( vwFound ) {
- Busy();
- ErrorLine( "Searching..." );
- if ( ! dir ) ret = NextOccurrence( &vwSearch, vwMode );
- else ret = PreviousOccurrence( &vwSearch, vwMode );
-
- if ( ret ) {
- DoFound();
- goto doneIt;
- }
- }
- DisplayBeep( vwScreen );
- doneIt:
- Ready();
- InfoLine();
- }
-
- void DoFound( void )
- {
- struct Line *line;
- UWORD i, y = 0, yy;
-
- vwLast = vwSearch.Line;
-
- for ( i = 0; i < vwMaxLin; i++ )
- if (( vwLast = vwLast->Next ) == vwText->Last->Next ) break;
-
- vwFirst = vwLast;
-
- for ( yy = vwYMax, i = vwMaxLin; i >= 1; i--, yy-- ) {
- if (( vwFirst = vwFirst->Prev ) == vwText->First ) break;
- if ( vwFirst == vwSearch.Line ) y = yy;
- }
-
- vwShown = NULL;
-
- for ( line = vwText->First; line != vwLast; line = line->Next )
- vwShown += line->Size;
-
- Inform( ClearStr );
- DisplayText();
- }
-