[BRLTTY] Cursor Routing Commands for Multi-Line Braille Displays

Dave Mielke Dave at mielke.cc
Mon Jul 7 19:28:44 UTC 2025


[quoted lines by Elijah Massey on 2025/07/06 at 13:51 -0500]

>I'm not sure about the right command to send. The command reference states that the ROUTE command routes the cursor to a character, and takes a column parameter, while the ROUTE_LINE command moves the cursor to a specific row. This made me think the best approach would be to send them both one after the other, but this doesn't work because ROUTE interrupts the movement of the cursor triggered by ROUTE_LINE and vice versa. 

No - as you discovered - that won't work.

>Also, I tried just sending ROUTE, with the column parameter set to the index of the Braille character in the matrix, so for the first character of line 3 I would pass 64. 

Yes, assuming a braille window width of 32 columns, that's the right way to do it.

>However, this never moved the cursor beyond the first line. 

Please apply the attached patch - multiline-routing.patch - and let us know if it fixes (or doesn't fix) the problem.

-- 
I believe the Bible to be the very Word of God: http://Mielke.cc/bible/
Dave Mielke            | 2213 Fox Crescent | WebHome: http://Mielke.cc/
EMail: Dave at Mielke.cc  | Ottawa, Ontario   | Twitter: @Dave_Mielke
Phone: +1 613 726 0014 | Canada  K2A 1H7   |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://mielke.cc/xmother.html (Letter from a Feminist ex-Mother)
-------------- next part --------------
diff --git a/Programs/cmd_touch.c b/Programs/cmd_touch.c
index 829e8a042..35f00ec91 100644
--- a/Programs/cmd_touch.c
+++ b/Programs/cmd_touch.c
@@ -141,7 +141,7 @@ handleTouchCommands (int command, void *data) {
         handleTouchOff(data);
       } else {
         int at;
-        if (isTextOffset(arg, &at, NULL, 0)) handleTouchAt(at, data);
+        if (isTextOffset(arg, NULL, &at, NULL, 0)) handleTouchAt(at, data);
       }
 
       break;
diff --git a/Programs/cmd_utils.c b/Programs/cmd_utils.c
index d144d9efa..ea1eb4a98 100644
--- a/Programs/cmd_utils.c
+++ b/Programs/cmd_utils.c
@@ -47,7 +47,7 @@ alertLineSkipped (unsigned int *count) {
 }
 
 int
-isTextOffset (int arg, int *first, int *last, int relaxed) {
+isTextOffset (int arg, int *row, int *first, int *last, int relaxed) {
   int y = arg / brl.textColumns;
   if (y >= brl.textRows) return 0;
   if ((ses->winy + y) >= scr.rows) return 0;
@@ -105,6 +105,7 @@ isTextOffset (int arg, int *first, int *last, int relaxed) {
     if (last) *last = x;
   }
 
+  if (row) *row = y;
   return 1;
 }
 
@@ -112,12 +113,12 @@ int
 getCharacterCoordinates (int arg, int *row, int *first, int *last, int relaxed) {
   if (arg == BRL_MSK_ARG) {
     if (!SCR_CURSOR_OK()) return 0;
-    *row = scr.posy;
+    if (row) *row = scr.posy;
     if (first) *first = scr.posx;
     if (last) *last = scr.posx;
   } else {
-    if (!isTextOffset(arg, first, last, relaxed)) return 0;
-    if (row) *row = ses->winy;
+    if (!isTextOffset(arg, row, first, last, relaxed)) return 0;
+    if (row) *row += ses->winy;
     if (first) *first += ses->winx;
     if (last) *last += ses->winx;
   }
diff --git a/Programs/cmd_utils.h b/Programs/cmd_utils.h
index 4658455e3..de8470c0a 100644
--- a/Programs/cmd_utils.h
+++ b/Programs/cmd_utils.h
@@ -27,7 +27,7 @@ extern "C" {
 
 extern void alertLineSkipped (unsigned int *count);
 
-extern int isTextOffset (int arg, int *first, int *last, int relaxed);
+extern int isTextOffset (int arg, int *row, int *first, int *last, int relaxed);
 
 extern int getCharacterCoordinates (int arg, int *row, int *first, int *last, int relaxed);
 


More information about the BRLTTY mailing list