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   /* Default for maximum number of lines if not specified */
64   unsigned short max_lines;
65   /* Put a character.  */
66   void (*putchar) (int c);
67   /* Check if any input character is available.  */
68   int (*checkkey) (void);
69   /* Get a character.  */
70   int (*getkey) (void);
71   /* Get the cursor position. The return value is ((X << 8) | Y).  */
72   int (*getxy) (void);
73   /* Go to the position (X, Y).  */
74   void (*gotoxy) (int x, int y);
75   /* Clear the screen.  */
76   void (*cls) (void);
77   /* Set the current color to be used */
78   void (*setcolorstate) (color_state state);
79   /* Set the normal color and the highlight color. The format of each
80      color is VGA's.  */
81   void (*setcolor) (int normal_color, int highlight_color);
82   /* Turn on/off the cursor.  */
83   int (*setcursor) (int on);
84 
85   /* function to start a terminal */
86   int (*startup) (void);
87   /* function to use to shutdown a terminal */
88   void (*shutdown) (void);
89 };
90 
91 /* This lists up available terminals.  */
92 extern struct term_entry term_table[];
93 /* This points to the current terminal. This is useful, because only
94    a single terminal is enabled normally.  */
95 extern struct term_entry *current_term;
96 
97 #endif /* ! STAGE1_5 */
98 
99 /* The console stuff.  */
100 extern int console_current_color;
101 void console_putchar (int c);
102 
103 #ifndef STAGE1_5
104 int console_checkkey (void);
105 int console_getkey (void);
106 int console_getxy (void);
107 void console_gotoxy (int x, int y);
108 void console_cls (void);
109 void console_setcolorstate (color_state state);
110 void console_setcolor (int normal_color, int highlight_color);
111 int console_setcursor (int on);
112 #endif
113 
114 #ifdef SUPPORT_SERIAL
115 void serial_putchar (int c);
116 int serial_checkkey (void);
117 int serial_getkey (void);
118 int serial_getxy (void);
119 void serial_gotoxy (int x, int y);
120 void serial_cls (void);
121 void serial_setcolorstate (color_state state);
122 
123 void composite_putchar (int c);
124 int composite_checkkey (void);
125 int composite_getkey (void);
126 int composite_getxy (void);
127 void composite_gotoxy (int x, int y);
128 void composite_cls (void);
129 void composite_setcolorstate (color_state state);
130 #endif
131 
132 #ifdef SUPPORT_HERCULES
133 void hercules_putchar (int c);
134 int hercules_getxy (void);
135 void hercules_gotoxy (int x, int y);
136 void hercules_cls (void);
137 void hercules_setcolorstate (color_state state);
138 void hercules_setcolor (int normal_color, int highlight_color);
139 int hercules_setcursor (int on);
140 #endif
141 
142 #ifdef SUPPORT_GRAPHICS
143 extern int foreground, background, border, graphics_inited;
144 
145 void graphics_set_splash(char *splashfile);
146 int set_videomode (int mode);
147 void graphics_putchar (int c);
148 int graphics_getxy(void);
149 void graphics_gotoxy(int x, int y);
150 void graphics_cls(void);
151 void graphics_setcolorstate (color_state state);
152 void graphics_setcolor (int normal_color, int highlight_color);
153 int graphics_setcursor (int on);
154 int graphics_init(void);
155 void graphics_end(void);
156 
157 int hex(int v);
158 void graphics_set_palette(int idx, int red, int green, int blue);
159 #endif /* SUPPORT_GRAPHICS */
160 
161 #endif /* ! GRUB_TERM_HEADER */
162