Lift 255x255 erminal sie restriction to 65535x65535. Also change from
bitmasks to small structures of size chosen to fit in registers.
This commit is contained in:
parent
7abdac8e13
commit
e89c2d48a9
24 changed files with 266 additions and 244 deletions
|
@ -155,6 +155,13 @@ struct grub_term_input
|
|||
};
|
||||
typedef struct grub_term_input *grub_term_input_t;
|
||||
|
||||
/* Made in a way to fit into uint32_t and so be passed in a register. */
|
||||
struct grub_term_coordinate
|
||||
{
|
||||
grub_uint8_t x;
|
||||
grub_uint8_t y;
|
||||
};
|
||||
|
||||
struct grub_term_output
|
||||
{
|
||||
/* The next terminal. */
|
||||
|
@ -179,15 +186,15 @@ struct grub_term_output
|
|||
grub_ssize_t (*getcharwidth) (struct grub_term_output *term,
|
||||
const struct grub_unicode_glyph *c);
|
||||
|
||||
/* Get the screen size. The return value is ((Width << 8) | Height). */
|
||||
grub_uint16_t (*getwh) (struct grub_term_output *term);
|
||||
/* Get the screen size. */
|
||||
struct grub_term_coordinate (*getwh) (struct grub_term_output *term);
|
||||
|
||||
/* Get the cursor position. The return value is ((X << 8) | Y). */
|
||||
grub_uint16_t (*getxy) (struct grub_term_output *term);
|
||||
struct grub_term_coordinate (*getxy) (struct grub_term_output *term);
|
||||
|
||||
/* Go to the position (X, Y). */
|
||||
void (*gotoxy) (struct grub_term_output *term,
|
||||
grub_uint8_t x, grub_uint8_t y);
|
||||
struct grub_term_coordinate pos);
|
||||
|
||||
/* Clear the screen. */
|
||||
void (*cls) (struct grub_term_output *term);
|
||||
|
@ -314,20 +321,20 @@ int EXPORT_FUNC(grub_getkey_noblock) (void);
|
|||
void grub_cls (void);
|
||||
void EXPORT_FUNC(grub_refresh) (void);
|
||||
void grub_puts_terminal (const char *str, struct grub_term_output *term);
|
||||
grub_uint16_t *grub_term_save_pos (void);
|
||||
void grub_term_restore_pos (grub_uint16_t *pos);
|
||||
struct grub_term_coordinate *grub_term_save_pos (void);
|
||||
void grub_term_restore_pos (struct grub_term_coordinate *pos);
|
||||
|
||||
static inline unsigned grub_term_width (struct grub_term_output *term)
|
||||
{
|
||||
return ((term->getwh(term)&0xFF00)>>8);
|
||||
return term->getwh(term).x;
|
||||
}
|
||||
|
||||
static inline unsigned grub_term_height (struct grub_term_output *term)
|
||||
{
|
||||
return (term->getwh(term)&0xFF);
|
||||
return term->getwh(term).y;
|
||||
}
|
||||
|
||||
static inline grub_uint16_t
|
||||
static inline struct grub_term_coordinate
|
||||
grub_term_getxy (struct grub_term_output *term)
|
||||
{
|
||||
return term->getxy (term);
|
||||
|
@ -341,9 +348,9 @@ grub_term_refresh (struct grub_term_output *term)
|
|||
}
|
||||
|
||||
static inline void
|
||||
grub_term_gotoxy (struct grub_term_output *term, grub_uint8_t x, grub_uint8_t y)
|
||||
grub_term_gotoxy (struct grub_term_output *term, struct grub_term_coordinate pos)
|
||||
{
|
||||
term->gotoxy (term, x, y);
|
||||
term->gotoxy (term, pos);
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
|
|
@ -53,18 +53,17 @@ struct grub_terminfo_output_state
|
|||
char *cursor_off;
|
||||
char *setcolor;
|
||||
|
||||
unsigned int width, height;
|
||||
|
||||
unsigned int xpos, ypos;
|
||||
struct grub_term_coordinate size;
|
||||
struct grub_term_coordinate pos;
|
||||
|
||||
void (*put) (struct grub_term_output *term, const int c);
|
||||
};
|
||||
|
||||
grub_err_t EXPORT_FUNC(grub_terminfo_output_init) (struct grub_term_output *term);
|
||||
void EXPORT_FUNC(grub_terminfo_gotoxy) (grub_term_output_t term,
|
||||
grub_uint8_t x, grub_uint8_t y);
|
||||
struct grub_term_coordinate pos);
|
||||
void EXPORT_FUNC(grub_terminfo_cls) (grub_term_output_t term);
|
||||
grub_uint16_t EXPORT_FUNC (grub_terminfo_getxy) (struct grub_term_output *term);
|
||||
struct grub_term_coordinate EXPORT_FUNC (grub_terminfo_getxy) (struct grub_term_output *term);
|
||||
void EXPORT_FUNC (grub_terminfo_setcursor) (struct grub_term_output *term,
|
||||
const int on);
|
||||
void EXPORT_FUNC (grub_terminfo_setcolorstate) (struct grub_term_output *term,
|
||||
|
@ -75,7 +74,7 @@ grub_err_t EXPORT_FUNC (grub_terminfo_input_init) (struct grub_term_input *term)
|
|||
int EXPORT_FUNC (grub_terminfo_getkey) (struct grub_term_input *term);
|
||||
void EXPORT_FUNC (grub_terminfo_putchar) (struct grub_term_output *term,
|
||||
const struct grub_unicode_glyph *c);
|
||||
grub_uint16_t EXPORT_FUNC (grub_terminfo_getwh) (struct grub_term_output *term);
|
||||
struct grub_term_coordinate EXPORT_FUNC (grub_terminfo_getwh) (struct grub_term_output *term);
|
||||
|
||||
|
||||
grub_err_t EXPORT_FUNC (grub_terminfo_output_register) (struct grub_term_output *term,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue