updated: [0c7d399] Reverted Enricos backport from master which removes accidentially slang1.x support

Patrick Winnertz winnie at debian.org
Wed Feb 4 19:39:16 UTC 2009


The following commit has been merged in the mc-4.6 branch:
commit 0c7d399300204a2f102bcd0bd9812c0e057d05ef
Author: Patrick Winnertz <winnie at debian.org>
Date:   Wed Feb 4 20:37:00 2009 +0100

    Reverted Enricos backport from master which removes accidentially slang1.x support
    
    Enrico has accidentially removed the slang1.x support in mc-4.6 branch as
    this is a structural change which clearly doesn't belong into mc-4.6.
    
    Signed-off-by: Patrick Winnertz <winnie at debian.org>

diff --git a/ChangeLog b/ChangeLog
index b48e121..9bdc617 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,9 +9,6 @@
 
 2009-02-01 Enrico Weigelt, metux ITS <weigelt at metux.de>
 
-	* acinclude.m4: removed MC_SLANG_PRIVATE macro
-	* src/slint.c: removed HAVE_SLANG_PRIVATE conditional and
-	  replaced SLang_getkey2(), SLang_input_pending2()
 	* src/util.c: fixed name_trunc() on NULL or empty parameters
 	* src/achown.c: fixed unitialized var in init_chown_advanced()
 	  (patch from andrew_b)
diff --git a/acinclude.m4 b/acinclude.m4
index aa2c6fa..f4c0e3b 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -299,6 +299,44 @@ AC_DEFUN([MC_USE_TERMCAP], [
 
 
 dnl
+dnl Check if private functions are available for linking
+dnl
+AC_DEFUN([MC_SLANG_PRIVATE], [
+    AC_CACHE_CHECK([if S-Lang exports private functions],
+		   [mc_cv_slang_private], [
+	ac_save_LIBS="$LIBS"
+	LIBS="$LIBS -lslang"
+	AC_TRY_LINK([
+		     #ifdef HAVE_SLANG_SLANG_H
+		     #include <slang/slang.h>
+		     #else
+		     #include <slang.h>
+		     #endif
+		     #if SLANG_VERSION >= 10000
+		     extern unsigned int SLsys_getkey (void);
+		     #else
+		     extern unsigned int _SLsys_getkey (void);
+		     #endif
+		    ], [
+		     #if SLANG_VERSION >= 10000
+		     _SLsys_getkey ();
+		     #else
+		     SLsys_getkey ();
+		     #endif
+		    ],
+		    [mc_cv_slang_private=yes],
+		    [mc_cv_slang_private=no])
+	LIBS="$ac_save_LIBS"
+    ])
+
+    if test x$mc_cv_slang_private = xyes; then
+	AC_DEFINE(HAVE_SLANG_PRIVATE, 1,
+		  [Define if private S-Lang functions are available])
+    fi
+])
+
+
+dnl
 dnl Check if the installed S-Lang library uses termcap
 dnl
 AC_DEFUN([MC_SLANG_TERMCAP], [
@@ -373,6 +411,7 @@ it's not fully supported yet])
     if test x$with_screen = xslang; then
 	AC_DEFINE(HAVE_SYSTEM_SLANG, 1,
 		  [Define to use S-Lang library installed on the system])
+	MC_SLANG_PRIVATE
 	screen_type=slang
 	screen_msg="S-Lang library (installed on the system)"
     else
diff --git a/src/slint.c b/src/slint.c
index cf87322..c30fac1 100644
--- a/src/slint.c
+++ b/src/slint.c
@@ -77,6 +77,66 @@ static int no_slang_delay;
 /* Forward declarations */
 static void load_terminfo_keys (void);
 
+#ifndef HAVE_SLANG_PRIVATE
+/* Private interfaces have been stripped, so we cannot use them */
+#define SLang_getkey2() SLang_getkey()
+#define SLang_input_pending2(s) SLang_input_pending(s)
+#else
+/* Copied from ../slang/slgetkey.c, removed the DEC_8Bit_HACK. */
+extern unsigned char SLang_Input_Buffer [];
+#if SLANG_VERSION >= 10000
+extern unsigned int _SLsys_getkey (void);
+extern int _SLsys_input_pending (int);
+#else
+extern unsigned int SLsys_getkey (void);
+extern int SLsys_input_pending (int);
+#endif
+
+static unsigned int SLang_getkey2 (void)
+{
+   unsigned int imax;
+   unsigned int ch;
+   
+   if (SLang_Input_Buffer_Len)
+     {
+	ch = (unsigned int) *SLang_Input_Buffer;
+	SLang_Input_Buffer_Len--;
+	imax = SLang_Input_Buffer_Len;
+   
+	memmove ((char *) SLang_Input_Buffer, 
+		(char *) (SLang_Input_Buffer + 1), imax);
+	return(ch);
+     }
+#if SLANG_VERSION >= 10000
+   else return(_SLsys_getkey ());
+#else
+   else return(SLsys_getkey());
+#endif
+}
+
+static int SLang_input_pending2 (int tsecs)
+{
+   int n, i;
+   unsigned char c;
+
+   if (SLang_Input_Buffer_Len) return (int) SLang_Input_Buffer_Len;
+#if SLANG_VERSION >= 10000  
+   n = _SLsys_input_pending (tsecs);
+#else
+   n = SLsys_input_pending (tsecs);
+#endif
+   if (n <= 0) return 0;
+   
+   i = SLang_getkey2 ();
+   if (i == SLANG_GETKEY_ERROR)
+	return 0;  /* don't put crippled error codes into the input buffer */
+   c = (unsigned char)i;
+   SLang_ungetkey_string (&c, 1);
+   
+   return n;
+}
+#endif /* HAVE_SLANG_PRIVATE */
+
 /* Only done the first time */
 void
 slang_init (void)
@@ -405,10 +465,10 @@ getch (void)
 {
     int c;
     if (no_slang_delay)
-	if (SLang_input_pending (0) == 0)
+	if (SLang_input_pending2 (0) == 0)
 	    return -1;
 
-    c = SLang_getkey ();
+    c = SLang_getkey2 ();
     if (c == SLANG_GETKEY_ERROR) {
 	fprintf (stderr,
 		 "SLang_getkey returned SLANG_GETKEY_ERROR\n"

-- 
Midnight Commander Development



More information about the mc-devel mailing list