Gentoo Archives: gentoo-commits

From: Alessandro Barbieri <lssndrbarbieri@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/proj/guru:dev commit in: app-i18n/canfep/, app-i18n/canfep/files/
Date: Sun, 26 Jun 2022 02:36:44
Message-Id: 1656210584.08c29eb875d5834e490a7005bb3404ff68215c41.Alessandro-Barbieri@gentoo
1 commit: 08c29eb875d5834e490a7005bb3404ff68215c41
2 Author: Alessandro Barbieri <lssndrbarbieri <AT> gmail <DOT> com>
3 AuthorDate: Tue Jun 21 23:48:58 2022 +0000
4 Commit: Alessandro Barbieri <lssndrbarbieri <AT> gmail <DOT> com>
5 CommitDate: Sun Jun 26 02:29:44 2022 +0000
6 URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=08c29eb8
7
8 app-i18n/canfep: new package, add 1.0-r1
9
10 Signed-off-by: Alessandro Barbieri <lssndrbarbieri <AT> gmail.com>
11
12 app-i18n/canfep/Manifest | 1 +
13 app-i18n/canfep/canfep-1.0-r1.ebuild | 38 +++
14 .../canfep/files/canfep-1.0-respect-flags.patch | 24 ++
15 app-i18n/canfep/files/canfep-1.0-utf8.patch | 190 +++++++++++++++
16 app-i18n/canfep/files/canfep-posix-pty.patch | 67 ++++++
17 app-i18n/canfep/files/canfep-termcap.patch | 266 +++++++++++++++++++++
18 app-i18n/canfep/metadata.xml | 9 +
19 7 files changed, 595 insertions(+)
20
21 diff --git a/app-i18n/canfep/Manifest b/app-i18n/canfep/Manifest
22 new file mode 100644
23 index 000000000..8b3ed0252
24 --- /dev/null
25 +++ b/app-i18n/canfep/Manifest
26 @@ -0,0 +1 @@
27 +DIST canfep-1.0.tar.gz 8067 BLAKE2B 1a6e8af357d2b7aaccf442b0f8bab577ed05a5a0fdf2fb4c189105c2c41f739c2e559e740584bf393fcc52d3f3bd0bb6216e06e2b685f62f7dded9d576e95bed SHA512 0fd7c8ca56282fa537b76fe33f46e03d4f0f4727528ccad95cd4726888372da9158fc8bed2cdc67d645defb479040cd4a4d0999f69d38fd8b4080f7ece4e67d6
28
29 diff --git a/app-i18n/canfep/canfep-1.0-r1.ebuild b/app-i18n/canfep/canfep-1.0-r1.ebuild
30 new file mode 100644
31 index 000000000..5c5fdabb8
32 --- /dev/null
33 +++ b/app-i18n/canfep/canfep-1.0-r1.ebuild
34 @@ -0,0 +1,38 @@
35 +# Copyright 1999-2022 Gentoo Authors
36 +# Distributed under the terms of the GNU General Public License v2
37 +
38 +EAPI=8
39 +
40 +inherit toolchain-funcs
41 +
42 +DESCRIPTION="Canna Japanese kana-kanji frontend processor on console"
43 +HOMEPAGE="https://web.archive.org/web/20170517105759/http://www.geocities.co.jp/SiliconValley-Bay/7584/canfep/"
44 +SRC_URI="https://web.archive.org/web/20181106043248if_/http://www.geocities.co.jp/SiliconValley-Bay/7584/${PN}/${P}.tar.gz"
45 +
46 +LICENSE="canfep"
47 +SLOT="0"
48 +KEYWORDS="~amd64"
49 +
50 +RDEPEND="
51 + app-i18n/canna
52 + sys-libs/ncurses:=
53 +"
54 +DEPEND="${RDEPEND}"
55 +BDEPEND="virtual/pkgconfig"
56 +
57 +PATCHES=(
58 + "${FILESDIR}/${P}-utf8.patch"
59 + "${FILESDIR}/${PN}-posix-pty.patch"
60 + "${FILESDIR}/${PN}-termcap.patch"
61 + "${FILESDIR}/${P}-respect-flags.patch"
62 +)
63 +
64 +src_compile() {
65 + tc-export CXX
66 + LIBS="$($(tc-getPKG_CONFIG) --libs ncurses)" emake
67 +}
68 +
69 +src_install() {
70 + dobin "${PN}"
71 + dodoc 00{changes,readme}
72 +}
73
74 diff --git a/app-i18n/canfep/files/canfep-1.0-respect-flags.patch b/app-i18n/canfep/files/canfep-1.0-respect-flags.patch
75 new file mode 100644
76 index 000000000..4dbcbec77
77 --- /dev/null
78 +++ b/app-i18n/canfep/files/canfep-1.0-respect-flags.patch
79 @@ -0,0 +1,24 @@
80 +--- a/Makefile
81 ++++ b/Makefile
82 +@@ -1,7 +1,5 @@
83 + # Linux
84 +-CC=c++
85 +-LIBS=-lcanna -ltermcap
86 +-CFLAGS=-O2 -g
87 ++LIBS += -lcanna
88 +
89 + # Solaris 2.6J
90 + #CC=c++
91 +@@ -19,10 +17,10 @@
92 + all: $(TARGET)
93 +
94 + $(TARGET): $(OBJS)
95 +- $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS)
96 ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -fPIE -o $@ $(OBJS) $(LIBS)
97 +
98 + .C.o:
99 +- $(CC) $(CFLAGS) -c $<
100 ++ $(CXX) $(CXXFLAGS) -fPIC -c $<
101 +
102 + clean:
103 + rm -rf $(TARGET) $(OBJS)
104
105 diff --git a/app-i18n/canfep/files/canfep-1.0-utf8.patch b/app-i18n/canfep/files/canfep-1.0-utf8.patch
106 new file mode 100644
107 index 000000000..e798d109d
108 --- /dev/null
109 +++ b/app-i18n/canfep/files/canfep-1.0-utf8.patch
110 @@ -0,0 +1,190 @@
111 +--- a/canna.C
112 ++++ b/canna.C
113 +@@ -4,10 +4,87 @@
114 + #define FEP_KEY 15
115 + #define ESC_KEY 27
116 +
117 ++void Canna::write_utf8(int fd, char *p, int len)
118 ++{
119 ++ if (eucjp_to_utf8_cd == (iconv_t)-1)
120 ++ write(fd, p, strlen(p));
121 ++ else
122 ++ {
123 ++ char *putf8 = iconv_string(eucjp_to_utf8_cd, p, len);
124 ++ write(fd, putf8, strlen(putf8));
125 ++ free(putf8);
126 ++ }
127 ++}
128 ++
129 ++char * Canna::iconv_string(iconv_t fd, char *str, int slen)
130 ++{
131 ++ char *from;
132 ++ size_t fromlen;
133 ++ char *to;
134 ++ size_t tolen;
135 ++ size_t len = 0;
136 ++ size_t done = 0;
137 ++ char *result = NULL;
138 ++ char *p;
139 ++ int l;
140 ++
141 ++ from = (char *)str;
142 ++ fromlen = slen;
143 ++ for (;;)
144 ++ {
145 ++ if (len == 0 || errno == E2BIG)
146 ++ {
147 ++ /* Allocate enough room for most conversions. When re-allocating
148 ++ * increase the buffer size. */
149 ++ len = len + fromlen * 2 + 40;
150 ++ p = (char*)malloc((unsigned)len);
151 ++ if (p != NULL && done > 0)
152 ++ memcpy(p, result, done);
153 ++ free(result);
154 ++ result = p;
155 ++ if (result == NULL) /* out of memory */
156 ++ break;
157 ++ }
158 ++
159 ++ to = (char *)result + done;
160 ++ tolen = len - done - 2;
161 ++ /* Avoid a warning for systems with a wrong iconv() prototype by
162 ++ * casting the second argument to void *. */
163 ++ if (iconv(fd, &from, &fromlen, &to, &tolen) != (size_t)-1)
164 ++ {
165 ++ /* Finished, append a NUL. */
166 ++ *to = 0;
167 ++ break;
168 ++ }
169 ++ /* Check both ICONV_EILSEQ and EILSEQ, because the dynamically loaded
170 ++ * iconv library may use one of them. */
171 ++ if (errno == EILSEQ || errno == EILSEQ)
172 ++ {
173 ++ /* Can't convert: insert a '?' and skip a character. This assumes
174 ++ * conversion from 'encoding' to something else. In other
175 ++ * situations we don't know what to skip anyway. */
176 ++ *to++ = *from++;
177 ++ fromlen -= 1;
178 ++ }
179 ++ else if (errno != E2BIG)
180 ++ {
181 ++ /* conversion failed */
182 ++ free(result);
183 ++ result = NULL;
184 ++ break;
185 ++ }
186 ++ /* Not enough room or skipping illegal sequence. */
187 ++ done = to - (char *)result;
188 ++ }
189 ++ return result;
190 ++}
191 ++
192 + // コンストラクタだよん
193 + Canna::Canna(int ac, char** av, char* amsg, char* emsg):
194 + Pty(ac, av, amsg, emsg)
195 + {
196 ++ char *p_lang = getenv("LANG");
197 ++
198 + // かんなの初期化
199 + jrKanjiControl(0, KC_INITIALIZE, 0);
200 + jrKanjiControl(0, KC_SETAPPNAME, "canfep");
201 +@@ -15,6 +92,9 @@
202 + jrKanjiControl(0, KC_QUERYMODE, (char*) saveMode);
203 + jrKanjiControl(0, KC_SETWIDTH, (char*) 72);
204 +
205 ++ if (p_lang == NULL || strstr(p_lang, "-8"))
206 ++ eucjp_to_utf8_cd = iconv_open("utf-8", "euc-jp");
207 ++
208 + mode(saveMode);
209 + }
210 +
211 +@@ -25,6 +105,8 @@
212 + jrKanjiControl(0, KC_KILL, (char*) &ksv);
213 + jrKanjiControl(0, KC_FINALIZE, 0);
214 +
215 ++ if (eucjp_to_utf8_cd != (iconv_t)-1)
216 ++ iconv_close(eucjp_to_utf8_cd);
217 + mode(saveMode);
218 + }
219 +
220 +@@ -32,7 +114,7 @@
221 + void
222 + Canna::kakutei(unsigned char* p)
223 + {
224 +- write(wfd, p, strlen((char*) p));
225 ++ write_utf8(wfd, (char*)p, strlen((char*) p));
226 + }
227 +
228 + // 変換中(未確定)の文字列を出力する
229 +@@ -42,13 +124,13 @@
230 + write(rfd, sc, strlen(sc));
231 + write(rfd, rc, strlen(rc));
232 + write(rfd, us, strlen(us));
233 +- write(rfd, p, pos);
234 ++ write_utf8(rfd, (char*)p, pos);
235 + write(rfd, ue, strlen(ue));
236 + write(rfd, so, strlen(so));
237 +- write(rfd, p + pos, len);
238 ++ write_utf8(rfd, (char*)p + pos, len);
239 + write(rfd, se, strlen(se));
240 + write(rfd, us, strlen(us));
241 +- write(rfd, p + pos + len, strlen((char*) p + pos + len));
242 ++ write_utf8(rfd, (char*)p + pos + len, strlen((char*) p + pos + len));
243 + write(rfd, ue, strlen(ue));
244 + }
245 +
246 +@@ -73,7 +155,7 @@
247 + write(rfd, sc, strlen(sc));
248 + write(rfd, ts, strlen(ts));
249 + write(rfd, ce, strlen(ce));
250 +- write(rfd, p, strlen((char*) p));
251 ++ write_utf8(rfd, (char*)p, strlen((char*) p));
252 + write(rfd, fs, strlen(fs));
253 + }
254 +
255 +@@ -84,13 +166,13 @@
256 + write(rfd, sc, strlen(sc));
257 + write(rfd, ts, strlen(ts));
258 + write(rfd, ce, strlen(ce));
259 +- write(rfd, p, strlen((char*) p));
260 ++ write_utf8(rfd, (char*)p, strlen((char*) p));
261 + write(rfd, " ", 1);
262 +- write(rfd, l, pos);
263 ++ write_utf8(rfd, (char*)l, pos);
264 + write(rfd, so, strlen(so));
265 +- write(rfd, l + pos, len);
266 ++ write_utf8(rfd, (char*)l + pos, len);
267 + write(rfd, se, strlen(se));
268 +- write(rfd, l + pos + len, strlen((char*) l + pos +len));
269 ++ write_utf8(rfd, (char*)l + pos + len, strlen((char*) l + pos +len));
270 + write(rfd, fs, strlen(fs));
271 + }
272 +
273 +--- a/canna.H
274 ++++ b/canna.H
275 +@@ -5,6 +5,8 @@
276 + #include <stdlib.h>
277 + #include <string.h>
278 + #include <unistd.h>
279 ++#include <errno.h>
280 ++#include <iconv.h>
281 + #include <canna/jrkanji.h>
282 +
283 + #include "pty.H"
284 +@@ -17,6 +19,7 @@
285 + jrKanjiStatus ks;
286 + jrKanjiStatusWithValue ksv;
287 + private:
288 ++ iconv_t eucjp_to_utf8_cd;
289 + unsigned char currentMode[BUFSIZ];
290 + unsigned char saveMode[BUFSIZ];
291 + private:
292 +@@ -25,6 +28,8 @@
293 + void delhenkan(int len);
294 + void mode(unsigned char* p);
295 + void gline(unsigned char* p, unsigned char* l, int pos, int len);
296 ++ void write_utf8(int fd, char *p, int len);
297 ++ char* iconv_string(iconv_t fd, char *str, int slen);
298 + public:
299 + void loop();
300 + };
301
302 diff --git a/app-i18n/canfep/files/canfep-posix-pty.patch b/app-i18n/canfep/files/canfep-posix-pty.patch
303 new file mode 100644
304 index 000000000..caa451232
305 --- /dev/null
306 +++ b/app-i18n/canfep/files/canfep-posix-pty.patch
307 @@ -0,0 +1,67 @@
308 +https://bugs.gentoo.org/show_bug.cgi?id=212709
309 +
310 +Author: OKUMURA N. Shin-ya <oku.ns@×××××.com>
311 +
312 +--- a/pty.C
313 ++++ b/pty.C
314 +@@ -257,6 +257,23 @@
315 + }
316 + }
317 +
318 ++#if defined(_POSIX_C_SOURCE)
319 ++ // BSD pty が開けないので、POSIX の方法を試す
320 ++ if ((master = posix_openpt(O_RDWR)) >= 0) {
321 ++ if (grantpt(master) == 0 && unlockpt(master) == 0) {
322 ++ // マスタデバイス名は固定
323 ++ strcpy(line, "/dev/ptmx");
324 ++ tcgetattr(0, &tt);
325 ++ tt.c_iflag &= ~ISTRIP;
326 ++ ioctl(0, TIOCGWINSZ, (char*) &win);
327 ++ return;
328 ++ }
329 ++ close(master);
330 ++ } else {
331 ++ perror("/dev/ptmx");
332 ++ }
333 ++#endif // _POSIX_C_SOURCE
334 ++
335 + printf("Out of pty's\n");
336 + fail();
337 + }
338 +@@ -265,12 +282,36 @@
339 + void
340 + Pty::getslave()
341 + {
342 ++#if defined(_POSIX_C_SOURCE)
343 ++ // マスタデバイスが POSIX 方式の場合
344 ++ if (strcmp(line, "/dev/ptmx") == 0) {
345 ++ char *slave_devname = ptsname(master);
346 ++ if (slave_devname == NULL) {
347 ++ perror("ptsname");
348 ++ fail();
349 ++ }
350 ++ slave = open(slave_devname, O_RDWR);
351 ++ if (slave < 0) {
352 ++ perror(slave_devname);
353 ++ fail();
354 ++ }
355 ++ strcpy(line, slave_devname);
356 ++ } else {
357 ++ line[strlen("/dev/")] = 't';
358 ++ slave = open(line, O_RDWR);
359 ++ if (slave < 0) {
360 ++ perror(line);
361 ++ fail();
362 ++ }
363 ++ }
364 ++#else // ! _POSIX_C_SOURCE
365 + line[strlen("/dev/")] = 't';
366 + slave = open(line, O_RDWR);
367 + if (slave < 0) {
368 + perror(line);
369 + fail();
370 + }
371 ++#endif // _POSIX_C_SOURCE
372 + tcsetattr(slave, TCSAFLUSH, &tt);
373 + if (!hs)
374 + win.ws_row--;
375
376 diff --git a/app-i18n/canfep/files/canfep-termcap.patch b/app-i18n/canfep/files/canfep-termcap.patch
377 new file mode 100644
378 index 000000000..afd215b07
379 --- /dev/null
380 +++ b/app-i18n/canfep/files/canfep-termcap.patch
381 @@ -0,0 +1,266 @@
382 +--- a/pty.C
383 ++++ b/pty.C
384 +@@ -4,9 +4,18 @@
385 + int Pty::child = 0;
386 + struct termios Pty::tt;
387 + int Pty::wfd = 0;
388 ++char Pty::buf[] = "";
389 ++char Pty::funcstr[] = "";
390 + int Pty::hs = 0;
391 ++char* Pty::so = 0;
392 ++char* Pty::se = 0;
393 ++char* Pty::us = 0;
394 ++char* Pty::ue = 0;
395 ++char* Pty::sc = 0;
396 ++char* Pty::rc = 0;
397 + char* Pty::ce = 0;
398 + char* Pty::ts = 0;
399 ++char* Pty::fs = 0;
400 + char* Pty::ds = 0;
401 + char Pty::endstr[] = "";
402 + char Pty::endmsg[] = "";
403 +@@ -14,88 +23,7 @@
404 + // コンストラクタだよん
405 + Pty::Pty(int ac, char** av, char* amsg, char* emsg)
406 + {
407 +- // 環境変数 TERM のエントリを取得
408 +- char buff[BUFSIZ];
409 +- char* term = getenv("TERM");
410 +- if (!term)
411 +- term = "vt100";
412 +- int ret = tgetent(buff, term);
413 +- if (ret != 1) {
414 +- tgetent(buff, "vt100");
415 +- putenv("TERM=vt100");
416 +- }
417 +-
418 +- // termcap から装飾用のエントリを取ってくる
419 +- char funcstr[BUFSIZ];
420 +- char* pt = funcstr;
421 +-
422 +- // スタンドアウト (反転)
423 +- so = tgetstr("so", &pt);
424 +- adjstr(so);
425 +- se = tgetstr("se", &pt);
426 +- adjstr(se);
427 +-
428 +- // アンダーライン (下線)
429 +- us = tgetstr("us", &pt);
430 +- adjstr(us);
431 +- ue = tgetstr("ue", &pt);
432 +- adjstr(ue);
433 +-
434 +- // カーソル位置の保存,保存した位置への復帰
435 +- sc = tgetstr("sc", &pt);
436 +- adjstr(sc);
437 +- rc = tgetstr("rc", &pt);
438 +- adjstr(rc);
439 +-
440 +- // カーソル位置から行の最後までを削除する
441 +- ce = tgetstr("ce", &pt);
442 +- adjstr(ce);
443 +-
444 +- // ステータスラインを持っているかどうか
445 +- hs = tgetflag("hs");
446 +-
447 +- // kon と jfbterm ではステータスラインを使わない
448 +- if (strcmp(term, "kon") == 0)
449 +- hs = 0;
450 +- if (strcmp(term, "jfbterm") == 0)
451 +- hs = 0;
452 +-
453 +- // ステータスラインへ移動,戻る
454 +- if (hs) {
455 +- ts = tgoto(tgetstr("ts", &pt), 0, 0);
456 +- adjstr(ts);
457 +- fs = tgetstr("fs", &pt);
458 +- adjstr(fs);
459 +- ds = tgetstr("ds", &pt);
460 +- adjstr(ds);
461 +- if (ds) {
462 +- strcat(endstr, ds);
463 +- strcat(endstr, ce);
464 +- }
465 +- }
466 +- else {
467 +- char* cs = tgoto(tgetstr("cs", &pt), tgetnum("li") - 2, 0);
468 +- adjstr(cs);
469 +- if (cs) {
470 +- write(1, ce, strlen(ce));
471 +- write(1, cs, strlen(cs));
472 +- }
473 +- char* cl = tgetstr("cl", &pt);
474 +- adjstr(cl);
475 +- if (cl) {
476 +- write(1, cl, strlen(cl));
477 +- strcat(endstr, cl);
478 +- }
479 +- ds = tgoto(tgetstr("cs", &pt), tgetnum("li") - 1, 0);
480 +- adjstr(ds);
481 +- if (ds) {
482 +- strcat(endstr, ds);
483 +- strcat(endstr, ce);
484 +- }
485 +- ts = tgoto(tgetstr("cm", &pt), 0, tgetnum("li") - 1);
486 +- adjstr(ts);
487 +- fs = rc;
488 +- }
489 ++ gettermcap();
490 +
491 + // 開始と終了のメッセージ
492 + if (amsg && ac == 1)
493 +@@ -209,21 +137,75 @@
494 + done();
495 + }
496 +
497 +-// termcap エントリからパディングを削除する
498 + void
499 +-Pty::adjstr(char* str)
500 ++Pty::gettermcap()
501 + {
502 +- char* sp = strdup(str);
503 +- char* p = sp;
504 +- while (*p != '\0') {
505 +- if (strncmp(p, "$<", 2) == 0) {
506 +- while (*p != '>')
507 +- p++;
508 +- *p = '\0';
509 ++ // 環境変数 TERM のエントリを取得
510 ++ char* term = getenv("TERM");
511 ++ if (!term)
512 ++ term = "vt100";
513 ++ int ret = tgetent(buf, term);
514 ++ if (ret != 1) {
515 ++ tgetent(buf, "vt100");
516 ++ putenv("TERM=vt100");
517 ++ }
518 ++
519 ++ // termcap から装飾用のエントリを取ってくる
520 ++ char* pt = funcstr;
521 ++
522 ++ // スタンドアウト (反転)
523 ++ so = tgetstr("so", &pt);
524 ++ se = tgetstr("se", &pt);
525 ++
526 ++ // アンダーライン (下線)
527 ++ us = tgetstr("us", &pt);
528 ++ ue = tgetstr("ue", &pt);
529 ++
530 ++ // カーソル位置の保存,保存した位置への復帰
531 ++ sc = tgetstr("sc", &pt);
532 ++ rc = tgetstr("rc", &pt);
533 ++
534 ++ // カーソル位置から行の最後までを削除する
535 ++ ce = tgetstr("ce", &pt);
536 ++
537 ++ // ステータスラインを持っているかどうか
538 ++ hs = tgetflag("hs");
539 ++
540 ++ // kon と jfbterm ではステータスラインを使わない
541 ++ if (strcmp(term, "kon") == 0)
542 ++ hs = 0;
543 ++ if (strcmp(term, "jfbterm") == 0)
544 ++ hs = 0;
545 ++
546 ++ // ステータスラインへ移動,戻る
547 ++ if (hs) {
548 ++ ts = tgoto(tgetstr("ts", &pt), 0, 0);
549 ++ fs = tgetstr("fs", &pt);
550 ++ ds = tgetstr("ds", &pt);
551 ++ if (ds) {
552 ++ strcat(endstr, ds);
553 ++ strcat(endstr, ce);
554 + }
555 +- *str++ = *p++;
556 + }
557 +- free(sp);
558 ++ else {
559 ++ char* cs = tgoto(tgetstr("cs", &pt), tgetnum("li") - 2, 0);
560 ++ if (cs) {
561 ++ write(1, ce, strlen(ce));
562 ++ write(1, cs, strlen(cs));
563 ++ }
564 ++ char* cl = tgetstr("cl", &pt);
565 ++ if (cl) {
566 ++ write(1, cl, strlen(cl));
567 ++ strcat(endstr, cl);
568 ++ }
569 ++ ds = tgoto(tgetstr("cs", &pt), tgetnum("li") - 1, 0);
570 ++ if (ds) {
571 ++ strcat(endstr, ds);
572 ++ strcat(endstr, ce);
573 ++ }
574 ++ ts = tgoto(tgetstr("cm", &pt), 0, tgetnum("li") - 1);
575 ++ fs = rc;
576 ++ }
577 + }
578 +
579 + // マスタデバイスを取る
580 +@@ -327,34 +309,7 @@
581 + {
582 + signal(SIGWINCH, SIG_IGN);
583 +
584 +- // ステータスラインが使えない場合は cs/ds/ts を取り直す
585 +- if (!hs) {
586 +- char buff[BUFSIZ];
587 +- char* term = getenv("TERM");
588 +- tgetent(buff, term);
589 +- char funcstr[BUFSIZ];
590 +- char* pt = funcstr;
591 +- char* cs = tgoto(tgetstr("cs", &pt), tgetnum("li") - 2, 0);
592 +- adjstr(cs);
593 +- if (cs) {
594 +- write(1, ce, strlen(ce));
595 +- write(1, cs, strlen(cs));
596 +- }
597 +- char* cl = tgetstr("cl", &pt);
598 +- adjstr(cl);
599 +- if (cl) {
600 +- write(1, cl, strlen(cl));
601 +- strcpy(endstr, cl);
602 +- }
603 +- ds = tgoto(tgetstr("cs", &pt), tgetnum("li") - 1, 0);
604 +- adjstr(ds);
605 +- if (ds) {
606 +- strcat(endstr, ds);
607 +- strcat(endstr, ce);
608 +- }
609 +- ts = tgoto(tgetstr("cm", &pt), 0, tgetnum("li") - 1);
610 +- adjstr(ts);
611 +- }
612 ++ gettermcap();
613 +
614 + // ウィンドウのサイズを設定し直す (stty -a の 行数/桁数 等)
615 + struct winsize win;
616 +--- a/pty.H
617 ++++ b/pty.H
618 +@@ -50,18 +50,21 @@
619 + int rfd;
620 + static int wfd;
621 + private:
622 +- static void adjstr(char* str);
623 ++ static char buf[BUFSIZ];
624 ++ static char funcstr[BUFSIZ];
625 ++private:
626 ++ static void gettermcap();
627 + protected:
628 + static int hs;
629 +- char* so;
630 +- char* se;
631 +- char* us;
632 +- char* ue;
633 +- char* sc;
634 +- char* rc;
635 ++ static char* so;
636 ++ static char* se;
637 ++ static char* us;
638 ++ static char* ue;
639 ++ static char* sc;
640 ++ static char* rc;
641 + static char* ce;
642 + static char* ts;
643 +- char* fs;
644 ++ static char* fs;
645 + static char* ds;
646 + private:
647 + static void finish();
648
649 diff --git a/app-i18n/canfep/metadata.xml b/app-i18n/canfep/metadata.xml
650 new file mode 100644
651 index 000000000..37185a78f
652 --- /dev/null
653 +++ b/app-i18n/canfep/metadata.xml
654 @@ -0,0 +1,9 @@
655 +<?xml version="1.0" encoding="UTF-8"?>
656 +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
657 +<pkgmetadata>
658 + <maintainer type="person">
659 + <description>co-maintainers welcome</description>
660 + <name>Alessandro Barbieri</name>
661 + <email>lssndrbarbieri@×××××.com</email>
662 + </maintainer>
663 +</pkgmetadata>