Dear BrailleNote users, HumanWare Staff and others,
For BN listers: I'm copying HW Tech Support on this post regarding the issue described in the subject line.

As one of the BrailleNote user pointed out and since it was discussed on forums and confirmed by at least two others, I feel it'd be safe to bring some testing results and hyotheses to HW staff's table in the hopes that the "exception error" pertaining to Unicode Tables would be resolved soon.

As you may know, Unicode characters allows one to type a wide range of symbols using braille characters and display them on a braille display (on models with braille display output). For instance, this facility allows math and science symbols such as ones used in advanced math to be manipulated on the BrailleNote, characters written in other languages such as Spanish to be typed on the BN and so forth.

One of the features of KeySoft is being able to assign custom keyboard bindings or macros (on a QT) for a Unicode character, as well as display this character using the braille dot combination of users' choosing. For example, in American version of Spanish braille, one would assign DOTS 2-3-4-6-8 to be assigned to e acute and display this character on the braille displayusing this dot combination pattern. On a braille keyboard, this procedure allows up to 256 different combinations (including default braille character bindings and display pattern) to be assigned to different characters (usually about 128 or more different combinations when using eight dot mode).

ON the BrailleNote Apex, one can assign custom key combinations to any Unicode character. However, with recent KeySoft releases for the Apex, when attempting to assign custom braille dot combinations for the character to be displayed on the braille display, KeySoft generates the following message:
"exception: command: 404 at 3595.  Access violation reading 0."
This message appears when a user has some custom key bindings and braille display patterns for some characters already and wishes to add some more after exiting Unicode Tables list (by which time KeySoft creates "custom USA" or other custom computer braille tables).

In regards to solutions to this issue that was discussed on the forums, one proposal was to use mPower's Unicode Tables file and any existing custom computer braille files and copying them over to Apex. Another solution was to delete Unicode Tables and custom computer braille files from the Apex and restoring default files from ROM image (via a command from Support Information Mode). Yet another solution was to change the computer braille table to something other than the custom braille table, which meant the user has to reassign key bindings and display patterns from scratch. A fourth solution was to manually edit the custom computer braille file (stored in Dictionaries folder on Flash Disk) from within word processor itself by adding display patterns to new characters at the end of the file. Of these four approaches, the third and fourth solution would be the best route depending on whether the user wishes to keep the already assigned key combinations and/or braille display dot patterns or not.

For the root cause of this issue, I hypothesize that it has something to do with file reads and information stored on the custom computer braille table itself. This is supported by the following facts (mostly for programmers): * We know that in order to change a KeySoft setting (including Unicode character key combination/ddplay pattern assignment), we need to read and modify system files stored on Flash Disk (specifically, files stored on Dictionaries folder). * A typical file ends with a NULL (or end of file) marker, possible because of the fact that, in computing, a string is a NULL-TERMINATED array of characters and files store characters to be interpreted by programs. * When a computer wishes to use a resource such as a file, it'll query its address, and addresses would store information that the computer (BrailleNote) is looking for. * When managing addresses and data on a computer (including a BrailleNote), one must be careful when: the address that the Apex wishes to use does not contain vital data that other programs use, and that attempting to read (called "dereferencing") a NULL data would result in segmentation fault and exception message to be displayed. * When a file (stream) is read, the program that reads a certain file would work only with things already present in the file. Thus, when trying to find an information that's not there or goes to end of file, it'll naturally give NULL (or illegal) character as its output, giving exception message. Based on these facts, we can deduce (and was proven by opening the custom computer braille table from KeyWord and examining its structure) that the following might be happening: 1. When the user is creating first set of key bindings and display patterns: A. KeySoft uses default computer braille table for the language (UK, Usa, etc.). B. Because this default table (Unicode Tables file) would house key combinations and "state" of key assignment for ALL characters within the table, it'll be able to report that such and such character has no keyboard bindings and is displayed as nothing. C. The user adds some key bindings and display patterns. Then the custom braille table will be created to house new entries. 2. In case user exits the Unicode Tables list without adding any entries at all (for using it the first time in which default entries will be enforced) or after assigning first set of characters (by this time the custom table will be populated with new entries), the user decides to exit. At this point, the custom file would be saved. 3. When the user reenters unicode tables (by invoking unicode entry command) to assign more characters: A. This time, since KeySoft would be using customized computer braille set, it'll open the cuminm table. B. When the user attempts to assign key bindings (for entering characters), it works as expected because the key combination is already there within the custom table itself. C. Suppose that the user wishes to add a display pattern to a new character. This time, the exception message will be displayed simply because KeySoft couldn't find anything at the end of the file - found just NULL character (empty string).

Also, it is crucial to investigate the structure of the custom braille table: * The table is divided into three parts: key bindings for lowercase table, key bindings for uppercase and display patterns. * When you read the table, you'll notice that there are braille combinations which only appears on the keymap (first two categories) but not on the display sestion. * The file ends with a blank line. This is important since this would be the root cause of the exception message.

Therefore, I would like to present two solutions:
* Duplicating key bindings sections to the display sections so that all possible eight dot display combinations are covered. This would simplify the readability of the file and allows easy manual assignment of display patterns provided that the user can open the braille table and obtain Unicode character number. However, it has a small cost of the table taking more space on the disk, but with large storage area, I believe this is a minor thing. * Adding a "place marker" text at the end of the table file so that KeySoft would know that there is a room availible for future dot pattern assignments. However, we need to consider file text manipulations, but current test results indicate that KeySoft is good at managing entries located between entries. Also, it could add to some unnecessary disk writes and reads, but with smarter user entry checking (such as a possible error message when a user attempts to unassign a display combination when the character is displayed as nothing), this problem could be avoided.

Of these two possible solutions, I think the second option would work well from programming perspective. Although first option would be useful to cover all cases with advantage in less information to manipulate, the second solution allows dynamic resizing of custom tables and ensures that there would be at least one more assignment of braille patterns for new characters and would eliminate the exception message (for the time being), as it is shown that the exception message goes away if a new table entry is written at the end of the file (for one character assignment only).

Thanks, and I hope this info was useful to BrailleNote user community and to HW staff.
Sincerely,
Joseph Lee
University of California, Riverside

___
Replies to this message will go directly to the sender.
If your reply would be useful to the list, please send a
copy to the list as well.

To leave the BrailleNote list, send a blank message to
[email protected]
To view the list archives or change your preferences, visit
http://list.humanware.com/mailman/listinfo/braillenote

Reply via email to