/[grub]/grub2/normal/menu.c
ViewVC logotype

Diff of /grub2/normal/menu.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.13 by okuji, Sun Aug 14 19:36:55 2005 UTC revision 1.14 by okuji, Sun Aug 21 07:22:51 2005 UTC
# Line 1  Line 1 
1  /*  /*
2   *  GRUB  --  GRand Unified Bootloader   *  GRUB  --  GRand Unified Bootloader
3   *  Copyright (C) 2003,2004  Free Software Foundation, Inc.   *  Copyright (C) 2003,2004,2005  Free Software Foundation, Inc.
4   *   *
5   *  This program is free software; you can redistribute it and/or modify   *  This program is free software; you can redistribute it and/or modify
6   *  it under the terms of the GNU General Public License as published by   *  it under the terms of the GNU General Public License as published by
# Line 41  draw_border (void) Line 41  draw_border (void)
41      {      {
42        grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + i + 1);        grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + i + 1);
43        grub_putcode (GRUB_TERM_DISP_VLINE);        grub_putcode (GRUB_TERM_DISP_VLINE);
44        grub_gotoxy (GRUB_TERM_MARGIN + GRUB_TERM_BORDER_WIDTH - 1, GRUB_TERM_TOP_BORDER_Y + i + 1);        grub_gotoxy (GRUB_TERM_MARGIN + GRUB_TERM_BORDER_WIDTH - 1,
45                       GRUB_TERM_TOP_BORDER_Y + i + 1);
46        grub_putcode (GRUB_TERM_DISP_VLINE);        grub_putcode (GRUB_TERM_DISP_VLINE);
47      }      }
48    
49    grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES + 1);    grub_gotoxy (GRUB_TERM_MARGIN,
50                   GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES + 1);
51    grub_putcode (GRUB_TERM_DISP_LL);    grub_putcode (GRUB_TERM_DISP_LL);
52    for (i = 0; i < (unsigned) GRUB_TERM_BORDER_WIDTH - 2; i++)    for (i = 0; i < (unsigned) GRUB_TERM_BORDER_WIDTH - 2; i++)
53      grub_putcode (GRUB_TERM_DISP_HLINE);      grub_putcode (GRUB_TERM_DISP_HLINE);
# Line 53  draw_border (void) Line 55  draw_border (void)
55    
56    grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);    grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
57    
58    grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES + GRUB_TERM_MARGIN + 1);    grub_gotoxy (GRUB_TERM_MARGIN,
59                   (GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES
60                    + GRUB_TERM_MARGIN + 1));
61  }  }
62    
63  static void  static void
# Line 97  print_entry (int y, int highlight, grub_ Line 101  print_entry (int y, int highlight, grub_
101  {  {
102    int x;    int x;
103    const char *title;    const char *title;
104      grub_ssize_t len;
105      grub_uint32_t *unicode_title;
106      grub_ssize_t i;
107      
108    title = entry ? entry->title : "";    title = entry ? entry->title : "";
109      unicode_title = grub_malloc (grub_strlen (title) * sizeof (*unicode_title));
110      if (! unicode_title)
111        /* XXX How to show this error?  */
112        return;
113      
114      len = grub_utf8_to_ucs4 (unicode_title, title, grub_strlen (title));
115      if (len < 0)
116        {
117          /* It is an invalid sequence.  */
118          grub_free (unicode_title);
119          return;
120        }
121        
122    grub_setcolorstate (highlight    grub_setcolorstate (highlight
123                        ? GRUB_TERM_COLOR_HIGHLIGHT                        ? GRUB_TERM_COLOR_HIGHLIGHT
# Line 106  print_entry (int y, int highlight, grub_ Line 125  print_entry (int y, int highlight, grub_
125    
126    grub_gotoxy (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN, y);    grub_gotoxy (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN, y);
127    
128    for (x = GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN + 1;    for (x = GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN + 1, i = 0;
129         x < GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN;         x < GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN;
130         x++)         i++)
131      {      {
132        if (*title && x <= GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN - 1)        if (i < len
133              && x <= (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH
134                       - GRUB_TERM_MARGIN - 1))
135          {          {
136            if (x == GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH - GRUB_TERM_MARGIN - 1)            grub_ssize_t width;
137    
138              width = grub_getcharwidth (unicode_title[i]);
139              
140              if (x + width > (GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_BORDER_WIDTH
141                               - GRUB_TERM_MARGIN - 1))
142              grub_putcode (GRUB_TERM_DISP_RIGHT);              grub_putcode (GRUB_TERM_DISP_RIGHT);
143            else            else
144              grub_putchar (*title++);              grub_putcode (unicode_title[i]);
145    
146              x += width;
147          }          }
148        else        else
149          grub_putchar (' ');          {
150              grub_putchar (' ');
151              x++;
152            }
153      }      }
154    grub_gotoxy (GRUB_TERM_CURSOR_X, y);    grub_gotoxy (GRUB_TERM_CURSOR_X, y);
155    
156    grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);    grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
157      grub_free (unicode_title);
158  }  }
159    
160  static void  static void

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26