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


July 22, 2023:
 - BRLTTY 6.6 released:
   General changes:
      The -H (uppercase) option and the concept of hidden options have been removed.
      For consistency (with -A, -B, -S, -X), the -z and -Z short options have been swapped:
	 -z is now --stay-privileged
	 -Z is now --privilege-parameters
      Multi-line contracted braille is now supported.
      The cursor style can now be set to no dots.
      A rectangular append to the clipboard now ensures a leading newline.
      README.CommandReference has been added.
   Speech changes:
      Speech can now be interrupted when writing new text to the input FIFO.
      Autospeak now provides correct character highlighting to the speech driver.
      A word is now a whitespace-delimited (rather than an alphanumeric) sequence of characters.
      Word completion for single-character words now works correctly.
      The ROUTE_SPEECH command (go to the speech cursor) has been added.
      The DESC_CURR_CHAR command now speaks phonetically.
   Preferences Menu changes:
      The PREFRESET command has been added.
      Space + p + Dots 7-8 is bound to the new PREFRESET command.
      If the preferences file can't be found then try loading /etc/brltty/default.prefs.
      Save on Exit now also saves the preferences on program termination.
      The Speak Key Context preference has been added.
      The Speak Modifier Key preference has been added.
   Baum braille driver changes:
      More recent Orbit Reader models have routing keys.
   BrlAPI braille driver changes:
      The speechChanges (no, yes) parameter has been added.
   CombiBraille braille driver changes:
      Upgraded to use generic (rather than direct serial) I/O.
      The routing keys are now supported.
   DotPad braille driver:
      New - its two-letter driver code is dp.
      A multi-line text display is supported within its graphic area.
   Freedom Scientific braille driver changes:
      Minor Focus key binding changes:
	 LeftShift + RoutingKey -> SETLEFT
	 RightShift + RoutingKey -> SWITCHVT
	 LeftSelector + NavrowKey -> PRDIFCHAR
	 RightSelector + NavrowKey -> NXDIFCHAR
   HandyTech braille driver changes:
      Bluetooth service discovery now needs to be performed (for newer models).
   External Speech speech driver changes:
      The volume and pitch can now be set.
      Now disconnects from the server when a write error or timeout occurs.
      Now tries to reconnect to the server if disconnected.
      Now correctly handles the receipt of tracking data.
   AtSpi2 screen driver changes:
      A potential crash on receipt of a cursor routing request has been resolved.
   File Viewer screen driver:
      New. Its two-letter driver code is fv.
      A virtual screen presents the specified file (via its file parameter).
      The height of the screen is the number of lines within the file.
      The width of the screen is the length of the file's longest line.
   Linux screen driver changes:
      A message is shown on the braille display if character injection (TIOCSTI) is disabled.
   Terminal Emulator screen driver:
      New. Its two-letter driver code is em.
      It monitors a shared memory segment maintained by a terminal emulator
      for screen content and size, cursor position, etc.
      It uses a message queue to know when the segment has been updated
      and to send input typed on the braille device to the terminal emulator.
      BRLTTY's provided terminal emulator is the new brltty-pty command (in libexec/brltty/).
      The new brltty-term command runs a shell or terminal manager via brltty-pty,
      and also runs BRLTTY with its Terminal Emulator screen driver to interact with it.
   BrlAPI changes:
      The version is now 0.8.5 (it was 0.8.4).
      Fuzzing support has been added to the server (see README.APIFuzzing).
      Various fuzzer-detected issues have been resolved.
   Contraction tables:
      The en-ueb-g1 (English, Unified, Grade 1) contraction table has been added.
   Key tables:
      A possible stack overflow during table compilation has been resolved.
      The run directive has been added.
      The macro directive has been added.
      The isolated directive has been added.
      The ktbcheck tool has been added.
   Windows changes:
      The batch scripts have been improved.
      The tasks-brltty.bat script has been added.
      The regquery-brlapi.bat script has been added.
      The build now includes the Debug\ directory, which contains:
         The build's config.h, config.mk, and config.log files.
         Unstripped executables (.exe) and libraries (.dll).

June 9, 2022:
 - BRLTTY 6.5 released:
   General changes:
      Help (-h) output lines are now wrapped at the screen width (not at 79).
      Parameter errors no longer prevent a driver from starting.
      Word Wrap when using contracted braille has been fixed.
      The Quiet setting can now be specified within brltty.conf.
      In data files, \R now represents the Unicode replacement character.
      Chord-6/8 now toggle between 6- and 8-dot computer braille.
      Bindings for the Emacs editor have been added.
      Bindings for the Lua language have been added.
      An Arabic message catalog has been added.
   Logging changes:
      The ingio log category has been renamed to gio.
      The bluetooth log category has been renamed to bt.
      The hid log category has been added.
   Baum braille driver changes:
      The Orbit Reader 40 is now supported.
   Canute braille driver changes:
      Driver startup is now much faster.
      Lines that haven't effectively changed are no longer rewritten.
   HumanWare braille driver changes:
      An easy way to revert to the legacy thumb key bindings has been added.
      The newer models can now be used via Bluetooth on Linux.
   Linux screen driver changes:
      The WidecharPadding= parameter has been added.
      The FixUnicodeSpaces= parameter has been renamed to RpiSpacesBug=.
   AtSpi2 screen driver changes:
      Control characters are now mapped to their corresponding special keys.
      Brltty is now shut down if the driver fails to start.
      The driver no longer crashes when the X server is shut down.
   BrlAPI changes:
      The version is now 0.8.4 (it was 0.8.3).
      The permissions on local server sockets are now set correctly.
      The cursor is now represented correctly when using six-dot cells.
      Some locking issues have been resolved.
      A text console can now create its own client session.
   Text table changes:
      The Russian (ru) table has been significantly updated.
      The Arabic (ar) table has been significantly updated.
      Typing when using the Arabic (ar) table now yields Arabic (not English) letters.
      The input directive has been added.
   Key table changes:
      The +escaped character modifier has been added.
   Udev changes:
      The rules for customized and generic devices can now be installed separately.
      The device and uinput rules can now be installed separately.
      Filtering is now also done on the manufacturer and product strings.
      Filtering on a parent hub's vendor/product identifiers is now supported.
      A HID rules file has been added.
      Symlinks for USB-connected devices are now in /dev/brltty/.
   Linux changes:
      Bluetooth HID is now supported.
   Windows changes:
      Brltty no longer crashes when started as a service.
   Android changes:
      Now targeting API level 30 and setting isAccessibilityTool.
      The Actions screen now scrolls vertically.
      Settings -> Accessibility -> BRLTTY -> Settings now goes to the Actions screen.
      Arabic string translations have been added.
   Tool changes:
      brltty-clip now has better long options.
      brltty-hid has been added.
      brltty-ttysize has been added.
      xbrlapi now ignores keyboard remapping errors from the X server.
   Build changes:
      The LD, STRIP, and RANLIB commands are no longer hard-coded.

