--- netkit-telnet-0.17/configure	Thu Apr 11 10:40:58 2002
+++ FIXEDnetkittelnet/configure	Thu Apr 11 10:39:59 2002
@@ -78,7 +78,6 @@
     for TRY in egcs gcc g++ CC c++ cc; do
        (
            $TRY __conftest.c -o __conftest || exit 1;
-           ./__conftest || exit 1;
        ) >/dev/null 2>&1 || continue;
        CC=$TRY
        break;
@@ -94,7 +93,6 @@
     echo -n 'Checking if C compiler works... '
     if (
           $CC __conftest.c -o __conftest || exit 1
-          ./__conftest || exit 1
        ) >/dev/null 2>&1; then
          echo 'yes'
      else
@@ -125,7 +123,6 @@
     for TRY in egcs gcc g++ CC c++ cc; do
        (
            $TRY __conftest.cc -o __conftest || exit 1;
-           ./__conftest || exit 1;
        ) >/dev/null 2>&1 || continue;
        CXX=$TRY
        break;
@@ -141,7 +138,6 @@
     echo -n 'Checking if C++ compiler works... '
     if (
           $CXX __conftest.cc -o __conftest || exit 1
-          ./__conftest || exit 1
        ) >/dev/null 2>&1; then
          echo 'yes'
      else
@@ -278,13 +274,11 @@
 EOF
 if (
       $CXX $CXXFLAGS  __conftest.cc  -o __conftest || exit 1
-      ./__conftest || exit 1
    ) >/dev/null 2>&1; then
     echo 'yes'
 else
     if (
           $CXX $CXXFLAGS -D__USE_BSD_SIGNAL __conftest.cc  -o __conftest || exit 1
-          ./__conftest || exit 1
        ) >/dev/null 2>&1; then
         echo '-D__USE_BSD_SIGNAL'
         CFLAGS="$CFLAGS -D__USE_BSD_SIGNAL"
@@ -292,6 +286,7 @@
     else
         echo 'no'
         echo 'This package needs BSD signal semantics to run.'
+		echo "$CXX $CXXFLAGS  -D__USE_BSD_SIGNAL __conftest.cc  -o __conftest failed"
         rm -f __conftest*
         exit
     fi
@@ -330,31 +325,6 @@
         echo 'no'
     fi
 fi
-
-if [ x$NCURSES != x ]; then
-    LIBTERMCAP=-lncurses
-else
-    echo -n 'Checking for traditional termcap... '
-cat <<EOF >__conftest.cc
-#include <stdio.h>
-#include <termcap.h>
-int main(void) {
-    tgetent(NULL, NULL); return 0;
-}
-
-EOF
-    if (
-          $CXX $CXXFLAGS  __conftest.cc -ltermcap -o __conftest || exit 1
-       ) >/dev/null 2>&1; then
-        echo '-ltermcap'
-        LIBTERMCAP=-ltermcap
-    else
-        echo 'not found'
-        echo 'This package needs termcap to run.'
-        rm -f __conftest*
-        exit
-    fi
-fi
 rm -f __conftest*
 
 ##################################################
@@ -468,7 +438,6 @@
 else
     if (
           $CXX $CXXFLAGS -D_GNU_SOURCE __conftest.cc  -o __conftest || exit 1
-          ./__conftest || exit 1
        ) >/dev/null 2>&1; then
         echo '-D_GNU_SOURCE'
         CFLAGS="$CFLAGS -D_GNU_SOURCE"
@@ -501,20 +470,17 @@
 EOF
 if (
       $CXX $CXXFLAGS  __conftest.cc $LIBBSD -o __conftest || exit 1
-      ./__conftest || exit 1
    ) >/dev/null 2>&1; then
     echo 'ok'
 else
     if (
           $CXX $CXXFLAGS  __conftest.cc -lsnprintf $LIBBSD -o __conftest || exit 1
-          ./__conftest || exit 1
        ) >/dev/null 2>&1; then
         echo '-lsnprintf'
         LIBS="$LIBS -lsnprintf"
     else
         if (
               $CXX $CXXFLAGS  __conftest.cc -ldb $LIBBSD -o __conftest || exit 1
-              ./__conftest || exit 1
            ) >/dev/null 2>&1; then
             echo '-ldb'
             LIBS="$LIBS -ldb"
diff -urN netkit-telnet-0.17/telnetd/state.c netkit-telnet-0.17-dm/telnetd/state.c
--- netkit-telnet-0.17/telnetd/state.c	1999-12-12 11:41:44.000000000 -0800
+++ netkit-telnet-0.17-dm/telnetd/state.c	2003-07-23 19:20:38.000000000 -0700
@@ -43,10 +43,10 @@
 
 static int envvarok(char *varp);
 
-static unsigned char doopt[] = { IAC, DO, '%', 'c', 0 };
-static unsigned char dont[] = { IAC, DONT, '%', 'c', 0 };
-unsigned char	will[] = { IAC, WILL, '%', 'c', 0 };
-unsigned char	wont[] = { IAC, WONT, '%', 'c', 0 };
+//static unsigned char doopt[] = { IAC, DO, '%', 'c', 0 };
+//static unsigned char dont[] = { IAC, DONT, '%', 'c', 0 };
+//unsigned char	will[] = { IAC, WILL, '%', 'c', 0 };
+//unsigned char	wont[] = { IAC, WONT, '%', 'c', 0 };
 
 /*
  * Buffer for sub-options, and macros
@@ -422,7 +422,7 @@
 	    set_his_want_state_will(option);
 	do_dont_resp[option]++;
     }
-    netoprintf((char *)doopt, option);
+    netoprintf( "%c%c%c", IAC, DO, option );
     
     DIAG(TD_OPTIONS, printoption("td: send do", option));
 }
@@ -632,7 +632,7 @@
 	set_his_want_state_wont(option);
 	do_dont_resp[option]++;
     }
-    netoprintf((char *) dont, option);
+    netoprintf ( "%c%c%c", IAC, DONT, option );
 
     DIAG(TD_OPTIONS, printoption("td: send dont", option));
 }
@@ -769,7 +769,7 @@
 	set_my_want_state_will(option);
 	will_wont_resp[option]++;
     }
-    netoprintf((char *) will, option);
+    netoprintf( "%c%c%c", IAC, WILL, option);
 
     DIAG(TD_OPTIONS, printoption("td: send will", option));
 }
@@ -917,7 +917,7 @@
 	set_my_want_state_wont(option);
 	will_wont_resp[option]++;
     }
-    netoprintf((char *)wont, option);
+    netoprintf( "%c%c%c", IAC, WONT, option);
     
     DIAG(TD_OPTIONS, printoption("td: send wont", option));
 }
