• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* term.h - definitions for terminal handling */
2 /*
3  *  GRUB  --  GRand Unified Bootloader
4  *  Copyright (C) 2002  Free Software Foundation, Inc.
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */
20 
21 #ifndef GRUB_TERM_HEADER
22 #define GRUB_TERM_HEADER	1
23 
24 /* These are used to represent the various color states we use */
25 typedef enum
26 {
27   /* represents the color used to display all text that does not use the user
28    * defined colors below
29    */
30   COLOR_STATE_STANDARD,
31   /* represents the user defined colors for normal text */
32   COLOR_STATE_NORMAL,
33   /* represents the user defined colors for highlighted text */
34   COLOR_STATE_HIGHLIGHT
35 } color_state;
36 
37 #ifndef STAGE1_5
38 
39 /* Flags for representing the capabilities of a terminal.  */
40 /* Some notes about the flags:
41    - These flags are used by higher-level functions but not terminals
42    themselves.
43    - If a terminal is dumb, you may assume that only putchar, getkey and
44    checkkey are called.
45    - Some fancy features (nocursor, setcolor, and highlight) can be set to
46    NULL.  */
47 
48 /* Set when input characters shouldn't be echoed back.  */
49 #define TERM_NO_ECHO		(1 << 0)
50 /* Set when the editing feature should be disabled.  */
51 #define TERM_NO_EDIT		(1 << 1)
52 /* Set when the terminal cannot do fancy things.  */
53 #define TERM_DUMB		(1 << 2)
54 /* Set when the terminal needs to be initialized.  */
55 #define TERM_NEED_INIT		(1 << 16)
56 
57 struct term_entry
58 {
59   /* The name of a terminal.  */
60   const char *name;
61   /* The feature flags defined above.  */
62   unsigned long flags;
63   /* Put a character.  */
64   void (*putchar) (int c);
65   /* Check if any input character is available.  */
66   int (*checkkey) (void);
67   /* Get a character.  */
68   int (*getkey) (void);
69   /* Get the cursor position. The return value is ((X << 8) | Y).  */
70   int (*getxy) (void);
71   /* Go to the position (X, Y).  */
72   void (*gotoxy) (int x, int y);
73   /* Clear the screen.  */
74   void (*cls) (void);
75   /* Set the current color to be used */
76   void (*setcolorstate) (color_state state);
77   /* Set the normal color and the highlight color. The format of each
78      color is VGA's.  */
79   void (*setcolor) (int normal_color, int highlight_color);
80   /* Turn on/off the cursor.  */
81   int (*setcursor) (int on);
82 };
83 
84 /* This lists up available terminals.  */
85 extern struct term_entry term_table[];
86 /* This points to the current terminal. This is useful, because only
87    a single terminal is enabled normally.  */
88 extern struct term_entry *current_term;
89 
90 #endif /* ! STAGE1_5 */
91 
92 /* The console stuff.  */
93 extern int console_current_color;
94 void console_putchar (int c);
95 
96 #ifndef STAGE1_5
97 int console_checkkey (void);
98 int console_getkey (void);
99 int console_getxy (void);
100 void console_gotoxy (int x, int y);
101 void console_cls (void);
102 void console_setcolorstate (color_state state);
103 void console_setcolor (int normal_color, int highlight_color);
104 int console_setcursor (int on);
105 #endif
106 
107 #ifdef SUPPORT_SERIAL
108 void serial_putchar (int c);
109 int serial_checkkey (void);
110 int serial_getkey (void);
111 int serial_getxy (void);
112 void serial_gotoxy (int x, int y);
113 void serial_cls (void);
114 void serial_setcolorstate (color_state state);
115 #endif
116 
117 #ifdef SUPPORT_HERCULES
118 void hercules_putchar (int c);
119 int hercules_getxy (void);
120 void hercules_gotoxy (int x, int y);
121 void hercules_cls (void);
122 void hercules_setcolorstate (color_state state);
123 void hercules_setcolor (int normal_color, int highlight_color);
124 int hercules_setcursor (int on);
125 #endif
126 
127 #endif /* ! GRUB_TERM_HEADER */
128