Note: this file is in reversed chronological order (bottom to top).


June 7, 2012:
 - BRLTTY 4.4 released:
   Changes:
      DOS option syntax (/option[:value]) can only be used on DOS or Windows.
      The clipboard functions have been renamed to accurately reflect what they do:
         CUTBEGIN  -> CLIP_NEW
         CUTAPPEND -> CLIP_ADD
         CUTLINE   -> COPY_LINE
         CUTRECT   -> COPY_RECT
         COPYCHARS -> CLIP_COPY
         APNDCHARS -> CLIP_APPEND
      The Caml bindings for BrlAPI have been renamed to Ocaml.
      The tbltest program has been renamed to brltty-ttb and is installed.
      The ctbtest program has been renamed to brltty-ctb and is installed.
      The --with-compiler-prefix= configure option has been removed.
   Fixes:
      Brltty keyboard key bindings no longer interfere with Orca key bindings.
      The updating of status lines no longer confuses the cursor routing algorithm.
      The same USB device can no longer be used by more than one brltty at a time.
   New Features:
      The help function cycles through all relevant pages.
         For example, help for the current keyboard key table is viewable.
      The info-mode line contains a clock.
      The preferences menu has been divided into a set of category-based submenus.
         Open a submenu with any key that would normally alter a setting.
         Close a submenu either by scrolling to its Close item and activating it
         or via the new MENU_PREV_LEVEL function.
      The -l [--log-level=] option of brltty accepts log category names.
         The names are: ingio, inpkts, outpkts, brlkeys, kbdkeys, csrtrk, csrrtg.
         Specify the log level and/or category names as a comma-delimited list.
      The -C [--cancel-execution] option has been added to brltty.
         The same pid file must be specified by both the cancelling and the
         already-running brltty.
      The pid file may be specified within the configuration file (brltty.conf).
      The brltty-trtxt program has been added and is installed.
   New functions:
      MENU_PREV_LEVEL: Close the current submenu.
      TIME: Display the current time (format configurable via the menu).
      PWGEN: Set the clipboard to a random password (length set by routing key).
      Sticky input modifier functions:
         SHIFT: Add the shift modifier to the next typed character.
         UPPER: Add the uppercase modifier to the next typed character.
         CONTROL: Add the control modifier to the next typed character.
         META: Add the meta (left alt) modifier to the next typed character.
      Autospeak suboption toggles:
         ASPK_SEL_LINE: Set autospeak selected line on/off.
         ASPK_SEL_CHAR: Set autospeak selected character on/off.
         ASPK_INS_CHARS: Set autospeak inserted characters on/off.
         ASPK_DEL_CHARS: Set autospeak deleted characters on/off.
         ASPK_REP_CHARS: Set autospeak replaced characters on/off.
         ASPK_CMP_WORDS: Set autospeak completed words on/off.
      Many functions specifically for speech navigation:
         SPEAK_CURR_CHAR: Speak current character.
         SPEAK_PREV_CHAR: Go to and speak previous character.
         SPEAK_NEXT_CHAR: Go to and speak next character.
         SPEAK_CURR_WORD: Speak current word.
         SPEAK_PREV_WORD: Go to and speak previous word.
         SPEAK_NEXT_WORD: Go to and speak next word.
         SPEAK_CURR_LINE: Speak current line.
         SPEAK_PREV_LINE: Go to and speak previous line.
         SPEAK_NEXT_LINE: Go to and speak next line.
         SPEAK_FRST_CHAR: Go to and speak first non-blank character on line.
         SPEAK_LAST_CHAR: Go to and speak last non-blank character on line.
         SPEAK_FRST_LINE: Go to and speak first non-blank line on screen.
         SPEAK_LAST_LINE: Go to and speak last non-blank line on screen.
         DESC_CURR_CHAR: Describe current character.
         SPELL_CURR_WORD: Spell current word.
         ROUTE_CURR_LOCN: Bring cursor to speech location.
         SPEAK_CURR_LOCN: Speak speech location.
         SHOW_CURR_LOCN: Set speech location visibility on/off.
   New braille drivers:
      hw: HumanWare
      ir: Iris
      np: NinePoint (Cebra)
   Baum braille driver changes:
      The Inka is fully supported.
      New key bindings for models with six display keys:
         Display1+Display5 displays the current time.
   EuroBraille braille driver changes:
      The latest models are supported.
      Key tables, rather than hard-coded bindings, are used.
      The display is updated when returning from the internal menu.
      The LCD (visual display) is supported.
      Large displays work reliably when connected via USB.
      The protocol= parameter takes a model (rather than a protocol) name.
   FreedomScientific braille driver changes:
      New key bindings:
         LeftRockerUp goes up one line.
         LeftRockerDown goes down one line.
   HandyTech braille driver changes:
      New key bindings:
         B2+B3+B5+B6 displays the current time.
         B1+B2+!RoutingKey sets the clipboard to a random password.
   Papenmeier braille driver changes:
      A serious USB problem has been fixed.
      New key bindings for models with 13 front keys:
         Dot3, when in the menu, closes the current submenu.
         Dot1+Dot2+Dot3+Dot6 routes the cursor vertically.
         Dot1+Dot2+Dot3+Dot6+Dot7 switches to the previous virtual console.
         Dot1+Dot2+Dot3+Dot6+Dot8 switches to the next virtual console.
         Dot1+Cot2+Dot3+Dot7 displays the current time.
         Dot1+Dot2+Dot3+Dot7+!RoutingKey1 sets the clipboard to a random password.
   Seika braille driver changes:
      The notetaker models are supported.
   eSpeak speech driver changes:
      The maxrate= parameter has been added.
   Text tables:
      The de (German) table has been updated.
      The hu (Hungarian) table has been updated.
      Support for writing JAWS (.jbt) text tables has been added to brltty-ttb.
   Contraction tables:
      the en-us-g2 (US English - Grade 2) table has been updated.
      A table may be implemented as an executable program.
      The latex-access (braille math) executable table has been added.
      The -r [--reformat-input] option of brltty-ctb handles paragraphs better.
   Keyboard key tables:
      Many bindings have been added to the keypad and laptop tables.
   Documentation:
      A portuguese translation of the manual has been added.

