FUNCTION anagrams LPARAMETERS cWord IF !USED("Words") CREATE CURSOR Words (Word C(30)) APPEND FROM c:\wordlist.txt CSV INDEX ON Word TAG Word ENDIF USE IN SELECT("Result") SELECT 0 CREATE CURSOR Result (Word C(30)) INDEX ON Word TAG Word SELECT Words nSec = SECONDS() DO FindAnagram WITH "", LOWER(cWord), LEN(cWord) ? SECONDS() - nSec SELECT Result BROWSE NORM RETURN *- FUNCTION FindAnagram LPARAMETERS cPrefix, cRestWord, nLen LOCAL nT, cChars, cAddChar cChars = "" caddChar = LEFT(cRestWord,1) FOR nT = 1 TO nLen IF NOT(cAddChar $ cChars) AND KEYMATCH(cPRefix+LEFT(cRestWord,1)) AND ; ((nLen = 2 AND KEYMATCH(cPRefix+cRestWord) AND !KEYMATCH(cPRefix+cRestWord+" ",1,"Result") ; OR !FindAnagram(cPrefix+LEFT(cRestWord,1), SUBSTR(cRestWord,2), nLen - 1))) INSERT INTO Result VALUES (cPRefix+cRestWord) ENDIF cChars = cChars + cAddChar cAddChar = RIGHT(cRestWord,1) cRestWord = LEFT(RIGHT(cRestWord,1)+cRestWord, nLen) ENDFOR RETURNThen you can call this with