rename console input/output functions to more distinguishable names.

This commit is contained in:
okuji 2000-07-12 12:17:47 +00:00
parent fa003769c5
commit 1b9e348ef6
6 changed files with 145 additions and 11 deletions

View file

@ -1,3 +1,34 @@
2000-07-12 OKUJI Yoshinori <okuji@gnu.org>
Just to start implementing serial console support...
* stage2/asm.S (grub_putchar): Renamed to ...
(console_putchar): ... this.
[!STAGE1_5] (getkey): Renamed to ...
[!STAGE1_5] (console_getkey): ... this.
[!STAGE1_5] (checkkey): Renamed to ...
[!STAGE1_5] (console_checkkey): ... this.
* stage2/char_io.c [!STAGE1_5] (getkey): New function.
[!STAGE1_5] (checkkey): Likewise.
(grub_putchar): Likewise.
* stage2/shared.h [!STAGE1_5] (terminal): Declared.
[!STAGE1_5] (TERMINAL_CONSOLE): New macro.
[!STAGE1_5] (TERMINAL_SERIAL): Likewise.
(console_putchar): Declared.
(serial_putchar): Likewise.
(console_getkey): Likewise.
(serial_getkey): Likewise.
(console_checkkey): Likewise.
(serial_checkkey): Likewise.
* stage2/builtins.c (terminal): New global variable. The default
is TERMINAL_CONSOLE.
* grub/asmstub.c (grub_putchar): Renamed to ...
(console_putchar): ... this.
(getkey): Renamed to ...
(console_getkey): ... this.
(checkkey): Renamed to ...
(console_checkkey): ... this.
2000-07-12 OKUJI Yoshinori <okuji@gnu.org> 2000-07-12 OKUJI Yoshinori <okuji@gnu.org>
* stage2/Makefile.am (libgrub_a_CFLAGS): Added * stage2/Makefile.am (libgrub_a_CFLAGS): Added

View file