October 10, 2011:
 - BRLTTY 4.3 released:
   New options:
      The -F [--speech-fifo=] option has been renamed to -i [--speech-input=].
      The -F [--preferences-file=] option sets the path to the preferences file.
      The -L [--log-file=] brltty option writes timestamped logs to a file.
      The -q [--quiet] xbrlapi option suppresses the displaying of window titles.
      The -r [--reformat-text] ctbtest option joins unindented input lines.
      The log level can now be specified within brltty.conf.
   New device support:
      A braille driver for BrailComm displays has been added.
      The HandyTech braille driver now supports the Active Braille.
      The Voyager braille driver now supports the part 232 serial adapter.
      The Voyager braille driver now supports the Braille Pen (aka Easy Link).
   Preferences menu changes:
      The preference selections now apply to the preferences menu itself, too.
      Keyboard key bindings now work correctly within the preferences menu.
      The "Text Style" preference has new settings:
         8-Dot Computer Braille (formerly 8-dot)
         Contracted Braille (formerly 6-dot)
         6-Dot Computer Braille
      The "Expand Current Word" preference has been added.
         It's only visible if "Text Style" is set to "Contracted Braille".
         It can be set to:
            Yes (don't contract the word the cursor is on)
            No (contract the whole line)
      The "Capitalization Mode" preference has been added.
         It's only visible if "Text Style" is set to "Contracted Braille".
         It can be set to:
            No Capitalization
            Use Capital Sign
            Superimpose Dot 7
   General changes:
      Internationalization support has been improved.
      French and German translations have been added.
      Support for multi-byte local character sets has been improved.
      Horizontal window motions now work correctly with contracted braille.
      The half window left motion no longer can move to a bad location.
      Alert messages no longer disappear unexpectedly.
      The speech FIFO is now created relative to the current working directory.
      Serial flow control is now enabled before device probing.
      The following global variables for use within tables are now predefined:
         tablesDirectory
         tableExtension
         subtableExtension
   Alva braille driver changes:
      The BC key bindings have been changed significantly in order to add
      more functions and to support the USB640 (which has no smartpad).
      The braille keyboard of the BC Feature Pack is now supported.
   Baum braille driver changes:
      Updating the text and status cells of the Vario 80 has been fixed.
      The front and command keys of the Vario 80 are now supported.
   EuroBraille braille driver changes:
      Reading keys is faster and no longer generates spurious input errors.
   HandyTech braille driver changes:
      Support for the Active Braille has been added.
      The help screen now describes how the keypad keys are named.
   Papenmeier braille driver changes:
      The initial state of the switches and keys of EL models is detected.
   Seika braille driver changes:
      The help screen now describes the key layout.
   TTY braille driver changes:
      A few more key bindings have been defined.
   Voyager braille driver changes:
      Serial support has been added.
      Bluetooth support has been added.
      Support for the part 232 serial adapter has been added.
      Support for the Braille Pen (aka Easy Link) has been added.
   XWindow braille driver changes:
      More and less restrictive fonts are supported.
      Hard program exits have been removed.
   eSpeak speech driver changes:
      The full advertized speech rate range can now be used.
   FestivalLite speech driver changes:
      The default voice has been changed to kal (from kal16).
   AtSpi screen driver changes:
      No more annoying warnings when not on an AtSpi widget.
   BrlAPI fixes:
      ISO-8859-1 is now accepted as a character set when iconv isn't available.
      The autorepeat flags are now handled on a per session basis.
      Commands are now processed when the device is released.
   WindowEyes BrlAPI driver changes:
      Testing for BrlAPI open errors has been improved.
   Text table changes:
      A common subtable for the block characters has been added.
      The glyph directive has been added.
      Several alternate fonts for the Latin letters are now defined.
      If a character isn't defined then check for an alternative which is:
         (its Unicode base character, its iconv-defined ASCII equivalent, etc).
      The en_UK text table has been renamed to en_GB (to comply with ISO 3166).
      Updated text tables:
         bo (Tibetan)
         brf: dot 7 is no longer presented
         fr_FR (French France)
         fr-vs (French table used by VisioBraille devices)
         is (Icelandic): updated to the newly adopted standard
   Contraction table changes:
      If a zero-width character isn't defined then don't show it.
      Updated tables:
         de-kurzschrift (German)
         en-us-g2 (American English)
         es (Spanish)
         fr-abrege (French)
         zh-tw (Taiwanese Chinese)
   Key table changes:
      A specific key within a set can now be specified by number.
      A key combination can now include specific keys which aren't in set 0.
      Keys which aren't in set 0 can now be mapped to keyboard functions.
      A key set name can now be used to define a hotkey.
      The help text no longer includes hidden hotkeys.
      The help text now handles context-specific hotkeys correctly.
      The note directive now supports the use of variables.
   Windows changes:
      Serial devices beyond COM9 may now be specified.
      The WindowEyes driver is now copied into the correct installation directory.
   Build changes:
      Building an exported (not checked out) copy now "knows" its revision number.
      Make support for install/uninstall of /usr/share/doc/brltty has been added.
      The make targets for source archives are now prefixed with "src-".
      The bin-tar, bin-tar-gzip, and bin-tar-bzip2 make targets have been added.
      Support for xz compression of binary and source archives has been added.
      The preferences file has been moved to /var/lib/brltty/brltty.prefs.
      There's now only one preferences file (instead of one per braille driver).
      The preferences file is now text-based (instead of binary).
      The "writable" directory has been moved to /var/run/brltty.
      The "library" directory is now known as the "drivers" directory.
      The "data" directory no longer has a use and has been removed.
      Support for the "gjar" command has been added.

May 10, 2010:
 - BRLTTY 4.2 released:
   Ending a cut operation beyond the right edge of the screen has been fixed.
   Key/character insertion works with newer versions of Xorg.
   The braille driver help files have been converted to plain text.
   Multiple instances of brltty may not use the same PID file.
   The keypad keyboard key table provides a braille input mode.
   The working directory is no longer set to the data directory.
   The writable directory is created if it doesn't already exist.
   USB I/O via libusb1 is supported.
   The Metec braille driver has been added.
   The eSpeak speech driver has been added.
   The AtSpi2 screen driver has been added.
   A BrlAPI client for Window-Eyes has been developed.
   Albatross braille driver changes:
      Converted to use key tables.
      USB support has been added.
   Alva braille driver changes:
      Converted to use key tables.
   Baum braille driver changes:
      Converted to use key tables.
      Vario Pro wheels are supported.
      For Vario Pro models, only update the text cells which have changed.
   CombiBraille braille driver changes:
      Converted to use key tables.
   FreedomScientific braille driver changes:
      Converted to use key tables.
      Bluetooth support has been added.
      The Focus Blue is supported.
      Rockers and bumper bars are recognized as distinct keys.
   HandyTech braille driver changes:
      Converted to use key tables.
      Pressing two routing keys simultaneously immediately cuts the selected text.
      Newer models which use the USB HID interface are supported.
      The InputMode= parameter has been removed.
   HIMS braille driver changes:
      Converted to use key tables.
   Papenmeier braille driver changes:
      Converted to use key tables.
      The DebugReads= and DebugWrites= parameters have been removed.
      Support for the configuration file has been removed (now uses key tables).
   Pegasus braille driver changes:
      Converted to use key tables.
   Seika braille driver changes:
      Converted to use key tables.
   Voyager braille driver changes:
      Converted to use key tables.
   BrlAPI changes:
      Key event support has been added.
      Various client fixes for the Windows environment.
      Various fixes for when threads aren't available.
      No more extraneous connection to localhost when using a TCP/IP host name.
      A fix to exception handling within the Python bindings.
   ExternalSpeech speech driver changes:
      Two-letter driver identification code changed to "xs" (from "es").
   AtSpi screen driver changes:
      Static linking is supported.
      A problem causing crashes on 64-bit platforms has been resolved.
   Windows screen driver changes:
      Significant reductions in memory usage.
      Better handling of unreadable screens.
      Better handling of the Alt+Tab window.
   DOS changes:
      Log records are written to the file "brltty.log".
      The TSI braille driver stays at 9600 baud.
   Key table changes:
      Add the following directives:
         assign, context, hide, hotkey, ifkey, map, note, superimpose, title.
      Add the \{name} variable name expansion syntax.
      Add the ! immediate key syntax.
      A command may have more than one modifier.
      The line command modifiers are supported.
      Keyboard key table names are now prefixed with "kbd-".
      The ktbtest tool has been added.
   Linux changes:
      USB device inspection is more efficient.
      Fixes to keyboard connect/disconnect monitoring.
      Fixes to key event handling.
      PCM and MIDI support defaults to ALSA (instead of to OSS).
   Windows changes:
      Improved conversion of Windows errors to system errors (errno values).
      Bluetooth support has been added.
      Text table autoselection has been fixed.
      Text table editing (ttbtest -e) is supported.
   Build changes:
      --enable-usb-support changed to --with-usb-package[=package,...].
      --disable-usb-support changed to --without-usb-package.
      --enable-bluetooth-support changed to --with-bluetooth-package[=package,...].
      --disable-bluetooth-support changed to --without-bluetooth-package.
   Text tables updated:
      hu, sk.
   Contraction tables updated:
      de-kurzschrift, en-us-g2, zh-tw.
October 8, 2009:
 - BRLTTY 4.1 released:
   General Changes:
      BRL_CMD_WINUP can go above the top row of the screen.
      Protect against NULL being given to snprintf() for a string.
      Change the "braille display offline/online" logs to DEBUG (from NOTICE).
      Fixes to status field initialization during a preferences file upgrade.
      Default status field selection should take into account 66-cell displays.
      Remove usbResetEndpoint().
      Resolve gcc-4.4 warnings.
      Resolve 64-bit warnings.
      C compilers needn't deallocate variable-size arrays until function return.
      Updates to the English Grade 2 contraction table.
      Updates to the German contraction table.
      Change ctbtest to expect input encoded in UTF-8.
      liblouis tables use y for 5-digit and z for 8-digit characters.
   Baum Braille Driver Changes:
      Fix the support for display key #6 in PB2 mode.
   EuroBraille Braille Driver Changes:
      Re-add some bindings forgotten during the driver rewrite for 3.10.
      Rework the bindings a bit for greater consistency and easier learning.
      Add new bindings to support as many commands as possible.
   Papenmeier Braille Driver Changes:
      Interpret the EL66S Easy Access Bar correctly.
   TSI Braille Driver Changes:
      Increase the write delay a bit.
   Linux Screen Driver Changes:
      Give KD_FONT_OP_GET maximum (rather than reasonably high) font dimensions.
   Java Bindings Changes:
      Define the DOTn constants as bytes (rather than as chars).
      JNI fixes for Sun-based JVMs.
      Load the JNI part automatically at startup.
   Lisp Bindings Changes:
      Reference version 0.5.3 of BrlAPI.
   Python Bindings Changes:
      Pyrex doesn't automatically convert C's NULL to Python's None.
      Translate BrlAPI exceptions into Python exceptions.
   BrlAPI Changes:
      Remove all mention of key sets.
      Handle unbound key ranges.
      Fix an issue with TCP/IP socket connection on Windows.
      Handle the possibility of a different braille device after resuming.
   Windows Changes:
      Fix a compile problem.
      The screen driver should refer to "consoles" rather than to "terminals".
   Documentation Updates:
      Update the French manual from 3.10 to 4.1.
      Document that the EuroBraille Esys is supported.
      Update the supported FreedomScientific model lists.
      Clarify that --with-*-table sets the fallback (not the default) table.
      Change log fixes.
      Update the TSI braille driver's README.
      Add README.Bluetooth.
      The README for how to use a Seika with the TSI driver is no longer needed.
      E-mail address change for Nicolas Pitre.
      E-mail address change for Jean-Philippe Mengual.
   Build Changes:
      The API socket directory should be created under the install root.
      Add the --disable-stripping configure option.
      Remove the --disable-preferences-menu configure option.
      Remove the --disable-table-selection configure option.
      Fedora no longer creates "/usr/lib/ocaml/stublibs/dllbrlapi_stubs.*".

May 15, 2009:
 - BRLTTY 4.0 released:
   General Changes:
      All screen reading, character handling, and tables are now Unicode-based.
      The "<n> startup problems" message has been removed.
      Boot operands may contain multiple items separated by plus signs.
      USB enhancements and fixes.
      Windows serial I/O fixes.
      A UDEV rules file for brltty is provided.
      An upstart job for brltty is provided.
   Status Cells:
      Hard-coded styles have been replaced by user-configurable fields.
      If there are no status cells then a text region may be reserved for them.
      The INFO command toggles text maximization if a text region is being used.
   Braille Drivers:
      The Pegasus and Seika braille drivers have been added.
      The BrailleSense braille driver has been renamed to HIMS.
   Alva Braille Driver:
      The BC6nn series are supported.
   Baum Braille Driver:
      The VarioConnect, EcoVario, VarioPro, and Refreshabraille are supported.
   BrailleNote Braille Driver:
      The statuscells= parameter has been removed.
   EuroBraille Braille Driver:
      USB support has been added.
      Robustness has been improved.
      Bindings for the Esys have been added.
   FreedomScientific Braille Driver:
      The statuscells= parameter has been removed.
   HandyTech Braille Driver:
      The Evolution models have been redefined to only have text cells.
   HIMS Braille Driver:
      The Braille Sense key bindings have been reworked.
      SyncBraille support has been added.
      Bluetooth support has been fixed.
   TSI Braille Driver:
      The way Seika devices implement PowerBraille emulation is supported.
      The PowerBraille 81 has been redefined to only have text cells.
      The core's flow control mechanism is used (rather than hard-coded delays).
   Voyager Braille Driver:
      The statuscells= parameter has been removed.
      Key binding changes:
         CUTAPPEND/CUTLINE moved to CRt# + B/C
         PRINDENT/NXINDENT moved to CRt# + A+B/C+D
   XWindow Braille Driver:
      The font= parameter has been added.
   SpeechDispatcher Speech Driver:
      Single characters are now spoken correctly.
   BrlAPI Server:
      The version has been changed from 0.5.2 to 0.5.3.
      enterTtyMode() now works correctly on Windows.
      Problems when no braille display is connected at startup have been resolved.
      The core's output is automatically restored when the last client disconnects.
      Writes to the driver are no longer buffered.
      Braille keyboard input is now converted to characters.
      Output to the braille display is now drained the same way the core does.
   Lisp Bindings:
      Now compatible with CFFI 0.10.0.
   Text Tables:
      The license has been changed from GPL to LGPL.
      File names have been changed from "text.*.tbl" to "*.ttb".
      The file extension ".tti" is used for text subtables.
      Tables must be encoded in UTF-8 (rather than in a local character set).
      The "byte" keyword is no longer optional.
      The "dot" directive is no longer supported.
      The "char" and "include" directives have been added.
      Language-based tables include common representations for box characters.
      Tables for several languages have been added.
      The default is now to select the table based on the locale's name.
      The tbltest utility has been renamed to ttbtest.
      The compress, fi2, identity, and simple tables have been removed.
      The following tables have been renamed (mostly for ISO 639 compliance):
         cz     -> cs
         fi1    -> fi
         nabcc  -> en-nabcc
         se     -> sv
         se-old -> sv-1989
         visiob -> fr-vs
         vni    -> vi
   Attributes Tables:
      The license has been changed from GPL to LGPL.
      File names have been changed from "attr*.tbl" to "*.atb".
      The file extension ".ati" is used for attributes subtables.
      Tables must be encoded in UTF-8 (rather than in Latin1).
      The "byte" directive is no longer supported.
      The "include" directive has been added.
   Contraction Tables:
      The license has been changed from GPL to LGPL.
      Tables for several languages have been added.
      The following tables have been renamed:
         en-uebc-g2 -> en-ueb-g2
      The en-ueb-g2, en-us-g2, and zh-tw tables have been updated.
   Key tables (for binding keyboard keys to brltty commands) have been added:
      The file extension ".ktb" is used for key tables.
      The file extension ".kti" is used for key subtables.
      The desktop, keypad, and laptop key tables are provided.
      The -k [--key-table=] option has been added.
      The -K [--keyboard-properties=] option has been added.
   Source Tree Changes:
      The text tables have been moved from BrailleTables/ to Tables/.
      The attributes tables have been moved from BrailleTables/ to Tables/.
      The contraction tables have been moved from ContractionTables/ to Tables/.
      The braille drivers have been moved from BrailleDrivers/ to Drivers/Braille/.
      The speech drivers have been moved from SpeechDrivers/ to Drivers/Speech/.
      The screen drivers have been moved from ScreenDrivers/ to Drivers/Screen/.
      Source for the Windows installer is provided.

July 16, 2008:
 - BRLTTY 3.10 released:
   The core and drivers (excluding text tables) are now Unicode-based.
   The DESCCHAR function now shows (if possible) the character's name.
   Linear cuts no longer include newline characters.
   Specifying the braille device as "serial:" now defaults to the first serial device.
   Add a driver for the Braille Sense.
   Bring the French manual fully up-to-date (was at 3.6).
   Linux-specific changes:
      Don't unnecessarily wake up USB devices when searching.
   Albatross braille driver changes:
      Correctly handle keys which send their code on both press and release.
   Baum braille driver changes:
      Bind TL1+TR3 to the BACK funct5ion.
   EuroBraille braille driver changes:
      Rewritten.
      Add support for the Iris PC keyboard.
      Add key binding to do Shift+Tab directly (dots 235 + space).
      New EsysIris key bindings:
         VK_L34 -> FREEZE
         VK_L67 -> HOME
   FreedomScientific braille driver changes:
      New PAC Mate key bindings:
         routing key + left wheel press -> SETLEFT
         routing key + right wheel press -> DESCCHAR
   General speech support changes:
      Add a preference for setting the pitch.
      Add a preference for setting the punctuation level.
   SpeechDispatcher speech driver changes:
      Change the connection name to "main" (from "driver").
      Single character entry/deletion now always speaks.
      Try to reopen the connection if an error occurs.
      Support setting pitch and punctuation level.
   Theta speech driver changes:
      It wouldn't compile with newer gccs.
   Linux screen driver changes:
      Now works on big endian architectures.
      Add support for multi-byte character sets.
      Add the Charset= parameter.
      Add support for the right Alt key (AltGr).
   PcBios screen driver changes:
      Add AT/XT scancode support.
   Windows screen driver changes:
      Add the FollowFocus= parameter.
      Add AT/XT scancode support.
   Text table changes:
      Rename no-h to no-generic.
      Remove no-p.
      Add no-oub [Offentlig Utvalg for Blindeskrift].
   Contraction table changes:
      Unicode characters can be specified by value [\uxxxx].
      Unicode characters can be specified by name [\<name>].
      When the cursor is:
      *  On a word - it is uncontracted (not rendered in computer braille).
      *  Between words - the space is expanded.
      Rename the opcode "repeated" to "repeatable".
      Fixes to the English Grade 2 [en-us-g2] table.
      Fix the UEB [Unified English Braille] percent sign.
      Fixes to the Chinese [zh-...] tables.
      Rename zh-tw-big5 to zh-tw.
      Remove zh-tw-gb2312.
      Remove zh-tw-utf8.
   BrlAPI changes:
      Now at release 0.5.2.
      Present a blinking cursor if that's what the user has configured.
      Install/uninstall "/var/lib/BrlAPI/".
   Caml bindings changes:
      Install and uninstall now work properly.
   Java bindings changes:
      Package the classes into org.a11y.BrlAPI.
      Rename the classes to remove the (now redundant) Brlapi prefix.
   Python bindings changes:
      Improved error handling facilities.
   tbltest changes:
      Added the -e [--edit] option for editing a text table.

October 17, 2007:
 - BRLTTY 3.9 released:
   Core changes:
      The startup log and initial braille display message contain the build revision.
      The -v [--verify] option identifies the screen driver.
      Failure of the braille and/or screen driver to start isn't fatal.
      Repeated retries are scheduled for each driver until it starts.
      Attempts to connect to gpm are only made when it's actually needed.
      Standalone programs no longer include support for shared objects.
      The MSDOS operating system is supported.
      MSDOS option syntax (/flag and /name:value) is supported.
      The syntax +x to clear a short option flag is supported.
      Help output groups options by function rather than lists them alphabetically.
      Needed but missing resources are created (by default) in /lib/brltty/rw/:
         command line option: -W [--writable-directory=]
         configuration file directive: writable-directory
         environment variable: BRLTTY_WRITABLE_DIRECTORY
         configure script option: --with-writable-directory=
   BrlAPI changes:
      Version updated to 0.5.1.
      TCP sockets are more responsive.
      The -h [--host] option of xbrlapi has been changed to -b [--brlapi].
   Baum braille driver changes:
      The autosuspend feature of Linux USB devices is disabled.
      Don't probe for emulation modes if a serial device is being used.
      Add the protocol= (all, native) parameter.
   HandyTech braille driver changes:
      The Easy Braille is supported.
   Papenmeier braille driver changes:
      The Trio models are supported.
      The second set of vertical status keys does vertical routing.
   Linux changes:
      USB devices maintained by udev under /dev/bus/usb/ are supported.
   Cygwin changes:
      The emulation layer (rather than Windows functions) is used.
      Serial devices named ttySn (rather than COMn) are used.
   Windows changes:
      Write to the event log.
      The -I [--install-service] and -R [--remove-service] options have been added.
      The -r [--release-device] option defaults to "on".
   Table changes:
      Corrections to Finnish braille [text.fi1.tbl, text.fi2.tbl].
      Corrections to Portuguese braille [text.pt.tbl].
      Corrections to American English grade 2 braille [en-us-g2.ctb].
      Unified English Braille table rename: uebc-g2 -> en-uebc-g2
      Chinese table renames: big5 -> zh-tw-big5, gb2312 -> zh-tw-gb2312
      New Chinese tables: zh-tw-utf8, zh-tw-ucb

June 4, 2007:
 - BRLTTY 3.8 released:
   General updates:
      Add the -r [--release-device] command line option.
      Add the release-device configuration directive.
      Look in $HOME/.brltty/ for brltty.conf, translation tables, contraction tables, and preferences files.
      Add screen scroll detection to the cursor routing algorithm.
      Fix left-panning when presenting contracted braille.
      Change the default braille and speech drivers to "auto".
      Change the default braille device to "usb:".
      Improved AT keyboard scancode support.
      Added XT keyboard scancode support.
      Verify that a driver's version matches that of the core when loading it.
      If any drivers are built-in then only autodetect for them.
      Log unexpected data from braille displays as warnings.
      New braille drivers: IrixLinux
      New speech drivers: SpeechDispatcher
      New screen drivers: PCBIOS
      New supported operating systems: kFreeBSD, MSDOS (almost)
   Startup updates:
      Only count command line option and configuration file errors as problems.
      Periodically retry starting the speech driver.
      Periodically retry creating the PID file.
   BrlAPI updates:
      Version changed to 0.5.0.
      Base TCP/IP port changed from 35751 to the newly IANA-assigned 4101 [brlp-0] (4 ports).
      Move headers from "/usr/include/brltty/*.h" to "/usr/include/brlapi_*.h".
      Lots of function and constant renames (see man brlapi_deprecated).
      Remove brlapi_getDriverId().
      Add brlapi_suspendDriver() and brlapi_resumeDriver().
      Redesign the paradigm for ignoring and accepting key codes.
      Add support for multiple simultaneous sessions.
      Add support for the application-definable BRLAPI_NO_DEPRECATED and BRLAPI_NO_SINGLE_SESSION macros.
      Improved Unicode support.
      Rename the WINDOWSPATH environment variable to WINDOWPATH.
      Rename the BRLAPI_KEYFILE environment variable to BRLAPI_AUTH.
      Rename the KeyFile= parameter to Auth=.
      Add support for authentication by user and/or group.
      Implement bindings for Caml, Java, Lisp, Python, and Tcl.
   Preferences menu updates:
      Change the default for "Autorepeat" from "No" to "Yes".
      Add "Autorepeat Panning" [No, Yes].
      Add "Braille Sensitivity" [Minimum, Low, Medium, High, Maximum].
      Rename "Pointer Follows Window" to "Highlight Window".
      The "Highlight Window" preference works even if gpm isn't available.
      Only highlight the upper-left character of the window if attribute underlining is on.
   Alva braille driver updates:
      Add support for the Braille System 40.
   Baum braille driver updates:
      Some key binding changes.
      Add keyboard input.
      Add the VarioKeys parameter for those who prefer the old Vario driver bindings.
   MiniBraille braille driver updates:
      Add flow control so that it works on fast CPUs.
      Some key binding changes.
   HandyTech braille driver updates:
      Support the Modular Evolution models (64 and 88).
      Add one-hand convenience bindings for BrailleStar navigation functions.
   Papenmeier braille driver updates:
      Add support for the latest BrailleX II models (except for the Trio line).
      Add support for setting braille firmness.
   VisioBraille braille driver updates:
      Support the non-standard serial flow control used by older models.
      Distribute the vstp (VisioBraille file transfer) application.
   Linux screen driver updates:
      Add support for frame buffer consoles.
      Fix the emulation of keys F1-F5.
   Screen screen driver and screen patch updates:
      Fixed cursor routing.
      Add support for keyboard emulation.
      Fix support for the status line.
      Add support for the input line.
      Show the current window number (rather than 0).
      Show correct character highlighting.
   Windows support updates:
      Recognize the CR-LF sequence as a text file input line terminator.
      Don't misinterpret/corrupt preferences files by treating them as text files.
      Present the AltTabInfo window.
      Support keyboard emulation when in a DOS box or a non-console application.
      Determine which facilities are available at run-time rather than at build-time.
      Remove support for Windows 95.
   Text translation table updates:
      Renames: uk->en_UK, us->en_US
      Add a table for Swedish 1996.
      Add a table for Unified French 2007.
      Add a table for Portuguese.
      Fix the Czech table to support German symbols in a uniform way.
      Support tables in the Gnome Braille format.
      Support tables in the sbl (SuSE Blinux) format.
   Contraction table updates:
      Several fixes to en-us-g2 (Grade 2 American English).
      Updates to big5.
      Add a table for GB2312 (Simplified Chinese Braille)
   Build updates:
      The autogen.sh script has been renamed to autogen.
      Add support for a relocatable install (useful on Windows).
      Change the default for gpm support to enabled.
      Define general macros for braille applications in "/usr/include/iso_11548-1.h".
      Add the --with-stderr-path configure script option.
      Braillified installer images log errors to tty5.

December 26, 2005:
 - BRLTTY 3.7.2 released:
   The AtSpi screen driver doesn't load due to a missing Xt dependency.
   Check for X11/extensions/XKB.h.
   Swedish text translation table changes:
      Add text.se.tbl (1996 standard).
      Rename text.se2.tbl to text.se-old.tbl (1989 standard).
      Remove text.se1.tbl (modified english table).
   English grade 2 contraction table changes:
      The "m-st" contraction should always be used when "must" is the root word.

December 12, 2005:
 - BRLTTY 3.7.1 released:
   (is|validate)(Integer|Float) should only modify *value when returning true.
   usbWriteEndpoint() in usb_libusb.c called usbGetInputEndpoint().
   KDGETMODE, KDGKBMETA and KDGKBMODE need an int (not a long) operand.
   Add the BRL_BLK_(PR|NX)DIFCHAR functions.
   Allow the end of the cut region to be corrected.
   Fix a call to brlapi_perror() within xbrlapi.
   Waiting for output to unblock wasn't being done correctly.
   English grade 2 contraction table changes:
      Don't use a letter sign when a letter is followed by a period.
      Handle "by-and-by" as a special case.
      Don't use a contraction if a capitalization state change within it needs clarification.
      Use "ed" for "redolent".
   Baum braille driver changes:
      A Vario 40 can return device identity but not cell count.
      Add a few more "words of wisdom" to README.Inka.
      Binding changes:
         Function  Old         New
         SETMARK   TL1+TL2+CRn TL1+TL3+CRn
         GOTOMARK  TL2+TL3+CRn TR1+TR3+CRn
         PRINDENT  TR2+TR1+CRn TL2+TL1+CRn
         NXINDENT  TR2+TR3+CRn TL2+TL3+CRn
         PRDIFCHAR -           TR2+TR1+CRn
         NXDIFCHAR -           TR2+TR3+CRn
   API changes:
      Correct the documentation for the BRLPACKET_WRITE packet.
      Remove the prototype of brlapi_getDriverInfo() from api.h.
      An API client should forget the authorization key as soon as it's been sent to the server.
      Ensure that the Unix-domain socket is removed before binding to it.
      Fix the behaviour of the "and" dot mask.
   Build changes:
      Check for -lXtst and -lXext.
      Move the X dependencies from the executables to the components which need them.
      Move the curses dependency from the executables to the TTY braille driver.
      Some shells don't like the semicolon in "for i; do".

September 17, 2005:
 - BRLTTY 3.7 released:
   Change the dot-to-bit mapping to comply with ISO/TR 11548-1.
   New cursor routing algorithm (works with editors with wrapped lines).
   Replace the -N [--no-speech] option with -N [--no-api].
   Get the fully qualified path to the executable.
   getWorkingDirectory() should use reallocWrapper().
   hasTimedOut(0) should return true in order to handle a timeout of 0.
   Create the rescaleInteger() function from in-line preferences menu code.
   Define and implement BRL_BLK_GOTOLINE.
   NULs are written to the end of the visual display if it's off the end of the screen.
   Termination signals should just set a flag and let brltty terminate safely.
   Change all "bluez" uses to "bluetooth".
   Split the autorepeat code out into a separate function.
   Autospeak sometimes decides that characters have been deleted when, in fact, they've been replaced.
   Enable autorepeat and autospeak for the preferences menu.
   Write debug logs for braille and speech setting changes.
   The coordinates on the status line should start from 1 rather than from 0.
   Generate lower status digits symbolically rather than mathematically.
   Operate serial devices in true nonblocking mode.
   Give better names to serialTestLines()'s arguments.
   Text table renames: fr -> fr_CA, fr-iso01 -> fr_FR
   Force OSS PCM output to be blocking.
      There appears to be a bug in ALSA OSS simulation.
      Output is nonblocking if snd_seq_oss is loaded with nonblock_open=1.
      In this case, write() always returns the full count even though
      large chunks of sound are missing.
   Ensure that the PCM ALSA support uses a sensible sample rate.
   By default, use the PCM ALSA device "default".
   Fix ALSA MIDI event timing and output flushing.
   Alva braille driver changes:
      Add input/output packet logging.
      Remove the autodetect loop.
      Remove some hard-coded delays during open.
      Ensure that all packet buffers are as large as the largest possible packet.
      Wait during open to see if the status cells have been turned off.
   BrailleLite braille driver changes:
      Redefine the key-to-dots table in terms of braille dot constants.
      Remove other hard-coded dot values.
      Redo the layout of the bindings table to make it easier to edit.
   BrailleNote braille driver changes:
      Reindent the source to 2 (form 3).
      Remove the probe loop from brl_open().
      Add packet I/O.
      Add output flow control.
      Define a structure for input packets.
   EuroBraille braille driver changes:
      Use symbolic, rather than hard-coded, dot-to-bit mapping.
   FreedomScientific braille driver changes:
      Reduce the USB retry count from 5 to 3.
      Remove the "no response from display" warning.
      Fix a typo in the definition of the Focus 40 braille display.
   HandyTech braille driver changes:
      Reduce the USB retry count from 5 to 3.
      Remove the "no response from display" warning.
   LogText braille driver changes:
      Redefine the output and input tables in terms of braille dot constants.
      Don't prepare the output and input tables more than once.
   MDV braille driver changes:
      Remove the autodetect loop.
   Papenmeier braille driver changes:
      Reduce the USB retry count from 5 to 3.
      Remove the "no response from display" warning.
      Add automatic cursor routing to horizontal combined mode bindings.
      read_config:
         Include prologue.h.
         Link with $(LDLIBS).
   TTY braille driver changes:
      Position the cursor correctly.
      Build even if no curses package is available.
   Virtual braille driver changes:
      Use PF_LOCAL/AF_LOCAL instead of PF_UNIX/AF_UNIX.
      Don't index the names array beyond its size.
   VisioBraille braille driver changes:
      Redefine the output table in terms of braille dot constants.
   Voyager braille driver changes:
      Reformat the definition of the dots table.
   XWindow braille driver changes:
      Reindent source.
      Rename the xtparms parameter to tkparms.
      Add the input= parameter.
      Add a more advanced model (based on the VisioBraille mapping).
      Xm isn't initernationalized.
      Add cursor routing and displaying of dots.
      Show the cursor position within the visual display.
      Right-clicking on the window pops up a menu in which one can
      change the size and model of the emulated braille device.
      Keep the window on top.
      Add a setup menu.
      Add support for command autorepeating.
      Include X11/Intrinsic.h in more places to keep Solaris happy.
   ExternalSpeech speech driver changes:
      Allow names, rather than just numbers, to be passed to the uid/gid parameters.
   Swift speech driver changes:
      Add debug logs for the setting of parameters.
   API changes:
      Change BrlAPI's release to 0.4.0.
      Add void to argumentless routine prototypes where missing.
      Move brlapi_fd_mutex from api.h to api_protocol.h.
      Move BRL_KEYBUF_SIZE from api.h to api_client.c.
      Define the BRLAPI_MAXKEYSETSIZE constant and use it in api_client.c.
      brlapi_readFile() and brlapi_writeFile() are only used within api_common.c.
      Clean up the API TTY list in a safe way.
      The API should automatically clean up its TTY tree.
      Remove the ancestor loop from brlapi_getControllingTty().
      Require clients to be more precise when claiming a tty or entering raw mode:
         getRaw() has an argument to specify the driver one wants to exchange packets with.
         The integer argument of getTty() used to specify either BRL_KEYCODES or BRL_COMMANCS
         has been replaced by a string argument.
         If either NULL or "" then keypresses are delivered as BRLTTY commands.
         If a driver name then the server verifies that that driver is being used 
         and that it actually supports raw key codes.
         brlapi_getRaw() should return an error rather than an exception
         when the required driver is not the one used by BRLTTY.
      Define BRLCOMMANDS (in api.h) in a backward compatible way.
      Verify the result of gethostbyname().
      Add conditional code for PF_LOCAL.
      Use sockaddr_storage rather than sockaddr.
      Split brlapi_readPacket() into brlapi_readPacketHeader() and brlapi_readPacketContent().
      Split processRequest() into several smaller functions.
      Check cursor value more carefully in brlapi_writeText().
      Only real commands (neither NOOP nor EOF) should be sent to clients.
      The server side of the API should do non-blocked reads.
      Report packet read errors via errno rather than via brlapi_libcerrno.
      Rename errorHandler to exceptionHandler.
      Add the brlapi_strexception() function.
      More clearly distinguish between errors and exceptions.
      Problems caused by getTty and (un)ignoreKeySet should be reported as errors rather than as exceptions.
      brlapi_packetType() should return a convenient string for exception packets.
      Clean up error handling by putting all necessary information for printing errors into a struct.
      Add the infrastructure for handling display size changes.
      Handle client's charset and convert as needed in the server.
      Recognize -1 (rather than 0) as the "no screen" vt.
      Several (rare) race condition fixes.
      Add support for the Unicode braille row.
      If supported, reduce the thread stack size to 64K (from 8M).
      Add the API parameter stacksize=.
      Remove the TOORECURSE error code.
      Replace both RAWNOTSUPP and KEYSNOTSUMP errors by OPNOTSUPP.
      Return OPNOTSUPP (rather than INVALID_PARAMETER) when a charset is specified and iconv is absent.
      Simplify the returning of errors.
      Fix tty table extension.
      brlapi_write() should use the specified length rather than call strlen since the data could contain NUL bytes.
      Add the brlapi_getTtyPath() function.
      Use recursive locking so that brl_readCommand() can call message().
      Change the prototypes for brlapi_(send|recv)Raw() to use "void *" instead of "unsigned char *".
      Allow the KeyFile= parameter to accept the special string "none".
      Reject empty key files.
      Accept keys larger than the allowed key size.
      By default, the client should also check for the IP socket.
      Check for an already-running BrlAPI server.
      Provide public access to brlapi_splitHost().
      Dot masks should be unsigned.
      Remove the trailing newline from the "BrlAPI resize" log.
      "code" has already been converted to host byte order by the caller.
      Add some synchronisation cleanups.
      Allow users to call brlapi_write(NULL).
      api.h should internally include what it depends on.
      Preprocess the autorepeat flags.
      Let the clients see BRL_CMD_NOOP.
   apitest changes:
      Add the -d [--dots] option.
      Exit show dots mode when a braille display key (rather than a keyboard key) is pressed.
      Learn Mode:
         Announce entry.
         Write command descriptions to standard error.
         Eliminate bogus error message when leaving.
   xbrlapi changes:
      Add key event support.
      No longer use the deprecated BRLCOMMANDS constant.
      Close the connection via a signal-safe method.
   tbltest changes:
      Add support for writing tables.
      Add support for .a2b (Gnopernicus) braille tables.
      Interpret - as standard input.
   en-us-g2 contraction table fixes:
      [had]rian, hid[ea]way, r[er]egister, un[con]genial.
      Don't remove space after "a" if before "and", "for", "of", "the", or "with".
      Don't contract the word "in" after a dash.
   USB changes:
      Remove the assumption that a USB device maps to a file system object.
      A device should point to the proper descriptor for the current interface alternative.
      Use a common algorithm for iterating through the configuration descriptor block.
      Only reread the configuration descriptor block if the first buffer is too small.
      Publicize the functions for getting the configuration descriptor and its components.
      When setting the configuration, deallocate the cached copy of the old descriptor.
      Add a function for reading the device descriptor from the device itself.
      Automatically close an open interface when changing the configuration.
      Add an endpoint parameter to usbReapResponse().
      Improve the timeout used for in-line endpoint reading when awaiting input.
      Calculate timeouts more accurately.
      Make device closing more robust.
      Check for a serial adapter even if configuration data for it isn't supplied.
      Fix the bulk input loop.
      Asynchronous errors should always be passed back to the caller.
      Code restructuring:
         Reorder the platform-dependent function definitions.
         Group the global internal function definitions by where they need to be implemented.
         Rename the constants to avoid conflicts with libusb.
      Linux changes:
         Allow reaping the URB for a specific endpoint.
         Reap a URB after discarding it.
         Add support for inline reading of an interrupt endpoint.
         Add support for inline writing to an interrupt endpoint.
      BSD changes:
         Add more robustness to deallocating device and endpoint extensions.
      Darwin changes:
         Add more robustness to deallocating an endpoint extension.
      Add support for libusb.
   General code changes:
      Update the copyright prologues from 2004 to 2005.
      Change "Linux console" to "console screen" in the copyright prologues.
