Braille Lite Driver for BRLTTY

This is a beta driver for the Blazie Engineering Braille Lite.
written by Nikhil Nair,
with additions from Nicolas Pitre <nico@fluxnic.net>
and Pete De Vasto,
further modifications by Stéphane Doyon <s.doyon@videotron.ca>,
    starting August 2001.

Both BrailleLite 18 and 40 should work, and there is now code that should
auto-detect the display type.

Edit braille.h to select baudrate and some features.

On the BrailleLite, you should type 345-chord and p-chord to enter the 
"speech box mode" required by BRLTTY.  You should type the same sequence 
to exit that mode whenever you wish to return to the BrailleLite internal
functions.

Be sure your BrailleLite's serial port baudrate and the value configured
in the braille.h file are the same.

The Braille Lite 40 has two advance bars on it.  Brltty has been set up
so that moving the display left or right works the same as it does
when the unit is in its internal notetaker mode.

See help.src for a description of the key bindings.

History:
Stéphane Doyon, April 2002, version 0.5.10:
-Act as if kbemu was off in any context other than CMDS_SCREEN (in
    particular typing a key won't throw you out of preferences menu
    anymore).
Stéphane Doyon, March 2002, version 0.5.9:
-Added "kbemu" driver parameter, so can start with kbemu already active.
Stéphane Doyon, February 2002, version 0.5.8:
-Added CMD_LEARN, CMD_NXPROMPT/CMD_PRPROMPT and CMD_SIXDOTS. Several
    VAL_PASSKEY effects were done through special cases: moved them
    back into cmdtrans. Identified special/reserved and free bindings.
    Cleaned out some #if 0s.
Stéphane Doyon, January 2002, version 0.5.7:
-Added bindings for CR_CUTAPPEND and CR_CUTLINE. Replaced CMD_CUT_BEG,
    CMD_CUT_END and CMD_CSRJMP by CR_ equivalents. Added CR_SETMARK and
    CR_GOTOMARK. These are a bit nasty: they reuse existing command dot
    patterns from within o-chord. Well practically all the patterns are
    taken!
Stéphane Doyon, January 2002, version 0.5.6:
-Fixed dot combinations with dots 7-8 on BL40 (for typing caps and ctrl).
Stéphane Doyon, December 2001, version 0.5.5:
-META is back. Now use VPC modifiers on VALPASSCHAR when TEXTTRANS
    not defined. Fixed uppercase that always locked active. Sub-commands
    of 35-chord no longer need to be chorded.
Stéphane Doyon, November 2001, version 0.5.4:
-Now using new generic VAL_PASS* mechanism for typing in keys, rather
    than having the driver itself insert stuff into the console. We
    no longer have the META function though, but we have ESCAPE.
Stéphane Doyon and Dave Mielke, September 2001, version 0.5.3:
-closebrl: don't clear display, use TCSADRAIN.
-Slight API and name changes for BRLTTY 3.0. Commands can no longer be
    assumed to be chars, changed type of cmdtrans.
-Fixed binding for switching virtual terminal with o-chord... it was wrong.
Stéphane Doyon, September 2001, version 0.5.2:
-Added baudrate parameter. Fixed up initialization, in particular a bug
    with use of qbase buffer uninitialized.
Stéphane Doyon, September 2001, version 0.5.1:
-Added bindings for CMD_BACK and CR_MSGATTRIB.
Stéphane Doyon, August 2001
-Added a version number, as many people have been playing with this
   driver. Arbitrarily started at 0.5.
-Made the help more compact, and remove the duplication of the key
   bindings list from README.
-Use separate help files for BL18 and BL40, automatically generated from
   brltty_genhelp.txt.
-Option USE_TEXTTRANS in braille.h, allows mapping of braille keyboard
   input to characters to be performed using the output text translation
   table (use definable) instead of the hardcoded US table. Useful if you
   don't use the US table or if you want to enter characters numbered
   >127 (such as accents for me). Obviously your output dot translation
   table must not have duplicate representations for characters you want
   to type. If that option is selected, dot 8 no longer generates a META
   key.
-Added DOT8SHIFT for use with USE_TEXTTRANS: 26-chord means the next
   input char should be looked up with dot8 added.
-Added bindings for search forward/backward (NXSEARCH), move by
   paragraphs (NXBLNKLN), switch to next/previous virtual terminal
   (SWITCHVT_NEXT).
-Added a binding (246) for escape. Sometimes you want escape alone, or
   followed by delete... and the META key doesn't do it as it expects a
   character to combine the META to.
-Made the "restart driver" command dangerous (required chord), as it
   tended to kill the driver for me if I continued typing while it
   resets...
-Modified repeat count so that you can give the command right away, no
   need to do e-chord. You can do a one-digit repeat of a movement key in
   three strokes now.
-Abused the repeat count function to allow switching directly to a VT
   given it's number: o-chord then VT number then s-chord or :-chord.
   NB: Changed to v-chord / #-chord.
-Fixed a very nice little bug that caused the internal cursor to go off
   the display during g-chord with advance bar left.
-Fixed a statement that caused a portability problem.
-Fixed k-chord which activated but did not toggle off keyboard emulation.
-Renamed brltty_genhelp.txt to help.src and brlttyhelp?.txt to help?.txt.

Anecdotes on weird bugs:

The code:
    for (i = 0; i < blitesz; rawdata[i++] = blitetrans[rawdata[i]]);
can, in some (not yet quite clear) circumstances and under other
processor architectures, not have the desired effect: all the text
appears shifted by one cell. Supposedly the behavior for such a construct
is undefined with gcc. So we put the i++ outside the assignment
statement.

The code:
   int_cursor = MAX (int_cursor - blitesz / 4, 1);
did not have the intended effect. int_cursor was signed and blitesz
unsigned. The compiler somehow decided to evaluate the comparison as if
the first argument was unsigned, which caused the MAX strategy to fail
and the cursor to go off the display. Declaring blitesz as signed fixed
it.
