From 1fdf53ddcd7e936fe7e057b9baab5f87c127d1ef Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Tue, 18 Dec 2007 02:39:25 +0000
Subject: [PATCH] remove slang curses emulation support, as it's hopelessly
 broken, and it doesn't make the binary very much smaller, especially when
 --enable-tiny is used

git-svn-id: svn://svn.savannah.gnu.org/nano/branches/nano_2_0_branch/nano@4203 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog             |   5 ++
 configure.ac          | 199 ++----------------------------------------
 doc/texinfo/nano.texi |   8 +-
 src/nano.c            |  49 ++---------
 src/nano.h            |   9 +-
 src/winio.c           |   7 --
 6 files changed, 20 insertions(+), 257 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 94de6aa1..dda32cd4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -48,6 +48,11 @@ CVS code -
 	  need_statusbar_horizontal_update(). (DLR)
 	- Simplify terminal handling by using raw mode instead of cbreak
 	  mode.  Changes to main(); removal of disable_signals(). (DLR)
+	- Remove slang curses emulation support, as it's hopelessly
+	  broken, and it doesn't make the binary very much smaller,
+	  especially when --enable-tiny is used.  Changes to
+	  configure.ac, doc/texinfo/nano.texi, version(),
+	  handle_sigwinch(), terminal_init(), and total_redraw(). (DLR)
 - chars.c:
   nstrncasecmp(), mbstrncasecmp()
 	- For efficiency, return zero immediately if s1 and s2 point to
diff --git a/configure.ac b/configure.ac
index 31fdd71f..f8fe6f81 100644
--- a/configure.ac
+++ b/configure.ac
@@ -185,193 +185,6 @@ fi],
 [enable_utf8=auto])
 AC_MSG_RESULT($enable_utf8)
 
