(Fmodify_frame_parameters): Return a value.
[bpt/emacs.git] / src / w32console.c
index 70578f5..d2f0e06 100644 (file)
@@ -1,5 +1,6 @@
 /* Terminal hooks for GNU Emacs on the Microsoft W32 API.
-   Copyright (C) 1992, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1999, 2001, 2002, 2003, 2004,
+                 2005, 2006, 2007  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -635,7 +636,24 @@ initialize_w32_display (void)
   meta_key = 1;
   char_attr_normal = info.wAttributes;
 
-  if (w32_use_full_screen_buffer)
+  /* Determine if the info returned by GetConsoleScreenBufferInfo
+     is realistic.  Old MS Telnet servers used to only fill out
+     the dwSize portion, even modern one fill the whole struct with
+     garbage when using non-MS telnet clients.  */
+  if ((w32_use_full_screen_buffer
+       && (info.dwSize.Y < 20 || info.dwSize.Y > 100
+          || info.dwSize.X < 40 || info.dwSize.X > 200))
+      || (!w32_use_full_screen_buffer
+         && (info.srWindow.Bottom - info.srWindow.Top < 20
+             || info.srWindow.Bottom - info.srWindow.Top > 100
+             || info.srWindow.Right - info.srWindow.Left < 40
+             || info.srWindow.Right - info.srWindow.Left > 100)))
+    {
+      FRAME_LINES (SELECTED_FRAME ()) = 25;
+      SET_FRAME_COLS (SELECTED_FRAME (), 80);
+    }
+
+  else if (w32_use_full_screen_buffer)
     {
       FRAME_LINES (SELECTED_FRAME ()) = info.dwSize.Y; /* lines per page */
       SET_FRAME_COLS (SELECTED_FRAME (), info.dwSize.X);  /* characters per line */
@@ -687,11 +705,11 @@ syms_of_ntterm ()
   DEFVAR_BOOL ("w32-use-full-screen-buffer",
                &w32_use_full_screen_buffer,
               doc: /* Non-nil means make terminal frames use the full screen buffer dimensions.
-This is desirable when running Emacs over telnet, and is the default.
+This is desirable when running Emacs over telnet.
 A value of nil means use the current console window dimensions; this
 may be preferrable when working directly at the console with a large
 scroll-back buffer.  */);
-  w32_use_full_screen_buffer = 1;
+  w32_use_full_screen_buffer = 0;
 
   defsubr (&Sset_screen_color);
   defsubr (&Sset_cursor_size);