diff options
author | Alec Murphy <alec@checksum.fail> | 2017-07-15 21:30:40 -0400 |
---|---|---|
committer | Alec Murphy <alec@checksum.fail> | 2017-07-15 21:30:40 -0400 |
commit | 6be0ba955f5a0df3cc6facc7b6583b4513e049df (patch) | |
tree | 3558f3624e863e5278537a30de6bd4d22955ec25 | |
parent | 4fc7954f7966438f01a786687221ae9506d04339 (diff) |
Add ANSI screen region scrolling
-rwxr-xr-x | Load.HC | 32 |
1 files changed, 31 insertions, 1 deletions
@@ -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); |