All of lore.kernel.org
 help / color / mirror / Atom feed
* [BUG] grub2 menu : freeze while initial drawing
@ 2004-12-14 10:27 Vincent Pelletier
  2004-12-19 15:22 ` Yoshinori K. Okuji
  0 siblings, 1 reply; 10+ messages in thread
From: Vincent Pelletier @ 2004-12-14 10:27 UTC (permalink / raw)
  To: grub-devel

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi.
I've noticed that problem some days ago, but as I still can't find the
cause I report it. I'm running it on an x86, freezes in bochs, qemu and
on a real computer.

The menu border is drawn (btw : the top border isn't drawn, the bottom
one is drawn below screen, and the right one has 2 empty columns on its
right. I'm not reporting it as a bug since Marco Gerards told me there
may already be a patch for that), the top message too (GRUB version...)
and then it freezes.
Once border drawing disabled, the second message was drawn (Press enter
to boot the selected OS...) and the cursor was still visible. I saw it
stop blinking (tested in bochs only).

I think it should be a timer-related problem, maybe only on x86 - I
don't have any other architecture family here.

Vincent Pelletier

PS: my previous patch had a signature problem because I sent it with the
wrong address. I can send it again if there is any problem about that.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFBvsAaFEQoKRQyjtURAo0cAKCC0EljlsClUQBGplBKaSwjFQ9DVQCghzwS
T6OCZt4VIw+lckIDmKXkKfs=
=9ZS5
-----END PGP SIGNATURE-----



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [BUG] grub2 menu : freeze while initial drawing
  2004-12-14 10:27 [BUG] grub2 menu : freeze while initial drawing Vincent Pelletier
@ 2004-12-19 15:22 ` Yoshinori K. Okuji
  2004-12-19 21:45   ` [PATCH] " Vincent Pelletier
  0 siblings, 1 reply; 10+ messages in thread
From: Yoshinori K. Okuji @ 2004-12-19 15:22 UTC (permalink / raw)
  To: The development of GRUB 2

On Tuesday 14 December 2004 11:27, Vincent Pelletier wrote:
> The menu border is drawn (btw : the top border isn't drawn, the
> bottom one is drawn below screen, and the right one has 2 empty
> columns on its right. I'm not reporting it as a bug since Marco
> Gerards told me there may already be a patch for that), the top
> message too (GRUB version...) and then it freezes.
> Once border drawing disabled, the second message was drawn (Press
> enter to boot the selected OS...) and the cursor was still visible. I
> saw it stop blinking (tested in bochs only).

Ummh. I don't know why. I should check it seriously. I have no energy to 
do this at the moment, unfortunately.

There are some possibilities. I think it is very likely that GRUB 
attempts to write something outside the screen and corrupt BIOS code or 
data on memory.

If you can test this more, please do it.

Thanks,
Okuji



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH] Re: [BUG] grub2 menu : freeze while initial drawing
  2004-12-19 15:22 ` Yoshinori K. Okuji
@ 2004-12-19 21:45   ` Vincent Pelletier
  2004-12-19 21:57     ` Vincent Pelletier
  0 siblings, 1 reply; 10+ messages in thread
From: Vincent Pelletier @ 2004-12-19 21:45 UTC (permalink / raw)
  To: The development of GRUB 2


[-- Attachment #1.1: Type: text/plain, Size: 843 bytes --]

Yoshinori K. Okuji a écrit :
> If you can test this more, please do it.

Done :).
Menu tested to work with 2 entries. Vertical scrolling not tested (when 
there are too many entries to fit on screen).

Please let me know if the coding style and Changelog are ok.

Vincent Pelletier

