Clarion

 

Setup

Download the Clarion module: Clarion_Everything.zip

 

Source code of the module is included.

 

Extract Everything.lib to your clarion project.

 

Add the LIB to “Library, object, and resource files” in your Clarion project and put the following in your global map.

 

MODULE('Everything.lib')
  Everything_GetLastError(),LONG,RAW,PASCAL
  Everything_SetSearch(*CSTRING),RAW,PASCAL
  Everything_SetMatchPath(LONG),RAW,PASCAL
  Everything_SetMatchCase(LONG),RAW,PASCAL
  Everything_SetMatchWholeWord(LONG),RAW,PASCAL
  Everything_EnableRegex(LONG),RAW,PASCAL
  Everything_SetMax(LONG),RAW,PASCAL
  Everything_SetOffset(LONG),RAW,PASCAL
  Everything_Query(),RAW,PASCAL
  Everything_SetDetail(LONG),RAW,PASCAL
  Everything_SortResults(LONG),RAW,PASCAL
  Everything_GetNumFileResults(),LONG,RAW,PASCAL
  Everything_GetNumFolderResults(),LONG,RAW,PASCAL
  Everything_GetNumResults(),LONG,RAW,PASCAL
  Everything_GetTotFileResults(),LONG,RAW,PASCAL
  Everything_GetTotFolderResults(),LONG,RAW,PASCAL
  Everything_GetTotResults(),LONG,RAW,PASCAL
  Everything_IsVolumeResult(LONG),LONG,RAW,PASCAL
  Everything_IsFolderResult(LONG),LONG,RAW,PASCAL
  Everything_IsFileResult(LONG),LONG,RAW,PASCAL
  Everything_GetResultFileName(LONG),*CSTRING,RAW,PASCAL
  Everything_GetResultPath(LONG),*CSTRING,RAW,PASCAL
  Everything_GetResult(LONG,LONG),RAW,PASCAL
END

 

Changes

added:
  • Everything_SetDetail
  • Everything_SortResults

 

Equates

!return values from Everything_GetLastError
EVERYTHING_OK				EQUATE(0) ! no error
EVERYTHING_ERROR_MEMORY			EQUATE(1) ! out of memory
EVERYTHING_ERROR_IPC			EQUATE(2) ! IPC not available
EVERYTHING_ERROR_REGISTERCLASSEX	EQUATE(3) ! RegisterClassEx failed
EVERYTHING_ERROR_CREATEWINDOW		EQUATE(4) ! CreateWindow failed
EVERYTHING_ERROR_CREATETHREAD		EQUATE(5) ! CreateThread failed
EVERYTHING_ERROR_INVALIDINDEX		EQUATE(6) ! Invalid result index (must be >= 0 and < numResults)
EVERYTHING_ERROR_INVALIDCALL		EQUATE(7) ! Call Everything_Query before getting results

!attributes
EVERYTHING_FILE_ATTRIBUTE_READONLY             EQUATE(0001h)
EVERYTHING_FILE_ATTRIBUTE_HIDDEN               EQUATE(0002h)
EVERYTHING_FILE_ATTRIBUTE_SYSTEM               EQUATE(0004h)
EVERYTHING_FILE_ATTRIBUTE_DIRECTORY            EQUATE(0010h)
EVERYTHING_FILE_ATTRIBUTE_ARCHIVE              EQUATE(0020h)
EVERYTHING_FILE_ATTRIBUTE_DEVICE               EQUATE(0040h)
EVERYTHING_FILE_ATTRIBUTE_NORMAL               EQUATE(0080h)
EVERYTHING_FILE_ATTRIBUTE_TEMPORARY            EQUATE(0100h)
EVERYTHING_FILE_ATTRIBUTE_SPARSE_FILE          EQUATE(0200h)
EVERYTHING_FILE_ATTRIBUTE_REPARSE_POINT        EQUATE(0400h)
EVERYTHING_FILE_ATTRIBUTE_COMPRESSED           EQUATE(0800h)
EVERYTHING_FILE_ATTRIBUTE_OFFLINE              EQUATE(1000h)
EVERYTHING_FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  EQUATE(2000h)
EVERYTHING_FILE_ATTRIBUTE_ENCRYPTED            EQUATE(4000h)

 

