changeset 64111:a948ecc89102

(initialize_w32_display): Detect when the console dimensions are insane, and default to 80x25 instead. (w32_use_full_screen_buffer): default to NIL.
author Jason Rumney <jasonr@gnu.org>
date Wed, 06 Jul 2005 21:35:43 +0000
parents 8640e1fdbf57
children c0c8dc644c56
files src/w32console.c
diffstat 1 files changed, 19 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32console.c	Wed Jul 06 19:03:21 2005 +0000
+++ b/src/w32console.c	Wed Jul 06 21:35:43 2005 +0000
@@ -635,7 +635,24 @@
   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 */
@@ -691,7 +708,7 @@
 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);