[BRLTTY] Inserting control characters under screen driver

Dave Mielke dave at mielke.cc
Mon Nov 2 14:17:55 EST 2015


[quoted lines by Cheryl Homiak on 2015/11/02 at 12:25 -0600]

>This patch patched but didn't solve the problem.

Here's another patch (screen-2.patch) with more logging. Please give it a try. 
Remember to remove the earlier patch before applying this one.

-- 
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..d4a4c22 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,11 +207,12 @@ 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);
+  logMessage(LOG_DEBUG, "insert key (before): %04X", key);
   setScreenKeyModifiers(&key, 0);
+  logMessage(LOG_DEBUG, "insert key (after): %04X", key);
 
   if (isSpecialKey(key)) {
 #define KEY(key,string) case (key): sequence = (string); break
@@ -264,14 +266,18 @@ 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;
   }
 
+logBytes(LOG_DEBUG, "char sequence", sequence, strlen(sequence));
   return doScreenCommand("stuff", sequence, NULL);
 }
 


More information about the BRLTTY mailing list