WHAT User Guide (2-Jul-18)

This is a user guide for the powerful second-generation
anagramming program named
WHAT, for
Wolfberg's
Helpful
Anagramming
Tool.
WHAT is really a toolbox of powerful tools,
with many facilities. You can make effective use of
WHAT right away by using just a few of its key features,
and you can learn what these are in an introductory document entitled
"WHAT's First".

1. History

This document describes the WHAT program Version 2.2
Build 96, which was released on the web on ??-Jun-16. To see the new and
altered behavior of the program, see:
WHAT Version 2 Release Notes.

WHAT has been in use in the Boston-area Scrabble® clubs
since the Spring of 2004. Mike announced and demonstrated it in public
for the first time at the 2004 National Scrabble®
Championship Tournament held in New Orleans, LA in early August, 2004.

Mike first wrote the ANA
program in the early 1980's, and, with years of its
use, he came to want the program to be able to be more useful in
answering queries which a competitive Scrabble® player tends to ask,
either based on situations that arise in games or for the purpose of
studying words in an organized manner. For the most common of queries,
WHAT is used in much the same manner as
ANA, but it has many new
features that make it considerably more powerful.

1.1 Mike's Credentials

Mike Wolfberg is a highly experienced programmer, with several
decades of software development experience. Mike's computer use
began in the early 1960's, when he was an undergraduate student
at M.I.T. After completing his B.S. degree, Mike continued his formal
education at the University of Pennsylvania, where he received one of
the early Ph.D.'s in Computer Science. Mike has been an expert
Scrabble® player since 1980, and he attributes his fast rise to a high
level of play to his use of computers, before they were so prevalent
in the game.

WHAT is a relatively large program, initially designed,
developed, and documented
by Mike in about 1 1/2 years of intense work. Mike has supported and enhanced
this program since then, often devoting his full attention to this project.

2. WHAT Documentation

This user guide is not a tutorial with introductory examples, but an
extensive reference document with details about the program.
Early reviewers have indicated a preference for introducing the many
features of WHAT
through examples. At this time, there is a separate
document entitled
"WHAT Examples", and it is based on the TWL98 lexicon. It will eventually
be updated to correspond with the OWL3 lexicon, which was adopted for
use in North America starting in April, 2015.

It is our intention to write a series of introductory tutorials, and
the first one of the series, entitled
"WHAT's First",
is a great place to
begin to learn about the program. A couple of other tutorials have
been written, to introduce the topics of flashcarding and the
creation of study lists. Until more tutorials are available, please
refer to this user guide to learn about all the features of
WHAT. There is companion document to this guide, that is
a reference for the WHAT command language; it is entitled
"WHAT Command Language".

On-line help is also planned for the program, but it is not yet provided.

Although
WHAT was produced especially for players of a popular word game
played on a 15 x 15 board, it can be helpful for other word games and
study. Some of the WHAT features are helpful for the
21 x 21 version of
the 15 x 15 game, a 5 x 5 grid game, a 10 x 10 grid game in which letters
can build upon other letters, and the game of Anagrams.

3. Electronic Word Aid Features

If you are a first-time user, you
may find it more comfortable using features of some
electronic word aid devices with which you are already familiar.
When WHAT first starts up,
the workspace includes a short paragraph
mentioning this, and you are instructed to look at the First Use
tab to the left. On that tab there is a graphical button labeled
"Enable Electronic Word Aid Features".
Use the left mouse button to click
on that graphical button, and you will cause the mostly blank contents of
the First Use
tab to have some instructions, a small display
window, and five graphical buttons that emulate physical buttons on such
devices. When typing letters on the keyboard, lowercase and uppercase
letters are equivalent.

If you are not familiar with such electronic devices, you may as well
proceed to using WHAT the way it is intended to be used;
therefore, we will
not go through a detailed description of the use of these features.
We will at least point out
these differences between WHAT and word aid devices:

WHAT does not do the spelling-correction
guesses.

When an electronic device produces a list of words as an answer
to a query, you can look at each word individually in the display.
You can then ask for the definition of a word being displayed by
pressing the Enter button.
In WHAT, you are instead shown the entire list of answers in
the workspace. When the answer is large, the first part of the answer
may be scrolled off the screen. You can use the scroll bar at the
right to go back and see the answer from its beginning. You could
also type a WHAT command such as

^25'

followed by pressing the Enter
key on the keyboard to see the first 25 words of the answer.

If you want to see an individual word's definition, double-click on
the word, and the definition is shown in the Definitions
area above the workspace.
You could alternatively request to see the definitions of all
words in the answer list by typing a new command in the workspace
consisting of merely one quotation mark followed by pressing the real
Enter key on the keyboard.

WHAT is currently not supporting any features
of including premium squares when specifying a pattern.
WHAT already does support the
scoring of words placed at specific places on the board, and queries
of this level of sophistication may as well be made using
WHAT's features. If you and others find this to be
a serious omission, then such premium square
features could be supported in the future.

The scores reported by WHAT are not always the same
as some electronic devices would report. In particular, when a query
is made that includes more of a letter than the bag has,
WHAT is smart about scoring such a word.
For example, if you ask an electronic device to build using
PIZA and a blank,
it may score
PIZZA,
as 25 points,
whereas WHAT scores this as 15 points.
This is because WHAT understands the bag has only one
Z, and so a word with
two Z's must have one of
these represented by a blank.

Once you are familiar with the use of WHAT
for anagramming and pattern matching, you will likely no longer want to
employ these electronic word aid features. You can update initial
settings so that one of the other tabs on the left is initially showing
when WHAT starts up. It is
recommended that you will make this be the Query tab
instead of the First Use tab. On the other hand, if
you want to run WHAT on a screen with a small pixel
density, such as 800 x 600, it will run without the left tabs showing.

When using these word aid features, you will be seeing
WHAT commands being constructed and performed for you.
For example, if you are seeking
words that end in AH
from the letters EKNJSUH
in your rack, the
constructed WHAT command is:

*ah,eknjsuh/Z/+B/<$$

In case you are curious, we will explain what this means. The comma separates
the specified pattern from the specified rack. The pattern means that there
can be any number of letters preceding
AH in the sought words.
These are the remaining command constituents:

/Z

-

score 0 for blanks used from the rack

/+B

-

a 50-point bingo bonus should be used for words at least 7 letters

/<$

-

sort the presentation by decreasing order of scores

$

-

include scores in the presentation of the answer

4. Examples and Applicability

Here are a few examples to give you an idea of some of the kinds of
word-game-oriented queries for which WHAT is applicable:

With AEILNOS,
is there at least one 7-letter word -
"yes" or "no"?

With AEFKNOT,
what are the highest-scoring opening plays?

With the rack
ACILMT?,
what are the possible triple-triple bingos through an
R
in the 4th character position? There is indeed one such word.

What words have both a prefix of
OVER
and UNDER?
Which words with a prefix of OVER
do not have a matching UNDER
word, and vice versa?

What 8-letter words can be formed by adding an
S
to the front of a 7-letter word, such as
SCATTIER?
There are 383 such words.

What are the 5-voweled 8-letter words that start with
Z,
such as
ZOOMANIA?
There are 5 such words.

So these are typical of the kinds of queries you will make using
WHAT.
You will be able to formulate some complex queries,
such as the fourth example just given above. Here are some other examples:

What are the 7-letter palindromes, such as
REVIVER?

What 7-letter words can be spelled backwards, including palindromes and
non-palindrome words, such as
GATEMAN?

What are the 35 most-likely 7-letter words?

What are the 35 most-likely 7-letter racks
that have 7-letter words?

What words that end in
L
lead to the same word extended to both
LED
and
LLED,
such as CANCEL?

What words that end in
INGS
are not also words without the
S,
such as ABLINGS?

How many bingos are there with
LRAIOU?,
and if any, what letters can the
blank be, and then what is the first letter of each of the words, and
then what are the words?

Generate a random rack with a 50% chance of having a bingo, such as
AEIORST.
This particular rack has no bingos, but it is a likely one.

What 7-letter words can be played above and parallel to
RETAINS,
also forming 7 two-letter words?

The document
"WHAT Examples"
document includes the command sequences which can be used to answer the
above sample questions.

We could continue for quite some time with the presentation of examples, but
what is here should serve you with the idea of what
WHAT is for. You can use
it as a situation analyzer, as a quiz producer, and as a word study tool.
You can use it to help you develop study lists.
WHAT is also intended to
find steals when playing the classic game of Anagrams, where already-found
words can be stolen by adding letters from the pool (or possibly other
words) and rearranging. You can use
WHAT as a way to look for the spelling
of words you mostly know. It can be used to solve hangman-type puzzles,
which also show up in crossword puzzles, but for crossword puzzles,
capitalized words are often permitted as answers, and such words are
missing from WHAT's current lexicons.

5. Command Language Orientation

Graphical user interfaces (or GUIs) are often used to support programs like
WHAT,
where there are many options and many states. GUIs are especially
useful for occasional users of such programs, but they are not as easy and
quick to use to answer simple little questions, such as those that are
expected to be asked of WHAT.
Therefore, WHAT is designed with a more
historically traditional command line interface as the fundamental method
of making queries. A GUI is then used along with that to indicate what the
program understands the queries to be.
The GUI part of WHAT exists as an
optional aid. You are also permitted to use menu picks and some GUI pointing
and clicking to make queries, but these are likely to be more tedious than
typing a few characters of the WHAT command language.
The cost of this is that there are many WHAT commands,
and learning how to use the tool
effectively will probably take you longer than learning a GUI-oriented
program. We believe the current command line philosophy is better matched to
the needs of a frequent WHAT user
than the typical GUI style of use.

When you begin to type a command,
the GUI presents the state of the program as indicated by the long-term
state of WHAT and then possibly modified for that query.
As soon as you
begin to type characters for a new command, the GUI presents the
current state as indicated by long-term settings and perhaps altered by
the current command, even as you are typing it.

The WHAT
command language was designed intentionally to be succinct. It
is therefore not easy for a person to decipher a command. The intention
is that you can compose commands effectively, but you may find it difficult
to look at a command and decipher what it means. The main reason for
this is some characters in the command language are used for several
different purposes. A left angle bracket is such a character. Because
of this, WHAT may someday include a command report feature,
so you can see what a command means in English.

6. The GUI

Having just said that WHAT is designed to be used via
your typed commands, WHAT provides a
GUI that you can use both for input and output communication with the program.
Since the command repertoire of WHAT is so extensive, when
you are still inexperienced, you will likely find it helpful to indicate
your intentions
via using some of the GUI, as well as by typing command characters.

While constructing a command,
if you alter the state of WHAT using GUI
actions, equivalent command characters are inserted into the command line.
Likewise, as you type characters on the command line, the line is scanned
after each change, and the GUI represents WHAT's
best interpretation of the current command.
Errors on the command line may cause WHAT to stop
scanning the line; but in the absence of errors, you can see how your
command may be changing WHAT's state.
Error diagnosis is not done until
the command is terminated with the Enter key,
which indicates the command
should be performed. You can instead ask that the line be checked for errors
without any action taken by holding down the Ctrl key
while pressing the Enter key.

There are several characters in the GUI that are underlined, and such
characters are called "accelerator characters".
You can get to that part of the GUI by pressing the Alt
key along with that character.

If a button has focus (i.e. WHAT is accepting your
input in this place), you can see it highlighted, and then you can press the
Enter key to have the same effect as clicking the button.

In menus, pressing the up-arrow
and down-arrow keys will move you up and down.
Similarly, if you are in a box that has a list of items, you can move
up or down the list using the arrow keys.
If you are at a check box, the space key can be used
to flip between the states of checked and unchecked.

You are welcome to alter the height and width of the
WHAT window, including
maximizing it on your computer screen. There is a minimum size that you
will be permitted to use for each of the dimensions. This minimum is still
large enough so that all GUI controls remain visible on the screen.
You may also adjust the font size of the workspace via the View
menu when WHAT is freshly started.
On the computer used to develop WHAT, the minimum
workspace size is 15 rows by 51 columns when using the default font of
"Courier New 16".
With the window maximized, the workspace size is 30 x 89 using that font.

The workspace window is main part of the WHAT window,
where you type in commands and see results, primarily presentations of
the slate. The workspace is arbitrarily long, and its width is settable.

You can clear the workspace either via a subcommand
/CW or via clearing buttons
available on the WHAT tab in the upper right of the
WHAT window. You are likely to want to clear the workspace
when you are preparing to print something. Printing in WHAT
is done using the contents of the workspace.

The workspace window width has a particular value based on the size of the
WHAT window. By default, the workspace width and
the workspace window width are the same, since the width of the workspace
is taken from the width of the workspace window.

You can see the width of the workspace on the Presentation tab
on the left side of the WHAT window.
Look for the box in the Layout section
labeled Max Width. The default contents of this box is
"workspace width&quot. If you set the width to a particular number
of characters, such as 80, it will show as "80 chars." in the box.
To make such a change, you perform a command, usually a long-term one
(see section
"Short-term and Long-term States"),
and the GUI can help
you formulate the command via a dialog which comes up when you click on
the ellipsis at the right end of that Max Width box.

When the workspace width is larger than the workspace window width,
and when there are long lines, the workspace window will be scrollable.
The only way this will happen is when you have chosen that long lines should
not be wrapped. By default, lines longer than the workspace window width
are wrapped to the next line (at spaces). You can control this via the
View menu. If you have turned off wrapping, you can then get lines
which are fully viewable only by scrolling.

Line wrapping is relevant only for lines which contain definitions, since
otherwise, presentations are formatted such that they do not extend beyond the
workspace width. There are two different widths which pertain:
the workspace width and the workspace window width. Usually, these two quantities
are the same, since by default the workspace width is set from the workspace
window width. However, you may set to the workspace width to a specific
number of characters or a specific number of columns.

The workspace window width is set indirectly based on the
width of the WHAT window, and you are shown its dimensions
at the lower right of the WHAT window. The wrapping of long
lines is based upon the workspace window width. The formatting of
slate presentations is based upon the workspace width. This distinction may
be important for you to understand when you are preparing the workspace to
be printed. Lines are printed according to how they are wrapped in the
workspace. If a long line is not wrapped, or it is wrapped too far to the
right, the printed form of that line cuts off near the right edge of the
page.

On Mike Wolfberg's primary printer, using the default settings of
10 pitch Courier New font, and with the default left margin, a line is printed
with 12 characters per inch, and so there is room for about 95 characters.

6.2 Menus

Although the design for WHAT features the use of
a command language, the
program also allows for your making menu picks in combination with
typing keyboard keys to make up commands. If you are a new or
occasional user, you may
find this useful, but once you are a frequent user of
WHAT, you are likely to formulate commands by typing
commands on the keyboard only.

Words in the menus are underlined to show what accelerator keys you
may type to select the menu items. These underlines do not show up in the
menu until you press the Alt key.

We are aware that this user guide focuses on the command language,
and it does not always mention how to use menu picks and other pointing
and clicking to get
WHAT to make up these commands. This deficiency may
be rectified in the future.

6.3 Accelerator Keys

You can use the mouse to move and click to control the
WHAT graphical
interface, but you also have the option to press various keys while
holding down the Alt key in order to make choices.
One area where this
can be used is in the menus. You can press
Alt+<letter>, where <letter> is
the underlined letter of one of the menu choices, usually the first
letter; for example, you can
pull down the Tools menu by pressing
Alt+T.
You can then continue to
make further submenu picks in the same way; for example, you can press
Alt+T,
Alt+W, and
Alt+C
to bring up a dialog to copy items among wordlists.

The WHAT screen includes some underlined characters,
and these are indicators of other accelerator key choices you have. For example,
notice on the Query tab on the left side of the screen,
there is an underlined
S
to indicate you want to filter by score.

6.4 The Tab Controls

The WHAT
screen includes two regions where there are tabs on which you can
click to see alternative graphical controls.

On the left side of the
screen is a 3-tab control, where you have the choice of seeing
electronic words aid features, query construction info, or slate
presentation info. You can click on the tab to move to the one
you want, or you have this other option:
You can switch between the 2 latter tabs by pressing either
Ctrl+Q or
Ctrl+P.
To return to the First Use tab, you must click
on the tab itself.

The larger tab control in the upper right of the
WHAT screen has 8 tabs.
You can click on a tab to bring it up, or you can press
Ctrl+\
to advance to the next tab. This key was chosen since it is in the upper
right area of the keyboard, to match where on the screen the tabs are.

6.5 Fly-By Hints

If you would like to be shown pop-up hints as you move the mouse around
the WHAT screen, use the menu pick
View→Hints→On
to enable these hints.
If they are annoying you, turn them off. Hints are provided for many but
not all of the graphical controls of the WHAT screen.

7. Reading this Document

As with other powerful programs with many features, such as Microsoft Word,
you can begin to use WHAT employing only a small percentage
of its available features. As time goes on, you can explore more features, such
as when you have something new to do. Reading through this entire
specification is probably not a good way to become familiar with
WHAT if
you have never used it or its predecessor before. Coming back to reading
parts of this user guide from time-to-time may prove useful, but it is probably
too overwhelming to take in all there is to offer in one reading.

Many commands are described with specs, such as
"<number>^",
to indicate
some number is to be supplied at that place in the command. These category
names, such as "number",
are enclosed within non-bolded angle brackets.
In this document, angle bracket characters
you are meant to type are shown in bold and are slightly larger
(e.g. < >).
Most of these category names are
self-explanatory, and a few special categories are defined explicitly.

8. Style of WHAT Use

In the workspace region, you interact with
WHAT by typing command
lines. WHAT prompts you to type a command line with:

WHAT?:

and the cursor remains on that line following one space as separator. You
type some characters and then complete the command line by pressing
the Enter key.
WHAT then does something. It may not always do something
you can see, according to what you have asked it to do in conjunction with
short-term and long-term settings. For example, if you start to use
WHAT and type the command line

nrtaeei

followed by pressing the Enter key, you will be shown the answer:

ARENITE RETINAE TRAINEE

WHAT
has shown you the words formable from the letters you typed by using
all the letters. This is a prototypical example of what you as a
user wants to know, and making a short query of typing just those letters
is natural. There are many variations on this:

If you type one or both angle brackets
(< >)
on the command line, the
words are presented with front
(<)
and/or back
(>)
hooks; if you type

nrtaeei>

you are shown the answer:

ARENITEs
RETINAE
TRAINEEs

with the hook letters shown in lowercase. A hook is a letter that may be
added to a word at one end or the other to form a new word. The term comes
from how in the game played on a 15 x 15 board you must connect with words
already on the board.

Another possibility is you would like to know the number of words in the
answer, but you don't yet want to see the answer. You would then type:

nrtaeei#

and the result is:

Number of words = 3

At this point, the words that constitute the answer to your query are
"written on the slate", but it is your choice to not see what is on the
slate in its entirety just yet. You could ask to see the first letter of
the 2nd word on the slate by typing the command:

1/2

and you would then be told:

Letter 1 of word 2 is: R

Had you left off the 2
and typed only

1/

you would be told:

Letter 1 of each word is: A,R,T

If the list is longer than 25 words, the commas would be dropped, and if the
list is longer than 50, only the first 50 words are so described.

Rather than continuing to describe WHAT with examples
in this document, we now describe the
program in a more complete way to give you an understanding of what all the
possibilities are for formulating commands. There is a comprehensive collection
of examples is a separate document appropriately entitled
"WHAT Examples".

If this is your first time reading this user guide, and if this is your
first exposure to a description of the program, you are advised to set
this aside now and read the
"WHAT's First"
document. That tutorial will provide you with enough knowledge to
begin to make effective use of WHAT.

9. Command Type-In

As you type a command line to WHAT,
you have the ability to edit the line
before submitting it for processing (i.e., getting performed).
These editing characters are supported:

Backspace

-

at the command start, do nothing; otherwise erase
the character before the cursor and move the cursor to
the left by one character.

Ctrl+Backspace

-

erase one or more previous characters in the current
command back such that what looks like the previous word
is eliminated.

Delete

-

at the command end, do nothing; otherwise erase the
character at the cursor and leave the cursor where it is.

Ctrl+Delete

-

erase all the characters in the current command and
move the cursor to the position of the command start.

Insert

-

toggle between two modes of character input - inserting
and overlaying.

Ctrl+Enter

-

check the current command and report any errors
in the middle part of the status bar at the lower border
of the WHAT window.

Ctrl+T

-

at the command start or end, do nothing; otherwise
interchange the character to the left of the cursor with
the character to the right of the cursor and then move
the cursor to the right by a character.

Home

-

move the cursor to the start of the command.

Ctrl+Home

-

scroll the workspace to its beginning.

End

-

move the cursor to the end of the command.

Ctrl+End

-

scroll the workspace to its end.

left-arrow

-

at the command start, do nothing; otherwise move
the cursor one character to the left.

right-arrow

-

at the command end, do nothing; otherwise move the
cursor one character to the right.

Ctrl+A

-

select all text in the workspace.

Ctrl+B

-

same as left-arrow, Backup one character.

Ctrl+C

-

copy selected text (see below).

Ctrl+E

-

same as End.

Ctrl+F

-

same as right-arrow, go Forward one character.

Ctrl+V

-

paste text from the clipboard (see below).

Ctrl+X

-

cut (or copy) selected text (see below).

Ctrl+Z

-

minimize the WHAT window - this
works even from within the Challenge Dialog.

F1 through F12

-

function keys are used to input user-chosen character sequences.
You can specify these assignments via a
dialog available via the Edit menu, and initial
values can be established in WHAT's initialization
file. F10 cannot be used, since it selects the menu.
Function keys represent text to be appended to the
command line, and there are two options, whether to:

first clear the command line, and/or

follow the appended text with an automatic Enter
key press to cause the command to be performed.

WHAT
deals with selecting, cutting, and pasting, in conjunction with the Windows
system clipboard. You may insert text only on the command line to the
right of the prompt. If the cursor is elsewhere when you attempt to
paste, it is first moved to the end of the command line. Inserted
text must be all on one line. If the clipboard includes
more than one line of text, only the text on the first line is used in
the paste operation, and then any text following the end of the pasted
first line is lost. If you attempt to cut text that is not all within
the current command (following the prompt), a copy is done instead. One
exception to this is if you include part of the
WHAT prompt in what you
are cutting; in this case, a cut is done, but it does not include
characters from the prompt.

