* [gentoo-commits] repo/gentoo:master commit in: app-i18n/canfep/files/, app-i18n/canfep/
@ 2017-07-23 13:15 Akinori Hattori
0 siblings, 0 replies; only message in thread
From: Akinori Hattori @ 2017-07-23 13:15 UTC (permalink / raw
To: gentoo-commits
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 8146 bytes --]
commit: 8634bf43cedc22d1e46b67f20b6d81c376c1fbdf
Author: Akinori Hattori <hattya <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 23 13:14:32 2017 +0000
Commit: Akinori Hattori <hattya <AT> gentoo <DOT> org>
CommitDate: Sun Jul 23 13:15:24 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8634bf43
app-i18n/canfep: fix termcap handling
Package-Manager: Portage-2.3.6, Repoman-2.3.1
app-i18n/canfep/canfep-1.0-r1.ebuild | 5 +-
app-i18n/canfep/files/canfep-termcap.patch | 266 +++++++++++++++++++++++++++++
2 files changed, 270 insertions(+), 1 deletion(-)
diff --git a/app-i18n/canfep/canfep-1.0-r1.ebuild b/app-i18n/canfep/canfep-1.0-r1.ebuild
index 9d542a19716..d46bf325837 100644
--- a/app-i18n/canfep/canfep-1.0-r1.ebuild
+++ b/app-i18n/canfep/canfep-1.0-r1.ebuild
@@ -20,7 +20,10 @@ RDEPEND="app-i18n/canna
DEPEND="${RDEPEND}
virtual/pkgconfig"
-PATCHES=( "${FILESDIR}"/${PN}-posix-pty.patch )
+PATCHES=(
+ "${FILESDIR}"/${PN}-posix-pty.patch
+ "${FILESDIR}"/${PN}-termcap.patch
+)
src_prepare() {
use unicode && eapply "${DISTDIR}"/${PN}_utf8.diff
diff --git a/app-i18n/canfep/files/canfep-termcap.patch b/app-i18n/canfep/files/canfep-termcap.patch
new file mode 100644
index 00000000000..afd215b07e7
--- /dev/null
+++ b/app-i18n/canfep/files/canfep-termcap.patch
@@ -0,0 +1,266 @@
+--- a/pty.C
++++ b/pty.C
+@@ -4,9 +4,18 @@
+ int Pty::child = 0;
+ struct termios Pty::tt;
+ int Pty::wfd = 0;
++char Pty::buf[] = "";
++char Pty::funcstr[] = "";
+ int Pty::hs = 0;
++char* Pty::so = 0;
++char* Pty::se = 0;
++char* Pty::us = 0;
++char* Pty::ue = 0;
++char* Pty::sc = 0;
++char* Pty::rc = 0;
+ char* Pty::ce = 0;
+ char* Pty::ts = 0;
++char* Pty::fs = 0;
+ char* Pty::ds = 0;
+ char Pty::endstr[] = "";
+ char Pty::endmsg[] = "";
+@@ -14,88 +23,7 @@
+ // ¥³¥ó¥¹¥È¥é¥¯¥¿¤À¤è¤ó
+ Pty::Pty(int ac, char** av, char* amsg, char* emsg)
+ {
+- // ´Ä¶ÊÑ¿ô TERM ¤Î¥¨¥ó¥È¥ê¤ò¼èÆÀ
+- char buff[BUFSIZ];
+- char* term = getenv("TERM");
+- if (!term)
+- term = "vt100";
+- int ret = tgetent(buff, term);
+- if (ret != 1) {
+- tgetent(buff, "vt100");
+- putenv("TERM=vt100");
+- }
+-
+- // termcap ¤«¤éÁõ¾þÍѤΥ¨¥ó¥È¥ê¤ò¼è¤Ã¤Æ¤¯¤ë
+- char funcstr[BUFSIZ];
+- char* pt = funcstr;
+-
+- // ¥¹¥¿¥ó¥É¥¢¥¦¥È (ȿž)
+- so = tgetstr("so", &pt);
+- adjstr(so);
+- se = tgetstr("se", &pt);
+- adjstr(se);
+-
+- // ¥¢¥ó¥À¡¼¥é¥¤¥ó (²¼Àþ)
+- us = tgetstr("us", &pt);
+- adjstr(us);
+- ue = tgetstr("ue", &pt);
+- adjstr(ue);
+-
+- // ¥«¡¼¥½¥ë°ÌÃÖ¤ÎÊݸ¡¤Êݸ¤·¤¿°ÌÃ֤ؤÎÉüµ¢
+- sc = tgetstr("sc", &pt);
+- adjstr(sc);
+- rc = tgetstr("rc", &pt);
+- adjstr(rc);
+-
+- // ¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¹Ô¤ÎºÇ¸å¤Þ¤Ç¤òºï½ü¤¹¤ë
+- ce = tgetstr("ce", &pt);
+- adjstr(ce);
+-
+- // ¥¹¥Æ¡¼¥¿¥¹¥é¥¤¥ó¤ò»ý¤Ã¤Æ¤¤¤ë¤«¤É¤¦¤«
+- hs = tgetflag("hs");
+-
+- // kon ¤È jfbterm ¤Ç¤Ï¥¹¥Æ¡¼¥¿¥¹¥é¥¤¥ó¤ò»È¤ï¤Ê¤¤
+- if (strcmp(term, "kon") == 0)
+- hs = 0;
+- if (strcmp(term, "jfbterm") == 0)
+- hs = 0;
+-
+- // ¥¹¥Æ¡¼¥¿¥¹¥é¥¤¥ó¤Ø°ÜÆ°¡¤Ìá¤ë
+- if (hs) {
+- ts = tgoto(tgetstr("ts", &pt), 0, 0);
+- adjstr(ts);
+- fs = tgetstr("fs", &pt);
+- adjstr(fs);
+- ds = tgetstr("ds", &pt);
+- adjstr(ds);
+- if (ds) {
+- strcat(endstr, ds);
+- strcat(endstr, ce);
+- }
+- }
+- else {
+- char* cs = tgoto(tgetstr("cs", &pt), tgetnum("li") - 2, 0);
+- adjstr(cs);
+- if (cs) {
+- write(1, ce, strlen(ce));
+- write(1, cs, strlen(cs));
+- }
+- char* cl = tgetstr("cl", &pt);
+- adjstr(cl);
+- if (cl) {
+- write(1, cl, strlen(cl));
+- strcat(endstr, cl);
+- }
+- ds = tgoto(tgetstr("cs", &pt), tgetnum("li") - 1, 0);
+- adjstr(ds);
+- if (ds) {
+- strcat(endstr, ds);
+- strcat(endstr, ce);
+- }
+- ts = tgoto(tgetstr("cm", &pt), 0, tgetnum("li") - 1);
+- adjstr(ts);
+- fs = rc;
+- }
++ gettermcap();
+
+ // ³«»Ï¤È½ªÎ»¤Î¥á¥Ã¥»¡¼¥¸
+ if (amsg && ac == 1)
+@@ -209,21 +137,75 @@
+ done();
+ }
+
+-// termcap ¥¨¥ó¥È¥ê¤«¤é¥Ñ¥Ç¥£¥ó¥°¤òºï½ü¤¹¤ë
+ void
+-Pty::adjstr(char* str)
++Pty::gettermcap()
+ {
+- char* sp = strdup(str);
+- char* p = sp;
+- while (*p != '\0') {
+- if (strncmp(p, "$<", 2) == 0) {
+- while (*p != '>')
+- p++;
+- *p = '\0';
++ // ´Ä¶ÊÑ¿ô TERM ¤Î¥¨¥ó¥È¥ê¤ò¼èÆÀ
++ char* term = getenv("TERM");
++ if (!term)
++ term = "vt100";
++ int ret = tgetent(buf, term);
++ if (ret != 1) {
++ tgetent(buf, "vt100");
++ putenv("TERM=vt100");
++ }
++
++ // termcap ¤«¤éÁõ¾þÍѤΥ¨¥ó¥È¥ê¤ò¼è¤Ã¤Æ¤¯¤ë
++ char* pt = funcstr;
++
++ // ¥¹¥¿¥ó¥É¥¢¥¦¥È (ȿž)
++ so = tgetstr("so", &pt);
++ se = tgetstr("se", &pt);
++
++ // ¥¢¥ó¥À¡¼¥é¥¤¥ó (²¼Àþ)
++ us = tgetstr("us", &pt);
++ ue = tgetstr("ue", &pt);
++
++ // ¥«¡¼¥½¥ë°ÌÃÖ¤ÎÊݸ¡¤Êݸ¤·¤¿°ÌÃ֤ؤÎÉüµ¢
++ sc = tgetstr("sc", &pt);
++ rc = tgetstr("rc", &pt);
++
++ // ¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¹Ô¤ÎºÇ¸å¤Þ¤Ç¤òºï½ü¤¹¤ë
++ ce = tgetstr("ce", &pt);
++
++ // ¥¹¥Æ¡¼¥¿¥¹¥é¥¤¥ó¤ò»ý¤Ã¤Æ¤¤¤ë¤«¤É¤¦¤«
++ hs = tgetflag("hs");
++
++ // kon ¤È jfbterm ¤Ç¤Ï¥¹¥Æ¡¼¥¿¥¹¥é¥¤¥ó¤ò»È¤ï¤Ê¤¤
++ if (strcmp(term, "kon") == 0)
++ hs = 0;
++ if (strcmp(term, "jfbterm") == 0)
++ hs = 0;
++
++ // ¥¹¥Æ¡¼¥¿¥¹¥é¥¤¥ó¤Ø°ÜÆ°¡¤Ìá¤ë
++ if (hs) {
++ ts = tgoto(tgetstr("ts", &pt), 0, 0);
++ fs = tgetstr("fs", &pt);
++ ds = tgetstr("ds", &pt);
++ if (ds) {
++ strcat(endstr, ds);
++ strcat(endstr, ce);
+ }
+- *str++ = *p++;
+ }
+- free(sp);
++ else {
++ char* cs = tgoto(tgetstr("cs", &pt), tgetnum("li") - 2, 0);
++ if (cs) {
++ write(1, ce, strlen(ce));
++ write(1, cs, strlen(cs));
++ }
++ char* cl = tgetstr("cl", &pt);
++ if (cl) {
++ write(1, cl, strlen(cl));
++ strcat(endstr, cl);
++ }
++ ds = tgoto(tgetstr("cs", &pt), tgetnum("li") - 1, 0);
++ if (ds) {
++ strcat(endstr, ds);
++ strcat(endstr, ce);
++ }
++ ts = tgoto(tgetstr("cm", &pt), 0, tgetnum("li") - 1);
++ fs = rc;
++ }
+ }
+
+ // ¥Þ¥¹¥¿¥Ç¥Ð¥¤¥¹¤ò¼è¤ë
+@@ -327,34 +309,7 @@
+ {
+ signal(SIGWINCH, SIG_IGN);
+
+- // ¥¹¥Æ¡¼¥¿¥¹¥é¥¤¥ó¤¬»È¤¨¤Ê¤¤¾ì¹ç¤Ï cs/ds/ts ¤ò¼è¤êľ¤¹
+- if (!hs) {
+- char buff[BUFSIZ];
+- char* term = getenv("TERM");
+- tgetent(buff, term);
+- char funcstr[BUFSIZ];
+- char* pt = funcstr;
+- char* cs = tgoto(tgetstr("cs", &pt), tgetnum("li") - 2, 0);
+- adjstr(cs);
+- if (cs) {
+- write(1, ce, strlen(ce));
+- write(1, cs, strlen(cs));
+- }
+- char* cl = tgetstr("cl", &pt);
+- adjstr(cl);
+- if (cl) {
+- write(1, cl, strlen(cl));
+- strcpy(endstr, cl);
+- }
+- ds = tgoto(tgetstr("cs", &pt), tgetnum("li") - 1, 0);
+- adjstr(ds);
+- if (ds) {
+- strcat(endstr, ds);
+- strcat(endstr, ce);
+- }
+- ts = tgoto(tgetstr("cm", &pt), 0, tgetnum("li") - 1);
+- adjstr(ts);
+- }
++ gettermcap();
+
+ // ¥¦¥£¥ó¥É¥¦¤Î¥µ¥¤¥º¤òÀßÄꤷľ¤¹ (stty -a ¤Î ¹Ô¿ô/·å¿ô Åù)
+ struct winsize win;
+--- a/pty.H
++++ b/pty.H
+@@ -50,18 +50,21 @@
+ int rfd;
+ static int wfd;
+ private:
+- static void adjstr(char* str);
++ static char buf[BUFSIZ];
++ static char funcstr[BUFSIZ];
++private:
++ static void gettermcap();
+ protected:
+ static int hs;
+- char* so;
+- char* se;
+- char* us;
+- char* ue;
+- char* sc;
+- char* rc;
++ static char* so;
++ static char* se;
++ static char* us;
++ static char* ue;
++ static char* sc;
++ static char* rc;
+ static char* ce;
+ static char* ts;
+- char* fs;
++ static char* fs;
+ static char* ds;
+ private:
+ static void finish();
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2017-07-23 13:15 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-23 13:15 [gentoo-commits] repo/gentoo:master commit in: app-i18n/canfep/files/, app-i18n/canfep/ Akinori Hattori
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox