diff options
Diffstat (limited to 'nx-X11/programs/xterm/testxmc.c')
-rw-r--r-- | nx-X11/programs/xterm/testxmc.c | 226 |
1 files changed, 0 insertions, 226 deletions
diff --git a/nx-X11/programs/xterm/testxmc.c b/nx-X11/programs/xterm/testxmc.c deleted file mode 100644 index 60c1f14b4..000000000 --- a/nx-X11/programs/xterm/testxmc.c +++ /dev/null @@ -1,226 +0,0 @@ -/* $XTermId: testxmc.c,v 1.30 2005/08/05 01:25:40 tom Exp $ */ - -/* - * $XFree86: xc/programs/xterm/testxmc.c,v 3.13 2005/08/05 01:25:40 dickey Exp $ - */ - -/************************************************************ - -Copyright 1997-2004,2005 by Thomas E. Dickey - - All Rights Reserved - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright -holders shall not be used in advertising or otherwise to promote the -sale, use or other dealings in this Software without prior written -authorization. - -********************************************************/ - -/* - * This module provides test support for curses applications that must work - * with terminals that have the xmc (magic cookie) glitch. The xmc_glitch - * resource denotes the number of spaces that are emitted when switching to or - * from standout (reverse) mode. Some terminals implement this by storing the - * attribute controls in the character cell that is skipped. So if the cell is - * overwritten by text, then the attribute change in the cell is cancelled, - * causing attributes to the left of the change to propagate. - * - * We implement the glitch by writing a character that won't be mistaken for - * other normal characters (and mapping normal writes to that character to a - * different one). - * - * Since xmc isn't normally part of xterm, we document it here rather than in - * the man-page. This module is driven by resources rather than by the - * termcap/terminfo description to make it a little more flexible for testing - * purposes. - * - * Resources: - * - * xmcGlitch (class XmcGlitch) - * When true, enables this extension. The default is `0', which disables - * the module. (termcap sg, terminfo xmc). - * - * xmcAttributes (class XmcAttributes) - * The attributes for which we'll generate a glitch, as a bitmask. - * - * INVERSE 1 - * UNDERLINE 2 - * BOLD 4 - * BLINK 8 - * - * The default is `1' (INVERSE). Some terminals emit glitches for - * underline. Just for completeness, we recognize all of the video - * attributes. - * - * xmcInline (class XmcInline) - * When true, limits the extent of an SGR change to the current line. - * The default is `false'. (No termcap or terminfo equivalent, though - * there are comments in some entries relating to this issue). - * - * xmcMoveSGR (class XmcMoveSGR) - * When false, a cursor movement will leave a glitch when SGR's are - * active. The default is `true'. (termcap ms, terminfo msgr). - * - * TODO: - * When xmc is active, the terminfo max_attributes (ma) capability is - * assumed to be 1. - * - * The xmcAttributes resource should also apply to alternate character - * sets and to color. - */ - -#include <xterm.h> -#include <data.h> - -#define MARK_ON(a) (my_attrs & a) != 0 && (term->flags & (whichone = a)) == 0 -#define MARK_OFF(a) (my_attrs & a) != 0 && (term->flags & (whichone = a)) != 0 - -void -Mark_XMC(TScreen * screen, int param) -{ - static IChar *glitch; - Bool found = False; - Char my_attrs = (screen->xmc_attributes & XMC_FLAGS); - Char whichone = 0; - - if (glitch == 0) { - unsigned len = screen->xmc_glitch; - glitch = TypeMallocN(IChar, len); - while (len--) - glitch[len] = XMC_GLITCH; - } - switch (param) { - case -1: /* DEFAULT */ - case 0: /* FALLTHRU */ - found = MARK_OFF((term->flags & XMC_FLAGS)); - break; - case 1: - found = MARK_ON(BOLD); - break; - case 4: - found = MARK_ON(UNDERLINE); - break; - case 5: - found = MARK_ON(BLINK); - break; - case 7: - found = MARK_ON(INVERSE); - break; - case 22: - found = MARK_OFF(BOLD); - break; - case 24: - found = MARK_OFF(UNDERLINE); - break; - case 25: - found = MARK_OFF(BLINK); - break; - case 27: - found = MARK_OFF(INVERSE); - break; - } - - /* - * Write a glitch with the attributes temporarily set to the new(er) - * ones. - */ - if (found) { - unsigned save = term->flags; - term->flags ^= whichone; - TRACE(("XMC Writing glitch (%d/%d) after SGR %d\n", my_attrs, - whichone, param)); - dotext(screen, '?', glitch, screen->xmc_glitch); - term->flags = save; - } -} - -/* - * Force a glitch on cursor movement when we're in standout mode and not at the - * end of a line. - */ -void -Jump_XMC(TScreen * screen) -{ - if (!screen->move_sgr_ok - && screen->cur_col <= CurMaxCol(screen, screen->cur_row)) { - Mark_XMC(screen, -1); - } -} - -/* - * After writing text to the screen, resolve mismatch between the current - * location and any attributes that would have been set by preceding locations. - */ -void -Resolve_XMC(TScreen * screen) -{ - Bool changed = False; - Char start; - Char my_attrs = (screen->xmc_attributes & XMC_FLAGS); - int row = screen->cur_row; - int col = screen->cur_col; - - /* Find the preceding cell. - */ - if (getXtermCell(screen, row, col) != XMC_GLITCH) { - if (col != 0) { - col--; - } else if (!screen->xmc_inline && row != 0) { - row--; - col = CurMaxCol(screen, row); - } - } - start = (SCRN_BUF_ATTRS(screen, row)[col] & my_attrs); - - /* Now propagate the starting state until we reach a cell which holds - * a glitch. - */ - for (;;) { - if (col < CurMaxCol(screen, row)) { - col++; - } else if (!screen->xmc_inline && row < screen->max_row) { - row++; - col = 0; - } else - break; - if (getXtermCell(screen, row, col) == XMC_GLITCH) - break; - if ((SCRN_BUF_ATTRS(screen, row)[col] & my_attrs) != start) { - SCRN_BUF_ATTRS(screen, row)[col] = start | - (SCRN_BUF_ATTRS(screen, row)[col] & ~my_attrs); - changed = True; - } - } - - TRACE(("XMC %s (%s:%d/%d) from %d,%d to %d,%d\n", - changed ? "Ripple" : "Nochange", - BtoS(term->flags & my_attrs), - my_attrs, start, - screen->cur_row, screen->cur_col, - row, col)); - - if (changed) { - ScrnUpdate(screen, screen->cur_row, 0, row + 1 - screen->cur_row, - MaxCols(screen), True); - } -} |