mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-30 23:48:09 +01:00
Fix many long-standing bugs and problems with pcvt, namely:
. make pccncheck() work even when interrupts are disabled, so the ``Press a key on the console...'' procedure will work, . make kernel colors #ifndef, so they can be overridden from the config file, . use shutdown_nice() instead of cpu_reset() if Ctrl-Alt-Del is enabled, . allow pccngetc() to return more than a single character, so the arrow keys will work (and thus visual UserConfig!), . fix a warning. This closes all know PRs related to pcvt, in particular #845, #1236, and #1265. PR #991 is a duplicate for 845, and PR #1283 has already been fixed earlier in rev 1.11 of pcvt_conf.h. Submitted by: Ulf Kieber (kieber@sax.de), for the kernel color fix
This commit is contained in:
parent
b458c95f75
commit
fae988778b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=17504
@ -460,12 +460,18 @@
|
||||
* emphasize messages from the kernel on color and mono displays.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
/* color displays */
|
||||
#if !defined COLOR_KERNEL_FG /* color displays */
|
||||
#define COLOR_KERNEL_FG FG_LIGHTGREY /* kernel messages, foreground */
|
||||
#endif
|
||||
#if !defined COLOR_KERNEL_BG
|
||||
#define COLOR_KERNEL_BG BG_RED /* kernel messages, background */
|
||||
#endif
|
||||
|
||||
/* monochrome displays */
|
||||
#if !defined MONO_KERNEL_FG /* monochrome displays */
|
||||
#define MONO_KERNEL_FG FG_UNDERLINE /* kernel messages, foreground */
|
||||
#endif
|
||||
#if !defined MONO_KERNEL_BG
|
||||
#define MONO_KERNEL_BG BG_BLACK /* kernel messages, background */
|
||||
#endif
|
||||
|
||||
/*---------------------------------- E O F ----------------------------------*/
|
||||
|
@ -1207,7 +1207,7 @@ int
|
||||
pccngetc(Dev_t dev)
|
||||
{
|
||||
register int s;
|
||||
register u_char *cp;
|
||||
static u_char *cp;
|
||||
|
||||
#ifdef XSERVER
|
||||
|
||||
@ -1221,24 +1221,39 @@ pccngetc(Dev_t dev)
|
||||
|
||||
#endif /* XSERVER */
|
||||
|
||||
if (cp && *cp)
|
||||
/*
|
||||
* We still have a pending key sequence, e.g.
|
||||
* from an arrow key. Deliver this one first.
|
||||
*/
|
||||
return (*cp++);
|
||||
|
||||
s = spltty(); /* block pcrint while we poll */
|
||||
kbd_polling = 1;
|
||||
cp = sgetc(0);
|
||||
kbd_polling = 0;
|
||||
splx(s);
|
||||
|
||||
#if ! (PCVT_FREEBSD >= 201)
|
||||
/* this belongs to cons.c */
|
||||
if (*cp == '\r')
|
||||
return('\n');
|
||||
*cp = '\n';
|
||||
#endif /* ! (PCVT_FREEBSD >= 201) */
|
||||
|
||||
return (*cp);
|
||||
return (*cp++);
|
||||
}
|
||||
|
||||
#if PCVT_FREEBSD >= 200
|
||||
int
|
||||
pccncheckc(Dev_t dev)
|
||||
{
|
||||
return (sgetc(1) != 0); /* did someone press the "Any" key? */
|
||||
char *cp;
|
||||
int x = spltty();
|
||||
kbd_polling = 1;
|
||||
cp = sgetc(1);
|
||||
kbd_polling = 0;
|
||||
splx(x);
|
||||
return (cp != 0); /* did someone press the "Any" key? */
|
||||
}
|
||||
#endif /* PCVT_FREEBSD >= 200 */
|
||||
|
||||
|
@ -1396,12 +1396,12 @@ static __inline void vt_selattr(struct video_state *svsp)
|
||||
/* 0x84 to produce keyboard controller */
|
||||
/* access delays */
|
||||
#define PCVT_KBD_DELAY() \
|
||||
{ u_char x = inb(0x84); } \
|
||||
{ u_char x = inb(0x84); } \
|
||||
{ u_char x = inb(0x84); } \
|
||||
{ u_char x = inb(0x84); } \
|
||||
{ u_char x = inb(0x84); } \
|
||||
{ u_char x = inb(0x84); }
|
||||
{ (void)inb(0x84); } \
|
||||
{ (void)inb(0x84); } \
|
||||
{ (void)inb(0x84); } \
|
||||
{ (void)inb(0x84); } \
|
||||
{ (void)inb(0x84); } \
|
||||
{ (void)inb(0x84); }
|
||||
|
||||
#else /* PCVT_PORTIO_DELAY */
|
||||
/* use system supplied delay function for */
|
||||
|
@ -935,10 +935,10 @@ loop:
|
||||
/* see if there is data from the keyboard available either from */
|
||||
/* the keyboard fifo or from the 8042 keyboard controller */
|
||||
|
||||
if ((( noblock) && (pcvt_kbd_count)) ||
|
||||
((!noblock) && (inb(CONTROLLER_CTRL) & STATUS_OUTPBF)))
|
||||
if ((noblock && pcvt_kbd_count) ||
|
||||
((!noblock || kbd_polling) && (inb(CONTROLLER_CTRL) & STATUS_OUTPBF)))
|
||||
{
|
||||
if (!noblock) /* source = 8042 */
|
||||
if (!noblock || kbd_polling) /* source = 8042 */
|
||||
{
|
||||
PCVT_KBD_DELAY(); /* 7 us delay */
|
||||
dt = inb(CONTROLLER_DATA); /* get from obuf */
|
||||
@ -1245,10 +1245,10 @@ no_mouse_event:
|
||||
/* see if there is data from the keyboard available either from */
|
||||
/* the keyboard fifo or from the 8042 keyboard controller */
|
||||
|
||||
if ((( noblock) && (pcvt_kbd_count)) ||
|
||||
((!noblock) && (inb(CONTROLLER_CTRL) & STATUS_OUTPBF)))
|
||||
if ((noblock && pcvt_kbd_count) ||
|
||||
((!noblock || kbd_polling) && (inb(CONTROLLER_CTRL) & STATUS_OUTPBF)))
|
||||
{
|
||||
if (!noblock) /* source = 8042 */
|
||||
if (!noblock || kbd_polling) /* source = 8042 */
|
||||
{
|
||||
PCVT_KBD_DELAY(); /* 7 us delay */
|
||||
dt = inb(CONTROLLER_DATA);
|
||||
@ -1355,7 +1355,7 @@ regular:
|
||||
|
||||
#if PCVT_CTRL_ALT_DEL /* Check for cntl-alt-del */
|
||||
if((key == 76) && ctrl_down && (meta_down||altgr_down))
|
||||
cpu_reset();
|
||||
shutdown_nice();
|
||||
#endif /* PCVT_CTRL_ALT_DEL */
|
||||
|
||||
#if !(PCVT_NETBSD || PCVT_FREEBSD >= 200)
|
||||
|
Loading…
Reference in New Issue
Block a user