Mon Jan 19 21:02:30 2004 Michael Jennings (mej)

Patch from David Lloyd <dmlloyd@tds.net> for overstrike support.


SVN revision: 8577
This commit is contained in:
Michael Jennings 2004-01-20 02:04:04 +00:00
parent 8e26d97824
commit 020ab11571
4 changed files with 46 additions and 7 deletions

View File

@ -5164,3 +5164,7 @@ Sun Jan 11 17:09:07 2004 Michael Jennings (mej)
It's too bad you can't just say, "Copyright 1997-2999."
----------------------------------------------------------------------
Mon Jan 19 21:02:30 2004 Michael Jennings (mej)
Patch from David Lloyd <dmlloyd@tds.net> for overstrike support.
----------------------------------------------------------------------

View File

@ -757,7 +757,7 @@ scr_add_lines(const unsigned char *str, int nlines, int len)
if (screen.row == screen.bscroll) {
scroll_text(screen.tscroll, screen.bscroll, 1, 0);
j = screen.bscroll + TermWin.saveLines;
blank_screen_mem(screen.text, screen.rend, j, rstyle & ~RS_Uline);
blank_screen_mem(screen.text, screen.rend, j, rstyle & ~(RS_Uline|RS_Overscore));
} else if (screen.row < (TERM_WINDOW_GET_REPORTED_ROWS() - 1)) {
screen.row++;
row = screen.row + TermWin.saveLines;
@ -786,7 +786,7 @@ scr_add_lines(const unsigned char *str, int nlines, int len)
j = screen.bscroll + TermWin.saveLines;
/* blank_line(screen.text[j], screen.rend[j], TermWin.ncol,
rstyle); Bug fix from John Ellison - need to reset rstyle */
blank_screen_mem(screen.text, screen.rend, j, rstyle & ~RS_Uline);
blank_screen_mem(screen.text, screen.rend, j, rstyle & ~(RS_Uline|RS_Overscore));
} else if (screen.row < (TERM_WINDOW_GET_REPORTED_ROWS() - 1)) {
screen.row++;
row = screen.row + TermWin.saveLines;
@ -1004,9 +1004,9 @@ scr_erase_line(int mode)
default:
return;
}
blank_line(&(screen.text[row][col]), &(screen.rend[row][col]), num, rstyle & ~RS_Uline);
blank_line(&(screen.text[row][col]), &(screen.rend[row][col]), num, rstyle & ~(RS_Uline|RS_Overscore));
} else {
blank_screen_mem(screen.text, screen.rend, row, rstyle & ~RS_Uline);
blank_screen_mem(screen.text, screen.rend, row, rstyle & ~(RS_Uline|RS_Overscore));
}
}
@ -1059,7 +1059,7 @@ scr_erase_screen(int mode)
}
if (row >= 0 && row <= TERM_WINDOW_GET_REPORTED_ROWS()) { /* check OOB */
UPPER_BOUND(num, (TERM_WINDOW_GET_REPORTED_ROWS() - row));
if (rstyle & RS_RVid || rstyle & RS_Uline)
if (rstyle & RS_RVid || rstyle & RS_Uline || rstyle & RS_Overscore)
ren = -1;
else {
if (GET_BGCOLOR(rstyle) == bgColor) {
@ -1076,7 +1076,7 @@ scr_erase_screen(int mode)
}
}
for (; num--; row++) {
blank_screen_mem(screen.text, screen.rend, row + row_offset, rstyle & ~(RS_RVid | RS_Uline));
blank_screen_mem(screen.text, screen.rend, row + row_offset, rstyle & ~(RS_RVid | RS_Uline | RS_Overscore));
blank_screen_mem(drawn_text, drawn_rend, row, ren);
}
}
@ -2059,6 +2059,15 @@ scr_refresh(int type)
UPDATE_BOX(xpixel, ypixel - 1, xpixel + Width2Pixel(wlen) - 1, ypixel - 1);
}
}
if (rend & RS_Overscore) {
if (ascent > 1) {
XDrawLine(Xdisplay, draw_buffer, TermWin.gc, xpixel, ypixel - ascent, xpixel + Width2Pixel(wlen) - 1, ypixel - ascent);
UPDATE_BOX(xpixel, ypixel + 1, xpixel + Width2Pixel(wlen) - 1, ypixel + 1);
} else {
XDrawLine(Xdisplay, draw_buffer, TermWin.gc, xpixel, ypixel - 1, xpixel + Width2Pixel(wlen) - 1, ypixel - 1);
UPDATE_BOX(xpixel, ypixel - 1, xpixel + Width2Pixel(wlen) - 1, ypixel - 1);
}
}
if (is_cursor == 1) {
#ifndef NO_CURSORCOLOR
if (PixColors[cursorColor] != PixColors[bgColor]) {
@ -3338,6 +3347,14 @@ debug_colors(void)
fprintf(stderr, "blink ");
if (rstyle & RS_Uline)
fprintf(stderr, "uline ");
if (rstyle & RS_Overscore)
fprintf(stderr, "overscore ");
if (rstyle & RS_Italic)
fprintf(stderr, "italic ");
if (rstyle & RS_Dim)
fprintf(stderr, "dim ");
if (rstyle & RS_Conceal)
fprintf(stderr, "conceal ");
fprintf(stderr, "): ");
color = GET_FGCOLOR(rstyle);

View File

@ -115,11 +115,15 @@ enum {
#define RS_multiMask (RS_multi0|RS_multi1) /* multibyte mask */
#endif
#define RS_fgMask 0x00001F00u /* 32 colors */
#define RS_Overscore 0x00002000u /* overscore */
#define RS_Italic 0x00004000u /* italic */
#define RS_Bold 0x00008000u /* bold */
#define RS_bgMask 0x001F0000u /* 32 colors */
#define RS_Dim 0x00200000u /* dim (apply alpha) */
#define RS_Conceal 0x00400000u /* conceal */
#define RS_Blink 0x00800000u /* blink */
#define RS_attrMask (0xFF000000u|RS_Bold|RS_Blink)
#define RS_attrMask (0xFF000000u|RS_Overscore|RS_Italic|RS_Bold|RS_Dim|RS_Conceal|RS_Blink)
/* how to build & extract colors and attributes */
#define GET_FGCOLOR(r) (((r) & RS_fgMask)>>8)

View File

@ -1597,23 +1597,37 @@ process_sgr_mode(unsigned int nargs, int arg[])
case 1:
scr_rendition(1, RS_Bold);
break;
case 2:
scr_rendition(1, RS_Dim);
break;
case 3:
scr_rendition(1, RS_Italic);
break;
case 4:
scr_rendition(1, RS_Uline);
break;
case 5:
scr_rendition(1, RS_Blink);
break;
case 6:
scr_rendition(1, RS_Overscore);
break;
case 7:
scr_rendition(1, RS_RVid);
break;
case 8:
scr_rendition(1, RS_Conceal);
break;
case 22:
scr_rendition(0, RS_Bold);
scr_rendition(0, RS_Dim);
break;
case 24:
scr_rendition(0, RS_Uline);
break;
case 25:
scr_rendition(0, RS_Blink);
scr_rendition(0, RS_Overscore);
break;
case 27:
scr_rendition(0, RS_RVid);