2004-12-19  Vincent Pelletier  <subdino2004@yahoo.fr>

	* normal/menu.c: corrected bug which caused menu to be displayed
	outside of the screen
	(#define TERM_TOP_BORDER_Y): changed TERM_HEIGHT to
	TERM_INFO_HEIGHT
	(draw_border): make the right border stick the right border,
	replaced while loop by for loop, number of line in rectangle
	consistent with number of line displayed in print_entries
	added a margin below the rectangle
	(print_entry): entry fits the rectangle horizontaly
	(print_entries): vertical line displayed in case no arrow is
	displayed

[-- Attachment #1.2: menu.c --]
[-- Type: text/x-csrc, Size: 11190 bytes --]

/*
 *  GRUB  --  GRand Unified Bootloader
 *  Copyright (C) 2003,2004  Free Software Foundation, Inc.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <grub/normal.h>
#include <grub/term.h>
#include <grub/misc.h>
#include <grub/loader.h>
#include <grub/mm.h>
#include <grub/machine/time.h>

/* FIXME: These below are all runaround.  */

#define DISP_LEFT	0x2190
#define DISP_UP		0x2191
#define DISP_RIGHT	0x2192
#define DISP_DOWN	0x2193
#define DISP_HLINE	0x2501
#define DISP_VLINE	0x2503
#define DISP_UL		0x250F
#define DISP_UR		0x2513
#define DISP_LL		0x2517
#define DISP_LR		0x251B

/* FIXME: These should be dynamically obtained from a terminal.  */
#define TERM_WIDTH	(80 - 1)
#define TERM_HEIGHT	25

/* The number of lines of "GRUB version..." at the top.  */
#define TERM_INFO_HEIGHT	1

/* The number of columns/lines between messages/borders/etc.  */
#define TERM_MARGIN	1

/* The number of columns of scroll information.  */
#define TERM_SCROLL_WIDTH	1

/* The Y position of the top border.  */
#define TERM_TOP_BORDER_Y	(TERM_MARGIN + TERM_INFO_HEIGHT + TERM_MARGIN)

/* The X position of the left border.  */
#define TERM_LEFT_BORDER_X	TERM_MARGIN

/* The width of the border.  */
#define TERM_BORDER_WIDTH	(TERM_WIDTH \
                                 - TERM_MARGIN * 3 \
				 - TERM_SCROLL_WIDTH)

/* The number of lines of messages at the bottom.  */
#define TERM_MESSAGE_HEIGHT	8

/* The height of the border.  */
#define TERM_BORDER_HEIGHT	(TERM_HEIGHT \
                                 - TERM_TOP_BORDER_Y \
                                 - TERM_MESSAGE_HEIGHT)

/* The number of entries shown at a time.  */
#define TERM_NUM_ENTRIES	(TERM_BORDER_HEIGHT - 2)

/* The Y position of the first entry.  */
#define TERM_FIRST_ENTRY_Y	(TERM_TOP_BORDER_Y + 1)

/* The max column number of an entry. The last "-1" is for a
   continuation marker.  */
#define TERM_ENTRY_WIDTH	(TERM_BORDER_WIDTH - 2 - TERM_MARGIN * 2 - 1)

/* The standard X position of the cursor.  */
#define TERM_CURSOR_X		(TERM_LEFT_BORDER_X \
                                 + TERM_BORDER_WIDTH \
                                 - TERM_MARGIN \
                                 - 1)

static void
draw_border (void)
{
  unsigned i;
  
  grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
  
  grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y);
  grub_putcode (DISP_UL);
  for (i = 0; i < TERM_BORDER_WIDTH; i++)
    grub_putcode (DISP_HLINE);
  grub_putcode (DISP_UR);

  for(i=0;i<(unsigned) TERM_NUM_ENTRIES;i++)
    {
      grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + i + 1);
      grub_putcode (DISP_VLINE);
      grub_gotoxy (TERM_MARGIN + TERM_BORDER_WIDTH + 1, TERM_TOP_BORDER_Y + i + 1);
      grub_putcode (DISP_VLINE);

    }

  grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + TERM_NUM_ENTRIES + 1);
  grub_putcode (DISP_LL);
  for (i = 0; i < TERM_BORDER_WIDTH; i++)
    grub_putcode (DISP_HLINE);
  grub_putcode (DISP_LR);

  grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);

  grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + TERM_NUM_ENTRIES + TERM_MARGIN +1 );
}