-AC_MSG_CHECKING([whether to use slang])
-CURSES_LIB_NAME=""
-AC_ARG_WITH(slang,
-[  --with-slang[=DIR]      Use the slang library instead of curses],
-[    case "$with_slang" in
-    no)
-	AC_MSG_RESULT(no)
-	;;
-    *)
-	AC_MSG_RESULT(yes)
-
-	if test x$with_slang != xyes; then
-	    # Add additional search path
-	    LDFLAGS="-L$with_slang/lib $LDFLAGS"
-	    CPPFLAGS="-I$with_slang/include $CPPFLAGS"
-	fi
-
-	if test x$enable_utf8 != xno; then
-	    AC_CHECK_HEADER(slcurses.h,
-		AC_MSG_CHECKING([for SLutf8_enable in -lslang])
-		_libs=$LIBS
-		LIBS="$LIBS -lslang"
-		AC_TRY_RUN([
-#include <slcurses.h>
-int main(void)
-{
-    SLutf8_enable(1);
-    return 0;
-}],
-		    [AC_MSG_RESULT(yes)
-		    AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes
-		    CURSES_LIB_WIDE=yes
-		    if test x$with_slang != xyes; then
-			CURSES_LIB="-L${with_slang}/lib -lslang"
-		    else
-			CURSES_LIB="-lslang"
-		    fi
-		    CURSES_LIB_NAME=slang],
-		    [AC_MSG_RESULT(no)
-
-		    # We might need the term library
-		    for termlib in ncurses curses termcap terminfo termlib; do
-			AC_CHECK_LIB([${termlib}], tputs, [tcap="-l$termlib"])
-			test -n "$tcap" && break
-		    done
-
-		    AC_MSG_CHECKING([for SLutf8_enable in -lslang $tcap])
-		    LIBS="$LIBS $tcap"
-		    AC_TRY_RUN([
-#include <slcurses.h>
-int main(void)
-{
-    SLutf8_enable(1);
-    return 0;
-}],
-			[AC_MSG_RESULT(yes)
-			AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes
-			CURSES_LIB_WIDE=yes
-			if test x$with_slang != xyes; then
-			    CURSES_LIB="-L${with_slang}/lib -lslang $tcap"
-			else
-			    CURSES_LIB="-lslang $tcap"
-			fi
-			CURSES_LIB_NAME=slang],
-			[AC_MSG_RESULT(no)
-
-			# We might need the math library
-			AC_MSG_CHECKING([for SLutf8_enable in -lslang $tcap -lm])
-			LIBS="$LIBS -lm"
-			AC_TRY_RUN([
-#include <slcurses.h>
-int main(void)
-{
-    SLutf8_enable(1);
-    return 0;
-}],
-			    [AC_MSG_RESULT(yes)
-			    AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes
-			    CURSES_LIB_WIDE=yes
-			    if test x$with_slang != xyes; then
-				CURSES_LIB="-L${with_slang}/lib -lslang $tcap -lm"
-			    else
-				CURSES_LIB="-lslang $tcap -lm"
-			    fi
-			    CURSES_LIB_NAME=slang],
-			    [AC_MSG_RESULT(no)],
-    AC_MSG_WARN([*** Can not use slang when cross-compiling]))],
-    AC_MSG_WARN([*** Can not use slang when cross-compiling]))],
-    AC_MSG_WARN([*** Can not use slang when cross-compiling])),
-	    AC_MSG_ERROR([
-*** The header file slcurses.h was not found.  If you wish to use
-*** slang support this header file is required.  Please either
-*** install a version of slang that includes the slcurses.h file or
-*** do not call the configure script with --with-slang.]))
-	fi
-
-	if eval "test x$CURSES_LIB_NAME = x"; then
-	    # Reset libs if the above slang tests failed
-	    if test x$enable_utf8 != xno; then
-		LIBS=$_libs
-	    fi
-
-	    AC_CHECK_HEADER(slcurses.h,
-		AC_MSG_CHECKING([for SLtt_initialize in -lslang])
-		_libs=$LIBS
-		LIBS="$LIBS -lslang"
-		AC_TRY_RUN([
-#include <slcurses.h>
-int main(void)
-{
-    SLtt_initialize(NULL);
-    return 0;
-}],
-		    [AC_MSG_RESULT(yes)
-		    AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes
-		    if test x$with_slang != xyes; then
-			CURSES_LIB="-L${with_slang}/lib -lslang"
-		    else
-			CURSES_LIB="-lslang"
-		    fi
-		    CURSES_LIB_NAME=slang],
-		    [AC_MSG_RESULT(no)
-
-		    # We might need the term library
-		    for termlib in ncurses curses termcap terminfo termlib; do
-			AC_CHECK_LIB([${termlib}], tputs, [tcap="-l$termlib"])
-			test -n "$tcap" && break
-		    done
-
-		    AC_MSG_CHECKING([for SLtt_initialize in -lslang $tcap])
-		    LIBS="$LIBS $tcap"
-		    AC_TRY_RUN([
-#include <slcurses.h>
-int main(void)
-{
-    SLtt_initialize(NULL);
-    return 0;
-}],
-			[AC_MSG_RESULT(yes)
-			AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes
-			if test x$with_slang != xyes; then
-			    CURSES_LIB="-L${with_slang}/lib -lslang $tcap"
-			else
-			    CURSES_LIB="-lslang $tcap"
-			fi
-			CURSES_LIB_NAME=slang],
-			[AC_MSG_RESULT(no)
-
-			# We might need the math library
-			AC_MSG_CHECKING([for SLtt_initialize in -lslang $tcap -lm])
-			LIBS="$LIBS -lm"
-			AC_TRY_RUN([
-#include <slcurses.h>
-int main(void)
-{
-    SLtt_initialize(NULL);
-    return 0;
-}],
-			    [AC_MSG_RESULT(yes)
-			    AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes
-			    if test x$with_slang != xyes; then
-				CURSES_LIB="-L${with_slang}/lib -lslang $tcap -lm"
-			    else
-				CURSES_LIB="-lslang $tcap -lm"
-			    fi
-			    CURSES_LIB_NAME=slang],
-			    [AC_MSG_RESULT(no)],
-    AC_MSG_WARN([*** Can not use slang when cross-compiling]))],
-    AC_MSG_WARN([*** Can not use slang when cross-compiling]))],
-    AC_MSG_WARN([*** Can not use slang when cross-compiling])),
-	    AC_MSG_ERROR([
-*** The header file slcurses.h was not found.  If you wish to use
-*** slang support this header file is required.  Please either
-*** install a version of slang that includes the slcurses.h file or
-*** do not call the configure script with --with-slang.]))
-	fi
-
-	if test "${_libs+set}" = "set"; then
-	    LIBS=$_libs
-	fi
-
-	if test x$with_slang != xyes; then
-	    LDFLAGS=${_ldflags}
-	fi
-	;;
-    esac], [AC_MSG_RESULT(no)])
-
 AM_CONDITIONAL(USE_COLOR, test x$color_support = xyes)
 AM_CONDITIONAL(USE_NANORC, test x$nanorc_support = xyes)
 
@@ -465,16 +278,14 @@ else
 	AC_MSG_ERROR([
 *** UTF-8 support was requested, but insufficient UTF-8 support was
 *** detected in your curses and/or C libraries.  Please verify that your
-*** slang was built with UTF-8 support or your curses was built with
-*** wide character support, and that your C library was built with wide
-*** character support.])
+*** curses was built with wide character support, and that your C
+*** library was built with wide character support.])
     elif test x$enable_utf8 != xno; then
 	AC_MSG_WARN([
 *** Insufficient UTF-8 support was detected in your curses and/or C
-*** libraries.  If you want UTF-8 support, please verify that your slang
-*** was built with UTF-8 support or your curses was built with wide
-*** character support, and that your C library was built with wide
-*** character support.])
+*** libraries.  If you want UTF-8 support, please verify that your
+*** curses was built with wide character support, and that your C
+*** library was built with wide character support.])
     fi
 fi
 
