Merge from emacs-23
[bpt/emacs.git] / src / w32console.c
index d76ec46..35f0fc1 100644 (file)
@@ -1,6 +1,6 @@
 /* Terminal hooks for GNU Emacs on the Microsoft W32 API.
    Copyright (C) 1992, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-                 2008  Free Software Foundation, Inc.
+                 2008, 2009, 2010  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -25,10 +25,9 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
-#include <stdlib.h>
 #include <stdio.h>
 #include <windows.h>
-#include <string.h>
+#include <setjmp.h>
 
 #include "lisp.h"
 #include "character.h"
@@ -41,13 +40,13 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "w32inevt.h"
 
 /* from window.c */
-extern Lisp_Object Frecenter ();
+extern Lisp_Object Frecenter (Lisp_Object);
 
 /* from keyboard.c */
-extern int detect_input_pending ();
+extern int detect_input_pending (void);
 
 /* from sysdep.c */
-extern int read_input_pending ();
+extern int read_input_pending (void);
 
 static void w32con_move_cursor (struct frame *f, int row, int col);
 static void w32con_clear_to_end (struct frame *f);
@@ -67,7 +66,7 @@ static WORD w32_face_attributes (struct frame *f, int face_id);
 static COORD   cursor_coords;
 static HANDLE  prev_screen, cur_screen;
 static WORD    char_attr_normal;
-static DWORD   prev_console_mode;
+static DWORD   prev_console_mode;
 
 #ifndef USE_SEPARATE_SCREEN
 static CONSOLE_CURSOR_INFO prev_console_cursor;
@@ -267,7 +266,8 @@ scroll_line (struct frame *f, int dist, int direction)
 
 /* If start is zero insert blanks instead of a string at start ?. */
 static void
-w32con_insert_glyphs (struct frame *f, register struct glyph *start, register int len)
+w32con_insert_glyphs (struct frame *f, register struct glyph *start,
+                     register int len)
 {
   scroll_line (f, len, RIGHT);
 
@@ -285,8 +285,8 @@ w32con_insert_glyphs (struct frame *f, register struct glyph *start, register in
     }
 }
 
-extern unsigned char *encode_terminal_code P_ ((struct glyph *, int, 
-                                               struct coding_system *));
+extern unsigned char *encode_terminal_code (struct glyph *, int,
+                                            struct coding_system *);
 
 static void
 w32con_write_glyphs (struct frame *f, register struct glyph *string,
@@ -391,8 +391,7 @@ SOUND is 'asterisk, 'exclamation, 'hand, 'question, 'ok, or 'silent
 to use the corresponding system sound for the bell.  The 'silent sound
 prevents Emacs from making any sound at all.
 SOUND is nil to use the normal beep.  */)
