aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlec Murphy <alec@checksum.fail>2017-07-15 21:30:40 -0400
committerAlec Murphy <alec@checksum.fail>2017-07-15 21:30:40 -0400
commit6be0ba955f5a0df3cc6facc7b6583b4513e049df (patch)
tree3558f3624e863e5278537a30de6bd4d22955ec25
parent4fc7954f7966438f01a786687221ae9506d04339 (diff)
Add ANSI screen region scrolling
-rwxr-xr-xLoad.HC32
1 files changed, 31 insertions, 1 deletions
diff --git a/Load.HC b/Load.HC
index 0e09ad6..81ce485 100755
--- a/Load.HC
+++ b/Load.HC
@@ -16,6 +16,8 @@ I64 tt_cur_y=0;
I64 tt_cur_bg=BLACK;
I64 tt_cur_fg=WHITE;
I64 tt_cur_int=0;
+I64 tt_sr_y1=0;
+I64 tt_sr_y2=23;
I64 res=0;
@@ -124,6 +126,8 @@ U0 TempleTermSession(I64 sock)
U8 *rx_buf=CAlloc(1024);
U8 *ad_seq=CAlloc(6);
+ U8 *sr_buf=CAlloc(32);
+ CDC *sr_dc;
U8 cpos_buf[64];
U8 ansi_buf[64];
U8 rx_u8[2];
@@ -617,6 +621,32 @@ U0 TempleTermSession(I64 sock)
send(sock,ad_seq,5,0);
break;
+ case 'r':
+ StrPrint(sr_buf, ansi_buf);
+ StrFirstOcc(sr_buf,"r")[0]=0;
+ tt_sr_y2=Str2I64(StrFirstOcc(sr_buf,";")+1);
+ StrFirstOcc(sr_buf,";")[0]=0;
+ tt_sr_y1=Str2I64(sr_buf+1);
+ break;
+
+ case 'S':
+ StrPrint(sr_buf, ansi_buf);
+ StrFirstOcc(sr_buf,"S")[0]=0;
+ sr_dc=DCNew(640,(tt_sr_y2*8)-(tt_sr_y1*8));
+ GrBlot(sr_dc,0,-((tt_sr_y1+Str2I64(sr_buf+1))*8),tt_buf);
+ GrBlot(tt_buf,0,(tt_sr_y1*8),sr_dc);
+ DCDel(sr_dc);
+ break;
+
+ case 'T':
+ StrPrint(sr_buf, ansi_buf);
+ StrFirstOcc(sr_buf,"S")[0]=0;
+ sr_dc=DCNew(640,(tt_sr_y2*8)-(tt_sr_y1*8));
+ GrBlot(sr_dc,0,-((tt_sr_y1-Str2I64(sr_buf+1))*8),tt_buf);
+ GrBlot(tt_buf,0,(tt_sr_y1*8),sr_dc);
+ DCDel(sr_dc);
+ break;
+
case 'm':
if (StrFind(";1m",ansi_buf)) { bold=8; };
if (StrFind("[1m",ansi_buf)) { bold=8; };
@@ -1153,7 +1183,7 @@ U0 Run()
ConnEntriesRecalc;
while (res!=-1)
{
- res = PopUpBookmarkLst(conn_list);
+ res = PopUpBookmarkLst(conn_list);
if (res!=-1 && res<(conn_idx))
{
TempleTermConnect(conn_entries[res].host, conn_entries[res].port);