Synchronize with sys/i386/isa/syscons.c revision 1.220.

This commit is contained in:
KATO Takenori 1997-07-02 11:00:20 +00:00
parent 48084fdd6a
commit 2a32753bfb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=27172

View File

@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: syscons.c,v 1.41 1997/06/23 09:31:03 kato Exp $
* $Id: syscons.c,v 1.42 1997/06/30 10:00:43 kato Exp $
*/
#include "sc.h"
@ -331,6 +331,7 @@ static inline void
draw_cursor_image(scr_stat *scp)
{
u_short cursor_image, *ptr;
u_short prev_image;
#ifdef PC98
int pos = scp->cursor_pos - scp->scr_buf;
while((inb(TEXT_GDC + 0) & 0x04) == 0) {}
@ -342,11 +343,26 @@ draw_cursor_image(scr_stat *scp)
/* do we have a destructive cursor ? */
if (flags & CHAR_CURSOR) {
cursor_image = *scp->cursor_pos;
prev_image = scp->cursor_saveunder;
cursor_image = *ptr & 0x00ff;
if (cursor_image == DEAD_CHAR)
cursor_image = prev_image & 0x00ff;
cursor_image |= *(scp->cursor_pos) & 0xff00;
scp->cursor_saveunder = cursor_image;
/* update the cursor bitmap if the char under the cursor has changed */
if (prev_image != cursor_image)
set_destructive_cursor(scp);
/* modify cursor_image */
if (!(flags & BLINK_CURSOR)||((flags & BLINK_CURSOR)&&(blinkrate & 4))){
set_destructive_cursor(scp);
/*
* When the mouse pointer is at the same position as the cursor,
* the cursor bitmap needs to be updated even if the char under
* the cursor hasn't changed, because the mouse pionter may
* have moved by a few dots within the cursor cel.
*/
if ((prev_image == cursor_image)
&& (cursor_image != *(scp->cursor_pos)))
set_destructive_cursor(scp);
cursor_image &= 0xff00;
cursor_image |= DEAD_CHAR;
}
@ -701,6 +717,8 @@ scattach(struct isa_device *dev)
scinit();
flags = dev->id_flags;
if (!crtc_vga)
flags &= ~CHAR_CURSOR;
scp = console[0];
@ -746,11 +764,8 @@ scattach(struct isa_device *dev)
#endif
/* initialize cursor stuff */
if (!(scp->status & UNKNOWN_MODE)) {
if (!(scp->status & UNKNOWN_MODE))
draw_cursor_image(scp);
if (crtc_vga && (flags & CHAR_CURSOR))
set_destructive_cursor(scp);
}
/* get screen update going */
scrn_timer(NULL);
@ -1064,9 +1079,18 @@ scioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
if (!crtc_vga)
return ENXIO;
flags |= CHAR_CURSOR;
set_destructive_cursor(scp);
} else
flags &= ~CHAR_CURSOR;
/*
* The cursor shape is global property; all virtual consoles
* are affected. Update the cursor in the current console...
*/
if (!(cur_console->status & UNKNOWN_MODE)) {
remove_cursor_image(cur_console);
if (flags & CHAR_CURSOR)
set_destructive_cursor(cur_console);
draw_cursor_image(cur_console);
}
return 0;
case CONS_BELLTYPE: /* set bell type sound/visual */
@ -1519,8 +1543,6 @@ scioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
copy_font(LOAD, FONT_14, font_14);
if (fonts_loaded & FONT_16)
copy_font(LOAD, FONT_16, font_16);
if (flags & CHAR_CURSOR)
set_destructive_cursor(scp);
load_palette(palette);
}
/* FALL THROUGH */
@ -1716,9 +1738,11 @@ scioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
return ENXIO;
bcopy(data, font_8, 8*256);
fonts_loaded |= FONT_8;
copy_font(LOAD, FONT_8, font_8);
if (flags & CHAR_CURSOR)
set_destructive_cursor(scp);
if (!(cur_console->status & UNKNOWN_MODE)) {
copy_font(LOAD, FONT_8, font_8);
if (flags & CHAR_CURSOR)
set_destructive_cursor(cur_console);
}
return 0;
case GIO_FONT8x8: /* get 8x8 dot font */
@ -1736,9 +1760,11 @@ scioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
return ENXIO;
bcopy(data, font_14, 14*256);
fonts_loaded |= FONT_14;
copy_font(LOAD, FONT_14, font_14);
if (flags & CHAR_CURSOR)
set_destructive_cursor(scp);
if (!(cur_console->status & UNKNOWN_MODE)) {
copy_font(LOAD, FONT_14, font_14);
if (flags & CHAR_CURSOR)
set_destructive_cursor(cur_console);
}
return 0;
case GIO_FONT8x14: /* get 8x14 dot font */
@ -1756,9 +1782,11 @@ scioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
return ENXIO;
bcopy(data, font_16, 16*256);
fonts_loaded |= FONT_16;
copy_font(LOAD, FONT_16, font_16);
if (flags & CHAR_CURSOR)
set_destructive_cursor(scp);
if (!(cur_console->status & UNKNOWN_MODE)) {
copy_font(LOAD, FONT_16, font_16);
if (flags & CHAR_CURSOR)
set_destructive_cursor(cur_console);
}
return 0;
case GIO_FONT8x16: /* get 8x16 dot font */
@ -2144,11 +2172,10 @@ exchange_scr(void)
}
move_crsr(new_scp, new_scp->xpos, new_scp->ypos);
#ifndef PC98
if ((old_scp->status & UNKNOWN_MODE) && crtc_vga) {
if (flags & CHAR_CURSOR)
set_destructive_cursor(new_scp);
if (!(new_scp->status & UNKNOWN_MODE) && (flags & CHAR_CURSOR))
set_destructive_cursor(new_scp);
if ((old_scp->status & UNKNOWN_MODE) && crtc_vga)
load_palette(palette);
}
#endif
if (old_scp->status & KBD_RAW_MODE || new_scp->status & KBD_RAW_MODE)
shfts = ctls = alts = agrs = metas = 0;
@ -2838,17 +2865,24 @@ scan_esc(scr_stat *scp, u_char c)
flags |= BLINK_CURSOR;
else
flags &= ~BLINK_CURSOR;
if ((scp->term.param[0] & 0x02) && crtc_vga) {
if ((scp->term.param[0] & 0x02) && crtc_vga)
flags |= CHAR_CURSOR;
set_destructive_cursor(scp);
} else
else
flags &= ~CHAR_CURSOR;
}
else if (scp->term.num_param == 2) {
scp->cursor_start = scp->term.param[0] & 0x1F;
scp->cursor_end = scp->term.param[1] & 0x1F;
if (flags & CHAR_CURSOR)
set_destructive_cursor(scp);
}
/*
* The cursor shape is global property; all virtual consoles
* are affected. Update the cursor in the current console...
*/
if (!(cur_console->status & UNKNOWN_MODE)) {
remove_cursor_image(cur_console);
if (crtc_vga && (flags & CHAR_CURSOR))
set_destructive_cursor(cur_console);
draw_cursor_image(cur_console);
}
break;
@ -3393,6 +3427,7 @@ scinit(void)
console[0]->atr_buf = Atrat;
console[0]->cursor_atr = Atrat + hw_cursor;
#endif
console[0]->cursor_saveunder = *console[0]->cursor_pos;
console[0]->xpos = hw_cursor % COL;
console[0]->ypos = hw_cursor / COL;
for (i=1; i<MAXCONS; i++)
@ -3446,6 +3481,7 @@ static scr_stat
set_mode(scp);
*/
clear_screen(scp);
scp->cursor_saveunder = *scp->cursor_pos;
return scp;
}
@ -5009,6 +5045,7 @@ do_bell(scr_stat *scp, int pitch, int duration)
copy_font(SAVE, FONT_16, font_16);
fonts_loaded = FONT_16;
save_palette();
set_destructive_cursor(console[0]);
}
#ifdef SC_SPLASH_SCREEN