Limits and Notes

Everything MUST be running for this to work.

 

See Everything IPC.

 

You can only do one search at a time.

If there is demand for it, I can add multiple thread safe searches.

 

Descriptions

Everything_GetLastError

myError LONG

!check the equates for error message descriptions
myError = Everything_GetLastError()

 

Everything_SetSearch

myString STRING

!Set the search string
!default search is '' (empty string)
Everything_SetSearch(myString)

 

Everything_SetMatchPath

val LONG

!set val to zero to disable path matching
!set val to non-zero to enable path matching
!default is 0 (off)
Everything_SetMatchPath(val)

 

Everything_SetMatchCase

val LONG

!set val to zero to disable case matching
!set val to non-zero to enable case matching
!default is 0 (off)
Everything_SetMatchCase(val)

 

Everything_SetMatchWholeWord

val LONG

!set val to zero to disable whole word matching
!set val to non-zero to enable whole word matching
!default is 0 (off)
Everything_SetMatchWholeWord(val)

 

Everything_EnableRegex

val LONG

!set val to zero to disable regex
!set val to non-zero to enable regex
!default is 0 (off)
Everything_EnableRegex(val)

 

Everything_SetMax

val LONG

!If you display the results in a list, set this value to how many items are visible in the list.
!How many results would you like Everything to return?
!Use this for displaying small lists.
!Default is 0xFFFFFFFF (all results)
Everything_SetMax(val)

 

Everything_SetOffset

offset LONG

!If you display a list with a scroll bar, set the offset to the scroll bar's offset.
!From what index would you like Everything to return results from?
!zero means return results starting from the first result.
!10 would mean return results starting from the 10th result.
!use this for displaying small lists.
!default is 0
!This is 0 based
Everything_SetOffset(offset)

 

Everything_Query

!Execute the query
!use the Everything_Set* functions to override default search parameters
!This sends the search options to "Everything" over the IPC.
!It does not return until it has a copy of ALL the results.
!Use Everything_GetResult to enumerate results.
!100 results will take about 1 millisecond.
!1 million results will take about 1 second.
Everything_Query()

 

Everything_SetDetail

detail LONG

!The result detail
!Set detail to nonzero to get file information from Everything_GetResult
!Set detail to zero to get file name, path name offsets and lengths and partial file attributes only.
!The default detail is zero.
!This can be called at anytime.
!make sure you sort the results with Everything_SortResults() if you set the detail to non-zero. (this will speed up the enumerating process.)
Everything_SetDetail(detail)

 

Everything_SortResults

NoDriveLetter LONG

!Set NoDriveLetter to nonzero to sort by path excluding drive letters.
!Set NoDriveLetter to zero to sort by path.
!Use this before getting detailed results (set NoDriveLetter to zero).
!Results are sorted by name by default.
!Can only be called after a call to Everything_Query
Everything_SortResults(NoDriveLetter)

 

Everything_GetNumFileResults

numFiles LONG

!Get the number of files in the visible results list.
numFiles = Everything_GetNumFileResults()

 

Everything_GetNumFolderResults

numFolders LONG

!Get the number of folders in the visible results list.
numFolders = Everything_GetNumFolderResults()

 

Everything_GetNumResults

numResults LONG

!Get the number of files and folders in the visible results list.
numResults = Everything_GetNumResults()

 

Everything_GetTotFileResults

totFiles LONG

!Get the total number of files in the results list.
totFiles = Everything_GetTotFileResults()

 

Everything_GetTotFolderResults

totFolders LONG

!Get the total number of files in the results list.
totFolders = Everything_GetTotFolderResults()

 

Everything_GetTotResults

totResults LONG

!Get the total number of files and folders in the results list.
!index is 0 based
totResults = Everything_GetTotResults()

 

Everything_IsVolumeResult

index LONG
val LONG

