Replace ../include/wait.h with gdb_wait.h.
[deliverable/binutils-gdb.git] / gdb / source.c
index 4293e59bc14a7e5e3b56961db592e2e070d135b5..dd26043b2cbc32b9ecc4a31d2ada12161dfa02d9 100644 (file)
@@ -23,6 +23,7 @@
 #include "expression.h"
 #include "language.h"
 #include "command.h"
+#include "source.h"
 #include "gdbcmd.h"
 #include "frame.h"
 #include "value.h"
@@ -37,6 +38,9 @@
 #include "objfiles.h"
 #include "annotate.h"
 #include "gdbtypes.h"
+#ifdef UI_OUT
+#include "ui-out.h"
+#endif
 
 #ifdef CRLF_SOURCE_FILES
 
 
 #endif /* ! defined (CRLF_SOURCE_FILES) */
 
-/* Forward declarations */
-
-int open_source_file PARAMS ((struct symtab *));
-
-void find_source_lines PARAMS ((struct symtab *, int));
-
 /* Prototypes for exported functions. */
 
 void _initialize_source PARAMS ((void));
@@ -1016,6 +1014,11 @@ print_source_lines_base (s, line, stopline, noerror)
   current_source_line = line;
   first_line_listed = line;
 
+#ifdef UI_OUT
+  /* If printing of source lines is disabled, just print file and line number */
+  if (ui_out_test_flags (uiout, ui_source_list))
+    {
+#endif
       /* Only prints "No such file or directory" once */
       if ((s != last_source_visited) || (!last_source_error))
        {
@@ -1027,6 +1030,14 @@ print_source_lines_base (s, line, stopline, noerror)
          desc = last_source_error;
          noerror = 1;
        }
+#ifdef UI_OUT
+    }
+  else
+    {
+      desc = -1;
+      noerror = 1;
+    }
+#endif
 
   if (desc < 0)
     {
@@ -1039,7 +1050,14 @@ print_source_lines_base (s, line, stopline, noerror)
          print_sys_errmsg (name, errno);
        }
       else
+#ifdef UI_OUT
+       ui_out_field_int (uiout, "line", line);
+      ui_out_text (uiout, "\tin ");
+      ui_out_field_string (uiout, "file", s->filename);
+      ui_out_text (uiout, "\n");
+#else
        printf_filtered ("%d\tin %s\n", line, s->filename);
+#endif
 
       return;
     }
@@ -1067,6 +1085,44 @@ print_source_lines_base (s, line, stopline, noerror)
 
   while (nlines-- > 0)
     {
+#ifdef UI_OUT
+      char buf[20];
+
+      c = fgetc (stream);
+      if (c == EOF)
+       break;
+      last_line_listed = current_source_line;
+      sprintf (buf, "%d\t", current_source_line++);
+      ui_out_text (uiout, buf);
+      do
+       {
+         if (c < 040 && c != '\t' && c != '\n' && c != '\r')
+           {
+             sprintf (buf, "^%c", c + 0100);
+             ui_out_text (uiout, buf);
+           }
+         else if (c == 0177)
+           ui_out_text (uiout, "^?");
+#ifdef CRLF_SOURCE_FILES
+         else if (c == '\r')
+           {
+             /* Skip a \r character, but only before a \n.  */
+             int c1 = fgetc (stream);
+
+             if (c1 != '\n')
+               printf_filtered ("^%c", c + 0100);
+             if (c1 != EOF)
+               ungetc (c1, stream);
+           }
+#endif
+         else
+           {
+             sprintf (buf, "%c", c);
+             ui_out_text (uiout, buf);
+           }
+       }
+      while (c != '\n' && (c = fgetc (stream)) >= 0);
+#else
       c = fgetc (stream);
       if (c == EOF)
        break;
@@ -1088,6 +1144,7 @@ print_source_lines_base (s, line, stopline, noerror)
            printf_filtered ("%c", c);
        }
       while (c != '\n' && (c = fgetc (stream)) >= 0);
+#endif
     }
 
   fclose (stream);
This page took 0.025777 seconds and 4 git commands to generate.