home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d6xx
/
d658
/
view.lha
/
View
/
Source
/
Search.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-15
|
3KB
|
99 lines
/*-- 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();
}