If your mouse or your computer has a mouse wheel,
WHAT will respond to
the wheel by scrolling the workspace. You can also use the
scroll bars on the right edge of the workspace to do this.

9.1 Comment Commands

You may type double slash
(//)
on a line to cause WHAT to ignore the
remainder of the line. In this way, you can type comments that have
no effect on WHAT.
This syntax is the same as introducing a comment in the C++ language.

9.2 Command History

Unless you intentionally clear it, WHAT retains a
history of the commands you have typed in since starting up the program for
its current session. Therefore, you can always go back and find a command
you may want to resubmit to WHAT.
There are facilities to see several of these commands at once, or you can
bring back a specific command by its number. There are a few kinds of
commands that are purposely not noted in the history. One example is
the command to show you a random rack.

WHAT retains complete commands in its history, but the
Command History area of the WHAT window,
just above the workspace, shows beginnings of these commands, as much as
can fit in the limited width area (which is not horizontally scrolled).
If you select an old command from there via the pull-down menu, it will be
placed into the workspace and it becomes the current command.

These command history keys and commands are not supported by menus and
dialogs at the present time. This omission of low significance may be
provided in the future. Please feedback any requests for this.

If you bring back a command, you are then able to edit it before pressing the
Enter key to have it performed.

These are the keys and commands involving command history:

up-arrow

-

If you started typing a new command that partial command is not
remembered, and then you are shown the previous command in the
history. Subsequent uses of
up-arrow continue to take you back
to earlier commands, one at a time.

Once you are looking at the oldest command, another
up-arrow has no effect.

down-arrow

-

Having pressed at least one
up-arrow to see earlier commands in
your command history, this character brings you back forward
in the history list towards the present. Once you are looking
at the most recent command, another
down-arrow has no effect.

^<command-#>

-

When you give this command by itself at the start of
the command line, WHAT brings back
the command indicated by the number, and it
becomes the current command, ready
for possible editing or execution. If you intend to
suffix a number on the end of the previous command in
the history, separate the carat and the number with a
space so it is not interpreted as this kind of command.
This cannot be used in a command file.

^-<number>

-

When you give this command by itself at the start
of the command line, WHAT brings back
the nth most recent command, and it
becomes the current command, etc.
This cannot be used in a command file.

/H

-

show recent command history so that it almost fills the
workspace; command numbers are included.

/<number>H

-

show command history beginning with the command
designated by the given number and show as many
commands going forward as almost fills the output
area (if that many exist).

^

-

use this character in a command to represent the text of the
previous command, but this is not shown to you when you type
the carat. However, if a command with a carat is performed,
it is remembered with the carat replaced by the characters
it represents. You can see that expanded executed command by looking
at the Command History area above the workspace.
If a command is brought back that had included a caret, the replacement
will have been made. This cannot be used in a command file.

The above commands and keys are not noted in the history, and neither
are empty commands. Commands are not inhibited from being in the command
history on the basis of their causing errors or warnings.

10. Short-term and Long-term States

The state of WHAT consists of several criteria
that affect how it
carries out commands. Initially, there is a default state that applies,
and you may indicate changes in various criteria both for the current
command (i.e., the short-term) and also for the long-term.
You may optionally follow
parts of commands that affect the
state of WHAT by an exclamation point to indicate the
preceding command part not only affects the current or
short-term situation, but it also applies to the long-term.

The GUI is helpful in showing the state of WHAT.
At the beginning of a
new command line, when WHAT has issued a prompt
and you have not yet
typed any part of a command, the GUI indicates the long-term state. As you
begin to type a command, the GUI indicates the short-term state.
Parts of the GUI are colored when changes are made. Yellow is used to
show changes for the short-term (i.e., for the current command only),
and green is used to show long-term changes.

11. Canonical Ordering

A group of letters most commonly shows up in an order that forms a word,
but there are some circumstances when you will prefer to see a group of
letters in a canonical order. WHAT allows you to specify
canonical orderings
in a rather general way. You provide a string of characters that includes
exactly one of each of the letters of the alphabet (of either case)
and a blank denoted by
a question mark. Your string may also include individual spaces or other
separator characters. For example, our canonical ordering of choice is:

BCDEFGHJKLMNPQRSTVWXYZ? AEIOU

and this causes a word such as
ANISOLE
to be presented in canonical order as:
"LNS AEIO".

Use of uppercase letters is recommended, but not required, in canonical
orderings. Especially since letter tiles in word games have the letters
printed in uppercase, it will be a better visual match to use uppercase
letters in canonical output. If you stick to uppercase letters
in your chosen canonical orderings,
WHAT also makes better presentations when
canonical order output includes any letters that were specified as blanks.
Specifically, letters based on blanks can be shown in green in the
absence of any lowercase letters in your canonical order.

Here are some ideas for you in choosing your own order. You may wish to go
in increasing or decreasing order by:

alphabetical order of all letters,

consonants then vowels,

vowels then consonants,

frequency of letters in the game played on a 15 x 15 or 21 x 21 board in English, or

letter scores.

You may wish to separate some of these groups by spaces or a minus sign or
some other character(s). If you intend to make and use flashcards, the
best separators to use are spaces, since a canonically-ordered word is
generally interpreted as a WHAT command when working with
a flashcard.

Canonical orderings show up in two places in WHAT:

a query can result in canonically-ordered letters instead
of words

when you ask to see a random rack, it is presented in a canonical
order or random order.

The special case of having no order is applicable only for the second
situation, and in that case random order is used for the letters and
blanks. The user-controlled orderings WHAT uses for these two
situations can be set independently.

TBD: A while back, we realized there are two aspects of canonical ordering
relating to what is on the slate and how the slate is presented. So slate
output can have words or words canonically ordered. It is a separate matter
how the slate is then presented. Canonical ordering can be used even if the
slate has words on it. It would be redundant and of no meaning to have a
slate with canonically ordered words and then ask to see the slate
canonically ordered. At this point WHAT does
not have commands to control each of these concepts.

12. The Slate

The concept of a slate is specific to WHAT. It is
virtual place within the program where query results are placed.
You mainly interact with WHAT by issuing commands to it.
A query is a specific kind of command that causes the program to
output to the slate, typically replacing the slate contents by a new list
of words. But some commands leave the
slate alone and are either asking for some info about the slate or asking
WHAT to do something else.
WHAT includes the facility to save the slate
to a wordlist for future use, but most often the slate keeps getting
rewritten, as you continue to make query after query.

As a result of a making a query, the strings placed onto the slate are
typically words in their correct (spelling) order.
You can alter this so the words are placed onto the slate in the canonical
order (of your choosing). These commands affect this:

/QW

-

do not create "semi-words" but real words
(the default)

/QS

-

allow for the creation of strings (without the requirement
they be words)

/QUS

-

allow for the creation of unordered strings (without the requirement
they be words); when using this result, you are likely going to prefer to
have no sorting in Presentation ordering

/Q;W

-

create "semi-words" rather than words,
namely output words to the slate in canonical order

/Q;S

-

create "semi-strings",
namely output strings to the slate in canonical order

As with the outputting of words, when the outputting of canonically-ordered
words or strings is performed, duplicates on the slate are avoided.

When a semicolon
(;)
is included in a query the presentation of the
slate contents is forced to be in canonical order, independently
of what is on the slate at that time. That is, the slate may have
words, canonically-ordered words, strings, or a mixture of these.
The use of the semicolon to request the presentation is in
canonical order affects each string on the slate, and so it is
possible there will be duplicates within the presentation.

There are queries that can produce non-words when the
[...]
construct is involved, and then the
/QS
command may have to be used in order to retain all answers. Two-word anagram
queries and two-word pattern queries necessarily result in strings.

Usually, the slate has words on it, but there is a way to get
WHAT to have
just letter strings on the slate. When the slate has words, it has zero or
more words that are in alphabetical order. However, the presentation of the
slate may reorder it for presentation purposes. This means that when you ask
for the nth word of the slate, the answer is not dependent upon how you last
saw the slate. Furthermore, a slate has at most one copy of any particular
word.

Likewise, when the slate has strings on it, these are in alphabetical order,
and there is at most one copy of any particular string on the slate at one
time. These strings can include spaces, as is done for the output for two-word
anagramming, two word patterns, and perhaps in canonical orderings.

There is a way to accumulate words on the slate, thus inhibiting
WHAT from
clearing the old slate when a new query is processed. This is specified with
a command spec of
/+S.
Its opposite is
/-S,
which reverts to the default setting of slate clearing with each query.

The slate can be cleared by making a query
(such as QQ)
that results in nothing when
query output replaces the slate (instead of augmenting it), and it can be
cleared explicitly using the command
/CS.

12.1 Categories of Slate Contents

The
WHAT slate usually holds words which were placed there as a
result of performing a query, but in general the slate can have
other forms of content. WHAT categorizes the slate as holding
one of the following forms:

words,

canonically-ordered words,

strings,

canonically-ordered strings,

items of unknown category, since they were imported from a file
or moved to the slate from a wordlist.

Usually the slate is cleared before a query is performed, but
you have the option of augmenting the slate when you make a query.
In this rare case, the most recent augmenting query is used to set
the category, despite the fact the slate may have a mixture of
categories of items.

There is a command to clear the slate, and when you perform this command,
WHAT (somewhat arbitrarily)
sets the category to "words".

You can see which category pertains when you issue the number sign
command to ask for how many items are on the slate. The answer indicates
one of the above categories.

The category of the slate affects how anagrams are shown when you
have specified you want to see anagrams in slate presentation. If the
slate contains words, then when anagrams are listed, the word is
not repeated within the parentheses, but for any other category of
slate contents, all anagrams of the letters of the item are shown in
parentheses.

13. Commands and Queries

A query is a particular kind of command that causes some word list to be
developed as a result of some specification of what letters are in the
words. There are these kinds of queries:

Anagrams;

Patterns;

Anagrams, Circulate Blanks;

Patterns, Circulate Blanks;

Patterns with Blank Insertions;

Patterns with Blank Additions;

Imbedded Words;

Steals, namely minimum-length words with given letters plus at least one
other letter (the term comes from the old game of Anagrams);

Rearrangement Steals, like Steals but requiring the base word cannot be
contained in order (perhaps even split) in the result;

Two-word Anagrams;

Two-word Patterns;

and there are others, that will be described later.

and WHAT employs a query kind at any given time.
You can set the
default query kind, that starts out as "Anagrams", and the query
kind can be temporarily set for a given query.

Letters usually represent themselves in queries, and thus for the
specification of commands other than for queries, prefix characters are
used to indicate a command is being given. Specifically, to change the
kind of query to be a pattern, type
/P,
and when this is performed, this affects the current query only
(i.e. it is for the short-term).
If the command /P!,
is performed, not only is the current query affected,
but the default kind of query is also changed. This means that in the
absence of another current or long-term query kind spec, subsequent
queries are of the pattern type. The following of the command by an
exclamation point is the way to express long-term settings.

You may precede a letter in a query (or in a set specification) with a
number to indicate a repetition count. A set, word reference, or
subword reference in a query may also be preceded by a repetition count.

You are not required to designate the letters used as the basis of a query
sequentially. They may be interrupted by subcommands. For example,

n(V)(V)/pn

means you want to see those 4-letter words that start and end with an
N,
where the two inside letters are vowels. The
/p
command to request
a pattern match in the middle of the query letters is acceptable, but not
recommended.

Notice the mentioning of matching vowels with the
(V)
command constituent
in the above example. This is one example of the designation of a set of
letters in WHAT. Some of these sets are predefined, such as
(V), and you
are given the power to define your own sets. Some sets are defined based
on letters and other sets involved in the query. Sets will be described later in
the "Letter Sets"
section of this guide.

To change the kind of query, type one of these commands:

/A

-

for anagrams

/~A

-

for anagrams with blank circulation

/P

-

for pattern matching

/~P

-

for pattern matching with blank circulation

/.P

-

for pattern matching with inserted blank circulation

/+P

-

for pattern matching with additional blank circulation

/S

-

for steals, as in the game of Anagrams

/~S

-

for steals requiring base word rearrangement

/I

-

for imbedded or included words

/B

-

for 5 x 5 grid game solving

/2A

-

for two-word anagrams

/2P

-

for two-word patterns

When solving for the 5 x 5 grid game, a query must consist of 25 letters,
and any provided rack characters are ignored. Perhaps sets and wild card
characters will be supported for this in a future version
of WHAT.

The
/2A
and
/2P
commands automatically imply the
/QS
command to allow for strings on the slate.

While typing a query, you may employ certain characters or character
sequences that imply the query should be a pattern, in which case, there
is no need to type
/P,
but it doesn't hurt. These are some of those utterances:

.

-

match any letter; this is a blank - the same as
?, except
it implies the kind of query is pattern matching

*

-

match zero or more of any letters; this is a wild-card
character, and
it implies the kind of query is pattern matching

,

-

a comma separates a pattern spec and a rack spec; rack characters
may follow the comma; typically you type the pattern, the comma,
and the rack which is used to fill in blanks in the pattern.

[]

-

means a word from the current slate or given wordlist

[M]

-

means a word from the current slate or given wordlist
mapped letter by letter

[<subword-spec>]

-

part of a word from the current slate or given wordlist

[M<subword-spec>]

-

part of a word from the current slate or given wordlist
mapped letter by letter

Any of these last four forms are called word references.
A <subword-spec> can take various forms:

<number>

-

the nth letter

<number>-<number>

-

the mth through nth letters

~

-

the reversed word

~<number>-<number>

-

the mth through nth letters of the reversed word

Also,
|
represents the word length.
[<number>|]
represents the nth letter
from the end of the word, where 1 is the final letter, and so
1|
also represents the word length.
2| represents the
word length minus 1, and so
[2|]
denotes the 2nd last letter.

Although these query constituents imply a pattern query, that can be
overridden by including
/A
on the line following any of these characters
to indicate an anagram query is being made. It will often be the case that
when you have a pattern query, you will use one of the above utterances,
but there are exceptions; for example, you might ask for those words of
length 8 whose letters alternate between consonants and vowels. The query
would consist of built-in sets, and their inclusion in the query
does not necessarily imply a pattern query. So, you would have to
explicitly indicate this, such as by including
/P in the query.

You may specify pattern queries by typing the pattern as the query string
and then providing a rack of characters that can be used for blanks and
sets within the pattern. Even if a singleton set is part of the pattern,
the one character it can be must be found in the given rack. If you
want a certain character at a certain position in the word, indicate it by
itself, and don't repeat it in the rack.
In other words, the rack is to provide those letters not already explicitly
mentioned in the query string.

When processing an anagram query, WHAT ignores
any rack characters that you have specified.
This situation is somewhat unusual in that if
you provide rack characters, the kind of query is set to pattern
matching, and then you would have to provide an explicit override
to set the query kind to "Anagrams", such as by including
/A.

If you have a rack, such as
ACILMT?,
and want to know those words that have an
R
as the fourth letter, you could express a query as

...r....,acilmt?

The fact the
R
is in the pattern forces that fourth letter to be an
R.

The example just presented has a length of query that is known and a number
of letters in the rack to match the number of blanks in the query. In such a
case, it is clear that all letters of the rack must be used. However, when
there are more letters provided than required, not all letters mentioned in
the rack need be in a matched word.
To force WHAT to include a letter from
the rack in a word, it should be followed by an exclamation point. When the
lengths imply the need for all letters to be used, the forcing of a letter is
irrelevant; in a sense, WHAT
assumes forced letters were used.

When a query includes an asterisk or any other wild card query constituent
(indicated by a repetition count of zero), any letters given in a rack may
be required or not (according to how they are specified), and the rack is
assumed to be filled out with as many blanks (or other wild card query
character) as are required to match the query. For example, you could ask
for those words that begin with a
Q
not immediately followed by a
U
that contains another
U,
using query:

Q(!U)*,u!*

The asterisk is a wild-card specifier, and you will often employ this one
in queries, especially pattern matching queries.
It represents any number of any letters. WHAT
supports a more
general form of wild-card specifier that can represent any number of
specified letters; for example, any number of vowels. This is indicated by
employing a repetition count of zero as a prefix to a letter or set in a query.
So the zero means "zero or more of the following letter or set".

Most kinds of sets are permitted in a rack, but query-based sets are not.

Word references are allowed within a rack. The rack is an unordered set,
so reversed words and subwords can be expressed, but the reversal has no
effect.

Characters in a rack must immediately follow a comma and not include
spaces. The first space you present within your specification of the rack
terminates the rack, and further characters you type
are taken to be query characters.
You may provide further rack characters within the query by tying
another comma.

If you not explicitly set the kind of query, but you include a word
reference, the query is kind is defaulted to be a pattern match, but if
you then include either a plus sign or minus sign, that changes the
query kind to "Anagrams". So, if you have a slate of
words resulting from a query other than an anagram query,
you could perform either of these commands

[]-
[]/A

to see those words along with their anagrams.

13.1 Errors and Warnings

This section needs updating, now that the GUI is involved, etc.
Thus we indicate it is
To Be Determined (subsequently abbreviated as "TBD") in this guide.

When you end a command with Shift+Enter,
WHAT will check that command, but not perform it.
When you end a command with Enter,
WHAT will first check the command, and either report
detected errors, or it will perform the command in the absence of errors.

As you type a command, the WHAT GUI indicates
the meaning of the command in the current context of the program,
but the checking for errors and conditions
worthy of warnings is delayed until you finish the command and press the
Enter
key. At this point, if anything is wrong, WHAT comes back with
a line starting with "
ERROR - "
and followed by a short explanation of the first error it
noticed. Some legal parts of the command already scanned may have led to the
program's carrying out some work. Upon encountering a part of a command line
in error, WHAT ignores the remainder of that line.

Two conflicting specifications in a command are generally accepted and not
considered as an error. The most recent spec overrides an earlier one. For
example, if a command includes both an apostrophe and a quotation mark, the
last one in the command pertains.

13.2 Letter Mapping

The feature of letter mapping is a somewhat obscure facility provided
for unusual, non-typical queries.

Word references that begin with the letter
M
(or m)
following the left
square bracket indicate that each letter coming from the word or string
is to be mapped to a letter based on a user-specifiable mapping.
For example, one form of word reference may involve the mapping of one
letter to another; this is for a word reference of the form

[M<number>]

This means to get the nth letter of a word from the slate (or whatever the
current source of word references is) and map that letter to another letter.

WHAT supports one map at a time,
and these are the related commands:

/M"<26 letters>"

-

set the letter mapping

/M?

-

show the current letter mapping

When WHAT starts, it has a default mapping of
"BCDEFGHIJKLMNOPQRSTUVWXYZA".

The first letter in the mapping indicates the letter
A
maps to, the
second letter in the mapping indicates the letter
B
maps to, etc.
It is not required that the 26 letters in the mapping are all different.
There is a menu pick
Query→Word Reference Letter Mapping...
to bring up a dialog to help formulate a mapping.

13.3 One-Letter Commands

In general, one letter on a command line appears to be a query with only that
one letter, and since there are no 1-character words in
WHAT's lexicons, this is never going to lead to any results.
Therefore, some individual letters are used for some of the most common commands:

C

-

bring up the dialog to handle challenges.

D

-

delete the current flashcard.

F

-

present the most recent flashcard again.

G

-

bring up the 5 x 5 Grid Game Player Dialog.

M

-

bring up the dialog for deleting, copying, or
moving wordlist items.

N

-

when doing randomized flashcarding, first put the
current flashcard at the end of the group, assuming the
toughness is zero. Then
present the next flashcard; this is equivalent
to a command of the number zero only when doing randomized
flashcarding. When doing sequential flashcarding, the card is not
moved using this command, but it is moved for the toughness of
zero command.

P

-

bring up the 15 x 15 Grid Game Player Dialog.

R

-

produce a random rack as a command,
but do not perform that command;
the command of one period does the same thing, except it does then
perform the command.

S

-

bring up the 21 x 21 Super Grid Game Dialog.

T

-

show the Timer tab
and start the WHATtimer.

X

-

move the current flashcard to the next wordlist.

Y

-

move the current flashcard to the wordlist after
the next one.

Z

-

move the current flashcard to two wordlists after
the next one.

More of these 1-letter commands will likely
be made available in WHAT,
as needs are noticed during WHAT use.

13.4 Query Constituents

The main part of a query consists of any of these query constituents:

a letter (lowercase or uppercase)

a set specification

a word reference.

For any of these, you may give a prefix repetition count. When the count
is zero it means zero or more of that constituent,
so it is a wildcard specification. A zero
count for a word reference has no well-defined meaning; this detail of
WHAT
deserves some further investigation [TBD]; until this is better understood
and described, you are encouraged to avoid this construct in queries.
A suffix of an exclamation point may follow any of these to indicate the
letter(s) represented by the constituent must appear in the result.

13.4.1 Query Character Specifications

The above section introduced some of the character specs that you may
include in a query. This section introduces more of such specs. The
simplest and most common query character is a letter. This just means the
letter is part of the sought word. When the query is an "Anagrams"
kind of query, that letter may appear anywhere within the word.

You can specify a blank in either of two ways:

?

-

this is the usual blank, one used in anagramming,
and if blank scoring
is being done, it scores what the letter it represents scores, as long
as the bag has enough of that letter.

.

-

this is the same as the
?
blank, except that a pattern query is implied
by its inclusion in the query, as described in the previous section.

Another powerful character spec that is supported by
WHAT is a set of
characters. A blank is a special form of a set in that it can represent
one of any of the 26 letters of the alphabet. Other sets may also be useful
in formulating queries. The later
"Letter Sets" section covers sets.

13.4.2 Subtracting Query Letters

Characters represent themselves in queries, and the usual kind of query
WHAT supports is an "Anagrams" kind of query.
For anagram queries, you
may specify some letters and then specify letters that you want to be
eliminated. Type a minus sign to introduce letters you want to remove.
An example is the query:

unitedstatesofamerica-underestimates/|4

that requests the words of at least length 4 that can formed from the
letters left over when you eliminate letters in
"underestimates" from those
in "unitedstatesofamerica".

You may use a plus sign to introduce more query letters to be included
following a list of removed letters.

It is permissible to subtract too many of a letter such that the count for
that letter goes negative, in that case
WHAT assumes it to be zero.

Subtraction of letters is permitted for pattern matching queries only in
the rack.

13.4.3 Circulating the Blank

This unusual and powerful kind of query can be done for either anagram
queries or pattern queries. Furthermore, with pattern queries there are
three cases:

replacing each of the letters in the pattern,

inserting the blank between each of the letters of the pattern,

inserting the blank in and around each of the letters of the pattern.

For the first of these three cases,
WHAT replaces each of the unrequired
letters in the query with a blank. It does not replace blanks or sets or
required letters of the query. This is appealing to use with anagramming to yield
study lists; such words have been coined as "blanagrams" by others.

Recall that you specify a required letter by following it with an
exclamation point.

Circulating the blank with pattern matching can be interesting in that you
are shown closely related words. For example, if you make the query:

baboon/~P

these words result:

BABOOL BABOON BABOOS GABOON

As mentioned above,
the blank may be circulated for a pattern query such that it is
inserted to the left or right of each character, instead of in place of
the character, possibly skipping such an addition at the head or tail.
For example, this query:

senor/.P

yields these words:

SENHOR SENIOR SENSOR

This similar query:

senor/+P

yields these words:

SENHOR SENIOR SENORA SENORS SENSOR

13.4.4 Steals

The query kind known as "Steals" is provided especially for finding
word steals when playing the game of Anagrams. The letters you provide
in a steal query must all show up in the answer. A minimum number of
blanks are added to the query letters to yield the shortest word. If
blanks are part of the query they represent excess above the minimum.
Thus,

/~Sumiaq

yields an answer of MAQUIS, and

/~Sumiaq?

yields an answer of&nbsp: MARQUIS, whereas

/~Smaqui?

yields an answer of 7 words including
AQUARIUM.

This might be a bit confusing. The base word of
MAQUI has a 1-letter
steal when requiring base word rearrangement, that is
UMIAQS. If you
then seek a steal with 2 letters requiring rearrangement it turns out
that there are no 2-letter steals with a rearranged answer - the only
2-letter steal of
MAQUI is
MARQUIS,
and there is no rearrangement.
When requiring rearrangement for this case, a 2-letter steal request
answer consists of those words with 3-letter steals.

Queries for steals are limited to letters, blanks, and whole word
references; they may not
include wild characters, sets, or partial word references. This restriction
could probably be lifted; please let us know if you have such a need.

13.4.5 Two-Word Anagramming

The ability to perform 2-word anagramming is probably not of any use for
most word games, but this feature is included in WHAT
since this kind of
question does arise on occasion. Especially when many letters are provided
as the basis of the query, the number of answers can be extensive. For
this reason, WHAT will not accept a two-word anagramming
query that includes any blanks.

WHAT supports two-word anagramming only for explicitly
provided letters. Blanks, sets, and wild-card characters are not
supported in two-word anagramming at present.

In the answer to a two-word anagramming query, no duplicates are produced,
but all anagram variations are included. So if
CAT is part of one pair of
words in the answer, there will be another answer with
ACT in the same place.

Individual words which are part of the answer to a two-word anagram
query are never marked with an indicator to show that the word is from
a particular lexicon. This is also the case for two-word pattern queries.

The slate holds the answer to a two-word anagram request with one space
separating the two words, and the words are in alphabetical order. When
the slate is presented, WHAT is aware that it was created
as a result of a two-word anagram query, and therefore is determines the
longest first word, and then presents the slate with one word pair per line
and so that the second words of each answer line up in the same column.

This section describes how you use each of the characters of the keyboard
within WHAT commands.
The order of this section is based on the
order of ASCII numerical encoding.

Individual keyboard characters other than digits and letters are
employed as common constituents of commands. Less-used command
constituents are expressed using multi-character sequences.

<tab>

-

The Tab key can be pressed to terminate
a command line which has one or more words to be challenged. The
Challenge Dialog is brought up, primed with any comma-separated words
on the command line.

Esc

-

The Esc key can be pressed to terminate
a query which is taking too long or a slate presentation which is more
than you want to see. It is used other than during the processing of a
command to alternate between the Challenge dialog and normal
WHAT use.

<space>

-

Spaces terminate subcommands. They are usually optional.
A space ends the
specification of rack characters (introduced by a comma).

!

-

The exclamation point is used in these ways:

as the first character of a command line to indicate you are reusing
the most recently used query and rack specification

as a prefix character in the specification of a specified
set, where it means "not"

as a prefix character in the specification of filtering according to
definition contents to indicate you are filtering based on a string's not being
in a definition

as a suffix character in a query to indicate the
previous query constituent is required to be in the result

as a suffix character following a command or subcommand to
indicate that command or subcommand is to have a long-term
effect, as well as a short-term effect

in relational operators.

"

-

The quotation mark (or double-quote) is employed in commands
to indicate words are to be presented one per line, each
with its definition. When a word
has more than one definition, a plus sign is used
as a separator instead of the usual minus sign; when the
presentation layout is not set to one word per line, all
definitions of the word are shown in the presentation on subsequent lines.
This feature is available only when you
supply WHAT with a suitable definitions file.
Quotation marks are also used within commands to enclose labels, indicate
the print job title, and specify a lexicon using its short name.

#

-

The number sign (also known as an octothorp)
is employed in commands to mean "number of
words". When it is used alone, it indicates the presentation
of the slate is limited to indicating the number of items on
the slate. It is also used within the specification of
built-in sets, where it means letter frequency (i.e., "number
of letters") in a game played on a 15 x 15 board.

$

-

Dollar sign is used to specify something connected with the
scoring of a letter or a word.

%

-

The percent
(that anagrams to PRECENT)
sign is used to specify something connected with word probabilities.

&

-

The ampersand is used in a couple of ways:

to represent the number of anagrams; this shows up in query
filtering, slate presentation, and sorting;

as the operator for set intersection, used for wordlists and letter
sets.

'

-

The apostrophe (or single-quote) is employed in commands to
indicate words are to be presented in the order they are on
the slate. This is typically in normal word order, but you
can alter query results to yield other ordering.

(

-

The left parenthesis
(that anagrams to FELT INTERPHASES)
is used as part of the specification of letter sets and to introduce
a reference to a letter set.

)

-

The right parenthesis
(that anagrams to
GIRTH/GRITH INTERPHASES)
is used:

as part of the specification of letter sets and to
terminate a reference to a letter set;

to indicate slate presentation includes anagrams.

*

-

The asterisk
(that anagrams to SARKIEST)
is used in queries
to mean zero or more blanks. Although when it is used a
pattern match query is implied, you can change that so that
an anagram query is done, in which case it means any number
of blanks can be used. It is an error to include redundant
asterisks in a query, such as consecutive ones. Consecutive
periods and asterisks are permitted. This character is also used
to specify a set operation of cross-product which produces a new
wordlist based on two existing wordlists.

+

-

The plus
(that anagrams to PULS)
sign is used in some commands,
such as the
/+S
command. It is also used in queries to
terminate a list of subtracted letters and then revert to
indicating letters included in the query. Another use of the
plus sign is as part of the specification of a set indicating
a letter already in the word.

,

-

The comma is used only as an optional character in the
/OR
command to indicate a comma is employed as a separator when
slate output is in packed rows. It is also used to introduce
the rack in a query. Typically you type the pattern, the comma,
and the rack which is used to fill in blanks in the pattern.

-

-

The minus
(that anagrams to MUNIS)
sign is used for many different purposes:

as a prefix for command phrases to turn something off involved
with the slate presentation, such as the showing of scores
(-$);

in the /-S command;

as a one-character command to output a line of minus signs, which
is treated as a page break when the workspace is printed;

as a hyphen when specifying a range of values;

as a hyphen when specifying a range of letters in a set;

to indicate vowels are to be ignored when filtering for what the
blank can be;

to represent the set difference operator when declaring a
user-defined set based on the difference between two sets;

to represent the wordlist difference operator;

used in a query to indicate letters that have already been
specified but are being subtracted from the query. An example is:

unitedstatesofamerica-underestimates/|4

as part of the specification of a set indicating a letter not
yet in the word.

.

-

The period
(that anagrams to DOPIER)
is used in queries to mean a
blank, but also the query is implied to be a pattern match kind
of query. A period-specified blank, like a question mark one, normally
scores according to the letter for which it is used in a word; whether
it does is under your control using the
/Z and
/-Z commands.

A command consisting of just a period causes a random rack to
be generated and it replaces the command line.

/

-

Slash is employed to introduce most of the
WHAT commands and
subcommands. It is also used when probing the slate as a
separator between character number and item number, either of
which you may omit.

<digits>

-

Digits are used to express numbers, and these are employed
throughout the WHAT commands to provide values. A number can
precede a letter in a query to indicate a repetition count.
Also, /2A and
/2P
specify kinds of queries.

:

-

The colon is used to represent the presentation of the slate is
to be based on what the blank can be. It is also used to specify
sorting based on what the blank is. It is used as a separator
when specifying an item of a wordlist in commands to delete,
copy, and move items, and also to start up sequential flashcarding.

;

-

The semicolon is used to refer to canonically-ordered words.
You may create the slate with canonically-ordered words. As a
separate step, you can have the slate presented with words in canonical
order. Canonically-ordered words are in general non-words; you
can think of these as "semi-words", hence the choice of using
this character for this purpose.

<

-

The left angle bracket is used to specify something connected
with front hooks. It is used to specify decreasing sorting
order. It also shows up in relational operators, where it means
"less than". It is used in ranges where the range is not
inclusive of the upper extreme.

=

-

The equal sign is used in a few different ways:

to indicate the presentation of the slate is limited to
indicating those letters exactly one or two blanks
represent in the most recent query (ignoring 5 x 5 grid game
and two-word anagramming queries);

in commands to indicate certain sorting is not to be done;

as an assignment operator character; these uses include
declaring a user-defined set, yielding user-defined sets,
and setting values of WHAT variables;

(=)
represents the ever-changing built-in set based on the
possible letters the blank can represent in the most recent
query when that query had exactly one blank (ignoring 5 x 5
grid game queries);

this shows up in relational operators.

>

-

The right angle bracket is used to specify something connected
with back hooks. It is used to specify increasing sorting order.
It also shows up in relational operators, where it means
"greater than".

?

-

The question mark represents a blank in a query. Like a
period-specified blank, it usually scores according to the
letter for which it is used in a word, but you may
indicate blanks are to be zero-scoring using the
/Z and
command. It is also part of
commands for word presence in a lexicon or wordlist.

@

-

The at-sign
(that anagrams to
GAINST/GIANTS/SATING)
is used:

to specify something connected scoring based on board
positions. If it is followed by a tilde, the position must
be within the word. Without the tilde, the word must start
at the given position.

to indicate a set in a query that denotes all the members
of the set, as if they were supplied explicitly.

<ABC...>

-

Uppercase or lowercase letters represent themselves in queries;
case of letters is of no significance. Letters of either case
are also usable as part of many different WHAT commands.

[

-

The left square bracket is employed in a query to introduce a
reference to a word already on the slate or some list. The
reference may be for the whole word or some part of it, namely a
subword.

\

-

Back-slash is employed in commands to mean nothing about the
slate is presented as a result of making a query.

]

-

The right square bracket is used:

in a query to terminate a reference to a word already on the
slate or some list. The reference may be for the whole word
or some part of it, namely a subword.

to specify slate presentation is done with hidden words,
such that each word is merely shown as
"[]".

part of a hidden word can be shown by specifying a number following
the right square bracket; for example
"]3" causes
the third letter of the hidden words to be shown.

^

-

The carat is employed in commands to refer to commands already
issued and thus exist in the command history. Its use is not supported
in command files.

_

-

The underscore is currently an unused character is WHAT.

`

-

The back apostrophe (or unquote) is employed in commands to
indicate words are to be shown with what letters can be
unhooked, namely whether a leading or final letter (or both)
of a word can be dropped to form other words.

<abc...>

-

Lowercase or uppercase letters represent themselves in queries;
case of letters is of no significance. Letters of either case
are also usable as part of many different WHAT commands.

{

-

The left curly brace
(that anagrams to ACERB/CABER)
is used in WHAT to
introduce a set of letters whose probability is to be computed.

|

-

The vertical bar is used to specify something connected with
word length. It is used as part of commands to affect sorting
by word length and presentation of word length. It is also used
within subword references (within square brackets) to indicate
the number of letters in the referenced word and also some
number of letters related to the referenced word's end.
It is also used as the operator for set union for wordlists and
letter sets.

}

-

The right curly brace
(that anagrams to ACERB/CABER)
is used in WHAT
to terminate a set of letters whose probability is to be computed.

~

-

The tilde
(that anagrams to TILED)
is employed in various ways:

as a kind of query, it alone means the only presentation of
the slate is whether or not the slate has at least one item;

following slash and at-sign, it indicates a board position
that is involved as part of scoring words;

indicates blank circulation in query kinds;

indicates requiring word rearrangement in steals;

indicates reverse order in word references;

sort the slate according to presentation sorting when the
slate is copied to a wordlist;

indicate randomized flashcarding in the
/<#>~FC command.

13.5 Letter Sets

A letter set, which we will merely call a "set",
consists of any number
of each of the 26 letters of the alphabet,
except an empty set is not allowed. Usually, each set, either
built-in or user-defined, has at most one of any given letter, but this
is not required; letter counts in a set may exceed one. This is useful
in some uses of letter sets.

In the dialogs to define a user-specified set, there are options to:

zero all values,

set all values to 1, and

max all values at 1.

The third option can be useful when typing a phrase or sentence and
ending up with the letters used at at value of 1 instead of the
number of times the letter appears. This is useful when creating
anamonics; if you don't know this term, see the Glossary
at the end of this user guide.

To include a set in a query, a set specification is used; these set specs
always begin with a left parenthesis and end with a right parenthesis.
Some of these enclose something as brief as one character.

13.5.1 Built-in Sets

the 98 letters in a full bag of tiles, excluding blanks; you may
redefine this set, but you must include at least one of each letter

(C)

all consonants, including Y

(C-)

all consonants, excluding Y

(P)

the 196 letters in a full super bag of tiles, excluding blanks; you may
redefine this set, but you must include at least one of each letter

(V)

all vowels, excluding Y

(V+)

all vowels, including Y

In the above several set specifications, you may use
either lowercase or uppercase letters within the parentheses.
It is easier to type uppercase letters, since parentheses are shifted keys.

($<number>)

letters whose scores are at least this

($)

scores for each of the 26 letters; you may redefine this set

($<number>-<number>)

letters whose scores are in this range

($<number><<number>)

letters whose scores are in this range

($<rel-op><number>)

letters with certain scores
where "<rel-op>", that means relational operator,
is one of these characters or character pairs:

= == ! != > < >= <=

Either one or two equal signs means a test for equality (the double
form may be preferred by C programmers), exclamation point means
"not", and either
! or
!=
means "not equal". For example,
($5) or
($>=5)
means the set of letters whose scores are at least 5, namely:
J,
K,
Q,
X,
Z.

(#<number>)

letters whose counts are at least this

(#<number>-<number>)

letters whose counts are in this range

(#<number><<number>)

letters whose counts are in this range

(#<rel-op><number>)

letters with certain counts or frequencies
where "<rel-op>",
meaning relational operator, is one of these characters
or character pairs:

= == ! != > < >= <=

Either one or two equal signs means a test for equality (the double form
may be preferred by C programmers), exclamation point means "not",
and either
! or
!=
means "not equal". For example,
(#6) or
(#>=6)
means the set of letters whose counts are at least 6, namely:
A,
E,
I,
N,
O,
R,
T.

(=)

blank-representing set, defined when the previous query had one blank.

The blank-representing set is a set with a dynamic meaning, namely, its
value is based on the most recent query. When mentioned in a query it refers
to the already-completed previous query and not the current one. It can be
referred to after the query is complete. When the most recent query had no
blanks or if blanks could not represent letters, then this set is empty.
Generally, sets in
WHAT are not empty, but this one is an exception.

The blank-representing set includes one each of those letters for which
any of those blanks in the query can represent. The wild-card character
*
is not considered as a blank for this purpose. The blanks that do count
are denoted by
. or
?.

13.5.2 Word-based Sets

A set of letters can be expressed by which letters a particular letter may
be in a word or what letters can be added to a set of letters to form a
word, given that word's other letters. For example, one might express a
word-based set as those letters that can be the second letter of 3-letter
words that begin with
T and end with
N.
These sets are specified by
enclosing within the parentheses at least 2 characters, such that exactly
one of them must be a period and others must be letters (of either case);
the example, just mentioned would be:

(t.n)

There is a second flavor of word-based sets that is a generalization of
the use of a word with one period, and that is the use of a set of letters
with one question mark. The set consists of those letters which that
blank (denoted by the question mark) can represent such that there is
at least one word with those letters. For example
(ZOA?)
represents the
set with the letters
E and
N.
It does not matter in what position the
question mark is or where the letters are.

13.5.3 Specified Sets

(<letter-list>)

indivudal letters or letter ranges, such as
A-E,
in any order, perhaps with repetition counts and/or duplicates

(!<letter-list>)

all letters other than ones in this list;
duplicates in this list are ignored, and
repetition counts are not permitted here

In these specifications, you may type letters in either case.
You may precede a letter in a letter list by a number to indicate a repetition
count greater than zero, but not in the final form above.
There are many ways to specify the same set; for example,
(#6)
can also be denoted by
(aeinort).

Single letters within parentheses have a special meaning, and therefore
that is an unrecommended form in which to express a singleton set. In the
instance where you want to be sure you are denoting a singleton set,
precede the letter by a repetition count of one. However,
WHAT will
interpret
(<letter>)
as a singleton set if there is no other meaning for it.

13.5.4 User-Defined Sets

When you plan to use a set more than once, or if you want to specify a set
based on other sets using set operations (union, intersection, or set
difference) you should declare a user-defined set. These user-defined sets
are then referenced by a number less than 100. When you specify one of these
sets you may optionally provide a label to help you to remember its purpose.

To declare a user-defined set, use one of the following forms of commands:

/<opt-set-#>U<opt-label>=<opt-set>

/<opt-set-#>U<opt-label>=<set>|<set>

/<opt-set-#>U<opt-label>=<set>&<set>

/<opt-set-#>U<opt-label>=<set>-<set>

When the optional set number
(/<opt-set-#>)
is omitted, the lowest number not currently
in use for a user-defined set is employed.

When the optional set is specified as empty, the set is removed; sets may
not be empty. When the optional set is present, it can be represented by
one of several possibilities for "<set>"
described in the previous section.

When all of the optional parts of the command are omitted,
WHAT presents a
listing of all the user-defined sets. If you provide only a label, nothing is
done, but it is diagnosed. If you supply a label when you are removing
a set, WHAT ignores the label, and it makes
no error diagnosis.

For the final three command forms, "<set>" represents either:

a single letter, or

a set specification including its surrounding parentheses.

Since letter sets may have more than one instance of any given letter, the
meanings of these set operations are not traditional. When taking the union
of two sets their counts are added. When taking the intersection each
letter's count is the minimum of the two counts of that letter. Set
difference is done by subtracting the counts of the second set from the
counts of the first set, yielding counts that are no less than zero.

A user-defined set is referenced with its set number within parentheses,
namely:
(<number>)

13.5.5 Query-based Sets

Query-based sets are ones that can be used in the construction of
pattern-matching queries, whose meanings are based on the current query.
These sets are merely singletons (with one letter) since they refer to a
specific letter already in the word being matched against the query.
These are the possibilities:

(+)

for a repeated letter - one already in the word

(+<set-spec>)

for a repeated letter that is also in the given set

(R<number>)

repeat the nth letter of this word

(R-<number>)

repeat the nth previous letter of this word

(-)

for a first-time letter - one not yet in the word

(-<set-spec>)

for a non-repeated letter that is also in the given set

(S)

same set as the set used for the 1st character of the query

(S<number>)

same set as the set used for the nth character of the query

(S-<number>)

same set as the set used for the nth previous character of the query

For the two
R-
forms and three
S-
forms, the "<number> must be greater than 0.

Except for these last three forms, when you present the same set twice in a
query, each set is separately full. But for these same-set references, as
each letter is matched from the set, one of those letters is removed during
the query. An example, is the query

b(V)b(S2)

that produces answers
BABE,
BABU, and
BUBO, but not
BABA,
since the
A
was already used in the second position.

Query-based sets are usable only within the query part of a pattern-match
query. They are not supported in a rack.

13.5.6 Set Contents

In a query, you may specify a set with a leading at-sign following the left
parenthesis. This denotes that all members of the set are to be included in
the query, as if they were supplied explicitly. This kind of set
specification makes little sense in a pattern-matching kind of query, so it
is not allowed there, except, perhaps, in the providing of a rack. For
example, in a query:

(@V)

specifies that all of the vowels are included (once) as query letters.
This is equivalent to having typed:

AEIOU

This kind of specification can be combined with set specs that begin with
a plus or minus sign. The at-sign must come first.

13.5.7 Examining Sets

You can ask WHAT
to indicate the members of a presented set. You do this
by merely naming one set as a command. You may also ask to see all the
user-defined sets with the command:

/U

WHAT
presents these one per line using the format of: set number followed
by the label followed by the set contents. If a letter is repeated in a
set, a count is given before the letter.

13.5.8 Redefining Set (B)

The set denoted by
(B)
is a built-in set of the 98 (or 100 for French) letters/tiles in the bag.
You may adjust the set's definition, but you must include at least
one of each letter. This is the form of the subcommand to change the meaning of
(B):

/(B)=<a set, enclosed in parentheses>

When this subcommand is on a line, the changing of set
(B)
happens after
all other subcommands are performed, no matter where on the line this is.
This command therefore takes effect for the long-term only; therefore,
it is optional to follow it by an exclamation point, which is required for
other subcommands that are either short-term or long-term to indicate
a long-term change is to be made.

Changing set (B)
does not affect the tile distribution used in the Word-Building Game.

If you make a change to set (B),
it is forgotten if you then change lexicons to one of a different language.

13.5.9 Redefining Set (P)

The set denoted by
(P)
is a built-in set of the 196 letters/tiles in the super bag.
You may adjust the set's definition, but you must include at least
one of each letter. This is the form of the subcommand to change the meaning of
(P):

/(P)=<a set, enclosed in parentheses>

When this subcommand is on a line, the changing of set
(P)
happens after
all other subcommands are performed, no matter where on the line this is.
This command therefore takes effect for the long-term only; therefore,
it is optional to follow it by an exclamation point, which is required for
other subcommands that are either short-term or long-term to indicate
a long-term change is to be made.

Changing set (P)
does not affect the tile distribution used in the Word-Building Game.

If you make a change to set (P),
it is forgotten if you then change lexicons to one of a different language.

13.5.10 Redefining Set ($)

The set denoted by
($)
is a built-in set representing the scores for each of the 26 letters
(or 28 tiles for Spanish).
You may adjust the set's definition.
This is the form of the subcommand to change the meaning of
($):

/($)=<a set, enclosed in parentheses>

When this subcommand is on a line, the changing of set
($)
happens after
all other subcommands are performed, no matter where on the line this is.
This command therefore takes effect for the long-term only; therefore,
it is optional to follow it by an exclamation point, that is required for
other subcommands that are either short-term or long-term to indicate
a long-term change is to be made.

Changing the letter/tile values affects the scoring in the Word-Building
Game, but the tiles shown have the standard scores on them.

If you make a change to set ($),
it is forgotten if you then change lexicons to one of a different language.

13.6 Wordlists

WHAT
provides for saving and restoring lists, especially from and
to the slate.
The slate is where output from queries is accumulated, and you may
save the contents of the slate for various reasons. These saved word lists
are termed "wordlists",
despite the fact that the items in a wordlist need
not necessarily be words. Wordlist items are in general strings of
printed characters and spaces.

Wordlists are designated by numbers less than 100, and wordlist 0 is the
slate. You may associate a label with a wordlist, as an aid for
remembering its purpose. The slate's label is
"Slate", and you cannot change it.
Except for the slate, wordlists cannot be empty.
When you attempt to make an empty wordlist, that wordlist is eliminated.

These are command that deal with wordlists:

/W<opt-label>

-

save the slate to a wordlist with the lowest
unused wordlist number

/<wordlist-#>W<opt-label>

-

save the slate to a wordlist of the given number

/<wordlist-#>~W<opt-label>

-

save the slate to a wordlist of the given number,
sorted according to slate presentation sorting

When a slate-saving command is used as part of a query, the saving
takes place after the answer has been accumulated on the slate.

/R

-

restore the slate from the most-recently created
or updated wordlist

/<wordlist-#>R

-

restore the slate from the given wordlist

When a "restore" command is used as part of a query,
the restoration takes place before
the query begins; this makes sense only when a query is the kind where
the old slate provides words, since otherwise the operation has no effect.

/<wordlist-#>D

-

delete the given wordlist; for the slate delete the words

/<wordlist-#>L<opt-label>

-

associate the given label with the
wordlist; if you supply no label, WHAT
eliminates any existing label. You
cannot alter the label of the slate;
it is fixed at "Slate".

/<wordlist-#>S

-

shuffle (i.e., randomize or mix-up) the order of this
wordlist - useful for flashcarding

These "yield" commands perform wordlist-combining logical operations:

/Y<to-wordlist-#>=<from-wordlist-#>

-

copy a wordlist, indicating an error if the from-wordlist
does not exist

/Y<wordlist1-#>=<wordlist2-#>|<wordlist3-#>

-

yield the union of the wordlists

/Y<wordlist1-#>=<wordlist2-#>&<wordlist3-#>

-

yield the intersection of the wordlists

/Y<wordlist1-#>=<wordlist2-#>-<wordlist3-#>

-

yield the difference of the wordlists

/Y<wordlist1-#>*<wordlist2-#>-<wordlist3-#>

-

yield the cross-product of the wordlists, which means every word from wordlist2 is concatenated to every word from worlist3

In the first three of the above four operations,
<wordlist2-#> and <wordlist3-#>
must differ, but one of these may match <wordlist1-#>; in such a case,
WHAT does not issue
a warning. WHAT reports the number of items in
the output wordlist.

When computing the union of two wordlists, the resulting words have
lowercase letters where that letter is lowercase in either of the
source wordlists.

You may have WHAT append an aribtrary line of text to a wordlist. This may
be helpful when creating files to be used for flashcarding or for the creation
of WHAT command files. The command to do this is of the form:

/><wordlist-#>A<line-of-text>

-

append the line of text to the specified wordlist,
omitting the command itself from the slash through the
A

When you use this command, WHAT does not avoid having duplicates
in a wordlist.

You can ask WHAT to report on the existence of all wordlists:

/L

-

see all the wordlists other than the slate
in a report with one wordlist per line,
where these are shown: wordlist number, label,
number of items

See the "Source of Input for Queries"
section later in this user guide, where there is a
description of how a wordlist can be the source of input for a query.

13.6.1 Moving Items Among Wordlists

These are the commands for moving items among wordlists:

The first 4 of these are especially short for working with flashcards:

X

-

as a 1-letter command,
move the flashcard to the end of the wordlist whose number is
one higher than that of the wordlist being used for flashcarding,
and prompt with the next flashcard

Y

-

as a 1-letter command,
move the flashcard to the end of the wordlist whose number is
two higher than that of the wordlist being used for flashcarding,
and prompt with the next flashcard

Z

-

as a 1-letter command,
move the flashcard to the end of the wordlist whose number is
three higher than that of the wordlist being used for flashcarding,
and prompt with the next flashcard

D

-

as a 1-letter command, delete the current flashcard,
removing it from its wordlist,
and prompt with the next flashcard

/=D

-

delete the current flashcard,
removing it from its wordlist

For the following commands, you may omit
the colon and <to-item-#>,
in which case WHAT assumes a value of 1.

move the given item(s) to the specified place; you may omit the comma and <#-to-move>

/<to-wordlist-#>:<to-item-#>=M

-

move the current flashcard to the specified place

In the above commands in which a number of items is specified, you
may omit the comma and number, and WHAT
assumes the value is 1.
In the move and copy commands, if the to-wordlist does not exist, it is created.
If the designation of the from-item is missing, the current
flashcard is the from-item. If the to-item-# is 0, the destination is
the end of the specified wordlist. If the to-item-# is higher than
where the item can go (since there are not enough items), it is placed at
the end. Item numbers start at 1. It is acceptable to move or copy an item
within its wordlist, and it is even acceptable that the destination and source
are the same, in which case nothing is done for the "move" command.

For a move or copy command, if you specify a destination item number for which
there is already an item, overwriting is not done, but instead existing items
are retained and the new items in the destination list are squeezed in.

For a move or copy command, it is possible that the same wordlist is
specified for the source and destination, and it also possible that
the destination item number is within the range of source items.
WHAT
accepts such commands and logically performs these as if it first copied
the source items to a temporary holding place, when moving, it marks
the source items for later deletion, and it then inserts the items being
held at the specified destination position, and then the items marked
for deletion are deleted. The copy command is performed similarly,
except there is no deletion involved.

When an item that is the current flashcard is moving away from where
is was due to a deletion, copy, or move, an attempt is made to either
keep that card as the current flashcard or retract that as the current
card, yet compute a potential next card, if this is meaningful. There are
some situations where there is no possible next flashcard. If there is
no current and no potential next card, flashcarding is turned off.
First, we present what happens for a deletion or a move.

If the current flashcard is staying within its wordlist, it is retained
as the current card. This may throw off the idea that sequential
flashcarding will review every item in a wordlist. On the other hand, if
the flashcard is being deleted or moved elsewhere, the current card is
retracted. The potential next card is the first item following the
group of items that is being deleted from the source wordlist.

A similar analysis is done when flashcarding is on and there is no
current card, but there is a potential next card. That next card may
need to be updated.

The above description was for a deletion or a movement of items among
wordlists. In the case of copying an item that is a flashcard or
potential next flashcard, the source item is retained as that card.

13.7 Labels

User-defined sets and wordlists may have associated labels. The commands to
declare these objects allow for the specification of an optional label.
When you supply a label, enclose it within quotes, and the label may not
include a quote. WHAT imposes a maximum length
of a label to the extent of what is stored.
You may specify more characters than that, but WHAT
will retain only a certain maximum number, namely 20.

The label for the slate is fixed at "Slate".

13.8 Source of Input for Queries

The usual
(and default) source for words is the full list of words in
WHAT's current lexicon.
This can be changed for one query (for the short-term) or for subsequent queries
(for the long-term) to be a
particular wordlist, including the slate.
This is especially useful if you want
to do pattern matching kinds of queries against the current slate.
The lexicon is the default source of words, and you can request that a
particular wordlist can be used instead by your issuing a command of the form:

/<opt-wordlist-#>I

Wordlist 0 is the slate. The command to change the source to the lexicon is:

/-I

Beware that processing time for queries when the source is a large
wordlist may be much longer than for when the source is the lexicon.
If you have a large wordlist you want to use regularly for the basis
of queries, you should contact us to have us
turn this into a lexicon data file. At this time, the support software
to create WHAT lexicons is not being distributed.

13.9 Source of Words for Word References

The usual (and default)
source for word references in queries (denoted by square bracket
specs) is the slate. This can be changed for one query (for the short-term)
or for subsequent queries (for the long-term) to be a particular wordlist or
the entire lexicon. When a square
brackets spec is used in a query, one word at a time from the wordlist is
treated. The slate is the default source of these words, and a particular
wordlist can instead be used by your issuing a command of the form:

/<opt-wordlist-#>[

Wordlist 0 is the slate. The command to change the source to the lexicon is:

/-[

Beware that processing time for queries when the source for word references
is the entire lexicon may be considerably longer than for when the source
is a wordlist. This option should be used sparingly. For example, if you
set the lexicon as the source for word references and use this query:

*v,[]

it can take nearly 10 minutes to complete this. This is because asterisks
other than trailing ones can take a long anyway, but this slowness is
then compounded with the need to consider every word of the lexicon, one
at a time. If you see a query is taking too long, you can stop it by
pressing the Esc key.

13.10 Scoring of Words

You can request that
WHAT scores the words it forms. These scores can
be used as the basis of filtering words for the slate and for sorting the
slate, and scores can be reported as part of slate presentations. You
can elect whether blanks are to be scored as the letter matched or as zero.
Scoring of blanks in pattern-match queries when there is a rack are scored
according to the letter or set from the rack that is used; if it is a
letter, that letter's score is used, but if it is a blank (or any set)
it scores according to whether blanks are scoring as zero or what they
represent.

Even when you have indicated that letters indicated by blanks are
to be scored, they are scored as zero when there are
not enough of the actual letters in the bag. For example,
PIZZA scores 15
since the bag has only one
Z. You can also control whether a
50-point bingo bonus be applied when a word has at least 7 letters. By
default, zero-scoring of blanks is not enabled, but the 50-point bingo
bonus is enabled.

Scoring can be done straight, without consideration of bonus squares on the
board, but it can also be done with a board position as the basis for forming
the score. When this is done, the additional score of connecting with
perpendicular words is ignored. You can ask for scoring based on starting
at a certain board position, or you can ask for a certain board position to
be included somewhere in the word. In either case, you provide an
orientation (horizontal or vertical) for the positioning of the play.

When you request start-square or include-square scoring, you may
know of constraints for certain squares, according to already placed words
on a board. Taking these into account is straightforward for start-square
scoring, but not for include-square scoring. We have considered allowing
for such a possibility and decided to not provide such a feature at this
time. If and when full tile placement on a board is supported, that will
provide the appropriate expressive power for asking such questions.

A future version of WHAT may support the placement
of tiles onto a board and thus be able to provide a list of the highest-scoring
plays based on a given rack. Meanwhile, WHAT supports some of
what is needed to find highest-scoring plays.

These are the commands that control scoring:

/15S

-

score based on a 15 x 15 board size

/21S

-

score based on a 21 x 21 board size

/+B

-

score with a bingo bonus for words of at least 7 letters
(the default)

/-B

-

score with no bingo bonus for words at least 7 letters long

/+Z

-

score zero for blanks (the
+ is optional)

/-Z

-

do not score zero for blanks (the default)

/@-

-

score with no bonuses other than perhaps a bingo bonus

/@*.

-

score for an opening play (starting at the center square)

/@*~

-

score for an opening play (through the center square)

/@< board-square>.

-

start at this board square with given orientation

/@<board-square>~

-

include covering this board square with given orientation

/@|

-

score based on word length for the 5 x 5 grid game
(2,3,5,8,...)

/@W

-

score using word length times the sum of the
letter scores, as is used in the Word-Building Game

Board squares are indicated by specifying the row and column of the square.
For the 15 x 15 game,
rows are numbered 1 to 15, and columns are designated
A
through
O; these
can be of either case. For a horizontal orientation indicate the row first.
For example, for a 15 x 15 board, a word played starting on the center
square is at board position
H8 when it is played horizontally.
If played vertically, it is at board position
8H.

When working with the 21 x 21 game, the same conventions are followed.

These are more commands related to scores:

/$<number>

-

yield only those words whose scores are at least this

/$<number>-<number>

-

yield only those words whose scores are in this range

/$<number><<number>

-

yield only those words whose scores are in this range

/$<rel-op><number>

-

yield only those words whose scores pertain

/$-

-

do not filter by scores

/<$

-

sort presentation by decreasing scores

/>$

-

sort presentation by increasing scores

/=$

-

do not sort presentation by scores (the default)

$

-

show scores in slate presentation

-$

-

do not show scores in slate presentation (the default)

When words are being scored, only the highest score for a word is used as
it is placed onto the slate. The slate can contain at most one copy of a
word at any given time. If a word achieves the same score at more than
one board position, the leftmost-uppermost position is the one noted.

13.11 Word Lengths

When the slate has double words, as produced for 2-word anagramming or
two-word pattern matching, the word length for filtering and the word length
shown (when requested) is the length of the first word.

When the slate has double words, as produced for 2-word anagramming or
for 2-word pattern matching, the length of the pair of words is used for sorting
and in slate presentation. In the presentation, the 2 words are separated
by at least two spaces (and the spaces are shown with periods when output
is other than one "word" per line).
The length of each entry is dependent
upon the length of the second word. For example, if the total number of
letters specified for the 2-word query had been 10, the length of the
entries may be between 12 and 18. It is 12 for when the second word is of
length 2, and it is as much as 18 when the second word is of length 8.

These are commands related to word lengths:

/|<number>

-

yield only those words whose lengths are at least this

/|<number>-<number>

-

yield only those words whose lengths are in this range

/|<number><<number>

-

yield only those words whose lengths are in this range

/|<rel-op><number>

-

yield only those words whose lengths pertain

/|-

-

do not filter according to word lengths

When you specify that you want to yield words of length 0,
WHAT interprets this to mean it will show words of
the same length as the query. This is the default.

/<|

-

sort presentation by decreasing word lengths

/>|

-

sort presentation by increasing word lengths

/=|

-

do not sort presentation by word lengths (the default)

|

-

show word lengths in slate presentation

-|

-

do not show word lengths in slate presentation
(the default)

13.12 Word Probabilities

Although we use the term "probability", these numbers are really the
number of different ways a particular word can be formed from letters
taken from a full bag of tiles, ignoring the blanks. So the probability
of the rack
AEINRST
is the product of these counts: 9,12,9,6,6,4,6, which
is 839808. You can therefore see the probability for a 7-letter word is
no more than 7 digits. In general, for words usually played in a word
game played on a 15 x 15 board, these probability numbers are about as
long as the word length. Therefore they are represented in n+1 columns,
where n is the word length.

To remove the burden on you to do calculations, you can specify a probability
with a set of letters within curly braces. For example, you can specify
probability of the rack
AEINRST,
which is 839808,
as {AEINRST},
where the order of the letters is irrelevant.
You can use such curly-brace-enclosed letter sets
wherever a number is allowed in the following probability commands.
Within these braces only repetition counts and letters are allowed; minus
signs, plus signs, and exclamation points are not allowed. When you
provide just one such brace-enclosed spec as a command,
WHAT performs that command by reporting the numeric
value of the probability.

As of WHAT Version 2.2, a user has the choice of which
kind of number is associated with a word. Based on data collected by
John O'Laughlin, each acceptable word is assigned a number according to how
many times it showed in a large number of simulated games. For example, the
most-played word in these games was found to be
QI, and it is assigned a
playability number of 1.
Under user choice, WHAT can assign either a probability
or a playability number to a word. Note that words with a higher probability
tend to be the useful words a player would care about, but with playability
the most desirable words are those with a lower numerical value.

The WHAT Initialization File can specify the name of a
playability data file, and it can also indicate if playability is chosen
option as WHAT starts. The file name of the playability file
can be changed as part of the dialog to create a new WHAT
Initialization File. Also, there is a menu-pick of
File->Playability (Instead of Probability) which can be used to to toggle between the two choices of whether
probability or playability is being used.

A playability file can be of either of two
encodings. One is a text file, indicated by a file extension of anything other
than WPB. Each line of the text
file is a word; the most playable word starts the file, and subsequent lines
have increasing playability numbers; thus a word's playablity number is the
line number it is on in the text form of the playability file.

The alternate encoding of the playability data is in a binary file whose
format is specific to WHAT. The file's extension
is .WPB for
WHATplayability. The same data is encoded in this binary file as the
data encoded in the text form of the file. WHAT is distributed
with a binary form of a playability file for the CSW2015 Lexicon;>

-

yield only those words whose probabilities or playability numbers
are at least this

/%<number>-<number>

-

yield only those words whose probabilities or playability numbers are in this range

/%<number><<number>

-

yield only those words whose probabilities or playability numbers are in this range

/%<rel-op><number>

-

yield only those words whose probabilities or playability numbers pertain

/%-

-

do not filter by probability or playability

/<%

-

sort presentation by decreasing probabilities or
playability numbers

/>%

-

sort presentation by increasing probabilities or
playability numbers

/=%

-

do not sort presentation by probability or
playability (the default)

%

-

show word probabilities or playability numbers in slate presentation

-%

-

do not show probabilities or playability numbers in slate
presentation (the default)

13.13 Number of Words

When performing a query,
WHAT can filter based on the
number of words (or strings)
in the answer. This is of no use for most queries, but it can be of use
for those queries that use word references. In such filtering, the
result words (or strings) are the full base words (or strings) from the
wordlist (or lexicon) being used as the source of word references.

These are commands related to filtering based on word counts:

/#<number>

-

yield only those words from the source wordlist
that lead to word counts of at least this

/#<number>-<number>

-

yield only those words from the source wordlist
that lead to word counts in this range

/#<number><<number>

-

yield only those words from the source wordlist
that lead to word counts in this range

/#<rel-op><number>

-

yield only those words from the source wordlist
that lead to word counts which pertain

/#-

-

do not filter according to word counts

Although the phrase "word count" is being used in the above descriptions,
it is really the result count for a query, since queries may result in
strings other than words in the lexicon.

When you specify that a count of zero, this means you want to yield words
that lead to no results. An example is you may want to find those 5-letter
words that do not lead to 8-letter words when combined with 3 blanks.

13.14 Number of Anagrams

WHAT can report anagram counts,
and these counts indicate the number of
words that are formable from the letters involved. Thus if a word is
presented, the minimum anagram count for it is 1, since the count includes
that word itself.

These are commands related to anagram counts:

/&<number>

-

yield only those words whose anagram counts are at least this

/&amp<number>-<number>

-

yield only those words whose anagram counts are in this range

/&amp<number>-<number>

-

yield only those words whose anagram counts are in this range

/&<rel-op><number>

-

yield only those words whose anagram counts pertain

/&-

-

do not filter by anagram counts

When you specify that a count of zero, this means you want to yield words
with no anagrams, which means you are asking for non-words only. The
default is that you are filtering for anagram counts greater than 0.

/<&

-

sort presentation by decreasing number of anagrams in a set of letters

/>&

-

sort presentation by increasing number of anagrams in a set of letters

/=&

-

do not sort presentation by anagram counts (the default)

&

-

show anagram counts in slate presentation

-&

-

do not show anagram counts in slate presentation
(the default)

13.15 Anagrams

Slate presentation can include a word's anagrams within parentheses following
the word. This feature makes little sense when the kind of query is
"Anagrams", unless the items on the slate are other than words.
This feature is provided especially for when the query kind is
"Patterns". For example, perhaps you want to see the 7-letter words
that begin with
"OUT"
and also be told of any anagrams for them. If you
are using this option to prepare a study list, consider setting the format
for slate presentation to be packed rows that are not columnated, since
some words may have a lengthy presentation.

show anagrams within parentheses along with secondary
lexicon indicators in slate presentation

-)

-

do not show anagrams in slate presentation
(the default)

13.16 Hooks

A hook letter for a word is a letter that may be prefixed or suffixed
to the word to form another word. A front hook is a letter that may be
prefixed, and a back hook is a letter that may be suffixed.
WHAT deals
with hooks for both query filtering and in slate presentation. These are
the commands related to query filtering and presentation of hooks:

/<<rel-op><set-spec>)

-

yield only those words that have front hooks
that are related to the letters in the set

/<-

-

do not filter by front hooks

<

-

show front hooks in slate presentation

-<

-

do not show front hooks in slate presentation
(the default)

/><rel-op><set-spec>

-

yield only those words that have back hooks
that are related to the letters in the set

/>-

-

do not filter by back hooks

>

-

show back hooks in slate presentation

->

-

do not show back hooks in slate presentation
(the default)

When front or back back are shown in slate presentation, there is a
user-specified front hooks separator included in the output which separates
the front hook letters from the word. Similarly, there is a user-specified
back hooks separator included in the output which separates the word
from the back hook letters. In order to specify these separators, menu
pick View->Hook Presentation Separators....
Each of the separators can be a null string (i.e., nothing) or a
sequewnce of characters to up to length eight.

13.17 Query Filtering

When WHAT processes a query,
it uses matching rules according to what letter
designations are in the query to come up with acceptable words. Of course,
the rules are different for anagramming and pattern matching. Once a word
does match the query pattern, there is then the possibility that is may be
filtered out according to other criteria:

We call the output of this filtering what is yielded by a query.
The previous sections have included indications of how to control what
is yielded according to specified constraints for such query filtering.

Just to clarify, the slate is accumulated with words or strings as a result
of the matching of the query and the query filtering. What slate
contents you can then elect to see is a separate matter. Also, the
ordering of the words when the slate is presented is another matter.

13.17.1 Filtering for Word Length

This topic is obvious for most of the kinds of queries, but for two-word
queries, the length is that of the first of the two words.

If you have specified to filter based on word length, and if the minimum
length specified is higher than length implied by the length of the query,
you are told that no answer is possible. For example, if you make
the query

A.O /|=4

you are asking for words of length 3 which start with an A and end with
an O, and furthermore you want to see only words of length 4, according
to the filtering spec. WHAT will
indicate:

The query seeks 3-letter answers, but filtering specifies 4 letters.

13.17.2 Filtering for Word Count

Like filtering for the blank (describing in the next section),
this feature of WHAT is quite specialized,
and most WHAT users will have no need for this.

It is used especially to seek certain kinds of words in conjunction with
queries that include word references. For example, if you have a certain
list of 6-letter words or strings and you want to find out which of these
when combined with 2 blanks yield exactly one word, you would employ this
kind of filtering. Notice that the words produced in the answer are the
very ones that were being used as the source of the query. The entire
word of the source of the query is in the answer, even if a subword of
that word is involved in the specification of the query.

If this form of filtering is requested in a query which has no word
references, it is ignored. This behavior may be changed in future releases
of WHAT.

13.17.3 Filtering for the Blank

Like filtering for word count (described in the previous section),
this feature of WHAT is quite specialized,
and most WHAT users will have no need for this.

It is used especially to work with anamonics.
Another use is when also when the query is a steal or rearrangement
steal. Using this feature is useful
only when a query includes word references.

You provide a "base set" against which what the blank
can be for each word is compared. This base set
should have zero or one instances of each letter,
since letter counts have no purpose in this context. You specify the base
set explicitly, possibly with a leading
exclamation point to mean "not".
Any repeated letter in your specification is ignored. For
the filtering, the set of letters the blank can be for the word is compared
against the base set you specify, except that if you include a minus sign
within the parentheses of the set specification, this is an indication
that the vowels
(A,E,I,O,U)
are to be ignored in the comparisons if they
are not present within the specified set. This option is provided in
case you are working with anamonics and want to find various sets of
letters that take the same consonant anahooks. This is indeed subtle.

When using blank filtering in conjunction with a steal or rearrangement
steal query, the filtering is done only when the steal can be made with
only one blank. Otherwise, the filtering request is ignored.

Various relationships are supported:

<
(a subset of)

<=
(a subset or equal to)

!
(not equal to)

!=
(not equal to)

=
(equal to)

==
(equal to)

>=
(a superset or equal to)

>
(a superset of)

An empty base set is permissible in this context.

These are the commands related to query filtering of what the blank can be:

/:<rel-op><set-spec>

-

yield only those words for which what the blank
can be are related to the letters in the set

/:-

-

do not filter by what the blank can be

If you include a leading minus sign in the set spec, it is interpreted to
mean that vowels
A,
E,
I,
O, and
U
are not included in the comparisons. This feature is supported for
your working with anamonics, where vowels are sometimes ignored.

13.17.4 Filtering for Hooks

This feature of WHAT is quite specialized,
and most WHAT users will have no need for this.

Two of the possibilities for query filtering are related to the front
hooks and back hooks. For either of these, provide a set against which
the hook letters for each word are compared. This "base set" should have
zero or one instances of each letter, since letter counts have no purpose
in this context. You specify the base set explicitly, possibly with a leading
exclamation point to mean "not". Any repeated letter
in your specification is ignored. For the filtering, the set of hook
letters for the word is compared against the base set you specify.
Various relationships are supported:

<
(a subset of)

<=
(a subset or equal to)

!
(not equal to)

!=
(not equal to)

=
(equal to)

==
(equal to)

>=
(a superset or equal to)

>
(a superset of)

An empty base set is permissible in this context.

These are the commands related to query filtering of what the hooks can be:

/<<rel-op><set-spec>)

-

yield only those words that have front hooks
that are related to the letters in the set

/><rel-op><set-spec>

-

yield only those words that have back hooks
that are related to the letters in the set

/<-

-

do not filter by front hooks

/>-

-

do not filter by back hooks

13.17.5 Filtering for Definition Contents

/"<optional-excl><search-string>"

-

filter according to definition contents

/"-

-

do not filter according to definition contents

You can filter based on a word's definition text when WHAT is using definitions.
Realize that words which are too long have no definitions, so such words will
not be matched when seeking definitions with a given string.
You can also filter based on a string's not in a definition.
All words with no definitions will be accepted in this filtering.
You indicate filtering based on a string's not being in a definition by
starting the string within quotes with an exclamation point.
Other than that possible leading character, the remainder of the string
within quotes is the basis of the search, but it assumed to be surrounded by
individual spaces. To inhibit the assumed space before of after the string,
include a vertical bar there.

To help in searching for individual words, WHAT virtually appends a space to the end of each definition.

Here is an example of a fitering subcommand
for finding all words which have the word
"dog"
in their definitions:

/"dog"

For this filtering subcommand, the word
"dog"
must be enclosed in spaces. If you instead asked to filter based
on the string
"dog"
anywhere within a definition, with this subcommand:

/"|dog|"

many words would match, such as
"GRAYFISH"
since its definition includes the word
"dogfish".

This is an example of finding all the OWL3 words which include the string
"zebra"
in their definition:

* /"zebra"

The output from this query is:

ZEBRASS ZEBRASSES ZEBRINE ZEBRINES ZEBROID

Seeking strings in definitions is done case-insensitively.

Filtering based on definitions is optimized for queries which are
only an asterisk, either an anagramming or pattern match query.
It is much quicker to do:

* /"dog" /|=7

than to run a pattern match query

7. /"dog"

This matters when there are a lot of words to be considered, such as with this example.

1.13.18 WHAT Command Repertoire

The complete list of commands and command fragments is listed in
the companion reference document,
WHAT Commands.

14. Slate Presentation

The outputting of words and strings to the slate is the first half of
the work done by WHAT as it performs queries. It is
a separate second step which you control to look at the contents of the
slate.

14.1 Outputting Strings

WHAT allows for words being placed onto the slate not to be
acceptable words, although this is not the usual style of WHAT
use. You can use
command
/QS
to indicate the result of a query may be arbitrary strings.
In such a case, if there is a blank in the query it may represent each of
the 26 letters. Using blanks in a string query in this manner
is discouraged.
At most 4 blanks and sets are permitted to be specified in a
query that results in strings.

This feature is being provided without appreciating many of its
implications. One use we envision is to output a canonical ordering of a
word instead of a word, and therefore anagram sets will be represented by
one representative.

We also envision the kind of use it could have is to collect word
fragments, such as what triplets can be placed in front of a 5-letter
word starting with a
Q
to make an 8-letter word.

14.2 Characters Matched by a Blank

When a query includes exactly one blank (or more precisely, when all
items in the answer have one letter matched to a blank),
the query-based set denoted by

(=)

becomes those letters that the blank can be, and you can ask to see
that list by typing an equal sign as part of a command. When there is more
than one blank in a query, the result of the presentation of the slate
using the equal sign is not a set, but it is collection of groups of
letters separated by commas, where each group are those letters the set
of blanks can be. The blank-representing set, denoted by
(=),
is still a
set of letters, and these are all the letters that any of the blanks
represent, but this set may be of little utility when two blanks are
involved.

When the slate is presented, one possible sorting can be based on what
letters a single blank in a query can represent. This is specified in the
same manner as other specifications for sorting:

/<:

-

sort presentation by decreasing alphabetical order
for what the blank can be

/>:

-

sort presentation by increasing alphabetical order
for what the blank can be

/=:

-

do not sort presentation by what the blank can be
(the default)

This feature is limited to queries with one blank. Future versions of
WHAT may allow for more than one blank.

These are related commands:

:

-

show what the blank is, presenting one such letter per
line in slate presentation; the presentation is ordered by the
alphabetical order of what the blank can be

-:

-

do not show what the blank is in slate presentation
(the default)

As with other criteria for sorting, you may elect to show an aspect of
a word. If you use the command to show what the blank is, output format
is one such letter per line, and that line may have one or more words
that are in the output for when the blank is that letter. An example
can serve to explain this more clearly. For the query

When slate output is organized based on what characters a blank matches,
an additional criterion can be employed to order the slate presentation,
and that is the number of anagrams for a given set of letters. When output
is based on the blank, then one line contains an anagram set. You can
request that WHAT
sorts it output according to the number of words in such a set:

/<&

-

sort presentation by decreasing number of anagrams in a set of letters

/>&

-

sort presentation by increasing number of anagrams in a set of letters

/=&

-

do not sort presentation by anagram counts (the default)

The above commands have an effect only when the presentation of the slate
is based upon what characters a blank matches. However, if long-term
specification is done, it is remembered, even during durations when there
is no effect.

These are related commands:

&

-

show anagram counts in slate presentation

-&

-

do not show anagram counts in slate presentation
(the default)

WHAT does not have commands to filter words
going to the slate based on the number of anagrams.

14.3 Definitions

WHAT can support the presentation of word definitions
if it you supply it with a
definitions file. The program does not come with such a file, but if
you can obtain such a file and provide it to WHAT,
it can then include definitions in its output. The WHAT
web site includes information that is pertinent.

A word definitions file may optionally start with one identification
line which begins with a tab; it is followed by a short description of the
file, such as the file name and the date in parentheses.

All other lines of a word definitions file begins with one or more words in
lowercase separated by single spaces and terminated with one tab character. All
inflected forms of the base word are included in this word list.
Following the tab is the base word and its definition. The base word is all
uppercase. That is followed by a part-of-speech indicator and also
inflections of the base word if any. The remainder of the line is the brief
definition. The file is alphabetically ordered. Here is an example line:

A presented definition begins with the uppercase base word.
WHAT assumes a definition line does not exceed 255 characters.

The commands that control inclusion of definitions in slate presentation are:

"

-

in slate presentation, present words one per line,
and include one definition of the word; when a word
has more than one definition, a plus sign is used as
as a separator instead of the usual minus sign; when the
presentation layout is not set to one word per line, all
definitions of the word are shown on subsequent lines
in the presentation

-"

-

do not show word definitions in slate presentation
(the default)

There is also a mechanism via the WHAT GUI to request
a definition of a
word on the screen by double-clicking that word. The word may be in the
workspace or in the portion of the WHAT window where
definitions are shown. When a word's definition is shown in this
Definitions area, all of its
definitions are shown. When a definition is shown in the workspace, its first
definition (in the definitions file) is shown and other definitions are also
shown unless the layout is set to one word per line.
The separator used within definitions
presented in the Definitions area is either a plus
sign or minus sign according to whether the word has or does not have
more than one definition.

You can request that WHAT shows all the definitions
which include a given search string. This is not exactly the same as
using the facility to filter by definition contents. With filtering, the
basis of the output is words which pass the filtering criterion. With this
/SD command entire definitions
are shown. This is the command:

/SD<search-string>

-

show all definitions which include the given search string

You can make use of this command only when WHAT is using definitions.
Realize that words which are too long have no definitions, so such words will
not be matched when seeking definitions with a given string.
You can also filter based on a string's not in a definition.
All words with no definitions will be accepted in this filtering.
The search string
within quotes is the basis of the search, but it assumed to be surrounded by
individual spaces. To inhibit the assumed space before of after the string,
include a vertical bar there.

To help in searching for individual words, WHAT virtually appends a space to the end of each definition.

Here is an example of a Show Defiinitions command
for showing all definitions which include the word
"dog":

/SD"dog"

For this command, the word
"dog"
must be enclosed in spaces. If you instead asked to show definitions
based on the string
"dog"
anywhere within a definition, with this command:

/SD"|dog|"

many definitions would match, such as the definition of
"GRAYFISH"
since it includes the word
"dogfish".

14.4 Presentation Format

Slate presentation is done in the workspace of WHAT.
Workspace size is controlled by the size of the WHAT window.
You can control the width and height of the WHAT window.
You may also control the size of the
font employed in the workspace. When you resize the window or change
the font size, the size of the workspace being shown in the lower right
corner of the WHAT window (in the status bar) is updated.

You can also see the size of the WHAT window in pixels by
holding down the left mouse button when the cursor is anywhere within
the status bar.

The presentation width is first set automatically to match the size of the
workspace as WHAT starts up. If you subsequently resize
the WHAT window or change
the workspace font, the presentation width may automatically
be updated; otherwise, it is not changed.

At present, there are no commands to control width, height, and font.
Such commands may be helpful in an environment when WHAT
is not being run with its complete GUI.

When WHAT presents a word,
it is shown in its entirety without breaking it
across lines. Whether to relax this restriction someday
for breaking within anagrams of a word is TBD.

These are the commands involving the layout of presentations:

/O1

-

(letter O, digit 1) slate presentation is one
word per line

/OR<number>S

-

words in packed rows, with spacing = <number>

/OR,<number>S

-

words in packed rows, use comma, with
spacing = <number>

/ORC<number>S

-

words in columnated rows, with spacing = <number>

/ORC<number>W

-

words in columnated rows, with fixed width = <number>

/ORC<number>X

-

words in columnated rows, with expandable
width = <number>

/OC<number>S

-

words in columns, with spacing = <number>

/OC<number>W

-

words in columns, with fixed width = <number>

/OC<number>X

-

words in columns, with expandable width = <number>

All the above numbers must be in the range 1 to 80.

Some of the above wording is sparse and some explanation is in order.
When the second option is chosen, words are presented across rows, with
a given number of spaces to separate them. When the words are of varying
lengths, they will not line up in columns.

In all options other than the first two, words are presented in columns,
and there are three ways to determine the spacing:

suffix S

-

column width is n more than the widest word, where n is the
given spacing,

suffix W

-

column width is the given width (n); for longer words, they
are presented in subsequent sections where the widths are
multiples of n,

suffix X

-

column width is the higher of the given width and 1 more
than the widest word.

The default layout that WHAT employs is:
words in columns with an expandable width of 9.

No matter what the layout style is, when definitions are included in the
slate presentation, the style is forced to be one word per line.

Here are more commands involving the layout of presentations:

/OC<number>C

-

set the number of columns for presentations, with
allowable values: 1 through 30

/OW<number>C

-

set the width of presentations in number of characters, with
allowable values: 8 through 255

/OWA

-

set the width in characters for presentations to match
the current workspace width (this is the default)

At a given time, only one of the above situations is in effect.
The presentation width is either in terms of columns or characters.

/OR<number>C

-

set the number of rows per page (0 for no paging), with
allowable values: 0 or 8 through 255; this affects only
outputting in columns, and a page break is indicated by a
line of minus signs

Other aspects of output that you cannot currently modify may be under
your control in the future, and these are the specifications of
fonts of output for presented data other than words.

14.5 Presentation Details

First of all, recall that the slate is usually ordered alphabetically, but its
presentation order may be affected by sorting based on other criteria.
For example, word score can be the basis for sorting. Whether scores are
presented as part of the output is an independent question from whether
sorting is done based on scores. As indicated in an earlier
section ("Scoring of Words"), a single
$
is used to indicate you want to see scores. You can independently
indicate presentation order should be based on scores via
/>$ or
/<$
subcommands. Another aspect related to scoring is when a query is
performed you can specify a filtering of the words that are sent to the
slate. Namely, you can control which words are placed onto the slate based
on their scores.

When scores are being shown, if the score is based upon a board position
that position is shown unless the word presentation is for hidden words.
In this way, you can get the minimal information about what words
score without getting too much info.

You have considerable control over what about the slate
WHAT shows and
how much additional information it shows.
The default presentation of the slate is that
WHAT shows all words, alphabetized and presented in columns,
and it shows these words without additional information, other than
coloring some letters with a distinctive color, such as lime green
(when the slate contains lowercase letters and when those are being
shown in this manner). Whether these lowercase letters are placed onto
the slate as the result of a query is an option under your control.
It is separate option under your control whether such letters are then
shown as colored uppercase letters. If you have chosen this,
colored letters are shown only when the query result
is not words or strings in canonical order, or when there are no lowercase
letters in the canonical order.

If the amount of output is extensive, you may want to stop it before the
presentation is complete by pressing the Esc key.
You will be told that the output was cut short.

Here are the aspects of slate presentation that you may control:

\

-

indicate slate presentation consists of nothing

~

-

tilde indicates WHAT should present no
words, but it will make one announcement
as to whether the slate has any words; equivalent to
0~

<number>~

-

indicates you want to see no words presented,
but you will see one announcement
as to whether the slate has this given number
of words

#

-

indicate WHAT's presentation of the slate
is limited to indicating how many items are on the slate

#= or
=#

-

indicate WHAT's presentation of the slate
is limited to
indicating how many different letters or letter pairs the
one or two blanks can be in the most recent query (ignoring
5 x 5 grid game and two-word anagramming queries)

=

-

indicate WHAT's presentation of the slate
is limited to
indicating those letters exactly one or two blanks represent
in the most recent query (ignoring 5 x 5 grid game and
two-word anagramming queries)

'

-

indicate WHAT should present individual words in
the order that each one is on the
slate; this is typically in normal word order, but this can
vary according to query result settings

;

-

indicate words are to be presented in canonical order

]

-

indicate words are to be presented hidden (only by
"[]")

]<number>

-

indicate words are to be presented hidden with one letter
shown (by
"[<number>:<letter>]")

$

-

indicate words are to be presented with scores

-$

-

indicate words are to be presented without scores

|

-

indicate words are to be presented with lengths

-|

-

indicate words are to be presented without lengths

%

-

indicate words are to be presented with probabilities or playability numbers

-%

-

indicate words are to be presented without probabilities/playability numbers

&

-

indicate words are to be presented with anagram counts

-&

-

indicate words are to be presented without anagram counts

:

-

indicate words are to be presented grouped by what blanks are

-:

-

indicate words are not to be presented grouped by what
blanks are

)

-

indicate words along with secondary lexicon indicators
are to be presented with anagrams in parentheses

-)

-

indicate words are to be presented without anagrams

<

-

indicate words are to be presented with front hooks

-<

-

indicate words are to be presented without front hooks

>

-

indicate words are to be presented with back hooks

->

-

indicate words are to be presented without back hooks

`

-

indicate words are presented with unhook indications

-`

-

indicate words are to be presented without unhook indications

"

-

indicate words are to be presented with definitions

-"

-

indicate words are to be presented without definitions

Hooks are individual letters that can be prefixed or suffixed to words that
then leads to the formation of another word. These are presented as a list
of lowercase letters at either end of the presented word, which is presented
in uppercase.

Unhooks are individual leading or final letters (or both) of a word that may
be dropped to form other words. An unhookable letter is shown with a prefix
or suffix of a minus sign to indicate the first or last letter can
individually be dropped to form another word.

Here are some real example presentations with hooks and unhooks:

-WHAT-s
-ASPIRING-
TOXINE-s
-BREADsy
ACARId
SCARF-s

Along with words (and their hooks and unhooks), you can request that
the slate will be presented with various additional aspects of the words:

lengths

scores

probabilities or playability numbers

number of anagrams (including itself)

(other) anagrams of the word

characters matched by a blank

definitions

Words on the slate may be presented as is or in canonical order. Also
realize that the slate may have been created with canonically-ordered words.

14.6 Sorting Orders

WHAT supports sorting according to these 7 criteria (or keys):

alphabetical order of the words,

alphabetical order of the canonical representations of the words,

character matched by a blank,

word length,

word score,

word probability or playability,

number of anagrams in a set.

The anagram count criterion is applicable only when words are presented
based on what the blank can be.

[This deserves review - TBD.]

For each of these, the order can be increasing or decreasing.
Think of there being 7 slots for potential sorting. The primary spot,
or the first one is where the primary key for sorting is held, etc.
One of these 7 criteria may either appear in this list at one spot,
else it is missing from the list, and thus the list does not contain
the full 7 members. When you specify a sort, it goes to the primary
position of the list, perhaps being pulled out from another list position,
else coming out of lack of use. There are commands to not sort based on a
criterion, and uttering such a command, removes that criterion from the list.

The list is set up in a long-term manner, and it can be modified for an
individual command. To distinguish between these cases, we follow a command
with an exclamation point when it is meant to have a long-term effect. It
could be on a query line, in which case it affects that current query, but
it also sets the long-term situation.

14.7 Case of Letters in Query Output

When words are placed onto the slate as the result of
WHAT's performing a
query, both lowercase and uppercase letters may be used. Whether lowercase
letters is an option under your control; this option is on by default.
When the option is on, letters in the query result which were matched by
a blank, a set, or some wildcard character are created in lowercase.
When the option is off, all letters in the query result are uppercase.
A word is on the slate only once, but there may be more than one attempt
to place the same word on the slate. The same rule is used for placing words
onto the slate as is used when performing wordlist unions. That is, a
lowercase letter is used in the slate word when that very word
being placed onto
the slate has that letter as lowercase. This is most likely something you will
see when you choose to augment slate contents with the results of a query.

Slate presentation
is done using uppercase letters, except for hook letters, definitions, etc.,
but words are presented in uppercase. Lowercase letters are employed on the
slate to indicate that letter is there since it is based on a blank, set,
or wildcard character. Under your control, such lowercase letters are usually
(by default) presented as uppercase with a lime green color when the query
result is not canonically ordered words or strings, or when there are
no lowercase letters in the canonical order. If you turn off this option,
lowercase letters are shown as non-colored lowercase letters. This option
is helpful when preparing output to be printed, since colors do not show
in printed output, but the case of letters does.
You can see these lowercase letters in a few of places, such as:

when you print the workspace,

when you view wordlist items in the dialog to move items,

when you view wordlist items on the Wordlists
tab in the upper right of the WHAT window,

when you export wordlists to files.

WHAT
may fool you to the extent that if the slate has all lowercase letters,
the lime green color is not used in the presentation. So, your seeing no lime
green is not sufficient to conclude the slate has only uppercase letters.

Especially for the further uses of files, you may want to control the
case of letters in exported wordlists. There are two subcommands which
affect all letters on the slate:

/LS

-

make all letters on the slate lowercase

/US

-

make all letters on the slate uppercase

These above subcommands are carried out before slate presetation takes
place in a command with a query.

When the slate contents are words, another way you can convert
the slate into uppercase is to issue the command

[]

which is a pattern-match query for each word on the slate.

These are the subcommands to control whether lowercase letters are
placed onto the slate as part of query results and whether such
lowercase letters are shown as colored uppercase letters or as lowercase
letters:

/+LB

-

show matched blanks with lowercase letters when
outputting to the slate (this is the default)

/-LB

-

do not specially show matched blanks when outputting to the
slate and in flashcard presentation;
use uppercase letters only

/+LC

-

lowercase letters on the slate are presented as colored
uppercase letters (this is the default)

/-LC

-

lowercase letters on the slate are presented as is, not as
colored uppercase letters; lowercase letters in flashcards
are presented as is, not as colored uppercase letters;
if you choose this option,
you cannot also make sense of hook letters in slate
presentation, which are also shown in lowercase

When a query includes only blanks, sets, and wildcards, the
/-LB subcommand is
assumed, and you can override this by including a
/+LB subcommand in the
command.

You can count the lowercase letters on the slate with either of these
commands:

/#L

-

count the lowercase letters on the slate, and issue a report
which includes the total and the distribution

/#B

-

count the letters denoting blanks on the slate,
and issue a report
which includes the total and the distribution

These commands do the same work, but the words used in the issued report
are indicative of which command you typed.

14.8 Probing the Slate and Other Wordlists

Here are some commands that may not be combined with other commands.
These are for immediate performance - they have no long-term versions. Such
probes of the slate are likely to be used when the slate contents has not
been shown, and you want some hints about the words that are there:

<word>/?

-

indicate whether the given word is on the slate,
if it is, do not indicate where it is;

<word>/0?

-

indicate whether the given word is on the slate,
if it is, also report on where it is, with
current sorting taken into account.

<word>/-"<lexicon-name>"?

-

indicate whether the given word is in the specified lexicon.

The zero in the above command represents wordlist 0, which is the slate.
The general form of that word-probe command is:

<word>/<opt-wordlist-#>?

Since these commands result in stating the item number where the word is,
when you provide a wordlist number, you may be told more info than you
want to know if you are testing yourself. If you want to hide where in
a list an item is, you can shuffle the list in place or copy the list to
another list and then shuffle that copied list. Another possibility is
to make a wordlist the source of words, and then use the
<word>/-?
to make the probe. Once a particular wordlist is the source of words, you can
type the word followed by a comma, and either it will be shown as
output (when it is in that wordlist), or you will see the red
"(nothing)" answer.

Another form of word probe command is:

<word>/-?

that asks whether the given word is in the primary lexicon and also
whether it is in the secondary lexicon, if there is one.

In these probing commands, only the letters of each item in a wordlist are
considered, whereas in the following commands to show individual characters
every character of an item is significant:

<letter-#>/

-

show the nth letter of all items within the first 50;
if there are more than 50, an ellipsis is suffixed in the output

<letter-#>/0

-

show the nth letter of all items within the first 500; the output may be one letter per item or when the output is more compact, counts precede each
letter

<letter-#>/<item-#>

-

show the mth letter of the nth item

/<item-#>

-

present the nth item

Item numbers are interpreted according to the order of slate presentation.
What is reported for a complete item (for a
/<item-#>
command) is
according to the slate presentation
option, except when it is to report nothing, the word is reported in slate
order along with any other data that you may select. When reporting
individual letters, WHAT may indicate answers, such as:

Letter 1 of word 2 is: R
Letter 1 of each word is: A,R,T

When letters are being reported,
if the slate has more than 25 words and thus more than 25 letters are being
reported, the commas are dropped. If the slate has more than 50 words only
the first 50 contribute to the output.

14.9 Selecting Lexicons

There are commands within WHAT's repertoire which
set one of the three lexicons: primary, secondary, or challenges. Although
these lexicons can be selected on the dialog accessed via the Lexicon tab
at the upper right of the WHAT screen, setting via commands
may be useful to users, such as when lexicon changing may be desired within
command files. The commands are:

/PL"<lexicon-name>" - to set the Primary lexicon,

/SL"<lexicon-name>" - to set the Secondary lexicon, and

/CL"<lexicon-name>" - to set the Challenges lexicon.

The given lexicon name is the short form of the chosen lexicon.

15. Multiple Commands on One Line

The WHAT
command language allows for your providing multiple commands on one
command line. There are some commands which
WHAT carries out when is sees it on the
command line, and then it ignores any further commands on the line.
These are the commands that are acted upon in this way:

[TBD] - Look around for other commands that should be in this list...

/15S

-

score based on a 15 x 15 board size

/21S

-

score based on a 21 x 21 board size

/<item-#>

-

show the nth item on the slate (command must stand alone)

/<number>H

-

show command history beginning with the command
designated by the given number and show as many
commands going forward as almost fills the output
area (if that many exist).

/<wordlist-#>L<opt-label>

-

associate the given label with the
wordlist; if no label is provided,
eliminate any existing label.

/<opt-set-#>U<opt-label>=<opt-set>

-

declare a user-defined set

/C

-

bring up the Challenge Dialog, perhaps starting with any
comma-separated words on the current line

/END

-

one of the commands to stop the WHAT session
(also /EXIT and
/QUIT);
this also causes WHAT to stop executing
commands from a command file (but not exit)

/EXIT

-

one of the commands to stop the WHAT session
(also /END and
/QUIT);
this causes WHAT to exit even when it is
performed from within a command file

/H

-

show recent query history so that it almost fills the
workspace; command numbers are included

/-I

-

change the input for queries to be the lexicon

/<item-#>

-

show the nth item on the slate (command must stand alone)

/<wordlist-#>I

-

change the input for queries to be this wordlist

/L

-

see all the wordlists in a report with one wordlist per line,
where these are shown: wordlist number, label,
number of words

/M"<26 letters>"

-

define WHAT's letter mapping

/M?

-

show WHAT's letter mapping

/QUIT

-

one of the commands to stop the WHAT session
(also /END and
/EXIT);
this causes WHAT to exit even when it is
performed from within a command file

<letter-#>/

-

command to show the nth letter of all items

<letter-#>/<item-#>

-

command to show the mth letter of the nth item

{<letters>}

-

show the probability of this set of letters

When a command line includes various commands and perhaps a query, certain
of these commands are performed in relation to the query and each other
in a particular order:

One of the commands to exit, such as
/EXIT,
takes place first (and only).

A /R
command to restore the slate from a wordlist takes place before the query.

A
/<wordlist-#>D
command to delete a given wordlist takes place after the
query, and before any
/W
commands to save the slate to a wordlist.

A /W
command to save the slate to a wordlist takes place after the query.

A /Y
command to yield a wordlist takes place after the query; there can
be more than one
/Y
command on a line, and these are performed in order.
Beware that if a yield command produces output for wordlist 0, namely
the slate, this happens after the presentation of the slate which
resulted from the query.

16. A Review of Query Processing

WHAT may clear
the old slate and place the results of the query output onto
a clean slate, else it can merge the query's output onto the current slate.

Before a query takes place, the slate may be restored from a given wordlist.
This option is of use only when the contents of the slate is involved with
the query, and there are two aspects for this to be the case:

a query may be adding words to the slate, rather than creating a fresh
list, and/or

words from the slate may be used as the source of a query in two different
ways, as explained below.

Before a query takes place, the slate may be forced to all lowercase or
all uppercase.

When there is a query based on words of the slate, a copy of that slate is
first made for the purposes of having the input words to the query be a
wordlist that is not affected by the possible simultaneous output to the
slate.

WHAT has one kind of query it can be doing, such as:

Anagrams,

Patterns,

Two-word Anagrams,

Steals,

and others.

The default is anagram (when WHAT first starts up),
but the user can change
this for all further queries and temporarily for the current query.

There is one subkind of query that applies to both anagram and pattern
matching kinds, and it is the circulation of the blank.

There are two different sources of a query:

the lexicon of all words, that can alternatively be a wordlist,

for word references, one word (or string) at a time from the slate (or
other wordlist or the lexicon).

The second kind of query source is specified by including one or more square
bracket word references within the query. Such word references are specified
beginning and ending with square brackets, possibly enclosing a subword spec.

For anagramming and pattern matching kinds of queries, there is an option
whether each of the words is placed onto the slate in word order or whether
it goes there in a user-specified canonical order. When outputting in
canonical order, string output to the slate is assumed. The output for
two-word anagramming is necessarily strings and not just words for the
slate. So, there is this one aspect of the slate whether it contains words
or strings.

When a query is performed, the slate contents may be replaced or
augmented. In either of these cases, there can be several criteria of
filtering that take place, and these are they:

score

length

probability or playability

number of anagrams

number of resulting words

the set of letters for what the one blank can be

the set of letters in the front hooks

the set of letters in the back hooks

One more step of filtering is according to whether the result is a word.

Filtering is a separate issue from how the slate is presented.
Filtering just controls that words (or strings) otherwise matched by the
query get placed onto the slate.

When a query is made,
the slate may then get copied to one or more wordlists.

17. A Review of Slate Presentation

WHAT may or may not present
one line for each letter one blank matches
(when there is exactly one blank in the query).

When WHAT presents words,
each may be followed by any of these data:

back hooks

unhook indicators

secondary lexicon indicator

word score, perhaps with board position

word length

probability or playability number

anagram count

the word's anagrams, with secondary lexicon indicators

the definition

Each of these fields is presented with a suffix letter to indicate its
purpose:

p for
points of word score

s for
size of word

w for
ways of getting that word (its probability)

y for
the pla

yability number

a for
anagram count

For the word presentation there are these possibilities:

inhibit showing the word,

just the word,

word with front hooks

word with back hooks

word with unhook indicators on either or both ends.

WHAT has these number of words possibilities:

show nothing,

show all words,

show the first N words, after appropriate sorting,

whether there is anything on the slate is all that is shown,

just the number of words on the slate is shown.

WHAT has various ordering possibilities,
there is a primary order and then
other secondary orderings. These are the various presentation orderings:

by what the blank is (in alphabetical order, decreasing or increasing),

words with scores, decreasing or increasing,

words with word length, decreasing or increasing,

words with probabilities or playability numbers,
increasing or decreasing,

by the number of anagrams in a set, decreasing or increasing.

There are 3 output formats that apply to the word presentations in the
absence of the inclusion of definitions; you may set these for the
long-term or just for this query:

columns,

rows, or

minimal spacing by rows.

When definitions are being shown, each word is placed on one line, and
the definition follows the word.

18. File Reading and Writing

WHAT is capable of importing (reading) and
exporting (writing) files containing:

words from the slate (based on current sorting for slate presentation)
or from a wordlist

command history

set definitions (output only) - a possible future feature

commands that represent the state of WHAT (output only) - a possible future feature

the WHAT workspace (output only),

the WHAT Definitions Window (output only),

5 x 5 grid game grids

15 x 15 game boards

21 x 21 game boards

Word-Building Game grids

15 x 15 game recorded games

21 x 21 game recorded games

WHAT commands to be executed (input only).

All but the last one of these commands begin with
/F and the next letter is:

R
-
for reading

W
-
for writing, perhaps eliminating existing contents

A
-
append writing

Further parts of these commands can be:

<number>H

-

for one command (output only)

<from-#>-<to-#>H

-

for a range of commands in the history (output only)

<from-#><<to-#>H

-

for a range of commands in the history (output only)

15B

-

for 15 x 15 Game Boards

21B

-

for 21 x 21 Game Boards

15G

-

for 15 x 15 Game Recorded Games

21G

-

for 21 x 21 Game Recorded Games

12B

-

for Word-Building Game grids

H

-

for all commands in the command history
When this is used with reading, the commands
read are added to the history, but are not performed

S

-

for the slate

W

-

for the wordlist whose number is the lowest unused
number when reading or the highest used number when writing

<number>W

-

for a particular wordlist; when the slate is written to a file,
it is ordered according to current sorting, but it is not
written as slate presentation; if you want to write out a
slate presentation, output the workspace.

K

-

for the workspace (output only)

D

-

for the Definitions Window (output only)

When a wordlist is exported, for other than the slate, if it has a label
that label is written to the first line of the created file following
three forward slashes. Similarly, when a wordlist is imported other than
to the slate, if the file has a first line beginning with three forward
slashes, the remainder of that line is used to set the wordlist's label.
Labels retained in the program are limited to 20 characters. Any
excess characters in the label from the file are ignored.
When using the WHAT dialog to set up the importing
of a wordlist, you can specify a different label for the wordlist.
A comparable control when exporting is not supported.

When a wordlist is imported, every line is checked to see if it contains a word
in the primary lexicon. If so, WHAT categorizes that wordlist
as having words; otherwise, that wordlist is considered to have strings.

When a wordlist is imported, the order is preserved; however, if you look at
it using default presentation, it will be presented in alphabetical
order. Default presentation includes such a sort, but you can remove the
one default sorting. If the wordlist is not excessively large, you can look
at it via the Wordlists Tab at the upper right of the
WHAT window. Duplicates are not removed during wordlist importation. Duplicates are
removed as a result of making a query; so, if you have a wordlist of items
that include non-words, and you want to remove duplicates, move it to the
slate, and issue this command:

[]/QS\

The result is devoid of duplicates and also sorted alphabetically.

The other form of file-reading command is:

/X

-

execute (i.e. perform)
each read line as a command and record them in the history;
/X
commands may appear in command files, but only to a depth
of 10; certain interactive commands may not be used within
command files, such as
/C and
/G

All of these file commands each end with the file name enclosed
in quotation marks.

When importing a wordlist, leading and trailing spaces and tabs are removed.

When query characters are included on a command line along with the
/X command, those
characters are remembered, such that if an early line in the command file begins
with an exclamation point, it refers to those characters.

When 5 x 5 game grids are written, each line has 25 or 26
(when there is a digram cube) letters followed by
"/G".
When these grids are read, a single letter following a slash is
ignored, and thus such lines could have the suffix of
"/G",
but they could also have
/B on the line.

When working with 15 x 15 or 21 x 21 games,
there are ways to create and read board configuarions and recorded games
(in .gcg files), but there are not WHAT commands to
support these activities. Importing boards and recorded games can
be invoked by menu-picks in addition to clicking on buttons on the
Board Dialog. Both importing and exporting 5 x 5 Game grids can be
done from menu-picks and from the game dialog.

19. Command Files

As mentioned in the previous section, the
/X command is used to
execute a command file. The one argument of this kind of command is a
file name. WHAT can help you construct such a command
via the menu pick
File→Execute Commands from File..., and
then you press Enter to perform the command.

WHAT interprets each line of a command file
as an individual command line.
Nearly all commands may be used within command files. This includes
/X commands, but
WHAT limits their use to a depth of 10.
As a command file is used, the commands are shown in the workspace.
One exception is that when an
/X command
with no error is seen in a command file, that command is not shown.
One group of commands may not be used within command files, and
these are interactive commands, such as
/B,
/C,
/G, and
/WB.

When an
/END
command is
performed from within a command file, it is interpreted to end the
use of that file, rather than exiting WHAT.
A /QUIT or
/EXIT
command performed within a command file does cause WHAT
to exit.

There is one command which may be used only within command files,
and that is the
/NR command to
get the next flashcard and rewind the command file when successful.
In the absence of success for any of various reasons, the command
does nothing, and control continues to the command on the next line,
with no indication of what the problem is. The intended purpose of
this command is to use sequential flashcarding to iterate over a
list of items in a wordlist. Here is one example of such a use.

Suppose you have a list of strings in a file and you want to produce
a printed document which you can use to quiz yourself. The document will
list each of the strings and then mention each of the letters which
may be added to the string which will yield at least one word when
anagrammed. Let us use an input file named:
C:\msw\input.txt and plan to make an
output file named C:\msw\output.txt.
The contents of the input file is:

ABC
DEF
XYZ
GHI

Prepare a command file with these lines:

!/P/QS'
!?=
/NR

One way to do this is using a text editing program outside
of WHAT, such as by Notepad, EMACS, or MS Word.
You can also use WHAT to help you prepare such a
command file. To do this, clear the command history, type the commands,
and then export the command history to your command file. Let's say
the name of the command file is:
C:\msw\anahooks.cmd

The use of the leading exclamation point in the above commands is
to indicate you are reusing the most recent query and rack specification,
and in this case, it is the query made from the most recently selected
flashcard, either from the initial
/3FC command
(mentioned below) or from the
/NR command at the
end of the command file.

Now to do the intended job, begin by importing the input file with
a command, such as:

/FR3W"C:\msw\input.txt"

which puts the lines from that file into wordlist number 3. When you
perform the import command you are told how many items were imported and
to which wordlist they were brought. Then type and perform the following
commands:

You will then see several lines get appended the workspace. Then use the
/TW command to trim
the workspace. This specialized command removes from the workspace
all lines which begin with the WHAT?: prompt,
all lines which are just " (nothing)%quot;, and one or
more consecutive blank lines are replaced by one blank line. For this
particular case, the workspace will then appear as:

ABC
The one blank can be any of these letters: HKRS
DEF
The one blank can be any of these letters: AEILNOSTUY
XYZ
The query did not have 1 or 2 blanks matched by letters.
GHI
The one blank can be any of these letters: HNSW
WHAT?:

Finally, you may print the workspace, with a command such as:

/PW"Anahooks Study"

20. Printing

WHAT supports printing the workspace in it entirety
with the exception of the last line, which will typically contain your
WHAT command requesting the printing. This command
is of the form:

/PW"<print-job-title>"

where the specification of a print job title is optional.

There is a File→Print Workspace...
menu pick to bring up a dialog where you can specify this title, and
you are also provided a couple of printing options which are available to
you only in this one place:

Whether to collate pages when printing multiple copies;
this defaults to "yes".

Whether to print pages in reverse order (with decreasing page numbers;;
this defaults to "no".

These options in the
WHAT "Print Workspace" dialog are what affects
the output. There are similar options which appear to be under your
control in the "Print" dialog
which you see as a result of performing a print command, but the
apparent setting of these options are being ignored
(in system software, which is a problem beyond our control).

If you are not adjusting either of these options, you need not use this
dialog to form the print command, but if you do, then the print command
is appended to the command line in the workspace, and you must then
press the Enter key to have it performed.

When this print command is performed, you are shown a standard
printer dialog, which allows you to select a particular printer, control
which pages are printed, the number of copies to print, etc. What appears
to be offering you the control for collating and printing in
reverse order is being ignored, as just explained above.

The print job title cannot include the quotation mark, and it is limited to
60 characters. The title shows up in two places:

On each printed page, either in the header or footer. You can control
whether there is a header or a footer or neither included on each printed
page.

In the printer queue listing, as part of the print job title. These
titles consist of WHAT Output -
followed by your chosen title.

You can control the font style and size used when printing. You can also
control the layout of the printed pages. There are dialogs available via
the File menu, and these are also available on the dialog
to help you print the workspace.

Since the entire workspace is printed, you should plan ahead and clear
the workspace (using the subcommand
/CW)
when you are producing output you intend to print from within
WHAT.

Command lines which begin with a space as the first character of your
command are skipped when the workspace is printed. Such lines begin
with "WHAT?:" and two spaces. Command lines with
no contents other than the prompt are also skipped.

The one-character command of just a minus sign causes that command
to be replaced by a line of minus signs. Such a line is not printed
when you print from within WHAT, but a page break
is made instead. Such lines of minus signs are also included in
presented output in the workspace
when you are printing in columns and have set a page length.

When you are preparing the workspace with presentation(s) you intend to
print, be sure the width of the presentation width is appropriate for the width
of your printed page. With default settings, you can likely get
up to 95-character lines printed.
If your presentation width is too large, and you are using
the default setting that the presentation width is controlled by the
workspace window width, then you can
adjust the size of the WHAT window such that the workspace
window width gets to be what you intend. Alternatively, you can set the
presentation width using a command, and you can make use of the GUI to help you
construct that command; go to the Max Width box in
the Layout box
on the Presentation tab, and click on the ellipsis.
For further details about these widths, see the
"Workspace Size and Line Wrapping"
section earlier in the document.

When you use WHAT to print the workspace, you should be aware
about the green blanks you may see in the workspace. By default, letters which
are matched by blanks, sets, or wildcards are placed onto the slate in
lowercase, and you can control whether this feature is on. You can also control
whether lowercase characters in presented words are shown as colored uppercase
letters (which is the default) or as lowercase letters. In printed output,
these lowercase letters show up as lowercase, so if you want to see how
your printed output will appear, you should turn off the option to
show these lowercase letters in color (using the subcommand
/-LC). As usual, if you
want to do this for the long-term, follow that subcommand by an exclamation
point. There are menu picks for these options on the View
menu. See the
section "Case of Letters in Query Output"
for further details.

WHAT may support printing a selected region of the workspace
in a future release of WHAT. Please let us know if this is a
feature you would like to see.

Since you may also export the workspace to a file, you can use such
output as the basis of having a program such as MS Word set up the print
job for you. There is more control of printing from MS Word than is
supported from within WHAT.

21. Generating Random Racks

WHAT can be used to act as if it is randomly
picking a rack of tiles from
a full bag. This can be a useful feature for you to practice. The rack is then
brought up on a command line as if it had come from the history. At that
point, it is likely you would want to have it load the slate with the
answers and be told nothing about the slate. To affect this, you should
tell WHAT to show you nothing by your issuing the command:

\!

which means until you change this, it will present nothing about the slate on
a long-term basis. Then, you might contemplate whether there are one or
more bingos in the rack before asking WHAT questions to
answer this. You
might find it more useful to avoid seeing a full answer right away, but
instead ask for whether there is any slate contents (with command
~). You may
have then asked whether the slate has some number of words, such as 3 words
(with command 3~).
Perhaps you may have asked for how many words there are
(with command #).
A next step might be to ask for the first letter of the first
word (with command 1/1), etc.

By default, WHAT assumes you want 7-letter racks,
but you can ask it for
a rack of any number of letters (up to 16).
If you have WHAT effectively get 7
letters from a full bag of 100 tiles, there is about a 12.5% chance there
will be a bingo, and you can use WHAT this way,
or you can request that
it alters that probability to one you desire. For example, you might
prefer to be given racks with an 80% likelihood there is a bingo. On the
other hand, you might want to see racks that are poor for bingos and set
the percentage to something like 5%.

The racks are randomly pulled from a full bag, and even that is under your
control. By default the set of tiles used is the built-in set
(B), and in
addition a blank count of 2 is used, but these parameters can be changed.
The bag from which random racks are generated need not include all letters,
but it should contain, along with a number of blanks at least the number
letters in the racks to generate.

You can specify augmenting the rack with a specific number of blanks.

When a rack is presented, there are several possibilities for the canonical
ordering. These are described in the earlier
"Canonical Ordering" section.
Canonical ordering of random racks can be different than the
canonical ordering used when presenting canonically-ordered words on the
slate, but we suggest you would usually want these to be the
same, unless, perhaps, you prefer that random racks be in random order.

In order to request a random rack as if it were a retrieved command, type
the one-character command of the letter
R.
The one-character command of just a
period is like the
R
command, but an Enter key is automatically "pressed"
to perform the command right away.

Neither of these commands is remembered in the history, but the resulting
random rack will be for the period command or for the
R command if you
then press the Enter key after the random rack is presented.

The parameters for random rack picking and presentation are set using
these commands:

/.<number>S

-

number of letters in a produced random rack (2 - 16)

/.<number>B

-

number of blanks in the bag for random racks (0 - 12)

/.<number>R

-

number of blanks fixed in each random rack (0 - 12)

/.<number>P

-

integer percentage that there is at least one word
using all letters (0 - 100); the absence of a number
indicates no artificial percentage is used

/.<number>><wordlist-#>A

-

append the specified number of random racks to the specified wordlist;
during the performance of this command, you are shown its progress
in the middle part of the status bar at the lower border
of the WHAT window, where each letter shown
indicates 10,000 racks have been generated; you may stop this
command's performance prematurely by pressing the Esc
key, and this will take effect when the next multiple of 2000 racks
have been produced

/."<ordering>"

-

the random output letter presentation ordering; if you
specify no ordering within the quotes, random ordering
is used

/;"<ordering>"

-

the output letter presentation ordering

The letters that contribute to a random rack are taken from set
(B).
This is a built-in set of 98 letters, but you can alter it.

22. Challenges

Since handling challenges is likely to be a common use of
WHAT in a club setting, and since the other features
of WHAT are also of use in
that setting, there are several different methods of bringing up the
Challenge Dialog, which is a special window covering the
WHAT workspace where you can request challenge rulings:

click on the Challenge
button in the upper middle of the WHAT screen;

select the Challenge menu item from the
File menu;

press the Esc key;

press the Tab key,
and if there are letters, spaces, and commas on the
command line, these are automatically entered into the Challenge Dialog,
but beware that the line is not parsed as a command, except characters
immediately following a slash are ignored, so other letters which
are part of commands appear to be part of the challenged words;
if you later want to get that line back in the workspace, press the
up-arrow key, since it was added to the command
history;

issue the /C
command, following the same rules as for the Tab key;

type the 1-character command of just the letter
C.

WHAT supports the
/-?
command to ask if one word is in the lexicon. When
you want a ruling for multiple words, as is required for a challenged
play, you should use the Challenge Dialog. However, if you begin to
type some words intended to be challenged to
WHAT in its workspace,
you may continue by typing either a
/C
command or pressing the Tab key.
In either case, the Challenge Dialog in brought up with the words you
included on the command line already entered into the Challenge Dialog.
As in the dialog, you may separate words with either commas or spaces.
If you give a
/C
command or press the Tab key on a line with no words,
WHAT brings up
the Challenge Dialog without initial words.

When you use the Challenge Dialog, it takes over the user-program
interaction. When you use it temporarily,
it covers WHAT's workspace. When you use it
in a tournament setting, such that it is able to do adjudications only, it
takes over the full screen, including the Windows taskbar.
The instructions in that dialog are intended to be sufficiently
explanatory that they will not be repeated here.

The background color of the Challenge Dialog is normally aqua. If
you are using the same primary lexicon that was chosen as the
WHAT program was started, aqua is the color. However,
if you are using a different primary lexicon, the background color is
instead fuchsia; this is to alert you that a different lexicon is being
used. the fuchsia background color is also used when lexicon transition
challenges are enabled.
In either case, you can see the short name of the lexicon in the
Challenge Dialog, and the long name is also shown in the header
line of the dialog.

Challenged words may be recorded in a computer file as the challenges
are being made. It is an option whether such recording is being done.
Recording is on by default according to recording period specifications
in WHAT's initialization file.
The format of these specifications is described in the
"Initialization File" section.

The WHAT
initialization files that come with the program has one
commented-out recording period specification for times between 6 p.m.
Thursday and 1 a.m. Friday, since these hours include the time of the
weekly session at the club where we play. You are given
control to set up recording period specifications via a dialog,
accessible via the menu pick
File→Record Challenges Times....
Alternatively, you may edit the WHAT initialization file
outside of WHAT, such as by Notepad, EMACS, or MS Word.

The name of the file that is used for recording is based on the time and date
the challenge is being made. A filename prefix is specifiable in the
WHAT
initialization file, and suffixed onto that prefix is a 6-digit
date of the form
YYMMDD
followed by
".wds".
The date for the file name
is what the date was six hours earlier. In this way, a late night
session yields one file of recorded challenges, as long as challenges
stop getting made before 6 a.m.

These are commands involving challenges:

/C

-

with no words in the command, bring up the
GUI-oriented Challenge Dialog

/<unlock-#>C

-

bring up the Challenge Dialog that will remain
active until the secret non-zero, up to 8-digit
"unlock number" is typed; if you provide
more than 8 digits, only the first 8 matter;
challenged words will be recorded
here is an example:

/12345C

/-<unlock-#>C

-

bring up the Challenge Dialog that will remain
active until the secret non-zero, up to 8-digit
"unlock number" is typed; if you provide
more than 8 digits, only the first 8 matter;
challenged words will not be recorded;
here is an example:

/-12345C

/C

-

with one or more words separated by commas or spaces
in the command, bring up the Challenge Dialog with
the words on this line placed into that dialog for
an initial ruling

/+RC

-

turn on the recording of challenged words
for other than tourney adjudications

/-RC

-

turn off the recording of challenged words
for other than tourney adjudications

The use of an unlock number to keep the Challenge Dialog is helpful when
using WHAT to rule on challenges in a tournament.
This level of control
is, however, not strict enough for environments where players cannot be
trusted. In order to insure that no cheating is done, a program to field
challenges must take over a computer and disallow any other programs to
run. WHAT may have this power in the future,
but it does not do
this today. It can be used only when all users can be trusted not to
bring up other programs, such as other copies of
WHAT or other word
programs on the computer. In contrast, John Babina's
Word Judge program,
that is used for the National Scrabble® Championships takes
over the computer completely, not bringing up an operating system.

22.1 Automatic Reversion to the Challenge Dialog

When using WHAT in a club setting, its primary use is
to adjudicate challenges. It may also be used when games are over to do
some postmortem probing. In order to provide the Challenge Dialog most of the
time, you can put WHAT into a mode such that it will
automatically revert to the Challenge Dialog after a certain number of seconds
of inactivity (using the program for performing commands in the workspace).
This is controlled via the menu pick
File→Revert to Challenge Ruling.
When WHAT starts up, this feature is off, unless
challenged words are being recorded. If challenged words
are being recorded based on the settings in the initialization file,
then reversion is on with a duration of 30 seconds. If you do not want
to employ this mode, use the menu pick to turn it off.

If you choose to turn this mode on directly, you are advised to use
a duration of 30 seconds, but there are several choices of
durations available, ranging from 20 seconds to 5 minutes. When you
are working in this mode, there is an indication
("Auto-revert to Challenge Ruling") in the left section of the
status line at the lower part of the WHAT window.
The indication does not include the duration being used, but you can
see that in the menu pick on the File menu.

The counting of inactivity time is done only when the WHAT
window is active and has focus. Unfortunately, scrolling the workspace is
not noticed as an activity to avoid the automatic reversion.

22.2 Lexicon Transition Challenges

WHAT can be used to adjudicate challenges to ease players in making a
transition from using one lexicon to another. During an interim period,
players may want to abide by a rule that there should be no penalty for
challenging or being challenged in a play which is affected by the
lexicon change. You can turn on this mode of having WHAT perform
Lexicon Transition Challenges via the File menu. You can also
turn this mode on as WHAT starts up by including
a command line argument of
-t on the command line.
In order for the lexicon transtition challenges mode
to have an effect, you must have a secondary lexicon selected, and it is
considered as the older (previous) lexicon for these challenges.

Usually, a challenge is either deemed "acceptable" (using
green letters) or "unacceptable" (using red letters),
but in this special mode, there are two other
possible results, for example:

Yes, the play is OWL3-ACCEPTABLE - no penalty

No, the play is OWL3-UNACCEPTABLE - no penalty

These messages are in blue letters, and the ruling remains visible for
a duration of 12 seconds, instead of the usual 9, to permit players
to read and contemplate the ruling.

When more than one word is challenged, if any are acceptable in both
the old and new lexicons, the play is considered "acceptable".
Similarly, when more than one word is challenged,
if any are unacceptable in both the old and new lexicons, the
play is considered "not acceptable". In both
of these cases the usual penalty applies.

The background color of the Challenge Dialog is normally aqua. If
you are using the same primary lexicon that was chosen as the
WHAT program was started, aqua is the color. However,
if you are using a different primary lexicon, the background color is
instead fuchsia; this is to alert you that a different lexicon is being
used. the fuchsia background color is also used when lexicon transition
challenges are enabled.

23. Probe Answer Window

As of WHAT Version 2.2, there is now support for a user to
probe for answers which are for words (or in general, strings) contained in a
chosen wordlist or the primary lexicon. Another source of probed words can be
from words formable in a Big Boggle® grid. The window where this probing takes place
is called the Probe Answers Window or PAW.

For making general use of the PAW, bring up that window in one
of three ways:

Click on the Probe Current Answers button in the central part of the
WHAT screen. That button is shown only when the Novice tab is
the chosen tab at the left of the WHAT screen.

type a 1-character command of
A,

make a menu pick in the WHAT GUI under the View menu.

For making use of the PAW to probe for words formable in the
current Big Boggle® grid, click on the Probe Answer button in the
5 x 5 Grid Game Player Dialog. You may also bring up the PAW for
Boggle® using one of the methods described above. You may then have to adjust
one or more options in the dialog to edit PAW options.
One of the settings in the PAW Options dialog is whether
probing the Boggle® grid is being done.

When making general use of the PAW, it is placed on top of the tabs at the left
of the WHAT screen. In this way both the PAW and the
WHAT workspace are shown at the same time. When they are
both showing, you can press the Esc key to move focus to the
other window. If you close the PAW, then pressing the Esc key
will take you to the Challenge Dialog, which is the typcial behavior. You may
adjust where the PAW is positioned by dragging it.

When making use of the PAW to probe for words formable in the current
Big Boggle® grid, and when the PAW is brought up by clicking the
Probe Answer button in the 5 x 5 Grid Game Player Dialog,
the PAW is positoned to the right of the Big Boggle® grid. In this
scenario, when you working in the PAW and press the Esc key,
the PAW will be closed for the time being.

You can double-click a probed word in the PAW to see that word's definition,
if it has one. The definition is shown in the Definitions
area above the workspace.

You can click the Sort button at the bottom of the
PAW to use the current lines in the PAW which have either a plus
or a minus or a greater-than sign in column 1 as the basis of producing
a sorted list of probes which replace the existing lines.
Other lines of the PAW are eliminated.
The character in column 1 is ignored as part of what is being sorted.
Only the probed words are sorted. This feature is especially useful
to a user dealing with seeking words in a 5 x 5 Grid Game.

When the PAW is closed, its contents are preserved. You can later reopen it
to continue using it.

24. Flashcarding

WHAT supports scenarios for presenting virtual flashcards
to you and
following up with the disposal of these cards into various places. In
general this facility is quite powerful in that what a flashcard contains
is any WHAT command line.
These will typically be a rack in canonical
order, such as an alphagram, but that is just one of the possibilities.

WHAT supports the preparation of word lists for the
purpose of flashcarding.
You can use a query along with chosen query filtering to gather
canonically-ordered words for a wordlist. That wordlist can be exported
to a file and later imported back into a WHAT wordlist
for flashcarding use.
The order of the wordlist resulting from the query may be alphabetical,
or sorted by probability or playability, and you may elect to shuffle the wordlist
using a command of the form:

/<wordlist-#>S

When you are about to deal with flashcarding,
you would typically make slate presentations have no output, with a
command such as:

\!

Then, you can request one of the canonically-ordered words from the list,
and WHAT supports two different methods of choosing the
item of the wordlist to present:

Randomized flashcarding -- it can randomly select one of the first 20
items of the list. The command to start this off is of the form:

/<wordlist-#>~FC

Notice the tilde before the
FC.

Sequential flashcarding -- it can select the first item of the list and
then remember that item was most recently presented, such that each
item in the list is selected in forward order. The command to start
this off is of the form (without the tilde):

/<wordlist-#>:<item-#>FC

In this form of command, the colon and item number are optional; in the
absence of an item number, flashcarding begins with item 1, but if you
specify an item number, that will be the first flashcard, and
WHAT will skip all earlier items in the list.

That item becomes a command, and the terminating Enter
is automatically provided for you. Assuming you earlier instructed
WHAT to output nothing for its slate presentation,
you can now make various slate presentations, such as asking for the
number of words (#)
or individual letters of the words on the slate (such
as 1/3),
etc. After deciding what to do with that flashcard, you can
dispense with the flashcard in one of several ways:

Type a command with just a number, that WHAT interprets
as a fraction
following a decimal point (although that decimal point is not typed) to
represent the toughness of that word. So ".0" is the least tough and
".999" etc. is the most tough. You may type any number of digits to
represent toughness, but at most three is recommended. Based on this
toughness, the "word"
is placed back into the wordlist at a place where
it deserves to go. When a word is rated as easy, it will be placed near
the end, and when it is rated as difficult, it will be placed near the
beginning. Where in the list it goes is exactly what the toughness number
indicates. For example, if you say a word has toughness 75, that is
interpreted as ".75" and so the word is moved to 1/4 of the way down
from the list's beginning.

This first choice is likely to be used only for randomized flashcarding,
but that is not a restriction. It's just going to provide duplicate
presentations of cards if you are doing sequential flashcarding. When a
card is moved later in its wordlist, you will come across that same card
again in your sequential pursuit.

Type the short command of
N,
which means "next"; this is equivalent to saying the toughness is
zero.

Type one of the single letters,
X,
Y, or
Z,
which moves the flashcard out
of its wordlist and to the end of another wordlist.
X
is used to indicate
the destination wordlist is one whose number is one higher than that of
the source wordlist,
Y
is the next one, etc. Following this move, another
N
command is automatically done.

Type the single letter
D
command to delete the flashcard. Following this
deletion, another
N
command is automatically done.

Type the single letter
M
command to bring up the Item Disposition Dialog
in which you can formulate a command to delete, copy, or move the
flashcard; see the section
"Moving Items Among Wordlists".
You can also bring up the Item Disposition Dialog via menu picks, such as
Tools→Flashcarding→Copy Current Card
If you use the Item Disposition Dialog to dispose of the card, you will
need to issue your own
N
command to proceed to the next card.

Temporarily go do something completely different, and later come back
to the flashcard. If you want to see the current card again, type the
single letter command of
F.

There is one command to support reading flashcards when commands are
being executed from a command file. This command may appear only in command
files, and it makes sense that it would end a command file, since either
it causes a rewind or an exit of the file. This command is:

/NR

-

this command is allowable only in a command file;
get the next flashcard if any, and if there is one,
rewind the command file and continue executing it; otherwise,
continue with the next command in the command file

After getting a candidate from the wordlist, you need not immediately
type a toughness command. You could probe the slate, or you could even
go on and make other queries. WHAT remembers the last
"word" it presented
as a flashcard, and so you can type a toughness command much later. You
can also bring back the same flashcard using the
/FC
command. The old "word" is not removed from its wordlist into you type
a toughness command, and then it is moved. After you type a toughness
command (that is merely an integer), you are presented with a next
flashcard. You can continue to work with these flashcards, but when you
want to stop, if you want to retain the list as it is, be sure to export it
to a file. In a future WHAT session,
you can import that same wordlist.

Perhaps the current flashcard is so easy that you wish to remove it from
its wordlist.
This is specific instance of the general facility of WHAT
to move an item from one word list to another. The general facility also
allows for the throwing away of the item. In order to move the current
flashcard, use one of the following 1-character commands:

D

-

delete the current flashcard,
removing it from its wordlist,
and prompt with the next flashcard

X

-

as a 1-letter command,
move the flashcard to the end of the wordlist whose number is
one higher than that of the wordlist being used for flashcarding,
and prompt with the next flashcard

Y

-

as a 1-letter command,
move the flashcard to the end of the wordlist whose number is
two higher than that of the wordlist being used for flashcarding,
and prompt with the next flashcard

Z

-

as a 1-letter command,
move the flashcard to the end of the wordlist whose number is
three higher than that of the wordlist being used for flashcarding,
and prompt with the next flashcard

M

-

bring up the dialog for deleting, copying,
or moving wordlist items

If the computed destination wordlist is greater than 99, 99 is subtracted
from that number to determine the destination.

Flashcarding cannot be done using the slate (wordlist 0) as the basis,
but any other wordlist is a possibility. To keep wordlists from being
altered unintentionally, you must explicitly turn on flashcarding as a
mode using the

/<wordlist-#>FC

command, and when you do this, the fact that flashcarding is enabled is
shown in the WHAT status bar at the bottom left of the
WHAT window. The mode can be turned off using the
/-FC
command. Only when flashcarding mode is on is a lone number on the
command line interpreted as a toughness. The

/<wordlist-#>S

command to shuffle a wordlist can be performed independently
of flashcarding mode.

24.1 Flashcard Preparation

The previous section described how to use wordlists as the basis for
working with flashcards, but it assumed you start with a wordlist of
such cards.
In general, a flashcard is a WHAT command. The typical
command is an anagramming query, such as implied by a set of letters
in alphagram or some canonical order of your choosing. But this is not
the only kind of a flashcard possible. For example, you may want to have
a list of words whose definitions you want to learn. The items in such a
wordlist would be likely be in spelling order instead of canonical order.

You might want to quiz yourself on extensions to words, such as what are
the 3-letter prefixes for
QUATE.
In this case your flashcard would be something like

...QUATE

or

3.QUATE

Such items may be members of wordlists, despite the fact they are not
really words. An item of a wordlist being used as a flashcard is in
general one WHAT command;
it may even include a comment as part or all of the item.

WHAT can help you make wordlists consisting of words
in spelling order or canonical order.
If you would like to get fancier, you should use a
text editor, such as Notepad, Emacs, or MS Word, to prepare such text files.

Here an example of how to prepare a set of flashcards for studying likely
seven-letter words:

Start by making sure the canonical order which
WHAT is using is the one
you want. It defaults to alphagram order, which is the set of letters in
alphabetical order. We personally favor segregating the consonants first
and having consonants and vowels each in alphabetical order, with a space
as a separator. So for example,
INSTEAD
in alphagram order
is "ADEINST"
and in our favored canonical order it is
"DNST AEI".

Begin by making the query:

7./Q;W#

and in a few seconds, you will be told there are 19424 items (which
are canonically-ordered racks) on the slate.

Next indicate you want output sorted in decreasing order of probability
for the long term, and that you want to have slate presentation include
each word's probability for the long term. In addition look at the 500th
word on the slate:

/<%! /500

You will be shown:

ACEENRT

You could alternatively also look at the word with its
probability with the command:

/<%! % /500

You will be shown:

ACEENRT. 256608w

which mans the 500th most-likely rack is the one shown, and you are told
the number of ways those letters can be chosen
(i.e., what WHAT calls probability) is also shown.

So if you want to make up a set of about 500 flashcards to study, it
it best to make the cut where the probability changes. To find out the two
possible places, make these two queries with filtering based on probability.
The first query can be made with either:

7./Q;W/%>={ACEENRT}#

or

7./Q;W/%>=256608#

and the second one is either:

7./Q;W/%>{ACEENRT}#

or

7./Q;W/%>256608#

You will be told there are 531 and 494 words respectively. One or the other
of these queries produces the flashcard list for you.

There are some options now. If you are content with the 494-rack group,
you have made it, and you can use it. You could recreate the full group
of 19424 racks and then move a certain number of items to another
wordlist.

At this point, you could save the slate to a file. This file will be in
the same order as the sorted slate, so that the first flashcards you will
be presented are for the most probable words. Alternatively, you could at
this point shuffle the slate, but it would take a little less work to do
the shuffling in a wordlist you create as a copy of the slate. The reason
is that when you output the slate, the current sorts apply, but when you
output any other wordlist, there is no sorting. So if you were to shuffle the
slate, you would then want to turn off the two sorting keys when you
export the slate.

25. Playing the 15 x 15 or 21 x 21 Grid Game

26. Playing the 5 x 5 Grid Game

As of the release of WHAT Version 2.2,
this section describing support for playing this game has been moved to
a separate document and enhanced to include new features; see
WHAT about Boggle®.

27. Playing the Word-Building Game

This feature relates to a a game which has shown up on TIVO systems, where
an individual (or collaborative group) builds up words of length 3 - 12 from
a grid of 8 rows of 12 columns of tiles. This game is named Wordsmith,
as it appears on the TIVO system, and WHAT supports a very similar game.
Support is for English, French, and Spanish tiles and lexicons.
The 5 x 5 Grid Game described in the previous section is supported only
for English.

You can bring up the Word-Building Game Dialog in one of three ways:

use the /WB
(for Word-Building),

type a 1-character command of
B,

make a menu pick in the WHAT GUI under the Tools menu.

Typically, you have WHAT form a random grid for you,
although you can
import grids from outside the program. You can also bring back grids which
you have dealt with during this WHAT session.
WHAT also allows you to provide
you own grid. It will warn you if you create a grid that does not have
the standard distribution of the tiles, but you are permitted to play with
such a grid. WHAT's
standard 96 grid tile distribution has less
tiles than are found as the non-blank tiles in a standard English, French,
or Spanish Scrabble® sets. For English, the omitted tiles are one
I and one
O.
For French, the omitted tiles are one
A,
two E's,
and one U.
For Spanish, the omitted tiles are one
G and one
H.

In playing the game, you select tiles from the top row of the grid to
place up into the box where you are forming a word.
As you contribute these tiles, you are warned if what you are forming cannot
lead to an acceptable word in the lexicon.
When you indicate you have completed a word, it will be accepted only when
it is acceptable in the lexicon. You may retract your
plays, including retracting your formed words. The object is to score
well with all the words you are making. A word is scored by multiplying its
length times the sum of the individual scores on the tiles in that word.
So, the best possible score is achieved theoretically by playing eight
12-letter words. Being able to do this is likely to be impossible.
Very good computer-found solutions will have about 10-12 words and can score
well above 1500.

As you are playing you are shown the words you have formed and also how
long it took you to find these words. When you end a game, either because
you can find no more plays or if there are too few tiles left, the unplayed
tiles do not affect the total score. If you want, you can record your
game in a history file, or you can export it to a file of your choosing.
The recorded game includes the grid, the words played, and the columns
from which you chose each letter. The solving times are not remembered in
the history.

When importing and exporting Spanish grids, or when
specifying your own grid, the digram Spanish
tiles are signified by digits
1,
2, and
3 for
CH,
LL, and
RR respectively.
When specifying your own grid via the dialog, you may also indicate
these digrams by typing
Ctrl+C,
Ctrl+L, or
Ctrl+R.
Tilde-N
can be signified by
that very character, and you can specify one during your own grid
specification by typing
Ctrl+N.

It is intended that WHAT will provide some solving power
to produce a good, but probably not optimal, solution for a given grid.
This is currently being studied and developed, and it seems to be a
very difficult programming problem to find an optional solution in a reasonable
amount of time.

To see more details on how to play this game, click the
Help button in the Word-Building Game Dialog.

The source of words used for playing this game is the current primary
lexicon. If you have changed the word source to a wordlist, that does
not affect the source for this game.

You can close the dialog and reopen it later, coming back to where you
left off. Switching a lexicon from English/French to Spanish or vice versa
while you are in the midst of a game or with a current grid
causes confusion, but you are warned about this when you do this
as you resume the Word-Building Game Dialog. If you want to play a game using
a different lexicon, you should clear the current grid and start again.
You can also leave things as they are, and return to playing once you have
changed the lexicon back to the same kind it was when you started.

28. Starting WHAT

You can start the WHAT program by double-clicking its icon,
or you can invoke it from a DOS prompt. If your current working directory is
where WHAT.exe is,
you can merely type the command:

what

or if you are elsewhere, type the path to the executable file and end
with "what".
Following "what"
you may supply an argument to the program
to direct it to use a specific initialization file other than
what.ini, using a
DOS command of this form:

what -i <filename>

Similarly, you may supply an argument to the program
to direct it to begin by executing a particular command file, using a
DOS command of this form:

28.1 Initialization File

When WHAT starts up,
it reads and processes the file what.ini
that it seeks in the current working directory. This file specifies
installation-specific data for WHAT.
The file is organized into sections, and each one
begins with a short uppercase phrase within square brackets. Blank lines
and lines that begin with a minus sign or number sign are ignored, and
thus a line of several minus signs is a visually good inter-section
separator. Following each section heading line are one or more lines of
data. Look at the what.ini
file on your computer to see an example of the contents of this file.

There is an optional command line argument of
-i followed by a filename,
which can be used to tell WHAT a specific
initialization file to use.

Rather than reporting detected errors in the initialization file,
WHAT ignores lines with errors. This will not be much
of a problem, since it is WHAT itself which creates
initialization files. If users find this behavior lacking, please inform
the author.

28.1.1 [LEXICONS] Section

The [LEXICONS]
section of the WHAT initialization file
has one or two lines of data. The first line has 4 fields separated
by a space: the number of the primary lexicon, the number of the secondary
lexicon or 0 for none, an indicator of how to mark words in or not in the
secondary lexicon, and the character to be used as such a marker. The
values of the third field are:

-1
for indicating words that are not in the secondary lexicon,

+1
for indicating words that are in the secondary lexicon, and

0
for no such indication.

The indicator is a suffix character immediately
following a word in slate presentation. Such indicators are not shown
in the results of two-word anagrams or two-word patterns.

The optional second line of this section has the number of the lexicon
to be used for challenges. In the absence of this line, the challenges
lexicon is the same as the primary lexicon.

Lexicon numbers are assigned when each lexicon file is created by
the WHAT development staff (i.e., Mike Wolfberg).
Each file includes the information as to what its number is.
You need not get involved with this numbering, since you can create a
new initialization file via WHAT, and it will fill in the correct
numbers.

28.1.2 [DEFINITIONS] Section

The [DEFINITIONS]
section of the WHAT initialization file
is used to supply a path of an optional file
of definitions. At present, you may specify only one such file, and
this is not a per-lexicon file. It is not considered an error for the
specified file to be missing.

28.1.3 [PLAYABILITY] Section

The [PLAYABILITY]
section of the WHAT initialization file
is used to specify a path of an optional file which can be used for
WHAT to use as the basis of assigning a playability number
to a word. Also in this section, whether the feature is enabled as
WHAT starts is specifiable; in order to have this be
the case, the section should include

YES

28.1.4 [WORKSPACE FONT] Section

The [WORKSPACE FONT]
section of the WHAT initialization file
specifies the font WHAT
initially uses in its workspace. The default value for this is
"Courier New".

28.1.5 [WORKSPACE FONT SIZE] Section

The [WORKSPACE FONT SIZE]
section of the WHAT initialization file
specifies the font size WHAT
initially uses in its workspace. The default value for this is 16.

28.1.6 [WRAP WORKSPACE LINES] Section

The [WRAP WORKSPACE LINES]
section of the WHAT initialization file,
if present, has one data line which should be either
ON or
OFF.
This indicates whether long lines in the
workspace are wrapped to the next line. In the absence of setting this
parameter in the initialization file, the default is that wrapping is on.

28.1.7 [WORKSPACE COLORS] Section

The [WORKSPACE COLORS]
section of the WHAT initialization file
specifies the colors of text and background in the workspace, and
the color used for blank designation is also specifiable.
Unless otherwise changed, the defaults for these colors are text is white,
the background is black, and the blanks are lime green.
The format for individual lines in this section are:

column 1 is either T, B, or ?,

column 2 is a space,

columns 3-8 are three 2-digit hex codes the the RGB color spec.
The low-order 2 digits are for red.

The choices for column 1 signify Text, Background, and Blanks.

28.1.8 [RECORDING FILENAME PREFIX] Section

The [RECORDING FILENAME PREFIX]
section of the WHAT initialization file
specifies the initial part of a
path for the name of the file to be used to record challenged words.
When the specification has no path punctuation (slashes or a colon),
files are created in the directory known via environment variables
HOMEDRIVE and
HOMEPATH.
On an XP system, this is usually directory:
C:\Documents and Settings\<user-name>.
On a Vista system, this is usually directory:
C:\Users\<user-name>.

As an example, the spec WHAT author, Mike Wolfberg, uses is

C:\msw\sc\ratings\sc

which means a file created on September 23, 2014 would have a name of

C:\msw\sc\ratings\sc140923.wds

This section must precede the
[RECORDING PERIODS]
section in the initialization file.

28.1.9 [RECORDING PERIODS] Section

The [RECORDING PERIODS]
section of the WHAT initialization file
indicates those times during a week or
month when the recording of challenged words is on by default. The format
of individual lines of this section are either just one line with

ALWAYS

or a line of the form

<day-spec><2-column-from-hour>,<hours-of-duration>

These are the allowable day-specs:

DAILY<one-space>

<nth><one-space><day-of-week><one-space>

<nth> is one of:
1ST,
2ND,
3RD,
4TH,
5TH,
ALL,
<3-spaces>

ALL and
<3-spaces> are equivalent.

<day-of-week> is one of:
SUN,
MON,
TUE,
WED,
THU,
FRI,
SAT

To support evening play, such as in clubs, four hours are first
subtracted from the real time to be the basis of naming the file used
for recording challenged words. The from-hour should be a 2-digit hour,
where hours are between 00 and 23, and the hours of duration are
specified as an integer less than 25. A start hour less than 6 is
assumed to be 6, and an end time past 6 a.m. is assumed to be 5:59 a.m.
As described in the "Challenges" section, files for recorded challenges
are named based on what the day was six hours earlier.

For a club that meets from 7 p.m. every Thursday, the following spec
makes sense, especially if challenges may occur somewhat earlier than
the official start time:

ALL THU 18,10

The duration of 10 hours is much higher than necessary, but it should not
cause any false recording, since that represents an ending time of 4 a.m.

If you have requests for other time specifications, please make
this known to us.

This section must follow the
[RECORDING FILENAME PREFIX]
section in the initialization file.

28.1.10 [CHALLENGE REVERTING] Section

The [CHALLENGE REVERTING]
section of the WHAT initialization file, if present,
consists of optional lines which each affect settings involving the
feature that the Challenge Dialog will be brought up automatically after
a period of user inactivity. These are the possible lines:

INITIALLY ON orINITIALLY OFF

REVERT-WHEN-RECORDING ON orREVERT-WHEN-RECORDING OFF

DURATION <number>
where the number is (only) one of the following to indicate how many seconds of
inactivity are employed: 20, 30, 40, 50, 60, 90, 120, 180, 240, 300.

28.1.11 [PRINTER FONT] Section

The [PRINTER FONT]
section of the WHAT initialization file
specifies the font WHAT
initially uses when it prints the workspace. The default value for this is
"Courier New".

28.1.12 [PRINTER FONT SIZE] Section

The [PRINTER FONT SIZE]
section of the WHAT initialization file
specifies the font size WHAT
initially uses when it prints the workspace. The default value for this is 10.

28.1.13 [PRINTER PAGE SETTINGS] Section

The [PRINTER PAGE SETTINGS]
section of the WHAT initialization file
specifies six values which affect the layout of printed pages
when WHAT prints the workspace. The one data line has six
integers separated by spaces:

top margin (in pixels) in range 0 - 500

left margin (in pixels) in range 0 - 500

bottom margin (in pixels) in range 0 - 500

interline spacing (in pixels) in range 0 - 99

header/footer control:

0 for printing a header on each page

1 for printing a footer on each page

2 for not printing a header or footer on each page

header/text or text/footer spacing (in pixels) in range 0 - 99

These last two data have no effect when not printing a header or footer,
but these values are retained even when that is the case.

28.1.14 [LEFT TABS] Section

The [LEFT TABS]
section of the WHAT initialization file, if present,
consists of one data line which should be one of the following:
QUERY,
PRESENTATION, or
NOVICE, or
NONE.
In the absence of
this section NOVICE
is assumed. This controls which tab if any is showing
when WHAT begins. A new user is shown the
Novice tab, but then
it is likely that most WHAT users will prefer to show the
Query tab on a regular basis.
On the other hand, if
you want to run WHAT without the left tabs showing
in order to be able to have a small pixel density, such as
800 x 600, then you would be running the program with no tabs
showing. Making this choice is a tradeoff among usefulness, screen
density, and screen clutter.

When you choose to show the Query
or Presentation tab, four graphical buttons near the
Challenge button appear; they are hidden when the
Novice tab is showing.
If you elect to not show the left tabs,
which tab is active when you make that menu click will affect whether the four
graphical buttons show for the current session. When WHAT is freshly started,
if the initialization file indicates there are no left tabs, then those
four graphical buttons are not shown either.

If you run WHAT on a screen with a small pixel density,
such as 800 x 600, it will run without showing the left tabs,
independently of what this [LEFT TABS] section specifies.

28.1.15 [DEFAULT DIRECTORY] Section

The [DEFAULT DIRECTORY]
section of the WHAT initialization file
specifies the default directory WHAT uses
when a user opens a file for input or output, such as to read or write a
wordlist.

28.1.16 [FUNCTION KEYS] Section

The [FUNCTION KEYS]
section of the WHAT initialization file
can be used to specify meanings of the various
function keys, F1 though F12,
except not F10. There are two options for each of these keys:

whether the line is cleared first, and

whether the command is then
performed as if the Enter key were pressed.

These options are indicated
as part of each data line in this section, whose format is:

column 1 must be F,

columns 2 and 3 are a left-adjusted number in the range 1 - 12,

column 4 is a space,

column 5 is C
for clear the line first or
A for append without clearing,

column 6 is a space else E
to mean Enter or Execute,

column 7 is a space,

column 8 through the end of the line is the text to be appended.

At present, a function key cannot represent the inputting of more than
one line.

28.1.17 [TIMER SETTINGS] Section

WHAT supports keeping track of time duration and
indicating when the timed period is up. See the Timer tab at the
upper right corner of the WHAT window. The settings for
the timer can be set up in the WHAT initialization file.
Individual lines in this
section are optionally:

PERIOD-MIN <number>

PERIOD-SEC <number>

WARNING-MIN <number>

WARNING-MIN <number>

WARNING ON or

WARNING OFF

PERIOD-SOUND <filename of sound file>

WARNING-SOUND <filename of sound file>

28.1.18 [PREMIUM SQUARE COLORS] Section

The [PREMIUM SQUARE COLORS]
section of the WHAT initialization file
specifies the colors of the premium squares on the
board used when playing the 15 x 15 or 21 x 21 game.
The defaults for these colors
should be good enough, but in case users might want to make changes to these,
those changes can be made more permanently.
The format for individual lines in this section are:

columns 1-3 are one of these choices: DLS, TLS, QLS, DWS, TWS, QWS

column 4 is a space,

columns 5-10 are three 2-digit hex codes the the RGB color spec.
The low-order 2 digits are for red.

The choices for columns 1-3 signify choices such as DLS for Double-Letter Square.

28.1.19 [HOOK SEPARATORS] Section

The [HOOK SEPARATORS]
section of the WHAT initialization file
can be used to specify the separators to use when front and back hooks
are included in presented output. Individual lines in this section are
optionally:

FRONT "<front-hook-separator>"
or

BACK "<back-hook-separator>"

28.1.20 [PROBE ANSWERS] Section

The [PROBE ANSWERS]
section of the WHAT initialization file
can be used to specify settings of the options for the
Probe Answers Window (PAW). Individual lines in this
section are optionally:

NOTE-NOT-NEW-SHORTS ON orNOTE-NOT-NEW-SHORTS OFF

NOTE-DUPLICATES ON orNOTE-DUPLICATES OFF

BLACK-BACKGROUND ON orBLACK-BACKGROUND OFF

USE-COLORS ON orUSE-COLORS OFF

IMMEDIATE-FEEDBACK ON orIMMEDIATE-FEEDBACK OFF

SHOW-COUNTS ON orSHOW-COUNTS OFF

28.1.21 [BOGGLE] Section

The description of this section of the WHAT initialization file
is included in the separate document specific to describing support of
playing Boggle® in WHAT:
WHAT about Boggle®.

28.1.22 [BIG BOGGLE CUBES] Section

The description of this section of the WHAT initialization file
is included in the separate document specific to describing support of
playing Boggle® in WHAT:
WHAT about Boggle®.

Other kinds of sections of the WHAT initialization file
may be supported in the future.

29. Ending a WHAT Session

Use one of these commands to exit from WHAT:

/END

/EXIT

/QUIT

These commands must be the only characters of the command. Case of the
letters is irrelevant. You may also exit in one of these ways, standard
in Windows operating systems:

press Alt+F4

click on the X
box in the upper right corner of the WHAT window.

The /END
command is also usable in a command file such that the
execution of commands from that file stop, but WHAT does not
exit.
/EXIT and
/QUIT
in a command file do cause WHAT to exit.

30. Minimizing WHAT

The term "minimizing"
refers to the moving of an active program to the
task bar from which it can later be restored. The usual way in which
you minimize Windows applications is to click the left mouse button on
the left of the three buttons at the upper right corner of the
application's window. This works in WHAT unless a
dialog is active.
In order to minimize the WHAT window,
first get out of any dialogs. One
exception to this rule is when the Challenge Dialog is active, you can
minimize the WHAT window by pressing
Ctrl+Z,
as described next.

When using WHAT, you can press
Ctrl+Z
to cause WHAT to minimize its window (and
not end the session). This does not work while in dialogs other than the
Challenge Dialog, but in the Challenge Dialog, this is disabled when that
dialog is locked. When in the Challenge Dialog, this is the only way
you can minimize the WHAT window;
clicking on the minimize button in the
upper right of the WHAT window does not work
in this situation.

31. Glossary

Here are a few terms employed in this user guide for which some readers may
appreciate referencing a definition:

alphagram

the arrangement of a group of letters into alphabetical order

ANA

the old anagramming program upon which WHAT is based.

anagram

a word that is formable from a certain set of letters.
Some sets include more than one word, and we then say those
words are anagrams of one another; for example,
RODENTS and
SNORTED are anagrams.

Anagrams

a word game that is one of the predecessors of the word
game played on a 15 x 15 board; tiles without scores are
used to build up words from both a pool of tiles and by
stealing already-formed words by using their tiles and
adding one or more pool tiles then reordering.

anahook

this term applies to a letter that can be added to a
group of letters that will then anagram to one or more
words. For example, the only anahook for
AILORU is
X.

anamonic

this term denotes a word or phrase which includes letters which
can be used to form words from a base word along with a blank.
For example, the phrase "female, but doesn't evoke pangs"
includes all the letters which can combine with
SISTER to form
a 7-letter word.

blank

this term comes from the game played on a 15 x 15 board, in
which a tile has nothing on it, and it can be used to represent
any letter the player so chooses. In WHAT it means
any letter can match the blank when it is part of a query.
WHAT has two kinds of blanks, and it also provides for
sets of letters other than just one of each letter of the alphabet.

canonical ordering

an ordering based on a particular rule for ordering
a group of letters appearing in WHAT; one example
is merely alphabetical ordering. This term comes
from mathematics; "canon" comes from "canon law",
and this has to do with a way to do something based on a rule.

character

a letter, digit, or a special character that a user can
type on the keyboard; this includes a space and a Tab.

command

a line typed by a user to request the WHAT program to do
something; one class of commands are queries.

digit

one of the characters:
0 1 2 3 4 5 6 7 8 9.

glossary

a list of difficult or specialized words with their definitions,
often placed at the back of a book, but not in this instance.

GUI

this term from computer usage is an acronym for Graphical
User Interface; many programs employ a GUI to get user input,
and with WHAT this facility is available, but it
is not the primary method for getting a user's intentions understood.

hook

a letter that may be added to a word at one end or the other
to form a new word. The term comes from how in the game played
on a 15 x 15 board you must connect with words already on the board.

intersection

from mathematics, specifically set theory, this term
indicates an operation between two given sets such that a
member is in the intersection if it appears in both of the given sets.

letter

one of the 26 lowercase or uppercase members of the Roman alphabet.

lexicon

the list of words with which WHAT works; this is usually
the Official Word List (OWL) for acceptable words for the game
played on a 15 x 15 board in North America.

LeXpert

a freeware GUI-oriented program that includes most of the
features of WHAT, available at http://www.lexpert.com

pattern

a kind of query where you provide some constraints on the
letters in sought words based on their positions in words.

probe

in WHAT, this term is used when a user wants some hints
about the contents of the slate; for example, individual letters of
individual words can be requested. Also, there is a Probe Answer
Window or (PAW), where a user can probe for words which are either in
a specified wordlist or the primary lexicon or probe for words which
are formable using the current Boggle® grid.

query

a command a user types to WHAT that directs it to
seek words and place answers on the slate; in contrast, some
commands merely examine the slate, and others are used
to affect WHAT's settings.

rack

this term comes from the game played on a 15 x 15 board,
where it refers to both the object to hold a player's tiles
or to the letters on the tiles themselves. In WHAT, one
usually thinks in terms of a 7-letter rack, but the user
can alter the rack size. One place this concept arises in
WHAT is that a user can request a rack of random tiles.
Another place is when doing pattern matching, you may present a pattern
and also a rack of letters and blanks to be used to fill in the pattern.

relational operator

this term from programming languages is a character
or pair of characters that represents a
mathematical operation comparing two values;
an example is
<=,
which means "less than or equal to".

Scrabble®

this is the brand name for the word-oriented board game which
is played competitively around the world. Its copyright is
held by Hasbro in North America and Mattel elsewhere.

semi-word

this is a term coined for WHAT to indicate one item on the
slate that is not necessarily a word of the lexicon.

set

although this is a mathematics term, WHAT extends the usual
definition of a set where a member may appear at most once.
WHAT uses this term to mean an unordered collection of any
number of each of the letters of the alphabet. Sets can
be employed in making queries.

slate

this is a WHAT-only concept, and it is the virtual place
where answers to queries are placed. Placing words onto
the slate as a result of making a query is a separate step
from getting the slate presented.

unhook

this term was coined for WHAT, although perhaps it has been
used by others, and it is a letter that may be removed from
the beginning or end of a word that leaves behind another word.
You have the option of having words presented with unhooks indicated
by a minus sign.

union

this term from mathematics, specifically set theory,
indicates an operation between two given sets such that a
member is in the union if it appears in either of the given sets.

WHAT

Wolfberg's Helpful Anagramming Program, the subject of this
user guide. The older version of this program was named
ANA.

wordlist

this term is employed in WHAT to mean a specific list which
the program holds; wordlists are named by number and they
also have a user-provided label to note an intended purpose;
you typically make a wordlist by copying the slate, and you may
created one as a result of performing logical operations
on existing wordlists.

workspace

the region of the WHAT window where commands are typed in
and results are shown, especially where slate presentation is done.

Please let us know if you would like to see other terms in this glossary.

32. The Future

There is separate document entitled
"What's Wrong&quot.
It lists known bugs and problems.
The document also includes an extensive list
of possible future additions to the program.