static void
print_message (int nested, int edit)
{
  if (edit)
    {
      grub_printf ("\n\
      Minimum Emacs-like screen editing is supported. TAB lists\n\
      available completions. Press C-x (\'x\' with Ctrl) to boot,\n\
      C-c (\'c\' with Ctrl) for a command-line or ESC to return menu.");
    }
  else
    {
      grub_printf ("\n\
      Use the %C and %C keys to select which entry is highlighted.\n",
		   (grub_uint32_t) DISP_UP, (grub_uint32_t) DISP_DOWN);
      grub_printf ("\
      Press enter to boot the selected OS, \'e\' to edit the\n\
      commands before booting or \'c\' for a command-line.");
      if (nested)
	grub_printf ("\n\
      ESC to return previous menu.");
    }
  
}

static grub_menu_entry_t
get_entry (grub_menu_t menu, int no)
{
  grub_menu_entry_t e;

  for (e = menu->entry_list; e && no > 0; e = e->next, no--)
    ;

  return e;
}

static void
print_entry (int y, int highlight, grub_menu_entry_t entry)
{
  int x;
  const char *title;

  title = entry ? entry->title : "";
  
  grub_setcolorstate (highlight
		      ? GRUB_TERM_COLOR_HIGHLIGHT
		      : GRUB_TERM_COLOR_NORMAL);

  grub_gotoxy (TERM_LEFT_BORDER_X + TERM_MARGIN, y);
  grub_putchar (' ');
  for (x = TERM_LEFT_BORDER_X + TERM_MARGIN + 1;
       x < TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH + 1;
       x++)
    {
      if (*title && x <= TERM_LEFT_BORDER_X + TERM_ENTRY_WIDTH + 1)
	{
	  if (x == TERM_LEFT_BORDER_X + TERM_ENTRY_WIDTH + 1)
	    grub_putcode (DISP_RIGHT);
	  else
	    grub_putchar (*title++);
	}
      else
	grub_putchar (' ');
    }
  grub_gotoxy (TERM_CURSOR_X, y);

  grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
}

static void
print_entries (grub_menu_t menu, int first, int offset)
{
  grub_menu_entry_t e;
  int i;
  
  grub_gotoxy (TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH + TERM_MARGIN,
	       TERM_FIRST_ENTRY_Y);

  if (first)
    grub_putcode (DISP_UP);
  else
    grub_putcode (DISP_VLINE);

  e = get_entry (menu, first);

  for (i = 0; i < TERM_NUM_ENTRIES; i++)
    {
      print_entry (TERM_FIRST_ENTRY_Y + i, offset == i, e);
      if (e)
	e = e->next;
    }

  grub_gotoxy (TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH + TERM_MARGIN,
	       TERM_TOP_BORDER_Y + TERM_NUM_ENTRIES);

  if (e)
    grub_putcode (DISP_DOWN);
  else
    grub_putcode (DISP_VLINE);

  grub_gotoxy (TERM_CURSOR_X, TERM_FIRST_ENTRY_Y + offset);
}

static void
init_page (int nested, int edit)
{
  grub_normal_init_page ();
  draw_border ();
  print_message (nested, edit);
}

/* Edit a menu entry with an Emacs-like interface.  */
static void
edit_menu_entry (grub_menu_entry_t entry)
{
  /* Not yet implemented.  */
}

