The xzewd destination

# Parsing the destination

This is a formal description of how xzewd parses the contents of the destination box to find out where it should send a message to.

## Default state

Before xzewd starts parsing, a default state is set up. This default state is also restored every time a message is sent.

- The current class is set to "MESSAGE".
- The current instance is set to "PERSONAL".
- The current recipient is set to "*".
- The authenticate, acknowledge, and signature options are set from their corresponding values in the Sender Options and Signature dialogs.

## The parser's actions

### Double quote substitution

Any sequence of characters inside "double quotes" is collapsed into one word. Spaces are allowed inside the double quotes, as are commas, angle brackets <>, etc. If you want to have a double quote inside double quotes, say "\"" instead. "\n" is translated to a newline, "\\" becomes one backslash "\", and any other backslash sequence "\char" becomes simply "char" itself.

word
  A word is a sequence of "normal" characters. It cannot start with a dash `-', a comma `,', or a left angle bracket `<'. If it starts with a double quote `"', double quote substitution is performed; otherwise, the parser reads ahead until it encounters a space, a comma, or a left angle bracket, and uses that as the word.

  After xzewd reads a word m, it sets the current recipient to m. Then it scans ahead for any of the options -a, -d, -v, -q, -s and parses those. Then, it sends the message.

-c word
  Sets the current class to word.
-i word
  Sets the current instance to word.
-r word
  Sets the current recipient to word. This is different from just saying word by itself in that the message is not immediately sent.
, (a comma)
  Immediately sends the message to the current class, instance, and recipient, using the current set of options, then returns the parser to its default state.
-a
  Turns authentication on.
-d
  Turns authentication off.
-v
  Turns acknowledgement on.
-q
  Turns acknowledgement off.
-s word
  Sets the current signature to word. This only changes the parser's current signature; the signature you set in the Signature dialog is unaffected.