aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/xterm/doublechr.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/programs/xterm/doublechr.c')
-rw-r--r--nx-X11/programs/xterm/doublechr.c267
1 files changed, 0 insertions, 267 deletions
diff --git a/nx-X11/programs/xterm/doublechr.c b/nx-X11/programs/xterm/doublechr.c
deleted file mode 100644
index b768b2ed7..000000000
--- a/nx-X11/programs/xterm/doublechr.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/* $XTermId: doublechr.c,v 1.43 2005/08/05 01:25:39 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/doublechr.c,v 3.17 2005/08/05 01:25:39 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.
-
-********************************************************/
-
-#include <xterm.h>
-#include <data.h>
-#include <fontutils.h>
-
-#include <assert.h>
-
-/*
- * The first column is all that matters for double-size characters (since the
- * controls apply to a whole line). However, it's easier to maintain the
- * information for special fonts by writing to all cells.
- */
-#define curChrSet SCRN_BUF_CSETS(screen, screen->cur_row)[0]
-
-#if OPT_DEC_CHRSET
-static void
-repaint_line(unsigned newChrSet)
-{
- register TScreen *screen = &term->screen;
- int curcol = screen->cur_col;
- int currow = screen->cur_row;
- unsigned len = MaxCols(screen);
- int width = len;
- unsigned oldChrSet = SCRN_BUF_CSETS(screen, currow)[0];
-
- assert(width > 0);
-
- /*
- * Ignore repetition.
- */
- if (oldChrSet == newChrSet)
- return;
-
- TRACE(("repaint_line(%2d,%2d) (%d)\n", currow, screen->cur_col, newChrSet));
- HideCursor();
-
- /* If switching from single-width, keep the cursor in the visible part
- * of the line.
- */
- if (CSET_DOUBLE(newChrSet)) {
- width /= 2;
- if (curcol > width)
- curcol = width;
- }
-
- /*
- * ScrnRefresh won't paint blanks for us if we're switching between a
- * single-size and double-size font. So we paint our own.
- */
- if (CSET_DOUBLE(oldChrSet) != CSET_DOUBLE(newChrSet)) {
- ClearCurBackground(screen,
- CursorY(screen, currow),
- CurCursorX(screen, currow, 0),
- (unsigned) FontHeight(screen),
- len * CurFontWidth(screen, currow));
- }
-
- /* FIXME: do VT220 softchars allow double-sizes? */
- memset(SCRN_BUF_CSETS(screen, currow), (Char) newChrSet, len);
-
- set_cur_col(screen, 0);
- ScrnUpdate(screen, currow, 0, 1, (int) len, True);
- set_cur_col(screen, curcol);
-}
-#endif
-
-/*
- * Set the line to double-height characters. The 'top' flag denotes whether
- * we'll be using it for the top (true) or bottom (false) of the line.
- */
-void
-xterm_DECDHL(Bool top)
-{
-#if OPT_DEC_CHRSET
- repaint_line((unsigned) (top ? CSET_DHL_TOP : CSET_DHL_BOT));
-#endif
-}
-
-/*
- * Set the line to single-width characters (the normal state).
- */
-void
-xterm_DECSWL(void)
-{
-#if OPT_DEC_CHRSET
- repaint_line(CSET_SWL);
-#endif
-}
-
-/*
- * Set the line to double-width characters
- */
-void
-xterm_DECDWL(void)
-{
-#if OPT_DEC_CHRSET
- repaint_line(CSET_DWL);
-#endif
-}
-
-#if OPT_DEC_CHRSET
-static void
-discard_font(TScreen * screen, XTermFonts * data)
-{
- TRACE(("discard_font chrset=%d %s\n", data->chrset,
- (data->fn != 0) ? data->fn : "<no-name>"));
-
- data->chrset = 0;
- data->flags = 0;
- if (data->gc != 0) {
- XFreeGC(screen->display, data->gc);
- data->gc = 0;
- }
- if (data->fn != 0) {
- free(data->fn);
- data->fn = 0;
- }
- if (data->fs != 0) {
- XFreeFont(screen->display, data->fs);
- data->fs = 0;
- }
-}
-
-int
-xterm_Double_index(unsigned chrset, unsigned flags)
-{
- int n;
- TScreen *screen = &term->screen;
- XTermFonts *data = screen->double_fonts;
-
- flags &= BOLD;
- TRACE(("xterm_Double_index chrset=%#x, flags=%#x\n", chrset, flags));
-
- for (n = 0; n < screen->fonts_used; n++) {
- if (data[n].chrset == chrset
- && data[n].flags == flags) {
- if (n != 0) {
- XTermFonts save;
- TRACE(("...xterm_Double_index -> %d (OLD:%d)\n", n, screen->fonts_used));
- save = data[n];
- while (n > 0) {
- data[n] = data[n - 1];
- n--;
- }
- data[n] = save;
- }
- return n;
- }
- }
-
- /* Not, found, push back existing fonts and create a new entry */
- if (screen->fonts_used >= screen->cache_doublesize) {
- TRACE(("...xterm_Double_index: discard oldest\n"));
- discard_font(screen, &(data[screen->fonts_used - 1]));
- } else {
- screen->fonts_used += 1;
- }
- for (n = screen->fonts_used; n > 0; n--)
- data[n] = data[n - 1];
-
- TRACE(("...xterm_Double_index -> (NEW:%d)\n", screen->fonts_used));
-
- data[0].chrset = chrset;
- data[0].flags = flags;
- data[0].fn = 0;
- data[0].fs = 0;
- data[0].gc = 0;
- return 0;
-}
-
-/*
- * Lookup/cache a GC for the double-size character display. We save up to
- * NUM_CHRSET values.
- */
-GC
-xterm_DoubleGC(unsigned chrset, unsigned flags, GC old_gc)
-{
- XGCValues gcv;
- register TScreen *screen = &term->screen;
- unsigned long mask = (GCForeground | GCBackground | GCFont);
- int n;
- char *name;
- XTermFonts *data;
-
- if ((name = xtermSpecialFont(screen, flags, chrset)) == 0)
- return 0;
-
- n = xterm_Double_index(chrset, flags);
- data = &(screen->double_fonts[n]);
- if (data->fn != 0) {
- if (!strcmp(data->fn, name)) {
- if (data->fs != 0) {
- XCopyGC(screen->display, old_gc, (unsigned long) (~GCFont), data->gc);
- return data->gc;
- }
- }
- discard_font(screen, data);
- data->chrset = chrset;
- data->flags = flags & BOLD;
- }
- data->fn = name;
-
- TRACE(("xterm_DoubleGC %s %d: %s\n", flags & BOLD ? "BOLD" : "NORM", n, name));
-
- if ((data->fs = XLoadQueryFont(screen->display, name)) == 0) {
- /* Retry with * in resolutions */
- char *nname = xtermSpecialFont(screen, flags | NORESOLUTION, chrset);
-
- if (!nname)
- return 0;
- if ((data->fs = XLoadQueryFont(screen->display, nname)) == 0) {
- XtFree(nname);
- return 0;
- }
- XtFree(name);
- data->fn = nname;
- }
-
- TRACE(("-> OK\n"));
-
- gcv.graphics_exposures = TRUE; /* default */
- gcv.font = data->fs->fid;
- gcv.foreground = T_COLOR(screen, TEXT_FG);
- gcv.background = T_COLOR(screen, TEXT_BG);
-
- data->gc = XCreateGC(screen->display, VWindow(screen), mask, &gcv);
- XCopyGC(screen->display, old_gc, (unsigned long) (~GCFont), data->gc);
- return data->gc;
-}
-#endif