a5bd9f6
From 731ae0c1c7c0458a257e75c55b7739881dc2d5ed Mon Sep 17 00:00:00 2001
a5bd9f6
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
a5bd9f6
Date: Tue, 18 Sep 2012 11:52:19 +0200
a5bd9f6
Subject: [PATCH 041/364] 	* grub-core/kern/ieee1275/cmain.c
a5bd9f6
 (grub_ieee1275_find_options): Set 
a5bd9f6
 GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN on mac. 	*
a5bd9f6
 grub-core/term/ieee1275/console.c (grub_console_init_lately): Use 
a5bd9f6
 ieee1275-nocursor if GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN is set. 
a5bd9f6
 * grub-core/term/terminfo.c (grub_terminfo_set_current): Add new type 
a5bd9f6
 ieee1275-nocursor. 	* include/grub/ieee1275/ieee1275.h
a5bd9f6
 (grub_ieee1275_flag): New value 
a5bd9f6
 GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN.
a5bd9f6
a5bd9f6
---
a5bd9f6
 ChangeLog                         | 11 +++++++++++
a5bd9f6
 grub-core/kern/ieee1275/cmain.c   |  1 +
a5bd9f6
 grub-core/term/ieee1275/console.c |  3 ++-
a5bd9f6
 grub-core/term/terminfo.c         | 15 ++++++++++++---
a5bd9f6
 include/grub/ieee1275/ieee1275.h  |  4 +++-
a5bd9f6
 5 files changed, 29 insertions(+), 5 deletions(-)
a5bd9f6
a5bd9f6
diff --git a/ChangeLog b/ChangeLog
a5bd9f6
index b524cf6..3752a79 100644
a5bd9f6
--- a/ChangeLog
a5bd9f6
+++ b/ChangeLog
a5bd9f6
@@ -1,5 +1,16 @@
a5bd9f6
 2012-09-18  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
 
a5bd9f6
+	* grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): Set
a5bd9f6
+	GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN on mac.
a5bd9f6
+	* grub-core/term/ieee1275/console.c (grub_console_init_lately): Use
a5bd9f6
+	ieee1275-nocursor if GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN is set.
a5bd9f6
+	* grub-core/term/terminfo.c (grub_terminfo_set_current): Add new type
a5bd9f6
+	ieee1275-nocursor.
a5bd9f6
+	* include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): New value
a5bd9f6
+	GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN.
a5bd9f6
+
a5bd9f6
+2012-09-18  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
+
a5bd9f6
 	* grub-core/loader/i386/linux.c (grub_cmd_linux): Fix incorrect
a5bd9f6
 	le-conversion.
a5bd9f6
 	Reported by: BURETTE, Bernard.
a5bd9f6
diff --git a/grub-core/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c
a5bd9f6
index dd04d39..789669a 100644
a5bd9f6
--- a/grub-core/kern/ieee1275/cmain.c
a5bd9f6
+++ b/grub-core/kern/ieee1275/cmain.c
a5bd9f6
@@ -117,6 +117,7 @@ grub_ieee1275_find_options (void)
a5bd9f6
 	      grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS);
a5bd9f6
 	      grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_OFNET_SUFFIX);
a5bd9f6
 	      grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN);
a5bd9f6
+	      grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN);
a5bd9f6
 	      break;
a5bd9f6
 	    }
a5bd9f6
 	}
a5bd9f6
diff --git a/grub-core/term/ieee1275/console.c b/grub-core/term/ieee1275/console.c
a5bd9f6
index a8dfcff..93b81f4 100644
a5bd9f6
--- a/grub-core/term/ieee1275/console.c
a5bd9f6
+++ b/grub-core/term/ieee1275/console.c
a5bd9f6
@@ -247,9 +247,10 @@ grub_console_init_lately (void)
a5bd9f6
 
a5bd9f6
   if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_ANSI))
a5bd9f6
     type = "dumb";
a5bd9f6
+  else if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN))
a5bd9f6
+    type = "ieee1275-nocursor";
a5bd9f6
   else
a5bd9f6
     type = "ieee1275";
a5bd9f6
-
a5bd9f6
   grub_terminfo_init ();
a5bd9f6
   grub_terminfo_output_register (&grub_console_term_output, type);
a5bd9f6
 }
a5bd9f6
diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c
a5bd9f6
index d421e4e..a0f8d18 100644
a5bd9f6
--- a/grub-core/term/terminfo.c
a5bd9f6
+++ b/grub-core/term/terminfo.c
a5bd9f6
@@ -143,7 +143,8 @@ grub_terminfo_set_current (struct grub_term_output *term,
a5bd9f6
       return grub_errno;
a5bd9f6
     }
a5bd9f6
 
a5bd9f6
-  if (grub_strcmp ("ieee1275", str) == 0)
a5bd9f6
+  if (grub_strcmp ("ieee1275", str) == 0
a5bd9f6
+      || grub_strcmp ("ieee1275-nocursor", str) == 0)
a5bd9f6
     {
a5bd9f6
       data->name              = grub_strdup ("ieee1275");
a5bd9f6
       data->gotoxy            = grub_strdup ("\e[%i%p1%d;%p2%dH");
a5bd9f6
@@ -153,8 +154,16 @@ grub_terminfo_set_current (struct grub_term_output *term,
a5bd9f6
       data->cls               = grub_strdup ("?\e[2J");
a5bd9f6
       data->reverse_video_on  = grub_strdup ("\e[7m");
a5bd9f6
       data->reverse_video_off = grub_strdup ("\e[m");
a5bd9f6
-      data->cursor_on         = grub_strdup ("\e[?25h");
a5bd9f6
-      data->cursor_off        = grub_strdup ("\e[?25l");
a5bd9f6
+      if (grub_strcmp ("ieee1275", str) == 0)
a5bd9f6
+	{
a5bd9f6
+	  data->cursor_on         = grub_strdup ("\e[?25h");
a5bd9f6
+	  data->cursor_off        = grub_strdup ("\e[?25l");
a5bd9f6
+	}
a5bd9f6
+      else
a5bd9f6
+	{
a5bd9f6
+	  data->cursor_on         = 0;
a5bd9f6
+	  data->cursor_off        = 0;
a5bd9f6
+	}
a5bd9f6
       data->setcolor          = grub_strdup ("\e[3%p1%dm\e[4%p2%dm");
a5bd9f6
       return grub_errno;
a5bd9f6
     }
a5bd9f6
diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h
a5bd9f6
index 38a75fd..ee9b707 100644
a5bd9f6
--- a/include/grub/ieee1275/ieee1275.h
a5bd9f6
+++ b/include/grub/ieee1275/ieee1275.h
a5bd9f6
@@ -123,7 +123,9 @@ enum grub_ieee1275_flag
a5bd9f6
 
a5bd9f6
   GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN,
a5bd9f6
 
a5bd9f6
-  GRUB_IEEE1275_FLAG_BROKEN_REPEAT
a5bd9f6
+  GRUB_IEEE1275_FLAG_BROKEN_REPEAT,
a5bd9f6
+
a5bd9f6
+  GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN,
a5bd9f6
 };
a5bd9f6
 
a5bd9f6
 extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag);
a5bd9f6
-- 
a5bd9f6
1.8.1.4
a5bd9f6