~hamo/ubuntu/precise/grub2/grub2.hi_res

« back to all changes in this revision

Viewing changes to grub-core/commands/videotest.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson, Colin Watson, Robert Millan, Updated translations
  • Date: 2010-11-22 12:24:56 UTC
  • mfrom: (1.26.4 upstream) (17.3.36 sid)
  • mto: (17.3.43 sid)
  • mto: This revision was merged to the branch mainline in revision 89.
  • Revision ID: james.westby@ubuntu.com-20101122122456-y82z3sfb7k4zfdcc
Tags: 1.99~20101122-1
[ Colin Watson ]
* New Bazaar snapshot.  Too many changes to list in full, but some of the
  more user-visible ones are as follows:
  - GRUB script:
    + Function parameters, "break", "continue", "shift", "setparams",
      "return", and "!".
    + "export" command supports multiple variable names.
    + Multi-line quoted strings support.
    + Wildcard expansion.
  - sendkey support.
  - USB hotunplugging and USB serial support.
  - Rename CD-ROM to cd on BIOS.
  - Add new --boot-directory option to grub-install, grub-reboot, and
    grub-set-default; the old --root-directory option is still accepted
    but was often confusing.
  - Basic btrfs detection/UUID support (but no file reading yet).
  - bash-completion for utilities.
  - If a device is listed in device.map, always assume that it is
    BIOS-visible rather than using extra layers such as LVM or RAID.
  - Add grub-mknetdir script (closes: #550658).
  - Remove deprecated "root" command.
  - Handle RAID devices containing virtio components.
  - GRUB Legacy configuration file support (via grub-menulst2cfg).
  - Keyboard layout support (via grub-mklayout and grub-kbdcomp).
  - Check generated grub.cfg for syntax errors before saving.
  - Pause execution for at most ten seconds if any errors are displayed,
    so that the user has a chance to see them.
  - Support submenus.
  - Write embedding zone using Reed-Solomon, so that it's robust against
    being partially overwritten (closes: #550702, #591416, #593347).
  - GRUB_DISABLE_LINUX_RECOVERY and GRUB_DISABLE_NETBSD_RECOVERY merged
    into a single GRUB_DISABLE_RECOVERY variable.
  - Fix loader memory allocation failure (closes: #551627).
  - Don't call savedefault on recovery entries (closes: #589325).
  - Support triple-indirect blocks on ext2 (closes: #543924).
  - Recognise DDF1 fake RAID (closes: #603354).

[ Robert Millan ]
* Use dpkg architecture wildcards.

[ Updated translations ]
* Slovenian (Vanja Cvelbar).  Closes: #604003
* Dzongkha (dawa pemo via Tenzin Dendup).  Closes: #604102

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  GRUB  --  GRand Unified Bootloader
 
3
 *  Copyright (C) 2006,2007,2009  Free Software Foundation, Inc.
 
4
 *
 
5
 *  GRUB is free software: you can redistribute it and/or modify
 
6
 *  it under the terms of the GNU General Public License as published by
 
7
 *  the Free Software Foundation, either version 3 of the License, or
 
8
 *  (at your option) any later version.
 
9
 *
 
10
 *  GRUB is distributed in the hope that it will be useful,
 
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 *  GNU General Public License for more details.
 
14
 *
 
15
 *  You should have received a copy of the GNU General Public License
 
16
 *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
 
17
 */
 
18
 
 
19
#include <grub/video.h>
 
20
#include <grub/types.h>
 
21
#include <grub/dl.h>
 
22
#include <grub/misc.h>
 
23
#include <grub/mm.h>
 
24
#include <grub/font.h>
 
25
#include <grub/term.h>
 
26
#include <grub/command.h>
 
27
#include <grub/i18n.h>
 
28
#include <grub/gfxmenu_view.h>
 
29
#include <grub/env.h>
 
30
 
 
31
static grub_err_t
 
32
grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)),
 
33
                    int argc, char **args)
 
34
{
 
35
  grub_err_t err;
 
36
  grub_video_color_t color;
 
37
  unsigned int x;
 
38
  unsigned int y;
 
39
  unsigned int width;
 
40
  unsigned int height;
 
41
  int i;
 
42
  struct grub_video_render_target *text_layer;
 
43
  grub_video_color_t palette[16];
 
44
  const char *mode = NULL;
 
45
 
 
46
#ifdef GRUB_MACHINE_PCBIOS
 
47
  if (grub_strcmp (cmd->name, "vbetest") == 0)
 
48
    grub_dl_load ("vbe");
 
49
#endif
 
50
 
 
51
  mode = grub_env_get ("gfxmode");
 
52
  if (argc)
 
53
    mode = args[0];
 
54
  if (!mode)
 
55
    mode = "auto";
 
56
 
 
57
  err = grub_video_set_mode (mode, GRUB_VIDEO_MODE_TYPE_PURE_TEXT, 0);
 
58
  if (err)
 
59
    return err;
 
60
 
 
61
  grub_video_get_viewport (&x, &y, &width, &height);
 
62
 
 
63
  {
 
64
    const char *str;
 
65
    int texty;
 
66
    grub_font_t sansbig;
 
67
    grub_font_t sans;
 
68
    grub_font_t sanssmall;
 
69
    grub_font_t fixed;
 
70
    struct grub_font_glyph *glyph;
 
71
 
 
72
    grub_video_create_render_target (&text_layer, width, height,
 
73
                                     GRUB_VIDEO_MODE_TYPE_RGB
 
74
                                     | GRUB_VIDEO_MODE_TYPE_ALPHA);
 
75
 
 
76
    grub_video_set_active_render_target (text_layer);
 
77
 
 
78
    color = grub_video_map_rgb (0, 255, 255);
 
79
    sansbig = grub_font_get ("Unknown Regular 16");
 
80
    sans = grub_font_get ("Unknown Regular 16");
 
81
    sanssmall = grub_font_get ("Unknown Regular 16");
 
82
    fixed = grub_font_get ("Fixed 20");
 
83
    if (! sansbig || ! sans || ! sanssmall || ! fixed)
 
84
      return grub_error (GRUB_ERR_BAD_FONT, "no font loaded");
 
85
 
 
86
    glyph = grub_font_get_glyph (fixed, '*');
 
87
    grub_font_draw_glyph (glyph, color, 200 ,0);
 
88
 
 
89
    color = grub_video_map_rgb (255, 255, 255);
 
90
 
 
91
    texty = 32;
 
92
    grub_font_draw_string ("The quick brown fox jumped over the lazy dog.",
 
93
                           sans, color, 16, texty);
 
94
    texty += grub_font_get_descent (sans) + grub_font_get_leading (sans);
 
95
 
 
96
    texty += grub_font_get_ascent (fixed);
 
97
    grub_font_draw_string ("The quick brown fox jumped over the lazy dog.",
 
98
                           fixed, color, 16, texty);
 
99
    texty += grub_font_get_descent (fixed) + grub_font_get_leading (fixed);
 
100
 
 
101
    /* To convert Unicode characters into UTF-8 for this test, the following
 
102
       command is useful:
 
103
       echo -ne '\x00\x00\x26\x3A' | iconv -f UTF-32BE -t UTF-8 | od -t x1
 
104
       This converts the Unicode character U+263A to UTF-8.  */
 
105
 
 
106
    /* Characters used:
 
107
       Code point  Description                    UTF-8 encoding
 
108
       ----------- ------------------------------ --------------
 
109
       U+263A      unfilled smiley face           E2 98 BA
 
110
       U+00A1      inverted exclamation point     C2 A1
 
111
       U+00A3      British pound currency symbol  C2 A3
 
112
       U+03C4      Greek tau                      CF 84
 
113
       U+00E4      lowercase letter a with umlaut C3 A4
 
114
       U+2124      set 'Z' symbol (integers)      E2 84 A4
 
115
       U+2287      subset symbol                  E2 8A 87
 
116
       U+211D      set 'R' symbol (real numbers)  E2 84 9D  */
 
117
 
 
118
    str =
 
119
      "Unicode test: happy\xE2\x98\xBA \xC2\xA3 5.00"
 
120
      " \xC2\xA1\xCF\x84\xC3\xA4u! "
 
121
      " \xE2\x84\xA4\xE2\x8A\x87\xE2\x84\x9D";
 
122
    color = grub_video_map_rgb (128, 128, 255);
 
123
 
 
124
    /* All characters in the string exist in the 'Fixed 20' (10x20) font.  */
 
125
    texty += grub_font_get_ascent(fixed);
 
126
    grub_font_draw_string (str, fixed, color, 16, texty);
 
127
    texty += grub_font_get_descent (fixed) + grub_font_get_leading (fixed);
 
128
 
 
129
    texty += grub_font_get_ascent(sansbig);
 
130
    grub_font_draw_string (str, sansbig, color, 16, texty);
 
131
    texty += grub_font_get_descent (sansbig) + grub_font_get_leading (sansbig);
 
132
 
 
133
    texty += grub_font_get_ascent(sans);
 
134
    grub_font_draw_string (str, sans, color, 16, texty);
 
135
    texty += grub_font_get_descent (sans) + grub_font_get_leading (sans);
 
136
 
 
137
    texty += grub_font_get_ascent(sanssmall);
 
138
    grub_font_draw_string (str, sanssmall, color, 16, texty);
 
139
    texty += (grub_font_get_descent (sanssmall)
 
140
              + grub_font_get_leading (sanssmall));
 
141
 
 
142
    glyph = grub_font_get_glyph (fixed, '*');
 
143
 
 
144
    for (i = 0; i < 16; i++)
 
145
      {
 
146
        color = grub_video_map_color (i);
 
147
        palette[i] = color;
 
148
        grub_font_draw_glyph (glyph, color, 16 + i * 16, 220);
 
149
      }
 
150
  }
 
151
 
 
152
  grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY);
 
153
 
 
154
  for (i = 0; i < 2; i++)
 
155
    {
 
156
      color = grub_video_map_rgb (0, 0, 0);
 
157
      grub_video_fill_rect (color, 0, 0, width, height);
 
158
 
 
159
      color = grub_video_map_rgb (255, 0, 0);
 
160
      grub_video_fill_rect (color, 0, 0, 100, 100);
 
161
 
 
162
      color = grub_video_map_rgb (0, 255, 255);
 
163
      grub_video_fill_rect (color, 100, 100, 100, 100);
 
164
 
 
165
      grub_video_set_viewport (x + 150, y + 150,
 
166
                               width - 150 * 2, height - 150 * 2);
 
167
      color = grub_video_map_rgb (77, 33, 77);
 
168
      grub_video_fill_rect (color, 0, 0, width, height);
 
169
      grub_video_swap_buffers ();
 
170
    }
 
171
 
 
172
  for (i = 0; i < 5; i++)
 
173
    {
 
174
      color = grub_video_map_rgb (i, 33, 77);
 
175
      grub_video_fill_rect (color, 0, 0, width, height);
 
176
      grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_BLEND, 0, 0,
 
177
                                     0, 0, width, height);
 
178
      grub_video_swap_buffers ();
 
179
    }
 
180
 
 
181
  grub_getkey ();
 
182
 
 
183
  grub_video_delete_render_target (text_layer);
 
184
 
 
185
  grub_video_restore ();
 
186
 
 
187
  for (i = 0; i < 16; i++)
 
188
    grub_printf("color %d: %08x\n", i, palette[i]);
 
189
 
 
190
  grub_errno = GRUB_ERR_NONE;
 
191
  return grub_errno;
 
192
}
 
193
 
 
194
static grub_command_t cmd;
 
195
#ifdef GRUB_MACHINE_PCBIOS
 
196
static grub_command_t cmd_vbe;
 
197
#endif
 
198
 
 
199
GRUB_MOD_INIT(videotest)
 
200
{
 
201
  cmd = grub_register_command ("videotest", grub_cmd_videotest,
 
202
                               "[WxH]",
 
203
                               N_("Test video subsystem in mode WxH."));
 
204
#ifdef GRUB_MACHINE_PCBIOS
 
205
  cmd_vbe = grub_register_command ("vbetest", grub_cmd_videotest,
 
206
                               0, N_("Test video subsystem."));
 
207
#endif
 
208
}
 
209
 
 
210
GRUB_MOD_FINI(videotest)
 
211
{
 
212
  grub_unregister_command (cmd);
 
213
#ifdef GRUB_MACHINE_PCBIOS
 
214
  grub_unregister_command (cmd_vbe);
 
215
#endif
 
216
}