-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Vincent Pelletier wrote: > In the attached patch,
*cough* *cough* Vincent Pelletier -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFCyFXJFEQoKRQyjtURAjFRAKCyEeBiF6HDVeeFajmy8oGfVWIrvQCfUiCG hX6z+XtVX9llG10YKEi6t7A= =tmOI -----END PGP SIGNATURE-----
Index: include/grub/term.h =================================================================== RCS file: /cvsroot/grub/grub2/include/grub/term.h,v retrieving revision 1.7 diff -u -p -r1.7 term.h --- include/grub/term.h 19 Feb 2005 20:56:07 -0000 1.7 +++ include/grub/term.h 3 Jul 2005 20:34:40 -0000 @@ -72,8 +72,10 @@ grub_term_color_state; /* Menu-related geometrical constants. */ /* FIXME: These should be dynamically obtained from a terminal. */ -#define GRUB_TERM_WIDTH 80 -#define GRUB_TERM_HEIGHT 25 +/*#define GRUB_TERM_WIDTH 80 +#define GRUB_TERM_HEIGHT 25*/ +#define GRUB_TERM_WIDTH ((grub_getwh()&0xFF00)>>8) +#define GRUB_TERM_HEIGHT (grub_getwh()&0xFF) /* The number of lines of "GRUB version..." at the top. */ #define GRUB_TERM_INFO_HEIGHT 1 @@ -142,6 +144,9 @@ struct grub_term /* Get a character. */ int (*getkey) (void); + /* Get the screen size. The return value is ((Width << 8) | Height). */ + grub_uint16_t (*getwh) (void); + /* Get the cursor position. The return value is ((X << 8) | Y). */ grub_uint16_t (*getxy) (void); @@ -183,6 +188,7 @@ void EXPORT_FUNC(grub_putchar) (int c); void EXPORT_FUNC(grub_putcode) (grub_uint32_t code); int EXPORT_FUNC(grub_getkey) (void); int EXPORT_FUNC(grub_checkkey) (void); +grub_uint16_t EXPORT_FUNC(grub_getwh) (void); grub_uint16_t EXPORT_FUNC(grub_getxy) (void); void EXPORT_FUNC(grub_gotoxy) (grub_uint8_t x, grub_uint8_t y); void EXPORT_FUNC(grub_cls) (void); Index: include/grub/i386/pc/vga.h =================================================================== RCS file: /cvsroot/grub/grub2/include/grub/i386/pc/vga.h,v retrieving revision 1.3 diff -u -p -r1.3 vga.h --- include/grub/i386/pc/vga.h 4 Apr 2004 13:46:01 -0000 1.3 +++ include/grub/i386/pc/vga.h 3 Jul 2005 20:34:40 -0000 @@ -25,6 +25,9 @@ /* Set the video mode to MODE and return the previous mode. */ unsigned char EXPORT_FUNC(grub_vga_set_mode) (unsigned char mode); +/* Return the current video mode. */ +unsigned char EXPORT_FUNC(grub_vga_get_mode) (void); + /* Return a pointer to the ROM font table. */ unsigned char *EXPORT_FUNC(grub_vga_get_font) (void); Index: kern/term.c =================================================================== RCS file: /cvsroot/grub/grub2/kern/term.c,v retrieving revision 1.7 diff -u -p -r1.7 term.c --- kern/term.c 4 Apr 2004 13:46:02 -0000 1.7 +++ kern/term.c 3 Jul 2005 20:34:44 -0000 @@ -213,6 +213,12 @@ grub_checkkey (void) } grub_uint16_t +grub_getwh (void) +{ + return (grub_cur_term->getwh) (); +} + +grub_uint16_t grub_getxy (void) { return (grub_cur_term->getxy) (); Index: kern/i386/pc/startup.S =================================================================== RCS file: /cvsroot/grub/grub2/kern/i386/pc/startup.S,v retrieving revision 1.13 diff -u -p -r1.13 startup.S --- kern/i386/pc/startup.S 4 Apr 2004 13:46:02 -0000 1.13 +++ kern/i386/pc/startup.S 3 Jul 2005 20:34:44 -0000 @@ -1570,6 +1570,28 @@ FUNCTION(grub_vga_set_mode) /* + * unsigned char grub_vga_get_mode (void) + */ +FUNCTION(grub_vga_get_mode) + pushl %ebp + pushl %ebx + + call prot_to_real + .code16 + /* get current mode */ + xorw %bx, %bx + movb $0x0f, %ah + int $0x10 + + DATA32 call real_to_prot + .code32 + + popl %ebx + popl %ebp + ret + + +/* * unsigned char *grub_vga_get_font (void) */ FUNCTION(grub_vga_get_font) Index: term/i386/pc/console.c =================================================================== RCS file: /cvsroot/grub/grub2/term/i386/pc/console.c,v retrieving revision 1.5 diff -u -p -r1.5 console.c --- term/i386/pc/console.c 15 Feb 2005 00:07:01 -0000 1.5 +++ term/i386/pc/console.c 3 Jul 2005 20:34:45 -0000 @@ -20,6 +20,7 @@ #include <grub/machine/console.h> #include <grub/term.h> #include <grub/types.h> +#include <grub/misc.h> grub_uint8_t grub_console_cur_color = 0x7; static grub_uint8_t grub_console_standard_color = 0x7; @@ -74,6 +75,12 @@ grub_console_putchar (grub_uint32_t c) grub_console_real_putchar (c); } +static grub_uint16_t +grub_console_getwh (void) +{ + return (80 << 8) | 25; /* FIXME: Always true ? */ +} + static void grub_console_setcolorstate (grub_term_color_state state) { @@ -107,6 +114,7 @@ static struct grub_term grub_console_ter .putchar = grub_console_putchar, .checkkey = grub_console_checkkey, .getkey = grub_console_getkey, + .getwh = grub_console_getwh, .getxy = grub_console_getxy, .gotoxy = grub_console_gotoxy, .cls = grub_console_cls, Index: term/i386/pc/vga.c =================================================================== RCS file: /cvsroot/grub/grub2/term/i386/pc/vga.c,v retrieving revision 1.7 diff -u -p -r1.7 vga.c --- term/i386/pc/vga.c 2 Mar 2005 20:12:46 -0000 1.7 +++ term/i386/pc/vga.c 3 Jul 2005 20:34:46 -0000 @@ -473,6 +473,59 @@ grub_vga_putchar (grub_uint32_t c) } static grub_uint16_t +grub_vga_getwh (void) +{ + return (TEXT_WIDTH << 8) | TEXT_HEIGHT; +#if 0 + static grub_uint16_t res; + unsigned char mode; + if (res) + return res; + /* FIXME : Assumed char size : w=8 h=16. */ + switch (mode = grub_vga_get_mode () ) + { + case 0: /* text, 40x25 */ + case 1: + res = (40 << 8) | 25; + break; + case 2: /* text, 80x25 */ + case 3: + res = (80 << 8) | 25; + break; + case 8: /* graph, 160x200 */ + res = (20 << 8) | 12; + break; + case 4: /* graph, 320x200 */ + case 5: + case 9: + case 0xD: + case 0x13: + res = (40 << 8) | 12; + break; + case 6: /* graph, 640x200 */ + case 0xA: + case 0xE: + res = (80 << 8) | 12; + break; + case 0xF: /* graph, 640x350 */ + case 0x10: + res = (80 << 8) | 21; + break; + case 0x11: /* graph, 640x480 */ + case 0x12: + res = (80 << 8) | 21; + break; + default: /* XXX: dumb values */ + res = (10 << 8) | 10; + break; + } + grub_dprintf("terminal","Mode=%d, Val=0x%x, w=%d, h=%d",mode,res,(res&0xFF00)>>8,res&0xFF); + while(1); + return res; +#endif +} + +static grub_uint16_t grub_vga_getxy (void) { return ((xpos << 8) | ypos); @@ -566,6 +619,7 @@ static struct grub_term grub_vga_term = .putchar = grub_vga_putchar, .checkkey = grub_console_checkkey, .getkey = grub_console_getkey, + .getwh = grub_vga_getwh, .getxy = grub_vga_getxy, .gotoxy = grub_vga_gotoxy, .cls = grub_vga_cls,
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel