diff options
Diffstat (limited to 'sysutils/screen/files/patch-termcap.c')
-rw-r--r-- | sysutils/screen/files/patch-termcap.c | 98 |
1 files changed, 94 insertions, 4 deletions
diff --git a/sysutils/screen/files/patch-termcap.c b/sysutils/screen/files/patch-termcap.c index 716ad01eb970..290429f8acce 100644 --- a/sysutils/screen/files/patch-termcap.c +++ b/sysutils/screen/files/patch-termcap.c @@ -1,6 +1,22 @@ ---- termcap.c.orig 2019-10-01 22:08:00 UTC -+++ termcap.c -@@ -227,7 +227,7 @@ int he; +--- termcap.c.orig 2019-10-01 15:08:00.000000000 -0700 ++++ termcap.c 2019-10-28 19:37:41.586957000 -0700 +@@ -75,11 +75,10 @@ + + char *extra_incap, *extra_outcap; + +-static const char TermcapConst[] = "\\\n\ +-\t:DO=\\E[%dB:LE=\\E[%dD:RI=\\E[%dC:UP=\\E[%dA:bs:bt=\\E[Z:\\\n\ +-\t:cd=\\E[J:ce=\\E[K:cl=\\E[H\\E[J:cm=\\E[%i%d;%dH:ct=\\E[3g:\\\n\ +-\t:do=^J:nd=\\E[C:pt:rc=\\E8:rs=\\Ec:sc=\\E7:st=\\EH:up=\\EM:\\\n\ +-\t:le=^H:bl=^G:cr=^M:it#8:ho=\\E[H:nw=\\EE:ta=^I:is=\\E)0:"; ++static const char TermcapConst[] = "DO=\\E[%dB:LE=\\E[%dD:RI=\\E[%dC:\ ++UP=\\E[%dA:bs:bt=\\E[Z:cd=\\E[J:ce=\\E[K:cl=\\E[H\\E[J:cm=\\E[%i%d;%dH:\ ++ct=\\E[3g:do=^J:nd=\\E[C:pt:rc=\\E8:rs=\\Ec:sc=\\E7:st=\\EH:up=\\EM:\ ++le=^H:bl=^G:cr=^M:it#8:ho=\\E[H:nw=\\EE:ta=^I:is=\\E)0:"; + + char * + gettermcapstring(s) +@@ -227,7 +226,7 @@ (D_CKM && (InStr(D_CKM, "\033[M") || InStr(D_CKM, "\033[<")))) { D_CXT = 1; @@ -9,7 +25,7 @@ } /* "be" seems to be standard for xterms... */ if (D_CXT) -@@ -362,11 +362,7 @@ int he; +@@ -362,11 +361,7 @@ if (D_CG0) { if (D_CS0 == 0) @@ -22,3 +38,77 @@ if (D_CE0 == 0) D_CE0 = "\033(B"; D_AC = 0; +@@ -827,21 +822,13 @@ + char *s; + { + register int n; +- +- if (tcLineLen + (n = strlen(s)) > 55 && Termcaplen < TERMCAP_BUFSIZE - 4 - 1) +- { +- strcpy(Termcap + Termcaplen, "\\\n\t:"); +- Termcaplen += 4; +- tcLineLen = 0; +- } ++ n=strlen(s); + if (Termcaplen + n < TERMCAP_BUFSIZE - 1) + { + strcpy(Termcap + Termcaplen, s); + Termcaplen += n; + tcLineLen += n; + } +- else +- Panic(0, "TERMCAP overflow - sorry."); + } + + /* +@@ -1077,6 +1064,12 @@ + { + if (i >= T_KEYPAD) /* don't put keypad codes in TERMCAP */ + continue; /* - makes it too big */ ++#if (TERMCAP_BUF < 1024) ++ if (i >= T_FEXTRA && i < T_BACKTAB) /* also skip extra vt220 keys */ ++ continue; ++ if (i > T_BACKTAB && i < T_NAVIGATE) /* more vt220 keys */ ++ continue; ++#endif + if (i >= T_CURSOR && i < T_OCAPS) + { + act = &umtab[i - (T_CURSOR - T_OCAPS + T_CAPS)]; +@@ -1129,6 +1122,37 @@ + } + debug("MakeTermcap: end\n"); + return Termcap; ++} ++ ++#define TERMCAP_MAX_WIDTH 63 ++void ++DumpTermcap(aflag, f) ++int aflag; ++FILE *f; ++{ ++ register const char *p, *pe; ++ int n, col=0; ++ ++ if ((p = index(MakeTermcap(aflag), '=')) == NULL) ++ return; ++ p++; ++ debug1("DumpTermcap: '%s'\n", p); ++ /* write termcap entry with wrapping */ ++ while((pe = index(p, ':'))) ++ { ++ n = pe - p + 1; ++ if((col > 8) && ((col + n) > TERMCAP_MAX_WIDTH)) ++ { ++ fwrite("\\\n\t:", 1, 4, f); ++ col = 8; ++ } ++ fwrite(p, 1, n, f); ++ col += n; ++ p = ++pe; ++ } ++ if(*p) ++ fwrite(p, 1, strlen(p), f); ++ fputc('\n', f); + } + + static void |