The framebuffer console should be able to display everything that
existing barebox commands can output to it.

The 2048 command makes use of the cursor movement sequences, so
implement them.

Link: https://terminalguide.namepad.de/seq/csi_ca/
Link: https://terminalguide.namepad.de/seq/csi_cb/
Link: https://terminalguide.namepad.de/seq/csi_cc/
Link: https://terminalguide.namepad.de/seq/csi_cd/

Signed-off-by: Ahmad Fatoum <[email protected]>
---
 drivers/video/fbconsole.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/video/fbconsole.c b/drivers/video/fbconsole.c
index 1c4418757b43..ad3c66b75737 100644
--- a/drivers/video/fbconsole.c
+++ b/drivers/video/fbconsole.c
@@ -638,6 +638,28 @@ static bool fbc_parse_csi(struct fbc_priv *priv)
 
                toggle_cursor_visibility(priv);
                return true;
+       case 'A' ... 'D': {
+               pos = simple_strtoul(priv->csi, &end, 10) ?: 1;
+               toggle_cursor_visibility(priv);
+
+               switch (last) {
+               case 'A': /* cursor up */
+                       fbc_set_cursor_row(priv, priv->cur.y - pos);
+                       break;
+               case 'B': /* cursor down */
+                       fbc_set_cursor_row(priv, priv->cur.y + pos);
+                       break;
+               case 'C': /* cursor forward */
+                       fbc_set_cursor_col(priv, priv->cur.x + pos);
+                       break;
+               case 'D': /* cursor back */
+                       fbc_set_cursor_col(priv, priv->cur.x - pos);
+                       break;
+               }
+
+               toggle_cursor_visibility(priv);
+               return true;
+       }
        case 'K':
                pos = simple_strtoul(priv->csi, &end, 10);
                toggle_cursor_visibility(priv);
-- 
2.47.3


Reply via email to