home *** CD-ROM | disk | FTP | other *** search
- /******************************** DOS Interfacing Routines ***********************
- FindFile's DOS interface routines
-
- FFSearch.c 1.2 1993/04/01 21:49:08 RUSS Exp
-
- 1.2
-
- FFSearch.c
- * Revision 1.2 1993/04/01 21:49:08 RUSS
- * Changed to use conform to new display format,
- * i.e. now determines path from the directory
- * lock, not a linked list.
- *
- * Revision 1.1 1993/02/28 00:49:57 RUSS
- * Initial revision
- *
-
- *********************************************************************************/
-
- #include "FindFile.h"
-
- /**********************************************************
- Copy a BSTR to CSTR. Equivalent to strcpy().
- **********************************************************/
-
- void
- Bstrcpy( UBYTE *dest , BSTR bsrc )
- {
- UBYTE *src = ( UBYTE *)BADDR( bsrc );
- SHORT pos;
- UBYTE len;
-
- len = *src++;
-
- for ( pos = 0; pos < len; pos++ )
- *dest++ = *src++;
-
- *dest++ = ':';
- *dest = '\0';
-
- }
-
- STRPTR *
- GetDevList( struct controlPanel *cp )
- {
- struct DosList *dList,
- *sdList;
- STRPTR *devList;
- int numVols = 0;
-
- dList = LockDosList( LDF_VOLUMES|LDF_READ );
-
- sdList = dList;
-
- while( dList = NextDosEntry( dList , LDF_VOLUMES|LDF_READ ) )
- numVols++;
-
- cp->numDevs = numVols;
-
- if( !( devList = AllocVec( (numVols + 1) * sizeof( STRPTR ) , MEMF_ANY|MEMF_CLEAR )))
- goto exitgdl;
-
- numVols = 0;
-
- while( sdList = NextDosEntry( sdList , LDF_VOLUMES|LDF_READ ) )
- {
- if( !( devList[numVols] = AllocVec( MAXSTR , MEMF_ANY|MEMF_CLEAR )))
- goto exitgdl;
-
- Bstrcpy( devList[numVols++] , sdList->dol_Name );
- }
-
- exitgdl:
-
- UnLockDosList( LDF_VOLUMES|LDF_READ );
-
- return( devList );
- }
-
- void
- FreeDevList( STRPTR *devList )
- {
- int loc = 0;
-
- while( devList[loc] )
- FreeVec( devList[loc++] );
-
- FreeVec( devList );
-
- }
-
- BOOL
- ScanDir( STRPTR dirName , struct controlPanel *cp )
- {
- BPTR currentDir,
- parentDir;
- struct FileInfoBlock *fib;
- BOOL cont = FALSE,
- done = FALSE;
-
-
- if(!(fib = AllocDosObject( DOS_FIB, NULL ) ) )
- return( FALSE );
-
-
- currentDir = Lock( dirName, ACCESS_READ );
-
- Examine( currentDir, fib );
-
- parentDir = CurrentDir( currentDir );
-
- while( !done )
- {
- if( !ExNext( currentDir, fib ) )
- break;
-
- if( fib->fib_DirEntryType >= 0 )
- {
- cont = ScanDir( fib->fib_FileName, cp );
- }
- else
- {
- if( MatchFile( cp, fib->fib_FileName ) )
- {
- AddFoundFile( cp, currentDir, fib->fib_FileName );
-
- /* Gadget Work */
- GT_SetGadgetAttrs( cp->ffWinGads[ID_FOUNDLIST],
- cp->ffWindow, NULL,
- GTLV_Labels, (&cp->foundList),
- GTLV_Selected, 0L,
- TAG_DONE );
-
- GT_SetGadgetAttrs( cp->ffWinGads[ID_FOUNDLIST],
- cp->ffWindow, NULL,
- GTLV_Labels, ~0L,
- TAG_DONE );
-
- }
- }
-
- if( cont )
- {
- done = QuitCheck( cp );
- }
- }
-
- currentDir = CurrentDir( parentDir );
-
- UnLock( currentDir );
-
- if( done == FALSE && IoErr() == ERROR_NO_MORE_ENTRIES )
- cont = TRUE;
- else
- cont = FALSE;
-
- FreeDosObject( DOS_FIB, fib );
-
- return( cont );
-
- }
-
- BOOL
- MatchFile( struct controlPanel *cp, STRPTR fileName )
- {
- if( MatchPatternNoCase( cp->ignoreIconsPat, fileName ) )
- {
- if( MatchPatternNoCase( cp->searchPattern, fileName ) )
- {
- return( TRUE );
- }
- }
- return( FALSE );
-
- }
-
-