static int
run_menu (grub_menu_t menu, int nested)
{
  int first, offset;
  unsigned long saved_time;
  
  first = 0;
  offset = menu->default_entry;
  if (offset > TERM_NUM_ENTRIES - 1)
    {
      first = offset - (TERM_NUM_ENTRIES - 1);
      offset = TERM_NUM_ENTRIES - 1;
    }

  /* Initialize the time.  */
  saved_time = grub_get_rtc ();

 refresh:
  grub_setcursor (0);
  init_page (nested, 0);
  print_entries (menu, first, offset);
  grub_refresh ();

  while (1)
    {
      int c;

      if (menu->timeout > 0)
	{
	  unsigned long current_time;

	  current_time = grub_get_rtc ();
	  if (current_time - saved_time >= GRUB_TICKS_PER_SECOND)
	    {
	      menu->timeout--;
	      saved_time = current_time;
	    }
	  
	  grub_gotoxy (0, TERM_HEIGHT - 3);
	  /* NOTE: Do not remove the trailing space characters.
	     They are required to clear the line.  */
	  grub_printf ("\
   The highlighted entry will be booted automatically in %d seconds.    ",
		       menu->timeout);
	  grub_gotoxy (TERM_CURSOR_X, TERM_FIRST_ENTRY_Y + offset);
	  grub_refresh ();
	}

      if (menu->timeout == 0)
	return menu->default_entry;
      
      if (grub_checkkey () >= 0 || menu->timeout < 0)
	{
	  c = GRUB_TERM_ASCII_CHAR (grub_getkey ());
	  
	  if (menu->timeout >= 0)
	    {
	      grub_gotoxy (0, TERM_HEIGHT - 3);
              grub_printf ("\
                                                                        ");
              menu->timeout = -1;
              menu->fallback_entry = -1;
	      grub_gotoxy (TERM_CURSOR_X, TERM_FIRST_ENTRY_Y + offset);
	    }
	  
	  switch (c)
	    {
	    case 16:
	    case '^':
	      if (offset > 0)
		{
		  print_entry (TERM_FIRST_ENTRY_Y + offset, 0,
			       get_entry (menu, first + offset));
		  offset--;
		  print_entry (TERM_FIRST_ENTRY_Y + offset, 1,
			       get_entry (menu, first + offset));
		}
	      else if (first > 0)
		{
		  first--;
		  print_entries (menu, first, offset);
		}
	      break;
	      
	    case 14:
	    case 'v':
	      if (menu->size > first + offset + 1)
		{
		  if (offset < TERM_NUM_ENTRIES - 1)
		    {
		      print_entry (TERM_FIRST_ENTRY_Y + offset, 0,
				   get_entry (menu, first + offset));
		      offset++;
		      print_entry (TERM_FIRST_ENTRY_Y + offset, 1,
				   get_entry (menu, first + offset));
		    }
		  else
		    {
		      first++;
		      print_entries (menu, first, offset);
		    }
		}
	      break;
	      
	    case '\n':
	    case '\r':
	    case 6:
	      grub_setcursor (1);
	      return first + offset;
	      
	    case '\e':
	      if (nested)
		{
		  grub_setcursor (1);
		  return -1;
		}
	      break;
	      
	    case 'c':
	      grub_setcursor (1);
	      grub_cmdline_run (1);
	      goto refresh;

	    case 'e':
	      edit_menu_entry (get_entry (menu, first + offset));
	      goto refresh;
	      
	    default:
	      break;
	    }
	  
	  grub_refresh ();
	}
    }

  /* Never reach here.  */
  return -1;
}

/* Run a menu entry.  */
static void
run_menu_entry (grub_menu_entry_t entry)
{
  grub_command_list_t cl;

  for (cl = entry->command_list; cl != 0; cl = cl->next)
    {
      grub_command_t c;

      if (cl->command[0] == '\0')
	/* Ignore an empty command line.  */
	continue;
      
      c = grub_command_find (cl->command);
      if (! c)
	break;
      
      if (! (c->flags & GRUB_COMMAND_FLAG_CMDLINE))
	{
	  grub_error (GRUB_ERR_INVALID_COMMAND,
		      "invalid command `%s'",
		      cl->command);
	  break;
	}
      
      if (! (c->flags & GRUB_COMMAND_FLAG_NO_ECHO))
	grub_printf ("%s\n", cl->command);
      
      if (grub_command_execute (cl->command) != 0)
	break;
    }
  
  if (grub_errno == GRUB_ERR_NONE && grub_loader_is_loaded ())
    /* Implicit execution of boot, only if something is loaded.  */
    grub_command_execute ("boot");
}

