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


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.
      Change the nested inclusion protection convention from _NAME_H to BRLTTY_INCLUDED_NAME.
      <sys/types.h> needs to be included before almost any other header  on some BSD systems.
      gcc-3.3 (at least on cygwin) doesn't like apostrophes in #error directives.
      gcc-4 does a lot more checking for matching signedness.
      gcc-4 doesn't allow a variable to be declared global and then static.
      Remove the casts from the results of malloc() calls.
      Clean up the passing of TranslationTable and DotsTable parameters.
      Logs to standard error should be prefixed with the program's name.
      Use LogPrint() rather than fprintf(stderr) for option processing errors.
      Rename ctb_definitions.h to ctb_internal.h.
      Remove dummy timezone parameters to gettimeofday().
      Rename infmode to infoMode.
      Remove tests for and calls to endhostent() and endservent().
      Ensure that all I/O headers are prefixed with "io_" (primarily because of <usb.h>.
   General driver changes:
      Define opt_pcmDevice as external for those speech drivers which need it.
      Change the speech rate,volume handlers to take a floating-point multiplier.
      Prefix all driver identification #defines with the driver code.
      Uniformly refer to driver codes as "codes" rather than as "identifiers".
      Add the driver comment string to the driver structure.
      Split the braille and speech drivers into separate subdirectories.
      Don't create the /lib/brltty/brltty-???.lst files.
      Make the screen drivers dyamically loadable.
      Add skeleton braille,speech,screen driver source.
   Screen driver changes:
      Define screen driver parameters in a more standard way.
      Allow screen driver codes to be used as parameter qualifiers.
      Make --without-screen-driver work.
      Add the screen-driver configuration directive and -x command line option to BRLTTY.
      Remove hard-coded limitations and assumptions from the screen state table.
      Don't keep two copies of the current screen number.
      All screen drivers should determine their vt# in only one place.
      Clean up the code which switches between the live,frozen,help screens.
      The read() method should return a boolean rather than the buffer.
      Add the uservt() method to the MainScreen object.
      Add the uservt() method to the Screen screen driver.
      Add the currentvt() method to the FrozenScreen object.
      Correctly detect when the Linux console switches between text and graphics mode.
   Solaris changes:
      Define AF_LOCAL to be AF_INET.
      Define _XOPEN_SOURCE=500 and __EXTENSIONS__.
      Add native USB support.
      Remove the use of "[from ... to] =" initializers.
      Remove the use of type-casted tuples.
      Remove the use of __label__ declarations.
      "#pragma weak", rather than "__attributes__((weak))", is needed on Solaris.
   Build changes:
      gendeps changes:
         Remove the need for TclX.
         Search for tclsh rather than hard-code its path.
      Rename the "aux" subdirectory to "acdir" (for Cygwin).
      Don't build spktest automatically.
      Build/install/uninstall xbrlapi.
      Pass the list of needed libraries to the linking of the API server library.
      Link the API client library with only those dependencies which it actually needs.
      Add build-time detection for: pwd.h, grp.h, regex.h, gai_strerror(), hstrerror().
      Add compile-time detection for: ETIMEDOUT, EAFNOSUPORT.
      Explicitly test for libX11, libXt, and the xt toolkit library.
      Separate the concepts of dynamic library and loadable module.
      Use <NAME> rather than <SONAME> in the MKLIB macro.
      Use libusb, if available, if we don't provie native USB support.
      Upgrade the BrlAPIref doxygen configuration file to 1.3.9.1.
      Clean up the top-level <driver-type>.mk files.
      Correct the documentation regarding default installed package locations.
      Rename the brltty_setup_files macro to brltty_make_files.
      Rename setup.mk.in to prologue.mk.in.
      "make clean/distclean" should process the directories for internal drivers.
      "make all" in the "Documents/" subdirectory should make the man3 files.
      Add the make file targets tar,gz,bz2,rpm.
      Fix the hard-coded dependencies which allow the VideoBraille braille driver to be built-in.
      Split the non-config parts of config.h into prologue.h and include the former from the latter.
      Remove the leading ./ from config.h in make file dependency lists.
      Some compilers don't like trailing slashes on directory paths.
      Use the shell variable $RANDOM as a last resort when generating the API key.
   rhmkiso chagnes:
      Build in the Linux screen driver, and don't build any other screen drivers.
      Add support for making a braillified Fedora Core 4 installer image.
   RPM changes:
      The spec file referenced an old substitution for the API version.
      Don't include the TTY braille driver.
   Gnopernicus changes:
      ttybrl.c:
         Improve the BRLTTY command to Gnopernicus key mappings.
         Use Gnopernicus layer-key codes rather than Baum key codes.
         Move all key code generation into a common routine.
         Rename key to blk and keypress to key.
         Ignore BRL_CMD_NOOP.
         Handle the autorepeat flags.
         Check for errors in the command read loop.
         ignore_input() is no longer needed because flags aren't taken into account when ignoring commands.
         Adapt to BrlAPI 0.4.0.
      README.Gnopernicus:
         Add a note about using BRLTTY's Patches/ttybrl.c.
         Document the latest BRLTTY command to Gnopernicus key mappings.
         Document how to get the routing keys to work.
   Initial support for the Hurd platform.
   Initial support for the Mac OS X (Darwin) platform.
   Initial support for the Cygwin platform.
   Initial support for the MinGW platform.
   Remove the Vario braille driver.
   Remove the VarioHT braille driver.
   Add the Baum braille driver.
   Add the Braudi braille driver.
   Add the BrlAPI braille driver.
   Add the Libbraille braille driver.
   Add the TechniBraille braille driver.
   Add the AtSpi screen driver.
   Add the Hurd screen driver.
   Add the Windows screen driver.
   Rename the shm screen driver to Screen.
   Add al,bm,bn,ht,md to the braille driver serial autodetect list.
   Add bm to the braille driver USB autodetect list.
   Add bm to the braille driver Bluetooth autodetect list.

May 5, 2005:
 - BRLTTY 3.6.2 released:
   French braille uses dots 348 for the inverted question mark.
   Don't build the TTY and XWindow drivers when braillifying a boot image.
   If mcookie isn't available then use /dev/urandom or /dev/random to generate the API key.
   The shared memory screen driver should primarily use a per user segment.
   Update the screen patch to generate a per-user shared memory key.
   Some platforms don't define PF_LOCAL.
   BRL_CMD_LNEND is broken when the display sticks out to the right of the screen.
   Updated big5 contraction table.
   The feature list now states that French contracted braille is provided.
   Add the Swift speech synthesizer driver.
   BrailleLite braille driver changes:
      Clarify the help for advance bar combinations and whiz wheels.
   EuroBraille braille driver changes:
      Corrected several bugs in write/read operations.
      Corrected several key bugs on Iris models.
   FreedomScientific braille driver changes:
      Add support for the Focus 2 series (40 and 80).
      Add support for the PacMate 80.
   Papenmeier braille driver changes:
      Add support for the EL+ 80.
      Add support for the second row of routing keys.
      Give the four protocol II models we support their proper names.
   VisioBraille braille driver changes:
      Return NOOP rather than EOF when CTRL or ALT is pressed.
      Bind a key to BRL_CMD_LEARN.
      Don't log timeouts when the display isn't connected.
   Mikropuhe speech driver changes:
      Lock the mutex while calling pthread_cond_signal().
      Check for already enqueued speech before the first wait.
      The mute method can hang brltty.
   API changes:
      The flags and protocol version fields weren't being maintained in network byte order.
      brlapi_writeFile() and brlapi_readFile() are only for use within api_common.c.
   Linux screen driver changes:
      If KD_FONT_OP_GET fails or returns a character count of 0
      then calculate the VGA character count from the screen font map.
      Only reevaluate the VGA character count when necessary.
   Queue facility changes:
      Don't deallocate discarded elements when a queue is being deallocated.
      Initialize queue data to NULL.
      Deallocate an item beore discarding its element.

December 22, 2004:
 - BRLTTY 3.6.1 released:
   Remove the %pre and %post sections from the rpm for the time being.
   Remove use of PATH_MAX (the HURD doesn't have it).
   getWorkingDirectory() can gobble memory on failures.
   If autogen.sh  is given arguments then run configure with them.
   Add the -D [data-directory=] option to tbltest and ctbtest.
   tbltest should report unused dot combinations.
   Updates to the fr-iso01 text translation table.
   Freedom Scientific driver changes:
      Assume that the serial cable is disconnected if no ACK after 2.5 seconds.
   TSI driver changes:
      Fix memory corruption if the display is off or disconnected for an extended period of time.
   API changes:
      In one place select() is called with the wrong mask size.
      Display the packet correctly in the default error handler.
      Log the reason that the authentication key can't be loaded.
      Check that the writeVisual() handler exists before calling it.
      Rename mutex variables to suit core conventions.
      Introduce new error code BRLERR_DRIVERERROR for braille driver problems.
   apitest changes:
      Report key read errors.
      Report the file descriptor of the connection.
   rhmkiso changes:
      Automatically increase the size of the initrd as needed.
      Remove needless manipulations of set -e.
      Old versions of tar don't preserve bin as a symbolic link.
   Curses package support changes:
      Use ncursesw if available.
      Ensure that the curses run-time library can be found.
      Only use plain old curses as a last resort.
   OpenBSD operating system support changes:
      All special serial control characters must be properly disabled.
      host_sys.o doesn't make.

October 11, 2004:
 - BRLTTY 3.6 released:
   Add support for old VisioBraille input flow control (PROM version < 4).
   Add rate setting to the ExternalSpeech driver.
   Remove type-punning warnings from the Mikropuhe driver.
   Add support for multi-byte character sets to the TTY driver.
   Remove the need for -t identity from the TTY and XWindow drivers.
   Correctly determine the optionality of the configuration file.
   Always change the menu setting even if a routing key doesn't evaluate to a new one.
   PCM ALSA fixes.
   Add xbrlapi (not installed yet).
   Update our copy of Gnopernicus's ttybrl.c.
   Alva workaround for bug exhibited by at least one ABT340:
      A bogus routing key press event is generated for routing keys 25-29
      when at least two front keys are already pressed.
   Papenmeier driver updates:
      The "query switches" command should show "both" rather than "?".
      Add bindings for bar motion with the right front key pressed.
      Resynchronize the switches and keys whenever the bar is moved.
   API updates:
      Add proper support for brl_writeVisual().
      Correct a bug which occurs when the display is only partially updated.
      Add a missing brlapi_libcerrno assignment to the client code.
      Add support for Unix domain sockets.
   Build updates:
      Make clean shouldn't remove the text copy of the BrailleLite help files.
      The text copy of the Voyager help files should be created in the source tree.
   Documentation updates:
      Bring the documentation up-to-date.
      Merge the documentation of reciprocal commands, e.g. LNUP/LNDN.
      Fix e-mail addresses and some examples in BrlAPI's manual.
      Remove old screen patches.
   Code updates:
      Move a few routines to more logical places.
      Share the common code for moving up/down to a line with different content.
      Reindent the rest of config.c and main.c according to conventions.
      Use our own delay mechanism rather than sleep().
      Redo splitString() to allow for the easy adding of options.
      Split command line option processing into a separate routine.
   Fixes to the handling of counter (extendable flag) options:
      Warn if the same option is specified more than once in the configuration file.
      Allow a non-negative integer for non-command-line specifications.

September 4, 2004:
 - BRLTTY 3.6pre3 released:
   Restarting drivers caused strange corruptions.
   Eliminate some compile warnings when many features are disabled.
   Make the entire options mechanism be wholly table driven.
   Specifying an invalid option yields a bogus excess parameter error.
   Automatically generate long options to set flags to 0.
   Abbreviation tests via strncasecmp() don't require an extra length check.
   findSharedSymbol() needs to accept the address of any kind of pointer.
   Go back to OSS being the default on Linux even if ALSA is available.
   Remove the link dependency on libasound from the PCM/MIDI ALSA code.
   Fix an Alva driver buffer indexing overflow.
   Prevent the ClioNoteBraille (EuroBraille driver) from reidentifying after each frame is sent.
[--snip--]
