136 |
|
|
137 |
/* Allocate memory for text buffer. */ |
/* Allocate memory for text buffer. */ |
138 |
virtual_screen.text_buffer = |
virtual_screen.text_buffer = |
139 |
(struct grub_colored_char *)grub_malloc (virtual_screen.columns * |
(struct grub_colored_char *)grub_malloc (virtual_screen.columns |
140 |
virtual_screen.rows * |
* virtual_screen.rows |
141 |
sizeof(struct grub_colored_char)); |
* sizeof(struct grub_colored_char)); |
142 |
if (virtual_screen.text_buffer == 0) |
if (virtual_screen.text_buffer == 0) |
143 |
{ |
{ |
144 |
return GRUB_ERR_OUT_OF_MEMORY; |
return GRUB_ERR_OUT_OF_MEMORY; |
320 |
unsigned char bitmap[32]; |
unsigned char bitmap[32]; |
321 |
unsigned width; |
unsigned width; |
322 |
|
|
323 |
p = (virtual_screen.text_buffer + |
p = (virtual_screen.text_buffer |
324 |
virtual_screen.cursor_x + |
+ virtual_screen.cursor_x |
325 |
(virtual_screen.cursor_y * virtual_screen.columns)); |
+ (virtual_screen.cursor_y * virtual_screen.columns)); |
326 |
|
|
327 |
p -= p->index; |
p -= p->index; |
328 |
|
|
356 |
color = p->bg_color; |
color = p->bg_color; |
357 |
} |
} |
358 |
|
|
359 |
grub_vbe_set_pixel_index(i + (virtual_screen.cursor_x * virtual_screen.char_width), |
grub_vbe_set_pixel_index(i + (virtual_screen.cursor_x |
360 |
y + (virtual_screen.cursor_y * virtual_screen.char_height), |
* virtual_screen.char_width), |
361 |
|
y + (virtual_screen.cursor_y |
362 |
|
* virtual_screen.char_height), |
363 |
color); |
color); |
364 |
} |
} |
365 |
} |
} |
392 |
/* Scroll text buffer with one line to up. */ |
/* Scroll text buffer with one line to up. */ |
393 |
grub_memmove (virtual_screen.text_buffer, |
grub_memmove (virtual_screen.text_buffer, |
394 |
virtual_screen.text_buffer + virtual_screen.columns, |
virtual_screen.text_buffer + virtual_screen.columns, |
395 |
sizeof (struct grub_colored_char) * |
sizeof (struct grub_colored_char) |
396 |
virtual_screen.columns * |
* virtual_screen.columns |
397 |
(virtual_screen.rows - 1)); |
* (virtual_screen.rows - 1)); |
398 |
|
|
399 |
/* Clear last line in text buffer. */ |
/* Clear last line in text buffer. */ |
400 |
for (i = virtual_screen.columns * (virtual_screen.rows - 1); |
for (i = virtual_screen.columns * (virtual_screen.rows - 1); |
410 |
|
|
411 |
/* Scroll frambuffer with one line to up. */ |
/* Scroll frambuffer with one line to up. */ |
412 |
grub_memmove (framebuffer, |
grub_memmove (framebuffer, |
413 |
framebuffer + bytes_per_scan_line * virtual_screen.char_height, |
framebuffer |
414 |
bytes_per_scan_line * |
+ bytes_per_scan_line * virtual_screen.char_height, |
415 |
(mode_info.y_resolution - virtual_screen.char_height)); |
bytes_per_scan_line |
416 |
|
* (mode_info.y_resolution - virtual_screen.char_height)); |
417 |
|
|
418 |
/* Clear last line in framebuffer. */ |
/* Clear last line in framebuffer. */ |
419 |
grub_memset (framebuffer + |
grub_memset (framebuffer |
420 |
(bytes_per_scan_line * |
+ (bytes_per_scan_line |
421 |
(mode_info.y_resolution - virtual_screen.char_height)), |
* (mode_info.y_resolution - virtual_screen.char_height)), |
422 |
0, |
0, |
423 |
bytes_per_scan_line * virtual_screen.char_height); |
bytes_per_scan_line * virtual_screen.char_height); |
424 |
} |
} |
425 |
|
|
426 |
static void |
static void |
435 |
/* Erase current cursor, if any. */ |
/* Erase current cursor, if any. */ |
436 |
if (virtual_screen.cursor_state) |
if (virtual_screen.cursor_state) |
437 |
write_char (); |
write_char (); |
438 |
|
|
439 |
switch (c) |
switch (c) |
440 |
{ |
{ |
441 |
case '\b': |
case '\b': |