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 >
C/C++ Source or Header  |  1992-05-15  |  3KB  |  99 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   Search.c
  4. *   Copyright       :   Copyright © 1991-92 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   05-Apr-92
  7. *   Current version :   2.0
  8. *   Translator      :   Dice v2.06.40
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   05-Apr-92     2.0             Search routines. (rewrite)
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "View.h"
  19.  
  20. Prototype void Find( void );
  21. Prototype void FindNP( long );
  22. Prototype void DoFound( void );
  23.  
  24. extern struct Screen            *vwScreen;
  25. extern struct Window            *vwWindow;
  26. extern struct AsciiText         *vwText;
  27. extern struct Line              *vwFirst, *vwLast;
  28. extern struct StringScan         vwSearch;
  29. extern UBYTE                     vwFBuf[], ClearStr[], vwFound;
  30. extern UWORD                     vwMode, vwMaxLin, vwYMax;
  31. extern ULONG                     vwShown;
  32.  
  33. void Find( void )
  34. {
  35.     if ( rtGetString( vwFBuf, 256, "Type string to find...", NULL, RT_Window, vwWindow,
  36.                                                                     RT_ReqPos, REQPOS_CENTERSCR,
  37.                                                                     RT_WaitPointer, TRUE,
  38.                                                                     TAG_DONE )) {
  39.         Busy();
  40.         ErrorLine( "Searching..." );
  41.         if ( FindFrom( vwText, vwFBuf, &vwSearch, vwFirst, vwMode )) {
  42.             vwFound = TRUE;
  43.             DoFound();
  44.         } else
  45.             DisplayBeep( vwScreen );
  46.         InfoLine();
  47.         Ready();
  48.     }
  49. }
  50.  
  51. void FindNP( long dir )
  52. {
  53.     long            ret;
  54.  
  55.     if ( ! vwText )     return;
  56.  
  57.     if ( vwFound ) {
  58.         Busy();
  59.         ErrorLine( "Searching..." );
  60.         if ( ! dir ) ret = NextOccurrence( &vwSearch, vwMode );
  61.         else         ret = PreviousOccurrence( &vwSearch, vwMode );
  62.  
  63.         if ( ret ) {
  64.             DoFound();
  65.             goto doneIt;
  66.         }
  67.     }
  68.     DisplayBeep( vwScreen );
  69.     doneIt:
  70.     Ready();
  71.     InfoLine();
  72. }
  73.  
  74. void DoFound( void )
  75. {
  76.     struct Line     *line;
  77.     UWORD            i, y = 0, yy;
  78.  
  79.     vwLast = vwSearch.Line;
  80.  
  81.     for ( i = 0; i < vwMaxLin; i++ )
  82.         if (( vwLast = vwLast->Next ) == vwText->Last->Next ) break;
  83.  
  84.     vwFirst = vwLast;
  85.  
  86.     for ( yy = vwYMax, i = vwMaxLin; i >= 1; i--, yy--  ) {
  87.         if (( vwFirst = vwFirst->Prev ) == vwText->First ) break;
  88.         if ( vwFirst == vwSearch.Line ) y = yy;
  89.     }
  90.  
  91.     vwShown = NULL;
  92.  
  93.     for ( line = vwText->First; line != vwLast; line = line->Next )
  94.         vwShown += line->Size;
  95.  
  96.     Inform( ClearStr );
  97.     DisplayText();
  98. }
  99.