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

« back to all changes in this revision

Viewing changes to kern/emu/console.c

Tags: upstream-1.98+20100705
ImportĀ upstreamĀ versionĀ 1.98+20100705

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
 
44
44
grub_uint8_t grub_console_cur_color = 7;
45
45
 
46
 
static grub_uint8_t grub_console_standard_color = 0x7;
47
 
static grub_uint8_t grub_console_normal_color = 0x7;
48
 
static grub_uint8_t grub_console_highlight_color = 0x70;
 
46
static const grub_uint8_t grub_console_standard_color = 0x7;
49
47
 
50
48
#define NUM_COLORS      8
51
49
 
64
62
static int use_color;
65
63
 
66
64
static void
67
 
grub_ncurses_putchar (grub_uint32_t c)
68
 
{
69
 
  /* Better than nothing.  */
70
 
  switch (c)
71
 
    {
72
 
    case GRUB_TERM_DISP_LEFT:
73
 
      c = '<';
74
 
      break;
75
 
 
76
 
    case GRUB_TERM_DISP_UP:
77
 
      c = '^';
78
 
      break;
79
 
 
80
 
    case GRUB_TERM_DISP_RIGHT:
81
 
      c = '>';
82
 
      break;
83
 
 
84
 
    case GRUB_TERM_DISP_DOWN:
85
 
      c = 'v';
86
 
      break;
87
 
 
88
 
    case GRUB_TERM_DISP_HLINE:
89
 
      c = '-';
90
 
      break;
91
 
 
92
 
    case GRUB_TERM_DISP_VLINE:
93
 
      c = '|';
94
 
      break;
95
 
 
96
 
    case GRUB_TERM_DISP_UL:
97
 
    case GRUB_TERM_DISP_UR:
98
 
    case GRUB_TERM_DISP_LL:
99
 
    case GRUB_TERM_DISP_LR:
100
 
      c = '+';
101
 
      break;
102
 
 
103
 
    default:
104
 
      /* ncurses does not support Unicode.  */
105
 
      if (c > 0x7f)
106
 
        c = '?';
107
 
      break;
108
 
    }
109
 
 
110
 
  addch (c | grub_console_attr);
111
 
}
112
 
 
113
 
static grub_ssize_t
114
 
grub_ncurses_getcharwidth (grub_uint32_t code __attribute__ ((unused)))
115
 
{
116
 
  return 1;
 
65
grub_ncurses_putchar (struct grub_term_output *term __attribute__ ((unused)),
 
66
                      const struct grub_unicode_glyph *c)
 
67
{
 
68
  addch (c->base | grub_console_attr);
117
69
}
118
70
 
119
71
static void
120
 
grub_ncurses_setcolorstate (grub_term_color_state state)
 
72
grub_ncurses_setcolorstate (struct grub_term_output *term,
 
73
                            grub_term_color_state state)
121
74
{
122
75
  switch (state)
123
76
    {
126
79
      grub_console_attr = A_NORMAL;
127
80
      break;
128
81
    case GRUB_TERM_COLOR_NORMAL:
129
 
      grub_console_cur_color = grub_console_normal_color;
 
82
      grub_console_cur_color = term->normal_color;
130
83
      grub_console_attr = A_NORMAL;
131
84
      break;
132
85
    case GRUB_TERM_COLOR_HIGHLIGHT:
133
 
      grub_console_cur_color = grub_console_highlight_color;
 
86
      grub_console_cur_color = term->highlight_color;
134
87
      grub_console_attr = A_STANDOUT;
135
88
      break;
136
89
    default:
149
102
    }
150
103
}
151
104
 
152
 
/* XXX: This function is never called.  */
153
 
static void
154
 
grub_ncurses_setcolor (grub_uint8_t normal_color, grub_uint8_t highlight_color)
155
 
{
156
 
  grub_console_normal_color = normal_color;
157
 
  grub_console_highlight_color = highlight_color;
158
 
}
159
 
 
160
 
static void
161
 
grub_ncurses_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color)
162
 
{
163
 
  *normal_color = grub_console_normal_color;
164
 
  *highlight_color = grub_console_highlight_color;
165
 
}
166
 
 
167
105
static int saved_char = ERR;
168
106
 
169
107
static int
170
 
grub_ncurses_checkkey (void)
 
108
grub_ncurses_checkkey (struct grub_term_input *term __attribute__ ((unused)))
171
109
{
172
110
  int c;
173
111
 
189
127
}
190
128
 
191
129
static int
192
 
grub_ncurses_getkey (void)
 