void
grub_menu_run (grub_menu_t menu, int nested)
{
  while (1)
    {
      int boot_entry;
      grub_menu_entry_t e;
      
      boot_entry = run_menu (menu, nested);
      if (boot_entry < 0)
	break;

      grub_cls ();
      grub_setcursor (1);

      e = get_entry (menu, boot_entry);
      grub_printf ("  Booting \'%s\'\n\n", e->title);
  
      run_menu_entry (e);

      /* Deal with a fallback entry.  */
      /* FIXME: Multiple fallback entries like GRUB Legacy.  */
      if (menu->fallback_entry >= 0)
	{
	  grub_print_error ();
	  grub_errno = GRUB_ERR_NONE;
	  
	  e = get_entry (menu, menu->fallback_entry);
	  menu->fallback_entry = -1;
	  grub_printf ("\n  Falling back to \'%s\'\n\n", e->title);
	  run_menu_entry (e);
	}

      if (grub_errno != GRUB_ERR_NONE)
	{
	  grub_print_error ();
	  grub_errno = GRUB_ERR_NONE;

	  /* Wait until the user pushes any key so that the user
	     can see what happened.  */
	  grub_printf ("\nPress any key to continue...");
	  (void) grub_getkey ();
	}
    }
}

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Re: [BUG] grub2 menu : freeze while initial drawing
  2004-12-19 21:45   ` [PATCH] " Vincent Pelletier
@ 2004-12-19 21:57     ` Vincent Pelletier
  2004-12-22 13:45       ` Yoshinori K. Okuji
  2005-01-08 15:25       ` [PATCH v2] " Vincent Pelletier
  0 siblings, 2 replies; 10+ messages in thread
From: Vincent Pelletier @ 2004-12-19 21:57 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 41 bytes --]

Here is the patch. :$

Vincent Pelletier

[-- Attachment #2: menu.c.diff --]
[-- Type: text/plain, Size: 2586 bytes --]

Index: menu.c
===================================================================
RCS file: /cvsroot/grub/grub2/normal/menu.c,v
retrieving revision 1.8
diff -u -p -r1.8 menu.c
--- menu.c	18 Sep 2004 13:42:05 -0000	1.8
+++ menu.c	19 Dec 2004 21:27:40 -0000
@@ -51,7 +51,7 @@
 #define TERM_SCROLL_WIDTH	1
 
 /* The Y position of the top border.  */
-#define TERM_TOP_BORDER_Y	(TERM_MARGIN + TERM_HEIGHT + TERM_MARGIN)
+#define TERM_TOP_BORDER_Y	(TERM_MARGIN + TERM_INFO_HEIGHT + TERM_MARGIN)
 
 /* The X position of the left border.  */
 #define TERM_LEFT_BORDER_X	TERM_MARGIN
@@ -94,31 +94,28 @@ draw_border (void)
   
   grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y);
   grub_putcode (DISP_UL);
-  for (i = 0; i < TERM_BORDER_WIDTH - 2; i++)
+  for (i = 0; i < TERM_BORDER_WIDTH; i++)
     grub_putcode (DISP_HLINE);
   grub_putcode (DISP_UR);
 
-  i = 1;
-  while (1)
+  for(i=0;i<(unsigned) TERM_NUM_ENTRIES;i++)
     {
-      grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + i);
-
-      if (i > (unsigned) TERM_NUM_ENTRIES)
-	break;
-
+      grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + i + 1);
       grub_putcode (DISP_VLINE);
-      grub_gotoxy (TERM_MARGIN + TERM_BORDER_WIDTH - 1, TERM_TOP_BORDER_Y + i);
+      grub_gotoxy (TERM_MARGIN + TERM_BORDER_WIDTH + 1, TERM_TOP_BORDER_Y + i + 1);
       grub_putcode (DISP_VLINE);
 
-      i++;
     }
 
+  grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + TERM_NUM_ENTRIES + 1);
   grub_putcode (DISP_LL);
-  for (i = 0; i < TERM_BORDER_WIDTH - 2; i++)
+  for (i = 0; i < TERM_BORDER_WIDTH; i++)
     grub_putcode (DISP_HLINE);
   grub_putcode (DISP_LR);
 
   grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
+
+  grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + TERM_NUM_ENTRIES + TERM_MARGIN +1 );
 }
 
 static void
