; PROJECT : PlayBasic - KeyWord - Bucket
; AUTHOR : Kev PIcone - PlayBasic TUTOR - Http://PlayBasic.com
; CREATED : 24/03/2022
; EDITED : 25/03/2022
; ---------------------------------------------------------------------
// Compute the location of the PlayBasic command listing
// so we have a big list of words for something to load and test
file$=GetPlayBasicKeyWordsPath$()
// Load the keywords textfile to a string
All_KeyWords$=LoadFileToString(file$)
// Scan this block of text looking for the section named [Commands]
// and then return it
Command_KEyWords$ = GetKeywordsUnderHeading(All_KeyWords$,"[Commands]")
// Test adding PlayBasic keywords to our WordHeap
Test_KeyWord_Heap(Command_KeyWords$)
//
print "Test Complete - Press Space To End"
; refresh display and wait for a key press before ending
sync
waitkey
end
Function Test_KeyWord_Heap(KeyWords$)
; Dim a string array called WORDS with an initial size of 1000
dim Words$(1000)
Result$ =replace$(KeyWords$,Chr$(13)+Chr$(10),",")
count =splittoarray(Result$,",",Words$())
// --------------------------------------------------
// Add each word to the Word Heap / Dictionary
// --------------------------------------------------
For lp=0 to count-1
word$ =words$(lp)
WordHeap_Add(Word$)
next
// --------------------------------------------------
// Do a search for all the added keywords
// --------------------------------------------------
print " Searching For #"+Str$(Count)+" Keywords"
starttime=timer()
For lp=0 to count-1
word$ =words$(lp)
Status=WordHeap_FIND(Word$)
#print digits$(Status,2)+">>>"+word$
Matches+=Status
next
StartTime=Timer()-StartTime
print "Found Keywords #"+Str$(Matches)
print ""
print "Search Time #"+Str$(StartTime)+" milliseconds"
print ""
print ""
EndFunction
Function GetKeywordsUnderHeading(KeyWords$,Heading$)
cr$=Chr$(13)+chr$(10)
Tag$=Heading$+cr$
// Lookgfor the TAG plus the linefeed / end of line within the string
StartPOS=instring(keywords$,tag$)
if StartPos
// If the tag is found, we step the found position to the end
// of the found location plus the tag size in characters
StartPos+=Len(tag$)
// search for tbhe first empty line beyond where the starting tag
// was founf
EndPos =instring(KeyWords$,Cr$+cr$,StartPos)
// Check if the closing tag position was indeed after the start?
if EndPos>StartPOs
// use MID$() to return this block of text from the keyword string
Result$ =mid$(Keywords$,StartPos,EndPos-StartPOs)
endif
endif
EndFunction Result$
Function LoadFileToString(file$)
if FIleexist(file$)
local size=filesize(file$)
local f=readnewfile(file$)
result$=readchr$(f,size)
closefile f
endif
EndFunction Result$
LinkDll "shell32"
zPriv_SHGetFolderPath(hWndOwner,nFolder,hToken,dwFlags,pszPath) Alias "SHGetFolderPathA" as integer
EndLinkDll
Function zPriv_Highlighter_GetSpecialFolderPath(nFolderID)
// Alloc a bank of 1024 bytes for the function to return the path in
local Size=1024
local ThisBank=newbank(Size)
local Ptr=GetBankPtr(thisBank)
local Status=zPriv_SHGetFolderPath(0,nFolderID,0,0,ptr)
if Status=0
// if status is 0 then the function worked
Path$=PeekString(ptr,0) ; peek a null termed string
else
#print "error polling GetSpeicalFolderpath"
endif
Deletebank ThisBank
EndFunction path$
PSUB GetPlayBasicKeyWordsPath$()
KeyWordsFile$=""
; constant CSIDL_LOCAL_APPDATA = $1C ;{user}\Local App Data Settings _
local folder$=zPriv_Highlighter_GetSpecialFolderPath($1C)
if folderexist(folder$)
// Get the Absolute location of the PlayBasic keywords file
KeyWordsFile$=Folder$+"\PlayBasic\Info\KeyWords.txt"
if fileexist(KeyWordsFile$)=false
KeyWordsFile$=""
endif
endif
EndPSUB KeyWordsFile$