@ -460,7 +460,7 @@ grub_longjmp (grub_jmp_buf env, int val)
/* displays an ASCII character. IBM displays will translate some /* displays an ASCII character. IBM displays will translate some
characters to special graphical ones */ characters to special graphical ones */
void void
grub_putchar (int c) console_putchar (int c)
{ {
#ifdef HAVE_LIBCURSES #ifdef HAVE_LIBCURSES
if (use_curses) if (use_curses)
@ -480,7 +480,7 @@ static int save_char = ERR;
/* returns packed BIOS/ASCII code */ /* returns packed BIOS/ASCII code */
int int
getkey (void) console_getkey (void)
{ {
int c; int c;
@ -512,7 +512,7 @@ getkey (void)
/* like 'getkey', but doesn't wait, returns -1 if nothing available */ /* like 'getkey', but doesn't wait, returns -1 if nothing available */
int int
checkkey (void) console_checkkey (void)
{ {
#ifdef HAVE_LIBCURSES #ifdef HAVE_LIBCURSES
if (use_curses) if (use_curses)

View file

@ -1386,8 +1386,9 @@ ENTRY(grub_longjmp)
/* /*
* putchar(c) : Puts character on the screen, interpreting '\n' as in the * console_putchar(c)
* UNIX fashion. *
* Puts character on the screen, interpreting '\n' as in the UNIX fashion.
* *
* BIOS call "INT 10H Function 0Eh" to write character to console * BIOS call "INT 10H Function 0Eh" to write character to console
* Call with %ah = 0x0e * Call with %ah = 0x0e
@ -1397,7 +1398,7 @@ ENTRY(grub_longjmp)
*/ */
ENTRY(grub_putchar) ENTRY(console_putchar)
push %ebp push %ebp
push %eax push %eax
push %ebx push %ebx
@ -1410,7 +1411,7 @@ ENTRY(grub_putchar)
/* if newline, print CR as well */ /* if newline, print CR as well */
pushl $0xd pushl $0xd
call EXT_C(grub_putchar) call EXT_C(console_putchar)
popl %eax popl %eax
pc_notnewline: pc_notnewline:
@ -2063,14 +2064,14 @@ ENTRY(ascii_key_map)
/* /*
* getkey() * console_getkey()
* BIOS call "INT 16H Function 00H" to read character from keyboard * BIOS call "INT 16H Function 00H" to read character from keyboard
* Call with %ah = 0x0 * Call with %ah = 0x0
* Return: %ah = keyboard scan code * Return: %ah = keyboard scan code
* %al = ASCII character * %al = ASCII character
*/ */
ENTRY(getkey) ENTRY(console_getkey)
push %ebp push %ebp
push %ebx /* save %ebx */ push %ebx /* save %ebx */
@ -2093,7 +2094,7 @@ ENTRY(getkey)
/* /*
* checkkey() * console_checkkey()
* if there is a character pending, return it; otherwise return -1 * if there is a character pending, return it; otherwise return -1
* BIOS call "INT 16H Function 01H" to check whether a character is pending * BIOS call "INT 16H Function 01H" to check whether a character is pending
* Call with %ah = 0x1 * Call with %ah = 0x1
@ -2105,7 +2106,7 @@ ENTRY(getkey)
* else * else
* Zero flag = set * Zero flag = set
*/ */
ENTRY(checkkey) ENTRY(console_checkkey)
push %ebp push %ebp
push %ebx push %ebx

View file

@ -33,6 +33,8 @@
# include <smp-imps.h> # include <smp-imps.h>
#endif /* ! GRUB_UTIL */ #endif /* ! GRUB_UTIL */
/* Terminal types. */
int terminal = TERMINAL_CONSOLE;
/* The type of kernel loaded. */ /* The type of kernel loaded. */
kernel_t kernel_type; kernel_t kernel_type;
/* The boot device. */ /* The boot device. */

View file

@ -170,6 +170,7 @@ grub_sprintf (char *buffer, const char *format, ...)
return bp - buffer; return bp - buffer;
} }
void void
init_page (void) init_page (void)
{ {
@ -739,8 +740,83 @@ grub_strcmp (const char *s1, const char *s2)
return 0; return 0;
} }
/* Wait for a keypress and return its code. */
int
getkey (void)
{
int c = -1;
if (terminal == TERMINAL_CONSOLE)
c = console_getkey ();
#ifdef serial_console_is_not_implemented_yet
else if (terminal == TERMINAL_SERIAL)
c = serial_getkey ();
else
{
while (1)
{
c = console_checkkey ();
if (c != -1)
{
c = console_getkey ();
break;
}
c = serial_checkkey ();
if (c != -1)
{
c = serial_getkey ();
break;
}
}
}
#endif
return c;
}
/* Check if a key code is available. */
int
checkkey (void)
{
int c = -1;
if (terminal & TERMINAL_CONSOLE)
c = console_checkkey ();
#ifdef serial_console_is_not_implemented_yet
if (c == -1 && (terminal & TERMINAL_SERIAL))
c = serial_checkkey ();
#endif
return c;
}
#endif /* ! STAGE1_5 */ #endif /* ! STAGE1_5 */
/* Display an ASCII character. */
void
grub_putchar (int c)
{
#ifdef STAGE1_5
/* In Stage 1.5, only the normal console is supported. */
console_putchar (c);
#else /* ! STAGE1_5 */
if (terminal & TERMINAL_CONSOLE)
console_putchar (c);
#ifdef serial_console_is_not_implemented_yet
if (terminal & TERMINAL_SERIAL)
serial_putchar (c);
#endif
#endif /* ! STAGE1_5 */
}
int int
substring (char *s1, char *s2) substring (char *s1, char *s2)
{ {

View file

@ -625,14 +625,32 @@ void gotoxy (int x, int y);
characters to special graphical ones (see the DISP_* constants). */ characters to special graphical ones (see the DISP_* constants). */
void grub_putchar (int c); void grub_putchar (int c);
/* The console part of grub_putchar. */
void console_putchar (int c);
/* The serial part of grub_putchar. */
void serial_putchar (int c);
/* Wait for a keypress, and return its packed BIOS/ASCII key code. /* Wait for a keypress, and return its packed BIOS/ASCII key code.
Use ASCII_CHAR(ret) to extract the ASCII code. */ Use ASCII_CHAR(ret) to extract the ASCII code. */
int getkey (void); int getkey (void);
/* The console part of getkey. */
int console_getkey (void);
/* The serial part of getkey. */
int serial_getkey (void);
/* Like GETKEY, but doesn't block, and returns -1 if no keystroke is /* Like GETKEY, but doesn't block, and returns -1 if no keystroke is
available. */ available. */
int checkkey (void); int checkkey (void);
/* The console part of checkkey. */
int console_checkkey (void);
/* The serial part of checkkey. */
int serial_checkkey (void);
/* Sets text mode character attribute at the cursor position. See A_* /* Sets text mode character attribute at the cursor position. See A_*
constants defined above. */ constants defined above. */
void set_attrib (int attr); void set_attrib (int attr);
@ -686,6 +704,12 @@ extern kernel_t kernel_type;
extern int show_menu; extern int show_menu;
extern int grub_timeout; extern int grub_timeout;
/* This variable specifies which console should be used. */
extern int terminal;
#define TERMINAL_CONSOLE (1 << 0) /* keyboard and screen */
#define TERMINAL_SERIAL (1 << 1) /* serial console */
void init_builtins (void); void init_builtins (void);
void init_config (void); void init_config (void);
char *skip_to (int after_equal, char *cmdline); char *skip_to (int after_equal, char *cmdline);