From 8deed24e4ebedf99c2a33d8d295535c9216a2029 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 12:54:10 +0200 Subject: [PATCH] slang: Update to 2.2.4 --- config/rootfiles/common/slang | 156 +++- lfs/slang | 22 +- src/patches/slang-1.4.5-utf8-segv.patch | 15 - src/patches/slang-debian-utf8.patch | 917 ------------------------ src/patches/slang-utf8-acs.patch | 417 ----------- src/patches/slang-utf8-fix.patch | 34 - 6 files changed, 145 insertions(+), 1416 deletions(-) delete mode 100644 src/patches/slang-1.4.5-utf8-segv.patch delete mode 100644 src/patches/slang-debian-utf8.patch delete mode 100644 src/patches/slang-utf8-acs.patch delete mode 100644 src/patches/slang-utf8-fix.patch diff --git a/config/rootfiles/common/slang b/config/rootfiles/common/slang index c6afc2c797..0ebef78c70 100644 --- a/config/rootfiles/common/slang +++ b/config/rootfiles/common/slang @@ -1,20 +1,140 @@ -#usr/doc -#usr/doc/slang -#usr/doc/slang/COPYING -#usr/doc/slang/COPYING.ART -#usr/doc/slang/COPYING.GPL -#usr/doc/slang/COPYRIGHT -#usr/doc/slang/changes.txt -#usr/doc/slang/cref.txt -#usr/doc/slang/cslang.txt -#usr/doc/slang/slang.txt -#usr/doc/slang/slangdoc.html -#usr/doc/slang/slangfun.txt +#etc/slsh.rc +#usr/bin/slsh #usr/include/slang.h #usr/include/slcurses.h -#usr/lib/libslang-utf8.a -usr/lib/libslang-utf8.so -usr/lib/libslang-utf8.so.1 -usr/lib/libslang-utf8.so.1.4.9 -#usr/lib/libslang.a -usr/lib/libslang.so +#usr/lib/libslang.so +usr/lib/libslang.so.2 +usr/lib/libslang.so.2.2.4 +#usr/lib/pkgconfig/slang.pc +#usr/lib/slang +#usr/lib/slang/v2 +#usr/lib/slang/v2/modules +usr/lib/slang/v2/modules/csv-module.so +usr/lib/slang/v2/modules/fcntl-module.so +usr/lib/slang/v2/modules/fork-module.so +usr/lib/slang/v2/modules/iconv-module.so +usr/lib/slang/v2/modules/pcre-module.so +usr/lib/slang/v2/modules/png-module.so +usr/lib/slang/v2/modules/rand-module.so +usr/lib/slang/v2/modules/select-module.so +usr/lib/slang/v2/modules/slsmg-module.so +usr/lib/slang/v2/modules/socket-module.so +usr/lib/slang/v2/modules/sysconf-module.so +usr/lib/slang/v2/modules/termios-module.so +usr/lib/slang/v2/modules/varray-module.so +usr/lib/slang/v2/modules/zlib-module.so +#usr/share/doc/slang +#usr/share/doc/slang/v2 +#usr/share/doc/slang/v2/COPYING +#usr/share/doc/slang/v2/changes.txt +#usr/share/doc/slang/v2/cref.txt +#usr/share/doc/slang/v2/cslang.txt +#usr/share/doc/slang/v2/slang.txt +#usr/share/doc/slang/v2/slangdoc.html +#usr/share/doc/slang/v2/slangfun.txt +#usr/share/doc/slsh +#usr/share/doc/slsh/html +#usr/share/doc/slsh/html/slshfun-1.html +#usr/share/doc/slsh/html/slshfun-2.html +#usr/share/doc/slsh/html/slshfun-3.html +#usr/share/doc/slsh/html/slshfun-4.html +#usr/share/doc/slsh/html/slshfun-5.html +#usr/share/doc/slsh/html/slshfun-6.html +#usr/share/doc/slsh/html/slshfun-7.html +#usr/share/doc/slsh/html/slshfun-8.html +#usr/share/doc/slsh/html/slshfun-9.html +#usr/share/doc/slsh/html/slshfun.html +#usr/share/man/man1/slsh.1 +#usr/share/slsh +#usr/share/slsh/arrayfuns.sl +#usr/share/slsh/autoload.sl +#usr/share/slsh/cmaps +#usr/share/slsh/cmaps/cool.map +#usr/share/slsh/cmaps/coolwarm.map +#usr/share/slsh/cmaps/copper.map +#usr/share/slsh/cmaps/drywet.map +#usr/share/slsh/cmaps/ds9b.map +#usr/share/slsh/cmaps/ds9sls.map +#usr/share/slsh/cmaps/gebco.map +#usr/share/slsh/cmaps/globe.map +#usr/share/slsh/cmaps/gray.map +#usr/share/slsh/cmaps/haxby.map +#usr/share/slsh/cmaps/hot.map +#usr/share/slsh/cmaps/jet.map +#usr/share/slsh/cmaps/no_green.map +#usr/share/slsh/cmaps/ocean.map +#usr/share/slsh/cmaps/polar.map +#usr/share/slsh/cmaps/rainbow.map +#usr/share/slsh/cmaps/red2green.map +#usr/share/slsh/cmaps/relief.map +#usr/share/slsh/cmaps/sealand.map +#usr/share/slsh/cmaps/seis.map +#usr/share/slsh/cmaps/split.map +#usr/share/slsh/cmaps/topo.map +#usr/share/slsh/cmaps/wysiwyg.map +#usr/share/slsh/cmdopt.sl +#usr/share/slsh/csv.sl +#usr/share/slsh/fcntl.sl +#usr/share/slsh/fork.sl +#usr/share/slsh/glob.sl +#usr/share/slsh/help +#usr/share/slsh/help/arrayfuns.hlp +#usr/share/slsh/help/cmdopt.hlp +#usr/share/slsh/help/csvfuns.hlp +#usr/share/slsh/help/forkfuns.hlp +#usr/share/slsh/help/glob.hlp +#usr/share/slsh/help/onigfuns.hlp +#usr/share/slsh/help/pcrefuns.hlp +#usr/share/slsh/help/pngfuns.hlp +#usr/share/slsh/help/print.hlp +#usr/share/slsh/help/process.hlp +#usr/share/slsh/help/profile.hlp +#usr/share/slsh/help/randfuns.hlp +#usr/share/slsh/help/readascii.hlp +#usr/share/slsh/help/require.hlp +#usr/share/slsh/help/setfuns.hlp +#usr/share/slsh/help/slsmg.hlp +#usr/share/slsh/help/sockfuns.hlp +#usr/share/slsh/help/structfuns.hlp +#usr/share/slsh/iconv.sl +#usr/share/slsh/local-packages +#usr/share/slsh/onig.sl +#usr/share/slsh/pcre.sl +#usr/share/slsh/png.sl +#usr/share/slsh/print.sl +#usr/share/slsh/process.sl +#usr/share/slsh/profile.sl +#usr/share/slsh/rand.sl +#usr/share/slsh/readascii.sl +#usr/share/slsh/require.sl +#usr/share/slsh/rline +#usr/share/slsh/rline/complete.sl +#usr/share/slsh/rline/editfuns.sl +#usr/share/slsh/rline/editor.sl +#usr/share/slsh/rline/emacskeys.sl +#usr/share/slsh/rline/history.sl +#usr/share/slsh/rline/histsrch.sl +#usr/share/slsh/rline/slrline.rc +#usr/share/slsh/rline/vikeys.sl +#usr/share/slsh/scripts +#usr/share/slsh/scripts/jpegsize +#usr/share/slsh/scripts/lsrpm +#usr/share/slsh/scripts/sldb +#usr/share/slsh/scripts/slprof +#usr/share/slsh/scripts/slstkchk +#usr/share/slsh/scripts/svnsh +#usr/share/slsh/select.sl +#usr/share/slsh/setfuns.sl +#usr/share/slsh/sldb.sl +#usr/share/slsh/sldbcore.sl +#usr/share/slsh/sldbsock.sl +#usr/share/slsh/slshhelp.sl +#usr/share/slsh/slshrl.sl +#usr/share/slsh/slsmg.sl +#usr/share/slsh/socket.sl +#usr/share/slsh/stkcheck.sl +#usr/share/slsh/structfuns.sl +#usr/share/slsh/sysconf.sl +#usr/share/slsh/termios.sl +#usr/share/slsh/varray.sl +#usr/share/slsh/zlib.sl diff --git a/lfs/slang b/lfs/slang index e6c8cc88d3..55590f7cb2 100644 --- a/lfs/slang +++ b/lfs/slang @@ -24,10 +24,10 @@ include Config -VER = 1.4.9 +VER = 2.2.4 THISAPP = slang-$(VER) -DL_FILE = $(THISAPP).tar.bz2 +DL_FILE = $(THISAPP).tar.gz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 4fbb1a7f1257e065ca830deefe13d350 +$(DL_FILE)_MD5 = 86cd8689cd71e281b4720fef8453ceeb install : $(TARGET) @@ -69,17 +69,9 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-debian-utf8.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-utf8-acs.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-1.4.5-utf8-segv.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-utf8-fix.patch - perl -p -i -e 's/(ELF_CFLAGS=\"[^\"]*)-O2([^\"]*\".*)/$1'"$(CFLAGS)"' $2/gs' configure - cd $(DIR_APP) && ./configure --prefix=/usr - cd $(DIR_APP) && make elf all - cd $(DIR_APP) && make install-elf - ln -sf libslang-utf8.so.1.4.9 /usr/lib/libslang-utf8.so.1 - ln -sf libslang-utf8.so /usr/lib/libslang.so - ln -sf libslang-utf8.a /usr/lib/libslang.a + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/etc + cd $(DIR_APP) && make #$(MAKETUNING) + cd $(DIR_APP) && make install @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/patches/slang-1.4.5-utf8-segv.patch b/src/patches/slang-1.4.5-utf8-segv.patch deleted file mode 100644 index f8df90a4e9..0000000000 --- a/src/patches/slang-1.4.5-utf8-segv.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -ru slang-1.4.5/src/slsmg.c slang-1.4.5-new/src/slsmg.c ---- slang-1.4.5/src/slsmg.c 2002-07-25 00:09:00.000000000 -0400 -+++ slang-1.4.5-new/src/slsmg.c 2002-07-25 00:04:02.000000000 -0400 -@@ -369,7 +369,10 @@ - - max_len = Start_Col + Screen_Cols; - len = This_Col; -- p = SL_Screen[This_Row - Start_Row].neew + len - Start_Col; -+ -+ -+ p = SL_Screen[This_Row - Start_Row].neew; -+ if (len > Start_Col) p += len - Start_Col; - prev = 0; - - for (i = 0; i < n; i++, str) { diff --git a/src/patches/slang-debian-utf8.patch b/src/patches/slang-debian-utf8.patch deleted file mode 100644 index 62eb67056b..0000000000 --- a/src/patches/slang-debian-utf8.patch +++ /dev/null @@ -1,917 +0,0 @@ ---- slang-1.4.4.orig/src/slinclud.h -+++ slang-1.4.4/src/slinclud.h -@@ -23,4 +23,12 @@ - # include - #endif - -+#define UTF8 1 -+ -+#ifdef UTF8 -+#include -+#include -+#endif /* UTF8 */ -+ -+ - #endif /* _SLANG_INCLUDE_H_ */ ---- slang-1.4.4.orig/src/slang.h -+++ slang-1.4.4/src/slang.h -@@ -1239,10 +1239,20 @@ - extern int SLtt_Msdos_Cheap_Video; - #endif - -+#define UTF8 1 -+ -+#ifdef UTF8 -+typedef int SLsmg_Char_Type; -+#define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFFFFFF) -+#define SLSMG_EXTRACT_COLOR(x) (((x)>>24)&0xFF) -+#define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(wchar_t)(ch))|((color)<<24)) -+#define SLSMG_NOCHAR 1 -+#else - typedef unsigned short SLsmg_Char_Type; - #define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFF) - #define SLSMG_EXTRACT_COLOR(x) (((x)>>8)&0xFF) - #define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(unsigned char)(ch))|((color)<<8)) -+#endif /* UTF8 */ - - extern int SLtt_flush_output (void); - extern void SLtt_set_scroll_region(int, int); -@@ -1334,7 +1342,11 @@ - - /*{{{ SLsmg Screen Management Functions */ - -+#ifdef UTF8 -+extern void SLsmg_fill_region (int, int, unsigned int, unsigned int, wchar_t); -+#else - extern void SLsmg_fill_region (int, int, unsigned int, unsigned int, unsigned char); -+#endif /* UTF8 */ - extern void SLsmg_set_char_set (int); - #ifndef IBMPC_SYSTEM - extern int SLsmg_Scroll_Hash_Border; -@@ -1351,7 +1363,12 @@ - extern void SLsmg_vprintf (char *, va_list); - extern void SLsmg_write_string (char *); - extern void SLsmg_write_nstring (char *, unsigned int); -+#ifdef UTF8 -+extern void SLsmg_write_char (wchar_t); -+extern void SLsmg_write_nwchars (wchar_t *, unsigned int); -+#else - extern void SLsmg_write_char (char); -+#endif /* UTF8 */ - extern void SLsmg_write_nchars (char *, unsigned int); - extern void SLsmg_write_wrapped_string (char *, int, int, unsigned int, unsigned int, int); - extern void SLsmg_cls (void); ---- slang-1.4.4.orig/src/slcurses.c -+++ slang-1.4.4/src/slcurses.c -@@ -440,20 +440,130 @@ - - static int do_newline (SLcurses_Window_Type *w) - { -- w->_curx = 0; -+ /* w->_curx = 0; */ - w->_cury += 1; - if (w->_cury >= w->scroll_max) - { - w->_cury = w->scroll_max - 1; -- if (w->scroll_ok) -+ if (w->scroll_ok) { -+ w->_curx = 0; - SLcurses_wscrl (w, 1); -+ } - } -+ else -+ w->_curx = 0; -+ -+ return 0; -+} -+ -+#ifdef UTF8 -+static int SLcurses_waddch1 (SLcurses_Window_Type *win, -+ wchar_t ch, int color) -+{ -+ SLsmg_Char_Type *b, *bmin, *bmax, *c; -+ int k; -+ -+ if (win == NULL) return -1; -+ -+ if (win->_cury >= win->nrows) -+ { -+ /* Curses seems to move current postion to top of window. */ -+ win->_cury = win->_curx = 0; -+ return -1; -+ } -+ -+ win->modified = 1; -+ -+ if (ch < ' ') -+ { -+ if (ch == '\n') -+ { -+ SLcurses_wclrtoeol (win); -+ return do_newline (win); -+ } -+ -+ if (ch == '\r') -+ { -+ win->_curx = 0; -+ return 0; -+ } -+ -+ if (ch == '\b') -+ { -+ if (win->_curx > 0) -+ win->_curx--; -+ -+ return 0; -+ } -+ -+ /* HACK HACK!!!! */ -+ if (ch == '\t') ch = ' '; -+ } -+ -+ k = wcwidth(ch); -+ -+ if (!k) -+ return 0; /* ignore combining characters for now */ -+ -+ if (k > win->ncols) -+ return 0; /* character wider than window */ -+ -+ if (win->_curx + k > win->ncols) { -+ if (win->_curx < win->ncols) -+ SLcurses_wclrtoeol(win); -+ do_newline (win); -+ } -+ -+ bmin = win->lines[win->_cury]; -+ b = bmin + win->_curx; -+ bmax = bmin + win->ncols; -+ -+ /* Remove overwritten chars to left */ -+ if (*b == SLSMG_NOCHAR) { -+ for (c = b - 1; c >= bmin && *c == SLSMG_NOCHAR; c--) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); -+ if (c >= bmin) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); -+ } -+ -+ *b = SLSMG_BUILD_CHAR(ch,color); -+ win->_curx += k; -+ while (--k > 0) -+ *++b = SLSMG_NOCHAR; -+ -+ /* Remove overwritten chars to right */ -+ for (c = b + 1; c < bmax && *c == SLSMG_NOCHAR; c++) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); - - return 0; - } - - int SLcurses_waddch (SLcurses_Window_Type *win, SLtt_Char_Type attr) - { -+ SLsmg_Char_Type ch, color; -+ -+ if (win == NULL) return -1; -+ -+ ch = SLSMG_EXTRACT_CHAR(attr); -+ -+ if (attr == ch) -+ color = win->color; -+ else -+ { -+ /* hack to pick up the default color for graphics chars */ -+ if (((attr & A_COLOR) == 0) && ((attr & A_ALTCHARSET) != 0)) -+ { -+ /* FIXME: priority=medium: Use SLSMG_?? instead of << */ -+ attr |= win->color << 8; -+ } -+ color = map_attr_to_object (attr); -+ } -+ -+ return SLcurses_waddch1 (win, ch, color); -+} -+#else -+int SLcurses_waddch (SLcurses_Window_Type *win, SLtt_Char_Type attr) -+{ - SLsmg_Char_Type *b, ch; - SLsmg_Char_Type color; - -@@ -518,6 +628,7 @@ - - return 0; - } -+#endif /* UTF8 */ - - int SLcurses_wnoutrefresh (SLcurses_Window_Type *w) - { -@@ -577,7 +688,11 @@ - - int SLcurses_wclrtoeol (SLcurses_Window_Type *w) - { -+#ifdef UTF8 -+ SLsmg_Char_Type *b, *bmin, *bmax, *c; -+#else - SLsmg_Char_Type *b, *bmax; -+#endif /* UTF8 */ - SLsmg_Char_Type blank; - - if (w == NULL) return -1; -@@ -588,9 +703,23 @@ - - blank = SLSMG_BUILD_CHAR(' ',w->color); - -+#ifdef UTF8 -+ bmin = w->lines[w->_cury]; -+ b = bmin + w->_curx; -+ bmax = bmin + w->ncols; -+ -+ /* Remove overwritten chars to left */ -+ if (b < bmax && *b == SLSMG_NOCHAR) { -+ for (c = b - 1; c >= bmin && *c == SLSMG_NOCHAR; c--) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); -+ if (c >= bmin) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); -+ } -+#else - b = w->lines[w->_cury]; - bmax = b + w->ncols; - b += w->_curx; -+#endif /* UTF8 */ - - while (b < bmax) *b++ = blank; - return 0; -@@ -677,6 +806,34 @@ - return 0; - } - -+#ifdef UTF8 -+/* Note: if len is < 0, entire string will be used. -+ */ -+int SLcurses_waddnstr (SLcurses_Window_Type *w, char *str, int len) -+{ -+ size_t k; -+ wchar_t wc; -+ mbstate_t mbstate; -+ -+ if ((w == NULL) -+ || (str == NULL)) -+ return -1; -+ -+ if (len < 0) -+ len = (char *)(-1) - str; -+ -+ memset (&mbstate, 0, sizeof (mbstate)); -+ while ((k = mbrtowc (&wc, str, len, &mbstate)) && -+ k != (size_t)(-1) && -+ k != (size_t)(-2)) -+ { -+ SLcurses_waddch1 (w, wc, w->color); -+ str += k; -+ len -= k; -+ } -+ return k; -+} -+#else - /* Note: if len is < 0, entire string will be used. - */ - int SLcurses_waddnstr (SLcurses_Window_Type *w, char *str, int len) -@@ -758,6 +915,7 @@ - - return 0; - } -+#endif /* UTF8 */ - - /* This routine IS NOT CORRECT. It needs to compute the proper overlap - * and copy accordingly. Here, I just assume windows are same size. -@@ -852,12 +1010,36 @@ - - int SLcurses_wdelch (SLcurses_Window_Type *w) - { -+#ifdef UTF8 -+ SLsmg_Char_Type *p, *p1, *pmin, *pmax, *q; -+#else - SLsmg_Char_Type *p, *p1, *pmax; -+#endif /* UTF8 */ - -+#ifdef UTF8 -+ pmin = w->lines[w->_cury]; -+ p = pmin + w->_curx; -+ pmax = pmin + w->ncols; -+ -+ /* Remove overwritten chars to left */ -+ if (p < pmax && *p == SLSMG_NOCHAR) { -+ for (q = p - 1; q >= pmin && *q == SLSMG_NOCHAR; q--) -+ *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q)); -+ if (q >= pmin) -+ *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q)); -+ } -+ -+ /* Remove overwritten chars to right */ -+ for (q = p + 1; q < pmax && *q == SLSMG_NOCHAR; q++) -+ *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q)); -+ -+ p1 = p + 1; -+#else - p = w->lines[w->_cury]; - pmax = p + w->ncols; - p += w->_curx; - p1 = p + 1; -+#endif /* UTF8 */ - - while (p1 < pmax) - { -@@ -884,12 +1066,12 @@ - - while (pmax > p) - { -- *pmax = *p1; -+ *pmax = *p1; /* Doesn't this assign beyond the end of the line? */ - pmax = p1; - p1--; - } - -- if (p < pmax) -+ if (p < pmax) /* How could it be? */ - *p = SLSMG_BUILD_CHAR(ch, w->color); - - w->modified = 1; ---- slang-1.4.4.orig/src/slsmg.c -+++ slang-1.4.4/src/slsmg.c -@@ -225,6 +225,38 @@ - SLsmg_write_nchars (str, strlen (str)); - } - -+#ifdef UTF8 -+void SLsmg_write_nstring (char *str, unsigned int n) -+{ -+ char blank = ' '; -+ mbstate_t mbstate; -+ -+ /* Avoid a problem if a user accidently passes a negative value */ -+ if ((int) n < 0) -+ return; -+ -+ if (str != NULL) -+ { -+ wchar_t wc; -+ size_t k; -+ int w; -+ -+ memset (&mbstate, 0, sizeof (mbstate)); -+ while ((k = mbrtowc (&wc, str, MB_LEN_MAX, &mbstate)) && -+ k != (size_t)(-1) && -+ k != (size_t)(-2)) -+ { -+ w = wcwidth(wc); -+ if (w < 0 || w > n) -+ break; -+ SLsmg_write_nwchars (&wc, 1); -+ str += k; -+ n -= w; -+ } -+ } -+ while (n-- > 0) SLsmg_write_nchars (&blank, 1); -+} -+#else - void SLsmg_write_nstring (char *str, unsigned int n) - { - unsigned int width; -@@ -243,7 +275,11 @@ - } - while (width++ < n) SLsmg_write_nchars (&blank, 1); - } -+#endif /* UTF8 */ - -+#ifdef UTF8 -+/* FIXME: This function not UTF8'd yet - Edmund */ -+#endif /* UTF8 */ - void SLsmg_write_wrapped_string (char *s, int r, int c, - unsigned int dr, unsigned int dc, - int fill) -@@ -302,6 +338,123 @@ - int SLsmg_Display_Eight_Bit = 128; - #endif - -+#ifdef UTF8 -+void SLsmg_write_nwchars (wchar_t *str, unsigned int n) -+{ -+ SLsmg_Char_Type *p, *prev, *q; -+ int len, max_len, w, i; -+ wchar_t ch; -+ -+#ifndef IBMPC_SYSTEM -+ int alt_char_set_flag; -+ -+ alt_char_set_flag = ((This_Color & ALT_CHAR_FLAG) -+ && ((tt_Use_Blink_For_ACS == NULL) -+ || (*tt_Use_Blink_For_ACS == 0))); -+#endif -+ -+ if (Smg_Inited == 0) -+ return; -+ if (This_Row < Start_Row || This_Row >= Start_Row + Screen_Rows) -+ return; -+ -+ max_len = Start_Col + Screen_Cols; -+ len = This_Col; -+ p = SL_Screen[This_Row - Start_Row].neew + len - Start_Col; -+ prev = 0; -+ -+ for (i = 0; i < n; i++, str) { -+ ch = *str++; -+#ifndef IBMPC_SYSTEM -+ if (alt_char_set_flag) -+ ch = Alt_Char_Set[ch & 0x7F]; -+#endif -+ w = wcwidth(ch); -+ -+ if (w > 0) { -+ if (len + w <= max_len) { -+ if (!prev) { -+ for (q = p; *q == SLSMG_NOCHAR; q--) -+ *q = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*q)); -+ *q = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*q)); -+ } -+ prev = p; -+ *p++ = SLSMG_BUILD_CHAR(ch, This_Color), ++len; -+ for (; --w; len++, p++) -+ *p = SLSMG_NOCHAR; -+ } -+ else if (len < max_len) { -+ for (; len < max_len; len++, p++) -+ *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p)); -+ prev = 0; -+ } -+ } -+ else if (ch == '\n' && -+ SLsmg_Newline_Behavior != SLSMG_NEWLINE_PRINTABLE) { -+ SL_Screen[This_Row - Start_Row].flags |= TOUCHED; -+ for (; len < max_len && *p == SLSMG_NOCHAR; len++, p++) -+ *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p)); -+ if (!SLsmg_Newline_Behavior) -+ break; -+ ++This_Row; -+ len = 0; -+ if (This_Row == Start_Row + Screen_Rows) { -+ if (SLsmg_Newline_Behavior == SLSMG_NEWLINE_SCROLLS) -+ scroll_up(); -+ else -+ break; -+ } -+ p = SL_Screen[This_Row - Start_Row].neew; -+ prev = 0; -+ } -+ else if (ch == '\t' && (SLsmg_Tab_Width > 0)) { -+ while (len < max_len) { -+ *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p)); -+ ++p, ++len; -+ if (len % SLsmg_Tab_Width == 0) -+ break; -+ } -+ } -+ else if ((ch == 0x8) && SLsmg_Backspace_Moves) { -+ /* not implemented */ -+ } -+ else if (!w && ch) { -+ /* we could handle combining characters here, using prev */ -+ } -+ else { -+ /* we should convert control characters to printable form here */ -+ } -+ } -+ This_Col = len; -+ if (i == n) { -+ SL_Screen[This_Row - Start_Row].flags |= TOUCHED; -+ for (; len < max_len && *p == SLSMG_NOCHAR; len++, p++) -+ *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p)); -+ } -+} -+ -+void SLsmg_write_char (wchar_t wc) -+{ -+ SLsmg_write_nwchars (&wc, 1); -+} -+ -+void SLsmg_write_nchars (char *str, unsigned int n) -+{ -+ wchar_t wc; -+ size_t k; -+ mbstate_t mbstate; -+ -+ memset (&mbstate, 0, sizeof (mbstate)); -+ while ((k = mbrtowc (&wc, str, n, &mbstate)) && -+ k != (size_t)(-1) && -+ k != (size_t)(-2)) -+ { -+ SLsmg_write_nwchars (&wc, 1); -+ str += k; -+ n -= k; -+ } -+} -+#else - void SLsmg_write_nchars (char *str, unsigned int n) - { - register SLsmg_Char_Type *p, old, neew, color; -@@ -475,6 +628,7 @@ - { - SLsmg_write_nchars (&ch, 1); - } -+#endif /* UTF8 */ - - static int Cls_Flag; - -@@ -891,6 +1045,10 @@ - This_Color = color; - } - -+#ifdef UTF8 -+ /* FIXME: We should convert broken wide characters to spaces -+ before calling smart_puts */ -+#endif /* UTF8 */ - SL_Screen[i].old[Screen_Cols] = 0; - SL_Screen[i].neew[Screen_Cols] = 0; - -@@ -1334,9 +1492,16 @@ - This_Row = r; This_Col = c; - } - -+#ifdef UTF8 -+void SLsmg_fill_region (int r, int c, unsigned int dr, unsigned int dc, wchar_t ch) -+{ -+ static wchar_t hbuf[16]; -+ int i; -+#else - void SLsmg_fill_region (int r, int c, unsigned int dr, unsigned int dc, unsigned char ch) - { - static unsigned char hbuf[16]; -+#endif /* UTF8 */ - int count; - int dcmax, rmax; - -@@ -1357,16 +1522,30 @@ - #if 0 - ch = Alt_Char_Set[ch]; - #endif -+#ifdef UTF8 -+ if (ch != hbuf[0]) -+ for (i = 0; i < 16; i++) -+ hbuf[i] = ch; -+#else - if (ch != hbuf[0]) SLMEMSET ((char *) hbuf, (char) ch, 16); -+#endif /* UTF8 */ - - for (This_Row = r; This_Row < rmax; This_Row++) - { - This_Col = c; - count = dc / 16; -+#ifdef UTF8 -+ SLsmg_write_nwchars (hbuf, dc % 16); -+#else - SLsmg_write_nchars ((char *) hbuf, dc % 16); -+#endif /* UTF8 */ - while (count-- > 0) - { -+#ifdef UTF8 -+ SLsmg_write_nwchars (hbuf, 16); -+#else - SLsmg_write_nchars ((char *) hbuf, 16); -+#endif /* UTF8 */ - } - } - -@@ -1381,14 +1560,22 @@ - void SLsmg_write_color_chars (SLsmg_Char_Type *s, unsigned int len) - { - SLsmg_Char_Type *smax, sh; -+#ifdef UTF8 -+ wchar_t buf[32], *b, *bmax; -+#else - char buf[32], *b, *bmax; -+#endif /* UTF8 */ - int color, save_color; - - if (Smg_Inited == 0) return; - - smax = s + len; - b = buf; -+#ifdef UTF8 -+ bmax = b + sizeof (buf) / sizeof (SLsmg_Char_Type); -+#else - bmax = b + sizeof (buf); -+#endif /* UTF8 */ - - save_color = This_Color; - -@@ -1412,16 +1599,28 @@ - { - if (b != buf) - { -+#ifdef UTF8 -+ SLsmg_write_nwchars (buf, (int) (b - buf)); -+#else - SLsmg_write_nchars (buf, (int) (b - buf)); -+#endif /* UTF8 */ - b = buf; - } - This_Color = color; - } -+#ifdef UTF8 -+ *b++ = SLSMG_EXTRACT_CHAR(sh); -+#else - *b++ = (char) SLSMG_EXTRACT_CHAR(sh); -+#endif /* UTF8 */ - } - - if (b != buf) -+#ifdef UTF8 -+ SLsmg_write_nwchars (buf, (unsigned int) (b - buf)); -+#else - SLsmg_write_nchars (buf, (unsigned int) (b - buf)); -+#endif /* UTF8 */ - - This_Color = save_color; - } -@@ -1473,7 +1672,11 @@ - SLsmg_set_color_in_region (int color, int r, int c, unsigned int dr, unsigned int dc) - { - int cmax, rmax; -+#ifdef UTF8 -+ int color_mask; -+#else - SLsmg_Char_Type char_mask; -+#endif /* UTF8 */ - - if (Smg_Inited == 0) return; - -@@ -1498,14 +1701,22 @@ - color = ((color & 0x7F) + Bce_Color_Offset) & 0x7F; - } - #endif -+#ifdef UTF8 -+ color_mask = 0; -+#else - color = color << 8; - - char_mask = 0xFF; -+#endif /* UTF8 */ - - #ifndef IBMPC_SYSTEM - if ((tt_Use_Blink_For_ACS == NULL) - || (0 == *tt_Use_Blink_For_ACS)) -+#ifdef UTF8 -+ color_mask = 0x80; -+#else - char_mask = 0x80FF; -+#endif /* UTF8 */ - #endif - - while (r < rmax) -@@ -1519,7 +1730,13 @@ - - while (s < smax) - { -+#ifdef UTF8 -+ *s = SLSMG_BUILD_CHAR(SLSMG_EXTRACT_CHAR(*s), -+ (SLSMG_EXTRACT_COLOR(*s) & color_mask) -+ | color); -+#else - *s = (*s & char_mask) | color; -+#endif /* UTF8 */ - s++; - } - r++; ---- slang-1.4.5/src/Makefile.in.foo 2002-06-12 19:30:09.000000000 -0400 -+++ slang-1.4.5/src/Makefile.in 2002-06-12 19:31:13.000000000 -0400 -@@ -67,7 +67,7 @@ - #--------------------------------------------------------------------------- - # There should be no need to change anything below here. - #--------------------------------------------------------------------------- --THIS_LIB = slang# -+THIS_LIB = slang-utf8# - OTHERSTUFF = - THIS_LIB_DEFINES = -DSLANG - ELF_MAJOR_VERSION = @slang_major_version@# ---- slang-1.4.9/src/sldisply.c.orig 2003-10-27 17:24:15.000000000 -0500 -+++ slang-1.4.9/src/sldisply.c 2003-10-27 17:56:25.000000000 -0500 -@@ -9,6 +9,7 @@ - - #include - #include -+#include - - #if !defined(VMS) || (__VMS_VER >= 70000000) - # include -@@ -1426,14 +1427,25 @@ - - /* Highest bit represents the character set. */ - #define COLOR_MASK 0x7F00 -+#ifdef UTF8 -+# define COLOR_OF(x) (SLSMG_EXTRACT_COLOR(x) & 0x7F) -+#else - #define COLOR_OF(x) (((x)&COLOR_MASK)>>8) -+#endif - #define CHAR_OF(x) ((x)&0x80FF) - - #if SLTT_HAS_NON_BCE_SUPPORT -+#ifdef UTF8 -+static int bce_color_eqs (SLsmg_Char_Type a, SLsmg_Char_Type b) -+{ -+ a = SLSMG_EXTRACT_COLOR(a) & 0x7F; -+ b = SLSMG_EXTRACT_COLOR(b) & 0x7F; -+#else - static int bce_color_eqs (unsigned int a, unsigned int b) - { - a = COLOR_OF(a); - b = COLOR_OF(b); -+#endif - - if (a == b) - return 1; -@@ -1459,8 +1471,14 @@ - : (Ansi_Color_Map[COLOR_OF(a)].mono == Ansi_Color_Map[COLOR_OF(b)].mono)) - #endif - -+#ifdef UTF8 -+#define CHAR_EQS(a, b) ((a) == (b)\ -+ || (SLSMG_EXTRACT_CHAR(a) == SLSMG_EXTRACT_CHAR(b)\ -+ && COLOR_EQS((a), (b)))) -+#else - #define CHAR_EQS(a, b) (((a) == (b))\ - || ((CHAR_OF(a)==CHAR_OF(b)) && COLOR_EQS(a,b))) -+#endif - - /* The whole point of this routine is to prevent writing to the last column - * and last row on terminals with automatic margins. -@@ -1488,9 +1506,58 @@ - tt_write (str, len); - } - -+#ifdef UTF8 -+/* FIXME: This duplicates the function above -+ */ -+static void write_wstring_with_care (SLsmg_Char_Type *str, unsigned int len) -+{ -+ mbstate_t mbstate; -+ -+ if (str == NULL) return; -+ -+ if (Automatic_Margins && (Cursor_r + 1 == SLtt_Screen_Rows)) -+ { -+ if (len + (unsigned int) Cursor_c >= (unsigned int) SLtt_Screen_Cols) -+ { -+ /* For now, just do not write there. Later, something more -+ * sophisticated will be implemented. -+ */ -+ if (SLtt_Screen_Cols > Cursor_c) -+ { -+ len = SLtt_Screen_Cols - Cursor_c - 1; -+ while (len > 0 && str[len] == SLSMG_NOCHAR) -+ --len; -+ } -+ else len = 0; -+ } -+ } -+ -+ memset (&mbstate, 0, sizeof (mbstate)); -+ while (len--) -+ { -+ SLsmg_Char_Type c = *str++; -+ char buf[MB_LEN_MAX]; -+ size_t n; -+ -+ if (c == SLSMG_NOCHAR) -+ continue; -+ -+ n = wcrtomb (buf, c, &mbstate); -+ if (n == (size_t)(-1)) -+ break; -+ -+ tt_write(buf, n); -+ } -+} -+#endif /* UTF8 */ -+ - static void send_attr_str (SLsmg_Char_Type *s) - { -+#ifdef UTF8 -+ SLsmg_Char_Type out[SLTT_MAX_SCREEN_COLS], ch, *p; -+#else - unsigned char out[SLTT_MAX_SCREEN_COLS], ch, *p; -+#endif /* UTF8 */ - register SLtt_Char_Type attr; - register SLsmg_Char_Type sh; - int color, last_color = -1; -@@ -1498,8 +1565,13 @@ - p = out; - while (0 != (sh = *s++)) - { -+#ifdef UTF8 -+ ch = SLSMG_EXTRACT_CHAR(sh); -+ color = SLSMG_EXTRACT_COLOR(sh); -+#else - ch = sh & 0xFF; - color = ((int) sh & 0xFF00) >> 8; -+#endif - - #if SLTT_HAS_NON_BCE_SUPPORT - if (Bce_Color_Offset -@@ -1511,8 +1583,12 @@ - { - if (SLtt_Use_Ansi_Colors) attr = Ansi_Color_Map[color & 0x7F].fgbg; - else attr = Ansi_Color_Map[color & 0x7F].mono; -- -+ -+#ifdef UTF8 -+ if (SLSMG_EXTRACT_COLOR(sh) & 0x80) /* alternate char set */ -+#else - if (sh & 0x8000) /* alternate char set */ -+#endif - { - if (SLtt_Use_Blink_For_ACS) - { -@@ -1534,8 +1610,12 @@ - { - if (p != out) - { -+#ifdef UTF8 -+ write_wstring_with_care (out, p-out); -+#else - *p = 0; - write_string_with_care ((char *) out); -+#endif - Cursor_c += (int) (p - out); - p = out; - } -@@ -1558,8 +1638,12 @@ - } - *p++ = ch; - } -+#ifdef UTF8 -+ if (p != out) write_wstring_with_care (out, p-out); -+#else - *p = 0; - if (p != out) write_string_with_care ((char *) out); -+#endif - Cursor_c += (int) (p - out); - } - -@@ -1686,7 +1770,11 @@ - - while (qq < qmax) - { -+#ifdef UTF8 -+ if (SLSMG_EXTRACT_COLOR(*qq)) -+#else - if (*qq & 0xFF00) -+#endif - { - SLtt_normal_video (); - SLtt_del_eol (); -@@ -1701,7 +1789,11 @@ - /* Find where the last non-blank character on old/new screen is */ - - space_char = ' '; -+#ifdef UTF8 -+ if (SLSMG_EXTRACT_CHAR(*(pmax-1)) == ' ') -+#else - if (CHAR_EQS(*(pmax-1), ' ')) -+#endif - { - /* If we get here, then we can erase to the end of the line to create - * the final space. However, this will only work _if_ erasing will -@@ -1752,7 +1844,11 @@ - { - #endif - /* Try use use erase to bol if possible */ -+#ifdef UTF8 -+ if ((Del_Bol_Str != NULL) && (SLSMG_EXTRACT_CHAR(*neww) == ' ')) -+#else - if ((Del_Bol_Str != NULL) && (CHAR_OF(*neww) == ' ')) -+#endif - { - SLsmg_Char_Type *p1; - SLsmg_Char_Type blank; -@@ -1781,7 +1877,11 @@ - q = oldd + ofs; - p = p1; - SLtt_goto_rc (row, ofs - 1); -+#ifdef UTF8 -+ SLtt_reverse_video (SLSMG_EXTRACT_COLOR (blank)); -+#else - SLtt_reverse_video (COLOR_OF(blank)); -+#endif - tt_write_string (Del_Bol_Str); - tt_write (" ", 1); - Cursor_c += 1; -@@ -1978,7 +2078,11 @@ - - if (q < qmax) - { -+#ifdef UTF8 -+ SLtt_reverse_video (SLSMG_EXTRACT_COLOR (space_char)); -+#else - SLtt_reverse_video (COLOR_OF(space_char)); -+#endif - del_eol (); - } - diff --git a/src/patches/slang-utf8-acs.patch b/src/patches/slang-utf8-acs.patch deleted file mode 100644 index dc8a8519a9..0000000000 --- a/src/patches/slang-utf8-acs.patch +++ /dev/null @@ -1,417 +0,0 @@ ---- slang-1.4.5/src/slang.h.acs 2002-07-09 00:03:57.000000000 -0400 -+++ slang-1.4.5/src/slang.h 2002-07-09 00:11:06.000000000 -0400 -@@ -1255,6 +1255,8 @@ - - #ifdef UTF8 - typedef int SLsmg_Char_Type; -+extern SLtt_Char_Type SLcurses_Acs_Map [128]; -+#define acs_map SLcurses_Acs_Map - #define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFFFFFF) - #define SLSMG_EXTRACT_COLOR(x) (((x)>>24)&0xFF) - #define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(wchar_t)(ch))|((color)<<24)) -@@ -1396,7 +1398,11 @@ - extern void SLsmg_set_screen_start (int *, int *); - extern void SLsmg_draw_hline (unsigned int); - extern void SLsmg_draw_vline (int); -+#ifdef UTF8 -+extern void SLsmg_draw_object (int, int, SLsmg_Char_Type); -+#else - extern void SLsmg_draw_object (int, int, unsigned char); -+#endif - extern void SLsmg_draw_box (int, int, unsigned int, unsigned int); - extern int SLsmg_get_column(void); - extern int SLsmg_get_row(void); -@@ -1408,6 +1414,9 @@ - extern int SLsmg_Display_Eight_Bit; - extern int SLsmg_Tab_Width; - -+extern int SLsmg_Is_Unicode; -+extern int SLsmg_Setlocale; -+ - #define SLSMG_NEWLINE_IGNORED 0 /* default */ - #define SLSMG_NEWLINE_MOVES 1 /* moves to next line, column 0 */ - #define SLSMG_NEWLINE_SCROLLS 2 /* moves but scrolls at bottom of screen */ -@@ -1465,31 +1474,79 @@ - # define SLSMG_BOARD_CHAR '#' - # define SLSMG_BLOCK_CHAR '#' - # else --# define SLSMG_HLINE_CHAR 'q' --# define SLSMG_VLINE_CHAR 'x' --# define SLSMG_ULCORN_CHAR 'l' --# define SLSMG_URCORN_CHAR 'k' --# define SLSMG_LLCORN_CHAR 'm' --# define SLSMG_LRCORN_CHAR 'j' --# define SLSMG_CKBRD_CHAR 'a' --# define SLSMG_RTEE_CHAR 'u' --# define SLSMG_LTEE_CHAR 't' --# define SLSMG_UTEE_CHAR 'w' --# define SLSMG_DTEE_CHAR 'v' --# define SLSMG_PLUS_CHAR 'n' --# define SLSMG_DIAMOND_CHAR '`' --# define SLSMG_DEGREE_CHAR 'f' --# define SLSMG_PLMINUS_CHAR 'g' --# define SLSMG_BULLET_CHAR '~' --# define SLSMG_LARROW_CHAR ',' --# define SLSMG_RARROW_CHAR '+' --# define SLSMG_DARROW_CHAR '.' --# define SLSMG_UARROW_CHAR '-' --# define SLSMG_BOARD_CHAR 'h' --# define SLSMG_BLOCK_CHAR '0' -+# define SLSMG_HLINE_CHAR (acs_map['q']) -+# define SLSMG_VLINE_CHAR (acs_map['x']) -+# define SLSMG_ULCORN_CHAR (acs_map['l']) -+# define SLSMG_URCORN_CHAR (acs_map['k']) -+# define SLSMG_LLCORN_CHAR (acs_map['m']) -+# define SLSMG_LRCORN_CHAR (acs_map['j']) -+# define SLSMG_CKBRD_CHAR (acs_map['a']) -+# define SLSMG_RTEE_CHAR (acs_map['u']) -+# define SLSMG_LTEE_CHAR (acs_map['t']) -+# define SLSMG_UTEE_CHAR (acs_map['v']) -+# define SLSMG_DTEE_CHAR (acs_map['w']) -+# define SLSMG_PLUS_CHAR (acs_map['n']) -+# define SLSMG_DIAMOND_CHAR (acs_map['`']) -+# define SLSMG_DEGREE_CHAR (acs_map['f']) -+# define SLSMG_PLMINUS_CHAR (acs_map['g']) -+# define SLSMG_BULLET_CHAR (acs_map['~']) -+# define SLSMG_LARROW_CHAR (acs_map[',']) -+# define SLSMG_RARROW_CHAR (acs_map['+']) -+# define SLSMG_DARROW_CHAR (acs_map['.']) -+# define SLSMG_UARROW_CHAR (acs_map['-']) -+# define SLSMG_BOARD_CHAR (acs_map['h']) -+# define SLSMG_BLOCK_CHAR (acs_map['0']) -+# -+# define SLSMG_HLINE_CHAR_TERM 'q' -+# define SLSMG_VLINE_CHAR_TERM 'x' -+# define SLSMG_ULCORN_CHAR_TERM 'l' -+# define SLSMG_URCORN_CHAR_TERM 'k' -+# define SLSMG_LLCORN_CHAR_TERM 'm' -+# define SLSMG_LRCORN_CHAR_TERM 'j' -+# define SLSMG_CKBRD_CHAR_TERM 'a' -+# define SLSMG_RTEE_CHAR_TERM 'u' -+# define SLSMG_LTEE_CHAR_TERM 't' -+# define SLSMG_UTEE_CHAR_TERM 'v' -+# define SLSMG_DTEE_CHAR_TERM 'w' -+# define SLSMG_PLUS_CHAR_TERM 'n' -+# define SLSMG_DIAMOND_CHAR_TERM '`' -+# define SLSMG_DEGREE_CHAR_TERM 'f' -+# define SLSMG_PLMINUS_CHAR_TERM 'g' -+# define SLSMG_BULLET_CHAR_TERM '~' -+# define SLSMG_LARROW_CHAR_TERM ',' -+# define SLSMG_RARROW_CHAR_TERM '+' -+# define SLSMG_DARROW_CHAR_TERM '.' -+# define SLSMG_UARROW_CHAR_TERM '-' -+# define SLSMG_BOARD_CHAR_TERM 'h' -+# define SLSMG_BLOCK_CHAR_TERM '0' - # endif /* AMIGA */ - #endif /* IBMPC_SYSTEM */ - -+#ifdef UTF8 -+# define SLSMG_HLINE_CHAR_UNICODE 0x2500 -+# define SLSMG_VLINE_CHAR_UNICODE 0x2502 -+# define SLSMG_ULCORN_CHAR_UNICODE 0x250c -+# define SLSMG_URCORN_CHAR_UNICODE 0x2510 -+# define SLSMG_LLCORN_CHAR_UNICODE 0x2514 -+# define SLSMG_LRCORN_CHAR_UNICODE 0x2518 -+# define SLSMG_RTEE_CHAR_UNICODE 0x2524 -+# define SLSMG_LTEE_CHAR_UNICODE 0x251c -+# define SLSMG_UTEE_CHAR_UNICODE 0x2534 -+# define SLSMG_DTEE_CHAR_UNICODE 0x252c -+# define SLSMG_PLUS_CHAR_UNICODE 0x253c -+# define SLSMG_CKBRD_CHAR_UNICODE 0x2592 -+# define SLSMG_DIAMOND_CHAR_UNICODE 0x25c6 -+# define SLSMG_DEGREE_CHAR_UNICODE 0x00b0 -+# define SLSMG_PLMINUS_CHAR_UNICODE 0x00b1 -+# define SLSMG_BULLET_CHAR_UNICODE 0x00b7 -+# define SLSMG_LARROW_CHAR_UNICODE 0x2190 -+# define SLSMG_RARROW_CHAR_UNICODE 0x2192 -+# define SLSMG_DARROW_CHAR_UNICODE 0x2193 -+# define SLSMG_UARROW_CHAR_UNICODE 0x2191 -+# define SLSMG_BOARD_CHAR_UNICODE 0x2592 -+# define SLSMG_BLOCK_CHAR_UNICODE 0x25ae -+#endif -+ - #ifndef IBMPC_SYSTEM - # define SLSMG_COLOR_BLACK 0x000000 - # define SLSMG_COLOR_RED 0x000001 ---- slang-1.4.5/src/slcurses.c.acs 2002-07-09 00:03:57.000000000 -0400 -+++ slang-1.4.5/src/slcurses.c 2002-07-09 00:09:03.000000000 -0400 -@@ -331,40 +331,63 @@ - /* SLtt_set_mono (A_BLINK >> 8, NULL, SLTT_BLINK_MASK); */ - SLtt_set_mono ((A_BOLD|A_UNDERLINE) >> 8, NULL, SLTT_ULINE_MASK|SLTT_BOLD_MASK); - SLtt_set_mono ((A_REVERSE|A_UNDERLINE) >> 8, NULL, SLTT_ULINE_MASK|SLTT_REV_MASK); -+ -+ SLcurses_init_acs_map(); -+ -+ return SLcurses_Stdscr; -+} - -+void SLcurses_init_acs_map() -+{ - if (SLtt_Has_Alt_Charset) - { -- SLcurses_Acs_Map[SLSMG_ULCORN_CHAR] = SLSMG_ULCORN_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_URCORN_CHAR] = SLSMG_URCORN_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_LLCORN_CHAR] = SLSMG_LLCORN_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_LRCORN_CHAR] = SLSMG_LRCORN_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_UTEE_CHAR] = SLSMG_UTEE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_DTEE_CHAR] = SLSMG_DTEE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_LTEE_CHAR] = SLSMG_LTEE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_RTEE_CHAR] = SLSMG_RTEE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_VLINE_CHAR] = SLSMG_VLINE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_HLINE_CHAR] = SLSMG_HLINE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_PLUS_CHAR] = SLSMG_PLUS_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_CKBRD_CHAR] = SLSMG_CKBRD_CHAR | A_ALTCHARSET; -+ if (SLsmg_Is_Unicode) -+ { -+ SLcurses_Acs_Map['l'] = SLSMG_ULCORN_CHAR_UNICODE; -+ SLcurses_Acs_Map['k'] = SLSMG_URCORN_CHAR_UNICODE; -+ SLcurses_Acs_Map['m'] = SLSMG_LLCORN_CHAR_UNICODE; -+ SLcurses_Acs_Map['j'] = SLSMG_LRCORN_CHAR_UNICODE; -+ SLcurses_Acs_Map['v'] = SLSMG_UTEE_CHAR_UNICODE; -+ SLcurses_Acs_Map['w'] = SLSMG_DTEE_CHAR_UNICODE; -+ SLcurses_Acs_Map['t'] = SLSMG_LTEE_CHAR_UNICODE; -+ SLcurses_Acs_Map['u'] = SLSMG_RTEE_CHAR_UNICODE; -+ SLcurses_Acs_Map['x'] = SLSMG_VLINE_CHAR_UNICODE; -+ SLcurses_Acs_Map['q'] = SLSMG_HLINE_CHAR_UNICODE; -+ SLcurses_Acs_Map['n'] = SLSMG_PLUS_CHAR_UNICODE; -+ SLcurses_Acs_Map['a'] = SLSMG_CKBRD_CHAR_UNICODE; -+ } -+ else -+ { -+ SLcurses_Acs_Map['l'] = SLSMG_ULCORN_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['k'] = SLSMG_URCORN_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['m'] = SLSMG_LLCORN_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['j'] = SLSMG_LRCORN_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['v'] = SLSMG_UTEE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['w'] = SLSMG_DTEE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['t'] = SLSMG_LTEE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['u'] = SLSMG_RTEE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['x'] = SLSMG_VLINE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['q'] = SLSMG_HLINE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['n'] = SLSMG_PLUS_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['a'] = SLSMG_CKBRD_CHAR_TERM | A_ALTCHARSET; -+ } - } - else - { - /* ugly defaults to use on terminals which don't support graphics */ -- SLcurses_Acs_Map[SLSMG_ULCORN_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_URCORN_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_LLCORN_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_LRCORN_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_UTEE_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_DTEE_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_LTEE_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_RTEE_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_VLINE_CHAR] = '|'; -- SLcurses_Acs_Map[SLSMG_HLINE_CHAR] = '-'; -- SLcurses_Acs_Map[SLSMG_PLUS_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_CKBRD_CHAR] = '#'; -+ SLcurses_Acs_Map['l'] = '+'; -+ SLcurses_Acs_Map['k'] = '+'; -+ SLcurses_Acs_Map['m'] = '+'; -+ SLcurses_Acs_Map['j'] = '+'; -+ SLcurses_Acs_Map['v'] = '+'; -+ SLcurses_Acs_Map['w'] = '+'; -+ SLcurses_Acs_Map['t'] = '+'; -+ SLcurses_Acs_Map['u'] = '+'; -+ SLcurses_Acs_Map['x'] = '|'; -+ SLcurses_Acs_Map['q'] = '-'; -+ SLcurses_Acs_Map['n'] = '+'; -+ SLcurses_Acs_Map['a'] = '#'; - } -- -- return SLcurses_Stdscr; - } - - int SLcurses_wattrset (SLcurses_Window_Type *w, SLtt_Char_Type ch) ---- slang-1.4.5/src/slcurses.h.acs 2002-02-10 02:39:19.000000000 -0500 -+++ slang-1.4.5/src/slcurses.h 2002-07-09 00:03:57.000000000 -0400 -@@ -141,6 +141,7 @@ - - extern int SLcurses_nodelay (SLcurses_Window_Type *, int); - extern SLcurses_Window_Type *SLcurses_initscr (void); -+extern void SLcurses_init_acs_map (void); - #define initscr SLcurses_initscr - - extern int SLcurses_cbreak (void); -@@ -222,21 +222,21 @@ - extern SLtt_Char_Type SLcurses_Acs_Map [128]; - #define acs_map SLcurses_Acs_Map - --#define ACS_ULCORNER (acs_map[SLSMG_ULCORN_CHAR]) --#define ACS_URCORNER (acs_map[SLSMG_URCORN_CHAR]) --#define ACS_LRCORNER (acs_map[SLSMG_LRCORN_CHAR]) --#define ACS_LLCORNER (acs_map[SLSMG_LLCORN_CHAR]) --#define ACS_TTEE (acs_map[SLSMG_UTEE_CHAR]) --#define ACS_LTEE (acs_map[SLSMG_LTEE_CHAR]) --#define ACS_RTEE (acs_map[SLSMG_RTEE_CHAR]) --#define ACS_BTEE (acs_map[SLSMG_DTEE_CHAR]) --#define ACS_PLUS (acs_map[SLSMG_PLUS_CHAR]) --#define ACS_VLINE (acs_map[SLSMG_VLINE_CHAR]) --#define ACS_HLINE (acs_map[SLSMG_HLINE_CHAR]) -+#define ACS_ULCORNER SLSMG_ULCORN_CHAR -+#define ACS_URCORNER SLSMG_URCORN_CHAR -+#define ACS_LRCORNER SLSMG_LRCORN_CHAR -+#define ACS_LLCORNER SLSMG_LLCORN_CHAR -+#define ACS_TTEE SLSMG_UTEE_CHAR -+#define ACS_LTEE SLSMG_LTEE_CHAR -+#define ACS_RTEE SLSMG_RTEE_CHAR -+#define ACS_BTEE SLSMG_DTEE_CHAR -+#define ACS_PLUS SLSMG_PLUS_CHAR -+#define ACS_VLINE SLSMG_VLINE_CHAR -+#define ACS_HLINE SLSMG_HLINE_CHAR - #define ACS_S1 '-' - #define ACS_S9 '-' - #define ACS_DIAMOND '&' --#define ACS_CKBOARD (acs_map[SLSMG_CKBRD_CHAR]) -+#define ACS_CKBOARD SLSMG_CKBRD_CHAR - #define ACS_DEGREE 'o' - #define ACS_PLMINUS '+' - #define ACS_BULLET '*' ---- slang-1.4.5/src/slsmg.c.acs 2002-07-09 00:03:57.000000000 -0400 -+++ slang-1.4.5/src/slsmg.c 2002-07-09 00:03:57.000000000 -0400 -@@ -10,6 +10,9 @@ - - #include "slang.h" - #include "_slang.h" -+#include "slcurses.h" -+ -+#include - - typedef struct Screen_Type - { -@@ -44,9 +47,9 @@ - */ - - #ifndef IBMPC_SYSTEM --#define ALT_CHAR_FLAG 0x80 -+static int ALT_CHAR_FLAG=0x80; - #else --#define ALT_CHAR_FLAG 0x00 -+static int ALT_CHAR_FLAG=0x00; - #endif - - #if SLTT_HAS_NON_BCE_SUPPORT && !defined(IBMPC_SYSTEM) -@@ -54,6 +57,8 @@ - static int Bce_Color_Offset; - #endif - -+int SLsmg_Is_Unicode = 0; -+int SLsmg_Setlocale = 1; - int SLsmg_Newline_Behavior = 0; - int SLsmg_Backspace_Moves = 0; - /* Backward compatibility. Not used. */ -@@ -184,6 +189,8 @@ - return;/* alt chars not used and the alt bit - * is used to indicate a blink. - */ -+ if (SLsmg_Is_Unicode) -+ ALT_CHAR_FLAG=0x00; - - if (i) This_Alt_Char = ALT_CHAR_FLAG; - else This_Alt_Char = 0; -@@ -348,6 +355,8 @@ - #ifndef IBMPC_SYSTEM - int alt_char_set_flag; - -+ if (SLsmg_Is_Unicode) -+ ALT_CHAR_FLAG = 0x00; - alt_char_set_flag = ((This_Color & ALT_CHAR_FLAG) - && ((tt_Use_Blink_For_ACS == NULL) - || (*tt_Use_Blink_For_ACS == 0))); -@@ -1221,6 +1230,20 @@ - Smg_Inited = 0; - } - -+static void SLsmg_check_unicode(void) -+{ -+ char *s,*t; -+ -+ if (SLsmg_Setlocale) -+ s = setlocale(LC_ALL, ""); -+ else -+ s = setlocale(LC_ALL, NULL); -+ if (s && (strstr(s,"UTF-8") || strstr(s,"utf8"))) { -+ SLsmg_Is_Unicode = 1; -+ return; -+ } -+ SLsmg_Is_Unicode = 0; -+} - - static int init_smg (void) - { -@@ -1242,6 +1265,8 @@ - This_Col = This_Row = Start_Col = Start_Row = 0; - - This_Alt_Char = 0; -+ SLsmg_check_unicode (); -+ SLcurses_init_acs_map (); - SLsmg_set_color (0); - Cls_Flag = 1; - #ifndef IBMPC_SYSTEM -@@ -1386,7 +1411,11 @@ - } - } - -+#ifdef UTF8 -+void SLsmg_draw_object (int r, int c, SLsmg_Char_Type object) -+#else - void SLsmg_draw_object (int r, int c, unsigned char object) -+#endif - { - This_Row = r; This_Col = c; - -@@ -1405,7 +1434,7 @@ - - void SLsmg_draw_hline (unsigned int n) - { -- static unsigned char hbuf[16]; -+ SLsmg_Char_Type ch = SLSMG_HLINE_CHAR; - int count; - int cmin, cmax; - int final_col = This_Col + (int) n; -@@ -1421,11 +1450,6 @@ - return; - } - -- if (hbuf[0] == 0) -- { -- SLMEMSET ((char *) hbuf, SLSMG_HLINE_CHAR, 16); -- } -- - n = (unsigned int)(cmax - cmin); - count = n / 16; - -@@ -1433,10 +1457,10 @@ - This_Color |= ALT_CHAR_FLAG; - This_Col = cmin; - -- SLsmg_write_nchars ((char *) hbuf, n % 16); -- while (count-- > 0) -+ SLsmg_draw_object(This_Row, This_Col, ch); -+ while (n-- > 0) - { -- SLsmg_write_nchars ((char *) hbuf, 16); -+ SLsmg_draw_object(This_Row, This_Col, ch); - } - - This_Color = save_color; -@@ -1445,7 +1469,7 @@ - - void SLsmg_draw_vline (int n) - { -- unsigned char ch = SLSMG_VLINE_CHAR; -+ SLsmg_Char_Type ch = SLSMG_VLINE_CHAR; - int c = This_Col, rmin, rmax; - int final_row = This_Row + n; - int save_color; -@@ -1466,7 +1490,7 @@ - for (This_Row = rmin; This_Row < rmax; This_Row++) - { - This_Col = c; -- SLsmg_write_nchars ((char *) &ch, 1); -+ SLsmg_draw_object (This_Row, This_Col, ch); - } - - This_Col = c; This_Row = final_row; diff --git a/src/patches/slang-utf8-fix.patch b/src/patches/slang-utf8-fix.patch deleted file mode 100644 index 6c0a80f1ea..0000000000 --- a/src/patches/slang-utf8-fix.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- slang-1.4.5/src/slsmg.c.jj 2003-02-21 12:11:37.000000000 -0500 -+++ slang-1.4.5/src/slsmg.c 2003-02-21 14:09:28.000000000 -0500 -@@ -378,8 +378,10 @@ void SLsmg_write_nwchars (wchar_t *str, - for (i = 0; i < n; i++, str) { - ch = *str++; - #ifndef IBMPC_SYSTEM -- if (alt_char_set_flag) -+ if (alt_char_set_flag) { - ch = Alt_Char_Set[ch & 0x7F]; -+ w = 1; -+ } else - #endif - w = wcwidth(ch); - ---- slang-1.4.5/src/sldisply.c.jj 2003-02-21 12:11:37.000000000 -0500 -+++ slang-1.4.5/src/sldisply.c 2003-02-21 15:51:43.000000000 -0500 -@@ -1498,6 +1498,17 @@ static void write_wstring_with_care (SLs - } - } - -+ if (Current_Fgbg & SLTT_ALTC_MASK) -+ { -+ char c; -+ while (len--) -+ { -+ c = *str++; -+ tt_write(&c, 1); -+ } -+ return; -+ } -+ - memset (&mbstate, 0, sizeof (mbstate)); - while (len--) - { -- 2.39.2