yterm

commit a38c01646000dcfd1f88fe450ee30cd9771c7cec

Author: mesyeti <mesyeti@mesyeti.uk>

add CSI n P

 source/event.h | 2 ++
 source/interpreter/vt100.c | 18 ++++++++++++++++++


diff --git a/source/event.h b/source/event.h
index 0882518027eaba14daeae24780aac4164687e5d6..e48735a52a1dc69fc52a9f5df8fd223f4c2347a3 100644
--- a/source/event.h
+++ b/source/event.h
@@ -16,6 +16,8 @@ #define EVENT_QUIT              6
 #define EVENT_WINDOW_RESIZE     7
 #define EVENT_TEXT_INPUT        8
 
+// NOTE: when my gpu crashes it spams event 1
+
 typedef uint8_t Event_Type;
 
 typedef struct {




diff --git a/source/interpreter/vt100.c b/source/interpreter/vt100.c
index d1cc1b6a2b46cd8a4ec53465ccca1d54fddce41d..a6516b8e5f4f4f0511727b4cbc468feed0d06acc 100644
--- a/source/interpreter/vt100.c
+++ b/source/interpreter/vt100.c
@@ -365,6 +365,24 @@
 			terminal->cursor = (Vec2) {x, y + TermTop(terminal)};
 			break;
 		}
+		case 'P': {
+			int num = 1;
+
+			if (num >= 1) {
+				num = atoi(parts[0]);
+			}
+
+			BufCell* src  = Buffer_Get(&terminal->buffer, terminal->cursor.x + num, terminal->cursor.y);
+			BufCell* dest = Buffer_Get(&terminal->buffer, terminal->cursor.x, terminal->cursor.y);
+
+			memmove(dest, src, (terminal->buffer.width - terminal->cursor.x - num) * sizeof(BufCell));
+
+			Buffer_HLine(
+				&terminal->buffer, terminal->buffer.width - num, terminal->cursor.y, num,
+				BufCell_New(' ', terminal->attr)
+			);
+			break;
+		}
 		case 'J': {
 			int op = 0;