[BRLTTY] Inserting control characters under screen driver

Dave Mielke dave at mielke.cc
Sun Nov 1 21:29:01 EST 2015


Please try the attached patch (screen-1.patch) to see if it resolves this 
problem. It's a modification to brltty's screen screen driver.

If it doesn't work then I'd appreciate a debug log with:

   -L/path/to/logfile
   -ldebug,inpkts

-- 
Dave Mielke           | 2213 Fox Crescent | The Bible is the very Word of God.
Phone: 1-613-726-0014 | Ottawa, Ontario   | http://Mielke.cc/bible/
EMail: Dave at Mielke.cc | Canada  K2A 1H7   | http://FamilyRadio.org/
-------------- next part --------------
diff --git a/Drivers/Screen/Screen/screen.c b/Drivers/Screen/Screen/screen.c
index 056ac9d..b744357 100644
--- a/Drivers/Screen/Screen/screen.c
+++ b/Drivers/Screen/Screen/screen.c
@@ -41,6 +41,7 @@ static int shmFileDescriptor = -1;
 #include "log.h"
 #include "hostcmd.h"
 #include "charset.h"
+#include "ascii.h"
 
 #include "scr_driver.h"
 #include "screen.h"
@@ -206,7 +207,7 @@ static int
 insertKey_ScreenScreen (ScreenKey key) {
   const unsigned char flags = getAuxiliaryData()[1];
   wchar_t character = key & SCR_KEY_CHAR_MASK;
-  char buffer[3];
+  char buffer[0X10];
   char *sequence;
 
   logMessage(LOG_DEBUG, "insert key: %04X", key);
@@ -264,12 +265,15 @@ insertKey_ScreenScreen (ScreenKey key) {
 
     if (byte == EOF) {
       logMessage(LOG_WARNING, "character not supported in local character set: 0X%04X", key);
+      return 0;
     }
 
-    sequence = buffer + sizeof(buffer);
-    *--sequence = 0;
-    *--sequence = byte;
-    if (key & SCR_KEY_ALT_LEFT) *--sequence = 0X1B;
+    STR_BEGIN(buffer, sizeof(buffer));
+    if (key & SCR_KEY_ALT_LEFT) STR_PRINTF("%c", ESC);
+    STR_PRINTF("\\%03o", byte);
+    STR_END;
+
+    sequence = buffer;
   }
 
   return doScreenCommand("stuff", sequence, NULL);


More information about the BRLTTY mailing list