import gdb-1999-06-28 snapshot
[deliverable/binutils-gdb.git] / gdb / event-top.c
index f658b715d50234e2df0232e690b5412dbfa9e08c..223e670c70f4c04758632af3937fa0cbda2d6049 100644 (file)
@@ -20,9 +20,6 @@
 
 #include "defs.h"
 #include "top.h"
-#ifdef HAVE_POLL
-#include <poll.h>
-#endif
 #include "inferior.h"
 #include "terminal.h" /* for job_control*/
 #include <signal.h>
@@ -38,7 +35,7 @@
 extern void _initialize_event_loop PARAMS ((void));
 
 static void command_line_handler PARAMS ((char *));
-static void gdb_readline2 PARAMS ((void));
+void gdb_readline2 PARAMS ((void));
 static void pop_prompt PARAMS ((void));
 static void push_prompt PARAMS ((char *, char *, char *));
 static void change_line_handler PARAMS ((void));
@@ -160,9 +157,9 @@ readline_input_state;
 \f
 
 /* Initialize all the necessary variables, start the event loop,
-   register readline, and stdin. */
+   register readline, and stdin, start the loop. */
 void
-start_event_loop ()
+cli_command_loop ()
 {
   int length;
   char *a_prompt;
@@ -185,16 +182,8 @@ start_event_loop ()
   else
     display_gdb_prompt (0);
 
-  /* Loop until there is something to do. This is the entry point to
-     the event loop engine. gdb_do_one_event will process one event
-     for each invocation.  It always returns 1, unless there are no
-     more event sources registered. In this case it returns 0.  */
-  while (gdb_do_one_event () != 0)
-    ;
-
-  /* We are done with the event loop. There are no more event sources
-     to listen to.  So we exit GDB. */
-  return;
+  /* Now it's time to start the event loop. */
+  start_event_loop ();
 }
 
 /* Change the function to be invoked every time there is a character
@@ -227,14 +216,13 @@ change_line_handler ()
      input file descriptor, we need to create a new event source,
      corresponding to the same fd, but with a new event handler
      function. */
+  /* NOTE: this operates on input_fd, not instream. If we are reading
+     commands from a file, instream will point to the file. However in
+     async mode, we always read commands from a file with editing
+     off. This means that the 'set editing on/off' will have effect
+     only on the interactive session. */
   delete_file_handler (input_fd);
-#ifdef HAVE_POLL
-  create_file_handler (input_fd, POLLIN,
-                      (file_handler_func *) call_readline, 0);
-#else
-  create_file_handler (input_fd, GDB_READABLE,
-                      (file_handler_func *) call_readline, 0);
-#endif
+  add_file_handler (input_fd, (file_handler_func *) call_readline, 0);
 }
 
 /* Displays the prompt. The prompt that is displayed is the current
@@ -682,7 +670,7 @@ command_line_handler (rl)
 /* NOTE: 1999-04-30 Asynchronous version of gdb_readline. gdb_readline
    will become obsolete when the event loop is made the default
    execution for gdb. */
-static void
+void
 gdb_readline2 ()
 {
   int c;
@@ -1001,9 +989,12 @@ _initialize_event_loop ()
       rl_instream = instream;
 
       /* Get a file descriptor for the input stream, so that we can
-        register it with the event loop. */
+         register it with the event loop. */
       input_fd = fileno (instream);
 
+      /* Tell gdb to use the cli_command_loop as the main loop. */
+      command_loop_hook = cli_command_loop;
+
       /* Now we need to create the event sources for the input file
          descriptor. */
       /* At this point in time, this is the only event source that we
@@ -1011,13 +1002,12 @@ _initialize_event_loop ()
         the target program (inferior), but that must be registered
         only when it actually exists (I.e. after we say 'run' or
         after we connect to a remote target. */
-#ifdef HAVE_POLL
-      create_file_handler (input_fd, POLLIN,
-                          (file_handler_func *) call_readline, 0);
-#else
-      create_file_handler (input_fd, GDB_READABLE,
-                          (file_handler_func *) call_readline, 0);
-#endif
+      add_file_handler (input_fd, (file_handler_func *) call_readline, 0);
+      
+      /* Tell gdb that we will be using the readline library. This
+        could be overwritten by a command in .gdbinit like 'set
+        editing on' or 'off'. */
+      async_command_editing_p = 1;
     }
 }
 
This page took 0.026475 seconds and 4 git commands to generate.