!returns zero if the result is not a volume.
!returns non-zero if the result is a volume.
!index is 0 based
!deprecated - Use Everything_GetResult
val = Everything_IsVolumeResult(index)

 

Everything_IsFolderResult

index LONG
val LONG

!returns zero if the result is not a folder.
!returns non-zero if the result is a folder.
!index is 0 based
!deprecated - Use Everything_GetResult
val = Everything_IsFolderResult(index)

 

Everything_IsFileResult

index LONG
val LONG

!returns zero if the result is not a file
!returns non-zero if the result is a file.
!index is 0 based
!deprecated - Use Everything_GetResult
val = Everything_IsFileResult(index)

 

Everything_GetResultFileName

index LONG
filename CSTRING

!index is 0 based
!this gets the result file name
!deprecated - Use Everything_GetResult
filename = Everything_GetResultFileName(index)

 

Everything_GetResultPath

index LONG
path CSTRING

!index is 0 based
!this gets the result path
!deprecated - Use Everything_GetResult
path = Everything_GetResultPath(index)

 

Everything_GetResult

index LONG
result	GROUP
FullPathFileName	STRING(260) !The full path and file name of the result
PathPartLength		LONG ! Length of the path part only
FileNamePartOffset	LONG ! Offset into FullPathFileName for the file name part only (0 based)
SizeHigh		LONG ! High part of size (ignore this if you do not need the full 64bit size)
SizeLow			ULONG ! Low part of size
Attributes		LONG ! Attribute flags can be zero or more EVERYTHING_FILE_ATTRIBUTE_* flags
CreationYear		LONG ! The year (1601 - 30827). 
CreationMonth		LONG ! The month (January = 1, December = 12)
CreationDayOfWeek	LONG ! The day of the week. (sunday = 0, monday = 1, Saturday = 6)
CreationDay		LONG ! The day of the month (1-31). 
CreationHour		LONG ! The hour (0-23).
CreationMinute		LONG ! The minute (0-59). 
CreationSecond		LONG ! The second (0-59). 
CreationMilliseconds	LONG ! The millisecond (0-999). 
LastAccessYear		LONG ! The year (1601 - 30827). 
LastAccessMonth		LONG ! The month (January = 1, December = 12)
LastAccessDayOfWeek	LONG ! The day of the week. (sunday = 0, monday = 1, Saturday = 6)
LastAccessDay		LONG ! The day of the month (1-31). 
LastAccessHour		LONG ! The hour (0-23).
LastAccessMinute	LONG ! The minute (0-59). 
LastAccessSecond	LONG ! The second (0-59). 
LastAccessMilliseconds	LONG ! The millisecond (0-999). 
LastWriteYear		LONG ! The year (1601 - 30827). 
LastWriteMonth		LONG ! The month (January = 1, December = 12)
LastWriteDayOfWeek	LONG ! The day of the week. (sunday = 0, monday = 1, Saturday = 6)
LastWriteDay		LONG ! The day of the month (1-31). 
LastWriteHour		LONG ! The hour (0-23).
LastWriteMinute		LONG ! The minute (0-59). 
LastWriteSecond		LONG ! The second (0-59). 
LastWriteMilliseconds	LONG ! The millisecond (0-999). 
	END

!index is 0 based
!fills in the result group
!See Everything_SetDetail for what information is filled in.
Everything_GetResult(index,ADDRESS(result))

 

Fast Program Example