-     (sound)
-     Lisp_Object sound;
+  (Lisp_Object sound)
 {
   CHECK_SYMBOL (sound);
 
@@ -437,7 +436,7 @@ w32con_reset_terminal_modes (struct terminal *t)
   FillConsoleOutputCharacter (cur_screen, ' ', n, dest, &r);
   /* Now that the screen is clear, put the cursor at the top.  */
   SetConsoleCursorPosition (cur_screen, dest);
-  
+
 #ifdef USE_SEPARATE_SCREEN
   SetConsoleActiveScreenBuffer (prev_screen);
 #else
@@ -486,6 +485,62 @@ w32con_set_terminal_window (struct frame *f, int size)
 {
 }
 
+/***********************************************************************
+                       stubs from termcap.c
+ ***********************************************************************/
+
+void
+sys_tputs (char *str, int nlines, int (*outfun) (int))
+{
+}
+
+char *
+sys_tgetstr (char *cap, char **area)
+{
+  return NULL;
+}
+
+
+/***********************************************************************
+                       stubs from cm.c
+ ***********************************************************************/
+
+struct tty_display_info *current_tty = NULL;
+int cost = 0;
+
+int
+evalcost (int c)
+{
+  return c;
+}
+
+int
+cmputc (int c)
+{
+  return c;
+}
+
+void
+cmcheckmagic (struct tty_display_info *tty)
+{
+}
+
+void
+cmcostinit (struct tty_display_info *tty)
+{
+}
+
+void
+cmgoto (struct tty_display_info *tty, int row, int col)
+{
+}
+
+void
+Wcm_clear (struct tty_display_info *tty)
+{
+}
+
+
 /***********************************************************************
                                Faces
  ***********************************************************************/
@@ -494,9 +549,7 @@ w32con_set_terminal_window (struct frame *f, int size)
 /* Turn appearances of face FACE_ID on tty frame F on.  */
 
 static WORD
-w32_face_attributes (f, face_id)
-     struct frame *f;
-     int face_id;
+w32_face_attributes (struct frame *f, int face_id)
 {
   WORD char_attr;
   struct face *face = FACE_FROM_ID (f, face_id);
@@ -530,30 +583,6 @@ w32_face_attributes (f, face_id)
   return char_attr;
 }
 
-
-
-/* Given a color index, return its standard name.  */
-Lisp_Object
-vga_stdcolor_name (int idx)
-{
-  /* Standard VGA colors, in the order of their standard numbering
-     in the default VGA palette.  */
-  static char *vga_colors[16] = {
-    "black", "blue", "green", "cyan", "red", "magenta", "brown",
-    "lightgray", "darkgray", "lightblue", "lightgreen", "lightcyan",
-    "lightred", "lightmagenta", "yellow", "white"
-  };
-
-  extern Lisp_Object Qunspecified;
-
-  if (idx >= 0 && idx < sizeof (vga_colors) / sizeof (vga_colors[0]))
-    return build_string (vga_colors[idx]);
-  else
-    return Qunspecified;       /* meaning the default */
-}
-
-typedef int (*term_hook) ();
-
 void
 initialize_w32_display (struct terminal *term)
 {
@@ -561,19 +590,19 @@ initialize_w32_display (struct terminal *term)
 
   term->rif = 0; /* No window based redisplay on the console.  */
   term->cursor_to_hook         = w32con_move_cursor;
-  term->raw_cursor_to_hook             = w32con_move_cursor;
-  term->clear_to_end_hook              = w32con_clear_to_end;
-  term->clear_frame_hook               = w32con_clear_frame;
+  term->raw_cursor_to_hook     = w32con_move_cursor;
+  term->clear_to_end_hook      = w32con_clear_to_end;
+  term->clear_frame_hook       = w32con_clear_frame;
   term->clear_end_of_line_hook = w32con_clear_end_of_line;
-  term->ins_del_lines_hook             = w32con_ins_del_lines;
-  term->insert_glyphs_hook             = w32con_insert_glyphs;
-  term->write_glyphs_hook              = w32con_write_glyphs;
-  term->delete_glyphs_hook             = w32con_delete_glyphs;
+  term->ins_del_lines_hook     = w32con_ins_del_lines;
+  term->insert_glyphs_hook     = w32con_insert_glyphs;
+  term->write_glyphs_hook      = w32con_write_glyphs;
+  term->delete_glyphs_hook     = w32con_delete_glyphs;
   term->ring_bell_hook         = w32_sys_ring_bell;
-  term->reset_terminal_modes_hook      = w32con_reset_terminal_modes;
+  term->reset_terminal_modes_hook = w32con_reset_terminal_modes;
   term->set_terminal_modes_hook        = w32con_set_terminal_modes;
-  term->set_terminal_window_hook       = w32con_set_terminal_window;
-  term->update_begin_hook              = w32con_update_begin;
+  term->set_terminal_window_hook = w32con_set_terminal_window;
+  term->update_begin_hook      = w32con_update_begin;
   term->update_end_hook                = w32con_update_end;
 
   term->read_socket_hook = w32_console_read_socket;
@@ -617,8 +646,8 @@ initialize_w32_display (struct terminal *term)
 
   /* Respect setting of LINES and COLUMNS environment variables.  */
   {
-    char * lines = getenv("LINES");
-    char * columns = getenv("COLUMNS");
+    char * lines = getenv ("LINES");
+    char * columns = getenv ("COLUMNS");
 
     if (lines != NULL && columns != NULL)
       {
@@ -694,9 +723,7 @@ initialize_w32_display (struct terminal *term)
 
 DEFUN ("set-screen-color", Fset_screen_color, Sset_screen_color, 2, 2, 0,
        doc: /* Set screen colors.  */)
-    (foreground, background)
-    Lisp_Object foreground;
-    Lisp_Object background;
+  (Lisp_Object foreground, Lisp_Object background)
 {
   char_attr_normal = XFASTINT (foreground) + (XFASTINT (background) << 4);
 
@@ -706,8 +733,7 @@ DEFUN ("set-screen-color", Fset_screen_color, Sset_screen_color, 2, 2, 0,
 
 DEFUN ("set-cursor-size", Fset_cursor_size, Sset_cursor_size, 1, 1, 0,
        doc: /* Set cursor size.  */)
-    (size)
-    Lisp_Object size;
+  (Lisp_Object size)
 {
   CONSOLE_CURSOR_INFO cci;
   cci.dwSize = XFASTINT (size);
@@ -718,7 +744,7 @@ DEFUN ("set-cursor-size", Fset_cursor_size, Sset_cursor_size, 1, 1, 0,
 }
 
 void
-syms_of_ntterm ()
+syms_of_ntterm (void)
 {
   DEFVAR_BOOL ("w32-use-full-screen-buffer",
                &w32_use_full_screen_buffer,