@@ -172,7 +169,7 @@ print_entry (int y, int highlight, grub_
   grub_gotoxy (TERM_LEFT_BORDER_X + TERM_MARGIN, y);
   grub_putchar (' ');
   for (x = TERM_LEFT_BORDER_X + TERM_MARGIN + 1;
-       x < TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH - 1;
+       x < TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH + 1;
        x++)
     {
       if (*title && x <= TERM_LEFT_BORDER_X + TERM_ENTRY_WIDTH + 1)
@@ -202,7 +199,7 @@ print_entries (grub_menu_t menu, int fir
   if (first)
     grub_putcode (DISP_UP);
   else
-    grub_putchar (' ');
+    grub_putcode (DISP_VLINE);
 
   e = get_entry (menu, first);
 
@@ -219,7 +216,7 @@ print_entries (grub_menu_t menu, int fir
   if (e)
     grub_putcode (DISP_DOWN);
   else
-    grub_putchar (' ');
+    grub_putcode (DISP_VLINE);
 
   grub_gotoxy (TERM_CURSOR_X, TERM_FIRST_ENTRY_Y + offset);
 }

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Re: [BUG] grub2 menu : freeze while initial drawing
  2004-12-19 21:57     ` Vincent Pelletier
@ 2004-12-22 13:45       ` Yoshinori K. Okuji
  2004-12-22 13:57         ` Vincent Pelletier
  2005-01-08 15:25       ` [PATCH v2] " Vincent Pelletier
  1 sibling, 1 reply; 10+ messages in thread
From: Yoshinori K. Okuji @ 2004-12-22 13:45 UTC (permalink / raw)
  To: The development of GRUB 2

On Sunday 19 December 2004 22:57, Vincent Pelletier wrote:
> Here is the patch. :$

Thank you very much.

BTW, have you already assigned your copyright to the FSF? Probably I 
will have to send the template of the request form.

Okuji



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Re: [BUG] grub2 menu : freeze while initial drawing
  2004-12-22 13:45       ` Yoshinori K. Okuji
@ 2004-12-22 13:57         ` Vincent Pelletier
  2004-12-22 16:03           ` Yoshinori K. Okuji
  0 siblings, 1 reply; 10+ messages in thread
From: Vincent Pelletier @ 2004-12-22 13:57 UTC (permalink / raw)
  To: The development of GRUB 2

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Yoshinori K. Okuji a ?crit :
| BTW, have you already assigned your copyright to the FSF? Probably I
| will have to send the template of the request form.

No I haven't.
Marco Gerards told me about it.
Can it be done via Internet or has it to be "real" signature on "real"
paper ?

Vincent Pelletier
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFByX01FEQoKRQyjtURAiOZAKCAU3oB83p/lKsWcLyiKN8G+IJmMQCgoOcK
fNBJtVBqU1btTXgjydicntY=
=rVTm
-----END PGP SIGNATURE-----



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Re: [BUG] grub2 menu : freeze while initial drawing
  2004-12-22 13:57         ` Vincent Pelletier
@ 2004-12-22 16:03           ` Yoshinori K. Okuji
  0 siblings, 0 replies; 10+ messages in thread
From: Yoshinori K. Okuji @ 2004-12-22 16:03 UTC (permalink / raw)
  To: The development of GRUB 2

On Wednesday 22 December 2004 14:57, Vincent Pelletier wrote:
> Can it be done via Internet or has it to be "real" signature on
> "real" paper ?

It is physical surely for legal matters. It usually takes 2 weeks to 
completely due to the slowness of snail mail (this depends on 
countries, but the post office in the US is slow and the FSF is in the 
US, therefore it is always slow).

So I will send the template to you later.

Okuji



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2] grub2 menu : freeze while initial drawing
  2004-12-19 21:57     ` Vincent Pelletier
  2004-12-22 13:45       ` Yoshinori K. Okuji
@ 2005-01-08 15:25       ` Vincent Pelletier
  2005-01-20 14:36         ` Marco Gerards
  1 sibling, 1 reply; 10+ messages in thread
From: Vincent Pelletier @ 2005-01-08 15:25 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 1140 bytes --]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Here is the second version of the patch.
The result should look closer to what was originally designed.

Updated Changelog entry:
2005-01-08  Vincent Pelletier  <subdino2004@yahoo.fr>

~    * normal/menu.c: Corrected TERM_TOP_BORDER_Y.
~    (draw_border): Replaced "while" loop by "for" loop. Number of lines
~    in rectangle consistent with number of lines displayed in
~    print_entries. Added a margin below the rectangle.
~    (print_entry): Entry fits the rectangle client width.
~    (print_entries): Scroll arrows displayed next to right border.

I'm not sure about how the scroll arrows should look like (whether they
should stick to the right border of the rectangle, be on the border or
or have an empty char between the border and the arrow). Please correct
my patch if I'm wrong - I've chosen the first.

Vincent Pelletier
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFB3/tZFEQoKRQyjtURAgk9AKChdkYrT4S00/jOUFKaBp3YNKX+AwCfRrEX
mqjDKP/ewL9Z9gAt7W7sqlo=
=5ssG
-----END PGP SIGNATURE-----

[-- Attachment #2: menu.c-2.diff --]
[-- Type: text/plain, Size: 3029 bytes --]

Index: menu.c
===================================================================
RCS file: /cvsroot/grub/grub2/normal/menu.c,v
retrieving revision 1.8
diff -u -p -r1.8 menu.c
--- menu.c	18 Sep 2004 13:42:05 -0000	1.8
+++ menu.c	8 Jan 2005 15:03:05 -0000
@@ -38,7 +38,7 @@
 #define DISP_LR		0x251B
 
 /* FIXME: These should be dynamically obtained from a terminal.  */
-#define TERM_WIDTH	(80 - 1)
+#define TERM_WIDTH	80
 #define TERM_HEIGHT	25
 
 /* The number of lines of "GRUB version..." at the top.  */
@@ -51,7 +51,7 @@
 #define TERM_SCROLL_WIDTH	1
 
 /* The Y position of the top border.  */
-#define TERM_TOP_BORDER_Y	(TERM_MARGIN + TERM_HEIGHT + TERM_MARGIN)
+#define TERM_TOP_BORDER_Y	(TERM_MARGIN + TERM_INFO_HEIGHT + TERM_MARGIN)
 
 /* The X position of the left border.  */
 #define TERM_LEFT_BORDER_X	TERM_MARGIN
@@ -98,27 +98,24 @@ draw_border (void)
     grub_putcode (DISP_HLINE);
   grub_putcode (DISP_UR);
 
-  i = 1;
-  while (1)
+  for(i=0;i<(unsigned) TERM_NUM_ENTRIES;i++)
     {
-      grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + i);
-
-      if (i > (unsigned) TERM_NUM_ENTRIES)
-	break;
-
+      grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + i + 1);
       grub_putcode (DISP_VLINE);
-      grub_gotoxy (TERM_MARGIN + TERM_BORDER_WIDTH - 1, TERM_TOP_BORDER_Y + i);
+      grub_gotoxy (TERM_MARGIN + TERM_BORDER_WIDTH - 1, TERM_TOP_BORDER_Y + i + 1);
       grub_putcode (DISP_VLINE);
 
-      i++;
     }
 
+  grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + TERM_NUM_ENTRIES + 1);
   grub_putcode (DISP_LL);
   for (i = 0; i < TERM_BORDER_WIDTH - 2; i++)
     grub_putcode (DISP_HLINE);
   grub_putcode (DISP_LR);
 
   grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
+
+  grub_gotoxy (TERM_MARGIN, TERM_TOP_BORDER_Y + TERM_NUM_ENTRIES + TERM_MARGIN + 1);
 }
 
 static void
@@ -172,12 +169,12 @@ print_entry (int y, int highlight, grub_
   grub_gotoxy (TERM_LEFT_BORDER_X + TERM_MARGIN, y);
   grub_putchar (' ');
   for (x = TERM_LEFT_BORDER_X + TERM_MARGIN + 1;
-       x < TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH - 1;
+       x < TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH - TERM_MARGIN;
        x++)
     {
-      if (*title && x <= TERM_LEFT_BORDER_X + TERM_ENTRY_WIDTH + 1)
+      if (*title && x <= TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH - TERM_MARGIN - 1)
 	{
-	  if (x == TERM_LEFT_BORDER_X + TERM_ENTRY_WIDTH + 1)
+	  if (x == TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH - TERM_MARGIN - 1)
 	    grub_putcode (DISP_RIGHT);
 	  else
 	    grub_putchar (*title++);
@@ -196,7 +193,7 @@ print_entries (grub_menu_t menu, int fir
   grub_menu_entry_t e;
   int i;
   
-  grub_gotoxy (TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH + TERM_MARGIN,
+  grub_gotoxy (TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH,
 	       TERM_FIRST_ENTRY_Y);
 
   if (first)
@@ -213,7 +210,7 @@ print_entries (grub_menu_t menu, int fir
 	e = e->next;
     }
 
-  grub_gotoxy (TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH + TERM_MARGIN,
+  grub_gotoxy (TERM_LEFT_BORDER_X + TERM_BORDER_WIDTH,
 	       TERM_TOP_BORDER_Y + TERM_NUM_ENTRIES);
 
   if (e)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] grub2 menu : freeze while initial drawing
  2005-01-08 15:25       ` [PATCH v2] " Vincent Pelletier
@ 2005-01-20 14:36         ` Marco Gerards
  2005-01-20 17:32           ` Yoshinori K. Okuji
  0 siblings, 1 reply; 10+ messages in thread
From: Marco Gerards @ 2005-01-20 14:36 UTC (permalink / raw)
  To: The development of GRUB 2

Vincent Pelletier <subdino2004@yahoo.fr> writes:

> Updated Changelog entry:
> 2005-01-08  Vincent Pelletier  <subdino2004@yahoo.fr>
>
> ~    * normal/menu.c: Corrected TERM_TOP_BORDER_Y.
> ~    (draw_border): Replaced "while" loop by "for" loop. Number of lines
> ~    in rectangle consistent with number of lines displayed in
> ~    print_entries. Added a margin below the rectangle.
> ~    (print_entry): Entry fits the rectangle client width.
> ~    (print_entries): Scroll arrows displayed next to right border.
>
> I'm not sure about how the scroll arrows should look like (whether they
> should stick to the right border of the rectangle, be on the border or
> or have an empty char between the border and the arrow). Please correct
> my patch if I'm wrong - I've chosen the first.

It all looks fine to me.  Okuji, can you please comment on this patch
if it is wrong?  Otherwise I will check it in on Wednesday.

Thanks,
Marco




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] grub2 menu : freeze while initial drawing
  2005-01-20 14:36         ` Marco Gerards
@ 2005-01-20 17:32           ` Yoshinori K. Okuji
  0 siblings, 0 replies; 10+ messages in thread
From: Yoshinori K. Okuji @ 2005-01-20 17:32 UTC (permalink / raw)
  To: The development of GRUB 2

On Thursday 20 January 2005 15:36, Marco Gerards wrote:
> It all looks fine to me.  Okuji, can you please comment on this patch
> if it is wrong?  Otherwise I will check it in on Wednesday.

It is okay. If the position is not correct, I will fix it later.

Okuji



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2005-01-20 18:04 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-12-14 10:27 [BUG] grub2 menu : freeze while initial drawing Vincent Pelletier
2004-12-19 15:22 ` Yoshinori K. Okuji
2004-12-19 21:45   ` [PATCH] " Vincent Pelletier
2004-12-19 21:57     ` Vincent Pelletier
2004-12-22 13:45       ` Yoshinori K. Okuji
2004-12-22 13:57         ` Vincent Pelletier
2004-12-22 16:03           ` Yoshinori K. Okuji
2005-01-08 15:25       ` [PATCH v2] " Vincent Pelletier
2005-01-20 14:36         ` Marco Gerards
2005-01-20 17:32           ` Yoshinori K. Okuji

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.