diff --git a/doc/texinfo/nano.texi b/doc/texinfo/nano.texi
index e44164b3..847756fb 100644
--- a/doc/texinfo/nano.texi
+++ b/doc/texinfo/nano.texi
@@ -9,7 +9,7 @@
 @smallbook
 @set EDITION 0.1
 @set VERSION 2.0.0
-@set UPDATED 27 Oct 2006
+@set UPDATED 17 Dec 2007
 
 @dircategory Editors
 @direntry
@@ -842,15 +842,11 @@ Disable long line wrapping by default when nano is run as root.
 
 @item --enable-utf8
 Enable support for reading and writing Unicode files.  This will require
-either the wide version of ncurses, or a UTF-8-enabled version of Slang.
+a wide version of curses.
 
 @item --disable-utf8
 Disable support for reading and writing Unicode files.
 
-@item --with-slang
-Compiling @code{nano} with Slang is supported, and will make the binary
-notably smaller than if compiled with ncurses or other curses libraries.
-
 @end table
 
 @contents
diff --git a/src/nano.c b/src/nano.c
index 68c7cda0..439adf72 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -942,9 +942,6 @@ void version(void)
 #endif
 #ifdef ENABLE_UTF8
     printf(" --enable-utf8");
-#endif
-#ifdef USE_SLANG
-    printf(" --with-slang");
 #endif
     printf("\n");
 }
@@ -1144,19 +1141,10 @@ RETSIGTYPE handle_sigwinch(int signal)
     if (filepart != NULL)
 	unpartition_filestruct(&filepart);
 
-#ifdef USE_SLANG
-    /* Slang curses emulation brain damage, part 1: If we just do what
-     * curses does here, it'll only work properly if the resize made the
-     * window smaller.  Do what mutt does: Leave and immediately reenter
-     * Slang screen management mode. */
-    SLsmg_reset_smg();
-    SLsmg_init_smg();
-#else
     /* Do the equivalent of what Minimum Profit does: Leave and
      * immediately reenter curses mode. */
     endwin();
     doupdate();
-#endif
 
     /* Restore the terminal to its previous state. */
     terminal_init();
@@ -1301,31 +1289,12 @@ void enable_flow_control(void)
  * control characters. */
 void terminal_init(void)
 {
-#ifdef USE_SLANG
-    /* Slang curses emulation brain damage, part 2: Slang doesn't
-     * implement nonl() or noecho() properly, so there's no way to
-     * properly reinitialize the terminal using them.  We have to save
-     * the terminal state after the first call and restore it on
-     * subsequent calls. */
-    static struct termios newterm;
-    static bool newterm_set = FALSE;
-
-    if (!newterm_set) {
-#endif
-
-	raw();
-	nonl();
-	noecho();
-	disable_extended_io();
-	if (ISSET(PRESERVE))
-	    enable_flow_control();
-
-#ifdef USE_SLANG
-	tcgetattr(0, &newterm);
-	newterm_set = TRUE;
-    } else
-	tcsetattr(0, TCSANOW, &newterm);
-#endif
+    raw();
+    nonl();
+    noecho();
+    disable_extended_io();
+    if (ISSET(PRESERVE))
+	enable_flow_control();
 }
 
 /* Read in a character, interpret it as a shortcut or toggle if
@@ -1760,12 +1729,8 @@ int main(int argc, char **argv)
 	char *locale = setlocale(LC_ALL, "");
 
 	if (locale != NULL && (strcasestr(locale, "UTF8") != NULL ||
-		strcasestr(locale, "UTF-8") != NULL)) {
-#ifdef USE_SLANG
-	    SLutf8_enable(1);
-#endif
+		strcasestr(locale, "UTF-8") != NULL))
 	    utf8_init();
-	}
     }
 #else
     setlocale(LC_ALL, "");
diff --git a/src/nano.h b/src/nano.h
index 370d6d33..28b22591 100644
--- a/src/nano.h
+++ b/src/nano.h
@@ -61,15 +61,8 @@
 #define PATH_MAX 4096
 #endif
 
-#ifdef USE_SLANG
-/* Slang support. */
-#include <slcurses.h>
-/* Slang curses emulation brain damage, part 3: Slang doesn't define the
- * curses equivalents of the Insert or Delete keys. */
-#define KEY_DC SL_KEY_DELETE
-#define KEY_IC SL_KEY_IC
 /* Ncurses support. */
-#elif defined(HAVE_NCURSES_H)
+#ifdef HAVE_NCURSES_H
 #include <ncurses.h>
 #else
 /* Curses support. */
diff --git a/src/winio.c b/src/winio.c
index b205b1df..bf4be4d3 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -3167,14 +3167,7 @@ void edit_update(update_type location)
 /* Unconditionally redraw the entire screen. */
 void total_redraw(void)
 {
-#ifdef USE_SLANG
-    /* Slang curses emulation brain damage, part 4: Slang doesn't define
-     * curscr. */
-    SLsmg_touch_screen();
-    SLsmg_refresh();
-#else
     wrefresh(curscr);
-#endif
 }
 
 /* Unconditionally redraw the entire screen, and then refresh it using
-- 
2.39.5