September 24, 2021:
 - BRLTTY 6.4 released:
   General changes:
      Dynamically changing the text table to auto now works.
      The keyboard table can now be explicitly set to off.
      Vertical scrolling for multi-line displays has been improved.
      Trailing whitespace (except for the first one) is now trimmed when pasting.
      The internationalization of date phrases has been improved.
      Emoji using characters like the hash (#) or asterisk (*) are now ignored.
   Sliding braille window changes:
      Cursor tracking always moves the window all the way to the left
      if the whole line is short enough to fit on it.
      Sliding the window triggers when the screen cursor moves to
      (rather than beyond) the first/last cell of the text portion of the display.
   Contracted braille changes:
      Contraction table support can no longer be excluded.
      An internal contraction table can now be configured.
      Contracted braille is automatically enabled on startup if:
         The contraction table has been either specified or automatically selected.
         The text table hasn't been either specified or automatically selected.
      Cursor tracking has been improved.
      Panning left when there are wide characters has been fixed.
      A buffer overrun that occasionally caused a crash has been fixed.
   Preferences menu changes:
      The autospeak settings have been moved into their own submenu.
      Contracted Braille and 6-dot Computer Braille are now configured separately.
      Blinking properties are now configured by period and percent visible
      rather than by visible and invisible times.
      The Space status field type has been added.
      Three-digit status field types have been added.
   New navigation commands:
      SAY_ALL: Speak the entire screen (SAY_ABOVE + SAY_BELOW).
      LOWER and HIGHER: Adjust the speech pitch.
      CONTRACTED: Toggle between contracted (on) and computer (off) braille.
      COMPBRL6: Toggle between six- and eight-dot computer braille.
      Chord-G (Space + dots 1245) is bound to the CONTRACTED toggle.
   Status summary (info line) changes:
      Indicator character changes:
         c: The screen cursor is being rendered.
         s: The speech cursor is being rendered.
         t: Cursor tracking is on.
         u: The attributes underline is being rendered.
	 Braille display content:
	    6: six-dot computer braille
	    8: eight-dot computer braille
	    c: contracted braille
	    a: character attributes
	 Braille keyboard mode:
	    space: typing in text mode
	    b: typing in Unicode braille patterns mode
	    d: keyboard is disabled
      Dot indicator changes:
         Dot5: rendering the attributes underline (was cursor style)
         Dot6: typing Unicode braille patterns (was blinking cursor)
         Dot8: the keyboard is enabled (was sliding window)
      Screen number when on a special screen:
         f: frozen host screen
         h: braille device or keyboard help screen
         m: preferences menu
   New braille devices:
      The NLS eReader from Zoomax.
      The Brailliant BI 20X and 40X from Humanware.
      The Active Braille S from Help Tech.
   FreedomScientific braille driver changes:
      Focus models:
         Many bindings for the front keys have been added.
         Bindings for speech navigation have been added.
   HandyTech braille driver changes:
      Version 1.3 of the Easy Braille's USB-HID firmware is now supported.
   HumanWare braille driver changes:
      The outer thumb keys now navigate up/down (used to be left/right).
      The inner thumb keys now navigate left/right (used to be up/down).
      Support for firmware version 1.1 of the newer models has been added.
   BrlAPI changes:
      The version is now 0.8.3 (it was 0.8.2).
      The current braille typing mode is now honoured.
      Typing Unicode braille patterns has been fixed.
      Server termination during initialization no longer hangs.
      New client features:
         Writes can be automatically padded/truncated (use negative region size).
         The thread-safe brlapi_strerror_r() function.
         The brlapi_sync() function.
         The BRLAPI_PARAM_CLIENT_PRIORITY_DISABLE constant.
      Security fixes:
         Use fchmod (not chmod) to adjust local socket permissions.
         The sticky bit is now set on the local sockets directory.
   Contraction table changes:
      Locale-based autoselection (set to auto) is now supported.
      A table for Russian (set to ru) has been added.
      UEB (Unified English Braille) changes:
         The Greek letters have been defined.
         Some math symbols have been added.
         Common accents are now supported - they are the
         acute, cedilla, circumflex, diaeresis, grave, and ring.
   Android changes:
      The four main architectures (arm/x86, 32/64 bits) are now supported.
      BRLTTY is now an app on Google Play.
      The Java BrlAPI client objects are now available via a Maven repository.
      A customized brltty.conf can now be placed in the primary storage area.
      The default contraction table has been changed to auto (from en-us-g2).
      Rules specifying which data files should be backed up have been added.
      Web page rendering changes:
         Widget types are no longer unnecessarily shown.
         Annotations for lists and list items have been added.
         Link annotations no longer contain the link's URL.
      The about application screen now contains:
         BRLTTY's app version.
         The version of the BrlAPI server.
         The date and time of the build.
         The repository revision of the source code.
         A link to BRLTTY's privacy policy.
         The link to BRLTTY's app page on Google Play.
      Emulating F16 now logs the screen to a local file for developer debugging.
   Windows changes:
      The .csv files have been added to the etc/ directory of the archive.
   New command line options:
      --autospeak-threshold=<screen-content-quality>
   Configure changes:
      The --disable-contracted-braille option has been removed.
      The --with-contraction-table option has been added.
      The --without-contraction-table option has been added.

January 28, 2021:
 - BRLTTY 6.3 released:
   Core changes:
      The CLIP_NEW command when performed via a keyboard table no longer crashes.
      Message localization now works on Windows and Android.
      Non-UTF8 consoles on Linux and Windows are now supported.
   Command line option changes:
      --start-message no longer has a short option (was -Y).
      --stop-message no longer has a short option (was -Z).
      --prompt-patterns no longer has a short option (was -z).
      The short option for --privilege-parameters is now -z (was -y).
      The --stay-privileged [-Z] option has been added.
      Setting the unprivileged user to :STAY-PRIVILEGED: is no longer supported.
      The override-preference option has been renamed to override-preferences.
      The --locale-directory option has been added.
   Build changes:
      The Systemd and Udev wrapper scripts are now in libexec/ (not lib/brltty/).
      BRLTTY now has a .pc (pkgconfig) file.
      The revision identifier for the build is now stored within the tarball.
   Systemd changes:
      The brlapi group is created during boot if it doesn't already exist.
   FreedomScientific braille driver changes:
      Focus models: The SETMARK an GOTOMARK commands have been bound.
   XWindow braille driver changes:
      A backspace key has been added.
   SpeechDispatcher speech driver changes:
      The name= parameter has been added.
   BrlAPI changes:
      The version is now 0.8.2 (it was 0.8.1).
      Some locking issues have been resolved.
   Contraction table changes:
      The cldr directive has been renamed to emoji.
      Emoji translation is no longer applied to (some) non-emoji characters.
      A (rare) problem that could cause an infinite loop has been resolved.
   Developer changes:
      The versioned symbolic link for libbrlapi.so is now created by make api.
      The run-* scripts now work when the build and source trees aren't the same.
      The run-brltty script now uses the message catalogs within the build tree.
      The msgtest command has been added.

December 23, 2020:
 - BRLTTY 6.2 released:
   General changes:
      Problems related to the system waking up from suspend have been resolved.
      The format of the DESCCHAR command's output has been improved.
      The representation of any Unicode braille pattern can now be overridden.
      Prompt patterns no longer fall back to the default algorithm.
      The +route modifier now works for block commands.
      The Scroll-aware Cursor Navigation preference has been added.
      The Start Selection with Routing Key preference has been added.
      The Frank Audiodata braille device is now supported.
      The Java bindings have been significantly enhanced.
   Alva braille driver changes:
      Satellite models:
         The Left/Right pads have been respectively renamed to Speech/Nav.
         The CLIP_COPY and CLIP_APPEND commands have been bound.
   Hedo braille driver changes:
      Detection of The MobilLine model via USB has been improved.
   Seika braille driver changes:
      The left space bar has been remapped to being the Meta (left alt) key.
   XWindow braille driver changes:
      X clipboard support has been added.
   AtSpi2 screen driver changes:
      Cursor routing problems have been resolved.
   BrlAPI changes:
      The version is now 0.8.1 (it was 0.8.0).
      A problem with reading raw keycodes has been fixed.
      The server now also listens for localhost connections via IPV6.
      Byte reordering is now done for watched parameter values.
      Setting the computer braille cell size is no longer strict.
      Reading the RENDERED_CELLS parameter now works.
      These have been added for getting the underlying file descriptor:
         brlapi_getFileDescriptor()
         brlapi__getFileDescriptor(handle)
         BRLAPI_INVALID_FILE_DESCRIPTOR
      These parameters have been renamed:
         BRLAPI_PARAM_BOUND_COMMAND_CODES -> BRLAPI_PARAM_BOUND_COMMAND_KEYCODES
         BRLAPI_PARAM_COMMAND_SHORT_NAME  -> BRLAPI_PARAM_COMMAND_KEYCODE_NAME
         BRLAPI_PARAM_COMMAND_LONG_NAME   -> BRLAPI_PARAM_COMMAND_KEYCODE_SUMMARY
         BRLAPI_PARAM_DEVICE_KEY_CODES    -> BRLAPI_PARAM_DEFINED_DRIVER_KEYCODES
         BRLAPI_PARAM_KEY_SHORT_NAME      -> BRLAPI_PARAM_DRIVER_KEYCODE_NAME
         BRLAPI_PARAM_KEY_LONG_NAME       -> BRLAPI_PARAM_DRIVER_KEYCODE_SUMMARY
      And their corresponding parameter types have also been renamed:
         brlapi_param_commandCode_t      -> brlapi_param_commandKeycode_t
         brlapi_param_commandShortName_t -> brlapi_param_commandKeycodeName_t
         brlapi_param_commandLongName_t  -> brlapi_param_commandKeycodeSummary_t
         brlapi_param_keyCode_t          -> brlapi_param_driverKeycode_t
         brlapi_param_keyShortName_t     -> brlapi_param_driverKeycodeName_t
         brlapi_param_keyLongName_t      -> brlapi_param_driverKeycodeSummary_t
   Linux security enhancements:
      BRLTTY can now run as an unprivileged user.
      Some namespaces are now being isolated.
      A system call filter can be enabled.
      The --privilege-parameters command line option has been added.
      The privilege-parameters configuration file directive has been added.
      The --with-privilege-parameters configure option has been added.
      Full details in README.Linux (online at http://brltty.app/doc/Linux.html).
   Android changes:
      Finding user customization files in /sdcard/brltty/ has bee fixed.
      Text selection and host clipboard interactions have been implemented.
      The screen element ordering algorithm has been improved.
      Speech tracking has been implemented.
      Commands for each of the global actions have been added.
      Global actions can now also be performed via chords.
      Global actions for moving to the first/last screen element have been added.
      Navigation among the visible screen windows is now supported.
      A global action to show the window title has been added.
      A global action to show various device status indicators has been added.
      Support for structural web page navigation has been added.
   Systemd management changes:
      The brltty-device@.service instance unit has been added.
      BRLTTY is now run as an unprivileged user with perks.
      The BRLTTY instance is now stopped correctly on USB disconnect.
      A USB device management problem introduced in Systemd 247 has been fixed.
      BRLTTY's needed directories are now created (if necessary).
      The brlapi group is now assumed (e.g. for /etc/brlapi.key ownership).
   Upstart udev rules changes:
      The initctl command (rather than start and stop) is now used.
      The --quiet and --no-wait options are now used.
      The udev rules now restart the job on connect if it's already running.
   Polkit changes:
      Members of the brlapi group are now authorized.
      The rules/actions can now be (un)installed via the Polkit make file.
   Command installation changes:
      The brltty-config script has been renamed to brltty-config.sh.
      The brltty-prologue.sh script is now installed.
      The brltty-genkey script is now installed.

April 6, 2020:
 - BRLTTY 6.1 released:
   New commands:
      REFRESH: rewrite the whole braille display (some drivers).
      REFRESH_LINE: rewrite a specific braille line (some drivers).
      ROUTE_LINE: bring the cursor to a specific braille line.
   New braille drivers:
      Canute: A 40 column, 9 line display from Bristol Braille.
   BrlAPI braille driver changes:
      The version is now 0.8.0 (it was 0.7.0).
      Increase/decrease the client priority based on the screen content quality.
      A quality of "good" overrides Orca rendering - lower ones don't.
   HandyTech braille driver changes:
      Basic Braille Plus models are supported.
      The Easy Braille can be autodetected when using Bluetooth.
   HumanWare braille driver changes:
      The Brailliant BI 14 can be autodetected when using Bluetooth.
      The routing keys of the Brailliant BI 14 work.
      Four new models are supported:
         HumanWare BrailleOne
         APH Chameleon 20
         APH Mantis Q40
         NLS eReader
   Inceptor (BrailleMe) braille driver changes:
      Cursor positioning has been fixed.
      USB (NVDA mode) autodetection works.
      USB (NVDA mode) key bindings have been rationalized.
      Bluetooth (BrailleBack mode) key bindings have been rationalized.
   AtSpi2 screen driver changes:
      The BRLTTY and X clipboards are synchronized.
      Highlighted screen regions are supported.
      When a widget doesn't have text then its accessibility name is rendered.
      Set the screen content quality (for the BrlAPI braille driver) as follows:
         good: terminal widgets
         fair: text widgets (e.g. labels)
         poor: widgets that have descriptive text
         none: widgets that don't have a text interface
      The type= parameter now specifies which widgets override Orca rendering.
      type=default has been added (and is the new default).
      The default is to defer to Orca except for terminal widgets.
   Linux screen driver changes:
      The fallbackText= parameter has been added.
      Cursor routing when there are wide characters has been fixed.
      Cursor positioning when there are wide characters has been fixed.
   BrlAPI changes:
      UTF-8 character encoding is handled internally (no longer needs iconv).
      Large file descriptor numbers no longer cause a client to crash.
      The client and server protocol versions can be increased independently.
      Packets can contain up to 4096 (rather than 512) bytes.
      The brlapi__pause() function can be used to wait for an incoming event.
      A framework for setting, getting, and watching parameters has been added:
         brlapi_getParameterProperties()
         brlapi__getParameter()
         brlapi__getParameterAlloc()
         brlapi__setParameter()
         brlapi__watchParameter()
         brlapi__unwatchParameter()
      The brltty-clip command can be used to get/set the clipboard content.
   xbrlapi changes:
      Now backgrounds after successfully establishing the BrlAPI connection.
      The -n (--no-daemon) option disables backgrounding.
      The BRLTTY and X clipboards are synchronized.
   Text table changes:
      Defining the Unicode replacement character (U+FFFD) works properly.
      The fr-vs table supports the middle dot character.
   Contraction table changes:
      Undefined characters now fall back to their text table representations.
      The en-ueb-g2 table has been updated.
      The zh-tw-ucb table has been removed.
      Renamed French tables:
         fr-integral -> fr-g1
         fr-abrege -> fr-g2
      Renamed German tables:
         de-basis -> de-g0
         de-vollschrift -> de-g1
         de-kurzschrift -> de-g2
         de-kurzschrift-1998 -> de-1998
         de-kurzschrift-2015 -> de-2015
   Linux changes:
      The systemd and udev wrappers are now in /usr/lib/brltty/.
   Android changes:
      The Update Application button on the Actions screen works.
      Routing key #7 presents the Accessibility Actions for a screen element.
   Windows changes:
      A potential BrlAPI client/server communication deadlock has been fixed.
      Some .bat scripts have been renamed:
         install-brltty -> enable-brlapi
         uninstall-brltty -> disable-brlapi
         run-debug -> debug-brltty

February 22, 2019:
 - BRLTTY 6.0 released:
   General changes:
      Chords Dot4 + Dot6 + Dot8/Dot7 turn on/off typing Unicode braille patterns.
      Word wrap when panning to the left now works properly.
      Cursor tracking while word wrap is on has been fixed.
      Support for speaking the current line's indent has been added.
      Vertical screen scroll tracking is now supported.
      Command execution can now be delayed till all the keys have been released.
      Resources are no longer wasted checking non-braille USB devices.
      The eSpeak-NG speech driver has been added.
      BRLTTY can now run within an InitRamFS as a dracut module.
      The -Y [--start-message=] and -Z [--stop-message=] options have been added.
      The prompt-pattern configuration file directive has been added.
   Baum braille driver changes:
      The B2G key bindings have been significantly improved.
   HandyTech braille driver changes:
      Support for the Activator has been added.
      Key bindings now work correctly after returning from the internal mode.
   Hedo braille driver changes:
      Newer MobilLine models are now detected.
   HIMS braille driver changes:
      Shifted qwerty keyboard letters are now interpreted correctly.
   HumanWare braille driver changes:
      Bluetooth connection problems have been resolved.
      USB session initialization problems have been resolved.
      The BrailleNote Touch routing keys now work.
      The BI 32 joystick now works.
      BI 14 USB detection has been fixed.
   MDV braille driver changes:
      Binding changes have been made so that F10 now does exit the menu.
   ViaVoice speech driver changes:
      The driver has finally been revived.
      Speech tracking has been implemented.
      The configure option --with-viavoice has been removed.
   Linux screen driver changes:
      Full Unicode support is finally available (no more 512 character limit).
      Among many other benefits, Unicode braille patterns now automatically render.
      This capability only works if a 4.19 (or later) kernel is being used.
      The unicode=no driver parameter can be used to revert to the older behaviour.
   AtSpi2 screen driver changes:
      The default is now to only read terminal screens.
      Determining which widget is currently active has been fixed.
      BRLTTY is now automatically stopped when the session is closed.
   BrlAPI changes:
      The version is now 0.7.0 (it was 0.6.7).
      The server now starts immediately rather than when the braille driver starts.
      The following new client functions have been added:
         void brlapi_getLibraryVersion(int *major, int *minor, int *revision)
         void brlapi__setClientData(brlapi_handle_t *handle, void *data)
         void *brlapi__getClientData(brlapi_handle_t *handle)
         int brlapi__readKeyWithTimeout(brlapi_handle_t *handle,
                                        int milliseconds,
                                        brlapi_keyCode_t *code)
      xbrlapi now maps unmapped keysyms to temporary keycodes.
   Text table changes:
      The se (Northern Sami) table has been added.
      New directives: ifGlyph, ifNotGlyph, ifCell, ifNotCell
   Contraction table changes:
      A table for the German 2015 standard [de-kurzschrift-2015] has been added
      (the de-kurzschrift-1998 table should now be used for the 1998 standard).
      New directives: cldr, replace
      The cldr directive has been added to tables for languages that have defined
      annotations: af, de, en, es, fr, ko, nl, pt, sw, th, zu
      (you also need to install your distribution's CLDR annotations package).
   Android changes:
      The Android device is now kept awake while navigating internal screens
      (help, the preferences menu, a frozen screen, etc).
      New braille-friendly widget representations:
         Check Boxes: ⣏ ⣹ (not checked), ⣏⠶⣹ (checked)
         Radio Buttons: ⢎ ⡱ (not selected), ⢎⠶⡱ (selected)
         Switches: ⢸⣭⡇ (off), ⢸⣛⡇ (on)
      A notification showing the braille device and its state has been added.
      Support for the Accessibility button (Android 8 or later) has been added.
      The Actions screen has been added - you can get to it by:
         Global Action #5 (emulate the F5 keyboard key)
         Tapping the (new) notification.
         Clicking the (new) Accessibility button.
      Routing keys beyond an element's text are now associated with that element.
      Routing key #6 now does a context click (for elements that support it).
      The algorithm that decides which elements to render has been much improved.
      The list renderer now orders elements much more sensibly.
      The accuracy of left, right, up, and down navigation has been improved.
      Support for range controls has been added (adjust with the scroll actions).
      Bluetooth connections are no longer tried:
         If the Android device doesn't have a Bluetooth adapter.
         If the Android device's Bluetooth adapter is disabled.
         While the Android device is searching for new Bluetooth devices.

February 5, 2018:
 - BRLTTY 5.6 released:
   General updates:
      BRLTTY has been relicensed to the LGPL (from the GPL).
      Better cursor routing handling of status line updates and vertical scrolling.
      The Track Screen Scroll setting has been added.
      The Word Wrap setting has been added.
      Panning left when using a contraction table now word wraps.
      Typing dismisses an alert message.
      The test for when INFO does text maximization instead has been fixed.
      Overrides are now applied when the preferences haven't yet been saved.
      The Inceptor braille driver (from Innovision) has been added.
   The Baum braille driver:
      On models with B9 and B10 by the joystick, both are interpreted as Space.
      Input packet handling for Pronto! V3 models has been fixed.
   The EuroBraille braille driver:
      Improved autodetection when using Bluetooth.
      The Esytime braille keyboard can be used over Bluetooth and USB.
      For Esytime models, B5 has been renamed to B8.
   The HIMS braille driver:
      The Smart Beetle is now recognized when using Bluetooth.
   The HumanWare braille driver:
      The BrailleNote Touch is recognized when using USB.
   BrlAPI changes:
      The version is now 0.6.7 (it was 0.6.6).
      The brlapi_getModelIdentifier() function has been added to the API.
      The default character set is now based on the user's locale.
      Sessions would occasionally hang when connecting.
      PolKit authentication is no longer attempted when it isn't available.
      Reading raw key codes no longer uses key ranges.
   Text tables:
      The lt (Lithuanian) table has been updated.
      The uk (Ukrainian) table has been added.
   Contraction tables:
      The fr-abrege (French) table has been updated.
      The lt (Lithuanian) table has been added.
      Support has been added for LibLouis tables.
      brltty-ctb's output is now UTF-8 (rather than ASCII).
   Key tables:
      The ifPlatform and ifNotPlatform directives have been added.
   Systemd changes:
      Path (rather than target) units are now used to manage BRLTTY instances.
   Android changes:
      Danish translations have been added.
   Build features:
      Add the reload target to the make files for Systemd and Udev.
      A make file for install/uninstall of the AppStream rules has been added.
      Python 3.6 is supported.

April 18, 2017:
 - BRLTTY 5.5 released:
   General changes:
      The braille and speech banners no longer include the revision identifier.
      The -o (--override-preference=) option has been added.
      quiet-if-no-braille can be specified via the configuration file.
      Cursor routing hangs have been resolved.
      The Log Messages submenu (for warnings and errors) has been added.
      Support for panning within a long alert message has been added.
      Alert beeps work on a Linux serial console.
      The Greek text table has been improved.
   Braille device changes:
      The default is to check both USB and Bluetooth (not just USB).
      Specifying the Bluetooth address is no longer mandatory.
      A prefix of a Bluetooth device's name can be specified.
      A generic USB serial adapter is probed only if it's been customized.
   Baum braille driver changes:
      Support for the Vario Ultra has been improved.
      Support for the Orbit 20 has been added.
   EuroBraille braille driver changes:
      More Esytime bindings have been added.
      Support has been added for the EsysLight 80 and the Esytime Evolution.
   HandyTech braille driver changes:
      Support has been added for the Actilino.
      The rocker keys can be used for efficient navigation of the menu.
      B4+B5 has been bound to Command Learn Mode.
      The (now redundant) keypad binding for Command Learn Mode has been removed.
      The Bluetooth names of the Active Star and the Braillino are recognized.
   HIMS braille driver changes:
      Function key bindings have been added for models with four scroll keys.
   TTY braille driver changes:
      The braille cells are shown (in addition to the text).
   HumanWare braille driver changes:
      The Braille Note is autodetected when using USB.
      Support has been added for the Braille Note Touch.
   Polkit changes:
      The policy file is installed.
      The policy has been renamed to org.a11y.brlapi (from org.brltty).
      Initialization doesn't delay BRLTTY startup.
   Systemd changes:
      The default instance is now brltty.target (not brltty.service).
      Multiple instances can be managed (via brltty@.target instances).
      A make file has been added to simplify unit and wrapper installation.
      BRLTTY isn't started until Udev has finished initializing.
      BRLTTY isn't automatically restarted if it terminates cleanly.
   Udev changes:
      A make file has been added to simplify rules and wrapper installation.
   BrlAPI changes:
      The version is now 0.6.6 (it was 0.6.5).
      The server isn't started until the braille driver has started.
      Several small fixes.
   xbrlapi changes:
      The X11 and gdm autostart files are installed.
      Constantly trying to connect when BRLTTY isn't available has been fixed.
      Reconnection on every window change has been fixed.
   Key table changes:
      Common chords for all of the sticky modifier keys have been added.
      Listings combine dot keys, e.g. Dots12 instead of Dot1+Dot2.
   Android changes:
      The cursor no longer jumps back to the start while spaces are being typed.
      Customization files can be in internal storage and/or on the SD card.
   Windows changes:
      Interaction with NVDA has been revived.
      LibUSB can be used on a 64-bit system.
      Builds can be done on MinGW64.
   Build changes:
      AppStream metainfo is maintained and installed.
      The new Speech Dispatcher installation layout is supported.
      Fixes to support building on Solaris 10 and 11 with C99.

June 28, 2016:
 - BRLTTY 5.4 released:
   Core changes:
      The Delayed Cursor Tracking feature (and preference) has been added.
      Stuck keys are now automatically released after a specifiable timeout.
      Touch events no longer interfere with Learn Mode.
      Support for the Polkit authorization manager has been added.
      A couple of memory corruption issues have been resolved.
   USB fixes:
      Device disconnect detection has been improved.
      Excessive CPU consumption for some older serial adapters has been resolved.
   Baum braille driver changes:
      More bindings have been defined for models that have the B11 key.
      False reporting of input timeouts has been resolved.
      Handling of unknown packet types has been improved.
   HandyTech braille driver changes:
      Model detection on Windows has been fixed.
      Output errors now restart the driver.
   HIMS braille driver changes:
      Support for the Smart Beetle has been added.
      Newer firmware resolution of qwerty key code conflicts is supported.
   HumanWare braille driver changes:
      Several USB connection problems have been resolved.
      The newer HID-based USB protocol is supported.
      The Brailliant B 80's Bluetooth device name is recognized.
   Papenmeier braille driver changes:
      Clipboard bindings have been added that work on EL-C models.
      Bar bindings for the menu now work on EL models that don't have switches.
      Bindings may now be defined that use a routing key and an EL key.
   XWindow braille driver changes:
      Fixed-size font restrictions have been removed.
   xbrlapi changes:
      Brltty restarts are handled.
      Logs written to .xsession have been improved.
   brltty-trtxt changes:
      The -b [--no-base-characters] option has been added.
   Systemd/Udev changes:
      Multiple USB braille devices are handled - each starts its own brltty.
      Disconnecting a USB braille device stops the associated brltty.
   Updated Tables:
      The en_CA (English Canada) text table.
      The zh_tw (Chinese, Taiwan) contraction table.

December 22, 2015:
 - BRLTTY 5.3.1 released:
   Linux screen driver fix:
      Some consoles couldn't be accessed due to an I/O error.
   Android fix:
      The preference settings can be saved.
   HIMS braille driver changes:
      Autodetecting the braille device's model has been improved.
      Keys that a model doesn't have are no longer listed within its help text.
      Support for qwerty keyboards has been improved.
      The scroll key bindings have been harmonized across all models.
   Key table changes:
      The -a (--audit) option has been added to brltty-ktb.
      Duplicate key bindings have been removed.
      The "uppercase" command modifier has been renamed to "upper".
      The following directives have been added:
         beginVariables, endVariables, ignore, listVariables

December 15, 2015:
 - BRLTTY 5.3 released:
   General fixes:
      The missing key event (stuck key) problem has been resolved.
      The braille display is now initialized when the -q (--quiet) option is used.
      Playing alert tunes has been moved to a dedicated thread.
      PCM (sound card) tone generation is now way more efficient.
      Program-relative paths are no longer used for relative paths specified via
         command line options or configuration file directives.
      Explicit paths for tables no longer consider the tables directory path.
      The -U (--updatable-directory) option has been added (it used to be
         hard-coded to /var/lib/brltty/).
      Braille driver parameters may be specified via the fourth boot parameter
         (use + to separate them).
      The speech FIFO on Linux has been moved to the writable directory (see -W -
         the default is /var/run/brltty/).
      The Console Bell Alert preference has been added - when enabled, and with
         the tune device set to PCM, the console bell can be heard even if the PC
         speaker either doesn't exist or isn't supported.
   New and changed commands:
      The toLeft modifier can be applied to any vertical motion command.
      The AltGr (Right Alt) and GUI (Windows) keys are supported.
      The PRPGRPH (go to previous paragraph) command navigates to the first line
         of the current paragraph (or, if already on it, to the first line of the
         previous paragraph) rather than to the last line of the previous
         paragraph.
      The space bar is a real space (rather than a braille character with no dots)
         when the keyboard is in Unicode braille input mode.
      Disabling the braille keyboard now disables all braille input commands.
      New commands that always skip forward/backward to a nonblank braille window:
         NXNBWIN, PRNBWIN
      Sticky modifier command improvements:
         Cycle through next,on,off (rather than just on,off) - next means just for
         the next typed character, and times out after five seconds.
      New commands to start/stop the braille,speech,screen drivers:
         BRL_START, BRL_STOP, SPK_START, SPK_STOP, SCR_START, SCR_STOP
      New commands for attaching to a specific (not necessarily current) console:
         SELECT, SELECT_NEXT, SELECT_PREV
   Albatross braille driver changes:
      Detection of no pending input has been improved.
      Recognizing a failed autodetection probe has been improved.
   Alva braille driver changes:
      Establishing a Bluetooth connection is now supported for more models.
   Baum braille driver changes:
      The standard braille keyboard chords are supported.
      The Refreshabraille has an improved key table.
      The Conny has an improved key table.
      The 12-cell Vario/BrailleConnect now uses the Conny key table.
      The protocols= parameter has been renamed to protocol= and accepts a
         specific protocol name (default, escape, hid1, hid2, ht, pb).
      Support for the following models has been added:
         VarioUltra, Pronto!, Brailliant2, SuperVario2, HID Refreshabraille 18
   BrailleMemo braille driver changes:
      Model autodetection has been improved.
   FreedomScientific braille driver changes:
      The key tables for newer models use the newer key names:
         The wheels are called Nav keys.
         The GDF keys are called Selector keys.
   HandyTech braille driver changes:
      Touch-based navigation has been implemented for the following models:
         Modular Evolution, Active Braille, Active Star
   HIMS braille driver changes:
      Function keys can be emulated by pressing space with a routing key.
      The Braille Sense U2 is recognized.
      The Braille Edge scroll keys are now mapped correctly.
   HumanWare braille driver changes:
      Bindings for adding Alt, Control, or both to a function key have been added.
   MDV braille driver changes:
      The bindings are now defined within key tables.
      Support for the following models has been added:
         Lilli Blu, MB248, MB408+
   Papenmeier braille driver changes:
      The status key bindings have been standardized across the various models.
      Minor changes to the front key bindings (for models with 13).
      XT keyboard support has been fixed.
   XWindow braille driver changes:
      Support for the Unicode braille characters has been added.
   AtSpi2 screen driver changes:
      The widget with focus on startup is determined correctly.
      The currently focused widget is cached for efficiency.
      The screen size is implicitly increased based on the cursor's location.
      The release= (yes, no) parameter has been added.
   Linux screen driver changes:
      VGA foreground and background colours are now reported correctly.
      A font change now triggers a braille display update.
      The VT= (number) parameter has been added - 0 means the current console.
      Systemd is no longer blocked from starting a login session on an unused tty.
   Screen screen driver changes:
      ASCII control characters can now be entered.
   BrlAPI changes:
      The version is now 0.6.4 (it was 0.6.3).
      Cursor blinking finally works again.
      The braille display is refreshed whenever it comes back online if the client
         has focus.
   Language profile support fixes:
      The language profile can now be changed when there's no braille device.
      The braille device and keyboard key table help texts are regenerated
         according to the new localization when the language profile is changed.
   Text table changes:
      The en_CA (English Canada) text table has been updated.
      The fr-vs (VisioBraille) text table has been updated.
      The alias directive has been added.
      Support for the variable and conditional directives has been added.
      The -u (--undefined) option has been added to brltty-ttb - it reports
         the characters in the current screen font that aren't yet defined in the
         text table.
      brltty-ttb can write C preprocessor format (cpp) tables.
   Contraction table changes:
      The Unicode braille characters are now handled internally.
      The en-us-g2 (grade 2 US English) contraction table has been updated.
      The zh-tw (Taiwan Chinese) contraction table has been updated.
   Key table changes:
      Major chords key subtable changes:
         Tab is now Space+Dots45 (it was Space+Dots2356).
         Backspace is now just Dot7, and Enter is now just Dot8.
         Add Space to get just dot 7 or just dot 8.
         Unchorded bindings have been added for navigating the preferences menu:
            Dot1: go to the previous item
            Dot4: go to the next item
            Dot2: go to the first item
            Dot5: go to the last item
            Dot3: select the previous setting for the current item
            Dot6: select the next setting for the current item
            Dot7: go back one level
            Dot8: exit the menu
      Minor changes to the keypad keyboard table.
      The assignDefault directive has been added.
      The -r (--reStructuredText) option has been added to brltty-ktb - it causes
         the help text to be formatted as reStructuredText.
      The help text has been improved:
         Related bindings have been organized into functional groups.
         Each of these groups has a descriptive header.
         Variants of the same binding are listed together.
         The bindings for Help and Learn are intentionally listed at the top.
   Java bindings fixes:
      The JDK hierarchy is located even when symbolic links point to it.
      The subdirectory containing machine-dependent JNI definitions is included.
   Android updates:
      F9 goes to the Global Actions (Power Off) dialog (Lollipop and later).
      F10 is the Menu key.
      The braille display stays in the active window (new problem as of Lollipop).
      The order in which screen elements are rendered is more intuitive.
      Czech translations have been added.
      Finnish translations have been added.
   Windows updates:
      Support for the Unicode braille characters has been added.
   brltty-tune (formerly tunetest) changes:
      The tune syntax has been completely changed.
      Tunes can be read from files.
   Build changes:
      The autoconf dependency has been updated to 2.64 (from 2.53).
      The ktbtest command has been renamed to brltty-ktb.
      The tunetest command has been renamed to brltty-tune.
      The brltty-atb, brltty-ktb, and brltty-tune commands are installed.
      Key table help text is rendered in HTML (as well as in plain text).
      Systemd service ready notification (via type=notify) is supported.
      mkwin command updates:
         The -C (Cygwin root directory) option has been added.
         A safe, relative path to the configure script can now be used.

November 6, 2014:
 - BRLTTY 5.2 released:
   General Fixes:
      Unexpected cursor tracking when switching virtual consoles has been resolved.
      The PASSPS2 command has (finally) been implemented.
      An infrastructure for defining custom commands has been added.
      A braille update is now forced when the braille device comes back online.
      All speech-related delays have been removed.
      Language profiles have been implemented (see README.Profiles).
      The following log categories have been added:
         brldrv  Braille Driver Events
         spkdrv  Speech Driver Events
         scrdrv  Screen Driver Events
         all     a pseudo-category that enables all categories
         -name   disable a log category (especially useful after specifying all)
   New Commands:
      BRLKBD                 Set the braille keyboard enabled/disabled.
      PASTE_HISTORY          paste from the clipboard's history
      SET_TEXT_TABLE         directly select a text table
      SET_ATTRIBUTES_TABLE   directly select an attributes table
      SET_CONTRACTION_TABLE  directly select a contraction table
      SET_KEYBOARD_TABLE     directly select a keyboard table
      SET_LANGUAGE_PROFILE   directly select a language profile
      ALERT                  play a specific alert tune (used internally)
   New Braille Drivers:
      The Hedo [hd] driver has been added (MobilLine and ProfilLine models).
   Alva Braille Driver:
      The BC's Windows key has been bound to the Escape key.
      Key Repeat and Secondary Cursor Row Emulation are now automatically disabled.
      The driver has been updated to use newer core facilities.
   BrailleMemo Braille Driver:
      The key bindings have been changed.
      The BM Smart can now connect via USB.
   BrailleNote Braille Driver:
      The APEX is now recognized when connected via USB.
      The APEX routing keys are now handled.
      Text input in Input Mode is now supported.
   EuroBraille Braille Driver:
      The Protocol= parameter now recognizes "esysiris".
      A number of USB connectivity issues have been resolved.
   FreedomScientific Braille Driver:
      A number of USB connectivity issues have been resolved.
   HandyTech Braille Driver:
      The key combination LeftSpace+Dot7 has been bound to the Backspace key.
      Support for the following new models has been added:
         Active Star 40, Modular Connect 88, Connect Braille 40
   Iris Braille Driver:
      A possible crash when woken up in packet forward mode has been resolved.
      Key bindings have been added for the (new) PASTE_HISTORY command.
      The LatchDelay= parameter has been added.
      The driver has been updated to use newer core facilities.
   Metec Braille Driver:
      Support for status cells has been added.
      The driver has been updated to use newer core facilities.
   Papenmeier Braille Driver:
      Support for the Live and Live+ models has been added.
      Support for keyboards in Windows mode has been added.
      The two braille keyboard thumb keys have been remapped:
         LeftThumb now functions as the control key.
         RightThumb now functions as the left alt key.
   TSI Braille Driver:
      Key tables (rather than hard-coded bindings) are now used.
      The repeat delay and rate can now be controlled from the preferences menu.
      The HighBaud=yes/no parameter has been added.
      The SetBaud= parameter has been added.
      The driver has been updated to use newer core facilities.
   BrlAPI Updates:
      Now at release 0.6.3.
      Support for the XDG_VTNR environment variable has been added.
   USB Updates:
      All endpoint I/O is now deferred until after the strings have been read.
      The strings are now encoded in UTF-8 (rather than in Latin1).
      Asynchronous endpoint input errors are now detected.
      Detaching the kernel's driver via libusb is now supported.
      Detaching the kernel's driver via libusb-1.0 is now supported.
      Reading from an endpoint via libusb-1.0 now works again.
      Native Linux support now works on big endian platforms.
      The braille driver is restarted on Linux if the serial adapter is unplugged.
   Preferences Menu Changes:
      The "Save on Exit" selector has been moved back to the top of the root menu.
      The MENU_PREV_LEVEL command when in the root menu now exits the menu.
      File extensions are no longer shown in the table selectors.
      The Keyboard Table selector has been added.
      The Profiles submenu has been added.
      The Build Information advanced submenu has been added.
      The Tools advanced submenu has been added.
   Text Tables:
      no-oub (Norwegian) has been renamed to no-oup.
      no-oup is now the default Norwegian table.
   Contraction Tables:
      Unicode combining characters are now handled.
      Best fit (rather than explicit) character matching is now done.
      The "contraction" opcode no longer applies if even one non-punctuation
         character either precedes or follows the sequence.
      Updated Tables:
         de-kurzschrift (German)
         en-us-g2 (English US Grade 2)
   Key Tables:
      Contexts can now have meaningful names.
      Including a subtable can no longer change the context of the including table.
   Android Changes:
      The version code and version name are now set.
      The occasional crash on service startup has been resolved.
      Bluetooth devices that don't implement service discovery are now supported.
   DOS Changes:
      The configuration file has been renamed to brltty.cfg (from brltty.con).
      The log file is now created in BRLTTY's top-level directory.
      The log file is now written cleanly.
      The "page fault on program termination" problem has been resolved.
      The mkdosarc and mkdostools scripts have been added.
   Windows Changes:
      The mkwin script has been made much more flexible.
      brltty.inf has been renamed to brltty-libusb.inf.
      brltty.nsi has been renamed to libusb.nsi.
   Build Changes:
      The --with-keyboard-package option has been renamed to --with-kbd-package.
      The PKG_CONFIG environment variable (pkg-config command path) is honoured.
      A patch for screen-4.2.1 has been added.
      The tables have been moved into separate subdirectories of /etc/brltty/:
         Attributes/   attributes tables
         Contraction/  contraction tables
         Input/        braille driver tables
         Keyboard/     keyboard tables
         Text/         text tables

March 27, 2014:
 - BRLTTY 5.1 released:
   General Changes:
      An alert (2 beeps every 30 seconds) is now played when the screen is frozen.
      Saving the preferences file now adds comments showing the possible values
      (and the default value) for each property.
      USB device identifiers now support the genericDevices= (yes, no) parameter.
   Command Changes:
      Unicode braille dots input is now supported:
         The BRLUCDOTS toggle command has been added.
         The "Braille Input Mode" preference has been added to "Input Options".
      Skip Blank Windows now works like Skip Identical Lines:
         FWINLT/FWINRT are unchanged:
            If SBW is off then don't skip blank windows.
            If SBW is on then honour Skip Blank Windows Mode.
         FWINLTSKIP/FWINRTSKIP now work as follows:
            If SBW is off then honour Skip Blank Windows Mode.
            If SBW is on then don't skip blank windows.
   The FreedomScientific Braille Driver:
      Various problems with detecting a connection error have been resolved.
      A problem causing a braille display freeze has been resolved.
   The Papenmeier Braille Driver:
      The following bindings have been added for models with 22 status cells:
         Binding        Command
         Status20       BRLUCDOTS
         Dot7+Status20  BRLUCDOTS+off
         Dot8+Status20  BRLUCDOTS+on
   The Application Programming Interface (BrlAPI):
      The version has been increased to 0.6.2 (from 0.6.1).
      The retainDots= parameter has been removed.
      The PASSDOTS command is no longer implicitly accepted by default.
      Explicitly accepting PASSDOTS bypasses the conversion to PASSCHAR.
   Environment Variables:
      BRLTTY_NO_API (yes, no) is now supported.
   The Configuration File (brltty.conf):
      no-api (yes, no) can now be specified.
      The following directives have been added:
         include <file>
         ifSet <property> [<statement>]
         ifNotSet <property> [<statement>]
         assign <variable> <value>
         ifVar <variable> [<statement>]
         ifNotVar <variable> [<statement>]
         else
         endIf
      The special syntax \{variable} is now supported.
   Text Tables:
      The Hebrew text table (he) has been modernized.
   Contraction Tables:
      The US English Grade 2 (en-us-g2) contraction table has been updated.
   Key Tables:
      The following binding changes have been made to the "keypad" key table:
         Binding           Old      New
         KP0+KPMinus       SIXDOTS  SIXDOTS+off
         KP0+KPPlus        -        SIXDOTS+on
         KPPeriod+KPMinus  FREEZE   BRLUCDOTS+off
         KPPeriod+KPPlus   -        BRLUCDOTS+on
         KPMinus+KP3       -        FREEZE
      The <statement> operand of the ifKey directive is now optional.
      The following directives have been added:
         ifNotKey <key> [<statement>]
         ifVar <variable> [<statement>]
         ifNotVar <variable> [<statement>]
         else
         endIf
   Data File Customization:
      The XDG configuration file paradigm is now supported.
      A local version of any data file can be placed in "/etc/xdg/brltty/".
      The XDG_CONFIG_HOME and XDG_CONFIG_DIRS environment variables are supported.
      See "README.Customize" for full details.
   Build Changes:
      The source has been moved from an svn repository to a git repository at:
         "https://github.com/brltty/brltty.git".
      The URL of the web site has been changed to "http://brltty.com".
      Many of the core headers are now installed (in "/usr/include/brltty/").
      The brltty-devel rpm is now created.
      The --with-api-socket-path= configure option has been added.

January 27, 2014:
 - BRLTTY 5.0 released:
   Major Changes:
      Conversion from frequent regular polling to event-based scheduling.
      The speech driver now runs in its own thread.
   General Changes:
      The --message-delay brltty option has been renamed to --message-timeout.
      The -Q [--quiet-if-no-braille] brltty option has been added.
      The -U [--update-interval=] brltty option has been removed.
      The CLIP_SAVE and CLIP_RESTORE commands have been added.
      The PWGEN command has been removed.
      The FREEZE toggle can now be explicitly set to on or off.
      The confirmation tune is played twice if an explicit toggle is already set.
      Braille driver selection using the Bluetooth device name is now supported.
      A Bluetooth device address may now contain dashes (-) instead of colons (:).
      The "bth:" and "bluez:" device qualifier aliases are no longer supported.
      Braille device identifiers may now contain parameters (see README.Devices).
      Lots of improvements to Android support have been made.
   Preferences Menu Changes:
      Input Options Submenu:
         The Autorepeat Delay setting has been renamed to Long Press Time.
         The Braille Orientation setting has been added.
      Internal Parameters Submenu:
         The log categories have been moved down into their own submenu.
   The following braille drivers have been added:
      bg: B2G models (from NBP).
      mm: Braille Memo models (from KGS).
   Significant upgrades have been made to the following braille drivers:
      Alva, Baum,  Cebra, FreedomScientific, HandyTech, HumanWare,
      Papenmeier, Pegasus, Seika.
   Alva Braille Driver Changes:
      Support has been added for the newer Braille Pen models (from Harpo).
      Support has been added for the Easy Link 12 Touch (from Optelec).
   FreedomScientific Braille Driver Changes:
      All of the bumper keys now have bindings.
      The rocker keys of the Focus 80 Blue now have bindings.
      For Focus models:
         The left shift key now functions as a control modifier key.
         The right shift key now functions as a meta (left alt) modifier key.
         The left GDF key plus the left bumper keys goes to the top/bottom line.
         The right GDF key plus the right bumper keys goes to the top/bottom line.
   HandyTech Braille Driver Changes:
      Support has been added for the Basic Braille models.
   HIMS Braille Driver Changes:
      Support has been added for the Braille Sense U2.
      Support has been added for using Braille Edge models via Bluetooth.
      Support for models which have a qwerty keyboard has been improved.
   Papenmeier Braille Driver Changes:
      The status key bindings for models with 22 status keys have been revised.
   Seika Braille Driver Changes:
      The K2, K3, and K4 keys of the braille display models now work.
   Voyager Braille Driver Changes:
      Support has been added for the routing keys on newer Braille Pen models.
   XWindow Braille Driver Changes:
      It is now usable when only the default fonts are available.
   BrlAPI Changes:
      Version updated to 0.6.1.
      API parameter syntax problems are now errors (rather than warnings).
      Autorepeat key events are now being delivered to clients.
      A crash when visual text wasn't being supplied by the core has been fixed.
      Orca braille output is no longer being hidden by xbrlapi output.
      gdm should now automatically start xbrlapi.
   Text Table Changes:
      The Slovenian table (sl) has been added.
      The full-width Latin letters now have braille representations.
      The full-width Latin digits now have braille representations.
      brltty-trtxt now preserves space characters.
   Attributes Table Changes:
      The existing tables have been given more descriptive names:
         attrib -> invleft_right
         attributes -> left_right
      The upper_lower table has been added.
   Contraction Table Changes:
      The US English Grade 2 table has been improved.
      The German table has been improved.
      The -v (--verification-table=) option has been added to brltty-ctb.
   Key Table Changes:
      A binding for TIME (KP0+T) has been added to the desktop key table.
      A table for Sun type 6 keyboards (sun_type6) has been added.
      Support has been added for long key press bindings.
      The value of an assign statement may now contain variable expansions.
   Build Changes:
      The libusb-1.0 package is now preferred over the libusb package.
      The message catalogs are now installed if the needed tools are available.
      pyrexc is no longer an alternate compiler for the Python bindings.
      Paths to Java build commands which contain blanks are now supported.
      Many fixes for building on Mac OS X (Darwin) have been made.
      The following wrapper scripts for a number of platforms have been added:
         cfg-android, cfg-darwin.
      The eutp command (for EuroBraille file transfer) has been added.

April 1, 2013:
 - BRLTTY 4.5 released:
   General Fixes:
      The cursor routing algorithm is now usually almost as fast as it used to be.
      Speech navigation now works when braille is not being used.
      Autospeak is now forced on if speech is being used without braille.
      Autospeak no longer considers a single character to be a completed word.
      The input modifier commands now function as regular toggles.
      Hangs can no longer occur when the system clock is adjusted backward.
      Occasional delayed input with some braille devices has been resolved.
      Poor response when using USB with some braille devices has been resolved.
      Bogus Bluetooth connect errors (resource busy) have been resolved.
   Alva Braille Driver:
      The key bindings for the BC models have been reworked.
      Secondary routing keys are now interpreted as though they were primary keys.
      The SecondaryRoutingKeyEmulation= parameter has been added.
   Baum Braille Driver:
      The RefreshaBraille key bindings have been improved.
   BrailleNote Braille Driver:
      Key bindings are now defined within key tables rather than being hard-coded.
   Cebra Braille Driver:
      Bluetooth support has been added.
      Support for the Novem braille keyboard has been added.
   FreedomScientific Braille Driver:
      Support for the Focus 14 has been added.
      A key binding for CLIP_COPY has been added.
      The definitions for the two Focus 40 rocker keys have been swapped.
   HandyTech Braille Driver:
      Poor performance when using an Active Braille has been resolved.
   HIMS Braille Driver:
      USB support for the Braille Edge has been added.
      Newer Braille Sense models, when connected via USB, are now recognized.
      Many key bindings for the Braille Sense and Braille Edge have been added.
   HumanWare Braille Driver:
      USB autodetection is now supported.
   IrisLinux Braille Driver:
      Removed - superceded by the Iris braille driver.
   NinePoint Braille Driver:
      Cebra devices are now supported by the new Cebra braille driver.
      This driver now supports the NinePoint device.
   Papenmeier Braille Driver:
      Bluetooth is now supported.
      Models EL40c, EL60c, and EL80c are now supported.
   Seika Braille Driver:
      Support for the Seika 80 has been added.
   Voyager Braille Driver:
      The key bindings have been reworked.
   eSpeak Speech Driver:
      Now runs in a separate thread in order to improve core performance.
   BrlAPI Server:
      The RetainDots= parameter has been added.
   BrlAPI Client:
      Version updated to 0.6.0.
      The brlapi_writeWText() function has been added.
      The Python bindings are now compiled by Cython (rather than with Pyrex).
      Python 3 is now supported.
      A file descriptor leak has been resolved.
   Text Tables:
      The fr-vs table has been updated.
   Contraction Tables:
      The en-us-g2 table has been updated.
   Keyboard Key Tables:
      Many bindings have been added to the laptop table.
   Android:
      An initial implementation is now available.
      Runs poorly on 4.0 (ICS) but quite well on 4.1 (JB).
      Screen navigation is supported.
      See Documents/README.Android for details.

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.
      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.
   Add a HOWTO for reading Chinese big5.
   More Nemeth Code changes to the big5 contraction table.
   Move the preferences files from the data directory to the configuration directory to prevent loss.
   Implicitly disable autospeak during speech tracking.
   Protect serial port draining from system call interruptions.
   Initial changes to support QNX.

August 21, 2004:
 - BRLTTY 3.6pre2 released:
   Default PCM and/or MIDI support on Linux to ALSA if that seems to make sense.
   Add the -p [--pcm-device=] and the -m [--midi-device=] options.
   splitString() can now optionally return the count.
   Move the serial parity/flow constants to a common place (iodefs.h).
   Move low-level I/O routines from misc.[ch] to iomisc.[ch].
   Convert serial devices from file descriptors (ints) to an opaque type.
   drainBrailleOutput() should allow for the driver to have rounded down.
   Wait for all output to the braille display to be drained before closing the driver.
   Replace the Display= and Term= parameters of the XWindow driver with XtParms=.
   EuroBraille driver fix for entering/leaving PC mode.
   HandyTech driver changes:
      Simplify the bluetooth read routine.
      Add the InputMode= parameter.
   General driver changes:
      Clean up include lsits.
      Give standardized names to external symbols.
   Autodetection changes:
      Change the short form of the --version option to -V.
      Change the -v option to --verify.
      -b and -s both accept a comma-delimited list of drivers.
      -s accepts "auto".
      Only autodetect if more than one driver or device is specified.
      Restarting a braille/speech driver re-autodetects.
      Don't enable flow control until after successfully detecting the display.
      Improve the order of the logs.
      Remove the "driver giving up" warnings.
   MIDI ALSA changes:
      Ensure that "Midi" occurs in every routine name.
      Simplify duration scheduling.
      Support pauses between notes.
   API changes:
      Move the multiple settings of the root tty into setCurrentRootTty().
      Fix problems which occur when the null screen driver is being used.

August 12, 2004:
 - BRLTTY 3.6pre1 released:
   Clarify the copyright statement in the top-level README.
   Reorganize the startup logs.
   Add support for braille display autodetection (-b auto).
   Allow more than one braille device to be specified.
   Access the driver directly if the API fails to start.
   Convert PCM and MIDI devices from file descriptors into opaque types.
   Add ALSa support for PCM and MIDI devices.
   Introduce common serial device access routines.
   A va_list (stdarg) must be reset before being reused on some platforms.
   Use the type ScreenKey rather than unsigned short for screen key insertion.
   Fix the handling of control characters when using scan codes.
   Move the handling of meta character input entirely into the screen driver.
   Implement Linux-specific AT2 support.
   Failure to load the specified text table results in an uninitialized reverse text table.
   Add an initial timeout parameter to readChunk().
   Implement changeOpenFlags(), setOpenFlags(), and setBlockingIo().
   Convert learn mode to use a better timeout mechanism.
   Split describeCommand() out of learnMode().
   The vertical window shift should be the number of lines on the display if greater than 1.
   Add the TTY braille driver.
   Add the XWindow braille driver.
   Add ASCII characters 0X60,0X7B-0X7F to text.brf.tbl.
   Support \s (space) for translation tables.
   Update the Spanish text table to the O.N.C.E. standard.
   Updated big5 contraction table.
   Support FreeBSD installations which don't have speaker support.
   Add support for NetBSD.
   Support compilation on OSF.
   Add compile-time warnings for features which aren't available.
   Save our latest copy of Gnopernicus's brltty driver (ttybrl.c).
   API changes:
      Update version to 0.3.0.
      Increment protocol number.
      Change the license for all client-side files to the LGPL.
      Prefix definitions in brldefs.h with BRL_.
      Remove from brldefs.h what shouldn't be in there.
      Split protocol-specific definitions from api.h out into api_protocol.h.
      Added two packet types for (un)ignoring key sets.
      Renamed brlapi_(un)ignoreKeys to brlapi_(un)ignoreKeyRange.
      Added the brlapi_(un)ifnoreKeySet functions.
      For (un)ignore, only consider the blk and arg fields of a command.
      Protocol enhancements (some packets removed, certain operations faster).
      Error management is now partly asynchronous.
      Server partially rewritten to use select() system call.
      Now only two threads: one for brltty, one for incoming connections.
      Default client error handler with capability to define another one.
      Some functions renamed.
      apitest added.
      Don't look at $WINDOW to determine the tty (yet).
      Add support for drivers with brl_writeVisual().
      Implement recursive windows.
      Deprecate brlapi_readCommand() and replace it with brlapi_readKey().
      Replace uses of uint32_t with unsigned int where possible.
      Rename BRLAPI_EXTWRITESTRUCT_INITIALIZER to BRLAPI_WRITESTRUCT_INITIALIZER.
   USB fixes:
      Allow usbBeginInput() to be called more than once on the same endpoint.
      Set the configuration before claiming the interface.
      Configuration descriptors must be read by number rather than by value.
      usbCancelRequest() shouldn't deallocate a completed request.
      BSD systems only allow short transfer to be set for input endpoints.
      OpenBSD endpoint read timeouts should be silent and non-fatal.
   HandyTech driver changes:
      Remove the no longer needed (read|write)Bytes() routines.
      Turn brl_(read|write)Packet() into standalone routines for later enhancement.
      Add bluetooth support.
      Add support for keyboard input.
   Papenmeier driver changes:
      Change some BrailleX 2D Screen key bindings.
      Implement simulated EL switches for those models which don't have them.
      Simplify the EL command generation macros.
      Reduce the volume of output logging.
      Log the baud at which the driver is probing.
      Make protocol I input packet logging more standard.
      Fix the count for copying generic status cell data from the core-supplied buffer.
      Remove unused definitions from the header.
      Move protocol I definitions from the header into the protocol I section of the implementation.
      Complete the implementation of protocol II.
      Support the EL 40/66/80 Slimline models.
      Remove out-of-date debugging utilities.
   TSI driver changes:
      Remove CTS checking.
      Remove the wait-for-connect loop.
   VisioBraille driver changes:
      Prefix public constants with BRL_VS.
      Reindent the source to core conventions.
      Don't remember display content until successfully written.
   Voyager driver changes:
      Fix an upper bound error in brl_writeWindow().
      Remove the write retry loops.
      Simplify the control request retry algorithm.
      Act on first key release rather than after all keys are released.
      Add support for the part232 serial interface.
      Remove knowledge of USB string encoding.
      Rename the BrlInput= parameter to InputMode=.
      Change the default for InputMode= to no.
      Change InputMode=no to mean don't require chording.
      Add the StatusCells= parameter.
      Simplify the help generation macros.
      Reorganize the help template.
   Build changes:
      Rename --disable-usb to --disable-usb-support.
      Add --disable-bluetooth-support.
      Rename --disable-...-tunes to --disable-...-support.
      Add --with-curses=.
      Add --with-xt-toolkit=.
      Reorder the arguments to BRLTTY_ARG_ENABLE/DISABLE.
      Detect if Linux-specific AT2 support can be used.
      Check for iconv.h.
      Check for <sys/select.h>.
      Detect if __attribute__((format(printf))) is supported.
      Detect if __attribute__((packed)) is supported.
      Detect if __attribute__((unused)) is supported.
      Detect if the __alignof__ operator is supported.
      Abort the configure if ld flags aren't known.
      Completely rewrite install-sh to support more than one source operand.
      Hard-code "ar" in the make file since HP-UX doesn't set "$(AR)".
      The FestivalLite driver needs -lm.
      Don't build the API or the Mikropuhe driver if pthreads isn't available.

June 12, 2004:
 - BRLTTY 3.5 released:
   Don't include the Mikropuhe speech driver in the RPM. (dm)
   Fix up the lists of supported Papenmeier models. (dm)
   Update brltty's LSM (Linux Software Map) for 3.5. (dm)
   Documentation updates: (dm)
      Move the last section ("Epilogue") to the beginning (as "Formalities").
      Letter (rather than number) the appendices.
      Convert some descriptive lists into tables.
      Add some more alert tune events.
      Describe the Braille Firmness feature.
      Remove the mention of USB from the Voyager driver.
      Routing keys now function as a scroll bar for numeric preferences.
   Document the speech FIFO: (dm)
      -F (--speech-fifo=) command line option
      speech-fifo configuration file directive
      BRLTTY_SPEECH_FIFO environment variable
   Document the fact that identification by USB serial number may not work. (dm)
   Restore the default status cell style for the HandyTech driver to "Alva". (dm)
   Bring the change log up-to-date (3.4.1 to 3.5). (dm)
   Only refer to libpthread if necessary. (dm)

June 8, 2004:
 - BRLTTY 3.5pre4 released:
   Increase the Voyager driver's STALL_TRIES setting from 3 to 7. (sd)
   Split usbControlTransfer() into usbControlRead() and usbControlWrite(). (dm)
   Add retry logic to the Voyager driver's call to usbBeginInput(). (dm)
   The USB serial adapter handlers should return a boolean success value. (ml,dm)
   gcc 3.3 reports "-lgcc_s not found" when linking statically. (dm)
   Remove the BrailleLite driver's detection loop since the core now loops. (dm)
   Disabling speech support breaks the compile. (ml)
   Log the USB language. (dm)
   Move the USB device open algorithm into the core. (dm)
   Introcuce USB_IS_PRODUCT(). (ml,dm)
   Remove unreachable code. (ml)
   Repack the Freedom Scientific model entry structure. (ml)
   Improve the way the null braille and speech drivers work. (dm)
   Fix a pointer error. (st).
   Most of the previous/next setting code is common. (dm)
   Fix the comments for and adjust the names of the fields of the MenuItem structure. (dm)
   Change the routing keys in the preferences menu from a set of descrete values to a scroll bar. (dm,np)
   Fix a buffer overflow problem in updatePreferences(). (np,dm)
   Building the BrlAPI reference manual fails when not building in the source tree. (ml)
   Add the firmness handler to the Alva driver for the Satellite displays. (dm)
   Prepare for reading USB input on systems which don't support URBs. (dm)
   Get rid of the illegal type-punning warning. (dm)
   Prepare the Papenmeier driver for protocol-specific handlers. (dm)
   Support the HandyTech FTDI USB<->serial adapter. (ml)
   Add a USB input packet filtering mechanism and use it for FTDI USB<->serial adapters. (dm)
   Add the base for Papenmeier USB support. (ml,dm)
   Parse contraction table input with unsignee chars. (dm)
   Parse translation tables with unsigned chars. (dm)
   Fix some problems with Solaris and HP-UX builds. (dm)
   --with-screen-driver=no needs route.o. (dm)
   Solaris and OpenBSD share the same PCM code. (dm)
   Include sys_..._none.h files where appropriate. (dm)
   Solaris requires -lsocket. (dm)
   Linux, Solaris, OpenBSD, and FreeBSD all use <dlfcn.h>. (dm)
   Linux and FreeBSD use the same PCM code. (dm)
   Make BRLTTY buildable on FreeBSD. (dm)
   Rename usbBulk(Read|Write)() to usb(Read|Write)Endpoint(). (dm)
   Add USB support for OpenBSD (incomplete). (dm)
   The Mikropuhe driver's deallocateSpeechItem() routine needs the new data argument. (dm)
   EuroBraille update: (yp)
      More BrlAPI compliant.
      Update logged version number.
   Include <unistd.h> within each header file which uses size_t. (sd)
   Use message() to report TSI low battery condition. (sd)
   Use a queue to link the pending USB input requests. (dm)
   Some more tidying up of the USB declarations. (dm)
   HandyTech display identification via USB was unreliable on a fast machine. (dm)
   Maintain endpoint-specific data. (dm)
   The preferences menu crashes if the contraction tables directory is bad. (dm)
   The "er" in "surgery" doesn't get contracted (en-us-g2). (jb)
   brl_readPacket() and brl_writePacket() now use the size_t and ssize_t types. (st)
   Correct the BrlAPI client run-time discovery of libpthread use. (st)
   BrlAPI fixes: (ml)
      Remove duplicate declarations already in pthread.h.
      strndup() is a glibc specific GNU extension which isn't available on some platforms, e.g. OpenBSD.
      "int vt" was declared outside the Linux specific block, causing a compiler warning about an unused variable.
   brltty-install and brldefs.h didn't install correctly when not building in the source tree. (ml)
   The Voyager driver should no longer be Linux-dependent. (ml)
   Occasionally the rest of the line, rather than just the current word, becomes uncontracted. (dm)
   Rearrange the public USB constants a bit. (dm)
   Add the FTDI chip used by HandyTech. (ml)
   Remove the reference to -lm. (dm)
   Remove inclusion of <math.h>. (dm)
   Change all doubles to floats. (np,dm)
   Generate triangle (rather than sine) waves when playing tunes via the pcm. (np)
   Implement the "Braille Firmness" preference. (dm)
   Add "Braille Firmness" capability to the Voyager and FreedomScientific drivers. (dm)
   Move usbBulk(Read|Write) out of the portable part of the USB core. (dm)
   OpenBSD needs misc.c to include <sys/stat.yh>. (ml)
   Ensure that all declarations are at the beginnings of their blocks. (ml)(
   Remove double semicolons. (dm)
   Add a "routing started" tune, change the "routing succeeded" tune. (sd)
   Don't write the initial "application character map changed" log. (dm)

April 13, 2004:
 - BRLTTY 3.5pre3 released:
   Rename the key/cell offset/address variables in the Papenmeier driver. (dm)
   Remove adlib debug logs. (dm)
   Updates to the Papenmeier initialization debug logs. (dm)
   Voyager driver changes: (dm)
      Remove failure on error for non-critical operations )the plus-box doesn't support them all).
      Call usbControlTranfer() with proper constants.
   Rearrange parameters to usbControlTransfer(). (dm)
   Add the $X suffix to the executables in the Papenmeier make file: (dm)
   Papenmeier configuration file processing changes: (dm)
      Make parser errors more informative.
      Add more error checking.
   Add support for rescue images to rhmkiso. (dm)
   Preferences menu binding changes: (dm)
      The home/end keys are discard/exit.
      The escape/return keys are exit/save.
      The back command is previous setting.
   Speed up the Papenmeier command resolution algorithm. (dm)
   Papenmeier configuration file processing changes: (dm)
      Remove command and modifier table size limits.
      Allocate tables only as big as they need to be for each model.
      Allow processing to continue when an error is encountered.
   Improve the Papenmeier help descriptions. (dm)
   Tidy up the Papenmeier configuration file parser declarations. (dm)
   Fix descrepancies in the Papenmeier status key toggle commands. (dm)
   Remove the padding of help page widths to multiples of 40. (dm)
   Allow a help page to have more than 255 lines. (dm)
   Papenmeier driver changes: (dm)
      Remove the open retry loop.
      Improve some configuration file error messagds.
      Allow the key to be between or after the modifiers.
      List the key after, rather than before, the modifiers.
      Check for duplicate modifiers.
   Report the use of a non-option argument when invoking brltty. (dm)
   Log (debug) keys and commands in command learn mode. (dm)
   Fix the learning of non-initial repeating commands. (dm)
   Don't log Papenmeier non-modifier key releases. (dm)
   Remove some double spaces within the Papenmeier configuration file. (dm)
   Add a Papenmeier EL mode for the preferences menu. (dm)
   Support the Papenmeier EL40 better as it has no right key. (dm)
   Add the -a option to rhmkiso. (dm)
   Change the rhmkiso image parameters into the -i and -o options. (dm)
   Fix problems with HandyTech initialization after the loop was removed. (dm)
   rhmkiso should look for the directory the same way isolinux does. (dm)
   Add a README (README.RedHat.cd) for rhmkiso. (dm)
   Rework the Papenmeier switch/key bindings. (dm)
   Name the switches and keys correctly in the Papenmeier configuration file. (dm)
   The short info display contains stray dots. (dm)
   Remove the Televox driver. (np)
   HandyTech driver changes: (dm)
      Check for errors after awaitInput().
      Only check for the display once when opening it.
   awaitInput() should set EAGAIN on a timeout. (dm)
   For BrlAPI: Remove the Vario driver's check that its internal buffer is being used. (mm)
   Add forcePcmOutput() and awaitPcmOutput(). (dm)
   Generate the dependencies before doing "make distclean". (dm)
   Tidy up the Mikropuhe sample width setting code. (dm)
   The Mikropuhe driver should close the sound device after a few seconds of inactivity. (dm)
   The Mikropuhe mute function should stop the audio device immediately. (dm)
   Mikropuhe driver enhancements: (dm)
      Synthesize and speak in a separate thread.
      Implement the mute function.
   Core autorepeat support foiled leaving command learn mode for some displays. (dm)
   Look for external packages in a few more places. (dm)
   Rearrange code/declarations pertaining to command line options. (dm)
   Add the speech pass-through FIFO. (np)
   Don't call gettimeofday() if there's no rewrite interval. (np)
   Use mallocWrapper() in the CombiBraille driver. (ml)
   Fix the way in which the Alva driver calculates its rewrite interval. (dm)
   Change the way the HandyTech driver detects timeouts. (dm)
   Rewritten VisioBraille README. (sh)
   Add the -t (built-in text table) option to rhmkiso. (np)
   CMD_RETURN should behave just like CMD_HOME in the references menu. (np)
   Add the displaysize= parameter to the VisioBraille driver. (sh)
   big5 updates. (ck)
   The English word "I" shouldn't have a letter sign in front of it. (dm)
   Moved API authentication before any allocation or thread creation. (st)
   Don't log an Alva display parameters packet as unexpected. (dm)
   Set errno to EAGAIN if readChunk() times out. (dm)
   Add usbAwaitInput(). (dm)
   USB_DIR_(IN|OUT) have been renamed to USB_DIRECTION_(IN|OUT)PUT. (dm)
   Make the settable ViaVoice rates and volumes more sensible. (dm)
   Add serial adapter support to the USB core. (dm)
   Allow --with-(text|attributes)-table= to take an absolute path. (dm)
   Add USB support to the HandyTech driver. (ml)
   Add the -s (start shell for inspection) option to rhmkiso. (dm)
   Add rhmkiso command line argument parsing: (dm)
      A parameter to specify the original (input) image.
      A parameter to specify the modified (output) image.
      An option to specify the braille driver(s).
      An option to display command usage.
   rhmkiso enhancements: (np)
      Copy the entire file structure rather than just the isolinux directory.
      Copy the volume and application identifiers.
      Create the destination image with Joliet support.
      Make it easier to configure a specific braille driver.
   BrlAPI fixes: (stet
      Some blanks removed.
      brlapi_splitHost() now shared between server and client.
      Server now defaults to listening on local interface only for security.
      Read and write functions now return size_t.
      Read and write functions now define brlapi_errno themselves on error.
      brlapi_getTty() now returns the number of the tty it got.
   Reverse the functions of the BrailleLite Millennium whiz wheels. (dm)
   Rename mkrhiso to rhmkiso: (dm)
      Use nofb rather than video=vc:13.
      Strip the brltty executable before installing it.
      Don't invoke the interactive shell.
   Implement the FreedomScientific (fs) braille driver. (dm)
   Allow the USB input transfer mode to be specified. (dm)

March 11, 2004:
 - BRLTTY 3.5pre2 released:
   Bring device examples in brltty.conf template up-to-date. (dm)
   Rework key bindings a bit for Alva 3nn and 4nn models. (np)
   Add the RETURN command. (dm)
   Add the prfword contraction table opcode. (dm)
   BRLTTY Manual update: (np,dm)
      Remove documentation for tbl2hex and txt2hlp.
      Move "Contracted Braille" to its own top-level section.
      Some minor corrections.
   More fixes to fr-abrege.ctb. (np)
   Fix the "er" contraction in the French table. (np)
   Add a script (mkrhiso) to make a RedHat/Fedora boot CD. (dm)
   Single character contraction table matches should be case insensitive. (dm)
   Give the "always" contraction table opcode a lower priority for matching. (dm)
   Allow a contracted braille match string to contain spaces. (dm)
   Fix the dependencies for the host_... objects. (np)
   Add entries for the French words a, à, and y. (np)

March 8, 2004:
 - BRLTTY 3.5pre1 released:
   tbl2hex, tbltest and ctbtest should check for missing parameters. (np,dm)
   Add text.brf.tbl. (np)
   Fix the install-api-manpages make target to detect installation errors. (dm)
   Add the fr-abrege contraction table. (np)
   Add ctbtest. (dm)
   Installing BRLTTY shouldn't require that BrlAPI's man pages be built. (dm)
   Voyager driver enhancements: (sd)
      Remove internal support for autorepeat and use the core's facility.
      Add the brlinput= driver parameter.
   Add the class, after and before contraction table opcodes. (dm)
   Add the begmidword contraction table opcode. (dm)
   Hard-code and logically group the contraction table opcode names. (dm)
   Allow braille/speech driver parameters to be qualified with a driver identifier. (dm)
   Add --with-(braille|speech|screen|api)-parameters=. (dm)
   Add comment describing reason for selected dot-to-bit mapping. (np)
   BrlAPI enhancements: (sh)
      brlapi_getDriverId and brlapi_getDriverName now use snprintf().
      Remove BRAPI_PACKETWRITE.
      Rewrite brlapi_writeBrl() to use the new extended write packet.
      Protocol version is now 2.
   Enhance the description of the standard dot numbering convention. (dm)
   Rename brlapi.h to api.h. (dm)
   Document the --with-mikropuhe build option. (dm)
   Correct the descriptions of the two supplied attributes translation tables. (dm)
   Remove the documentation for tbl2tbl, tbl2txt, and txt2tbl. (dm)
   BrlAPI enhancements: (sh)
      Protocol:
         Add protocol version to the authentication packet.
         Add extra server-side verifications to recognize a packet containing a
            valid authentication key but no protocol version (an old-style packet),
            and to report an accurate error message in this situation.
      api_server.c:
         Lower-case first letter of function names to be closer to core's coding style.
         Make all private fuoctions static.
   VisioBraille driver enhancements: (sh)
      Add support for typing upper-case c with cedilla and upper-case a with grave.
      Key combinations of the form C-M-char can now be given from the braille keyboard.
      Code clean-up and instruction reordering.
      Add debug facilities for dealing with unknown PROMs.
   Add tbltest. (dm)
   BrlAPI enhancements: (sh)
      Add more explanation to comments for fields of brlapi_extWriteStruct.
      Check buffer size in brlapi_getDriverId() andbrlapi_getDriverName().
   Add the fr-iso01 text translation table. (yp)
   BrlAPI enhancements: (sh,st)
      brlapi_extWrite() now takes only one argument (of type brlapi_exjWriteStruct).
      BRLAPI_EXTWRITESTRUCT_INITIALIZER macro added (to initialize brlapi_extWriteStruct).
      Fields in packet and corresponding bits in flags have been reordered.
      Static variables inside client functions have been removed.
      brlapi_writeDots() now accepts "unsigned char"s (rather than "char"s).
      Return 0 and do nothing if region's begin exceeds its end.
      Server refuses invalid cursor position.
   EuroBraille driver version 1.3.2. (yp)
   Add a description to the VisioBraille text translation table. (sh)
   Add Finnish text translation tables. (tm,dm)
   Remove personal text translation tables. (dm)
   The text/attributes translation tables are now editable text rather than binary. (np,dm)
   ViaVoice driver enhancements: (dm)
      The speed= and volume= driver parameters are now handled by the preferences menu.
   Add a skeleton setPcmAmplitudeFormat to the support for each non-Linux platform. (dm)
   Add a table for uncontracted unified French braille. (np)
   Introduce the user-space Voyager driver. (sd)
   Map the Alva Satellite's tumbler keys. (dm)
   Add the cursorDots() function. (sh,dm)
   Add the extended write feature to BrlAPI. (sh)
   Automatically turn off the Alva Satellite's PROG key simulation. (dm)
   Add a routing succeeded tune. (sd)
   Implement the Mikropuhe speech driver. (dm)
   Normalize the tune names. (dm)
   Fix the cursor routing timeout logic. (dm)
   Play a tune when routing fails. (dm)
   brlapi.h documentation enhancements: (sh)
      Correct the example for brlapi_initializeConnection().
      Illustrate the use of brlapi_strerror().
   Tidy up the cursor routing code. (dm)
   Clear all pending pids when a single SIGCHLD is received. (dm)
   Modularize the status cell setting code. (dm)
   Always recheck the VGA character count. (dm)
   Fix ifdef placement errors for disabling speech support. (dm)
   Don't install the API's man pages when API is disabled. (dm)
   Configure's option summary output should be subject to the --quiet flag. (dm)
   Include inttypes rather than stdint. (dm)
   Add core-supported output overflow protection to Alva serial output. (dm)
   Add support for the BrailleLite M20. (dm)
   Increment BrlAPI's version number from 0.1.2 to 0.2.0. (dm)
   Add -pipe to the gcc/g++ compile options. (dm)
   BrlAPI fixes: (st)
      Get rid of bindings, 4k freed from the library.
      Remove brlapi_getControllingTty availability (getTty does it).
      Add support for WINDOWID (for multiplexer when an application is running in an xterm).
      "uint32_t" -> "int" for cursor (to allow -1 special value).
      "unsigned char"s for writeBrlDots().
      Add brlapi_strerror().
      A small but important fix in brlapi_errno_location().
      Rename BRLAPI_AUTHNAME to BRLAPI_AUTHPATH.
   Document the BrailleNote key combination for command learn mode. (dm)
   Add autorepeat to the Papenmeier driver. (dm)
   Group the Papenmeier status keys more uniformly and conveniently. (dm)
   Add the CMD_AUTOREPEAT command. (dm)
   Don't include savePreferences if --disable-preferences-menu is specified. (dm)
   When in learn mode write "lrn" to the status cells. (dm)
   When in the preferences menu write "prf" rather than "prefs" to the status cells. (dm)
   Enhance autospeak to respond to user input and cursor motion. (dm)
   The mute functions of the FestivalLite and Theta drivers should wait till resources are freed. (dm)
   Say speech rate/volume changes as they are made. (dm)
   FestivalLite driver: replace wpm= with spk_rate(). (dm)
   Theta driver: replace rate= with spk_rate(). (dm)
   Add the Speech Volume preference. (dm)
   Add the CMD_SAY_SOFTER and CMD_SAY_LOUDER commands. (dm)
   Add spk_volume() to the Theta driver. (dm)
   Fix key bindings for speech commands for PB80. (sd)
   Add spk_rate() to the Festival driver. (dm)
   Add the CMD_SAY_SLOWER and CMD_SAY_FASTER commands. (dm)
   Add "Speech Rate" to the preferences menu. (dm)
   BrlAPI fixes: (sh)
      Add braces to clarify an ambiguous else clause.
      Call the driver's reset() handler when raw mode is left improperly.
   Correct the representation of 0XC7 (uppercase C with cedilla). (sh)
   Remove the spurious #define of PREFSTYLE for the null braille driver. (dm)
   brl_reset() should return a boolean. (dm)
   EuroBraille driver version 1.3.2: (yp)
      Remade brl_ReadPacket and brl_WritePacket to allow writting of low-level packets and error code retrieving.
      Full Iris support.
      Implement brl_reset.
   Move the autorepeat settings from command line options to the preferences menu. (dm)
   Convert blinking settings from update intervals to elapsed time. (dm)
   Command learn mode shouldn't announce CMD_NOOP. (dm)
   Centralize the knowledge of which commands can autorepeat. (dm)
   Clean up the toggle code. (dm)
   big5 enhancements (including Nemeth Codes). (ck)
   The mode pointer in the virtual driver shouldn't be externally visible. (dm)
   Log each command as soon as it's received from the driver. (dm)
   Log unrecognized and truncated Alva input packets. (dm)
   Ensure that all toggle descriptions are formatted correctly for learn mode. (dm)
   Rename the "VAL_SWITCH..." constants to "VAL_TOGGLE_...". (dm)
   Change the HandyTech driver to use the core's autorepeat facility. (dm)
   Log the compilation date and time for each driver. (dm)
   Change all drivers to recognize qualified devices (serial:, usb:, client:, server:). (dm)
   BRLTTY command-line options changes: (dm)
      Rename -R (--refresh-interval=) to -U (--update-interval=).
      Add -R (--autorepeat-delay=).
      Add -r (--autorepeat-interval=).
   Change the Alva driver to use the core's autorepeat support. (dm)
   Add autorepeat suport to the core. (dm)
   Alvas automatically send an identification packet when DTR is ascerted. (dm)
   Arbitrarily rewrite the Alva display whenever a configuration change occurs. (dm)
   Log unexpected Alva input packets. (dm)
   Alva Satellites can change dimensions on-the-fly. (dm)
   Force the default choice when an invalid choice is made. (dm)
   Reidentify an Alva display without restarting the driver. (dm)
   Define front and top key bindings for the Alva Satellite models. (dm)
   Define the alternate Alva routing and status keys. (dm)
   Add USB support to the Alva driver. (dm)
   Add USB support to the core. (dm)
   Implement the Albatross driver. (dm)
   Change the copyright end year from 2003 to 2004. (dm)

January 15, 2004:
 - BRLTTY 3.4.1 released:
   Fix an invalid address conversion. (dm)
   accept() can return 0. (st)
   Reset the address length before calling accept(). (st)
   Pasting accented characters doesn't work. (dm)
   Only remove brltty-config from Programs during distclean. (ah)

December 31, 2003:
 - BRLTTY 3.4 released:
   Allow --with-...-driver= identifiers to be prefixed with a minus sign. (dm)
   Remove duplicate files from screen-3.9.11 patch. (TK)
   Add more build options to specify directories. (dm)
      --with-program-directory
      --with-library-directory
      --with-data-directory
      --with-manpage-directory
      --with-include-directory
   Swap HandyTech's "freeze screen" [B7] and "six-dot braille" [B6 B8] bindings. (dm)
   Support HandyTech Modular and Braille Star 80 keypad. (ml)
   Optional packages are also looked for in /opt/<package-name>. (dm)
   Configure shouldn't list external drivers when linking statically. (dm)
   Standardize the software speech driver identification notices. (dm)
   Support dynamic external, dynamic internal, and static linking for drivers with external dependencies. (dm)
   spk_open() should return a boolean indicating success or failure. (dm)
   Add spktest. (dm)
   Support the Theta text to speech engine. (dm)
   Add the 4(hundred) to the names of the Alva Delphi models. (dm)
   Get rid of --disable-tainted-components build option. (dm)
   Add the --with[out]-viavoice build options. (dm)
   Remove several unsigned/signed char conflicts. (dm)
   C90 doesn't permit C++-style // comments. (ml,dm)
   Support the Festival Lite text to speech engine. (ml)
   Allow the --with-...-driver= options to take "all" or a comma-delimited list. (dm)
   The Alva driver shouldn't set CRTSCTS as it prevents some models from displaying output. (dm)
   Split out HandyTech model identification in preparation for buffer resize support. (dm)
   Braille drivers providing packet I/O must now implement brl_reset(). (dm)
   Allow the .tbl extension for attributes translation tables to be optional. (dm)
   Allow the .ctb extension for contraction tables to be optional. (dm)
   Support default table extensions and prefixes when configuring. (dm)
   Disabling contracted braille doesn't fully disable it. (sd,dm)
   No longer support library names and paths for drivers. (dm)
   Make private globals static (MiniBraille, Papenmeier, VisioBraille). (dm)
   Reduce size of BRLPARAMS structure in Avla driver to save space. (ml)
   Ignore EINTR interruption in Alva's SendToAlva() routine. (ml)
   Make more private globals static in MultiBraille driver. (ml)
   Use the TranslationTable typedef in the LogText driver. (ml)
   EuroBraille driver 1.3.1:
      Corrected AzerBraille 40 Programming keys bugs.
      Added a LOG_IO define to log in/out packets to a file.
      Started to debug Iris identification failures (still not working perfectly).
   Make private globals static (CombiBraille, MultiBraille). (ml)
   Make private globals static (EuroBraille, MultiBraille, VideoBraille). (ml)
   Append the driver code to the driver symbol name. (dm)
   Convert the VideoBraille driver to use makeOutputTable. (dm)
   Revive the VarioHT driver. (dm)
   Fix hanging of Vario driver when display is turned off and on again. (ml)
   Fix hanging of TSI driver when falling back to 9600 baud. (dm)
   Convert the EcoBraille driver to use makeOutputTable, openSerialDevice and resetSerialDevice. (dm)
   Rearrange the t_key structure in the EuroBraille driver to save space. (ml)
   Convert the MiniBraille driver to use makeOutputTable and openSerialDevice. (dm)
   Convert the BralleNote driver to use makeOutputTable. (dm)
   Convert MultiBraille driver to use makeOutputTable, openSerialDevice and resetSerialDevice. (ml,dm)
   Starting the HandyTech driver gobbles a file descriptor if:
      model detection fails (ml)
      resetting the device fails (dm)
   Convert the MDV driver to use openSerialDevice and resetSerialDevice. (ml,dm)
   Convert the VisioBraille driver to use openSerialDevice and resetSerialDevice. (ml,dm)
   The O_NOCTTY flag shouldn't be used when opening the Voyager device. (dm)
   Convert the EuroBraille driver to use openSerialDevice and resetSerialDevice. (ml)
   Convert the Alva driver to use openSerialDevice and resetSerialDevice. (ml,dm)
   Convert the Vario driver to use openSerialDevice and resetSerialDevice. (ml,dm)
   Convert the BrailleLite driver to use openSerialDevice and resetSerialDevice. (dm)
   Replace internal TSI driver SetSpeed() routine with resetSerialDevice(). (ml)
   Opening a serial device shouldn't hang if CLOCAL isn't set. (dm)
   Convert the TSI driver to use openSerialDevice(). (dm)
   Update big5.ctb. (ck)
   Add the patch for screen-4.0.1. (rb)
   Add packet I/O to the HandyTech driver. (dm)
   Changes to support OpenBSD. (ml,dm)
   Add support for HandyTech's Braillino. (ml,dm)
   Add a full list of country codes to en-us-g2.ctb as literal. (ml)
   Implement contraction table opcode 26 (locale). (dm)
   Document how to use stow to maintain multiple releases of BRLTTY. (bd)
   brlapi_getControllingTty() now checks back through parent processes until a real tty is found. (ml,dm)
   Add targets for compiling and uncompiling text translation tables. (ml)
   Assume a direct-through mapping if there is no screen font map. (ml,dm)
   Enhance the INIT_PATH mechanism: (np)
      Handle being invoked as linuxrc.
      Handle other commands, e.g. telinit, being ways to invoke init.
   EuroBraille driver 1.3: (yp)
      Reduced code size.
      BrlAPI compatible.
      Transfer routines moved to separate program.
      Corrected bugs when using an Iris-40 (still not perfect).
   Change the configure default for BrlAPI to enabled. (dm)
   Put %config and %verify for brltty.conf on the same line in the rpm spec file. (dm)
   Delay after receiving a Papenmeier identity packet to allow the display time to become fully ready. (dm)
   Add the virtual braille display driver. (ml)
   Introduce brltty-config and use it from brltty-install. (dm)
   Add CMD_LEARN to the Papenmeier driver. (dm)
   Allow PRDIFLN/NXDIFLN to move up/down in the preferences menu. (dm)
   Don't report non-existent directories when uninstalling. (dm)
   Reduce the log for failure to set the working directory to a warning. (dm)
   Add / as an additional backup working directory. (dm)
   Make the directory for driver help, driver configuration, and driver lists specifiable. (dm)
      the -D (--data-directory=) command line option
      the data-directory configuration file directive
      the BRLTTY_DATA_DIRECTORY environment variable
   Make the directory for text and attributes tables specifiable. (dm)
      the -T (--tables-directory=) command line option
      the tables-directory configuration file directive
      the BRLTTY_TABLES_DIRECTORY environment variable
   Make the directory for contraction tables specifiable. (dm)
      the -C (--contractions-directory=) command line option
      the contractions-directory configuration file directive
      the BRLTTY_CONTRACTIONS_DIRECTORY environment variable
   The "braille driver initialization failed" log fills /var when the display isn't connected. (dm)

September 1, 2003:
 - BRLTTY 3.3.1 released:
   Correct the description of which commands are unmasked by default. (st)
   Build fails with standalone-programs and braille-driver=vd,vh. (dm)
   Log "braille driver initialization failed" fills /var when display not connected. (dm)

August 4, 2003:
 - BRLTTY 3.3 released:
   Let rpm determine requirements. (dm)
   Papenmeier driver enhancements: (dm,bd)
      Write packet as single operation rather than in 3 parts (header, data, trailer).
      Log output packets.
      Log full identity packet rather than just first 4 bytes.
   Configuring with --without-screen-driver now uses scr_null. (dm)
   Remove the use of sched_yield() to restore tone length accuracy. (np)
   Add the "Say-Line Mode" (Immediate, Enqueue) preference. (np,dm)
   Rename the default for the Linux screen driver option acm from default to auto. (dm)
   No longer strip executables in the build tree. (dm)
   Compile all drivers even if built-in ones are configured. (dm)
   Add the -L (--library-directory=) option to brltty and brltest. (dm)
   Wrap long output lines from configure --help. (dm)
   Enhancements to en-us-g2 contraction table. (jb)
   Braille Lite driver enhancements: (dm)
      Some initialization failures gobble resources.
      Add Millennium support (whiz wheels, advance bar combinations).
      Change keyboard emulation mode default from off to on.
      Allow chorded keyboard input when not in keyboard emulation mode.
   Check for the pow() function during autoconf. (dm)
   The global variable languageCount in the ViaVoice speech driver isn't used. (dm)
   Add basic support for Gnopernicus. (ml)
   autogen.sh invokes autoconf (overridable by $BRLTTY_AUTOCONF) instead of autoconf-2.53. (dm)
   Clean up the make file in the Documents subdirectory. (dm)
   Remove the German BRLTTY manual since it's so out-of-date. (dm)
   Start implementing the Autospeak preference. (dm)
   README.Debian still had references to /sbin/brltty (now in /bin). (sh)
   Make the timing routines more robust. (dm)
   Stop console tones automatically if the system is too slow. (dm)
   Convert the screen drivers from C++ to C. (dm)
   Add the -n, -d and -o options to bp2cf for device path translation. (dm)
   A few changes to text.da-1252.tbl by Svend and his group. (hs)
   Reduce HandyTech driver data segment size. (ml)
   Reduce Papenmeier driver data segment size when configuration file support not included. (ml)
   bp2cf now records the boot parameter in the configuration file header. (dm)
   Installing the rpm now updates brltty.conf according to the boot parameter. (dm)
   bp2cf interpreted the boot parameter incorrectly if it contained no commas. (dm)
   Add the -f, -c, -u, -p, and -h options to bp2cf. (dm)
   Move the default install location for the API library from /lib to /usr/lib. (dm)
   Improve brltty-install's progress messages. (dm)
   brltty-install now copies brltty.conf if it exists. (dm)
   Clean up the rpm spec file. (dm)
   Move default install directory for man pages from /man to /usr/share/man. (dm)
   Rename install-brltty to brltty-install. (dm)
   EuroBraille driver enhancements: Yannick Plassiard <plassi_y@epita.fr>
      Document cut&paste in README.
      Initial support for file transfer.
      Several bug fixes.
   Implement brlapi. Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.fr> + Samuel Thibault <Samuel.Thibault@ens-lyon.fr>
   Core changes to support big5.ctb: (dm)
      Change ctb opcode "ignore" to "replace".
   Add table for Chinese big5 character set (big5.ctb). Samuel Yang <mison@bbs.ee.ntu.edu.tw>
   Add Czech text table (text.cz.tbl). Jan Buchal <buchal@brailcom.org>
   Add alert messages preference. (dm)
   VisioBraille driver enhancements. Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.fr>
   IA64 sizeof returns a long and needs a long printf format. (dm)
   Make install no longer installs unneeded tables. (dm)
      (--without-text-table, --without-attributes-table, --disable-contracted-braille)
   Change text-table default from us to nabcc in brltty.conf. (dm)

February 3, 2003:
 - BRLTTY 3.2 released:
   Russian text table (text.ru.tbl) based on koi8-r. Hans Schou <chlor@schou.dk>
   Man page (brltty.1). (dm)
   Fixed Papenmeier easy access bar support. (dm)
   Speech changes: (dm)
      CMD_SAY renamed to CMD_SAY_LINE.
      CMCD_SAYALL renamed to CMD_SAY_BELOW.
      CMD_SAY_ABOVE added.
   Papenmeier driver robustness enhancements. (dm)
   Type char is unsigned on arm, powerpc and s390. (dm)
      HandyTech/braille.c (keys.column, keys.status)
      VideoBraille/vblow.c (BrButtons)
   Added --disable-speech-support. (dm)
   Added --disable-tainted-components. (dm)
   Updated config.guess and config.sub (from automake-1.5). (dm)
   Updated VisioBraille driver. Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.fr>
   Support building in another directory. (dm)
   Fix Linux MIDI device initialization. (dm)
   Add core support for visual displays. (dm)
   Renamed help source from brlttyh*.txt to help*.txt. (dm)
   Added --disable-pm-configfile. (dm)
   Added braille display resize mechanism. (dm)
   Moved brl->buffer allocation from driver to core. (dm,sd)
      (all but: LogText, Vario)
   Braille driver changes. (dm)
      Renamed type brldim to BrailleDisplay.
      Renamed field brl->disp to brl->buffer.
      Renamed routine brl_initialize to brl_open.
      Renamed routine brl_read to brl_readCommand.
      brl_open success now determined by returned boolean.
      Reordered brl_open parameters to put BrailleDisplay first.
      Use brl->helpPage instead of setHelpPageNumber().
      Pass BrailleDisplay to readCommand and writeStatus.
   Support boot parameters (brltty=driver,device,table).
   Allow option operand shortcuts. (dm)
      Relative device paths are anchored at /dev.
      The .tbl table extension is optional.
      The text. text table prefix is optional with no directory.
   Normalize translation table names. (dm)
      french->fr german->de pl-iso02->pl sweden=se1 swedish=se2
   Added LogText driver help file. Hans Schou <chlor@schou.dk>
   Fixed LogText input/output translation for blank, NUL, and 0XFF. Hans Schou <chlor@schou.dk>
   Better Danish translation tables. Hans Schou <chlor@schou.dk>
   RPM now correctly builds by non-root user. Matthew Miller <mattdm@mattdm.org>
   Define more Alva models. (dm)
      Delphi 420, 440 Desktop; Satellite 584 Pro, 544 Traveller
   Move device creation from the make file to the Linux screen driver. (dm)
   Remove the --with-screen-device build option. (dm)
   With devfs, /dev/tty0 is /dev/vc/0. (dm) + Tapio Kelloniemi
   Verify that /dev/vcsa (or equivalent) is character special. (dm)
   Version 1.2 of the EuroBraille driver. Yannick PLASSIARD <plassi_y@epitech.net>
      (code cleanup, new models, LCD display)
   Add cbifs text table. Yannick PLASSIARD <plassi_y@epitech.net>
   Add a settings summary to the end of the ./configure output. (dm,sd)
   Implement a separate settable volume level for each tune device. (dm)
   Log tune device open errors with LOG_DEBUG. (dm,sd)
   In the preferences menu, show each --disable-ed tune device as "unsupported". (dm,sd)
   Split scr_base.h/cc into a separate header and source for each class. (dm)
   Complete the conversion from tones to notes. (dm)
   Rationalize/normalize the tune device names. (dm,sd)
      speaker->beeper dac->pcm adlib->fm
   Enhancements to en-us-g2 contraction table. John Boyer <director@chpi.org>

October 30, 2002:
 - BRLTTY 3.1 released (note move from /sbin to /bin):
   Significantly reduced screen-3.9.11 patch size. Rich Burridge <Rich.Burridge@Sun.COM>
   Use (int) instead of rint() to eliminate the need for DO_C99_MATH
      when building against uClibc. (np) + (dm)
   Horizontal window placement during cursor tracking with sliding window off
      should be relative rather than absolute. (dm)
   Add text translation table for vni (Vietnamese). Thu Trang <phamtrang2002@softhome.net>
   Implement attribute viewing and attribute underlining for contracted braille. (dm)
   Load drivers from background process. (dm)
      (ViaVoice wouldn't run when loaded in foreground but started in backgroun)
   Support 512-character fonts. (dm) + Tapio Kelloniemi
   Fix colour array for CR_DESCCHAR. Tapio Kelloniemi
   Experimental gpm (mouse) support. (dm)
   HandyTech driver improvements. (dm) + Mario Lang <mlang@delysid.org>
      Merge Bookworm's status maintenance into main read loop.
      Paste changed from B4+B5 to UP+DN (now accessible from input mode).
      Control and meta modifiers added to input mode.
      BrailleStar command enhancements.
      BrailleStar USB IDs added into Linux kernel (2.4.20).
   Conversion of Alva and HandyTech drivers from C++ to C. (dm)
   Removal of closed source library for Alva parallel port support. (dm,np)
   Introduce --disable-... options to reduce the size of the executable. (dm)
      preferences-menu learn-mode contracted-braille
      speaker-tunes dac-tunes midi-tunes adlib-tunes
   Yield during busy loops. (dm)
   Help file code made endianism-independent. (dm)
   All core header files made C++ includable. (dm)
   Install programs in /bin instead of in /sbin. (dm)
   Solaris support. (dm) + Rich Burridge <Rich.Burridge@Sun.COM>
   Changes to scrtest syntax. (dm)
   Help option (-h, --help) added to test and utility programs. (dm)
   Vario-HT renamed to VarioHT. (dm)
   Autoconf support and portabilization. (dm)
   Driver loading no longer relies on static data. (dm)
   Use cp rather than mv in mkbd so as to not alter the file table layout. (dm)
   Debian botdisk notes. Boris Daix <Boris.Daix@insa-lyon.fr>
   Changes to support gcc 3. (dm) + Mark Mielke <mark@mielke.cc> + Mario Lang <mlang@delysid.org>
      Use -lsupc++ when linking with gcc3.
      Use the C++ linker if the C linker can't do the job
         (brltty,brltest,scrtest gain a run-time dependency on libstdc++).
      Remove inline attribute from all .cc implementations (scr_base, scr_shm).
      Extern const (brl.h[noBraille], spk.h[noSpeech]) followed by non-const
         declaration (brl_driver, spk_driver) no longer allowed.
   Enhancements to en-us-g2 contraction table. John Boyer <director@chpi.org>

July 13, 2002:
 - BRLTTY 3.0 released:
   New Bootdisk Hacking Mini-HowTo. (sd)
   Updated screen patch (for 3.9.11) provided. Rudolf Weeber <Rudolf.Weeber@gmx.de>
   Implement in-line contracted braille facility. John Boyer <director@chpi.org>
   Develop contraction table for grade 2 US English braille. John Boyer <director@chpi.org>
   Implement generic driver parameters facility. (dm,sd)
   Resolve conflict between .dat and .conf both being called configuration files. (dm)
      Default file extension .dat becomes .prefs.
      CMD_CONFMENU -> CMD_PREFMENU
      CMD_SAVECONF -> CMD_PREFSAVE
      CMD_RESET -> CMD_PREFLOAD
   Normalize short options. (dm)
      -p becomes -S
      -c becomes -p
   Normalize long options. (dm)
      --braille becomes --braille-driver
      --config becomes --preferences-file
      --device becomes --braille-device
      --log becomes --log-level
      --speech becomes --speech-driver
      --speechparm becomes --speech-parameters
      --table becomes --text-table
   normalize brltty.conf directives. (dm)
      braille-configuration becomes preferences-file
      dot-translation becomes text-table
      speech-driverparm becomes speech-parameters
   Add -c (--contraction-table=) option to specify six-dot braille translation. (dm)
   Add -e (--standard-error) option to log to standard error rather than via syslog. (dm,sd)
   Add -f (--configuration-file=) option to specify default parameters file (brltty.conf). (dm)
   Recognize level names (and abbreviations thereof) for -l (--log-level=) option. (dm)
      (emergency, alert, critical, error, warning, notice, information, debug)
   Add -n (--no-daemon) option to make debugging easier and to permit invocation from inittab. (dm,sd)
   Add -B (--braille-parameters=) option, and the braille-parameters brltty.conf directive. (dm)
   Add -E (--environment-variables) option to allow boot parameters. (dm,sd)
   Implement user-settable attributes translation table. (dm)
      Introduce short option -a.
      Introduce long option --attributes-table=.
      Introduce brltty.conf directive attributes-table.
   Add -M (--message-delay=) option. (dm)
   Add -N (--no-speech) option. (dm)
   Add -P (--pid-file=) option. (dm)
   Add -R (--refresh-interval=) option. (dm)
   Add -X (--screen-parameters=) option. (dm)
   Add the acm= (default, iso01, vt100, cp437, user) screen parameter. (dm)
   Implement BrailleNote driver. (dm) with help from Mike Pedersen <mpedersen@mindspring.com>
   Implement HandyTech driver. Andreas Gross <andi@andi-bika.de>
   Add Bookworm support. (dm)
   Implement LogText driver. (dm) with help from Hans Schou <chlor@schou.dk>
   Implement Voyager driver. (sd) with help from Stephane Dalton <sdalton@videotron.ca>
   BrailleLite driver enhancements. (sd)
      Auto-detect 18 verses 40.
      Add DETECT_FOREVER option.
      Add USE_TEXTTRANS option.
      Add bindings for search backward/forward.
      Add bindings for move to previous/next paragraph.
      Add bindings for switch to previous/next virtual terminal.
      Change binding for restart driver to a safer combination.
      Add shortcut for one-digit repeat count.
      Fix bug causing internal cursor to go off display during g-chord with advance bar left.
      Fix k-chord to toggle off keyboard emulation.
      Fix day-one startup segfault bug.
      Add baudrate parameter.
      Add kbemu parameter.
      Portability fixes.
   Papenmeier driver enhancements:
      Remove special-case code for routing keys. (ah)
      Recognize key "routing" in configuration file. (ah)
      Allow routing keys to be bound to modifier keys. (ah)
      Recognize toggle modifiers "on" and "off" in configuration file. (ah)
      Add on/off capability to existing toggle key definitions. (ah)
      Allow command to be bound to just modifier keys. (ah)
      Implement input mode and special key support. (ah,dm)
      Remove yacc noise from make. (dm,ah)
      Clean up log messages. (dm)
      Log display type even if unknown. (dm)
      For displays with an easy access bar: (dm)
         Change left2 from HOME to BACK.
      For displays with 9 front keys: (dm)
         Change 1+3 from TOP to TOP_LEFT.
         Change 1+7 from BOT to BOT_LEFT.
         Move cut begin/end from 2/8 to 1/9.
         Add paste as 1+9 (for displays with less than 13 status cells).
         Move half window left/right from 1+5/9+5 to 2/8.
         Switch lnup/lndn to 3/7 and winup/windn to 4/6.
         Add more horizontal motion commands.
      For displays with 13 front keys: (dm)
         Define keys 1-4 and 10-13 as modifiers.
         Define 1+13 as paste.
         Add many more commands.
      For displays with 22 status keys: (dm)
         Fix key assignments: 5-8 -> 6-9.
         Define 4 as back.
         Move info from 8 to 5.
         Define 8 as input mode toggle.
         Display current virtual screen number in 11.
      Define status key commands for displays with 4 status cells. (dm)
      Rename environment variable BRLTTY_CONF to BRLTTY_PM_CONF. (dm)
      Key releases no longer interrupt message waits. (dm)
      Remove conditional compiling for debugging. (dm)
      Add driver parameters: configfile, debugreads, debugwrites, debugkeys. (dm)
      Wait indefinitely for braille display to be connected. (dm)
   TSI driver enhancements. (sd)
      Add bindings for go to beginning/end of current line.
   Clean up Alva parallel port build. (dm) + Andreas Gross <andi@andi-bika.de>
   Version 1.0 of the EuroBraille driver. Yannick Plassiard <Yannick.Plassiard@free.fr>
   Fix MiniBraille delay after write. (dm)
   Vario driver can now be statically linked. (dm)
   Add cut-and-paste for VideoBraille. Christian Comaschi <christian_comaschi@libero.it>
   Add identification output to VisioBraille driver. (dm)
   Add support for 5.0 PROM family to VisioBraille driver. Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.fr>
   Add program, uid, and gid parameters to ExternalSpeech driver. (sd)
   Stop GenericSay from reannouncing BRLTTY version during cursor routing. (dm)
   Add command parameter to GenericSay driver. (dm)
   Implement ViaVoice driver. (dm)
   List translation tables in make file. (dm)
   Add cross-compile support to make file. (sd,dm)
   Add INSTALL_ROOT support to make file. (dm)
   Add Danish text translation table. Hans Schou <chlor@schou.dk>
   Add -c (--code-page=) option to tbl2txt. (dm)
      Initial code and tables supplied by Hans Schou <chlor@schou.dk>.
   Clean up screen device creation in make file. (dm)
   Make preferences menu more user-friendly. (dm,sd)
      Choices are words rather than numbers.
      Only present relevant items.
   Change left/right arrow in prefs menu from prev/next item to prev/next choice. (dm)
   Add support for tunes via sound card (/dev/dsp). (dm,np)
   Add support for tunes via MIDI (/dev/sequencer). (dm)
   Add support for tunes via AdLib/OPL3/SB-FM. (dm)
   Sliding window enhancements. (sd)
   Replace skip blank end-of-lines with configurable skip blank windows mode. (dm)
   Implement horizontal window scroll overlap. (dm)
      Full window right no longer does partial move to pick up end of line.
      Single character right lets left end of window move to last column of line.
      Wrap up at left of line goes to multiple of window width at right of previous line.
   Display message when sound is off for critical operations like freeze/unfreeze. (sd)
   Allow braille display to stick out to the right of the screen. (sd)
   Add commands to switch to the next and previous virtual terminals. (sd)
   Implement CMD_BACK (to go back after a cursor tracking motion). (dm)
      Add to Alva driver. (np)
      Add to BrailleLite driver. (sd)
      Add to BrailleNote driver. (dm)
      Add to Papenmeier driver. (dm)
      Add to TSI driver. (sd)
   Implement CR_DESCCHAR (describe character at routing key). (dm)
   Implement CR_SETLEFT (left of window to routing key). (dm)
   Rename CR_ROUTEOFFSET to CR_ROUTE. (dm)
   Rename CR_BEGBLKOFFSET to CR_CUTBEGIN. (dm)
   Rename CR_ENDBLKOFFSET to CR_CUTRECT. (dm)
   Implement CR_CUTLINE (lineear cut to character). (dm)
   Implement CR_CUTAPPEND (start cut area without clearing cut buffer). (dm)
   Implement CR_SETMARK (remember window position). (dm)
   Implement CR_GOTOMARK (return to remembered window position). (dm)
   Implement CMD_{PR,NX}PROMPT (find previous/next command prompt). (dm)
   Implement CMD_LEARN (command learn mode). (dm)
   Remove special commands for displays without routing keys: (dm,sd)
      Use CR_ROUTE instead of CMD_CSRJMP.
      Use CR_CUTBEGIN instead of CMD_CUT_BEG.
      Use CR_CUTRECT instead of CMD_CUT_END.
   Add reverse text translation table for input from braille display. (dm,sd)
   Get font data from kernel rather than guess at it by probing. (sd)
   Handle font change and screen size change. (sd)
   Make cursor routing work when keyboard is in raw mode. (dm)
   Search list of known screen device names (/dev/vcsa0 /dev/vcsa /dev/vcc/a)
      rather than just check for /dev/vcsa0. (dm)
   Move key insertion, cursor routing, and virtual terminal switching into screen class. (dm)
   Add cursor routing, cursor motion, and page switching to help screen. (dm)
   Allow a screen driver to selectively override commands. (dm)
   Fix holes in signal blocking during cursor routing. (dm)
   Don't use LOG_CONS option of syslog uhtil in the background. (dm)
   Convert CMD_ from defines to enum. (dm)
      CombiBraille: tables.h converted to cmdtrans.h, argtrans removed.
   Convert CMD_KEY_... commands to VAL_PASSKEY+VPK_... mechanism. (dm)
      BrailleLite cmdtrans[] and blkey.cmd changed from unsigned char to int.
   Rename VAL_PASSTHRU to VAL_PASSCHAR. (dm)
   Rename VAL_BRLKEY to VAL_PASSDOTS. (dm)
   Add the following flags for VAL_PASSCHAR and VAL_PASSDOTS: (dm)
      VPC_CONTROL, VPC_META, VPC_SHIFT, VPC_UPPER
   Inform readbrl of the current command context. (dm)
   Remove TBL_CMD and TBL_ARG. (dm)
   Log command line syntax errors to syslog. (dm)
   Make message delay by default; add MSG_NODELAY flag. (sd)
   Fix problems with the skipping of blank windows and ends of liens. (sd)
   Change directory to right place if PREFIX is set. (dm)
   Disable speech tracking when CMD_SAY is used. (np)
   Merge LogAndStderr into LohPrint. (dm)
   Cleanly wrap long help (-h) output lines. (dm)
   Increase default message delay from 2 to 4 seconds. (dm)
   Message delay is now interruptable by pressing key on braille display. (dm)
   Startup and exiting messages now fit within 18 characters. (dm,sd)
   Add message to alert user to presence of startup errors. (dm)
   Warn if a configuration file directive is specified more than once. (dm)
   Add more memory allocation and I/O error checks. (dm)
   Control-C now usable during startup and driver restart. (dm,sd)
   Audit all braille and speech drivers. (dm)
      Remove printing via stdio.
      Ensure that first line of identification output uses LOG_NOTICE.
      Ensure that subsequent lines of identification output use LOG_INFO.
      Remove new-lines from logged messages.
      Ensure that all output to braille display is drained before closing. 
   Updated manual. (dm) with help from Cheryl Homiak <chomiak@shellworld.net>

June 26, 2001:
 - BRLTTY 2.98 released:
 - fixes to the TSI driver for Navigator 80, by Stéphane Doyon
 - added driver for MiniBraille displays, by David Sauer <sauer@brailcom.cz>
 - added driver for Videobraille displays, by Christian Comaschi
   <christian_comaschi@libero.it>
 - added driver for VisioBraille displays, by Sébastien Hinderer
   <jrf3@wanadoo.fr>
 - autodetection of BrailleLite 18 vs 40, by Willi Lutzenberger 
   <willutz@gmx.net>
 - support for Alva AS570 from Willi Lutzenberger <willutz@gmx.net>

March 2001:
 - version 2.97 (beta):
 - Code cleanup i.e. the big mess that brltty.c was is now broken into
   multiple files.
 - Command and parameter to skip blank windows.
 - Command to switch virtual terminal.
 - Command to find the next/prev line indented not more than a certain point.
 - Command to find next/prev line following blank lines (next/prev paragraph).
 - Command to search for some text on the screen. Text is taken from
   cut_buffer.
 - Fixes to ExternalSpeech driver. Can now pass uid through speech driver
   parameter.

26 Nov 2000:
 - version 2.96 (beta):
 - Vario support updates from Mario Lang <mlang@home.delysid.org>
 - ALVA Satellite 544 support from Kazunori MINATANI <99112004@gakushuin.ac.jp>
 - Various pieces from Stéphane Doyon, most notably:
   - cursor routing race fix that showed as a BRLTTY freeze with
     latest 2.4.0-test* Linux kernels;
   - BRLTTY now doesn't exit on startup when minor i.e. non-fatal
     errors occur;
   - loglevel lowered on less important messages to reduce noise;
   - fixes to the module for external speech program support;
   - TSI driver updates
   - multiple new command bindings for speech;
   - speech tracking;
   - various cleanup.

16 Sep 2000:
 - version 2.95 (beta):
 - EcoBraille driver update from Oscar Fernandez <ofa@once.es>
 - Attribute tracking tuning by Dave Mielke <dave@mielke.cc>
 - EuroBraille driver update from Yannick Plassiard <Yannick.Plassiard@free.fr>
 - Added ExternalSpeech speech driver: for sending speech to an external
   program with our custom protocol. Intended for a bit more sophisticated
   speech features: speech tracking, and passing video attributes. 
   First intended for use with IBM's Viavoice TTS AKA Viavoice OutLoud.
   The external speech program will be released separately.
 - Added support for speech tracking (for synths that provide word indexing).
 - Added option to skip directly to next/prev line on FWINRT/LT when the
   rest of the line is blank.
 - MDV braille driver update.

23 May 2000:
 - version 2.90 (beta):
 - Tieman MultiBraille driver, contributed by Wolfgang Astleitner
   <wolfgang.astleitner@liwest.at>
 - Put startbrl() back after daemonized because some drivers expect to have
   all life time to probe for a terminal.  Created inithlpscr() instead.
 - Replaced 'g++' by 'gcc' in the Makefile eliminating dependencies 
   with libstdc++

24 April 2000:
 - version 2.51 (beta):
 - added new driver for all Papenmeier terminals (AH)
    - autodetection
    - configuration via config file

 - changed the startup order (AH) - new order:
     loadconfig()
     startbrl()     -- pm: autodetection, changes name of help file
     intscr(helpfile)

08 April 2000:
  - Released BRLTTY 2.50 (beta)
  - Added Installation Bootdisk Hacking Mini-HowTo (SD, NP)
  - Fixed BrailleLite speech loading (added RTLD_GLOBAL to dlopen() flags) (NP)
  - TSI driver updates (SD)
  - BrailleLite advance bar binding improvements from Pete De Vasto 
    <pdevasto@incyte.com>
  - Apply the -q option to all log messages. Never print debug messages.
      If -q is specified then don't print information messages and
      notices. (DM)
  - Change the default of the -l option from 4 (LOG_WARNING) to 5 (LOG_NOTICE). (DM)
  - Standardized the way in which drivers identify themselves:
      LOG_NOTICE for configuration information, LOG_INFO for copyright.
      First line no indent, subsequent lines indented 3 spaces. (DM)
  - Added Papenmeier functions: CMD_SAY to status key 5, CMD_MUTE to
      status key 4. (DM)
  - Papenmeier status cells did not say "Info " when in info mode. Fixed. (DM)
  - The default name of the configuration save/restore file is now
      driver-dependent. Renamed from "/etc/brltty/brlttyconf.dat" to
      "/etc/brltty/brltty-XX.dat", where "XX" is the two-letter
      identifier of the braille driver. To preserve current settings
      when upgrading, preserve and rename old file. (DM)
  - Use getopt_long, if the installation has it, to give every option a
      long (--keyword or --keyword=value) name. (DM)
  - Add support for "/etc/brltty.conf" (with sample file in DOCS
      subdirectory). (DM)
  - Papenmeier driver now uses safe read and write routines. (DM)
  - Safe read and write routines now available for drivers so that
      signals won't interfere with their I/O operations. (DM)
  - Full list of speech drivers now displayed if bad driver specified. (DM)
  - Add more options to the GenericSay AccentSA helper script. (DM)
  - Cursor routing has been broken -- fixed  (NP)
  - Better fix for cursor routing which happened to re-open and redetect 
    screen font, and incidentally writing to stderr.  Fixed  (NP)
  - Fixed compilation warnings  (NP)

01 April 2000:
  - Released BRLTTY 2.40 (beta)
  - Work from Dave Mielke <dave@mielke.cc>:
    - Added helper script for Accent/SA to GenericSay.
    - GenericSay now closes pipe to signal mute function.
    - GenericSay command changed to /usr/local/bin/say from /usr/bin/say.
    - Generic-say renamed to GenericSay.
    - Speech driver are dynamically loadable.
    - BRLTTY now has the ability to determine the character set used by 
      the screen fonts.
  - Credits owner for the previous item corrected (they actually should go to
    August Hörandl).
  - All possible dynamic loadable braille drivers are listed if there is no
    valid selection provided.  (NP)

28 March 2000:
  - Released BRLTTY 2.30 (beta)
  - Braille terminal drivers are now dynamically loadable.  This is a big
    change. Credits go to:
      August Hörandl <august.hoerandl@gmx.at>
        Original work
      Dave Mielke <dave@mielke.cc>
        Resynching with current BRLTTY version, cleanup, etc.

01 January 2000:
  - Released BRLTTY 2.21 (beta)

December 1999:
  - Contribution of a driver for BAUM Vario (emulation mode 2 / HT-Protocol)
    + a Swedish braille table from Per Lejontand <per@acc.umu.se> (with
    assistance from Niklas Edmundsson <nikke@acc.umu.se>). BRLTTY beta
    version 2.20 will be circulated so that this driver can be tested.

October 1999:
  - TSI driver: Workaround for quirks of TSI emulators such as Vario.

June 1999:
  - Completed first stable beta version of MDV driver.

21 June 1999:
  - Released BRLTTY 2.11 (beta)
  - Added support for BrailleLite 40 (NP).
  - Added autodetection of some extra CombiBraille models.  Thanks to
    William Blokland <William_Blokland@tieman.nl>.
  - Added Alva Delphi 80 support.  Thanks to ??? <cstrobel@crosslink.net>.

23 March 1999:
  - BRLTTY 2.1 released.
  - Completed updates to the manual (english version only) for 2.1.
  - missing errno.h for some drivers when compiling on my RedHat (glibc),
    I added the include to misc.h.
  - Work-around for bug in Linux kernel 2.0.35: beeps wouldn't stop...
  - writebrl() and closebrl() now receive a pointer on the brldim structure,
    like inibrl().
  - Removed syslog warning when the default config file doesn't exist.
  - Added EcoBraille support.  Thanks to Oscar Fernandez <ofa@once.es>.
  - Minor update to TSI driver (2.1).
  - Added some bindings for switching settings in config menu. Quickly
    fixed the manual. Regenerated the german manual using latin-1 source
    though not with all suggested options.
  - Some tweaks to the BrailleLite driver (NP)
  - Rework of the config menu so small braille displays can use it.
  - Alva Delphi support added (thanks to Terry Barnaby 
    <terry@beam.demon.co.uk>).
    Now Alva_ABT3 is called Alva.
  - Alva parallel port support added using J. lemmens 
    <jlemmens@inter.nl.net> 's library.

22 December 1998:
  - BrailleLite 18 and Festival support from Nikhil added.
    Also eliminated the need for a fixed menu item length
    and it's now possible to use a display smaller than any menu item i.e.
    the BrailleLite 18.
  - Contribution of Norwegian braille tables and ibm850toiso from 
    Helge Havnegjerde <helge.havnegjerde@c2i.net>

22 July 1998: BRLTTY 2.0 released!
  - Another fix to the cursor routing algorithm
  - Web pages online at http://www.cam.org/~nico/brltty
  - Fixes to compile with egcs and glibc (RH5.1)
  - Fixed Combibraille speech support (broken when BRLTTY moved to 
    ISO-8859-1 base charset while the Combibraille expects an IBM CP437
    charset).
  - Updated manual, FAQ and TODO.
  - Fixes (hopefully) to the cursor routing algorithm in csrjmp_sub.
  - Added syslog support functions, and messages in brltty.c.
  - Added CMD_RESTARTBRL command to reinitialize braille driver when
    the braille display is turned off.
  -  Additions to TSI driver: support for PB65/80, support for all PB models
     at 19200baud, detects when display is turned off and reinitializes itself.
  -  Papenmeier driver update.
  -  EuroBraille driver fixes.
  - Added CMD_CSRJMP_VERT command which routes the cursor to the current line
    but does not try to change the horizontal position. Hopefully will be
    useful in lynx!
  -  Added attribute underlining/blinking functions (experimental).
  -  Incorporated Papenmeier braille terminal driver + German manual.
     Thanks to August Hörandl <hoerandl@elina.htlw1.ac.at> and his team!
  -  Alva driver fixes.


07 April 1998: BRLTTY 1.9.0 pre-release.
  -  Added absolute toggles (ON/OFF) flags to function defines.
  -  Moved braille tables and tools to the BrailleTables directory.
  -  Added Eurobraille terminal series driver.
  -  Now BRLTTY knows which virtual console is active and preserves separate
     information structures for each of them.  This means preserving 
     current window position, tracking and display modes as you switch
     from a virtual console to another. 
  -  Nicolas Pitre now assumes maintenance of BRLTTY since Nikhil Nair
     seems to be unreachable for quite a long time.
  -  Modularized screen drivers, added experimental screen driver to get
     screen image from the "screen" program.  A patch for "screen" is provided
     in the Patches directory.
  -  Made all different methods of handling status cells available
     within the configuration menu.  The default is determined by
     the compiled in braille driver.
  -  Incorporated patch from Joerg Korinek <korinek@ira.uka.de> which lets
     the main BRLTTY process continue while cursor routing is in progress.
     Thanks!
  -  Added some new functions to scr.cc, which add a new `thread' of
     screen reading.  This is used by csrjmp_sub(), to avoid race conditions.
     [The problem was that a forked subprocess shares filedescriptors with
     the parent, and `clone (0, SIGCHLD | COPYVM | COPYFD)' (as documented
     in clone(2)) wouldn't compile.]
  -  CURSOR ROUTING NOW APPEARS TO BE STABLE!!!
  -  BRLTTY placed under CVS revision control - Id headers added to many
     files.
  -  Cursor routing timeout made an idle timeout of 2 seconds: routing
     continues until the cursor is idle for this length of time.
  -  Added CMD_SKPIDLNS.
  -  Speech support modularised.  Added speech.h, as well as SPK_TARGET in
     the Makefile and corresponding directories.
  -  Added very simple speech interface and few speech drivers.
  -  Status cells standardised: two types (Alva/Tieman) or none, switch in
     configuration menu.  Hence another new config file format :-(.
  -  A few bugfixes.
  -  Some job control finetuning in csrjmp() and csrjmp_sub() - now use
     SIGUSR1 to kill child process before another child is forked; child
     blocks this signal for most of the time.
  -  Added support for (optional) Makefiles in driver subdirectories.


17 September 1996: BRLTTY 1.0.2 released.
  -  Incorporated skipping of identical lines.  Adapted to make a line
     containing the cursor different to any other.
  -  Config file format updated, so old config files won't work any more.
  -  Some tidying up of the archive and of the documentation.


13 September 1996: BRLTTY 1.0.1 released.
  -  Speech support added for CombiBraille.
  -  Documentation brought up to date.


3 September 1996: prerelease of BRLTTY 1.0.1.
  -  Screen reading library rewritten from scratch, in C++ (but without
     using any class libraries, so no extra shared libraries are needed).
     In particular, the dependence on the Linux vcsa format is gone: there
     is a new help file format which is far more compact than the old one
     (txt2hlp replaces txt2scrn, brlttydev.hlp replaces brlttyhelp.scr),
     and freeze mode works properly, by using a dynamically allocated
     memory buffer instead of the old /tmp/vcsa.frz hack.
  -  BRLTTY can now survive as a stand-alone executable, with absolutely no
     data files - even if /etc/brltty/ is not found.  This is done by
     compiling in the default text translation table (now selected in the
     Makefile) and the attribute translation table.  The compilation is done
     by using the new filter comptable to generate text.auto.h and
     attrib.auto.h.  A text translation table is now only loaded if the
     -t option is specified.
  -  -q|--quiet now surpresses the start-up message on the Braille display.

  (Documentation still to be updated ...)
     

28 July 1996: BRLTTY 1.0 released.
