0. Release Information
This document describes WordFind++ and WordFindPro v2.8.
1. Introduction
WordFind++ and WordFindPro are powerful dictionary searching programs for use with word games like Scrabble, Target, crosswords, and codewords/cryptograms. You can use them to generate lists of anagrams and words, given a set of constraints on the available letters and their positions.
WordFindPro has all of the functionality of WordFind++, plus the ability to have multiple dictionaries resident at the same time, and switch between them freely. WordFindPro also includes a Win32 dictionary maintenance program (FreeBSD or Linux executables available to registered users upon request). In addition, WordFindPro supports UNIX regular-expression style searches (single word only), and supports the use of numeric placeholders for letters, which can be used when solving cryptograms and substitution ciphers.
There is a WordFindLite program available which has the basic functionality of WordFind++ but with a much simplified user interface. If all you wish to do is use these programs for finding anagrams and finding words that fit in partially completed crossword grids you may prefer the simplicity of WordFindLite. However, WordFindLite will not have new features added in the future, so it is worth taking the time to learn to use WordFind++ or WordFindPro.
To use WordFind++, you must also install one of the dictionary databases it comes with for it to search. To use WordFindPro, you must install at least one of the dictionary databases it comes with; you can also install more than one and choose between them before starting a search.
The currently available dictionaries are:
demo.pdb - the dictionary that comes with the trial versions of WordFind++ and WordFindPro, this has 30,240 words, of up to 9 letters in length.
ospd3.pdb - for Scrabble players, this dictionary is made from the OSPD3 word list of 116,887 words of up to 13 characters in length..
small.pdb - a crossword dictionary of 52,033 common words.
medium.pdb - a medium sized crossword dictionary of 133,426 words.
large.pdb - this large crossword dictionary has 229,428 words.
huge.pdb - this very large dictionary has 345,195 entries (WordFindPro only).
scrabtor.pdb - a Scrabble tournament dictionary of 173,866 words (WordFindPro only)
The trial versions may be used with the demo.pdb dictionary only. Unauthorised redistribution of the other dictionary database files is not permitted. Registered users can obtain additional dictionaries, including foreign language dictionaries, from the WordFind website .
In the rest of this document, we will refer to WordFind most of the
time - this applies to both WordFind++ and WordFindPro. We refer to WordFindPro
only when discussing the additional features of WordFindPro.
2. Quick Start
Section 3 provides a detailed description of how to use the programs. This section provides a quick introduction which will allow you to do the most common types of searches.
General Crossword Help
For help with a crossword word, where only some letters are known:
If you wish to do this with multi-word clues, tap on the top-left prompt until it says "Template:" (this is the Template Form). Make sure that there is a button on the screen that says "Anchored"; if not, tap on the button that says "Floating" and it will change to "Anchored". Then proceed as before, using the "|" character to separate the words. Note that in this screen, tapping the "Any" button will insert a ":" character. The reason for this will become clear later.
For example, if you have a four letter clue with word lengths 2,4,2,4 and you know the first letter of each word are A, G, A and G respectively, you would enter the pattern "A:|G:::|A:|G:::".
(In this case, the cryptic clue is "Behaviour deserving top trophy", and the answer is "As good as gold").
You can also use the Template Form instead of the GlobPat form to do single word matches; the GlobPat form is just simpler.
Finding Anagrams
The procedure for finding anagrams is identical to the procedure for multi-word crossword clues, except that you should ensure that the button at the bottom right of the Template Form is set to "Floating" instead of "Anchored" before you enter the word(s) that you want to find anagrams of.
For multi-word anagrams, check the Multi checkbox before starting the search (if the word breaks can occur anywhere) or use the "|" character as before to mark specific positions as word breaks (as in a crossword anagram clue). For example, if you had a crossword clue "Wicked television arrangement (4,3,3)" which you guessed was an anagram of "television", you could enter "tele|vis|ion" to find all possible matches. (The answer, in this case, is "evil ion set").
Regular Expression Searches (WordFindPro Only)
If you are familiar with UNIX regular expressions, you may want to use them to do searches. To do this, tap on the "Template:" prompt on the Template Form, or the "GlobPat:" prompt in the GlobPat form, until the prompt changes to "RegExp:" - this is the RegExp form. Enter a regular expression and tap on the Go! button. In brief, the regular expressions support the *, + and ? operators, the . wild character, the ^ and $ start- and end-of-word markers, and character ranges. Grouping with parentheses is not supported as yet, nor is the choice operator |.
What's Missing in this Quick Start
Anagram hunting and crossword clue assistance are the most common uses
of WordFind, and you don't need to know much more than this to get lots
of benefit from the program. However, WordFind supports far more complicated
types of searching than this, including the ability to search for words
with known prefixes and suffixes (such as words beginning with `post'-
or words ending in `-tion'), and the ability to use numeric placeholders
(variables) to specify letters; this is useful in the type of crossword
known as a codeword, where each square is labeled with a number from 1
through 26 corresponding to a letter, and no clues are given. If you need
this sort of functionality, you should read and understand the next section.
3. Detailed Description
WordFind supports three different types of search - templates, glob patterns, and regular expressions (WordFindPro only). Of these, glob patterns are the simplest to use and understand. Regular expressions are more powerful patterns (every glob pattern can be easily rewritten as a regular expression, but the opposite is not true). but most people will never need the more powerful regular expressions. Both glob patterns and regular expressions are used for matching letters in-order, and are not much use for finding anagrams. WordFind's template searches come into play for this purpose, and provide an additional powerful set of search capabilities, applicable not only to anagrams, but to many other word puzzle needs, including Scrabble problems, substitution ciphers, and others.
3.1 Glob Pattern Searches
Glob patterns are similar to the patterns used in MS-DOS and UNIX command interpreters for matching filenames. If you have ever issued a DOS command such as "dir *.exe" or UNIX command such as "ls *.c" you will have some idea of how to use these patterns.
A glob pattern consists of a sequence of characters or character ranges, that must match the desired words. In addition, the "?" character can be used to represent any single character, while the "*" character can be used to represent any sequence of characters. So, for example, to find all words that start with "T" and end with "N" you would use the pattern "T*N". To limit this to four-letter words you would use "T??N". To find all such words that also contain the sequence "VI" in the middle you would use "T*VI*N" (if you have used the Franklin word finder you should be familiar with these patterns).
Patterns can also have `character ranges' enclosed in brackets, such as `[A-Z]' (any letter), `[AEIOU]' (any one vowel) or `[A-MZ]' (any one of A through M, or Z). To specify the opposite of a range, start the range with a caret. For example, [^AEIOU] matches any non-vowel. Thus, if we wanted to find all words that have at least three consecutive vowels, we could use "*[AEIOU][AEIOU][AEIOU]*".
There are shortcut buttons in the various forms for entering the left and right brackets, minus sign, and caret for negating character ranges, as well as the "?" character and the "*" character (in the GlobPat form the button for "*" is labelled "Any"). Section 4 describes the user interface of WordFind in some detail.
3.2 Regular Expression Searches (WordFindPro Only)
WordFindPro also supports UNIX-style regular expression searches of the dictionary. The regular expressions that are supported are quite basic. Only single word matches are allowed. As in most regular expression languages, character ranges are supported. Ranges can be negated by starting them with the "^" character; thus "[^aeiou]" represents a consonant. A period is used for "any character", which is equivalent to "[a-z]" (note that this is different to glob patterns, where "?" is used for any single character - in regular expressions "?" has a different meaning). To force a match from the start of the word, start the regular expression with a "^"; to force a match to the end of the word, terminate the regular expression with a "$" character. Unless you start a regular expression with "^" and end it with "$", the regular expression only needs to match a substring of a word. This is in contrast to glob patterns, where the glob pattern is always matched against the entire word.
Three operators are supported: a "?" means the preceding character or character range is optional ("zero or one of"). A "+" means there must be at least one of the preceding character or range, but there may be more than one. A "*" means there may be any number of the preceding character or range, including zero (none).
Some examples should help to illustrate this.
"^ab...ion$" matches eight-letter words starting with "ab" and ending with "ion".All of the special characters have shortcut buttons in the form to speed up regular expression entry. WordFindPro does not yet support the grouping of subexpressions with parentheses, although this capability may be added later; similarly, the choice operator "|" is not yet supported but may be later."^ab.*ion$" matches all words that start with "ab" and end with "ion".
"^ab.+ion" matches words of at least six characters that start with "ab" and end with "ion"
"^ab.*ion" matches words that start with "ab" and contain the sequence "ion"
"ion" matches words that contain the sequence "ion"
"a.*a.*a.*a" matches words that contain at least four instances of the letter "a"
"^[aeiou]" matches words that start with a vowel
"[aeiou][aeiou][aeiou]" matches words that have at least three vowels in a consecutive sequence
"io?n" matches words that contain either "ion" or "in"
I mentioned earlier that any glob pattern can be converted to a regular
expression. It should be clear now how this is done: each "?" character
in the glob pattern should be changed to a ".", each "*" character should
get changed to a ".*", and the glob pattern should have a "^" prepended
and a "$" appended. Although glob patterns can be converted to regular
expressions, WordFind does not do this internally, but has separate matching
algorithms for each, as glob pattern matching is simpler and can be done
more efficiently than matching the equivalent regular expression.
3.3 Template Pattern Searches
The final type of search pattern supported by WordFind is the template search pattern. This is the original method; regular expressions were only added in v2.4 and glob patterns in v2.5. Template patterns are powerful, but have one major limitation, which is that they do not support any concept of a sequence (i.e like a "*" character in a glob pattern or a "*" operator in a regular expression). On the other hand, glob patterns and regular expressions expect characters to be matched in order, which makes them unsuitable for anagram searches. Template patterns do not have this restriction, so there are many types of searches that are only possible using template patterns.
The method used by WordFind for template pattern searching is fairly complex but worth understanding if you want to make full use of it. Underlying each search are two pieces of information:
3.3.1 Match Types
In the Template form, you can choose what type of match to use. There are three possibilities, and each possibility can also be used in either single word or multi-word mode:
|
|
|
|
|
|
|
|
|
|
That is, the letter pool is unchanged, but the templates consist of
all the possible subtemplates that are prefixes of the specified template.
Using suffix matching, WordFind++ would instead find matches of:
|
|
|
|
|
|
|
|
|
|
Again, the latter pool is unchanged, but the templates consist of all the subtemplates that are suffixes of the specified template. Thus with prefix matching, WordFind++ will see if any of the following are valid words:
R RO RE ROP REP ROPE REPO
while with suffix matching, it will check:
O E PO PE OPE EPO ROPE REPO
(Actually, this is not strictly true. Because the letter pool can contain letter ranges as well as specific letters, if WordFind were to consider every possible permutation, some searches would take infinitely long (effectively, anyway), due to the exponential explosion in the number of possible arrangements. Instead, WordFind walks through the dictionary, and checks which words in the dictionary can correspond to the template and letter pool. This can make some searches much slower, but does mean that there is a finite and not too large number of matches that must be done, and thus it is guaranteed to find all matches within a "reasonable" amount of time. Of course, this is mainly true for single words - once you start searching for multi-word matches there is once again an explosion of possibilities, that even an efficient algorithm can choke on. Fortunately, if a search is taking too long for your liking, you can abort it at any time by pressing the Stop button in the Word form).
Note that in the case that the template is unconstrained (that is, all #'s), then prefix and suffix matching are identical, both having the meaning "words consisting of one or more letters from the pool". In other words, words that are made from a subset of the specified set of letters. This type of search can be very useful for Scrabble players, to find all the words you can make from a given set of tiles.
If you didn't understand the last paragraph, reread the whole last section.
3.3.2 Specifying Search Patterns
When making consultations, you don't explicitly specify the template and letter pool as two separate pieces of information. Rather, you specify a single pattern, which WordFind can split into a template and pool.
In the simplest case a pattern is a sequence of letters (whitespace may be present but is ignored). The letters may be either upper case or lower case, the former meaning that the letter must occur in that position (i.e. the letter is a template constraint), while lower case means the letter need not be in that position (i.e. it is a letter in the letter pool). Thus our example above could be specified as "RoPe", or equivalently as "RePo".
A few more examples should help here. It should be clear by now that
the order of letters in the template is fixed and significant, while the
order of letters in the pool is arbitrary.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The first two are typical examples of patterns that would be used for suffix and prefix matching, respectively. The third is typical of a crossword situation where the first and last letters are known, and it is suspected that the word is an anagram of `treated'. The last two cases are a similar crossword lookup, with two known letters only (see below for a further explanation of these last two patterns).
Elements in the pattern that correspond to elements in the template are called "anchored", while elements in the pattern that go in the letter pool are called "floating". During pattern input WordFind is either in "floating" mode (in which case letters are entered in lower case by default) or "anchored" mode (in which case letters are entered in upper case by default). A button in the Template Form toggles between these two modes. Note that the button only affects the default letter case of subsequently entered letters; it does NOT affect the actual search. If a letter appears in upper case in the pattern it is anchored, irrespective of the current setting of the input mode button, and similarly for lower case floating characters.
Letter Ranges
Template patterns support character ranges just like glob patterns and regular expressions. However, unlike in those cases, in template patterns the letter case is significant, and tells whether the character range is in the template or in the latter pool. The first letter in the range is used to decide this, thus entering "[A-z]" is equivalent to entering "[A-Z]", and indicates a template character.
Special Pattern Characters
Patterns can also have some special characters. Each has an "upper case"
(or anchored) and a "lower case" (or floating) form, analogous to letters.
The special characters are:
|
|
(LETTER POOL) |
|
|
|
|
|
|
|
|
|
The patterns above ("T.....D" and "T:::::D") are effectively equivalent, but this need not always be the case. For example, "Ta....D" and "Ta::::D" are not the same; in the former the `a' can be used in any of the five central positions, and the character in the second position can be any legitimate character, while in the latter case the `a', even though lower case, must occur in the second position, as all other positions are in upper case and thus locked in place.
You cannot use these special characters within a range (thus for example, "[*y]" is not valid).
There are shortcut buttons in the Template form for entering these characters. The shortcut buttons are labeled "Any", "Vowel" and "Consonant", but will insert the single corresponding character into the pattern when pressed. The actual character entered will depend on whether the program is in "anchored" mode or "floating" mode.
Multi-Word Patterns
You can select multi-word matching in either of two ways: by checking the Multi checkbox on the main screen, or by explicitly specifying where word breaks should be by using the character "|" within your pattern. The former method is useful when you don't care where the word breaks occur; for example, when trying to find all multi-word anagrams. The latter method is useful when the word breaks must be in known locations in the position template. For example, if you have a crossword clue that consists of a 3 letter word followed by a 4 letter word, and you think this is an anagram of teacher, you could use the pattern "tea|cher".
Be warned that multi-word anagram matching can be very time consuming, especially using the checkbox approach!
Using Variables (WordFindPro only)
You can use the numbers 1 through 26 to represent letters. This is mostly useful for a certain type of crossword puzzle often called a codeword , due to its relationship with simple secret codes (namely substitution ciphers). A codeword usually has no clues in the usual crossword sense, but instead each empty square in the grid is labeled with a number from 1 through 26. Each number corresponds to exactly one letter, and this correspondence holds true throughout the grid. For example, if the number 7 represents the letter G in a particular square, then all squares in the grid labeled with a 7 can be filled in with G's.
A single word example may be `1 2 2 1 3'. This pattern would match words such as ABBAS, ALLAY, TOOTH and TEETH. To enter such a pattern in WordFind++, you must separate the numbers with spaces (there is a shortcut button for this). You can also specify a constraint on a variable by separating it from the number with a slash character. For example:
1/[AEIOU] 2 2 1 3
is the same pattern as before except that the variable `1' must be a vowel.
All numeric variables are considered anchored; WordFind does not yet support floating variables. If you specify a floating constraint (such as a lower case letter) it will be treated as the equivalent anchored constraint.
WordFind will remember the possible assignments of letters to variables between searches and use these to constrain further searches. This is useful to maintain consistent constraints while matching different words in the grid. Be warned, however - this process can eliminate more than you would like, particularly if the word on the grid happens to not be in the WordFind dictionary you are using. Interrupting the search is another way in which the constraints can be improperly computed, and thus WordFind only records the constraints from a match after you have stepped through all the possible matches in the Word Form.
You can discard the current constraints and start afresh at any stage selecting Reset Constraints from the Edit menu in the Template form, or by pressing the Rst button in the Variables form (see below for more about these).
As you become confident about the associations between the numbers and the letters in the grid you can start using variable assignments. Assignments differ from constraints in that they are made explicitly by the user, are reset separately, and must be of a single letter to a variable (whereas the constraints are of character ranges that can match the variables). To assign a letter to a variable, you need to tap on the variable in the Variable form. That pops up the Variable Assignment dialog. You can clear all variable assignments by pressing Clr in the Variable form or by selecting Clear Assignments from the Edit menu in the Template form.
3.3.3 Word Length and Count Constraints
You can specify minimum and maximum word lengths for prefix, and suffix, and the minimum and maximum number of words allowed per match for multi-word matching. If these are set to the default they will have no effect. They can be useful when generating multi-word anagrams with patterns that contain several A's or I's, as WordFind will likely churn out thousands of patches in these cases starting with the words `A', `AA', and/or `I'. Setting the minimum length to three (for example) can help prevent this.
3.3.4 A Tip for Multi-Word Anagrams
Quite often there will be thousands of possible anagrams and it becomes
impossible to hunt down the good ones. There is a technique to help in
this case - look through some of the possibilities, and select a word you
think is appropriate in the final anagram. Then subtract this word from
the input, and see what words can be made from the remaining letters. For
example, consider VEGETARIAN. We see that some anagrams have the word RAVE,
and decide to use this. This means we must find anagrams of the remaining
letters, namely GETIAN. We find the word EATING. Thus VEGETARIAN=EATING
RAVE.
4.The User Interface
The Template form is slightly different for each program:
WordFind++
WordFindPro
(note the popup trigger for selecting the dictionary).
The Template Form is what you see when you start up the program for the first time. The various controls are:
This
is the dialog box for selecting the type of matching to use
This
is the dialog for selecting a minimum word count.
This
is the dialog for selecting the minimum word length for multi-word matching.
The dialogs for entering the maximum word count and maximum word length are identical apart from their titles.
After pressing Go! in the Template Form, WordFind will display the matches found in the Word Form, shown below.
The
Word Form, displaying the partial results of a pattern search.
The controls in the Word Form are:
If you press the Vars button, the Variable Form will be displayed. This
is shown below:
The
Variable Form, showing some computed variable constraints and one assignment
There are three buttons at the top right, namely:
The Set
Variable dialog, with the selected variable currently set to be `R'.
When in a search form, you can access a menu bar with two menus. the Edit Menu and the Help Menu. The Help Menu has just one selection, namely `About WordFind. The Edit Menu is shown below:
Many of these are standard operations for Palm apps for text editing. The ones specific to WordFind are:
Both WordFind++ and WordFindPro also allow you to switch to the Glob Form to do glob pattern searches:
Using A Keyboard
If you have a Palm keyboard, you can make use of some additional key assignments (you can do this with Graffiti too but its more tedious than using the buttons on the screen). In the search forms, you can use the tilde character ~ to recall a history item; just enter a digit from 0 through 9 after the tilde. ~0 recalls the last pattern, ~1 the pattern before that, and so on.
In the Word Form, the following keys are equivalent to buttons on the screen:
5. The Dictionary Manager (WordFindPro Only)
WordFindPro includes a command-line utility for MS-Windows systems named dictmgr.exe. This program can be used to dump the contents of a .pdb dictionary database to a word list in an ASCII text file, and to produce .pdb dictionary files from word lists in ASCII text files.
To dump the words in a dictionary database to the screen, use the form:
dictmgr -d pdbfile
If you want to send the output to a file, you can use:
dictmgr -d -o txtfile pdbfile
To build a .pdb dictionary from a word list in a text file, use:
dictmgr -n name -o pdbfile txtfile
The name should be a short descriptive name. It must be quoted if
it contains spaces. The input txtfile must have one word per line.
You can specify up to 16 txtfiles on the command line and the word
lists will be merged into a single .pdb file.
You can also do searches with the program, using the form:
dictmgr [-o outputfile] [-w minwords] [-W maxwords] [-l minlength] [-L maxlength] [-Multi] [-t All|Prefix|Suffix|Regexp|GlobPat] -? pattern pdbfileThe various arguments correspond to the various fields and selectors in the Template Form of the WordFind program. The search type can be abbreviated to a single letter. Similarly -Multi can be abbreviated to -M.
The following example dumps the words in the large dictionary to an
ASCII text file called words.txt:
dictmgr -d -o words.txt large.pdb
The next example recreates the large dictionary database from the
dumped word list:
dictmgr -S -n "Large" -o large.pdb words.txt
Note that building a .pdb file can take quite a while, especially
for large word lists!
The -S flag shown above tells dictmgr that the words.txt file is already sorted, which makes dictmgr start up faster and use less memory.
Here is an example of a search, to find all pairs of words of length
4 or 5 characters, that can be made from the letters of the word anonymously
using the medium dictionary (using prefix matching):
dictmgr -w 2 -W 2 -l 4 -L 5 -t P -M -? anonymously medium.pdb
A version of the dictionary manager is also available for FreeBSD
upon request.
6. Registration
WordFind++ and WordFindPro are shareware, and cost US$10 and US$15 respectively.
The trial versions can be used with the demo.pdb dictionary for 21 days
for evaluation purposes. If you continue to use any of the programs after
that, you must pay for them. The full versions can be purchased and downloaded
from PalmGear Headquarters at http://www.palmgear.com. Registered users
get access to other dictionaries, to future updates, and to e-mail support.
7. Disclaimer
This software is provided "as is", and the author makes no warranties
as to its fitness for any purpose.
8. Version History
Note - I only started keeping track of this with version 1.4; the rest are as I can remember.
Changes in version 1.1
Added the ability to restart the current search.
Changes in version 1.2
Added the progress bar.
Changes in version 1.3
Added the Stop! button to interrupt searches.
Added the special character shortcut buttons.
Changes in version 1.4
Introduced the history feature, and the Clear button, and preserved the main form settings better between consultations.
Changes in version 1.5
Made the main form settings and history persistent, even if you temporarily switch to another application.
Made the button labels more meaningful.
Fixed some bugs in v1.4.
Changes in version 1.6
Added a button shortcut for `-'.
Reduced stack usage; the introduction of the history feature increased stack usage to such an extent that blowing the stack and crashing the Palm was possible in 1.4 and 1.5.
Changes in version 1.7
Fixed the problem of the pattern field being clobbered by an old value when changing the mode toggle.
Added support for variables (numeric placeholders).
Added support for `|' as a word separator.
Tidied up some of the screen layout.
Created HTML manual.
Changed the open mode of the dictionary to read-only to support flash RAM database residency.
Changes in version WordFind++ 1.8 / WordFindPro 1.0
Fixed all known reproducible bugs.
Reimplemented variable support to work more intuitively.
Radically reduced stack requirements, moving much of the data that was previously allocated on the stack to the global variable space.
Added the dictionary maintenance program and split into two products.
Improved the speed of the searches.
Changes in WordFind++ 2.1 and WordFindPro 1.1
WordFind++ 1.8 should really have been called WordFind++ 2.0, and so I'm jumping to 2.1 here which makes it easier to keep in sync with WordFindPro's version number.
dictmgr will now sort the input word lists if necessary, and no longer requires the word lists to be presorted.
Added a Scrabble (tm) tournament dictionary to those shipped with WordFindPro.
Fixed a bug in the word length handling. If the minimum word length was set to some positive value but the maximum word length was set to `Any' then the word length settings didn't have any effect.
Fixed a bug in the drawing of the progress bar.
When you start a new search (by starting the application or tapping on New in the Word List form), the pattern is now cleared instead of being set to the last one used.
You can now use a newline in the graffiti area to start a search as an alternative to tapping on the Go! button.
Changes in WordFind++ 2.2 and WordFindPro 1.2 (31 April 2000)
Added the additional key assignments to make it easier to drive WordFind from a keyboard
Fixed the version number shown in the About form.
Changes in WordFind++ 2.3 and WordFindPro 1.3 (June 2000)
Fixed several bugs in the dictmgr program, and speeded it up a little.
The dictmgr program can now be used to do searches as well, which is much faster than doing them on the Palm device (although not usually as convenient).
Prefix/suffix matching wasn't working properly if the multi-word checkbox was enabled; this has been fixed.
Changes in WordFind++ 2.4 and WordFindPro 2.4 (March 2001)
Change the names from PalmWordPro/++ to WordFindPro/++ to avoid trademark and copyright issues with Palm, Inc.
Updated the WordFindPro version number to 2.4, so that the two programs are consistent, to reduce confusion over which is more recent.
Added support for regular expressions to WordFindPro.
Improved error handling; syntax errors in search patterns are now reported as such, whereas before they would be reported as `no dictionary loaded'.
When WordFindPro is started, it will show the name of the default dictionary, instead of "Default". It will show "No dictionary" if no dictionary is loaded, as opposed to "Default".
Variable (numeric) placeholders have been removed from WordFind++.
The memory footprint of the programs has been reduced (although in WordFindPro this has been offset by the addition of the regular expressions).
Updated to use PalmOS SDK 3.5. Note that the programs now require PalmOS 3.1 or later to run.
Changes in WordFind 2.5 (March 2001)
This is a stopgap release addressing some of the most common user requests I have had, as it is unlikely I will have time for another major release for quite a while.
Added the Glob Form and the glob pattern searching.
Tapping on "Redo" now takes you back to the search form (without clearing the pattern field) instead of restarting the search.
Tapping on a word in the Word Form copies it to the clipboard so it can be pasted later.
Improved the error messages.
Changes in WordFind 2.6 (March 2001)
Updated the help info that you see when tapping the (i) in the About dialog.
Rud van der Ham suggested that if a glob pattern contains no `*' sequences, then it can be converted to a template, which results in faster matching. This is now done automatically (thanks Ruud for yet another good suggestion!).
Updated dictmgr.exe to support glob pattern matches.
Changes in WordFind 2.7 (May 2001)
Fixed a bug in the handling of template searches with floating elements. This bug was preventing WordFind from finding all possible matches.
Bugs Fixed in WordFind 2.8 (February 2003)
When a list of matching words was shown, if you tapped on a word it disappeared.
If you specified a multi-word match, and set the number of words to Any but the maximum length to some number N, afterwards the min/max number of words and lengths were all set to N.
Using a stroke to switch between upper/lower case didn't toggle the state of the Floating/Anchored button.
A bug in template matching - "retinaap" and "retinaag" each displayed matches but "retinaa[pg]" didn't show any matches .
8. Known Bugs/Limitations/Common Problems
There are no known bugs in this release (there are some shortcomings, but that's what progress is all about!)
There are some limitations. Search patterns and regular expressions are restricted to 63 characters, while words are restricted to 31 characters.
You can have at most 32 floating elements in a template pattern (more than this and WordFind will probably take forever to find anything anyway).
From questions I get asked by e-mail, I think I should just stress a few points:
You must load a dictionary .pdb file or WordFind will just show a "No dictionary!" error when you try to search.
Think of a template search in terms of the two components of letter pool and word template. Imagine the letter pool as a group of letter tiles, some of which are like jokers or wildcards, although they may be restricted to sub-ranges of the alphabet (such as vowels). These tiles have to be placed into a crossword like template, and some of them may have to be used in specific positions in that template.
Remember the Floating/Anchored button is just like a Caps Lock button - it has no effect on characters already entered but sets the letter case for further input. It is the actual case of the letters as they appear on the display that determines whether they are fixed in position or floating.
To find all words that start with some known prefix, such as NEO for example, you would enter a pattern like "NEO::::::::::::" (remember `:' corresponds to `any letter'). You would select Prefix matching, with a minimum word length of 3. Similarly, to find words ending with a known suffix, such as OLOGY, you would enter a pattern like "::::::::::OLOGY", select Suffix matching, and specify a minimum word length of 5.
To find all the words of up to length N, that can be made from a specific
set of N letters, enter the letters in lower case in the templat form and
select prefix or suffix matching.
9. On the Economics of Shareware
I occasionally get mail from people complaining that these programs are "too expensive". I also occasionally get mail from people who want to write shareware for the Palm platform asking me whether there is any money in it. The following comments may be of interest to both these groups.
Writing Palm applications involves a reasonable learning curve. Even once you know the APIs and the platform fairly well, it can be a frustrating experience. Many of the API routines do not check arguments, and passing bad arguments through can cause crashes at a later stage, so debugging can be a tedious and time consuming process.
I have not kept track of how much time I have spent on writing these programs, but I think that three months of full-time work is a reasonable estimate. My income from these programs has over the past year and a half has been approximately $2000. That is gross income. Once that is adjusted for income tax, and the cost of the development tools, it is closer to $1000. Which works out to about $20 per day of work.
This is certainly no way to make a living. If it wasn't for the fact that I use these programs myself, there is no way I could justify the amount of time I have spent developing them. Certainly the time spent on them is time I could have spent on pursuits that may have had much better payoffs, whether that be doing consulting work, or spending more time with my wife.
I think it may be possible to make a living writing programs for the Palm platform, but these would need to be for vertical markets and would have to be charged for based on contract programming rates. Alternatively, the program would have to have mass-market appeal, although even then it is questionable whether the work would pay for itself.
To those people who complain about the cost of the programs, I can simply say if you think they are too expensive, don't buy them. These programs are cheap - given the time spent on them, and the income generated from them, I am almost giving them away. It doesn't surprise me at all to see some people trying to charge up to $50 for Palm programs. That is the only way they will be able to recover their investment of time.
For those people who are considering writing shareware, be warned that you are very unlikely to make much money this way. But by all means go ahead anyway - you can get a lot of satisfaction from writing Palm programs.
On a more technical note, WordFind was written in C++, using a simple
application framework built on top of PalmOS. I am currently documenting
this framework, and will be submitting the code and the documentation to
Dr Dobb's Journal, for possible publication late in 2001. The editors of
DDJ have expressed lots of interest in this, so I think that the likelihood
of publication is very good. People who may be interested in programming
the Palm devices should keep an eye out for this article and code; I am
sure it will greatly accelerate their learning curve.
10. Contacting the Author
I am always interested to hear bug reports, feature requests, and of novel uses for WordFind (such as using it to solve puzzles in computer adventure games, substitution ciphers, and so on. Please mail any comments to gram@bradygirl.com
I am also interested in (non-copyrighted) word lists and dictionaries in other language, provided they use the 26 letter latin alphabet .Thus far, Ruud van der Ham has contributed two Dutch dictionaries to me (as well as some useful ideas for shortcuts in WordFind 2.1 and 2.2). Claude Sabatier has contributed a French dictionary, and a dictionary of proper names in French and English. These dictionaries can be downloaded from the website by registered users.
Enjoy using WordFind!