From 8376ef56580626e9c0f796d5b85b53a0a1c7d5f5 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sat, 14 Jul 2018 21:03:06 +0100 Subject: gentoo resync : 14.07.2018 --- app-editors/fte/files/fte-slang.patch | 131 ++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 app-editors/fte/files/fte-slang.patch (limited to 'app-editors/fte/files/fte-slang.patch') diff --git a/app-editors/fte/files/fte-slang.patch b/app-editors/fte/files/fte-slang.patch new file mode 100644 index 000000000000..50470bd6b7ef --- /dev/null +++ b/app-editors/fte/files/fte-slang.patch @@ -0,0 +1,131 @@ +diff -Nru /tmp/wgHyQebD7F/fte-0.50.0/src/con_slang.cpp /tmp/PQJo4szkUb/fte-0.50.0/src/con_slang.cpp +--- a/fte-0.50.0/src/con_slang.cpp 2005-12-28 16:53:24.000000000 +0100 ++++ b/fte-0.50.0/src/con_slang.cpp 2006-06-05 06:02:37.000000000 +0200 +@@ -99,12 +99,14 @@ + '+' + }; + +-static char raw_dchs[sizeof(slang_dchs)]; ++static SLsmg_Char_Type raw_dchs[sizeof(slang_dchs)]; + +-static unsigned char ftesl_get_dch(char raw) ++static unsigned char ftesl_get_dch(SLsmg_Char_Type raw) + { + for (int i = 0; i < (int) sizeof(slang_dchs); i++) +- if (raw_dchs[i] == raw) ++ if (raw_dchs[i].nchars == raw.nchars ++ && !memcmp(raw_dchs[i].wchars, raw.wchars, ++ raw.nchars * sizeof(*raw.wchars))) + return DCH_SLANG_C1 + i; + return DCH_SLANG_EOL; + } +@@ -215,7 +217,6 @@ + int ConInit(int /*XSize */ , int /*YSize */ ) + { + unsigned i; +- unsigned short linebuf[sizeof(slang_dchs)]; + + SLtt_get_terminfo(); + +@@ -246,9 +247,7 @@ + SLsmg_write_nchars(slang_dchs, sizeof(slang_dchs)); + + SLsmg_gotorc(0, 0); +- SLsmg_read_raw((SLsmg_Char_Type*)linebuf, sizeof(slang_dchs)); +- for (i = 0; i < sizeof(slang_dchs); i++) +- raw_dchs[i] = (linebuf[i]) & 0xff; ++ SLsmg_read_raw(raw_dchs, sizeof(slang_dchs)); + + SLsmg_set_char_set(0); + +@@ -361,14 +360,14 @@ + return 0; + } + +-static int ConPutBoxRaw(int X, int Y, int W, int H, unsigned short *box) ++static int ConPutBoxRaw(int X, int Y, int W, int H, SLsmg_Char_Type *box) + { + int CurX, CurY; + + ConQueryCursorPos(&CurX, &CurY); + while (H > 0) { + SLsmg_gotorc(Y++, X); +- SLsmg_write_raw((SLsmg_Char_Type*)box, W); ++ SLsmg_write_raw(box, W); + box += W; + H--; + } +@@ -381,35 +380,51 @@ + int ConGetBox(int X, int Y, int W, int H, PCell Cell) + { + int CurX, CurY, i; +- char ch; ++ SLsmg_Char_Type *linebuf; ++ ++ linebuf = new SLsmg_Char_Type [W]; + + ConQueryCursorPos(&CurX, &CurY); + while (H > 0) { + SLsmg_gotorc(Y++, X); +- SLsmg_read_raw((SLsmg_Char_Type*)Cell, W); +- for (i = 0; i < W; i++) +- if (Cell[i] & 0x8000) { +- ch = Cell[i] & 0xff; +- Cell[i] &= 0x7f00; +- Cell[i] |= ftesl_get_dch(ch); +- } ++ SLsmg_read_raw(linebuf, W); ++ for (i = 0; i < W; i++) { ++ if (linebuf[i].color & SLSMG_ACS_MASK) ++ Cell[i] = ftesl_get_dch(linebuf[i]); ++ else ++ /* ++ * FIXME: Handle UTF-8 -- way beyond a quick-and-dirty ++ * fix. --MV ++ */ ++ Cell[i] = SLSMG_EXTRACT_CHAR(linebuf[i]); ++ /* ++ * FIXME: This preserves only 7 out of 15 bits of color. ++ * Fortunately, we're dealing with color handles rather than ++ * colors themselves -- S-Lang jumps through an extra hoop to ++ * map these to color data. As long as we use less than 127 ++ * different colors, things should be OK. I think. --MV ++ */ ++ Cell[i] |= (linebuf[i].color & 0x7f) << 8; ++ } + Cell += W; + H--; + } + ConSetCursorPos(CurX, CurY); + ++ delete [] (linebuf); ++ + return 0; + + } + +-static int ConGetBoxRaw(int X, int Y, int W, int H, unsigned short *box) ++static int ConGetBoxRaw(int X, int Y, int W, int H, SLsmg_Char_Type *box) + { + int CurX, CurY; + + ConQueryCursorPos(&CurX, &CurY); + while (H > 0) { + SLsmg_gotorc(Y++, X); +- SLsmg_read_raw((SLsmg_Char_Type*)box, W); ++ SLsmg_read_raw(box, W); + box += W; + H--; + } +@@ -451,9 +466,9 @@ + + int ConScroll(int Way, int X, int Y, int W, int H, TAttr Fill, int Count) + { +- unsigned short *box; ++ SLsmg_Char_Type *box; + +- box = new unsigned short [W * H]; ++ box = new SLsmg_Char_Type [W * H]; + + TCell fill = (((unsigned) Fill) << 8) | ' '; + -- cgit v1.2.3