* readline.c: Always provide scm_init_readline, also if readline
[bpt/guile.git] / guile-readline / readline.c
index d66f012..9f3d14f 100644 (file)
@@ -25,8 +25,8 @@
 \f
 
 #include "libguile/_scm.h"
-#if defined (HAVE_RL_GETC_FUNCTION)
-#include "libguile/libguile.h"
+#ifdef HAVE_RL_GETC_FUNCTION
+#include "libguile.h"
 #include "libguile/gh.h"
 #include "libguile/iselect.h"
 
@@ -34,8 +34,8 @@
 #include <readline/history.h>
 #include <sys/time.h>
 
-#include "libguile/scm_validate.h"
-#include "readline.h"
+#include "libguile/validate.h"
+#include "guile-readline/readline.h"
 
 scm_option scm_readline_opts[] = {
   { SCM_OPTION_BOOLEAN, "history-file", 1,
@@ -125,14 +125,12 @@ static SCM before_read;
 static int
 current_input_getc (FILE *in)
 {
-  SCM ans;
   if (promptp && SCM_NIMP (before_read))
     {
       scm_apply (before_read, SCM_EOL, SCM_EOL);
       promptp = 0;
     }
-  ans = scm_getc (input_port);
-  return ans;
+  return scm_getc (input_port);
 }
 
 static void
@@ -205,7 +203,7 @@ SCM_DEFINE (scm_readline, "%readline", 0, 4, 0,
 
   ans = scm_internal_catch (SCM_BOOL_T,
                            (scm_catch_body_t) internal_readline,
-                           (void *) text,
+                           (void *) SCM_UNPACK (text),
                            handle_error, 0);
 
   fclose (rl_instream);
@@ -467,7 +465,7 @@ find_matching_paren(int k)
 static int
 match_paren (int x, int k)
 {
-  int tmp;
+  int tmp, fno;
   SELECT_TYPE readset;
   struct timeval timeout;
   
@@ -484,7 +482,8 @@ match_paren (int x, int k)
   timeout.tv_sec = tmp / 1000000;
   timeout.tv_usec = tmp % 1000000;
   FD_ZERO (&readset);
-  FD_SET (fileno (rl_instream), &readset);
+  fno = fileno (rl_instream);
+  FD_SET (fno, &readset);
   
   if (rl_point > 1)
     {
@@ -493,18 +492,20 @@ match_paren (int x, int k)
       if (rl_point > -1)
        {
          rl_redisplay ();
-         scm_internal_select (1, &readset, NULL, NULL, &timeout);
+         scm_internal_select (fno + 1, &readset, NULL, NULL, &timeout);
        }
       rl_point = tmp;
     }
   return 0;
 }
 
+#endif /* HAVE_RL_GETC_FUNCTION */
 
 void
 scm_init_readline ()
 {
-#include "readline.x"
+#ifdef HAVE_RL_GETC_FUNCTION
+#include "guile-readline/readline.x"
   scm_readline_completion_function_var
     = scm_sysintern ("*readline-completion-function*", SCM_BOOL_F);
   rl_getc_function = current_input_getc;
@@ -521,6 +522,11 @@ scm_init_readline ()
                 SCM_N_READLINE_OPTIONS);
   init_bouncing_parens();
   scm_add_feature ("readline");
+#endif /* HAVE_RL_GETC_FUNCTION */
 }
 
-#endif 
+/*
+  Local Variables:
+  c-file-style: "gnu"
+  End:
+*/