x LONG,AUTO
m LONG
result	GROUP
FullPathFileName	STRING(260) !The full path and file name of the result
PathPartLength		LONG ! Length of the path part only
FileNamePartOffset	LONG ! Offset into FullPathFileName for the file name part only (0 based)
SizeHigh		LONG ! Not used in this example.
SizeLow			ULONG ! Not used in this example.
Attributes		LONG ! Attribute flags can be zero or EVERYTHING_FILE_ATTRIBUTE_DIRECTORY flag
CreationYear		LONG ! Not used in this example.
CreationMonth		LONG ! Not used in this example.
CreationDayOfWeek	LONG ! Not used in this example.
CreationDay		LONG ! Not used in this example.
CreationHour		LONG ! Not used in this example.
CreationMinute		LONG ! Not used in this example.
CreationSecond		LONG ! Not used in this example.
CreationMilliseconds	LONG ! Not used in this example.
LastAccessYear		LONG ! Not used in this example.
LastAccessMonth		LONG ! Not used in this example.
LastAccessDayOfWeek	LONG ! Not used in this example.
LastAccessDay		LONG ! Not used in this example.
LastAccessHour		LONG ! Not used in this example.
LastAccessMinute	LONG ! Not used in this example.
LastAccessSecond	LONG ! Not used in this example.
LastAccessMilliseconds	LONG ! Not used in this example.
LastWriteYear		LONG ! Not used in this example.
LastWriteMonth		LONG ! Not used in this example.
LastWriteDayOfWeek	LONG ! Not used in this example.
LastWriteDay		LONG ! Not used in this example.
LastWriteHour		LONG ! Not used in this example.
LastWriteMinute		LONG ! Not used in this example.
LastWriteSecond		LONG ! Not used in this example.
LastWriteMilliseconds	LONG ! Not used in this example.
	END

!setup a query using the default search parameters
!change the search string to 'whatthe'
Everything_SetSearch('whatthe')

!Find all the results for 'whatthe'
Everything_Query()

m = Everything_GetNumResults()
LOOP x = 0 TO m - 1

    Everything_GetResult(x,ADDRESS(result))

    ...
    !do something with name and path
    ...
END

 

Detailed Program Example

x LONG,AUTO
m LONG
result	GROUP
FullPathFileName	STRING(260) !The full path and file name of the result
PathPartLength		LONG ! Length of the path part only
FileNamePartOffset	LONG ! Offset into FullPathFileName for the file name part only (0 based)
SizeHigh		LONG ! High part of size (ignore this if you do not need the full 64bit size)
SizeLow			ULONG ! Low part of size
Attributes		LONG ! Attribute flags can be zero or more EVERYTHING_FILE_ATTRIBUTE_* flags
CreationYear		LONG ! The year (1601 - 30827). 
CreationMonth		LONG ! The month (January = 1, December = 12)
CreationDayOfWeek	LONG ! The day of the week. (sunday = 0, monday = 1, Saturday = 6)
CreationDay		LONG ! The day of the month (1-31). 
CreationHour		LONG ! The hour (0-23).
CreationMinute		LONG ! The minute (0-59). 
CreationSecond		LONG ! The second (0-59). 
CreationMilliseconds	LONG ! The millisecond (0-999). 
LastAccessYear		LONG ! The year (1601 - 30827). 
LastAccessMonth		LONG ! The month (January = 1, December = 12)
LastAccessDayOfWeek	LONG ! The day of the week. (sunday = 0, monday = 1, Saturday = 6)
LastAccessDay		LONG ! The day of the month (1-31). 
LastAccessHour		LONG ! The hour (0-23).
LastAccessMinute	LONG ! The minute (0-59). 
LastAccessSecond	LONG ! The second (0-59). 
LastAccessMilliseconds	LONG ! The millisecond (0-999). 
LastWriteYear		LONG ! The year (1601 - 30827). 
LastWriteMonth		LONG ! The month (January = 1, December = 12)
LastWriteDayOfWeek	LONG ! The day of the week. (sunday = 0, monday = 1, Saturday = 6)
LastWriteDay		LONG ! The day of the month (1-31). 
LastWriteHour		LONG ! The hour (0-23).
LastWriteMinute		LONG ! The minute (0-59). 
LastWriteSecond		LONG ! The second (0-59). 
LastWriteMilliseconds	LONG ! The millisecond (0-999). 
	END

!setup a query using the default search parameters
!change the search string to 'whatthe'
Everything_SetSearch('whatthe')

!Find all the results for 'whatthe'
Everything_Query()

!turn detail on
Everything_SetDetail(1)

!Sort the results
!this is required for nonzero detail
Everything_SortResults(0)

m = Everything_GetNumResults()
LOOP x = 0 TO m - 1
    Everything_GetResult(x,ADDRESS(result))
    ...
    !do something with result
    ...
END