130
grub_ncurses_getkey (struct grub_term_input *term __attribute__ ((unused)))
193
131
{
194
132
  int c;
195
133
 
208
146
  switch (c)
209
147
    {
210
148
    case KEY_LEFT:
211
 
      c = 2;
 
149
      c = GRUB_TERM_LEFT;
212
150
      break;
213
151
 
214
152
    case KEY_RIGHT:
215
 
      c = 6;
 
153
      c = GRUB_TERM_RIGHT;
216
154
      break;
217
155
 
218
156
    case KEY_UP:
219
 
      c = 16;
 
157
      c = GRUB_TERM_UP;
220
158
      break;
221
159
 
222
160
    case KEY_DOWN:
223
 
      c = 14;
 
161
      c = GRUB_TERM_DOWN;
224
162
      break;
225
163
 
226
164
    case KEY_IC:
228
166
      break;
229
167
 
230
168
    case KEY_DC:
231
 
      c = 4;
 
169
      c = GRUB_TERM_DC;
232
170
      break;
233
171
 
234
172
    case KEY_BACKSPACE:
235
173
      /* XXX: For some reason ncurses on xterm does not return
236
174
         KEY_BACKSPACE.  */
237
175
    case 127:
238
 
      c = 8;
 
176
      c = GRUB_TERM_BACKSPACE;
239
177
      break;
240
178
 
241
179
    case KEY_HOME:
242
 
      c = 1;
 
180
      c = GRUB_TERM_HOME;
243
181
      break;
244
182
 
245
183
    case KEY_END:
246
 
      c = 5;
 
184
      c = GRUB_TERM_END;
247
185
      break;
248
186
 
249
187
    case KEY_NPAGE:
250
 
      c = 3;
 
188
      c = GRUB_TERM_NPAGE;
251
189
      break;
252
190
 
253
191
    case KEY_PPAGE:
254
 
      c = 7;
 
192
      c = GRUB_TERM_PPAGE;
255
193
      break;
256
194
    }
257
195
 
259
197
}
260
198
 
261
199
static grub_uint16_t
262
 
grub_ncurses_getxy (void)
 
200
grub_ncurses_getxy (struct grub_term_output *term __attribute__ ((unused)))
263
201
{
264
202
  int x;
265
203
  int y;
270
208
}
271
209
 
272
210
static grub_uint16_t
273
 
grub_ncurses_getwh (void)
 
211
grub_ncurses_getwh (struct grub_term_output *term __attribute__ ((unused)))
274
212
{
275
213
  int x;
276
214
  int y;
281
219
}
282
220
 
283
221
static void
284
 
grub_ncurses_gotoxy (grub_uint8_t x, grub_uint8_t y)
 
222
grub_ncurses_gotoxy (struct grub_term_output *term __attribute__ ((unused)),
 
223
                     grub_uint8_t x, grub_uint8_t y)
285
224
{
286
225
  move (y, x);
287
226
}
288
227
 
289
228
static void
290
 
grub_ncurses_cls (void)
 
229
grub_ncurses_cls (struct grub_term_output *term __attribute__ ((unused)))
291
230
{
292
231
  clear ();
293
232
  refresh ();
294
233
}
295
234
 
296
235
static void
297
 
grub_ncurses_setcursor (int on)
 
236
grub_ncurses_setcursor (struct grub_term_output *term __attribute__ ((unused)),
 
237
                        int on)
298
238
{
299
239
  curs_set (on ? 1 : 0);
300
240
}
301
241
 
302
242
static void
303
 
grub_ncurses_refresh (void)
 
243
grub_ncurses_refresh (struct grub_term_output *term __attribute__ ((unused)))
304
244
{
305
245
  refresh ();
306
246
}
307
247
 
308
248
static grub_err_t
309
 
grub_ncurses_init (void)
 
249
grub_ncurses_init (struct grub_term_output *term __attribute__ ((unused)))
310
250
{
311
251
  initscr ();
312
252
  raw ();
338
278
}
339
279
 
340
280
static grub_err_t
341
 
grub_ncurses_fini (void)
 
281
grub_ncurses_fini (struct grub_term_output *term __attribute__ ((unused)))
342
282
{
343
283
  endwin ();
344
284
  return 0;
358
298
    .init = grub_ncurses_init,
359
299
    .fini = grub_ncurses_fini,
360
300
    .putchar = grub_ncurses_putchar,
361
 
    .getcharwidth = grub_ncurses_getcharwidth,
362
301
    .getxy = grub_ncurses_getxy,
363
302
    .getwh = grub_ncurses_getwh,
364
303
    .gotoxy = grub_ncurses_gotoxy,
365
304
    .cls = grub_ncurses_cls,
366
305
    .setcolorstate = grub_ncurses_setcolorstate,
367
 
    .setcolor = grub_ncurses_setcolor,
368
 
    .getcolor = grub_ncurses_getcolor,
369
306
    .setcursor = grub_ncurses_setcursor,
370
 
    .refresh = grub_ncurses_refresh
 
307
    .refresh = grub_ncurses_refresh,
 
308
    .flags = GRUB_TERM_CODE_TYPE_ASCII
371
309
  };
372
310
 
373
311
void
380
318
void
381
319
grub_console_fini (void)
382
320
{
383
 
  grub_ncurses_fini ();
 
321
  grub_ncurses_fini (&grub_ncurses_term_output);
384
322
}