/* term.h - definitions for terminal handling */ /* * GRUB -- GRand Unified Bootloader * Copyright (C) 2002 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef GRUB_TERM_HEADER #define GRUB_TERM_HEADER 1 /* These are used to represent the various color states we use */ typedef enum { /* represents the color used to display all text that does not use the user * defined colors below */ COLOR_STATE_STANDARD, /* represents the user defined colors for normal text */ COLOR_STATE_NORMAL, /* represents the user defined colors for highlighted text */ COLOR_STATE_HIGHLIGHT } color_state; #ifndef STAGE1_5 /* Flags for representing the capabilities of a terminal. */ /* Some notes about the flags: - These flags are used by higher-level functions but not terminals themselves. - If a terminal is dumb, you may assume that only putchar, getkey and checkkey are called. - Some fancy features (nocursor, setcolor, and highlight) can be set to NULL. */ /* Set when input characters shouldn't be echoed back. */ #define TERM_NO_ECHO (1 << 0) /* Set when the editing feature should be disabled. */ #define TERM_NO_EDIT (1 << 1) /* Set when the terminal cannot do fancy things. */ #define TERM_DUMB (1 << 2) /* Set when the terminal needs to be initialized. */ #define TERM_NEED_INIT (1 << 16) struct term_entry { /* The name of a terminal. */ const char *name; /* The feature flags defined above. */ unsigned long flags; /* Put a character. */ void (*putchar) (int c); /* Check if any input character is available. */ int (*checkkey) (void); /* Get a character. */ int (*getkey) (void); /* Get the cursor position. The return value is ((X << 8) | Y). */ int (*getxy) (void); /* Go to the position (X, Y). */ void (*gotoxy) (int x, int y); /* Clear the screen. */ void (*cls) (void); /* Set the current color to be used */ void (*setcolorstate) (color_state state); /* Set the normal color and the highlight color. The format of each color is VGA's. */ void (*setcolor) (int normal_color, int highlight_color); /* Turn on/off the cursor. */ int (*setcursor) (int on); }; /* This lists up available terminals. */ extern struct term_entry term_table[]; /* This points to the current terminal. This is useful, because only a single terminal is enabled normally. */ extern struct term_entry *current_term; #endif /* ! STAGE1_5 */ /* The console stuff. */ extern int console_current_color; void console_putchar (int c); #ifndef STAGE1_5 int console_checkkey (void); int console_getkey (void); int console_getxy (void); void console_gotoxy (int x, int y); void console_cls (void); void console_setcolorstate (color_state state); void console_setcolor (int normal_color, int highlight_color); int console_setcursor (int on); #endif #ifdef SUPPORT_SERIAL void serial_putchar (int c); int serial_checkkey (void); int serial_getkey (void); int serial_getxy (void); void serial_gotoxy (int x, int y); void serial_cls (void); void serial_setcolorstate (color_state state); #endif #ifdef SUPPORT_HERCULES void hercules_putchar (int c); int hercules_getxy (void); void hercules_gotoxy (int x, int y); void hercules_cls (void); void hercules_setcolorstate (color_state state); void hercules_setcolor (int normal_color, int highlight_color); int hercules_setcursor (int on); #endif #endif /* ! GRUB_TERM_HEADER */