diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c index 08f2156eee8bb503b1ae70b428d60e741f7fc94e..55014277448b59382b88e0b4558101ce70b7201e 100644 --- a/src/syncterm/syncterm.c +++ b/src/syncterm/syncterm.c @@ -1284,28 +1284,38 @@ int main(int argc, char **argv) int ww, wh, sf; const char syncterm_termcap[]="\n# terminfo database entry for SyncTERM\n" "syncterm|SyncTERM,\n" - " am,bce,ccc,da,mir,msgr,ndscr,\n" // sam? - " it#8,colors#256,\n" + // cwin maybe? Or just left/right and top/bottom margins? + // smgtb=\\E[%i%p1%d;%p2%dr, + // shift/ctrl/alt Fx as extra keys? + // Booleans: + " am,bce,da,mir,msgr,ndscr,\n" // sam is a printer capability + // Numeric: + " it#8,colors#8,pairs#64,\n" + // Strings: | " acsc=l\\332m\\300k\\277j\\331u\\264t\\303v\\301w\\302q\\304x\\263n\\305`\\004a\\260f\\370g\\361~\\371.\\031-\\030h\\261i^U0\\333y\\363z\\362,\n" - " cbt=\\E[Z,bel=^G,cr=^M,csr=\\E[%i%p1%d;%p2%dr,clear=\\E[2J,el1=\\E[1K,el=\\E[K,ed=\\E[J,\n" - " hpa=\\E[%i%p1%dG,cup=\\E[%i%p1%d;%p2%dH,cud1=^J,home=\\E[H,civis=\\E[?25l,cub1=\\E[D,cnorm=\\E[?25h,\n" - " cuf1=\\E[C,ll=\\E[255H,cuu1=\\E[A,dch1=\\E[P,dl1=\\E[M,smam=\\E[?7h,blink=\\E[5m,bold=\\E[1m,\n" - " ech=\\E[%p1%dX,rmam=\\E[7l,sgr0=\\E[m,\n" - " is1=\\E[?7h\\E[?25h\\E[?31l\\E[?32l\\E[?33l\\E[*r\\E[ D\\E[m\\E[?s,\n" - " ich1=\\E[@,il1=\\E[L,\n" - " kbs=^H,kdch1=\\177,kcud1=\\E[B,kend=\\E[K,\n" - " kf1=\\EOP,kf2=\\EOQ,kf3=\\EOR,kf4=\\EOS,kf5=\\EOt,kf6=\\E[17~,\n" - " kf7=\\E[18~,kf8=\\E[19~,kf9=\\E[20~,kf10=\\E[21~,kf11=\\E[23~,kf12=\\E[24~,\n" - " khome=\\E[H,kich1=\\E[@,kcub1=\\E[D,knp=\\E[U,kpp=\\E[V,kcuf1=\\E[C,\n" - " kcuu1=\\E[A,\n" - " nel=^M^J,\n" - " dch=\\E[%p1%dP,dl=\\E[%p1%dM,cud=\\E[%p1%dB,ich=\\E[%p1%d@,indn=\\E[%p1%dS,\n" - " il=\\E[%p1%dL,cub=\\E[%p1%dD,cuf=\\E[%p1%dC,rin=\\E[%p1%dT,cuu=\\E[%p1%dA,\n" - " rs1=\\E[?7h\\E[?25h\\E[?31l\\E[?32l\\E[?33l\\E[*r\\E[ D\\E[m\\E[?s,\n" - " rc=\\E[u,sc=\\E[s,ind=\\E[S,ri=\\E[T,\n" - " ht=\t,setab=\\E[4%p1%dm,setaf=\\E[3%p1%dm,\n" + " cbt=\\E[Z,bel=^G,cr=^M,csr=\\E[%i%p1%d;%p2%dr,tbc=\\E[3g,\n" + " mgc=\\E[69h\\E[s\\e[69l,clear=\\E[2J,csr=\\E[%i%p1%d;%p2%dr,el1=\\E[1K,\n" + " el=\\E[K,ed=\\E[J,pa=\\E[%i%p1%dG,cup=\\E[%i%p1%d;%p2%dH,cud1=^J,home=\\E[H,\n" + " civis=\\E[?25l,cub1=\\E[D,cnorm=\\E[?25h,cuf1=\\E[C,ll=\\E[255H,cuu1=\\E[A,\n" + " cvvis=\\E[?25h,dch1=\\E[P,dl1=\\E[M,smam=\\E[?7h,blink=\\E[5m,bold=\\E[1m,\n" + " ech=\\E[%p1%dX,rmam=\\E[7l,sgr0=\\E[m,is1=\\Ec,ich1=\\E[@,il1=\\E[L,kbs=^H,\n" + " kcbt=\\E[Z,kdch1=\\177,kcud1=\\E[B,kend=\\E[K,kf1=\\E[11~,kf2=\\E[12~,\n" + " kf3=\\E[13~,kf4=\\E[14~,kf5=\\E[15~,kf6=\\E[17~,kf7=\\E[18~,kf8=\\E[19~,\n" + " kf9=\\E[20~,kf10=\\E[21~,kf11=\\E[23~,kf12=\\E[24~,kcub1=\\E[D,knp=\\E[U,\n" + " kpp=\\E[V,kcuf1=\\E[C,kcuu1=\\E[A,nel=^M^J,dch=\\E[%p1%dP,dl=\\E[%p1%dM,\n" + " cud=\\E[%p1%dB,ich=\\E[%p1%d@,indn=\\E[%p1%dS,il=\\E[%p1%dL,cub=\\E[%p1%dD,\n" + " cuf=\\E[%p1%dC,rin=\\E[%p1%dT,cuu=\\E[%p1%dA,rep=%p1%c\E[%p2%{1}%-%db,\n" + " rs=\\E[c,rc=\\E[u,sc=\\E[s,ind=\\E[S,ri=\\E[T,\n" " sgr=\\E[0%?%p1%p6%|%t;1%;%?%p4%|%t;5%;%?%p1%p3%|%t;7%;%?%p7%|%t;8%;m,\n" - " smso=\\E[0;1;7m,rmso=\\E[m,\n" + " smglp=\\E[69h\\E[%{1}%p1%+%d;0s\\E[69l,smgrp=\\E[69h\\E[0;%{1}%p1%+%ds\\E[69l,\n" + " hts=\E[H,ht=\t,setab=\\E[4%p1%dm,setaf=\\E[3%p1%dm,\n" + " smglr=\\E[?69h\\E[%i%p1%d;%p2%ds\\E?69l,smso=\\E[0;1;7m,rmso=\\E[m,\n" + "syncterm-bitmap|SyncTERM in Bitmap Mode,\n" + " ccc,\n" + " colors#256,pairs#65535,\n" + " initc=\\E]4;%p1%d;rgb\\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\\E\\\\\n", + " setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,\n" + " setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,\n" "syncterm-24|SyncTERM 80x25,\n" " lines#24,use=syncterm,\n" "syncterm-25|SyncTERM No Status Line,\n" @@ -1354,6 +1364,54 @@ int main(int argc, char **argv) " cols#132,lines#59,use=syncterm,\n" "syncterm-60-w|SyncTERM 132x60 No Status Line,\n" " cols#132,lines#60,use=syncterm,\n"; + "syncterm-24|SyncTERM 80x25,\n" + " lines#24,use=syncterm,\n" + "syncterm-25|SyncTERM No Status Line,\n" + " lines#25,use=syncterm,\n" + "syncterm-27|SyncTERM 80x28 With Status,\n" + " lines#27,use=syncterm,\n" + "syncterm-28|SyncTERM 80x28 No Status Line,\n" + " lines#28,use=syncterm,\n" + "syncterm-42|SyncTERM 80x23,\n" + " lines#42,use=syncterm,\n" + "syncterm-43|SyncTERM 80x23 No Status Line,\n" + " lines#43,use=syncterm,\n" + "syncterm-49|SyncTERM 80x50,\n" + " lines#49,use=syncterm,\n" + "syncterm-50|SyncTERM 80x50 No Status Line,\n" + " lines#50,use=syncterm,\n" + "syncterm-59|SyncTERM 80x60,\n" + " lines#59,use=syncterm,\n" + "syncterm-60|SyncTERM 80x60 No Status Line,\n" + " lines#60,use=syncterm,\n" + "syncterm-w-bitmap|SyncTERM Wide,\n" + " cols#132,use=syncterm-bitmap,\n" + "syncterm-25-w-bitmap|SyncTERM No Status Line,\n" + " cols#132,lines#25,use=syncterm-bitmap,\n" + "syncterm-27-w-bitmap|SyncTERM 132x28 With Status,\n" + " cols#132,lines#27,use=syncterm-bitmap,\n" + "syncterm-28-w-bitmap|SyncTERM 132x28 No Status Line,\n" + " cols#132,lines#28,use=syncterm-bitmap,\n" + "syncterm-36-w-bitmap|SyncTERM 132x37,\n" + " cols#132,lines#36,use=syncterm-bitmap,\n" + "syncterm-37-w-bitmap|SyncTERM 132x37 No Status Line,\n" + " cols#132,lines#37,use=syncterm-bitmap,\n" + "syncterm-42-w-bitmap|SyncTERM 132x23,\n" + " cols#132,lines#42,use=syncterm-bitmap,\n" + "syncterm-43-w-bitmap|SyncTERM 132x23 No Status Line,\n" + " cols#132,lines#43,use=syncterm-bitmap,\n" + "syncterm-49-w-bitmap|SyncTERM 132x50,\n" + " cols#132,lines#49,use=syncterm-bitmap,\n" + "syncterm-50-w-bitmap|SyncTERM 132x50 No Status Line,\n" + " cols#132,lines#50,use=syncterm-bitmap,\n" + "syncterm-51-w-bitmap|SyncTERM 132x52,\n" + " cols#132,lines#51,use=syncterm-bitmap,\n" + "syncterm-52-w-bitmap|SyncTERM 132x52 No Status Line,\n" + " cols#132,lines#52,use=syncterm-bitmap,\n" + "syncterm-59-w-bitmap|SyncTERM 132x60,\n" + " cols#132,lines#59,use=syncterm-bitmap,\n" + "syncterm-60-w-bitmap|SyncTERM 132x60 No Status Line,\n" + " cols#132,lines#60,use=syncterm-bitmap,\n"; SetThreadName("Main Thread"); if(argc==2 && strcmp(argv[1],"-T")==0) { diff --git a/src/syncterm/term.c b/src/syncterm/term.c index 9ffd2b3ae8d413d87d129536650b9ba7da80f5d3..e6cfaddcaa77bed78fb6c967b0b20ac21f06cbc9 100644 --- a/src/syncterm/term.c +++ b/src/syncterm/term.c @@ -3066,19 +3066,19 @@ BOOL doterm(struct bbslist *bbs) conn_send("\033[V",3,0); break; case CIO_KEY_F(1): - conn_send("\033OP",3,0); + conn_send("\033[11~",3,0); break; case CIO_KEY_F(2): - conn_send("\033OQ",3,0); + conn_send("\033[12~",3,0); break; case CIO_KEY_F(3): - conn_send("\033OR",3,0); + conn_send("\033[13~",3,0); break; case CIO_KEY_F(4): - conn_send("\033OS",3,0); + conn_send("\033[14~",3,0); break; case CIO_KEY_F(5): - conn_send("\033Ot",3,0); + conn_send("\033[15~",3,0); break; case CIO_KEY_F(6): conn_send("\033[17~",5,0); @@ -3101,6 +3101,114 @@ BOOL doterm(struct bbslist *bbs) case CIO_KEY_F(12): conn_send("\033[24~",5,0); break; + case CIO_KEY_SHIFT_F(1): + conn_send("\033[11;2~",3,0); + break; + case CIO_KEY_SHIFT_F(2): + conn_send("\033[12;2~",3,0); + break; + case CIO_KEY_SHIFT_F(3): + conn_send("\033[13;2~",3,0); + break; + case CIO_KEY_SHIFT_F(4): + conn_send("\033[14;2~",3,0); + break; + case CIO_KEY_SHIFT_F(5): + conn_send("\033[15;2~",3,0); + break; + case CIO_KEY_SHIFT_F(6): + conn_send("\033[17;2~",5,0); + break; + case CIO_KEY_SHIFT_F(7): + conn_send("\033[18;2~",5,0); + break; + case CIO_KEY_SHIFT_F(8): + conn_send("\033[19;2~",5,0); + break; + case CIO_KEY_SHIFT_F(9): + conn_send("\033[20;2~",5,0); + break; + case CIO_KEY_SHIFT_F(10): + conn_send("\033[21;2~",5,0); + break; + case CIO_KEY_SHIFT_F(11): + conn_send("\033[23;2~",5,0); + break; + case CIO_KEY_SHIFT_F(12): + conn_send("\033[24;2~",5,0); + break; + case CIO_KEY_CTRL_F(1): + conn_send("\033[11;5~",3,0); + break; + case CIO_KEY_CTRL_F(2): + conn_send("\033[12;5~",3,0); + break; + case CIO_KEY_CTRL_F(3): + conn_send("\033[13;5~",3,0); + break; + case CIO_KEY_CTRL_F(4): + conn_send("\033[14;5~",3,0); + break; + case CIO_KEY_CTRL_F(5): + conn_send("\033[15;5~",3,0); + break; + case CIO_KEY_CTRL_F(6): + conn_send("\033[17;5~",5,0); + break; + case CIO_KEY_CTRL_F(7): + conn_send("\033[18;5~",5,0); + break; + case CIO_KEY_CTRL_F(8): + conn_send("\033[19;5~",5,0); + break; + case CIO_KEY_CTRL_F(9): + conn_send("\033[20;5~",5,0); + break; + case CIO_KEY_CTRL_F(10): + conn_send("\033[21;5~",5,0); + break; + case CIO_KEY_CTRL_F(11): + conn_send("\033[23;5~",5,0); + break; + case CIO_KEY_CTRL_F(12): + conn_send("\033[24;5~",5,0); + break; + case CIO_KEY_ALT_F(1): + conn_send("\033[11;3~",3,0); + break; + case CIO_KEY_ALT_F(2): + conn_send("\033[12;3~",3,0); + break; + case CIO_KEY_ALT_F(3): + conn_send("\033[13;3~",3,0); + break; + case CIO_KEY_ALT_F(4): + conn_send("\033[14;3~",3,0); + break; + case CIO_KEY_ALT_F(5): + conn_send("\033[15;3~",3,0); + break; + case CIO_KEY_ALT_F(6): + conn_send("\033[17;3~",5,0); + break; + case CIO_KEY_ALT_F(7): + conn_send("\033[18;3~",5,0); + break; + case CIO_KEY_ALT_F(8): + conn_send("\033[19;3~",5,0); + break; + case CIO_KEY_ALT_F(9): + conn_send("\033[20;3~",5,0); + break; + case CIO_KEY_ALT_F(10): + conn_send("\033[21;3~",5,0); + break; + case CIO_KEY_ALT_F(11): + conn_send("\033[23;3~",5,0); + break; + case CIO_KEY_ALT_F(12): + conn_send("\033[24;3~",5,0); + break; case CIO_KEY_IC: conn_send("\033[@",3,0); break; @@ -3112,6 +3220,9 @@ BOOL doterm(struct bbslist *bbs) ch[0]=key; conn_send(ch,1,0); break; + case CIO_KEY_BACKTAB: + conn_send("\033[Z", 3, 0); + break; case '\b': key='\b'; /* FALLTHROUGH to default */