From 5b9e5fb88c247676c624cdfdd13f400634468d8f Mon Sep 17 00:00:00 2001 From: pcg Date: Tue, 25 Nov 2003 15:25:16 +0000 Subject: [PATCH] *** empty log message *** --- src/command.C | 340 +++--- src/defaultfont.C | 71 +- src/defaultfont.h | 17 +- src/init.C | 1121 +++++++++---------- src/init.h | 5 +- src/iom.C | 12 +- src/main.C | 108 +- src/ptytty.C | 8 +- src/rxvt.C | 8 +- src/rxvt.h | 10 +- src/screen.C | 2711 +++++++++++++++++++++++---------------------- 11 files changed, 2216 insertions(+), 2195 deletions(-) diff --git a/src/command.C b/src/command.C index fe6a55a1..a74d86de 100644 --- a/src/command.C +++ b/src/command.C @@ -1,7 +1,7 @@ /*--------------------------------*-C-*---------------------------------* * File: command.c *----------------------------------------------------------------------* - * $Id: command.C,v 1.3 2003-11-25 11:52:42 pcg Exp $ + * $Id: command.C,v 1.4 2003-11-25 15:25:16 pcg Exp $ * * All portions of code are copyright by their respective author/s. * Copyright (c) 1992 John Bovey, University of Kent at Canterbury @@ -634,7 +634,7 @@ rxvt_cmd_write(pR_ const unsigned char *str, unsigned int count) unsigned int n, s; unsigned char *cmdbuf_base = R->cmdbuf_base, *cmdbuf_endp = R->cmdbuf_endp, - *cmdbuf_ptr = R->cmdbuf_ptr; + *cmdbuf_ptr = R->cmdbuf_ptr; n = cmdbuf_ptr - cmdbuf_base; s = cmdbuf_base + BUFSIZ - 1 - cmdbuf_endp; @@ -703,24 +703,26 @@ void rxvt_term::x_cb (io_watcher &w, short revents) { process_x_events (); + + flush (); } // read the next character, currently handles UTF-8 // will probably handle all sorts of other stuff in the future -static uint32_t -next_char (pR) +uint32_t +rxvt_term::next_char () { - mbstate &s = R->mbstate; + struct mbstate &s = mbstate; - while (R->cmdbuf_ptr < R->cmdbuf_endp) + while (cmdbuf_ptr < cmdbuf_endp) { - uint8_t ch = *R->cmdbuf_ptr; + uint8_t ch = *cmdbuf_ptr; if (s.cnt) { if ((ch & 0xc0) == 0x80) { - R->cmdbuf_ptr++; + cmdbuf_ptr++; /* continuation */ s.reg = (s.reg << 6) | (ch & 0x7f); @@ -739,7 +741,7 @@ next_char (pR) if ((ch & 0xc0) == 0xc0) { - R->cmdbuf_ptr++; + cmdbuf_ptr++; /* first byte */ s.orig = ch; /* for broken encodings */ @@ -752,7 +754,7 @@ next_char (pR) } else { - R->cmdbuf_ptr++; /* _occasional_ non-utf8 may slip through... */ + cmdbuf_ptr++; /* _occasional_ non-utf8 may slip through... */ return ch; } } @@ -760,40 +762,155 @@ next_char (pR) return NOCHAR; } -void -rxvt_term::pty_cb (io_watcher &w, short revents) +bool +rxvt_term::pty_fill (size_t count) { - int n; - unsigned int count; + ssize_t n = cmdbuf_endp - cmdbuf_ptr; - if (count = (cmdbuf_endp - cmdbuf_ptr)) + memmove (cmdbuf_base, cmdbuf_ptr, n); + cmdbuf_ptr = cmdbuf_base; + cmdbuf_endp = cmdbuf_ptr + n; + + n = read (cmd_fd, cmdbuf_endp, count); + + if (n > 0) { - memmove (cmdbuf_base, cmdbuf_ptr, count); - cmdbuf_ptr = cmdbuf_base; - cmdbuf_endp = cmdbuf_ptr + count; + cmdbuf_endp += n; + return true; } - + else if (n < 0 && errno == EAGAIN) + return false; - for (count = BUFSIZ - count; count; count -= n, cmdbuf_endp += n) - if ((n = read(cmd_fd, cmdbuf_endp, count)) > 0) - continue; - else if (n == 0 || (n < 0 && errno == EAGAIN)) - break; - else + rxvt_clean_exit(); + exit(EXIT_FAILURE); /* bad order of events? */ +} + +void +rxvt_term::pty_cb (io_watcher &w, short revents) +{ + while (pty_fill (BUFSIZ - (cmdbuf_endp - cmdbuf_ptr))) + { + /* once we know the shell is running, send the screen size. Again! */ + //ch = rxvt_cmd_getc(aR); /* wait for something */ + //rxvt_tt_winsize(cmd_fd, TermWin.ncol, TermWin.nrow, cmd_pid); + + uint32_t ch = NOCHAR; + + for (;;) { - rxvt_clean_exit(); - exit(EXIT_FAILURE); /* bad order of events? */ + if (ch == NOCHAR) + ch = next_char (); + + if (ch == NOCHAR) // TODO: improve + break; + + if (ch >= ' ' || ch == '\t' || ch == '\n' || ch == '\r') + { + /* Read a text string from the input buffer */ + uint32_t buf[BUFSIZ]; + bool refreshnow = false; + int nlines = 0; + uint32_t *str = buf; + + *str++ = ch; + + for (;;) + { + ch = next_char (); + + if (ch == NOCHAR || (ch < ' ' && ch != '\t' && ch != '\n' && ch != '\r')) + break; + else + { + *str++ = ch; + + if (ch == '\n') + { + nlines++; + refresh_count++; + + if (!(Options & Opt_jumpScroll) + || (refresh_count >= (refresh_limit * (TermWin.nrow - 1)))) + { + refreshnow = true; + ch = NOCHAR; + break; + } + } + + if (str >= buf + BUFSIZ) + { + ch = NOCHAR; + break; + } + } + } + + rxvt_scr_add_lines (this, buf, nlines, str - buf); + + /* + * If there have been a lot of new lines, then update the screen + * What the heck I'll cheat and only refresh less than every page-full. + * the number of pages between refreshes is refresh_limit, which + * is incremented here because we must be doing flat-out scrolling. + * + * refreshing should be correct for small scrolls, because of the + * time-out + */ + if (refreshnow) + { + if ((Options & Opt_jumpScroll) && refresh_limit < REFRESH_PERIOD) + refresh_limit++; + + rxvt_scr_refresh (this, refresh_type); + } + + } + else + { + switch (ch) + { + default: + rxvt_process_nonprinting (this, ch); + break; + case C0_ESC: /* escape char */ + rxvt_process_escape_seq (this); + break; + /*case 0x9b: */ /* CSI */ + /* rxvt_process_csi_seq (this); */ + } + + ch = NOCHAR; + } } + } + + flush (); +} - if (count != BUFSIZ) /* some characters read in */ +void +rxvt_term::flush () +{ +#ifdef TRANSPARENT + if (want_full_refresh) { - uint32_t c = next_char (this); + want_full_refresh = 0; + rxvt_scr_clear (this); + rxvt_scr_touch (this, False); + want_refresh = 1; + } +#endif -#if 0 - if (c != NOCHAR) - return c; + if (want_refresh) + { + rxvt_scr_refresh (this, refresh_type); + rxvt_scrollbar_show (this, 1); +#ifdef USE_XIM + rxvt_IMSendSpot (this); #endif } + + XFlush (Xdisplay); } /* rxvt_cmd_getc() - Return next input character */ @@ -805,6 +922,19 @@ rxvt_term::pty_cb (io_watcher &w, short revents) uint32_t rxvt_cmd_getc(pR) { + for (;;) + { + uint32_t c = R->next_char (); + if (c != NOCHAR) + return c; + + // incomplete sequences should occur rarely, still, a better solution + // would be preferred. either setjmp/longjmp or better design. + fcntl (R->cmd_fd, F_SETFL, 0); + R->pty_fill (1); + fcntl (R->cmd_fd, F_SETFL, O_NONBLOCK); + } + #define TIMEOUT_USEC 5000 fd_set readfds; int quick_timeout, select_res; @@ -814,10 +944,6 @@ rxvt_cmd_getc(pR) struct timeval tp; #endif - uint32_t c = next_char (aR); - if (c != NOCHAR) - return c; - for (;;) { /* loop until we can return something */ @@ -981,49 +1107,8 @@ rxvt_cmd_getc(pR) if (R->Options & Opt_cursorBlink) R->want_refresh = 1; #endif - - /* See if we can read new data from the application */ - if (select_res > 0 && FD_ISSET(R->cmd_fd, &readfds)) { - int n; - unsigned int count; - - R->cmdbuf_ptr = R->cmdbuf_endp = R->cmdbuf_base; - for (count = BUFSIZ; count; count -= n, R->cmdbuf_endp += n) - if ((n = read(R->cmd_fd, R->cmdbuf_endp, count)) > 0) - continue; - else if (n == 0 || (n < 0 && errno == EAGAIN)) - break; - else { - rxvt_clean_exit(); - exit(EXIT_FAILURE); /* bad order of events? */ - } - - if (count != BUFSIZ) /* some characters read in */ - { - uint32_t c = next_char (aR); - if (c != NOCHAR) - return c; - } - } -#ifdef TRANSPARENT - if (R->want_full_refresh) { - R->want_full_refresh = 0; - rxvt_scr_clear(aR); - rxvt_scr_touch(aR_ False); - R->want_refresh = 1; - } -#endif - if (R->want_refresh) { - rxvt_scr_refresh(aR_ R->refresh_type); - rxvt_scrollbar_show(aR_ 1); -#ifdef USE_XIM - rxvt_IMSendSpot(aR); -#endif - } } -/* NOTREACHED */ } -/*}}} */ /* EXTPROTO */ void @@ -3394,107 +3479,6 @@ rxvt_process_graphics(pR) /* ------------------------------------------------------------------------- */ -/*{{{ Read and process output from the application */ -/* LIBPROTO */ -void -rxvt_main_loop(pR) -{ - uint32_t ch, *str, buf[BUFSIZ]; - int nlines, refreshnow; - - R->cmdbuf_ptr = R->cmdbuf_endp = R->cmdbuf_base; - - /* once we know the shell is running, send the screen size. Again! */ - ch = rxvt_cmd_getc(aR); /* wait for something */ - rxvt_tt_winsize(R->cmd_fd, R->TermWin.ncol, R->TermWin.nrow, R->cmd_pid); - - refreshnow = 0; - for (;;) { - if (ch == NOCHAR) - ch = rxvt_cmd_getc(aR); - - if (ch >= ' ' || ch == '\t' || ch == '\n' || ch == '\r') - { - /* Read a text string from the input buffer */ - nlines = 0; - str = buf; - *str++ = ch; - for (;;) - { - ch = next_char (aR); - - if (ch == NOCHAR || (ch < ' ' && ch != '\t' && ch != '\n' && ch != '\r')) - break; - else - { - *str++ = ch; - - if (ch == '\n') - { - nlines++; - R->refresh_count++; - if (!(R->Options & Opt_jumpScroll) - || (R->refresh_count >= (R->refresh_limit - * (R->TermWin.nrow - 1)))) - { - refreshnow = 1; - ch = NOCHAR; - break; - } - } - - if (str >= buf + BUFSIZ) - { - ch = NOCHAR; - break; - } - } - } - - rxvt_scr_add_lines(aR_ buf, nlines, str - buf); - - /* - * If there have been a lot of new lines, then update the screen - * What the heck I'll cheat and only refresh less than every page-full. - * the number of pages between refreshes is R->refresh_limit, which - * is incremented here because we must be doing flat-out scrolling. - * - * refreshing should be correct for small scrolls, because of the - * time-out - */ - - //TODO: REFRESH_PERIOD is one, fix it - if (refreshnow) - { - refreshnow = 0; - - if ((R->Options & Opt_jumpScroll) && R->refresh_limit < REFRESH_PERIOD) - R->refresh_limit++; - - rxvt_scr_refresh(aR_ R->refresh_type); - } - - } - else - { - switch (ch) - { - default: - rxvt_process_nonprinting(aR_ ch); - break; - case C0_ESC: /* escape char */ - rxvt_process_escape_seq(aR); - break; - /* case 0x9b: */ /* CSI */ - /* rxvt_process_csi_seq(aR); */ - } - - ch = NOCHAR; - } - } -/* NOTREACHED */ -} - /* * Send printf() formatted output to the command. * Only use for small amounts of data. diff --git a/src/defaultfont.C b/src/defaultfont.C index bfbe9f11..569038de 100644 --- a/src/defaultfont.C +++ b/src/defaultfont.C @@ -23,9 +23,9 @@ #include "rxvt.h" #include "defaultfont.h" -#define DISPLAY R->Xdisplay -#define DRAWABLE R->TermWin.vt -#define GC R->TermWin.gc +#define DISPLAY r->Xdisplay +#define DRAWABLE r->TermWin.vt +#define GC r->TermWin.gc const struct rxvt_fallback_font { codeset cs; @@ -165,7 +165,7 @@ rxvt_font::clear_rect (int x, int y, int w, int h, int color) XClearArea (DISPLAY, DRAWABLE, x, y, w, h, FALSE); else if (color >= 0) { - XSetForeground (DISPLAY, GC, R->PixColors[color]); + XSetForeground (DISPLAY, GC, r->PixColors[color]); XFillRectangle (DISPLAY, DRAWABLE, GC, x, y, w, h); } } @@ -204,7 +204,7 @@ rxvt_font_default::draw (int x, int y, const text_t *text, int len, int fg, int bg) { - clear_rect (x, y, R->TermWin.fwidth * len, R->TermWin.fheight, bg); + clear_rect (x, y, r->TermWin.fwidth * len, r->TermWin.fheight, bg); while (len--) { @@ -214,11 +214,11 @@ rxvt_font_default::draw (int x, int y, case ZERO_WIDTH_CHAR: break; default: - XSetForeground (DISPLAY, GC, R->PixColors[fg]); - XDrawRectangle (DISPLAY, DRAWABLE, GC, x + 2, y + 2, R->TermWin.fwidth - 5, R->TermWin.fheight - 5); + XSetForeground (DISPLAY, GC, r->PixColors[fg]); + XDrawRectangle (DISPLAY, DRAWABLE, GC, x + 2, y + 2, r->TermWin.fwidth - 5, r->TermWin.fheight - 5); } - x += R->TermWin.fwidth; + x += r->TermWin.fwidth; } } @@ -406,14 +406,14 @@ rxvt_font_x11::draw (int x, int y, // but the result still isn't perfect /. bool slow = prop - || width != R->TermWin.fwidth - || height != R->TermWin.fheight; + || width != r->TermWin.fwidth + || height != r->TermWin.fheight; - int base = R->TermWin.fbase; + int base = r->TermWin.fbase; XGCValues v; - v.foreground = R->PixColors[fg]; - v.background = R->PixColors[bg]; + v.foreground = r->PixColors[fg]; + v.background = r->PixColors[bg]; v.font = f->fid; if (enc2b) @@ -427,7 +427,7 @@ rxvt_font_x11::draw (int x, int y, } else { - clear_rect (x, y, R->TermWin.fwidth * len, R->TermWin.fheight, bg); + clear_rect (x, y, r->TermWin.fwidth * len, r->TermWin.fheight, bg); XChangeGC (DISPLAY, GC, GCForeground | GCFont, &v); @@ -438,7 +438,7 @@ rxvt_font_x11::draw (int x, int y, if (xc->byte1 || xc->byte2) XDrawString16 (DISPLAY, DRAWABLE, GC, x, y + base, xc, 1); - x += R->TermWin.fwidth; + x += r->TermWin.fwidth; xc++; len--; } while (len); @@ -458,7 +458,7 @@ rxvt_font_x11::draw (int x, int y, } else { - clear_rect (x, y, R->TermWin.fwidth * len, R->TermWin.fheight, bg); + clear_rect (x, y, r->TermWin.fwidth * len, r->TermWin.fheight, bg); XChangeGC (DISPLAY, GC, GCForeground | GCFont, &v); @@ -469,7 +469,7 @@ rxvt_font_x11::draw (int x, int y, if (*xc) XDrawString (DISPLAY, DRAWABLE, GC, x, y + base, xc, 1); - x += R->TermWin.fwidth; + x += r->TermWin.fwidth; xc++; len--; } while (len); @@ -546,7 +546,7 @@ rxvt_font_xft::clear () { if (f) { - XftFontClose (R->Xdisplay, f); + XftFontClose (DISPLAY, f); f = 0; } @@ -572,7 +572,7 @@ rxvt_font_xft::load (int maxheight) clear (); - f = XftFontOpenName (R->Xdisplay, DefaultScreen (R->Xdisplay), name); + f = XftFontOpenName (DISPLAY, DefaultScreen (DISPLAY), name); if (!f) return false; @@ -588,8 +588,8 @@ rxvt_font_xft::load (int maxheight) XGlyphInfo g1, g2; FcChar8 c; - c = 'i'; XftTextExtents8 (R->Xdisplay, f, &c, 1, &g1); - c = 'W'; XftTextExtents8 (R->Xdisplay, f, &c, 1, &g2); + c = 'i'; XftTextExtents8 (DISPLAY, f, &c, 1, &g1); + c = 'W'; XftTextExtents8 (DISPLAY, f, &c, 1, &g2); prop = prop || g1.xOff != g2.xOff; // don't simply trust the font @@ -634,7 +634,7 @@ void rxvt_font::gen_coverage_swath (unsigned int page) bool rxvt_font_xft::has_codepoint (uint32_t unicode) { - return XftCharExists (R->Xdisplay, f, unicode); + return XftCharExists (DISPLAY, f, unicode); } void @@ -643,19 +643,22 @@ rxvt_font_xft::draw (int x, int y, int fg, int bg) { if (!d) - d = XftDrawCreate (R->Xdisplay, DRAWABLE, XVISUAL, XCMAP); + { + dR; + d = XftDrawCreate (DISPLAY, DRAWABLE, XVISUAL, XCMAP); + } if (bg >= 0 && bg != Color_bg) - XftDrawRect (d, &R->PixColors[bg].c, x, y, R->TermWin.fwidth * len, R->TermWin.fheight); + XftDrawRect (d, &r->PixColors[bg].c, x, y, r->TermWin.fwidth * len, r->TermWin.fheight); else - clear_rect (x, y, R->TermWin.fwidth * len, R->TermWin.fheight, bg); + clear_rect (x, y, r->TermWin.fwidth * len, r->TermWin.fheight, bg); - if (!prop && width == R->TermWin.fwidth) + if (!prop && width == r->TermWin.fwidth) { if (sizeof (text_t) == sizeof (FcChar16)) - XftDrawString16 (d, &R->PixColors[fg].c, f, x, y + R->TermWin.fbase, (const FcChar16 *)text, len); + XftDrawString16 (d, &r->PixColors[fg].c, f, x, y + r->TermWin.fbase, (const FcChar16 *)text, len); else - XftDrawString32 (d, &R->PixColors[fg].c, f, x, y + R->TermWin.fbase, (const FcChar32 *)text, len); + XftDrawString32 (d, &r->PixColors[fg].c, f, x, y + r->TermWin.fbase, (const FcChar32 *)text, len); } else { @@ -664,12 +667,12 @@ rxvt_font_xft::draw (int x, int y, if (*text != NOCHAR && *text != ' ') { if (sizeof (text_t) == sizeof (FcChar16)) - XftDrawString16 (d, &R->PixColors[fg].c, f, x, y + R->TermWin.fbase, (const FcChar16 *)text, 1); + XftDrawString16 (d, &r->PixColors[fg].c, f, x, y + r->TermWin.fbase, (const FcChar16 *)text, 1); else - XftDrawString32 (d, &R->PixColors[fg].c, f, x, y + R->TermWin.fbase, (const FcChar32 *)text, 1); + XftDrawString32 (d, &r->PixColors[fg].c, f, x, y + r->TermWin.fbase, (const FcChar32 *)text, 1); } - x += R->TermWin.fwidth; + x += r->TermWin.fwidth; text++; len--; } @@ -679,9 +682,9 @@ rxvt_font_xft::draw (int x, int y, ///////////////////////////////////////////////////////////////////////////// -rxvt_fontset::rxvt_fontset (pR) +rxvt_fontset::rxvt_fontset (rxvt_t r) #ifdef EXPLICIT_CONTEXT -: rxvt_term(R) +: r(r) #endif { clear (); @@ -730,7 +733,7 @@ rxvt_fontset::new_font (const char *name, codeset cs) else f = new rxvt_font_x11; - f->set_term (aR); + f->set_term (r); f->set_name (strdup (name)); f->cs = cs; diff --git a/src/defaultfont.h b/src/defaultfont.h index 5754e849..f5d7d2b0 100644 --- a/src/defaultfont.h +++ b/src/defaultfont.h @@ -1,5 +1,5 @@ /* - * $Id: defaultfont.h,v 1.4 2003-11-25 11:52:42 pcg Exp $ + * $Id: defaultfont.h,v 1.5 2003-11-25 15:25:17 pcg Exp $ */ #ifndef _DEFAULTFONT_H_ @@ -25,12 +25,9 @@ struct rxvt_font { // managed by the fontset -#if EXPLICIT_CONTEXT - rxvt_t rxvt_term; - void set_term (pR) { this->rxvt_term = R; } -#else - void set_term (pR) { } -#endif + rxvt_t r; + void set_term (rxvt_t r) { this->r = r; } + char *name; codeset cs; bool loaded; @@ -68,7 +65,7 @@ struct rxvt_font { struct rxvt_fallback_font; struct rxvt_fontset { - rxvt_fontset (pR); + rxvt_fontset (rxvt_t r); ~rxvt_fontset (); rxvt_font *new_font (const char *name, codeset cs); @@ -87,9 +84,7 @@ struct rxvt_fontset { } private: -#ifdef EXPLICIT_CONTEXT - rxvt_t rxvt_term; -#endif + rxvt_t r; simplevec fonts; const rxvt_fallback_font *fallback; diff --git a/src/init.C b/src/init.C index e0f383db..cc0a0a36 100644 --- a/src/init.C +++ b/src/init.C @@ -1,17 +1,17 @@ /*--------------------------------*-C-*---------------------------------* - * File: init.c + * File: init.c *----------------------------------------------------------------------* - * $Id: init.C,v 1.3 2003-11-25 11:52:42 pcg Exp $ + * $Id: init.C,v 1.4 2003-11-25 15:25:17 pcg Exp $ * * All portions of code are copyright by their respective author/s. * Copyright (c) 1992 John Bovey, University of Kent at Canterbury - * - original version + * - original version * Copyright (c) 1994 Robert Nation - * - extensive modifications + * - extensive modifications * Copyright (c) 1998-2001 Geoff Wing - * - extensive modifications + * - extensive modifications * Copyright (c) 1999 D J Hawkey Jr - * - QNX support + * - QNX support * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,8 +31,8 @@ * Initialisation routines. */ -#include "../config.h" /* NECESSARY */ -#include "rxvt.h" /* NECESSARY */ +#include "../config.h" /* NECESSARY */ +#include "rxvt.h" /* NECESSARY */ #include "init.h" #include @@ -41,35 +41,35 @@ const char *const def_colorName[] = { COLOR_FOREGROUND, COLOR_BACKGROUND, /* low-intensity colors */ - "Black", /* 0: black (#000000) */ + "Black", /* 0: black (#000000) */ #ifndef NO_BRIGHTCOLOR - "Red3", /* 1: red (#CD0000) */ - "Green3", /* 2: green (#00CD00) */ - "Yellow3", /* 3: yellow (#CDCD00) */ - "Blue3", /* 4: blue (#0000CD) */ - "Magenta3", /* 5: magenta (#CD00CD) */ - "Cyan3", /* 6: cyan (#00CDCD) */ + "Red3", /* 1: red (#CD0000) */ + "Green3", /* 2: green (#00CD00) */ + "Yellow3", /* 3: yellow (#CDCD00) */ + "Blue3", /* 4: blue (#0000CD) */ + "Magenta3", /* 5: magenta (#CD00CD) */ + "Cyan3", /* 6: cyan (#00CDCD) */ # ifdef XTERM_COLORS - "Grey90", /* 7: white (#E5E5E5) */ + "Grey90", /* 7: white (#E5E5E5) */ # else - "AntiqueWhite", /* 7: white (#FAEBD7) */ + "AntiqueWhite", /* 7: white (#FAEBD7) */ # endif /* high-intensity colors */ # ifdef XTERM_COLORS - "Grey30", /* 8: bright black (#4D4D4D) */ + "Grey30", /* 8: bright black (#4D4D4D) */ # else - "Grey25", /* 8: bright black (#404040) */ + "Grey25", /* 8: bright black (#404040) */ # endif -#endif /* NO_BRIGHTCOLOR */ - "Red", /* 1/9: bright red (#FF0000) */ - "Green", /* 2/10: bright green (#00FF00) */ - "Yellow", /* 3/11: bright yellow (#FFFF00) */ - "Blue", /* 4/12: bright blue (#0000FF) */ - "Magenta", /* 5/13: bright magenta (#FF00FF) */ - "Cyan", /* 6/14: bright cyan (#00FFFF) */ - "White", /* 7/15: bright white (#FFFFFF) */ +#endif /* NO_BRIGHTCOLOR */ + "Red", /* 1/9: bright red (#FF0000) */ + "Green", /* 2/10: bright green (#00FF00) */ + "Yellow", /* 3/11: bright yellow (#FFFF00) */ + "Blue", /* 4/12: bright blue (#0000FF) */ + "Magenta", /* 5/13: bright magenta (#FF00FF) */ + "Cyan", /* 6/14: bright cyan (#00FFFF) */ + "White", /* 7/15: bright white (#FFFFFF) */ #ifdef TTY_256COLOR - "rgb:00/00/00", /* default 16-255 color table */ + "rgb:00/00/00", /* default 16-255 color table */ "rgb:00/00/2a", "rgb:00/00/55", "rgb:00/00/7f", @@ -313,27 +313,27 @@ const char *const def_colorName[] = { #ifndef NO_CURSORCOLOR COLOR_CURSOR_BACKGROUND, COLOR_CURSOR_FOREGROUND, -#endif /* ! NO_CURSORCOLOR */ - NULL, /* Color_pointer */ - NULL, /* Color_border */ +#endif /* ! NO_CURSORCOLOR */ + NULL, /* Color_pointer */ + NULL, /* Color_border */ #ifndef NO_BOLD_UNDERLINE_REVERSE - NULL, /* Color_BD */ - NULL, /* Color_UL */ - NULL, /* Color_RV */ -#endif /* ! NO_BOLD_UNDERLINE_REVERSE */ + NULL, /* Color_BD */ + NULL, /* Color_UL */ + NULL, /* Color_RV */ +#endif /* ! NO_BOLD_UNDERLINE_REVERSE */ #ifdef OPTION_HC NULL, #endif #ifdef KEEP_SCROLLCOLOR COLOR_SCROLLBAR, COLOR_SCROLLTROUGH, -#endif /* KEEP_SCROLLCOLOR */ +#endif /* KEEP_SCROLLCOLOR */ }; const char *const xa_names[NUM_XA] = { "COMPOUND_TEXT", - "MULTIPLE", - "TARGETS", + "MULTIPLE", + "TARGETS", "TEXT", "TIMESTAMP", "VT_SELECTION", @@ -363,76 +363,76 @@ rxvt_getdtablesize(void) } #endif /*----------------------------------------------------------------------*/ -/* EXTPROTO */ -int -rxvt_init_vars(pR) +bool +rxvt_term::init_vars() { - R->PixColors = (rxvt_color *)rxvt_malloc(sizeof(rxvt_color) * TOTAL_COLORS); - if (R->PixColors == NULL) - return -1; + PixColors = new rxvt_color [TOTAL_COLORS]; + if (PixColors == NULL) + return false; #if defined(XPM_BACKGROUND) || defined(TRANSPARENT) - R->TermWin.pixmap = None; + TermWin.pixmap = None; #endif #ifdef UTMP_SUPPORT - R->next_utmp_action = SAVE; + next_utmp_action = SAVE; #endif #ifndef NO_SETOWNER_TTYDEV - R->next_tty_action = SAVE; + next_tty_action = SAVE; #endif - R->MEvent.time = CurrentTime; - R->MEvent.button = AnyButton; - R->Options = DEFAULT_OPTIONS; - R->want_refresh = 1; - R->cmd_pid = -1; - R->cmd_fd = R->tty_fd = R->Xfd = -1; - R->PrivateModes = R->SavedModes = PrivMode_Default; - R->TermWin.focus = 1; - R->TermWin.ncol = 80; - R->TermWin.nrow = 24; - R->TermWin.int_bwidth = INTERNALBORDERWIDTH; - R->TermWin.ext_bwidth = EXTERNALBORDERWIDTH; - R->TermWin.lineSpace = LINESPACE; - R->TermWin.saveLines = SAVELINES; - R->numPixColors = TOTAL_COLORS; + MEvent.time = CurrentTime; + MEvent.button = AnyButton; + Options = DEFAULT_OPTIONS; + want_refresh = 1; + cmd_pid = -1; + cmd_fd = tty_fd = Xfd = -1; + PrivateModes = SavedModes = PrivMode_Default; + TermWin.focus = 1; + TermWin.ncol = 80; + TermWin.nrow = 24; + TermWin.int_bwidth = INTERNALBORDERWIDTH; + TermWin.ext_bwidth = EXTERNALBORDERWIDTH; + TermWin.lineSpace = LINESPACE; + TermWin.saveLines = SAVELINES; + numPixColors = TOTAL_COLORS; #ifndef NO_NEW_SELECTION - R->selection_style = NEW_SELECT; + selection_style = NEW_SELECT; #else - R->selection_style = OLD_SELECT; + selection_style = OLD_SELECT; #endif #ifndef NO_BRIGHTCOLOR - R->colorfgbg = DEFAULT_RSTYLE; + colorfgbg = DEFAULT_RSTYLE; #endif #if defined (HOTKEY_CTRL) || defined (HOTKEY_META) - R->ks_bigfont = XK_greater; - R->ks_smallfont = XK_less; + ks_bigfont = XK_greater; + ks_smallfont = XK_less; #endif #ifdef GREEK_SUPPORT - R->ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH; + ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH; #endif - R->refresh_limit = 1; - R->refresh_type = SLOW_REFRESH; - R->prev_nrow = R->prev_ncol = 0; + refresh_limit = 1; + refresh_type = SLOW_REFRESH; + prev_nrow = prev_ncol = 0; #ifdef MULTICHAR_SET # ifdef MULTICHAR_ENCODING - R->encoding_method = MULTICHAR_ENCODING; + encoding_method = MULTICHAR_ENCODING; # endif - R->multichar_decode = rxvt_euc2jis; + multichar_decode = rxvt_euc2jis; #endif - R->oldcursor.row = R->oldcursor.col = -1; + oldcursor.row = oldcursor.col = -1; #ifdef XPM_BACKGROUND -/* R->bgPixmap.w = R->bgPixmap.h = 0; */ - R->bgPixmap.x = R->bgPixmap.y = 50; - R->bgPixmap.pixmap = None; +/* bgPixmap.w = bgPixmap.h = 0; */ + bgPixmap.x = bgPixmap.y = 50; + bgPixmap.pixmap = None; #endif - R->last_bot = R->last_state = -1; + last_bot = last_state = -1; #ifdef MENUBAR - R->menu_readonly = 1; + menu_readonly = 1; # if !(MENUBAR_MAX > 1) - R->CurrentBar = &(R->BarList); -# endif /* (MENUBAR_MAX > 1) */ + CurrentBar = &(BarList); +# endif /* (MENUBAR_MAX > 1) */ #endif - return 0; + + return true; } /* EXTPROTO */ @@ -443,14 +443,14 @@ rxvt_init_secondary(pR) #ifdef TTY_GID_SUPPORT struct group *gr = getgrnam("tty"); - if (gr) { /* change group ownership of tty to "tty" */ - R->ttymode = S_IRUSR | S_IWUSR | S_IWGRP; - R->ttygid = gr->gr_gid; + if (gr) { /* change group ownership of tty to "tty" */ + R->ttymode = S_IRUSR | S_IWUSR | S_IWGRP; + R->ttygid = gr->gr_gid; } else -#endif /* TTY_GID_SUPPORT */ +#endif /* TTY_GID_SUPPORT */ { - R->ttymode = S_IRUSR | S_IWUSR | S_IWGRP | S_IWOTH; - R->ttygid = getgid(); + R->ttymode = S_IRUSR | S_IWUSR | S_IWGRP | S_IWOTH; + R->ttygid = getgid(); } #if defined(HAVE_XSETLOCALE) || defined(HAVE_SETLOCALE) R->locale = setlocale(LC_CTYPE, ""); @@ -468,19 +468,19 @@ rxvt_init_secondary(pR) * We don't want them, we don't need them. */ if ((i = open("/dev/null", O_RDONLY)) < 0) { - /* TODO: BOO HISS */ - dup2(STDERR_FILENO, STDIN_FILENO); + /* TODO: BOO HISS */ + dup2(STDERR_FILENO, STDIN_FILENO); } else if (i > STDIN_FILENO) { - dup2(i, STDIN_FILENO); - close(i); + dup2(i, STDIN_FILENO); + close(i); } dup2(STDERR_FILENO, STDOUT_FILENO); for (i = STDERR_FILENO + 1; i < R->num_fds; i++) { -#ifdef __sgi /* Alex Coventry says we need 4 & 7 too */ - if (i == 4 || i == 7) - continue; +#ifdef __sgi /* Alex Coventry says we need 4 & 7 too */ + if (i == 4 || i == 7) + continue; #endif - close(i); + close(i); } } @@ -498,52 +498,52 @@ rxvt_init_resources(pR_ int argc, const char *const *argv) * Look for -exec option. Find => split and make cmd_argv[] of command args */ for (r_argc = 0; r_argc < argc; r_argc++) - if (!STRCMP(argv[r_argc], "-e") || !STRCMP(argv[r_argc], "-exec")) - break; + if (!STRCMP(argv[r_argc], "-e") || !STRCMP(argv[r_argc], "-exec")) + break; r_argv = (const char **)rxvt_malloc(sizeof(char *) * (r_argc + 1)); for (i = 0; i < r_argc; i++) - r_argv[i] = (const char *)argv[i]; + r_argv[i] = (const char *)argv[i]; r_argv[i] = NULL; if (r_argc == argc) - cmd_argv = NULL; + cmd_argv = NULL; else { - cmd_argv = (const char **)rxvt_malloc(sizeof(char *) * (argc - r_argc)); + cmd_argv = (const char **)rxvt_malloc(sizeof(char *) * (argc - r_argc)); - for (i = 0; i < argc - r_argc - 1; i++) - cmd_argv[i] = (const char *)argv[i + r_argc + 1]; - cmd_argv[i] = NULL; + for (i = 0; i < argc - r_argc - 1; i++) + cmd_argv[i] = (const char *)argv[i + r_argc + 1]; + cmd_argv[i] = NULL; } /* clear all resources */ rs = R->rs; for (i = 0; i < NUM_RESOURCES;) - rs[i++] = NULL; + rs[i++] = NULL; rs[Rs_name] = rxvt_r_basename(argv[0]); /* * Open display, get options/resources and create the window */ if ((rs[Rs_display_name] = getenv("DISPLAY")) == NULL) - rs[Rs_display_name] = ":0"; + rs[Rs_display_name] = ":0"; rxvt_get_options(aR_ r_argc, r_argv); free(r_argv); #ifdef LOCAL_X_IS_UNIX if (rs[Rs_display_name][0] == ':') { - val = rxvt_malloc(5 + STRLEN(rs[Rs_display_name])); - STRCPY(val, "unix"); - STRCAT(val, rs[Rs_display_name]); - R->Xdisplay = XOpenDisplay(val); - free(val); + val = rxvt_malloc(5 + STRLEN(rs[Rs_display_name])); + STRCPY(val, "unix"); + STRCAT(val, rs[Rs_display_name]); + R->Xdisplay = XOpenDisplay(val); + free(val); } #endif if (R->Xdisplay == NULL - && (R->Xdisplay = XOpenDisplay(rs[Rs_display_name])) == NULL) { - rxvt_print_error("can't open display %s", rs[Rs_display_name]); - exit(EXIT_FAILURE); + && (R->Xdisplay = XOpenDisplay(rs[Rs_display_name])) == NULL) { + rxvt_print_error("can't open display %s", rs[Rs_display_name]); + exit(EXIT_FAILURE); } rxvt_extract_resources(aR_ R->Xdisplay, rs[Rs_name]); @@ -552,101 +552,101 @@ rxvt_init_resources(pR_ int argc, const char *const *argv) * set any defaults not already set */ if (cmd_argv && cmd_argv[0]) { - if (!rs[Rs_title]) - rs[Rs_title] = rxvt_r_basename(cmd_argv[0]); - if (!rs[Rs_iconName]) - rs[Rs_iconName] = rs[Rs_title]; + if (!rs[Rs_title]) + rs[Rs_title] = rxvt_r_basename(cmd_argv[0]); + if (!rs[Rs_iconName]) + rs[Rs_iconName] = rs[Rs_title]; } else { - if (!rs[Rs_title]) - rs[Rs_title] = rs[Rs_name]; - if (!rs[Rs_iconName]) - rs[Rs_iconName] = rs[Rs_name]; + if (!rs[Rs_title]) + rs[Rs_title] = rs[Rs_name]; + if (!rs[Rs_iconName]) + rs[Rs_iconName] = rs[Rs_name]; } if (rs[Rs_saveLines] && (i = atoi(rs[Rs_saveLines])) >= 0) - R->TermWin.saveLines = BOUND_POSITIVE_INT16(i); + R->TermWin.saveLines = BOUND_POSITIVE_INT16(i); #ifndef NO_FRILLS if (rs[Rs_int_bwidth] && (i = atoi(rs[Rs_int_bwidth])) >= 0) - R->TermWin.int_bwidth = min(i, 100); /* arbitrary limit */ + R->TermWin.int_bwidth = min(i, 100); /* arbitrary limit */ if (rs[Rs_ext_bwidth] && (i = atoi(rs[Rs_ext_bwidth])) >= 0) - R->TermWin.ext_bwidth = min(i, 100); /* arbitrary limit */ + R->TermWin.ext_bwidth = min(i, 100); /* arbitrary limit */ #endif #ifndef NO_LINESPACE if (rs[Rs_lineSpace] && (i = atoi(rs[Rs_lineSpace])) >= 0) - R->TermWin.lineSpace = min(i, 100); /* arbitrary limit */ + R->TermWin.lineSpace = min(i, 100); /* arbitrary limit */ #endif #ifdef POINTER_BLANK if (rs[Rs_pointerBlankDelay] && (i = atoi(rs[Rs_pointerBlankDelay])) >= 0) - R->pointerBlankDelay = i; + R->pointerBlankDelay = i; else - R->pointerBlankDelay = 2; + R->pointerBlankDelay = 2; #endif /* no point having a scrollbar without having any scrollback! */ if (!R->TermWin.saveLines) - R->Options &= ~Opt_scrollBar; + R->Options &= ~Opt_scrollBar; #ifdef PRINTPIPE if (!rs[Rs_print_pipe]) - rs[Rs_print_pipe] = PRINTPIPE; + rs[Rs_print_pipe] = PRINTPIPE; #endif if (!rs[Rs_cutchars]) - rs[Rs_cutchars] = CUTCHARS; + rs[Rs_cutchars] = CUTCHARS; #ifdef ACS_ASCII if (!rs[Rs_acs_chars]) - rs[Rs_acs_chars] = ACS_CHARS; + rs[Rs_acs_chars] = ACS_CHARS; if ((i = STRLEN(rs[Rs_acs_chars])) < 0x20) { - val = rxvt_realloc((void *)rs[Rs_acs_chars], 0x20); - for (; i < 0x20; ) - val[i] = ' '; - rs[Rs_acs_chars] = val; + val = rxvt_realloc((void *)rs[Rs_acs_chars], 0x20); + for (; i < 0x20; ) + val[i] = ' '; + rs[Rs_acs_chars] = val; } #endif #ifndef NO_BACKSPACE_KEY if (!rs[Rs_backspace_key]) # ifdef DEFAULT_BACKSPACE - R->key_backspace = DEFAULT_BACKSPACE; + R->key_backspace = DEFAULT_BACKSPACE; # else - R->key_backspace = "DEC"; /* can toggle between \010 or \177 */ + R->key_backspace = "DEC"; /* can toggle between \010 or \177 */ # endif else { - val = STRDUP(rs[Rs_backspace_key]); - rxvt_Str_trim(val); - rxvt_Str_escaped(val); - R->key_backspace = val; + val = STRDUP(rs[Rs_backspace_key]); + rxvt_Str_trim(val); + rxvt_Str_escaped(val); + R->key_backspace = val; } #endif #ifndef NO_DELETE_KEY if (!rs[Rs_delete_key]) # ifdef DEFAULT_DELETE - R->key_delete = DEFAULT_DELETE; + R->key_delete = DEFAULT_DELETE; # else - R->key_delete = "\033[3~"; + R->key_delete = "\033[3~"; # endif else { - val = STRDUP(rs[Rs_delete_key]); - rxvt_Str_trim(val); - rxvt_Str_escaped(val); - R->key_delete = val; + val = STRDUP(rs[Rs_delete_key]); + rxvt_Str_trim(val); + rxvt_Str_escaped(val); + R->key_delete = val; } #endif if (rs[Rs_answerbackstring]) { - rxvt_Str_trim((char *)rs[Rs_answerbackstring]); - rxvt_Str_escaped((char *)rs[Rs_answerbackstring]); + rxvt_Str_trim((char *)rs[Rs_answerbackstring]); + rxvt_Str_escaped((char *)rs[Rs_answerbackstring]); } if (rs[Rs_selectstyle]) { - if (STRNCASECMP(rs[Rs_selectstyle], "oldword", 7) == 0) - R->selection_style = OLD_WORD_SELECT; + if (STRNCASECMP(rs[Rs_selectstyle], "oldword", 7) == 0) + R->selection_style = OLD_WORD_SELECT; #ifndef NO_OLD_SELECTION - else if (STRNCASECMP(rs[Rs_selectstyle], "old", 3) == 0) - R->selection_style = OLD_SELECT; + else if (STRNCASECMP(rs[Rs_selectstyle], "old", 3) == 0) + R->selection_style = OLD_SELECT; #endif } #ifdef HAVE_SCROLLBARS rxvt_setup_scrollbar(aR_ rs[Rs_scrollBar_align], rs[Rs_scrollstyle], - rs[Rs_scrollBar_thickness]); + rs[Rs_scrollBar_thickness]); #endif R->TermWin.fontset = new rxvt_fontset (aR); @@ -658,21 +658,21 @@ rxvt_init_resources(pR_ int argc, const char *const *argv) #ifdef XTERM_REVERSE_VIDEO /* this is how xterm implements reverseVideo */ if (R->Options & Opt_reverseVideo) { - if (!rs[Rs_color + Color_fg]) - rs[Rs_color + Color_fg] = def_colorName[Color_bg]; - if (!rs[Rs_color + Color_bg]) - rs[Rs_color + Color_bg] = def_colorName[Color_fg]; + if (!rs[Rs_color + Color_fg]) + rs[Rs_color + Color_fg] = def_colorName[Color_bg]; + if (!rs[Rs_color + Color_bg]) + rs[Rs_color + Color_bg] = def_colorName[Color_fg]; } #endif for (i = 0; i < NRS_COLORS; i++) - if (!rs[Rs_color + i]) - rs[Rs_color + i] = def_colorName[i]; + if (!rs[Rs_color + i]) + rs[Rs_color + i] = def_colorName[i]; #ifndef XTERM_REVERSE_VIDEO /* this is how we implement reverseVideo */ if (R->Options & Opt_reverseVideo) - SWAP_IT(rs[Rs_color + Color_fg], rs[Rs_color + Color_bg], const char *); + SWAP_IT(rs[Rs_color + Color_fg], rs[Rs_color + Color_bg], const char *); #endif /* convenient aliases for setting fg/bg to colors */ @@ -681,14 +681,14 @@ rxvt_init_resources(pR_ int argc, const char *const *argv) #ifndef NO_CURSORCOLOR rxvt_color_aliases(aR_ Color_cursor); rxvt_color_aliases(aR_ Color_cursor2); -#endif /* NO_CURSORCOLOR */ +#endif /* NO_CURSORCOLOR */ rxvt_color_aliases(aR_ Color_pointer); rxvt_color_aliases(aR_ Color_border); #ifndef NO_BOLD_UNDERLINE_REVERSE rxvt_color_aliases(aR_ Color_BD); rxvt_color_aliases(aR_ Color_UL); rxvt_color_aliases(aR_ Color_RV); -#endif /* ! NO_BOLD_UNDERLINE_REVERSE */ +#endif /* ! NO_BOLD_UNDERLINE_REVERSE */ return cmd_argv; } @@ -716,10 +716,10 @@ rxvt_init_env(pR) val = rxvt_network_display(R->rs[Rs_display_name]); R->rs[Rs_display_name] = (const char *)val; if (val == NULL) -#endif /* DISPLAY_IS_IP */ - val = XDisplayString(R->Xdisplay); +#endif /* DISPLAY_IS_IP */ + val = XDisplayString(R->Xdisplay); if (R->rs[Rs_display_name] == NULL) - R->rs[Rs_display_name] = val; /* use broken `:0' value */ + R->rs[Rs_display_name] = val; /* use broken `:0' value */ i = STRLEN(val); R->env_display = (char *)rxvt_malloc((i + 9) * sizeof(char)); @@ -733,14 +733,14 @@ rxvt_init_env(pR) R->env_windowid = (char *)rxvt_malloc((i + 10) * sizeof(char)); sprintf(R->env_windowid, "WINDOWID=%u", - (unsigned int)R->TermWin.parent[0]); + (unsigned int)R->TermWin.parent[0]); /* add entries to the environment: * @ DISPLAY: in case we started with -display * @ WINDOWID: X window id number of the window * @ COLORTERM: terminal sub-name and also indicates its color * @ TERM: terminal name - * @ TERMINFO: path to terminfo directory + * @ TERMINFO: path to terminfo directory */ putenv(R->env_display); putenv(R->env_windowid); @@ -748,22 +748,22 @@ rxvt_init_env(pR) putenv("TERMINFO=" RXVT_TERMINFO); #endif if (XDEPTH <= 2) - putenv("COLORTERM=" COLORTERMENV "-mono"); + putenv("COLORTERM=" COLORTERMENV "-mono"); else - putenv("COLORTERM=" COLORTERMENVFULL); + putenv("COLORTERM=" COLORTERMENVFULL); if (R->rs[Rs_term_name] != NULL) { - R->env_term = (char *)rxvt_malloc((STRLEN(R->rs[Rs_term_name]) + 6) * sizeof(char)); - sprintf(R->env_term, "TERM=%s", R->rs[Rs_term_name]); - putenv(R->env_term); + R->env_term = (char *)rxvt_malloc((STRLEN(R->rs[Rs_term_name]) + 6) * sizeof(char)); + sprintf(R->env_term, "TERM=%s", R->rs[Rs_term_name]); + putenv(R->env_term); } else - putenv("TERM=" TERMENV); + putenv("TERM=" TERMENV); #ifdef HAVE_UNSETENV /* avoid passing old settings and confusing term size */ unsetenv("LINES"); unsetenv("COLUMNS"); - unsetenv("TERMCAP"); /* terminfo should be okay */ -#endif /* HAVE_UNSETENV */ + unsetenv("TERMCAP"); /* terminfo should be okay */ +#endif /* HAVE_UNSETENV */ } /*----------------------------------------------------------------------*/ @@ -777,28 +777,28 @@ rxvt_init_xlocale(pR) { #ifdef USE_XIM if (R->locale == NULL) - rxvt_print_error("Setting locale failed."); + rxvt_print_error("Setting locale failed."); else { - Atom wmlocale; - - wmlocale = XInternAtom(R->Xdisplay, "WM_LOCALE_NAME", False); - XChangeProperty(R->Xdisplay, R->TermWin.parent[0], wmlocale, - XA_STRING, 8, PropModeReplace, - (unsigned char *)R->locale, STRLEN(R->locale)); - - if (XSupportsLocale() != True) { - rxvt_print_error("The locale is not supported by Xlib"); - return; - } - rxvt_setTermFontSet(aR_ 0); - - /* see if we can connect yet */ - rxvt_IMInstantiateCallback(R->Xdisplay, NULL, NULL); - - /* To avoid Segmentation Fault in C locale: Solaris only? */ - if (STRCMP(R->locale, "C")) - XRegisterIMInstantiateCallback(R->Xdisplay, NULL, NULL, NULL, - rxvt_IMInstantiateCallback, NULL); + Atom wmlocale; + + wmlocale = XInternAtom(R->Xdisplay, "WM_LOCALE_NAME", False); + XChangeProperty(R->Xdisplay, R->TermWin.parent[0], wmlocale, + XA_STRING, 8, PropModeReplace, + (unsigned char *)R->locale, STRLEN(R->locale)); + + if (XSupportsLocale() != True) { + rxvt_print_error("The locale is not supported by Xlib"); + return; + } + rxvt_setTermFontSet(aR_ 0); + + /* see if we can connect yet */ + rxvt_IMInstantiateCallback(R->Xdisplay, NULL, NULL); + + /* To avoid Segmentation Fault in C locale: Solaris only? */ + if (STRCMP(R->locale, "C")) + XRegisterIMInstantiateCallback(R->Xdisplay, NULL, NULL, NULL, + rxvt_IMInstantiateCallback, NULL); } #endif } @@ -808,61 +808,66 @@ rxvt_init_xlocale(pR) void rxvt_init_command(pR_ const char *const *argv) { -/* - * Initialize the command connection. - * This should be called after the X server connection is established. - */ - int i; + /* + * Initialize the command connection. + * This should be called after the X server connection is established. + */ + int i; - for (i = 0; i < NUM_XA; i++) - R->xa[i] = XInternAtom(R->Xdisplay, xa_names[i], False); + for (i = 0; i < NUM_XA; i++) + R->xa[i] = XInternAtom(R->Xdisplay, xa_names[i], False); /* Enable delete window protocol */ - XSetWMProtocols(R->Xdisplay, R->TermWin.parent[0], - &(R->xa[XA_WMDELETEWINDOW]), 1); + XSetWMProtocols(R->Xdisplay, R->TermWin.parent[0], + &(R->xa[XA_WMDELETEWINDOW]), 1); #ifdef USING_W11LIB /* enable W11 callbacks */ - W11AddEventHandler(R->Xdisplay, rxvt_W11_process_x_event); + W11AddEventHandler(R->Xdisplay, rxvt_W11_process_x_event); #endif #ifdef META8_OPTION - R->meta_char = (R->Options & Opt_meta8 ? 0x80 : C0_ESC); + R->meta_char = (R->Options & Opt_meta8 ? 0x80 : C0_ESC); #endif - rxvt_get_ourmods(aR); - if (!(R->Options & Opt_scrollTtyOutput)) - R->PrivateModes |= PrivMode_TtyOutputInh; - if (R->Options & Opt_scrollTtyKeypress) - R->PrivateModes |= PrivMode_Keypress; - if (!(R->Options & Opt_jumpScroll)) - R->PrivateModes |= PrivMode_smoothScroll; + + rxvt_get_ourmods(aR); + + if (!(R->Options & Opt_scrollTtyOutput)) + R->PrivateModes |= PrivMode_TtyOutputInh; + if (R->Options & Opt_scrollTtyKeypress) + R->PrivateModes |= PrivMode_Keypress; + if (!(R->Options & Opt_jumpScroll)) + R->PrivateModes |= PrivMode_smoothScroll; #ifndef NO_BACKSPACE_KEY - if (STRCMP(R->key_backspace, "DEC") == 0) - R->PrivateModes |= PrivMode_HaveBackSpace; + if (STRCMP(R->key_backspace, "DEC") == 0) + R->PrivateModes |= PrivMode_HaveBackSpace; #endif /* add value for scrollBar */ - if (scrollbar_visible(R)) { - R->PrivateModes |= PrivMode_scrollBar; - R->SavedModes |= PrivMode_scrollBar; + if (scrollbar_visible(R)) + { + R->PrivateModes |= PrivMode_scrollBar; + R->SavedModes |= PrivMode_scrollBar; } - if (menubar_visible(R)) { - R->PrivateModes |= PrivMode_menuBar; - R->SavedModes |= PrivMode_menuBar; + if (menubar_visible(R)) + { + R->PrivateModes |= PrivMode_menuBar; + R->SavedModes |= PrivMode_menuBar; } #ifdef GREEK_SUPPORT - greek_init(); + greek_init(); #endif - R->Xfd = XConnectionNumber(R->Xdisplay); + R->Xfd = XConnectionNumber (R->Xdisplay); #ifdef CURSOR_BLINK - if (R->Options & Opt_cursorBlink) - (void)gettimeofday(&R->lastcursorchange, NULL); + if (R->Options & Opt_cursorBlink) + (void)gettimeofday(&R->lastcursorchange, NULL); #endif - if ((R->cmd_fd = rxvt_run_command(aR_ argv)) < 0) { - rxvt_print_error("aborting"); - exit(EXIT_FAILURE); + if ((R->cmd_fd = rxvt_run_command (aR_ argv)) < 0) + { + rxvt_print_error ("aborting"); + exit (EXIT_FAILURE); } } @@ -874,51 +879,51 @@ rxvt_Get_Colours(pR) int i; for (i = 0; i < (XDEPTH <= 2 ? 2 : NRS_COLORS); i++) { - rxvt_color xcol; + rxvt_color xcol; - if (!R->rs[Rs_color + i]) - continue; + if (!R->rs[Rs_color + i]) + continue; - if (!rxvt_rXParseAllocColor(aR_ &xcol, R->rs[Rs_color + i])) { + if (!rxvt_rXParseAllocColor(aR_ &xcol, R->rs[Rs_color + i])) { #ifndef XTERM_REVERSE_VIDEO - if (i < 2 && (R->Options & Opt_reverseVideo)) { - R->rs[Rs_color + i] = def_colorName[!i]; - } else + if (i < 2 && (R->Options & Opt_reverseVideo)) { + R->rs[Rs_color + i] = def_colorName[!i]; + } else #endif - R->rs[Rs_color + i] = def_colorName[i]; - if (!R->rs[Rs_color + i]) - continue; - if (!rxvt_rXParseAllocColor(aR_ &xcol, R->rs[Rs_color + i])) { - switch (i) { - case Color_fg: - case Color_bg: - /* fatal: need bg/fg color */ - rxvt_print_error("aborting"); - exit(EXIT_FAILURE); - /* NOTREACHED */ - break; + R->rs[Rs_color + i] = def_colorName[i]; + if (!R->rs[Rs_color + i]) + continue; + if (!rxvt_rXParseAllocColor(aR_ &xcol, R->rs[Rs_color + i])) { + switch (i) { + case Color_fg: + case Color_bg: + /* fatal: need bg/fg color */ + rxvt_print_error("aborting"); + exit(EXIT_FAILURE); + /* NOTREACHED */ + break; #ifndef NO_CURSORCOLOR - case Color_cursor2: - xcol = R->PixColors[Color_fg]; - break; -#endif /* ! NO_CURSORCOLOR */ - case Color_pointer: - xcol = R->PixColors[Color_fg]; - break; - default: - xcol = R->PixColors[Color_bg]; /* None */ - break; - } - } - } - R->PixColors[i] = xcol; - SET_PIXCOLOR(R, i); + case Color_cursor2: + xcol = R->PixColors[Color_fg]; + break; +#endif /* ! NO_CURSORCOLOR */ + case Color_pointer: + xcol = R->PixColors[Color_fg]; + break; + default: + xcol = R->PixColors[Color_bg]; /* None */ + break; + } + } + } + R->PixColors[i] = xcol; + SET_PIXCOLOR(R, i); } if (XDEPTH <= 2 || !R->rs[Rs_color + Color_pointer]) - R->PixColors[Color_pointer] = R->PixColors[Color_fg]; + R->PixColors[Color_pointer] = R->PixColors[Color_fg]; if (XDEPTH <= 2 || !R->rs[Rs_color + Color_border]) - R->PixColors[Color_border] = R->PixColors[Color_fg]; + R->PixColors[Color_border] = R->PixColors[Color_fg]; /* * get scrollBar/menuBar shadow colors @@ -927,17 +932,17 @@ rxvt_Get_Colours(pR) * from the fvwm window manager. */ #ifdef KEEP_SCROLLCOLOR - if (XDEPTH <= 2) { /* Monochrome */ - R->PixColors[Color_scroll] = R->PixColors[Color_fg]; - R->PixColors[Color_topShadow] = R->PixColors[Color_bg]; - R->PixColors[Color_bottomShadow] = R->PixColors[Color_bg]; + if (XDEPTH <= 2) { /* Monochrome */ + R->PixColors[Color_scroll] = R->PixColors[Color_fg]; + R->PixColors[Color_topShadow] = R->PixColors[Color_bg]; + R->PixColors[Color_bottomShadow] = R->PixColors[Color_bg]; } else { - rxvt_color xcol[3]; - /* xcol[0] == white - * xcol[1] == top shadow - * xcol[2] == bot shadow */ + rxvt_color xcol[3]; + /* xcol[0] == white + * xcol[1] == top shadow + * xcol[2] == bot shadow */ - xcol[1] = R->PixColors[Color_scroll]; + xcol[1] = R->PixColors[Color_scroll]; # ifdef PREFER_24BIT xcol[0].set (r, -1, -1, -1); /* XFreeColors(R->Xdisplay, XCMAP, &(xcol[0].pixel), 1, ~0); */ @@ -950,22 +955,22 @@ rxvt_Get_Colours(pR) xcol[0].get (r, R0, G0, B0); xcol[1].get (r, R1, G1, B1); - /* bottomShadowColor */ + /* bottomShadowColor */ if (!xcol[2].set (aR_ R1 / 2, G1 / 2, B1 / 2)) - xcol[2] = R->PixColors[Color_Black]; + xcol[2] = R->PixColors[Color_Black]; - R->PixColors[Color_bottomShadow] = xcol[2]; + R->PixColors[Color_bottomShadow] = xcol[2]; - /* topShadowColor */ + /* topShadowColor */ if (!xcol[1].set (aR_ min (R0, max (R0 / 5, R1) * 7 / 5), min (G0, max (G0 / 5, G1) * 7 / 5), min (B0, max (B0 / 5, B1) * 7 / 5))) - xcol[1] = R->PixColors[Color_White]; + xcol[1] = R->PixColors[Color_White]; - R->PixColors[Color_topShadow] = xcol[1]; + R->PixColors[Color_topShadow] = xcol[1]; } -#endif /* KEEP_SCROLLCOLOR */ +#endif /* KEEP_SCROLLCOLOR */ } /*----------------------------------------------------------------------*/ @@ -975,17 +980,17 @@ void rxvt_color_aliases(pR_ int idx) { if (R->rs[Rs_color + idx] && isdigit(*(R->rs[Rs_color + idx]))) { - int i = atoi(R->rs[Rs_color + idx]); + int i = atoi(R->rs[Rs_color + idx]); - if (i >= 8 && i <= 15) { /* bright colors */ - i -= 8; + if (i >= 8 && i <= 15) { /* bright colors */ + i -= 8; #ifndef NO_BRIGHTCOLOR - R->rs[Rs_color + idx] = R->rs[Rs_color + minBrightCOLOR + i]; - return; + R->rs[Rs_color + idx] = R->rs[Rs_color + minBrightCOLOR + i]; + return; #endif - } - if (i >= 0 && i <= 7) /* normal colors */ - R->rs[Rs_color + idx] = R->rs[Rs_color + minCOLOR + i]; + } + if (i >= 0 && i <= 7) /* normal colors */ + R->rs[Rs_color + idx] = R->rs[Rs_color + minCOLOR + i]; } } @@ -1004,56 +1009,56 @@ rxvt_get_ourmods(pR) XModifierKeymap *map; KeyCode *kc; const unsigned int modmasks[] = - { Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask }; + { Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask }; requestedmeta = realmeta = realalt = 0; rsmod = R->rs[Rs_modifier]; if (rsmod - && STRCASECMP(rsmod, "mod1") >= 0 && STRCASECMP(rsmod, "mod5") <= 0) - requestedmeta = rsmod[3] - '0'; + && STRCASECMP(rsmod, "mod1") >= 0 && STRCASECMP(rsmod, "mod5") <= 0) + requestedmeta = rsmod[3] - '0'; map = XGetModifierMapping(R->Xdisplay); kc = map->modifiermap; for (i = 1; i < 6; i++) { - k = (i + 2) * map->max_keypermod; /* skip shift/lock/control */ - for (j = map->max_keypermod; j--; k++) { - if (kc[k] == 0) - break; - switch (XKeycodeToKeysym(R->Xdisplay, kc[k], 0)) { - case XK_Num_Lock: - R->ModNumLockMask = modmasks[i - 1]; - /* FALLTHROUGH */ - default: - continue; /* for(;;) */ - case XK_Meta_L: - case XK_Meta_R: - cm = "meta"; - realmeta = i; - break; - case XK_Alt_L: - case XK_Alt_R: - cm = "alt"; - realalt = i; - break; - case XK_Super_L: - case XK_Super_R: - cm = "super"; - break; - case XK_Hyper_L: - case XK_Hyper_R: - cm = "hyper"; - break; - } - if (rsmod && STRNCASECMP(rsmod, cm, STRLEN(cm)) == 0) - requestedmeta = i; - } + k = (i + 2) * map->max_keypermod; /* skip shift/lock/control */ + for (j = map->max_keypermod; j--; k++) { + if (kc[k] == 0) + break; + switch (XKeycodeToKeysym(R->Xdisplay, kc[k], 0)) { + case XK_Num_Lock: + R->ModNumLockMask = modmasks[i - 1]; + /* FALLTHROUGH */ + default: + continue; /* for(;;) */ + case XK_Meta_L: + case XK_Meta_R: + cm = "meta"; + realmeta = i; + break; + case XK_Alt_L: + case XK_Alt_R: + cm = "alt"; + realalt = i; + break; + case XK_Super_L: + case XK_Super_R: + cm = "super"; + break; + case XK_Hyper_L: + case XK_Hyper_R: + cm = "hyper"; + break; + } + if (rsmod && STRNCASECMP(rsmod, cm, STRLEN(cm)) == 0) + requestedmeta = i; + } } XFreeModifiermap(map); i = (requestedmeta ? requestedmeta - : (realmeta ? realmeta - : (realalt ? realalt : 0))); + : (realmeta ? realmeta + : (realalt ? realalt : 0))); if (i) - R->ModMetaMask = modmasks[i - 1]; + R->ModMetaMask = modmasks[i - 1]; } /*----------------------------------------------------------------------*/ @@ -1079,25 +1084,25 @@ rxvt_Create_Windows(pR_ int argc, const char *const *argv) blackcolour.set (r, 0, 0, 0); #endif if (R->Options & Opt_transparent) { - XGetWindowAttributes(R->Xdisplay, RootWindow(R->Xdisplay, Xscreen), - &gattr); - XDEPTH = gattr.depth; + XGetWindowAttributes(R->Xdisplay, RootWindow(R->Xdisplay, Xscreen), + &gattr); + XDEPTH = gattr.depth; } else { - XDEPTH = DefaultDepth(R->Xdisplay, Xscreen); + XDEPTH = DefaultDepth(R->Xdisplay, Xscreen); /* * If depth is not 24, look for a 24bit visual. */ - if (XDEPTH != 24) { - XVisualInfo vinfo; - - if (XMatchVisualInfo(R->Xdisplay, Xscreen, 24, TrueColor, &vinfo)) { - XDEPTH = 24; - XVISUAL = vinfo.visual; - XCMAP = XCreateColormap(R->Xdisplay, - RootWindow(R->Xdisplay, Xscreen), - XVISUAL, AllocNone); - } - } + if (XDEPTH != 24) { + XVisualInfo vinfo; + + if (XMatchVisualInfo(R->Xdisplay, Xscreen, 24, TrueColor, &vinfo)) { + XDEPTH = 24; + XVISUAL = vinfo.visual; + XCMAP = XCreateColormap(R->Xdisplay, + RootWindow(R->Xdisplay, Xscreen), + XVISUAL, AllocNone); + } + } } #endif @@ -1118,21 +1123,21 @@ rxvt_Create_Windows(pR_ int argc, const char *const *argv) attributes.border_pixel = R->PixColors[Color_border]; attributes.colormap = XCMAP; R->TermWin.parent[0] = XCreateWindow(R->Xdisplay, Xroot, - R->szHint.x, R->szHint.y, - R->szHint.width, R->szHint.height, - R->TermWin.ext_bwidth, - XDEPTH, InputOutput, - XVISUAL, - CWBackPixel | CWBorderPixel - | CWColormap, &attributes); + R->szHint.x, R->szHint.y, + R->szHint.width, R->szHint.height, + R->TermWin.ext_bwidth, + XDEPTH, InputOutput, + XVISUAL, + CWBackPixel | CWBorderPixel + | CWColormap, &attributes); #else R->TermWin.parent[0] = XCreateSimpleWindow(R->Xdisplay, Xroot, - R->szHint.x, R->szHint.y, - R->szHint.width, - R->szHint.height, - R->TermWin.ext_bwidth, - R->PixColors[Color_border], - R->PixColors[Color_fg]); + R->szHint.x, R->szHint.y, + R->szHint.width, + R->szHint.height, + R->TermWin.ext_bwidth, + R->PixColors[Color_border], + R->PixColors[Color_fg]); #endif rxvt_xterm_seq(aR_ XTerm_title, R->rs[Rs_title], CHAR_ST); rxvt_xterm_seq(aR_ XTerm_iconName, R->rs[Rs_iconName], CHAR_ST); @@ -1143,18 +1148,18 @@ rxvt_Create_Windows(pR_ int argc, const char *const *argv) wmHint.flags = (InputHint | StateHint | WindowGroupHint); wmHint.input = True; wmHint.initial_state = (R->Options & Opt_iconic ? IconicState - : NormalState); + : NormalState); wmHint.window_group = R->TermWin.parent[0]; XSetWMProperties(R->Xdisplay, R->TermWin.parent[0], NULL, NULL, - (char **)argv, argc, &R->szHint, &wmHint, &classHint); + (char **)argv, argc, &R->szHint, &wmHint, &classHint); XSelectInput(R->Xdisplay, R->TermWin.parent[0], - (KeyPressMask + (KeyPressMask #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING) - | KeyReleaseMask + | KeyReleaseMask #endif - | FocusChangeMask | VisibilityChangeMask - | StructureNotifyMask)); + | FocusChangeMask | VisibilityChangeMask + | StructureNotifyMask)); /* vt cursor: Black-on-White is standard, but this is more popular */ R->TermWin_cursor = XCreateFontCursor(R->Xdisplay, XC_xterm); @@ -1166,61 +1171,61 @@ rxvt_Create_Windows(pR_ int argc, const char *const *argv) #ifdef POINTER_BLANK R->pointer_blank = XCreateGlyphCursor(R->Xdisplay, R->TermWin.font->fid, - R->TermWin.font->fid, ' ', ' ', - &blackcolour, &blackcolour); + R->TermWin.font->fid, ' ', ' ', + &blackcolour, &blackcolour); #endif /* the vt window */ R->TermWin.vt = XCreateSimpleWindow(R->Xdisplay, R->TermWin.parent[0], - R->window_vt_x, R->window_vt_y, - TermWin_TotalWidth(), - TermWin_TotalHeight(), - 0, - R->PixColors[Color_fg], - R->PixColors[Color_bg]); + R->window_vt_x, R->window_vt_y, + TermWin_TotalWidth(), + TermWin_TotalHeight(), + 0, + R->PixColors[Color_fg], + R->PixColors[Color_bg]); #ifdef DEBUG_X XStoreName(R->Xdisplay, R->TermWin.vt, "vt window"); #endif rxvt_pointer_unblank(aR); vt_emask = (ExposureMask | ButtonPressMask | ButtonReleaseMask - | PropertyChangeMask); + | PropertyChangeMask); #ifdef POINTER_BLANK if ((R->Options & Opt_pointerBlank)) - vt_emask |= PointerMotionMask; + vt_emask |= PointerMotionMask; else #endif - vt_emask |= (Button1MotionMask | Button3MotionMask); + vt_emask |= (Button1MotionMask | Button3MotionMask); XSelectInput(R->Xdisplay, R->TermWin.vt, vt_emask); #if defined(MENUBAR) && (MENUBAR_MAX > 1) if (menuBar_height()) { - R->menuBar.win = XCreateSimpleWindow(R->Xdisplay, R->TermWin.parent[0], - R->window_vt_x, 0, - TermWin_TotalWidth(), - menuBar_TotalHeight(), - 0, - R->PixColors[Color_fg], - R->PixColors[Color_scroll]); + R->menuBar.win = XCreateSimpleWindow(R->Xdisplay, R->TermWin.parent[0], + R->window_vt_x, 0, + TermWin_TotalWidth(), + menuBar_TotalHeight(), + 0, + R->PixColors[Color_fg], + R->PixColors[Color_scroll]); #ifdef DEBUG_X XStoreName(R->Xdisplay, R->menuBar.win, "menubar"); #endif - XDefineCursor(R->Xdisplay, R->menuBar.win, R->pointer_leftptr); - XSelectInput(R->Xdisplay, R->menuBar.win, - (ExposureMask | ButtonPressMask | ButtonReleaseMask - | Button1MotionMask)); + XDefineCursor(R->Xdisplay, R->menuBar.win, R->pointer_leftptr); + XSelectInput(R->Xdisplay, R->menuBar.win, + (ExposureMask | ButtonPressMask | ButtonReleaseMask + | Button1MotionMask)); } #endif #ifdef XPM_BACKGROUND if (R->rs[Rs_backgroundPixmap] != NULL - && !(R->Options & Opt_transparent)) { - const char *p = R->rs[Rs_backgroundPixmap]; - - if ((p = STRCHR(p, ';')) != NULL) { - p++; - rxvt_scale_pixmap(aR_ p); - } - rxvt_set_bgPixmap(aR_ R->rs[Rs_backgroundPixmap]); - rxvt_scr_touch(aR_ True); + && !(R->Options & Opt_transparent)) { + const char *p = R->rs[Rs_backgroundPixmap]; + + if ((p = STRCHR(p, ';')) != NULL) { + p++; + rxvt_scale_pixmap(aR_ p); + } + rxvt_set_bgPixmap(aR_ R->rs[Rs_backgroundPixmap]); + rxvt_scr_touch(aR_ True); } #endif @@ -1229,20 +1234,20 @@ rxvt_Create_Windows(pR_ int argc, const char *const *argv) gcvalue.background = R->PixColors[Color_bg]; gcvalue.graphics_exposures = 1; R->TermWin.gc = XCreateGC(R->Xdisplay, R->TermWin.vt, - GCForeground | GCBackground - | GCGraphicsExposures, &gcvalue); + GCForeground | GCBackground + | GCGraphicsExposures, &gcvalue); #if defined(MENUBAR) || defined(RXVT_SCROLLBAR) gcvalue.foreground = R->PixColors[Color_topShadow]; R->topShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt, - GCForeground, &gcvalue); + GCForeground, &gcvalue); gcvalue.foreground = R->PixColors[Color_bottomShadow]; R->botShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt, - GCForeground, &gcvalue); + GCForeground, &gcvalue); gcvalue.foreground = R->PixColors[(XDEPTH <= 2 ? Color_fg - : Color_scroll)]; + : Color_scroll)]; R->scrollbarGC = XCreateGC(R->Xdisplay, R->TermWin.vt, - GCForeground, &gcvalue); + GCForeground, &gcvalue); #endif } @@ -1260,37 +1265,37 @@ rxvt_run_command(pR_ const char *const *argv) /* get master (pty) */ if ((cfd = rxvt_get_pty(&(R->tty_fd), &(R->ttydev))) < 0) { - rxvt_print_error("can't open pseudo-tty"); - return -1; + rxvt_print_error("can't open pseudo-tty"); + return -1; } #ifdef FD_SETSIZE if (R->Xfd > FD_SETSIZE || cfd > FD_SETSIZE) { - rxvt_print_error("fd too high: %d max", FD_SETSIZE); - rxvt_clean_exit(); - exit(EXIT_FAILURE); + rxvt_print_error("fd too high: %d max", FD_SETSIZE); + rxvt_clean_exit(); + exit(EXIT_FAILURE); } #endif - fcntl(cfd, F_SETFL, O_NDELAY); + fcntl (cfd, F_SETFL, O_NONBLOCK); /* get slave (tty) */ if (R->tty_fd < 0) { #ifndef NO_SETOWNER_TTYDEV - rxvt_privileged_ttydev(aR_ SAVE); + rxvt_privileged_ttydev(aR_ SAVE); #endif - if ((R->tty_fd = rxvt_get_tty(R->ttydev)) < 0) { - close(cfd); - rxvt_print_error("can't open slave tty %s", R->ttydev); - return -1; - } + if ((R->tty_fd = rxvt_get_tty(R->ttydev)) < 0) { + close(cfd); + rxvt_print_error("can't open slave tty %s", R->ttydev); + return -1; + } } #ifndef NO_BACKSPACE_KEY if (R->key_backspace[0] && !R->key_backspace[1]) - er = R->key_backspace[0]; + er = R->key_backspace[0]; else if (STRCMP(R->key_backspace, "DEC") == 0) - er = '\177'; /* the initial state anyway */ + er = '\177'; /* the initial state anyway */ else #endif - er = -1; + er = -1; rxvt_get_ttymode(&(R->tio), er); /* install exit handler for cleanup */ @@ -1298,7 +1303,7 @@ rxvt_run_command(pR_ const char *const *argv) atexit(rxvt_clean_exit); #else # ifdef HAVE_ON_EXIT - on_exit(rxvt_clean_exit, NULL); /* non-ANSI exit handler */ + on_exit(rxvt_clean_exit, NULL); /* non-ANSI exit handler */ # endif #endif @@ -1317,58 +1322,58 @@ rxvt_run_command(pR_ const char *const *argv) /* spin off the command interpreter */ switch (R->cmd_pid = fork()) { case -1: - rxvt_print_error("can't fork"); - return -1; + rxvt_print_error("can't fork"); + return -1; case 0: - close(cfd); /* only keep R->tty_fd and STDERR open */ - close(R->Xfd); - if (rxvt_control_tty(R->tty_fd, R->ttydev) < 0) - rxvt_print_error("could not obtain control of tty"); - else { - /* Reopen stdin, stdout and stderr over the tty file descriptor */ - dup2(R->tty_fd, STDIN_FILENO); - dup2(R->tty_fd, STDOUT_FILENO); - dup2(R->tty_fd, STDERR_FILENO); - if (R->tty_fd > 2) - close(R->tty_fd); - rxvt_run_child(aR_ argv); - } - exit(EXIT_FAILURE); - /* NOTREACHED */ + close(cfd); /* only keep R->tty_fd and STDERR open */ + close(R->Xfd); + if (rxvt_control_tty(R->tty_fd, R->ttydev) < 0) + rxvt_print_error("could not obtain control of tty"); + else { + /* Reopen stdin, stdout and stderr over the tty file descriptor */ + dup2(R->tty_fd, STDIN_FILENO); + dup2(R->tty_fd, STDOUT_FILENO); + dup2(R->tty_fd, STDERR_FILENO); + if (R->tty_fd > 2) + close(R->tty_fd); + rxvt_run_child(aR_ argv); + } + exit(EXIT_FAILURE); + /* NOTREACHED */ default: - { + { #if defined(HAVE_STRUCT_UTMP) && defined(HAVE_TTYSLOT) - int fdstdin; + int fdstdin; - fdstdin = dup(STDIN_FILENO); - dup2(R->tty_fd, STDIN_FILENO); + fdstdin = dup(STDIN_FILENO); + dup2(R->tty_fd, STDIN_FILENO); #endif - rxvt_privileged_utmp(aR_ SAVE); + rxvt_privileged_utmp(aR_ SAVE); #if defined(HAVE_STRUCT_UTMP) && defined(HAVE_TTYSLOT) - dup2(fdstdin, STDIN_FILENO); - close(fdstdin); + dup2(fdstdin, STDIN_FILENO); + close(fdstdin); #endif - } - close(R->tty_fd); /* keep STDERR_FILENO, R->cmd_fd, R->Xfd open */ - break; + } + close(R->tty_fd); /* keep STDERR_FILENO, R->cmd_fd, R->Xfd open */ + break; } -#else /* __QNX__ uses qnxspawn() */ +#else /* __QNX__ uses qnxspawn() */ fchmod(R->tty_fd, 0622); fcntl(R->tty_fd, F_SETFD, FD_CLOEXEC); fcntl(cfd, F_SETFD, FD_CLOEXEC); if (rxvt_run_child(aR_ argv) == -1) - exit(EXIT_FAILURE); + exit(EXIT_FAILURE); #endif /* * Reduce R->num_fds to what we use, so select() is more efficient */ R->num_fds = max(STDERR_FILENO, cfd); MAX_IT(R->num_fds, R->Xfd); -#ifdef __sgi /* Alex Coventry says we need 4 & 7 too */ +#ifdef __sgi /* Alex Coventry says we need 4 & 7 too */ MAX_IT(R->num_fds, 7); #endif - R->num_fds++; /* counts from 0 */ + R->num_fds++; /* counts from 0 */ return cfd; } @@ -1386,22 +1391,22 @@ rxvt_run_child(pR_ const char *const *argv) { char *login; - SET_TTYMODE(STDIN_FILENO, &(R->tio)); /* init terminal attributes */ + SET_TTYMODE(STDIN_FILENO, &(R->tio)); /* init terminal attributes */ - if (R->Options & Opt_console) { /* be virtual console, fail silently */ + if (R->Options & Opt_console) { /* be virtual console, fail silently */ #ifdef TIOCCONS - unsigned int on = 1; + unsigned int on = 1; - ioctl(STDIN_FILENO, TIOCCONS, &on); + ioctl(STDIN_FILENO, TIOCCONS, &on); #elif defined (SRIOCSREDIR) - int fd; - - fd = open(CONSOLE, O_WRONLY, 0); - if (fd >= 0) { - if (ioctl(fd, SRIOCSREDIR, NULL) < 0) - close(fd); - } -#endif /* SRIOCSREDIR */ + int fd; + + fd = open(CONSOLE, O_WRONLY, 0); + if (fd >= 0) { + if (ioctl(fd, SRIOCSREDIR, NULL) < 0) + close(fd); + } +#endif /* SRIOCSREDIR */ } /* reset signals and spin off the command interpreter */ @@ -1416,7 +1421,7 @@ rxvt_run_child(pR_ const char *const *argv) signal(SIGTSTP, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTTOU, SIG_IGN); -#endif /* SIGTSTP */ +#endif /* SIGTSTP */ /* set window size */ rxvt_tt_winsize(STDIN_FILENO, R->TermWin.ncol, R->TermWin.nrow, 0); @@ -1425,70 +1430,70 @@ rxvt_run_child(pR_ const char *const *argv) /* command interpreter path */ if (argv != NULL) { # ifdef DEBUG_CMD - int i; + int i; - for (i = 0; argv[i]; i++) - fprintf(stderr, "argv [%d] = \"%s\"\n", i, argv[i]); + for (i = 0; argv[i]; i++) + fprintf(stderr, "argv [%d] = \"%s\"\n", i, argv[i]); # endif - execvp(argv[0], (char *const *)argv); - /* no error message: STDERR is closed! */ + execvp(argv[0], (char *const *)argv); + /* no error message: STDERR is closed! */ } else { - const char *argv0, *shell; + const char *argv0, *shell; - if ((shell = getenv("SHELL")) == NULL || *shell == '\0') - shell = "/bin/sh"; + if ((shell = getenv("SHELL")) == NULL || *shell == '\0') + shell = "/bin/sh"; - argv0 = (const char *)rxvt_r_basename(shell); - if (R->Options & Opt_loginShell) { - login = (char *)rxvt_malloc((STRLEN(argv0) + 2) * sizeof(char)); + argv0 = (const char *)rxvt_r_basename(shell); + if (R->Options & Opt_loginShell) { + login = (char *)rxvt_malloc((STRLEN(argv0) + 2) * sizeof(char)); - login[0] = '-'; - STRCPY(&login[1], argv0); - argv0 = login; - } - execlp(shell, argv0, NULL); - /* no error message: STDERR is closed! */ + login[0] = '-'; + STRCPY(&login[1], argv0); + argv0 = login; + } + execlp(shell, argv0, NULL); + /* no error message: STDERR is closed! */ } -#else /* __QNX__ uses qnxspawn() */ +#else /* __QNX__ uses qnxspawn() */ { - char iov_a[10] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; - char *command = NULL, fullcommand[_MAX_PATH]; - char **arg_v, *arg_a[2] = { NULL, NULL }; - - if (argv != NULL) { - if (access(argv[0], X_OK) == -1) { - if (STRCHR(argv[0], '/') == NULL) { - searchenv(argv[0], "PATH", fullcommand); - if (fullcommand[0] != '\0') - command = fullcommand; - } - if (access(command, X_OK) == -1) - return -1; - } else - command = argv[0]; - arg_v = argv; - } else { - if ((command = getenv("SHELL")) == NULL || *command == '\0') - command = "/bin/sh"; - - arg_a[0] = my_basename(command); - if (R->Options & Opt_loginShell) { - login = rxvt_malloc((STRLEN(arg_a[0]) + 2) * sizeof(char)); - - login[0] = '-'; - STRCPY(&login[1], arg_a[0]); - arg_a[0] = login; - } - arg_v = arg_a; - } - iov_a[0] = iov_a[1] = iov_a[2] = R->tty_fd; - R->cmd_pid = qnx_spawn(0, 0, 0, -1, -1, - _SPAWN_SETSID | _SPAWN_TCSETPGRP, - command, arg_v, environ, iov_a, 0); - if (login) - free(login); - close(R->tty_fd); - return R->cmd_fd; + char iov_a[10] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + char *command = NULL, fullcommand[_MAX_PATH]; + char **arg_v, *arg_a[2] = { NULL, NULL }; + + if (argv != NULL) { + if (access(argv[0], X_OK) == -1) { + if (STRCHR(argv[0], '/') == NULL) { + searchenv(argv[0], "PATH", fullcommand); + if (fullcommand[0] != '\0') + command = fullcommand; + } + if (access(command, X_OK) == -1) + return -1; + } else + command = argv[0]; + arg_v = argv; + } else { + if ((command = getenv("SHELL")) == NULL || *command == '\0') + command = "/bin/sh"; + + arg_a[0] = my_basename(command); + if (R->Options & Opt_loginShell) { + login = rxvt_malloc((STRLEN(arg_a[0]) + 2) * sizeof(char)); + + login[0] = '-'; + STRCPY(&login[1], arg_a[0]); + arg_a[0] = login; + } + arg_v = arg_a; + } + iov_a[0] = iov_a[1] = iov_a[2] = R->tty_fd; + R->cmd_pid = qnx_spawn(0, 0, 0, -1, -1, + _SPAWN_SETSID | _SPAWN_TCSETPGRP, + command, arg_v, environ, iov_a, 0); + if (login) + free(login); + close(R->tty_fd); + return R->cmd_fd; } #endif return -1; @@ -1507,28 +1512,28 @@ rxvt_get_ttymode(ttymode_t *tio, int erase) * standard System V termios interface */ if (GET_TERMIOS(STDIN_FILENO, tio) < 0) { - /* return error - use system defaults */ - tio->c_cc[VINTR] = CINTR; - tio->c_cc[VQUIT] = CQUIT; - tio->c_cc[VERASE] = CERASE; - tio->c_cc[VKILL] = CKILL; - tio->c_cc[VSTART] = CSTART; - tio->c_cc[VSTOP] = CSTOP; - tio->c_cc[VSUSP] = CSUSP; + /* return error - use system defaults */ + tio->c_cc[VINTR] = CINTR; + tio->c_cc[VQUIT] = CQUIT; + tio->c_cc[VERASE] = CERASE; + tio->c_cc[VKILL] = CKILL; + tio->c_cc[VSTART] = CSTART; + tio->c_cc[VSTOP] = CSTOP; + tio->c_cc[VSUSP] = CSUSP; # ifdef VDSUSP - tio->c_cc[VDSUSP] = CDSUSP; + tio->c_cc[VDSUSP] = CDSUSP; # endif # ifdef VREPRINT - tio->c_cc[VREPRINT] = CRPRNT; + tio->c_cc[VREPRINT] = CRPRNT; # endif # ifdef VDISCRD - tio->c_cc[VDISCRD] = CFLUSH; + tio->c_cc[VDISCRD] = CFLUSH; # endif # ifdef VWERSE - tio->c_cc[VWERSE] = CWERASE; + tio->c_cc[VWERSE] = CWERASE; # endif # ifdef VLNEXT - tio->c_cc[VLNEXT] = CLNEXT; + tio->c_cc[VLNEXT] = CLNEXT; # endif } tio->c_cc[VEOF] = CEOF; @@ -1549,14 +1554,14 @@ rxvt_get_ttymode(ttymode_t *tio, int erase) tio->c_cc[VTIME] = 0; # endif if (erase != -1) - tio->c_cc[VERASE] = (char)erase; + tio->c_cc[VERASE] = (char)erase; /* input modes */ tio->c_iflag = (BRKINT | IGNPAR | ICRNL # ifdef IMAXBEL - | IMAXBEL + | IMAXBEL # endif - | IXON); + | IXON); /* output modes */ tio->c_oflag = (OPOST | ONLCR); @@ -1567,10 +1572,10 @@ rxvt_get_ttymode(ttymode_t *tio, int erase) /* line discipline modes */ tio->c_lflag = (ISIG | ICANON | IEXTEN | ECHO # if defined (ECHOCTL) && defined (ECHOKE) - | ECHOCTL | ECHOKE + | ECHOCTL | ECHOKE # endif - | ECHOE | ECHOK); -# else /* HAVE_TERMIOS_H */ + | ECHOE | ECHOK); +# else /* HAVE_TERMIOS_H */ /* * sgtty interface @@ -1578,39 +1583,39 @@ rxvt_get_ttymode(ttymode_t *tio, int erase) /* get parameters -- gtty */ if (ioctl(STDIN_FILENO, TIOCGETP, &(tio->sg)) < 0) { - tio->sg.sg_erase = CERASE; /* ^H */ - tio->sg.sg_kill = CKILL; /* ^U */ + tio->sg.sg_erase = CERASE; /* ^H */ + tio->sg.sg_kill = CKILL; /* ^U */ } if (erase != -1) - tio->sg.sg_erase = (char)erase; + tio->sg.sg_erase = (char)erase; tio->sg.sg_flags = (CRMOD | ECHO | EVENP | ODDP); /* get special characters */ if (ioctl(STDIN_FILENO, TIOCGETC, &(tio->tc)) < 0) { - tio->tc.t_intrc = CINTR; /* ^C */ - tio->tc.t_quitc = CQUIT; /* ^\ */ - tio->tc.t_startc = CSTART; /* ^Q */ - tio->tc.t_stopc = CSTOP; /* ^S */ - tio->tc.t_eofc = CEOF; /* ^D */ - tio->tc.t_brkc = -1; + tio->tc.t_intrc = CINTR; /* ^C */ + tio->tc.t_quitc = CQUIT; /* ^\ */ + tio->tc.t_startc = CSTART; /* ^Q */ + tio->tc.t_stopc = CSTOP; /* ^S */ + tio->tc.t_eofc = CEOF; /* ^D */ + tio->tc.t_brkc = -1; } /* get local special chars */ if (ioctl(STDIN_FILENO, TIOCGLTC, &(tio->lc)) < 0) { - tio->lc.t_suspc = CSUSP; /* ^Z */ - tio->lc.t_dsuspc = CDSUSP; /* ^Y */ - tio->lc.t_rprntc = CRPRNT; /* ^R */ - tio->lc.t_flushc = CFLUSH; /* ^O */ - tio->lc.t_werasc = CWERASE; /* ^W */ - tio->lc.t_lnextc = CLNEXT; /* ^V */ + tio->lc.t_suspc = CSUSP; /* ^Z */ + tio->lc.t_dsuspc = CDSUSP; /* ^Y */ + tio->lc.t_rprntc = CRPRNT; /* ^R */ + tio->lc.t_flushc = CFLUSH; /* ^O */ + tio->lc.t_werasc = CWERASE; /* ^W */ + tio->lc.t_lnextc = CLNEXT; /* ^V */ } /* get line discipline */ ioctl(STDIN_FILENO, TIOCGETD, &(tio->line)); # ifdef NTTYDISC tio->line = NTTYDISC; -# endif /* NTTYDISC */ +# endif /* NTTYDISC */ tio->local = (LCRTBS | LCRTERA | LCTLECH | LPASS8 | LCRTKIL); -#endif /* HAVE_TERMIOS_H */ +#endif /* HAVE_TERMIOS_H */ /* * Debugging @@ -1621,9 +1626,9 @@ rxvt_get_ttymode(ttymode_t *tio, int erase) fprintf(stderr, "Input flags\n"); /* cpp token stringize doesn't work on all machines */ -# define FOO(flag,name) \ - if ((tio->c_iflag) & flag) \ - fprintf (stderr, "%s ", name) +# define FOO(flag,name) \ + if ((tio->c_iflag) & flag) \ + fprintf (stderr, "%s ", name) /* c_iflag bits */ FOO(IGNBRK, "IGNBRK"); @@ -1649,7 +1654,7 @@ rxvt_get_ttymode(ttymode_t *tio, int erase) fprintf(stderr, "\n"); # undef FOO -# define FOO(entry, name) \ +# define FOO(entry, name) \ fprintf(stderr, "%-8s = %#04o\n", name, tio->c_cc [entry]) FOO(VINTR, "VINTR"); @@ -1687,8 +1692,8 @@ rxvt_get_ttymode(ttymode_t *tio, int erase) # endif fprintf(stderr, "\n"); # undef FOO -# endif /* HAVE_TERMIOS_H */ -#endif /* DEBUG_TTYMODE */ +# endif /* HAVE_TERMIOS_H */ +#endif /* DEBUG_TTYMODE */ } /*----------------------- end-of-file (C source) -----------------------*/ diff --git a/src/init.h b/src/init.h index e16bedd6..45d9a94a 100644 --- a/src/init.h +++ b/src/init.h @@ -1,5 +1,5 @@ /* - * $Id: init.h,v 1.2 2003-11-24 17:31:27 pcg Exp $ + * $Id: init.h,v 1.3 2003-11-25 15:25:17 pcg Exp $ */ #ifndef _INIT_H_ @@ -146,9 +146,6 @@ #ifndef O_NOCTTY # define O_NOCTTY 0 #endif -#ifndef O_NDELAY -# define O_NDELAY O_NONBLOCK /* QNX, at least */ -#endif #ifndef ONLCR # define ONLCR 0 /* QNX, at least */ #endif diff --git a/src/iom.C b/src/iom.C index 5431d203..859ff9bd 100644 --- a/src/iom.C +++ b/src/iom.C @@ -120,19 +120,19 @@ void io_manager::loop () int fds = 0; for (io_watcher **w = iow.begin (); w < iow.end (); ++w) - { - if ((*w)->events & EVENT_READ ) FD_SET ((*w)->fd, &rfd); - if ((*w)->events & EVENT_WRITE) FD_SET ((*w)->fd, &wfd); + { + if ((*w)->events & EVENT_READ ) FD_SET ((*w)->fd, &rfd); + if ((*w)->events & EVENT_WRITE) FD_SET ((*w)->fd, &wfd); - if ((*w)->fd > fds) fds = (*w)->fd; - } + if ((*w)->fd > fds) fds = (*w)->fd; + } fds = select (fds + 1, &rfd, &wfd, 0, &to); set_now (); if (fds > 0) - for (io_watcher **w = iow.begin (); w < iow.end (); w++) + for (io_watcher **w = iow.begin (); w < iow.end (); ++w) { short revents = (*w)->events; diff --git a/src/main.C b/src/main.C index f8e1f0a6..e12fee60 100644 --- a/src/main.C +++ b/src/main.C @@ -1,7 +1,7 @@ /*--------------------------------*-C-*---------------------------------* * File: main.c *----------------------------------------------------------------------* - * $Id: main.C,v 1.3 2003-11-25 11:52:42 pcg Exp $ + * $Id: main.C,v 1.4 2003-11-25 15:25:17 pcg Exp $ * * All portions of code are copyright by their respective author/s. * Copyright (c) 1992 John Bovey, University of Kent at Canterbury @@ -44,13 +44,6 @@ # include #endif -rxvt_term::rxvt_term() -: pty_ev(this, &rxvt_term::pty_cb), - x_ev (this, &rxvt_term::x_cb) -{ - cmdbuf_ptr = cmdbuf_endp = cmdbuf_base; -} - void * rxvt_term::operator new (size_t s) { @@ -66,89 +59,106 @@ rxvt_term::operator delete (void *p, size_t s) free (p); } +rxvt_term::rxvt_term () +: pty_ev(this, &rxvt_term::pty_cb), + x_ev (this, &rxvt_term::x_cb) +{ + cmdbuf_ptr = cmdbuf_endp = cmdbuf_base; +} + +rxvt_term::~rxvt_term () +{ + delete PixColors; +} + /*----------------------------------------------------------------------*/ /* rxvt_init() */ /* LIBPROTO */ rxvt_t rxvt_init(int argc, const char *const *argv) { - const char **cmd_argv; - SET_R(new rxvt_term); dR; - if (rxvt_init_vars(aR) < 0) + if (!R->init_vars () || !R->init (argc, argv)) { - free(R); + delete R; return NULL; } -/* - * Save and then give up any super-user privileges - * If we need privileges in any area then we must specifically request it. - * We should only need to be root in these cases: - * 1. write utmp entries on some systems - * 2. chown tty on some systems - */ - rxvt_privileges(aR_ SAVE); - rxvt_privileges(aR_ IGNORE); + return R; +} + +bool +rxvt_term::init (int argc, const char *const *argv) +{ + dR;//TODO (scrollbar, setidle) - rxvt_init_secondary(aR); + /* + * Save and then give up any super-user privileges + * If we need privileges in any area then we must specifically request it. + * We should only need to be root in these cases: + * 1. write utmp entries on some systems + * 2. chown tty on some systems + */ + rxvt_privileges (this, SAVE); + rxvt_privileges (this, IGNORE); - cmd_argv = rxvt_init_resources(aR_ argc, argv); + rxvt_init_secondary (this); - R->x_ev.start (ConnectionNumber (R->Xdisplay), EVENT_READ); + const char **cmd_argv = rxvt_init_resources (this, argc, argv); #if (MENUBAR_MAX) - rxvt_menubar_read(aR_ R->rs[Rs_menu]); + rxvt_menubar_read (this, rs[Rs_menu]); #endif #ifdef HAVE_SCROLLBARS - if (R->Options & Opt_scrollBar) - scrollbar_setIdle(); /* set existence for size calculations */ + if (Options & Opt_scrollBar) + scrollbar_setIdle (); /* set existence for size calculations */ #endif - rxvt_Create_Windows(aR_ argc, argv); + rxvt_Create_Windows (this, argc, argv); - rxvt_init_xlocale(aR); + rxvt_init_xlocale (this); - rxvt_scr_reset(aR); /* initialize screen */ + rxvt_scr_reset (this); /* initialize screen */ #ifdef RXVT_GRAPHICS - rxvt_Gr_reset(aR); /* reset graphics */ + rxvt_Gr_reset (this); /* reset graphics */ #endif #if 0 #ifdef DEBUG_X - XSynchronize(R->Xdisplay, True); - XSetErrorHandler((XErrorHandler) abort); + XSynchronize(Xdisplay, True); + XSetErrorHandler((XErrorHandler) abort); #else - XSetErrorHandler((XErrorHandler) rxvt_xerror_handler); + XSetErrorHandler((XErrorHandler) rxvt_xerror_handler); #endif #endif #ifdef HAVE_SCROLLBARS - if (R->Options & Opt_scrollBar) - rxvt_Resize_scrollBar(aR); /* create and map scrollbar */ + if (Options & Opt_scrollBar) + rxvt_Resize_scrollBar (this); /* create and map scrollbar */ #endif #if (MENUBAR_MAX) - if (menubar_visible(r)) - XMapWindow(R->Xdisplay, R->menuBar.win); + if (menubar_visible(r)) + XMapWindow (Xdisplay, menuBar.win); #endif #ifdef TRANSPARENT - if (R->Options & Opt_transparent) - { - XSelectInput(R->Xdisplay, Xroot, PropertyChangeMask); - rxvt_check_our_parents(aR); - } + if (Options & Opt_transparent) + { + XSelectInput (Xdisplay, Xroot, PropertyChangeMask); + rxvt_check_our_parents (this); + } #endif - XMapWindow(R->Xdisplay, R->TermWin.vt); - XMapWindow(R->Xdisplay, R->TermWin.parent[0]); + XMapWindow (Xdisplay, TermWin.vt); + XMapWindow (Xdisplay, TermWin.parent[0]); - rxvt_init_env(aR); - rxvt_init_command(aR_ cmd_argv); + rxvt_init_env (this); + rxvt_init_command (this, cmd_argv); - R->pty_ev.start (R->cmd_fd, EVENT_READ); + x_ev.start (Xfd, EVENT_READ); + pty_ev.start (cmd_fd, EVENT_READ); - return R; + return true; } /* ------------------------------------------------------------------------- * diff --git a/src/ptytty.C b/src/ptytty.C index ebe66bb6..021940d4 100644 --- a/src/ptytty.C +++ b/src/ptytty.C @@ -1,7 +1,7 @@ /*--------------------------------*-C-*---------------------------------* * File: ptytty.c *----------------------------------------------------------------------* - * $Id: ptytty.C,v 1.2 2003-11-24 17:31:27 pcg Exp $ + * $Id: ptytty.C,v 1.3 2003-11-25 15:25:17 pcg Exp $ * * All portions of code are copyright by their respective author/s. * Copyright (c) 1999-2001 Geoff Wing @@ -69,10 +69,10 @@ int rxvt_get_pty(int *fd_tty, const char **ttydev) { - int pfd; + int pfd; #ifdef PTYS_ARE_OPENPTY - char tty_name[sizeof "/dev/pts/????\0"]; + char tty_name[sizeof "/dev/pts/????\0"]; if (openpty(&pfd, fd_tty, tty_name, NULL, NULL) != -1) { *ttydev = strdup(tty_name); @@ -81,7 +81,7 @@ rxvt_get_pty(int *fd_tty, const char **ttydev) #endif #ifdef PTYS_ARE__GETPTY - *ttydev = _getpty(&pfd, O_RDWR | O_NDELAY | O_NOCTTY, 0622, 0); + *ttydev = _getpty(&pfd, O_RDWR | O_NONBLOCK | O_NOCTTY, 0622, 0); if (*ttydev != NULL) return pfd; #endif diff --git a/src/rxvt.C b/src/rxvt.C index 9a067476..4cbb3a2d 100644 --- a/src/rxvt.C +++ b/src/rxvt.C @@ -7,10 +7,10 @@ int main(int argc, const char *const *argv) { - if (rxvt_init(argc, argv) == NULL) - return EXIT_FAILURE; + if (!rxvt_init(argc, argv)) + return EXIT_FAILURE; - iom.loop (); + iom.loop (); - return EXIT_SUCCESS; + return EXIT_SUCCESS; } diff --git a/src/rxvt.h b/src/rxvt.h index f551f5d6..6cc6c4a6 100644 --- a/src/rxvt.h +++ b/src/rxvt.h @@ -1,5 +1,5 @@ /* - * $Id: rxvt.h,v 1.3 2003-11-25 11:52:42 pcg Exp $ + * $Id: rxvt.h,v 1.4 2003-11-25 15:25:17 pcg Exp $ */ #ifndef _RXVT_H_ /* include once only */ @@ -1116,9 +1116,17 @@ struct rxvt_term : rxvt_vars { void pty_cb (io_watcher &w, short revents); io_watcher pty_ev; void x_cb (io_watcher &w, short revents); io_watcher x_ev; + void flush (); + rxvt_term (); ~rxvt_term (); + bool init (int argc, const char *const *argv); + bool init_vars (); + + uint32_t next_char (); + + bool pty_fill (size_t count); void process_x_events (); void *operator new (size_t s); diff --git a/src/screen.C b/src/screen.C index 1c3bf153..02b44f50 100644 --- a/src/screen.C +++ b/src/screen.C @@ -1,7 +1,7 @@ /*--------------------------------*-C-*--------------------------------------* - * File: screen.c + * File: screen.c *---------------------------------------------------------------------------* - * $Id: screen.C,v 1.3 2003-11-25 11:52:42 pcg Exp $ + * $Id: screen.C,v 1.4 2003-11-25 15:25:17 pcg Exp $ * * Copyright (c) 1997-2001 Geoff Wing * @@ -23,12 +23,12 @@ * We handle _all_ screen updates and selections */ -#include "../config.h" /* NECESSARY */ +#include "../config.h" /* NECESSARY */ #define INTERN_SCREEN -#include "rxvt.h" /* NECESSARY */ -#include "screen.intpro" /* PROTOS for internal routines */ +#include "rxvt.h" /* NECESSARY */ +#include "screen.intpro" /* PROTOS for internal routines */ -#include /* get the typedef for CARD32 */ +#include /* get the typedef for CARD32 */ #include #include @@ -39,53 +39,53 @@ inline void fill_text (text_t *start, text_t value, int len) *start++ = value; } -#define RESET_CHSTAT(H) \ - if ((H)->chstat == WBYTE) \ - (H)->chstat = SBYTE, (H)->lost_multi = 1 +#define RESET_CHSTAT(H) \ + if ((H)->chstat == WBYTE) \ + (H)->chstat = SBYTE, (H)->lost_multi = 1 /* ------------------------------------------------------------------------- */ -#define PROP_SIZE 16384 -#define TABSIZE 8 /* default tab size */ +#define PROP_SIZE 16384 +#define TABSIZE 8 /* default tab size */ /* ------------------------------------------------------------------------- * * GENERAL SCREEN AND SELECTION UPDATE ROUTINES * * ------------------------------------------------------------------------- */ -#define ZERO_SCROLLBACK(R) \ - if (((R)->Options & Opt_scrollTtyOutput) == Opt_scrollTtyOutput) \ - (R)->TermWin.view_start = 0 -#define CLEAR_SELECTION(R) \ - (R)->selection.beg.row = (R)->selection.beg.col \ - = (R)->selection.end.row = (R)->selection.end.col = 0 -#define CLEAR_ALL_SELECTION(R) \ - (R)->selection.beg.row = (R)->selection.beg.col \ - = (R)->selection.mark.row = (R)->selection.mark.col \ - = (R)->selection.end.row = (R)->selection.end.col = 0 - -#define ROW_AND_COL_IS_AFTER(A, B, C, D) \ +#define ZERO_SCROLLBACK(R) \ + if (((R)->Options & Opt_scrollTtyOutput) == Opt_scrollTtyOutput) \ + (R)->TermWin.view_start = 0 +#define CLEAR_SELECTION(R) \ + (R)->selection.beg.row = (R)->selection.beg.col \ + = (R)->selection.end.row = (R)->selection.end.col = 0 +#define CLEAR_ALL_SELECTION(R) \ + (R)->selection.beg.row = (R)->selection.beg.col \ + = (R)->selection.mark.row = (R)->selection.mark.col \ + = (R)->selection.end.row = (R)->selection.end.col = 0 + +#define ROW_AND_COL_IS_AFTER(A, B, C, D) \ (((A) > (C)) || (((A) == (C)) && ((B) > (D)))) -#define ROW_AND_COL_IS_BEFORE(A, B, C, D) \ +#define ROW_AND_COL_IS_BEFORE(A, B, C, D) \ (((A) < (C)) || (((A) == (C)) && ((B) < (D)))) -#define ROW_AND_COL_IN_ROW_AFTER(A, B, C, D) \ +#define ROW_AND_COL_IN_ROW_AFTER(A, B, C, D) \ (((A) == (C)) && ((B) > (D))) -#define ROW_AND_COL_IN_ROW_AT_OR_AFTER(A, B, C, D) \ +#define ROW_AND_COL_IN_ROW_AT_OR_AFTER(A, B, C, D) \ (((A) == (C)) && ((B) >= (D))) -#define ROW_AND_COL_IN_ROW_BEFORE(A, B, C, D) \ +#define ROW_AND_COL_IN_ROW_BEFORE(A, B, C, D) \ (((A) == (C)) && ((B) < (D))) -#define ROW_AND_COL_IN_ROW_AT_OR_BEFORE(A, B, C, D) \ +#define ROW_AND_COL_IN_ROW_AT_OR_BEFORE(A, B, C, D) \ (((A) == (C)) && ((B) <= (D))) /* these must be row_col_t */ -#define ROWCOL_IS_AFTER(X, Y) \ +#define ROWCOL_IS_AFTER(X, Y) \ ROW_AND_COL_IS_AFTER((X).row, (X).col, (Y).row, (Y).col) -#define ROWCOL_IS_BEFORE(X, Y) \ +#define ROWCOL_IS_BEFORE(X, Y) \ ROW_AND_COL_IS_BEFORE((X).row, (X).col, (Y).row, (Y).col) -#define ROWCOL_IN_ROW_AFTER(X, Y) \ +#define ROWCOL_IN_ROW_AFTER(X, Y) \ ROW_AND_COL_IN_ROW_AFTER((X).row, (X).col, (Y).row, (Y).col) -#define ROWCOL_IN_ROW_BEFORE(X, Y) \ +#define ROWCOL_IN_ROW_BEFORE(X, Y) \ ROW_AND_COL_IN_ROW_BEFORE((X).row, (X).col, (Y).row, (Y).col) -#define ROWCOL_IN_ROW_AT_OR_AFTER(X, Y) \ +#define ROWCOL_IN_ROW_AT_OR_AFTER(X, Y) \ ROW_AND_COL_IN_ROW_AT_OR_AFTER((X).row, (X).col, (Y).row, (Y).col) -#define ROWCOL_IN_ROW_AT_OR_BEFORE(X, Y) \ +#define ROWCOL_IN_ROW_AT_OR_BEFORE(X, Y) \ ROW_AND_COL_IN_ROW_AT_OR_BEFORE((X).row, (X).col, (Y).row, (Y).col) /* @@ -93,25 +93,25 @@ inline void fill_text (text_t *start, text_t value, int len) * CLEAR_CHARS: clear chars starting from pixel position * ERASE_ROWS : set rows starting from row to the foreground colour */ -#define drawBuffer (R->TermWin.vt) +#define drawBuffer (R->TermWin.vt) -#define CLEAR_ROWS(row, num) \ - if (R->TermWin.mapped) \ - XClearArea(R->Xdisplay, drawBuffer, R->TermWin.int_bwidth, \ - Row2Pixel(row), (unsigned int)R->TermWin.width, \ - (unsigned int)Height2Pixel(num), False) +#define CLEAR_ROWS(row, num) \ + if (R->TermWin.mapped) \ + XClearArea(R->Xdisplay, drawBuffer, R->TermWin.int_bwidth, \ + Row2Pixel(row), (unsigned int)R->TermWin.width, \ + (unsigned int)Height2Pixel(num), False) -#define CLEAR_CHARS(x, y, num) \ - if (R->TermWin.mapped) \ - XClearArea(R->Xdisplay, drawBuffer, x, y, \ - (unsigned int)Width2Pixel(num), \ - (unsigned int)Height2Pixel(1), False) +#define CLEAR_CHARS(x, y, num) \ + if (R->TermWin.mapped) \ + XClearArea(R->Xdisplay, drawBuffer, x, y, \ + (unsigned int)Width2Pixel(num), \ + (unsigned int)Height2Pixel(1), False) -#define ERASE_ROWS(row, num) \ - XFillRectangle(R->Xdisplay, drawBuffer, R->TermWin.gc, \ - R->TermWin.int_bwidth, Row2Pixel(row), \ - (unsigned int)R->TermWin.width, \ - (unsigned int)Height2Pixel(num)) +#define ERASE_ROWS(row, num) \ + XFillRectangle(R->Xdisplay, drawBuffer, R->TermWin.gc, \ + R->TermWin.int_bwidth, Row2Pixel(row), \ + (unsigned int)R->TermWin.width, \ + (unsigned int)Height2Pixel(num)) /* ------------------------------------------------------------------------- * * SCREEN `COMMON' ROUTINES * @@ -127,7 +127,7 @@ rxvt_blank_line(pR_ text_t *et, rend_t *er, unsigned int width, rend_t efs) while (width--) { *et++ = ' '; - *er++ = efs; + *er++ = efs; } } @@ -144,8 +144,8 @@ rxvt_blank_screen_mem(pR_ text_t **tp, rend_t **rp, unsigned int row, rend_t efs assert((tp[row] && rp[row]) || (tp[row] == NULL && rp[row] == NULL)); #endif if (tp[row] == NULL) { - tp[row] = (text_t *)rxvt_malloc(sizeof(text_t) * width); - rp[row] = (rend_t *)rxvt_malloc(sizeof(rend_t) * width); + tp[row] = (text_t *)rxvt_malloc(sizeof(text_t) * width); + rp[row] = (rend_t *)rxvt_malloc(sizeof(rend_t) * width); } rxvt_blank_line (aR_ tp[row], rp[row], width, efs); } @@ -158,7 +158,7 @@ void rxvt_scr_reset(pR) { unsigned int ncol, nrow, prev_ncol, prev_nrow, - total_rows, prev_total_rows; + total_rows, prev_total_rows; unsigned int p, q; int k; rend_t setrstyle; @@ -172,13 +172,13 @@ rxvt_scr_reset(pR) prev_ncol = R->prev_ncol; prev_nrow = R->prev_nrow; if (R->TermWin.ncol == 0) - R->TermWin.ncol = 80; + R->TermWin.ncol = 80; if (R->TermWin.nrow == 0) - R->TermWin.nrow = 24; + R->TermWin.nrow = 24; ncol = R->TermWin.ncol; nrow = R->TermWin.nrow; if (ncol == prev_ncol && nrow == prev_nrow) - return; + return; R->want_refresh = 1; @@ -193,174 +193,174 @@ rxvt_scr_reset(pR) * A: first time called so just malloc everything : don't rely on realloc * Note: this is still needed so that all the scrollback lines are NULL */ - R->screen.text = (text_t **)rxvt_calloc(total_rows, sizeof(text_t *)); - R->buf_text = (text_t **)rxvt_calloc(total_rows, sizeof(text_t *)); - R->drawn_text = (text_t **)rxvt_calloc(nrow, sizeof(text_t *)); - R->swap.text = (text_t **)rxvt_calloc(nrow, sizeof(text_t *)); - - R->screen.tlen = (int16_t *)rxvt_calloc(total_rows, sizeof(int16_t)); - R->swap.tlen = (int16_t *)rxvt_calloc(nrow, sizeof(int16_t)); - - R->screen.rend = (rend_t **)rxvt_calloc(total_rows, sizeof(rend_t *)); - R->buf_rend = (rend_t **)rxvt_calloc(total_rows, sizeof(rend_t *)); - R->drawn_rend = (rend_t **)rxvt_calloc(nrow, sizeof(rend_t *)); - R->swap.rend = (rend_t **)rxvt_calloc(nrow, sizeof(rend_t *)); - - for (p = 0; p < nrow; p++) { - q = p + R->TermWin.saveLines; - rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, - q, DEFAULT_RSTYLE); - rxvt_blank_screen_mem(aR_ R->swap.text, R->swap.rend, - p, DEFAULT_RSTYLE); - R->screen.tlen[q] = R->swap.tlen[p] = 0; - rxvt_blank_screen_mem(aR_ R->drawn_text, R->drawn_rend, - p, DEFAULT_RSTYLE); - } - MEMSET(R->charsets, 'B', sizeof(R->charsets)); - R->TermWin.nscrolled = 0; /* no saved lines */ - R->rstyle = DEFAULT_RSTYLE; - R->screen.flags = Screen_DefaultFlags; - R->screen.cur.row = R->screen.cur.col = 0; - R->screen.charset = 0; - R->current_screen = PRIMARY; - rxvt_scr_cursor(aR_ SAVE); + R->screen.text = (text_t **)rxvt_calloc(total_rows, sizeof(text_t *)); + R->buf_text = (text_t **)rxvt_calloc(total_rows, sizeof(text_t *)); + R->drawn_text = (text_t **)rxvt_calloc(nrow, sizeof(text_t *)); + R->swap.text = (text_t **)rxvt_calloc(nrow, sizeof(text_t *)); + + R->screen.tlen = (int16_t *)rxvt_calloc(total_rows, sizeof(int16_t)); + R->swap.tlen = (int16_t *)rxvt_calloc(nrow, sizeof(int16_t)); + + R->screen.rend = (rend_t **)rxvt_calloc(total_rows, sizeof(rend_t *)); + R->buf_rend = (rend_t **)rxvt_calloc(total_rows, sizeof(rend_t *)); + R->drawn_rend = (rend_t **)rxvt_calloc(nrow, sizeof(rend_t *)); + R->swap.rend = (rend_t **)rxvt_calloc(nrow, sizeof(rend_t *)); + + for (p = 0; p < nrow; p++) { + q = p + R->TermWin.saveLines; + rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, + q, DEFAULT_RSTYLE); + rxvt_blank_screen_mem(aR_ R->swap.text, R->swap.rend, + p, DEFAULT_RSTYLE); + R->screen.tlen[q] = R->swap.tlen[p] = 0; + rxvt_blank_screen_mem(aR_ R->drawn_text, R->drawn_rend, + p, DEFAULT_RSTYLE); + } + MEMSET(R->charsets, 'B', sizeof(R->charsets)); + R->TermWin.nscrolled = 0; /* no saved lines */ + R->rstyle = DEFAULT_RSTYLE; + R->screen.flags = Screen_DefaultFlags; + R->screen.cur.row = R->screen.cur.col = 0; + R->screen.charset = 0; + R->current_screen = PRIMARY; + rxvt_scr_cursor(aR_ SAVE); #if NSCREENS - R->swap.flags = Screen_DefaultFlags; - R->swap.cur.row = R->swap.cur.col = 0; - R->swap.charset = 0; - R->current_screen = SECONDARY; - rxvt_scr_cursor(aR_ SAVE); - R->current_screen = PRIMARY; -#endif - R->selection.text = NULL; - R->selection.len = 0; - R->selection.op = SELECTION_CLEAR; - R->selection.screen = PRIMARY; - R->selection.clicks = 0; - CLEAR_ALL_SELECTION(R); - R->rvideo = 0; + R->swap.flags = Screen_DefaultFlags; + R->swap.cur.row = R->swap.cur.col = 0; + R->swap.charset = 0; + R->current_screen = SECONDARY; + rxvt_scr_cursor(aR_ SAVE); + R->current_screen = PRIMARY; +#endif + R->selection.text = NULL; + R->selection.len = 0; + R->selection.op = SELECTION_CLEAR; + R->selection.screen = PRIMARY; + R->selection.clicks = 0; + CLEAR_ALL_SELECTION(R); + R->rvideo = 0; } else { /* * B1: add or delete rows as appropriate */ - setrstyle = DEFAULT_RSTYLE; + setrstyle = DEFAULT_RSTYLE; - if (nrow < prev_nrow) { - /* delete rows */ - k = min(R->TermWin.nscrolled, prev_nrow - nrow); - rxvt_scroll_text(aR_ 0, (int)prev_nrow - 1, k, 1); - for (p = nrow; p < prev_nrow; p++) { - q = p + R->TermWin.saveLines; - if (R->screen.text[q]) { + if (nrow < prev_nrow) { + /* delete rows */ + k = min(R->TermWin.nscrolled, prev_nrow - nrow); + rxvt_scroll_text(aR_ 0, (int)prev_nrow - 1, k, 1); + for (p = nrow; p < prev_nrow; p++) { + q = p + R->TermWin.saveLines; + if (R->screen.text[q]) { #ifdef DEBUG_STRICT - assert(R->screen.rend[q]); + assert(R->screen.rend[q]); #endif - free(R->screen.text[q]); - free(R->screen.rend[q]); - } - if (R->swap.text[p]) { + free(R->screen.text[q]); + free(R->screen.rend[q]); + } + if (R->swap.text[p]) { #ifdef DEBUG_STRICT - assert(R->swap.rend[p]); + assert(R->swap.rend[p]); #endif - free(R->swap.text[p]); - free(R->swap.rend[p]); - } + free(R->swap.text[p]); + free(R->swap.rend[p]); + } #ifdef DEBUG_STRICT - assert(R->drawn_text[p] && R->drawn_rend[p]); -#endif - free(R->drawn_text[p]); - free(R->drawn_rend[p]); - } - /* we have fewer rows so fix up cursor position */ - MIN_IT(R->screen.cur.row, (int32_t)nrow - 1); - MIN_IT(R->swap.cur.row, (int32_t)nrow - 1); - - rxvt_scr_reset_realloc(aR); /* realloc _last_ */ - - } else if (nrow > prev_nrow) { - /* add rows */ - rxvt_scr_reset_realloc(aR); /* realloc _first_ */ - - k = min(R->TermWin.nscrolled, nrow - prev_nrow); - for (p = prev_total_rows; p < total_rows; p++) { - R->screen.tlen[p] = 0; - R->screen.text[p] = NULL; - R->screen.rend[p] = NULL; - } - for (p = prev_total_rows; p < total_rows - k; p++) - rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, - p, setrstyle); - for (p = prev_nrow; p < nrow; p++) { - R->swap.tlen[p] = 0; - R->swap.text[p] = NULL; - R->swap.rend[p] = NULL; - R->drawn_text[p] = NULL; - R->drawn_rend[p] = NULL; - rxvt_blank_screen_mem(aR_ R->swap.text, R->swap.rend, - p, setrstyle); - rxvt_blank_screen_mem(aR_ R->drawn_text, R->drawn_rend, - p, setrstyle); - } - if (k > 0) { - rxvt_scroll_text(aR_ 0, (int)nrow - 1, -k, 1); - R->screen.cur.row += k; - R->screen.s_cur.row += k; - R->TermWin.nscrolled -= k; - } + assert(R->drawn_text[p] && R->drawn_rend[p]); +#endif + free(R->drawn_text[p]); + free(R->drawn_rend[p]); + } + /* we have fewer rows so fix up cursor position */ + MIN_IT(R->screen.cur.row, (int32_t)nrow - 1); + MIN_IT(R->swap.cur.row, (int32_t)nrow - 1); + + rxvt_scr_reset_realloc(aR); /* realloc _last_ */ + + } else if (nrow > prev_nrow) { + /* add rows */ + rxvt_scr_reset_realloc(aR); /* realloc _first_ */ + + k = min(R->TermWin.nscrolled, nrow - prev_nrow); + for (p = prev_total_rows; p < total_rows; p++) { + R->screen.tlen[p] = 0; + R->screen.text[p] = NULL; + R->screen.rend[p] = NULL; + } + for (p = prev_total_rows; p < total_rows - k; p++) + rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, + p, setrstyle); + for (p = prev_nrow; p < nrow; p++) { + R->swap.tlen[p] = 0; + R->swap.text[p] = NULL; + R->swap.rend[p] = NULL; + R->drawn_text[p] = NULL; + R->drawn_rend[p] = NULL; + rxvt_blank_screen_mem(aR_ R->swap.text, R->swap.rend, + p, setrstyle); + rxvt_blank_screen_mem(aR_ R->drawn_text, R->drawn_rend, + p, setrstyle); + } + if (k > 0) { + rxvt_scroll_text(aR_ 0, (int)nrow - 1, -k, 1); + R->screen.cur.row += k; + R->screen.s_cur.row += k; + R->TermWin.nscrolled -= k; + } #ifdef DEBUG_STRICT - assert(R->screen.cur.row < R->TermWin.nrow); - assert(R->swap.cur.row < R->TermWin.nrow); -#else /* drive with your eyes closed */ - MIN_IT(R->screen.cur.row, nrow - 1); - MIN_IT(R->swap.cur.row, nrow - 1); + assert(R->screen.cur.row < R->TermWin.nrow); + assert(R->swap.cur.row < R->TermWin.nrow); +#else /* drive with your eyes closed */ + MIN_IT(R->screen.cur.row, nrow - 1); + MIN_IT(R->swap.cur.row, nrow - 1); #endif - } + } /* B2: resize columns */ - if (ncol != prev_ncol) { - for (p = 0; p < total_rows; p++) { - if (R->screen.text[p]) { - R->screen.text[p] = (text_t *)rxvt_realloc(R->screen.text[p], ncol * sizeof(text_t)); - R->screen.rend[p] = (rend_t *)rxvt_realloc(R->screen.rend[p], ncol * sizeof(rend_t)); - MIN_IT(R->screen.tlen[p], (int16_t)ncol); - if (ncol > prev_ncol) - rxvt_blank_line(aR_ + if (ncol != prev_ncol) { + for (p = 0; p < total_rows; p++) { + if (R->screen.text[p]) { + R->screen.text[p] = (text_t *)rxvt_realloc(R->screen.text[p], ncol * sizeof(text_t)); + R->screen.rend[p] = (rend_t *)rxvt_realloc(R->screen.rend[p], ncol * sizeof(rend_t)); + MIN_IT(R->screen.tlen[p], (int16_t)ncol); + if (ncol > prev_ncol) + rxvt_blank_line(aR_ &(R->screen.text[p][prev_ncol]), - &(R->screen.rend[p][prev_ncol]), - ncol - prev_ncol, - setrstyle); - } - } - for (p = 0; p < nrow; p++) { - R->drawn_text[p] = (text_t *)rxvt_realloc(R->drawn_text[p], ncol * sizeof(text_t)); - R->drawn_rend[p] = (rend_t *)rxvt_realloc(R->drawn_rend[p], ncol * sizeof(rend_t)); - if (R->swap.text[p]) { - R->swap.text[p] = (text_t *)rxvt_realloc(R->swap.text[p], ncol * sizeof(text_t)); - R->swap.rend[p] = (rend_t *)rxvt_realloc(R->swap.rend[p], ncol * sizeof(rend_t)); - MIN_IT(R->swap.tlen[p], (int16_t)ncol); - if (ncol > prev_ncol) - rxvt_blank_line(aR_ + &(R->screen.rend[p][prev_ncol]), + ncol - prev_ncol, + setrstyle); + } + } + for (p = 0; p < nrow; p++) { + R->drawn_text[p] = (text_t *)rxvt_realloc(R->drawn_text[p], ncol * sizeof(text_t)); + R->drawn_rend[p] = (rend_t *)rxvt_realloc(R->drawn_rend[p], ncol * sizeof(rend_t)); + if (R->swap.text[p]) { + R->swap.text[p] = (text_t *)rxvt_realloc(R->swap.text[p], ncol * sizeof(text_t)); + R->swap.rend[p] = (rend_t *)rxvt_realloc(R->swap.rend[p], ncol * sizeof(rend_t)); + MIN_IT(R->swap.tlen[p], (int16_t)ncol); + if (ncol > prev_ncol) + rxvt_blank_line(aR_ &(R->swap.text[p][prev_ncol]), - &(R->swap.rend[p][prev_ncol]), - ncol - prev_ncol, setrstyle); - } - if (ncol > prev_ncol) - rxvt_blank_line(aR_ + &(R->swap.rend[p][prev_ncol]), + ncol - prev_ncol, setrstyle); + } + if (ncol > prev_ncol) + rxvt_blank_line(aR_ &(R->drawn_text[p][prev_ncol]), - &(R->drawn_rend[p][prev_ncol]), - ncol - prev_ncol, setrstyle); - } - MIN_IT(R->screen.cur.col, (int16_t)ncol - 1); - MIN_IT(R->swap.cur.col, (int16_t)ncol - 1); - } - if (R->tabs) - free(R->tabs); + &(R->drawn_rend[p][prev_ncol]), + ncol - prev_ncol, setrstyle); + } + MIN_IT(R->screen.cur.col, (int16_t)ncol - 1); + MIN_IT(R->swap.cur.col, (int16_t)ncol - 1); + } + if (R->tabs) + free(R->tabs); } R->tabs = (char *)rxvt_malloc(ncol * sizeof(char)); for (p = 0; p < ncol; p++) - R->tabs[p] = (p % TABSIZE == 0) ? 1 : 0; + R->tabs[p] = (p % TABSIZE == 0) ? 1 : 0; R->prev_nrow = nrow; R->prev_ncol = ncol; @@ -405,19 +405,19 @@ rxvt_scr_release(pR) total_rows = R->TermWin.nrow + R->TermWin.saveLines; for (i = 0; i < total_rows; i++) { - if (R->screen.text[i]) { /* then so is R->screen.rend[i] */ - free(R->screen.text[i]); + if (R->screen.text[i]) { /* then so is R->screen.rend[i] */ + free(R->screen.text[i]); #ifdef DEBUG_STRICT - assert(R->screen.rend[i]); + assert(R->screen.rend[i]); #endif - free(R->screen.rend[i]); - } + free(R->screen.rend[i]); + } } for (i = 0; i < R->TermWin.nrow; i++) { - free(R->drawn_text[i]); - free(R->drawn_rend[i]); - free(R->swap.text[i]); - free(R->swap.rend[i]); + free(R->drawn_text[i]); + free(R->drawn_rend[i]); + free(R->swap.text[i]); + free(R->swap.rend[i]); } free(R->screen.text); free(R->screen.tlen); @@ -479,28 +479,28 @@ rxvt_scr_cursor(pR_ int mode) #if NSCREENS && !defined(NO_SECONDARY_SCREEN_CURSOR) if (R->current_screen == SECONDARY) - s = &(R->swap); + s = &(R->swap); else #endif - s = &(R->screen); + s = &(R->screen); switch (mode) { case SAVE: - s->s_cur.row = s->cur.row; - s->s_cur.col = s->cur.col; - s->s_rstyle = R->rstyle; - s->s_charset = s->charset; - s->s_charset_char = R->charsets[s->charset]; - break; + s->s_cur.row = s->cur.row; + s->s_cur.col = s->cur.col; + s->s_rstyle = R->rstyle; + s->s_charset = s->charset; + s->s_charset_char = R->charsets[s->charset]; + break; case RESTORE: - R->want_refresh = 1; - s->cur.row = s->s_cur.row; - s->cur.col = s->s_cur.col; - s->flags &= ~Screen_WrapNext; - R->rstyle = s->s_rstyle; - s->charset = s->s_charset; - R->charsets[s->charset] = s->s_charset_char; - rxvt_set_font_style(aR); - break; + R->want_refresh = 1; + s->cur.row = s->s_cur.row; + s->cur.col = s->s_cur.col; + s->flags &= ~Screen_WrapNext; + R->rstyle = s->s_rstyle; + s->charset = s->s_charset; + R->charsets[s->charset] = s->s_charset_char; + rxvt_set_font_style(aR); + break; } /* boundary check in case screen size changed between SAVE and RESTORE */ MIN_IT(s->cur.row, R->TermWin.nrow - 1); @@ -508,7 +508,7 @@ rxvt_scr_cursor(pR_ int mode) #ifdef DEBUG_STRICT assert(s->cur.row >= 0); assert(s->cur.col >= 0); -#else /* drive with your eyes closed */ +#else /* drive with your eyes closed */ MAX_IT(s->cur.row, 0); MAX_IT(s->cur.col, 0); #endif @@ -537,25 +537,25 @@ rxvt_scr_change_screen(pR_ int scrn) RESET_CHSTAT(R); if (R->current_screen == scrn) - return R->current_screen; + return R->current_screen; - rxvt_selection_check(aR_ 2); /* check for boundary cross */ + rxvt_selection_check(aR_ 2); /* check for boundary cross */ SWAP_IT(R->current_screen, scrn, int); #if NSCREENS R->num_scr = 0; offset = R->TermWin.saveLines; for (i = R->prev_nrow; i--;) { - SWAP_IT(R->screen.text[i + offset], R->swap.text[i], text_t *); - SWAP_IT(R->screen.tlen[i + offset], R->swap.tlen[i], int16_t); - SWAP_IT(R->screen.rend[i + offset], R->swap.rend[i], rend_t *); + SWAP_IT(R->screen.text[i + offset], R->swap.text[i], text_t *); + SWAP_IT(R->screen.tlen[i + offset], R->swap.tlen[i], int16_t); + SWAP_IT(R->screen.rend[i + offset], R->swap.rend[i], rend_t *); } SWAP_IT(R->screen.cur.row, R->swap.cur.row, int16_t); SWAP_IT(R->screen.cur.col, R->swap.cur.col, int16_t); # ifdef DEBUG_STRICT assert((R->screen.cur.row >= 0) && (R->screen.cur.row < R->prev_nrow)); assert((R->screen.cur.col >= 0) && (R->screen.cur.col < R->prev_ncol)); -# else /* drive with your eyes closed */ +# else /* drive with your eyes closed */ MAX_IT(R->screen.cur.row, 0); MIN_IT(R->screen.cur.row, (int32_t)R->prev_nrow - 1); MAX_IT(R->screen.cur.col, 0); @@ -569,22 +569,22 @@ rxvt_scr_change_screen(pR_ int scrn) # ifdef RXVT_GRAPHICS if (rxvt_Gr_Displayed(aR)) { - rxvt_Gr_scroll(aR_ 0); - rxvt_Gr_ChangeScreen(aR); + rxvt_Gr_scroll(aR_ 0); + rxvt_Gr_ChangeScreen(aR); } # endif #else # ifdef SCROLL_ON_NO_SECONDARY # ifdef RXVT_GRAPHICS if (rxvt_Gr_Displayed(aR)) - rxvt_Gr_ClearScreen(aR); + rxvt_Gr_ClearScreen(aR); # endif if (R->current_screen == PRIMARY # ifdef RXVT_GRAPHICS && !rxvt_Gr_Displayed(aR) # endif ) - rxvt_scroll_text(aR_ 0, (R->prev_nrow - 1), R->prev_nrow, 0); + rxvt_scroll_text(aR_ 0, (R->prev_nrow - 1), R->prev_nrow, 0); # endif #endif return scrn; @@ -600,9 +600,9 @@ rxvt_scr_color(pR_ unsigned int color, int fgbg) { color &= RS_fgMask; if (fgbg == Color_fg) - R->rstyle = SET_FGCOLOR(R->rstyle, color); + R->rstyle = SET_FGCOLOR(R->rstyle, color); else - R->rstyle = SET_BGCOLOR(R->rstyle, color); + R->rstyle = SET_BGCOLOR(R->rstyle, color); } /* ------------------------------------------------------------------------- */ @@ -614,11 +614,11 @@ void rxvt_scr_rendition(pR_ int set, int style) { if (set) - R->rstyle |= style; + R->rstyle |= style; else if (style == ~RS_None) - R->rstyle = DEFAULT_RSTYLE; + R->rstyle = DEFAULT_RSTYLE; else - R->rstyle &= ~style; + R->rstyle &= ~style; } /* ------------------------------------------------------------------------- */ @@ -636,49 +636,49 @@ rxvt_scroll_text(pR_ int row1, int row2, int count, int spec) long nscrolled; if (count == 0 || (row1 > row2)) - return 0; + return 0; R->want_refresh = 1; D_SCREEN((stderr, "rxvt_scroll_text(%d,%d,%d,%d): %s", row1, row2, count, spec, (R->current_screen == PRIMARY) ? "Primary" : "Secondary")); if ((count > 0) && (row1 == 0) && (R->current_screen == PRIMARY)) { - nscrolled = (long)R->TermWin.nscrolled + (long)count;; - if (nscrolled > (long)R->TermWin.saveLines) - R->TermWin.nscrolled = R->TermWin.saveLines; - else - R->TermWin.nscrolled = (uint16_t)nscrolled; - if ((R->Options & Opt_scrollWithBuffer) - && R->TermWin.view_start != 0 - && R->TermWin.view_start != R->TermWin.saveLines) - rxvt_scr_page(aR_ UP, count); + nscrolled = (long)R->TermWin.nscrolled + (long)count;; + if (nscrolled > (long)R->TermWin.saveLines) + R->TermWin.nscrolled = R->TermWin.saveLines; + else + R->TermWin.nscrolled = (uint16_t)nscrolled; + if ((R->Options & Opt_scrollWithBuffer) + && R->TermWin.view_start != 0 + && R->TermWin.view_start != R->TermWin.saveLines) + rxvt_scr_page(aR_ UP, count); } else if (!spec) - row1 += R->TermWin.saveLines; + row1 += R->TermWin.saveLines; row2 += R->TermWin.saveLines; if (R->selection.op && R->current_screen == R->selection.screen) { - i = R->selection.beg.row + R->TermWin.saveLines; - j = R->selection.end.row + R->TermWin.saveLines; - if ((i < row1 && j > row1) - || (i < row2 && j > row2) - || (i - count < row1 && i >= row1) - || (i - count > row2 && i <= row2) - || (j - count < row1 && j >= row1) - || (j - count > row2 && j <= row2)) { - CLEAR_ALL_SELECTION(R); - R->selection.op = SELECTION_CLEAR; /* XXX: too aggressive? */ - } else if (j >= row1 && j <= row2) { - /* move selected region too */ - R->selection.beg.row -= count; - R->selection.end.row -= count; - R->selection.mark.row -= count; - } + i = R->selection.beg.row + R->TermWin.saveLines; + j = R->selection.end.row + R->TermWin.saveLines; + if ((i < row1 && j > row1) + || (i < row2 && j > row2) + || (i - count < row1 && i >= row1) + || (i - count > row2 && i <= row2) + || (j - count < row1 && j >= row1) + || (j - count > row2 && j <= row2)) { + CLEAR_ALL_SELECTION(R); + R->selection.op = SELECTION_CLEAR; /* XXX: too aggressive? */ + } else if (j >= row1 && j <= row2) { + /* move selected region too */ + R->selection.beg.row -= count; + R->selection.end.row -= count; + R->selection.mark.row -= count; + } } - rxvt_selection_check(aR_ 0); /* _after_ R->TermWin.nscrolled update */ + rxvt_selection_check(aR_ 0); /* _after_ R->TermWin.nscrolled update */ R->num_scr += count; j = count; if (count < 0) - count = -count; + count = -count; i = row2 - row1 + 1; MIN_IT(count, i); @@ -686,48 +686,48 @@ rxvt_scroll_text(pR_ int row1, int row2, int count, int spec) /* A: scroll up */ /* A1: Copy lines that will get clobbered by the rotation */ - for (i = 0, j = row1; i < count; i++, j++) { - R->buf_text[i] = R->screen.text[j]; - R->buf_rend[i] = R->screen.rend[j]; - } + for (i = 0, j = row1; i < count; i++, j++) { + R->buf_text[i] = R->screen.text[j]; + R->buf_rend[i] = R->screen.rend[j]; + } /* A2: Rotate lines */ - for (j = row1, i = j + count; i <= row2; i++, j++) { - R->screen.tlen[j] = R->screen.tlen[i]; - R->screen.text[j] = R->screen.text[i]; - R->screen.rend[j] = R->screen.rend[i]; - } - j = row2 - count + 1, i = count; + for (j = row1, i = j + count; i <= row2; i++, j++) { + R->screen.tlen[j] = R->screen.tlen[i]; + R->screen.text[j] = R->screen.text[i]; + R->screen.rend[j] = R->screen.rend[i]; + } + j = row2 - count + 1, i = count; } else /* if (j < 0) */ { /* B: scroll down */ /* B1: Copy lines that will get clobbered by the rotation */ - for (i = 0, j = row2; i < count; i++, j--) { - R->buf_text[i] = R->screen.text[j]; - R->buf_rend[i] = R->screen.rend[j]; - } + for (i = 0, j = row2; i < count; i++, j--) { + R->buf_text[i] = R->screen.text[j]; + R->buf_rend[i] = R->screen.rend[j]; + } /* B2: Rotate lines */ - for (j = row2, i = j - count; i >= row1; i--, j--) { - R->screen.tlen[j] = R->screen.tlen[i]; - R->screen.text[j] = R->screen.text[i]; - R->screen.rend[j] = R->screen.rend[i]; - } - j = row1, i = count; - count = -count; + for (j = row2, i = j - count; i >= row1; i--, j--) { + R->screen.tlen[j] = R->screen.tlen[i]; + R->screen.text[j] = R->screen.text[i]; + R->screen.rend[j] = R->screen.rend[i]; + } + j = row1, i = count; + count = -count; } /* C: Resurrect lines */ for (; i--; j++) { - R->screen.tlen[j] = 0; - R->screen.text[j] = R->buf_text[i]; - R->screen.rend[j] = R->buf_rend[i]; - if (!spec) /* line length may not equal TermWin.ncol */ - rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, - (unsigned int)j, R->rstyle); + R->screen.tlen[j] = 0; + R->screen.text[j] = R->buf_text[i]; + R->screen.rend[j] = R->buf_rend[i]; + if (!spec) /* line length may not equal TermWin.ncol */ + rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, + (unsigned int)j, R->rstyle); } #ifdef RXVT_GRAPHICS if (rxvt_Gr_Displayed(aR)) - rxvt_Gr_scroll(aR_ count); + rxvt_Gr_scroll(aR_ count); #endif return count; } @@ -746,8 +746,8 @@ rxvt_scr_add_lines(pR_ const uint32_t *str, int nlines, int len) text_t *stp; rend_t *srp; - if (len <= 0) /* sanity */ - return; + if (len <= 0) /* sanity */ + return; R->want_refresh = 1; last_col = R->TermWin.ncol; @@ -755,21 +755,21 @@ rxvt_scr_add_lines(pR_ const uint32_t *str, int nlines, int len) D_SCREEN((stderr, "rxvt_scr_add_lines(%d,%d)", nlines, len)); ZERO_SCROLLBACK(R); if (nlines > 0) { - nlines += (R->screen.cur.row - R->screen.bscroll); - if ((nlines > 0) - && (R->screen.tscroll == 0) - && (R->screen.bscroll == (R->TermWin.nrow - 1))) { - /* _at least_ this many lines need to be scrolled */ - rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, nlines, - 0); - R->screen.cur.row -= nlines; - } + nlines += (R->screen.cur.row - R->screen.bscroll); + if ((nlines > 0) + && (R->screen.tscroll == 0) + && (R->screen.bscroll == (R->TermWin.nrow - 1))) { + /* _at least_ this many lines need to be scrolled */ + rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, nlines, + 0); + R->screen.cur.row -= nlines; + } } #ifdef DEBUG_STRICT assert(R->screen.cur.col < last_col); assert((R->screen.cur.row < R->TermWin.nrow) - && (R->screen.cur.row >= -(int32_t)R->TermWin.nscrolled)); -#else /* drive with your eyes closed */ + && (R->screen.cur.row >= -(int32_t)R->TermWin.nscrolled)); +#else /* drive with your eyes closed */ MIN_IT(R->screen.cur.col, last_col - 1); MIN_IT(R->screen.cur.row, (int32_t)R->TermWin.nrow - 1); MAX_IT(R->screen.cur.row, -(int32_t)R->TermWin.nscrolled); @@ -777,62 +777,62 @@ rxvt_scr_add_lines(pR_ const uint32_t *str, int nlines, int len) row = R->screen.cur.row + R->TermWin.saveLines; checksel = (R->selection.op - && R->current_screen == R->selection.screen) ? 1 : 0; + && R->current_screen == R->selection.screen) ? 1 : 0; clearsel = 0; stp = R->screen.text[row]; srp = R->screen.rend[row]; for (i = 0; i < len;) { - c = str[i++]; - switch (c) { - case '\t': - rxvt_scr_tab(aR_ 1); - continue; - case '\n': - if (R->screen.tlen[row] != -1) /* XXX: think about this */ - MAX_IT(R->screen.tlen[row], R->screen.cur.col); - R->screen.flags &= ~Screen_WrapNext; - if (R->screen.cur.row == R->screen.bscroll) - rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, 1, 0); - else if (R->screen.cur.row < (R->TermWin.nrow - 1)) - row = (++R->screen.cur.row) + R->TermWin.saveLines; - stp = R->screen.text[row]; /* _must_ refresh */ - srp = R->screen.rend[row]; /* _must_ refresh */ - RESET_CHSTAT(R); - continue; - case '\r': - if (R->screen.tlen[row] != -1) /* XXX: think about this */ - MAX_IT(R->screen.tlen[row], R->screen.cur.col); - R->screen.flags &= ~Screen_WrapNext; - R->screen.cur.col = 0; - RESET_CHSTAT(R); - continue; - default: - if (c == 127) - continue; /* yummmm..... */ - break; - } - - if (checksel /* see if we're writing within selection */ - && !ROWCOL_IS_BEFORE(R->screen.cur, R->selection.beg) - && ROWCOL_IS_BEFORE(R->screen.cur, R->selection.end)) { - checksel = 0; - clearsel = 1; - } - if (R->screen.flags & Screen_WrapNext) { - R->screen.tlen[row] = -1; - if (R->screen.cur.row == R->screen.bscroll) - rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, 1, 0); - else if (R->screen.cur.row < (R->TermWin.nrow - 1)) - row = (++R->screen.cur.row) + R->TermWin.saveLines; - stp = R->screen.text[row]; /* _must_ refresh */ - srp = R->screen.rend[row]; /* _must_ refresh */ - R->screen.cur.col = 0; - R->screen.flags &= ~Screen_WrapNext; - } - if (R->screen.flags & Screen_Insert) - rxvt_scr_insdel_chars(aR_ 1, INSERT); + c = str[i++]; + switch (c) { + case '\t': + rxvt_scr_tab(aR_ 1); + continue; + case '\n': + if (R->screen.tlen[row] != -1) /* XXX: think about this */ + MAX_IT(R->screen.tlen[row], R->screen.cur.col); + R->screen.flags &= ~Screen_WrapNext; + if (R->screen.cur.row == R->screen.bscroll) + rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, 1, 0); + else if (R->screen.cur.row < (R->TermWin.nrow - 1)) + row = (++R->screen.cur.row) + R->TermWin.saveLines; + stp = R->screen.text[row]; /* _must_ refresh */ + srp = R->screen.rend[row]; /* _must_ refresh */ + RESET_CHSTAT(R); + continue; + case '\r': + if (R->screen.tlen[row] != -1) /* XXX: think about this */ + MAX_IT(R->screen.tlen[row], R->screen.cur.col); + R->screen.flags &= ~Screen_WrapNext; + R->screen.cur.col = 0; + RESET_CHSTAT(R); + continue; + default: + if (c == 127) + continue; /* yummmm..... */ + break; + } + + if (checksel /* see if we're writing within selection */ + && !ROWCOL_IS_BEFORE(R->screen.cur, R->selection.beg) + && ROWCOL_IS_BEFORE(R->screen.cur, R->selection.end)) { + checksel = 0; + clearsel = 1; + } + if (R->screen.flags & Screen_WrapNext) { + R->screen.tlen[row] = -1; + if (R->screen.cur.row == R->screen.bscroll) + rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, 1, 0); + else if (R->screen.cur.row < (R->TermWin.nrow - 1)) + row = (++R->screen.cur.row) + R->TermWin.saveLines; + stp = R->screen.text[row]; /* _must_ refresh */ + srp = R->screen.rend[row]; /* _must_ refresh */ + R->screen.cur.col = 0; + R->screen.flags &= ~Screen_WrapNext; + } + if (R->screen.flags & Screen_Insert) + rxvt_scr_insdel_chars(aR_ 1, INSERT); if (R->charsets[R->screen.charset] == '0') // DEC SPECIAL switch (c) @@ -852,8 +852,8 @@ rxvt_scr_add_lines(pR_ const uint32_t *str, int nlines, int len) rend_t rend = SET_FONT (R->rstyle, R->TermWin.fontset->find_font (c)); - stp[R->screen.cur.col] = c; - srp[R->screen.cur.col] = rend; + stp[R->screen.cur.col] = c; + srp[R->screen.cur.col] = rend; if (c > 255) { @@ -874,16 +874,16 @@ rxvt_scr_add_lines(pR_ const uint32_t *str, int nlines, int len) } } - if (R->screen.cur.col < last_col - 1) - R->screen.cur.col++; - else { - R->screen.tlen[row] = last_col; - if (R->screen.flags & Screen_Autowrap) - R->screen.flags |= Screen_WrapNext; - } + if (R->screen.cur.col < last_col - 1) + R->screen.cur.col++; + else { + R->screen.tlen[row] = last_col; + if (R->screen.flags & Screen_Autowrap) + R->screen.flags |= Screen_WrapNext; + } } - if (R->screen.tlen[row] != -1) /* XXX: think about this */ - MAX_IT(R->screen.tlen[row], R->screen.cur.col); + if (R->screen.tlen[row] != -1) /* XXX: think about this */ + MAX_IT(R->screen.tlen[row], R->screen.cur.col); /* * If we wrote anywhere in the selected area, kill the selection @@ -891,11 +891,11 @@ rxvt_scr_add_lines(pR_ const uint32_t *str, int nlines, int len) * should be a similar check. */ if (clearsel) - CLEAR_SELECTION(R); + CLEAR_SELECTION(R); #ifdef DEBUG_STRICT assert(R->screen.cur.row >= 0); -#else /* drive with your eyes closed */ +#else /* drive with your eyes closed */ MAX_IT(R->screen.cur.row, 0); #endif } @@ -912,15 +912,15 @@ rxvt_scr_backspace(pR) RESET_CHSTAT(R); R->want_refresh = 1; if (R->screen.cur.col == 0) { - if (R->screen.cur.row > 0) { + if (R->screen.cur.row > 0) { #ifdef TERMCAP_HAS_BW - R->screen.cur.col = R->TermWin.ncol - 1; - R->screen.cur.row--; - return; + R->screen.cur.col = R->TermWin.ncol - 1; + R->screen.cur.row--; + return; #endif - } + } } else if ((R->screen.flags & Screen_WrapNext) == 0) - rxvt_scr_gotorc(aR_ 0, -1, RELATIVE); + rxvt_scr_gotorc(aR_ 0, -1, RELATIVE); R->screen.flags &= ~Screen_WrapNext; } @@ -941,28 +941,28 @@ rxvt_scr_tab(pR_ int count) RESET_CHSTAT(R); i = x = R->screen.cur.col; if (count == 0) - return; + return; else if (count > 0) { - for (; ++i < R->TermWin.ncol; ) - if (R->tabs[i]) { - x = i; - if (!--count) - break; - } - if (count) - x = R->TermWin.ncol - 1; + for (; ++i < R->TermWin.ncol; ) + if (R->tabs[i]) { + x = i; + if (!--count) + break; + } + if (count) + x = R->TermWin.ncol - 1; } else /* if (count < 0) */ { - for (; --i >= 0; ) - if (R->tabs[i]) { - x = i; - if (!++count) - break; - } - if (count) - x = 0; + for (; --i >= 0; ) + if (R->tabs[i]) { + x = i; + if (!++count) + break; + } + if (count) + x = 0; } if (x != R->screen.cur.col) - rxvt_scr_gotorc(aR_ 0, x, R_RELATIVE); + rxvt_scr_gotorc(aR_ 0, x, R_RELATIVE); } /* ------------------------------------------------------------------------- */ @@ -978,11 +978,11 @@ void rxvt_scr_backindex(pR) { if (R->screen.cur.col > 0) - rxvt_scr_gotorc(aR_ 0, -1, R_RELATIVE | C_RELATIVE); + rxvt_scr_gotorc(aR_ 0, -1, R_RELATIVE | C_RELATIVE); else { - if (R->screen.tlen[R->screen.cur.row + R->TermWin.saveLines] == 0) - return; /* um, yeah? */ - rxvt_scr_insdel_chars(aR_ 1, INSERT); + if (R->screen.tlen[R->screen.cur.row + R->TermWin.saveLines] == 0) + return; /* um, yeah? */ + rxvt_scr_insdel_chars(aR_ 1, INSERT); } } #endif @@ -1001,16 +1001,16 @@ rxvt_scr_forwardindex(pR) int row; if (R->screen.cur.col < R->TermWin.ncol - 1) - rxvt_scr_gotorc(aR_ 0, 1, R_RELATIVE | C_RELATIVE); + rxvt_scr_gotorc(aR_ 0, 1, R_RELATIVE | C_RELATIVE); else { - row = R->screen.cur.row + R->TermWin.saveLines; - if (R->screen.tlen[row] == 0) - return; /* um, yeah? */ - else if (R->screen.tlen[row] == -1) - R->screen.tlen[row] = R->TermWin.ncol; - rxvt_scr_gotorc(aR_ 0, 0, R_RELATIVE); - rxvt_scr_insdel_chars(aR_ 1, DELETE); - rxvt_scr_gotorc(aR_ 0, R->TermWin.ncol - 1, R_RELATIVE); + row = R->screen.cur.row + R->TermWin.saveLines; + if (R->screen.tlen[row] == 0) + return; /* um, yeah? */ + else if (R->screen.tlen[row] == -1) + R->screen.tlen[row] = R->TermWin.ncol; + rxvt_scr_gotorc(aR_ 0, 0, R_RELATIVE); + rxvt_scr_insdel_chars(aR_ 1, DELETE); + rxvt_scr_gotorc(aR_ 0, R->TermWin.ncol - 1, R_RELATIVE); } } #endif @@ -1028,37 +1028,37 @@ rxvt_scr_gotorc(pR_ int row, int col, int relative) RESET_CHSTAT(R); #ifdef RXVT_GRAPHICS if (rxvt_Gr_Displayed(aR)) - rxvt_Gr_scroll(aR_ 0); + rxvt_Gr_scroll(aR_ 0); #endif D_SCREEN((stderr, "rxvt_scr_gotorc(r:%s%d,c:%s%d): from (r:%d,c:%d)", (relative & R_RELATIVE ? "+" : ""), row, (relative & C_RELATIVE ? "+" : ""), col, R->screen.cur.row, R->screen.cur.col)); R->screen.cur.col = ((relative & C_RELATIVE) ? (R->screen.cur.col + col) - : col); + : col); MAX_IT(R->screen.cur.col, 0); MIN_IT(R->screen.cur.col, (int32_t)R->TermWin.ncol - 1); R->screen.flags &= ~Screen_WrapNext; if (relative & R_RELATIVE) { - if (row > 0) { - if (R->screen.cur.row <= R->screen.bscroll - && (R->screen.cur.row + row) > R->screen.bscroll) - R->screen.cur.row = R->screen.bscroll; - else - R->screen.cur.row += row; - } else if (row < 0) { - if (R->screen.cur.row >= R->screen.tscroll - && (R->screen.cur.row + row) < R->screen.tscroll) - R->screen.cur.row = R->screen.tscroll; - else - R->screen.cur.row += row; - } + if (row > 0) { + if (R->screen.cur.row <= R->screen.bscroll + && (R->screen.cur.row + row) > R->screen.bscroll) + R->screen.cur.row = R->screen.bscroll; + else + R->screen.cur.row += row; + } else if (row < 0) { + if (R->screen.cur.row >= R->screen.tscroll + && (R->screen.cur.row + row) < R->screen.tscroll) + R->screen.cur.row = R->screen.tscroll; + else + R->screen.cur.row += row; + } } else { - if (R->screen.flags & Screen_Relative) { /* relative origin mode */ - R->screen.cur.row = row + R->screen.tscroll; - MIN_IT(R->screen.cur.row, R->screen.bscroll); - } else - R->screen.cur.row = row; + if (R->screen.flags & Screen_Relative) { /* relative origin mode */ + R->screen.cur.row = row + R->screen.tscroll; + MIN_IT(R->screen.cur.row, R->screen.bscroll); + } else + R->screen.cur.row = row; } MAX_IT(R->screen.cur.row, 0); MIN_IT(R->screen.cur.row, (int32_t)R->TermWin.nrow - 1); @@ -1083,15 +1083,15 @@ rxvt_scr_index(pR_ enum page_dirn direction) #ifdef RXVT_GRAPHICS if (rxvt_Gr_Displayed(aR)) - rxvt_Gr_scroll(aR_ 0); + rxvt_Gr_scroll(aR_ 0); #endif R->screen.flags &= ~Screen_WrapNext; if ((R->screen.cur.row == R->screen.bscroll && direction == UP) - || (R->screen.cur.row == R->screen.tscroll && direction == DN)) - rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, dirn, 0); + || (R->screen.cur.row == R->screen.tscroll && direction == DN)) + rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, dirn, 0); else - R->screen.cur.row += dirn; + R->screen.cur.row += dirn; MAX_IT(R->screen.cur.row, 0); MIN_IT(R->screen.cur.row, (int32_t)R->TermWin.nrow - 1); rxvt_selection_check(aR_ 0); @@ -1117,7 +1117,7 @@ rxvt_scr_erase_line(pR_ int mode) #ifdef RXVT_GRAPHICS if (rxvt_Gr_Displayed(aR)) - rxvt_Gr_scroll(aR_ 0); + rxvt_Gr_scroll(aR_ 0); #endif rxvt_selection_check(aR_ 1); @@ -1126,39 +1126,39 @@ rxvt_scr_erase_line(pR_ int mode) row = R->TermWin.saveLines + R->screen.cur.row; switch (mode) { - case 0: /* erase to end of line */ - col = R->screen.cur.col; - num = R->TermWin.ncol - col; - MIN_IT(R->screen.tlen[row], (int16_t)col); - if (ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur) - || ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.end, R->screen.cur)) - CLEAR_SELECTION(R); - break; - case 1: /* erase to beginning of line */ - col = 0; - num = R->screen.cur.col + 1; - if (ROWCOL_IN_ROW_AT_OR_BEFORE(R->selection.beg, R->screen.cur) - || ROWCOL_IN_ROW_AT_OR_BEFORE(R->selection.end, R->screen.cur)) - CLEAR_SELECTION(R); - break; - case 2: /* erase whole line */ - col = 0; - num = R->TermWin.ncol; - R->screen.tlen[row] = 0; - if (R->selection.beg.row <= R->screen.cur.row - && R->selection.end.row >= R->screen.cur.row) - CLEAR_SELECTION(R); - break; + case 0: /* erase to end of line */ + col = R->screen.cur.col; + num = R->TermWin.ncol - col; + MIN_IT(R->screen.tlen[row], (int16_t)col); + if (ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur) + || ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.end, R->screen.cur)) + CLEAR_SELECTION(R); + break; + case 1: /* erase to beginning of line */ + col = 0; + num = R->screen.cur.col + 1; + if (ROWCOL_IN_ROW_AT_OR_BEFORE(R->selection.beg, R->screen.cur) + || ROWCOL_IN_ROW_AT_OR_BEFORE(R->selection.end, R->screen.cur)) + CLEAR_SELECTION(R); + break; + case 2: /* erase whole line */ + col = 0; + num = R->TermWin.ncol; + R->screen.tlen[row] = 0; + if (R->selection.beg.row <= R->screen.cur.row + && R->selection.end.row >= R->screen.cur.row) + CLEAR_SELECTION(R); + break; default: - return; + return; } if (R->screen.text[row]) - rxvt_blank_line(aR_ + rxvt_blank_line(aR_ &(R->screen.text[row][col]), - &(R->screen.rend[row][col]), num, R->rstyle); + &(R->screen.rend[row][col]), num, R->rstyle); else - rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, row, - R->rstyle); + rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, row, + R->rstyle); } /* ------------------------------------------------------------------------- */ @@ -1184,58 +1184,58 @@ rxvt_scr_erase_screen(pR_ int mode) row_offset = (int32_t)R->TermWin.saveLines; switch (mode) { - case 0: /* erase to end of screen */ - rxvt_selection_check(aR_ 1); - rxvt_scr_erase_line(aR_ 0); - row = R->screen.cur.row + 1; /* possible OOB */ - num = R->TermWin.nrow - row; - break; - case 1: /* erase to beginning of screen */ - rxvt_selection_check(aR_ 3); - rxvt_scr_erase_line(aR_ 1); - row = 0; - num = R->screen.cur.row; - break; - case 2: /* erase whole screen */ - rxvt_selection_check(aR_ 3); + case 0: /* erase to end of screen */ + rxvt_selection_check(aR_ 1); + rxvt_scr_erase_line(aR_ 0); + row = R->screen.cur.row + 1; /* possible OOB */ + num = R->TermWin.nrow - row; + break; + case 1: /* erase to beginning of screen */ + rxvt_selection_check(aR_ 3); + rxvt_scr_erase_line(aR_ 1); + row = 0; + num = R->screen.cur.row; + break; + case 2: /* erase whole screen */ + rxvt_selection_check(aR_ 3); #ifdef RXVT_GRAPHICS - rxvt_Gr_ClearScreen(aR); + rxvt_Gr_ClearScreen(aR); #endif - row = 0; - num = R->TermWin.nrow; - break; + row = 0; + num = R->TermWin.nrow; + break; default: - return; + return; } R->refresh_type |= REFRESH_BOUNDS; if (R->selection.op && R->current_screen == R->selection.screen - && ((R->selection.beg.row >= row && R->selection.beg.row <= row + num) - || (R->selection.end.row >= row - && R->selection.end.row <= row + num))) - CLEAR_SELECTION(R); - if (row >= R->TermWin.nrow) /* Out Of Bounds */ - return; + && ((R->selection.beg.row >= row && R->selection.beg.row <= row + num) + || (R->selection.end.row >= row + && R->selection.end.row <= row + num))) + CLEAR_SELECTION(R); + if (row >= R->TermWin.nrow) /* Out Of Bounds */ + return; MIN_IT(num, (R->TermWin.nrow - row)); if (R->rstyle & (RS_RVid | RS_Uline)) - ren = (rend_t) ~RS_None; + ren = (rend_t) ~RS_None; else if (GET_BASEBG(R->rstyle) == Color_bg) { - ren = DEFAULT_RSTYLE; - CLEAR_ROWS(row, num); + ren = DEFAULT_RSTYLE; + CLEAR_ROWS(row, num); } else { - ren = (R->rstyle & (RS_fgMask | RS_bgMask)); - gcvalue.foreground = R->PixColors[GET_BGCOLOR(R->rstyle)]; - XChangeGC(R->Xdisplay, R->TermWin.gc, GCForeground, &gcvalue); - ERASE_ROWS(row, num); - gcvalue.foreground = R->PixColors[Color_fg]; - XChangeGC(R->Xdisplay, R->TermWin.gc, GCForeground, &gcvalue); + ren = (R->rstyle & (RS_fgMask | RS_bgMask)); + gcvalue.foreground = R->PixColors[GET_BGCOLOR(R->rstyle)]; + XChangeGC(R->Xdisplay, R->TermWin.gc, GCForeground, &gcvalue); + ERASE_ROWS(row, num); + gcvalue.foreground = R->PixColors[Color_fg]; + XChangeGC(R->Xdisplay, R->TermWin.gc, GCForeground, &gcvalue); } for (; num--; row++) { - rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, - (unsigned int)(row + row_offset), R->rstyle); - R->screen.tlen[row + row_offset] = 0; - rxvt_blank_line(aR_ + rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, + (unsigned int)(row + row_offset), R->rstyle); + R->screen.tlen[row + row_offset] = 0; + rxvt_blank_line(aR_ R->drawn_text[row], R->drawn_rend[row], - (unsigned int)R->TermWin.ncol, ren); + (unsigned int)R->TermWin.ncol, ren); } } @@ -1259,10 +1259,10 @@ rxvt_scr_E(pR) fs = SET_FONT (R->rstyle, R->TermWin.fontset->find_font ('E')); for (k = R->TermWin.saveLines, i = R->TermWin.nrow; i--; k++) { - R->screen.tlen[k] = R->TermWin.ncol; /* make the `E's selectable */ - fill_text (R->screen.text[k], 'E', R->TermWin.ncol); - for (r1 = R->screen.rend[k], j = R->TermWin.ncol; j--; ) - *r1++ = fs; + R->screen.tlen[k] = R->TermWin.ncol; /* make the `E's selectable */ + fill_text (R->screen.text[k], 'E', R->TermWin.ncol); + for (r1 = R->screen.rend[k], j = R->TermWin.ncol; j--; ) + *r1++ = fs; } } @@ -1281,25 +1281,25 @@ rxvt_scr_insdel_lines(pR_ int count, int insdel) #ifdef RXVT_GRAPHICS if (rxvt_Gr_Displayed(aR)) - rxvt_Gr_scroll(aR_ 0); + rxvt_Gr_scroll(aR_ 0); #endif rxvt_selection_check(aR_ 1); if (R->screen.cur.row > R->screen.bscroll) - return; + return; end = R->screen.bscroll - R->screen.cur.row + 1; if (count > end) { - if (insdel == DELETE) - return; - else if (insdel == INSERT) - count = end; + if (insdel == DELETE) + return; + else if (insdel == INSERT) + count = end; } R->screen.flags &= ~Screen_WrapNext; rxvt_scroll_text(aR_ R->screen.cur.row, R->screen.bscroll, insdel * count, - 0); + 0); } /* ------------------------------------------------------------------------- */ @@ -1324,11 +1324,11 @@ rxvt_scr_insdel_chars(pR_ int count, int insdel) #ifdef RXVT_GRAPHICS if (rxvt_Gr_Displayed(aR)) - rxvt_Gr_scroll(aR_ 0); + rxvt_Gr_scroll(aR_ 0); #endif if (count <= 0) - return; + return; rxvt_selection_check(aR_ 1); MIN_IT(count, (R->TermWin.ncol - R->screen.cur.col)); @@ -1341,65 +1341,65 @@ rxvt_scr_insdel_chars(pR_ int count, int insdel) slp = &(R->screen.tlen[row]); switch (insdel) { case INSERT: - for (col = R->TermWin.ncol - 1; (col - count) >= R->screen.cur.col; - col--) { - stp[col] = stp[col - count]; - srp[col] = srp[col - count]; - } - if (*slp != -1) { - *slp += count; - MIN_IT(*slp, R->TermWin.ncol); - } - if (R->selection.op && R->current_screen == R->selection.screen - && ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)) { - if (R->selection.end.row != R->screen.cur.row - || (R->selection.end.col + count >= R->TermWin.ncol)) - CLEAR_SELECTION(R); - else { /* shift selection */ - R->selection.beg.col += count; - R->selection.mark.col += count; /* XXX: yes? */ - R->selection.end.col += count; - } - } - rxvt_blank_line(aR_ &(stp[R->screen.cur.col]), &(srp[R->screen.cur.col]), - (unsigned int)count, R->rstyle); - break; + for (col = R->TermWin.ncol - 1; (col - count) >= R->screen.cur.col; + col--) { + stp[col] = stp[col - count]; + srp[col] = srp[col - count]; + } + if (*slp != -1) { + *slp += count; + MIN_IT(*slp, R->TermWin.ncol); + } + if (R->selection.op && R->current_screen == R->selection.screen + && ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)) { + if (R->selection.end.row != R->screen.cur.row + || (R->selection.end.col + count >= R->TermWin.ncol)) + CLEAR_SELECTION(R); + else { /* shift selection */ + R->selection.beg.col += count; + R->selection.mark.col += count; /* XXX: yes? */ + R->selection.end.col += count; + } + } + rxvt_blank_line(aR_ &(stp[R->screen.cur.col]), &(srp[R->screen.cur.col]), + (unsigned int)count, R->rstyle); + break; case ERASE: - R->screen.cur.col += count; /* don't worry if > R->TermWin.ncol */ - rxvt_selection_check(aR_ 1); - R->screen.cur.col -= count; - rxvt_blank_line(aR_ &(stp[R->screen.cur.col]), &(srp[R->screen.cur.col]), - (unsigned int)count, R->rstyle); - break; + R->screen.cur.col += count; /* don't worry if > R->TermWin.ncol */ + rxvt_selection_check(aR_ 1); + R->screen.cur.col -= count; + rxvt_blank_line(aR_ &(stp[R->screen.cur.col]), &(srp[R->screen.cur.col]), + (unsigned int)count, R->rstyle); + break; case DELETE: - tr = srp[R->TermWin.ncol - 1] - & (RS_fgMask | RS_bgMask | RS_baseattrMask); - for (col = R->screen.cur.col; (col + count) < R->TermWin.ncol; col++) { - stp[col] = stp[col + count]; - srp[col] = srp[col + count]; - } - rxvt_blank_line(aR_ + tr = srp[R->TermWin.ncol - 1] + & (RS_fgMask | RS_bgMask | RS_baseattrMask); + for (col = R->screen.cur.col; (col + count) < R->TermWin.ncol; col++) { + stp[col] = stp[col + count]; + srp[col] = srp[col + count]; + } + rxvt_blank_line(aR_ &(stp[R->TermWin.ncol - count]), - &(srp[R->TermWin.ncol - count]), - (unsigned int)count, tr); - if (*slp == -1) /* break line continuation */ - *slp = R->TermWin.ncol; - *slp -= count; - MAX_IT(*slp, 0); - if (R->selection.op && R->current_screen == R->selection.screen - && ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)) { - if (R->selection.end.row != R->screen.cur.row - || (R->screen.cur.col >= R->selection.beg.col - count) - || R->selection.end.col >= R->TermWin.ncol) - CLEAR_SELECTION(R); - else { - /* shift selection */ - R->selection.beg.col -= count; - R->selection.mark.col -= count; /* XXX: yes? */ - R->selection.end.col -= count; - } - } - break; + &(srp[R->TermWin.ncol - count]), + (unsigned int)count, tr); + if (*slp == -1) /* break line continuation */ + *slp = R->TermWin.ncol; + *slp -= count; + MAX_IT(*slp, 0); + if (R->selection.op && R->current_screen == R->selection.screen + && ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)) { + if (R->selection.end.row != R->screen.cur.row + || (R->screen.cur.col >= R->selection.beg.col - count) + || R->selection.end.col >= R->TermWin.ncol) + CLEAR_SELECTION(R); + else { + /* shift selection */ + R->selection.beg.col -= count; + R->selection.mark.col -= count; /* XXX: yes? */ + R->selection.end.col -= count; + } + } + break; } } @@ -1415,7 +1415,7 @@ rxvt_scr_scroll_region(pR_ int top, int bot) MAX_IT(top, 0); MIN_IT(bot, (int)R->TermWin.nrow - 1); if (top > bot) - return; + return; R->screen.tscroll = top; R->screen.bscroll = bot; rxvt_scr_gotorc(aR_ 0, 0, 0); @@ -1433,9 +1433,9 @@ rxvt_scr_cursor_visible(pR_ int mode) { R->want_refresh = 1; if (mode) - R->screen.flags |= Screen_VisibleCursor; + R->screen.flags |= Screen_VisibleCursor; else - R->screen.flags &= ~Screen_VisibleCursor; + R->screen.flags &= ~Screen_VisibleCursor; } /* ------------------------------------------------------------------------- */ @@ -1449,9 +1449,9 @@ void rxvt_scr_autowrap(pR_ int mode) { if (mode) - R->screen.flags |= Screen_Autowrap; + R->screen.flags |= Screen_Autowrap; else - R->screen.flags &= ~(Screen_Autowrap | Screen_WrapNext); + R->screen.flags &= ~(Screen_Autowrap | Screen_WrapNext); } /* ------------------------------------------------------------------------- */ @@ -1469,9 +1469,9 @@ void rxvt_scr_relative_origin(pR_ int mode) { if (mode) - R->screen.flags |= Screen_Relative; + R->screen.flags |= Screen_Relative; else - R->screen.flags &= ~Screen_Relative; + R->screen.flags &= ~Screen_Relative; rxvt_scr_gotorc(aR_ 0, 0, 0); } @@ -1486,9 +1486,9 @@ void rxvt_scr_insert_mode(pR_ int mode) { if (mode) - R->screen.flags |= Screen_Insert; + R->screen.flags |= Screen_Insert; else - R->screen.flags &= ~Screen_Insert; + R->screen.flags &= ~Screen_Insert; } /* ------------------------------------------------------------------------- */ @@ -1503,9 +1503,9 @@ void rxvt_scr_set_tab(pR_ int mode) { if (mode < 0) - MEMSET(R->tabs, 0, R->TermWin.ncol * sizeof(char)); + MEMSET(R->tabs, 0, R->TermWin.ncol * sizeof(char)); else if (R->screen.cur.col < R->TermWin.ncol) - R->tabs[R->screen.cur.col] = (mode ? 1 : 0); + R->tabs[R->screen.cur.col] = (mode ? 1 : 0); } /* ------------------------------------------------------------------------- */ @@ -1521,23 +1521,23 @@ rxvt_scr_rvideo_mode(pR_ int mode) XGCValues gcvalue; if (R->rvideo != mode) { - R->rvideo = mode; - SWAP_IT(R->PixColors[Color_fg], R->PixColors[Color_bg], rxvt_color); + R->rvideo = mode; + SWAP_IT(R->PixColors[Color_fg], R->PixColors[Color_bg], rxvt_color); #if defined(XPM_BACKGROUND) - if (R->bgPixmap.pixmap == None) + if (R->bgPixmap.pixmap == None) #endif #if defined(TRANSPARENT) - if (!(R->Options & Opt_transparent) || R->am_transparent == 0) + if (!(R->Options & Opt_transparent) || R->am_transparent == 0) #endif - XSetWindowBackground(R->Xdisplay, R->TermWin.vt, - R->PixColors[Color_bg]); + XSetWindowBackground(R->Xdisplay, R->TermWin.vt, + R->PixColors[Color_bg]); - gcvalue.foreground = R->PixColors[Color_fg]; - gcvalue.background = R->PixColors[Color_bg]; - XChangeGC(R->Xdisplay, R->TermWin.gc, GCBackground | GCForeground, - &gcvalue); - rxvt_scr_clear(aR); - rxvt_scr_touch(aR_ True); + gcvalue.foreground = R->PixColors[Color_fg]; + gcvalue.background = R->PixColors[Color_bg]; + XChangeGC(R->Xdisplay, R->TermWin.gc, GCBackground | GCForeground, + &gcvalue); + rxvt_scr_clear(aR); + rxvt_scr_touch(aR_ True); } } @@ -1551,7 +1551,7 @@ void rxvt_scr_report_position(pR) { rxvt_tt_printf(aR_ "\033[%d;%dR", R->screen.cur.row + 1, - R->screen.cur.col + 1); + R->screen.cur.col + 1); } /* ------------------------------------------------------------------------- * @@ -1566,20 +1566,20 @@ void rxvt_set_font_style(pR) { switch (R->charsets[R->screen.charset]) { - case '0': /* DEC Special Character & Line Drawing Set */ - break; - case 'A': /* United Kingdom (UK) */ - break; - case 'B': /* United States (USASCII) */ - break; - case '<': /* Multinational character set */ - break; - case '5': /* Finnish character set */ - break; - case 'C': /* Finnish character set */ - break; - case 'K': /* German character set */ - break; + case '0': /* DEC Special Character & Line Drawing Set */ + break; + case 'A': /* United Kingdom (UK) */ + break; + case 'B': /* United States (USASCII) */ + break; + case '<': /* Multinational character set */ + break; + case '5': /* Finnish character set */ + break; + case 'C': /* Finnish character set */ + break; + case 'K': /* German character set */ + break; } } @@ -1658,8 +1658,8 @@ rxvt_scr_expose(pR_ int x, int y, int width, int height, Bool refresh) int i; row_col_t rc[RC_COUNT]; - if (R->drawn_text == NULL) /* sanity check */ - return; + if (R->drawn_text == NULL) /* sanity check */ + return; #ifdef DEBUG_STRICT x = max(x, (int)R->TermWin.int_bwidth); @@ -1677,18 +1677,18 @@ rxvt_scr_expose(pR_ int x, int y, int width, int height, Bool refresh) /* sanity checks */ for (i = PART_BEG; i < RC_COUNT; i++) { - MIN_IT(rc[i].col, R->TermWin.ncol - 1); - MIN_IT(rc[i].row, R->TermWin.nrow - 1); + MIN_IT(rc[i].col, R->TermWin.ncol - 1); + MIN_IT(rc[i].row, R->TermWin.nrow - 1); } D_SCREEN((stderr, "rxvt_scr_expose(x:%d, y:%d, w:%d, h:%d) area (c:%d,r:%d)-(c:%d,r:%d)", x, y, width, height, rc[PART_BEG].col, rc[PART_BEG].row, rc[PART_END].col, rc[PART_END].row)); for (i = rc[PART_BEG].row; i <= rc[PART_END].row; i++) - fill_text (&(R->drawn_text[i][rc[PART_BEG].col]), 0, - (rc[PART_END].col - rc[PART_BEG].col + 1)); + fill_text (&(R->drawn_text[i][rc[PART_BEG].col]), 0, + (rc[PART_END].col - rc[PART_BEG].col + 1)); if (refresh) - rxvt_scr_refresh(aR_ SLOW_REFRESH | REFRESH_BOUNDS); + rxvt_scr_refresh(aR_ SLOW_REFRESH | REFRESH_BOUNDS); } /* ------------------------------------------------------------------------- */ @@ -1716,9 +1716,9 @@ rxvt_scr_move_to(pR_ int y, int len) oldviewstart = R->TermWin.view_start; if (y < len) { - p = (R->TermWin.nrow + R->TermWin.nscrolled) * (len - y) / len; - p -= (long)(R->TermWin.nrow - 1); - p = max(p, 0); + p = (R->TermWin.nrow + R->TermWin.nscrolled) * (len - y) / len; + p -= (long)(R->TermWin.nrow - 1); + p = max(p, 0); } R->TermWin.view_start = (uint16_t)min(p, R->TermWin.nscrolled); D_SCREEN((stderr, "rxvt_scr_move_to(%d, %d) view_start:%d", y, len, R->TermWin.view_start)); @@ -1744,11 +1744,11 @@ rxvt_scr_page(pR_ enum page_dirn direction, int nlines) #endif oldviewstart = R->TermWin.view_start; if (direction == UP) { - n = R->TermWin.view_start + nlines; - R->TermWin.view_start = min(n, R->TermWin.nscrolled); + n = R->TermWin.view_start + nlines; + R->TermWin.view_start = min(n, R->TermWin.nscrolled); } else { - n = R->TermWin.view_start - nlines; - R->TermWin.view_start = max(n, 0); + n = R->TermWin.view_start - nlines; + R->TermWin.view_start = max(n, 0); } return rxvt_scr_changeview(aR_ oldviewstart); } @@ -1758,12 +1758,12 @@ int rxvt_scr_changeview(pR_ uint16_t oldviewstart) { if (R->TermWin.view_start != oldviewstart) { - R->want_refresh = 1; + R->want_refresh = 1; #ifdef RXVT_GRAPHICS - if (rxvt_Gr_Displayed(aR)) - rxvt_Gr_scroll(aR_ 0); + if (rxvt_Gr_Displayed(aR)) + rxvt_Gr_scroll(aR_ 0); #endif - R->num_scr -= (R->TermWin.view_start - oldviewstart); + R->num_scr -= (R->TermWin.view_start - oldviewstart); } return (int)(R->TermWin.view_start - oldviewstart); } @@ -1778,13 +1778,13 @@ rxvt_scr_bell(pR) # ifdef MAPALERT_OPTION if (R->Options & Opt_mapAlert) # endif - XMapWindow(R->Xdisplay, R->TermWin.parent[0]); + XMapWindow(R->Xdisplay, R->TermWin.parent[0]); # endif if (R->Options & Opt_visualBell) { - rxvt_scr_rvideo_mode(aR_ !R->rvideo); /* refresh also done */ - rxvt_scr_rvideo_mode(aR_ !R->rvideo); /* refresh also done */ + rxvt_scr_rvideo_mode(aR_ !R->rvideo); /* refresh also done */ + rxvt_scr_rvideo_mode(aR_ !R->rvideo); /* refresh also done */ } else - XBell(R->Xdisplay, 0); + XBell(R->Xdisplay, 0); #endif } @@ -1800,22 +1800,22 @@ rxvt_scr_printscreen(pR_ int fullhist) FILE *fd; if ((fd = rxvt_popen_printer(aR)) == NULL) - return; + return; nrows = R->TermWin.nrow; row_offset = R->TermWin.saveLines; if (!fullhist) - row_offset -= R->TermWin.view_start; + row_offset -= R->TermWin.view_start; else { - nrows += R->TermWin.nscrolled; - row_offset -= R->TermWin.nscrolled; + nrows += R->TermWin.nscrolled; + row_offset -= R->TermWin.nscrolled; } for (r1 = 0; r1 < nrows; r1++) { - t = R->screen.text[r1 + row_offset]; - for (i = R->TermWin.ncol - 1; i >= 0; i--) - if (!isspace(t[i])) - break; - fprintf(fd, "%.*s\n", (i + 1), t); + t = R->screen.text[r1 + row_offset]; + for (i = R->TermWin.ncol - 1; i >= 0; i--) + if (!isspace(t[i])) + break; + fprintf(fd, "%.*s\n", (i + 1), t); } rxvt_pclose_printer(fd); #endif @@ -1829,75 +1829,79 @@ rxvt_scr_printscreen(pR_ int fullhist) */ #if defined (NO_BRIGHTCOLOR) || defined (VERYBOLD) -# define MONO_BOLD(x) ((x) & (RS_Bold|RS_Blink)) -# define MONO_BOLD_FG(x, fg) MONO_BOLD(x) +# define MONO_BOLD(x) ((x) & (RS_Bold|RS_Blink)) +# define MONO_BOLD_FG(x, fg) MONO_BOLD(x) #else -# define MONO_BOLD(x) \ +# define MONO_BOLD(x) \ (((x) & (RS_Bold | RS_fgMask)) == (RS_Bold | Color_fg)) -# define MONO_BOLD_FG(x, fg) (((x) & RS_Bold) && (fg) == Color_fg) +# define MONO_BOLD_FG(x, fg) (((x) & RS_Bold) && (fg) == Color_fg) #endif -#define FONT_WIDTH(X, Y) \ +#define FONT_WIDTH(X, Y) \ (X)->per_char[(Y) - (X)->min_char_or_byte2].width -#define FONT_RBEAR(X, Y) \ +#define FONT_RBEAR(X, Y) \ (X)->per_char[(Y) - (X)->min_char_or_byte2].rbearing -#define FONT_LBEAR(X, Y) \ +#define FONT_LBEAR(X, Y) \ (X)->per_char[(Y) - (X)->min_char_or_byte2].lbearing -#define IS_FONT_CHAR(X, Y) \ +#define IS_FONT_CHAR(X, Y) \ ((Y) >= (X)->min_char_or_byte2 && (Y) <= (X)->max_char_or_byte2) /* EXTPROTO */ void rxvt_scr_refresh(pR_ unsigned char refresh_type) { - unsigned char clearfirst, /* first character writes before cell */ - clearlast, /* last character writes beyond cell */ - must_clear, /* use draw_string not draw_image_string */ + unsigned char clearfirst, /* first character writes before cell */ + clearlast, /* last character writes beyond cell */ + must_clear, /* use draw_string not draw_image_string */ #ifndef NO_BOLDFONT - bfont, /* we've changed font to bold font */ -#endif - rvid, /* reverse video this position */ - wbyte, /* we're in multibyte */ - showcursor; /* show the cursor */ - int fore, back; /* desired foreground/background */ - int16_t col, row, /* column/row we're processing */ - ocrow; /* old cursor row */ + bfont, /* we've changed font to bold font */ +#endif + rvid, /* reverse video this position */ + wbyte, /* we're in multibyte */ + showcursor; /* show the cursor */ + int fore, back; /* desired foreground/background */ + int16_t col, row, /* column/row we're processing */ + ocrow; /* old cursor row */ int cursorwidth; - int i, /* tmp */ - row_offset; /* basic offset in screen structure */ + int i, /* tmp */ + row_offset; /* basic offset in screen structure */ #ifndef NO_CURSORCOLOR - rend_t cc1; /* store colours at cursor position(s) */ - rend_t cc2; /* store colours at cursor position(s) */ + rend_t cc1; /* store colours at cursor position(s) */ + rend_t cc2; /* store colours at cursor position(s) */ #endif - rend_t *drp, *srp; /* drawn-rend-pointer, screen-rend-pointer */ - text_t *dtp, *stp; /* drawn-text-pointer, screen-text-pointer */ - char *buffer; /* local copy of R->buffer */ + rend_t *drp, *srp; /* drawn-rend-pointer, screen-rend-pointer */ + text_t *dtp, *stp; /* drawn-text-pointer, screen-text-pointer */ + char *buffer; /* local copy of R->buffer */ if (refresh_type == NO_REFRESH || !R->TermWin.mapped) - return; + return; -/* - * A: set up vars - */ + /* + * A: set up vars + */ clearfirst = clearlast = must_clear = wbyte = 0; #ifndef NO_BOLDFONT bfont = 0; #endif - if (R->currmaxcol < R->TermWin.ncol) { - R->currmaxcol = R->TermWin.ncol; - R->buffer = (char *)rxvt_realloc (R->buffer, + if (R->currmaxcol < R->TermWin.ncol) + { + R->currmaxcol = R->TermWin.ncol; + R->buffer = (char *)rxvt_realloc (R->buffer, sizeof(char) * (R->currmaxcol + 1) * MB_CUR_MAX); - } + } + buffer = R->buffer; R->refresh_count = 0; row_offset = R->TermWin.saveLines - R->TermWin.view_start; - if ((refresh_type & REFRESH_BOUNDS)) { - clearfirst = clearlast = 1; - R->refresh_type &= ~REFRESH_BOUNDS; - } + if ((refresh_type & REFRESH_BOUNDS)) + { + clearfirst = clearlast = 1; + R->refresh_type &= ~REFRESH_BOUNDS; + } + #if defined(XPM_BACKGROUND) must_clear |= (R->bgPixmap.pixmap != None); #endif @@ -1915,80 +1919,80 @@ rxvt_scr_refresh(pR_ unsigned char refresh_type) * C: set the cursor character(s) */ { - unsigned char setoldcursor; - rend_t ccol1, /* Cursor colour */ - ccol2; /* Cursor colour2 */ + unsigned char setoldcursor; + rend_t ccol1, /* Cursor colour */ + ccol2; /* Cursor colour2 */ - showcursor = (R->screen.flags & Screen_VisibleCursor); - cursorwidth = 0; + showcursor = (R->screen.flags & Screen_VisibleCursor); + cursorwidth = 0; #ifdef CURSOR_BLINK - if (R->hidden_cursor) - showcursor = 0; + if (R->hidden_cursor) + showcursor = 0; #endif - cursorwidth = 0; + cursorwidth = 0; - if (showcursor) - { - cursorwidth++; + if (showcursor) + { + cursorwidth++; - srp = &(R->screen.rend[R->screen.cur.row + R->TermWin.saveLines] - [R->screen.cur.col]); + srp = &(R->screen.rend[R->screen.cur.row + R->TermWin.saveLines] + [R->screen.cur.col]); - if (showcursor && R->TermWin.focus) - { - *srp ^= RS_RVid; + if (showcursor && R->TermWin.focus) + { + *srp ^= RS_RVid; #ifndef NO_CURSORCOLOR - cc1 = *srp & (RS_fgMask | RS_bgMask); - if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor)) - ccol1 = Color_cursor; - else + cc1 = *srp & (RS_fgMask | RS_bgMask); + if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor)) + ccol1 = Color_cursor; + else #ifdef CURSOR_COLOR_IS_RENDITION_COLOR - ccol1 = GET_FGCOLOR(R->rstyle); + ccol1 = GET_FGCOLOR(R->rstyle); #else - ccol1 = Color_fg; + ccol1 = Color_fg; #endif - if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor2)) - ccol2 = Color_cursor2; - else + if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor2)) + ccol2 = Color_cursor2; + else #ifdef CURSOR_COLOR_IS_RENDITION_COLOR - ccol2 = GET_BGCOLOR(R->rstyle); + ccol2 = GET_BGCOLOR(R->rstyle); #else - ccol2 = Color_bg; + ccol2 = Color_bg; #endif - *srp = SET_FGCOLOR(*srp, ccol1); - *srp = SET_BGCOLOR(*srp, ccol2); + *srp = SET_FGCOLOR(*srp, ccol1); + *srp = SET_BGCOLOR(*srp, ccol2); #endif - } + } - while (IS_WIDE (*srp)) - cursorwidth++, srp++; + while (IS_WIDE (*srp)) + cursorwidth++, srp++; + } + + /* make sure no outline cursor is left around */ + setoldcursor = 0; + if (ocrow != -1) { + if (R->screen.cur.row + R->TermWin.view_start != ocrow + || R->screen.cur.col != R->oldcursor.col) { + if (ocrow < R->TermWin.nrow + && R->oldcursor.col < R->TermWin.ncol) { + R->drawn_rend[ocrow][R->oldcursor.col] ^= (RS_RVid | RS_Uline); + } + if (R->TermWin.focus || !showcursor) + R->oldcursor.row = -1; + else + setoldcursor = 1; } - - /* make sure no outline cursor is left around */ - setoldcursor = 0; - if (ocrow != -1) { - if (R->screen.cur.row + R->TermWin.view_start != ocrow - || R->screen.cur.col != R->oldcursor.col) { - if (ocrow < R->TermWin.nrow - && R->oldcursor.col < R->TermWin.ncol) { - R->drawn_rend[ocrow][R->oldcursor.col] ^= (RS_RVid | RS_Uline); - } - if (R->TermWin.focus || !showcursor) - R->oldcursor.row = -1; - else - setoldcursor = 1; - } - } else if (!R->TermWin.focus) - setoldcursor = 1; - if (setoldcursor) { - if (R->screen.cur.row + R->TermWin.view_start >= R->TermWin.nrow) - R->oldcursor.row = -1; - else { - R->oldcursor.row = R->screen.cur.row + R->TermWin.view_start; - R->oldcursor.col = R->screen.cur.col; - } - } + } else if (!R->TermWin.focus) + setoldcursor = 1; + if (setoldcursor) { + if (R->screen.cur.row + R->TermWin.view_start >= R->TermWin.nrow) + R->oldcursor.row = -1; + else { + R->oldcursor.row = R->screen.cur.row + R->TermWin.view_start; + R->oldcursor.col = R->screen.cur.col; + } + } } #ifndef NO_SLOW_LINK_SUPPORT @@ -1998,53 +2002,64 @@ rxvt_scr_refresh(pR_ unsigned char refresh_type) */ i = R->num_scr; if (refresh_type == FAST_REFRESH && R->num_scr_allow && i - && abs(i) < R->TermWin.nrow && !must_clear) { - int16_t nits; - int j; - rend_t *drp2; - text_t *dtp2; + && abs(i) < R->TermWin.nrow && !must_clear) + { + int16_t nits; + int j; + rend_t *drp2; + text_t *dtp2; int len, wlen; - j = R->TermWin.nrow; - wlen = len = -1; - row = i > 0 ? 0 : j - 1; - for (; j-- >= 0; row += (i > 0 ? 1 : -1)) { - if (row + i >= 0 && row + i < R->TermWin.nrow && row + i != ocrow) { - stp = R->screen.text[row + row_offset]; - srp = R->screen.rend[row + row_offset]; - dtp = R->drawn_text[row]; - dtp2 = R->drawn_text[row + i]; - drp = R->drawn_rend[row]; - drp2 = R->drawn_rend[row + i]; - for (nits = 0, col = R->TermWin.ncol; col--; ) - if (stp[col] != dtp2[col] || srp[col] != drp2[col]) - nits--; - else if (stp[col] != dtp[col] || srp[col] != drp[col]) - nits++; - if (nits > 8) { /* XXX: arbitrary choice */ - for (col = R->TermWin.ncol; col--; ) { - *dtp++ = *dtp2++; - *drp++ = *drp2++; - } - if (len == -1) - len = row; - wlen = row; - continue; - } - } - if (len != -1) { - /* also comes here at end if needed because of >= above */ - if (wlen < len) - SWAP_IT(wlen, len, int); - D_SCREEN((stderr, "rxvt_scr_refresh(): XCopyArea: %d -> %d (height: %d)", len + i, len, wlen - len + 1)); - XCopyArea(R->Xdisplay, R->TermWin.vt, R->TermWin.vt, - R->TermWin.gc, 0, Row2Pixel(len + i), - (unsigned int)TermWin_TotalWidth(), - (unsigned int)Height2Pixel(wlen - len + 1), - 0, Row2Pixel(len)); - len = -1; - } - } + j = R->TermWin.nrow; + wlen = len = -1; + row = i > 0 ? 0 : j - 1; + for (; j-- >= 0; row += (i > 0 ? 1 : -1)) + { + if (row + i >= 0 && row + i < R->TermWin.nrow && row + i != ocrow) + { + stp = R->screen.text[row + row_offset]; + srp = R->screen.rend[row + row_offset]; + dtp = R->drawn_text[row]; + dtp2 = R->drawn_text[row + i]; + drp = R->drawn_rend[row]; + drp2 = R->drawn_rend[row + i]; + + for (nits = 0, col = R->TermWin.ncol; col--; ) + if (stp[col] != dtp2[col] || srp[col] != drp2[col]) + nits--; + else if (stp[col] != dtp[col] || srp[col] != drp[col]) + nits++; + + if (nits > 8) /* XXX: arbitrary choice */ + { + for (col = R->TermWin.ncol; col--; ) + { + *dtp++ = *dtp2++; + *drp++ = *drp2++; + } + + if (len == -1) + len = row; + + wlen = row; + continue; + } + } + + if (len != -1) + { + /* also comes here at end if needed because of >= above */ + if (wlen < len) + SWAP_IT(wlen, len, int); + D_SCREEN((stderr, "rxvt_scr_refresh(): XCopyArea: %d -> %d (height: %d)", len + i, len, wlen - len + 1)); + XCopyArea(R->Xdisplay, R->TermWin.vt, R->TermWin.vt, + R->TermWin.gc, 0, Row2Pixel(len + i), + (unsigned int)TermWin_TotalWidth(), + (unsigned int)Height2Pixel(wlen - len + 1), + 0, Row2Pixel(len)); + len = -1; + } + } } #endif @@ -2061,30 +2076,31 @@ rxvt_scr_refresh(pR_ unsigned char refresh_type) /* * E2: OK, now the real pass */ - int ypixel = (int)Row2Pixel(row); + int ypixel = (int)Row2Pixel(row); - for (col = 0; col < R->TermWin.ncol; col++) { - /* compare new text with old - if exactly the same then continue */ - rend_t rend = srp[col]; /* screen rendition (target rendtion) */ + for (col = 0; col < R->TermWin.ncol; col++) + { + /* compare new text with old - if exactly the same then continue */ + rend_t rend = srp[col]; /* screen rendition (target rendtion) */ - if (stp[col] == dtp[col] /* Must match characters to skip. */ - && (rend == drp[col] /* Either rendition the same or */ - || (stp[col] == ' ' /* space w/ no background change */ - && GET_BGATTR(rend) == GET_BGATTR(drp[col])))) - continue; + if (stp[col] == dtp[col] /* Must match characters to skip. */ + && (rend == drp[col] /* Either rendition the same or */ + || (stp[col] == ' ' /* space w/ no background change */ + && GET_BGATTR(rend) == GET_BGATTR(drp[col])))) + continue; text_t *text = stp + col; int count = 1; - /* redraw one or more characters */ + /* redraw one or more characters */ dtp[col] = stp[col]; - drp[col] = rend; + drp[col] = rend; if (*text == NOCHAR) // never start redrawing at invisible characters. */ continue; - int xpixel = Col2Pixel(col); + int xpixel = Col2Pixel(col); // this loop looks very messy, it can probably be optimized // and cleaned a bit by you? @@ -2121,59 +2137,59 @@ rxvt_scr_refresh(pR_ unsigned char refresh_type) break; } - col--; /* went one too far. move back */ - count -= i; /* dump any matching trailing chars */ + col--; /* went one too far. move back */ + count -= i; /* dump any matching trailing chars */ /* * Determine the attributes for the string */ int fid = GET_FONT(rend); - fore = GET_FGCOLOR(rend); - back = GET_BGCOLOR(rend); - rend = GET_ATTR(rend); + fore = GET_FGCOLOR(rend); + back = GET_BGCOLOR(rend); + rend = GET_ATTR(rend); - rvid = (rend & RS_RVid) ? 1 : 0; + rvid = (rend & RS_RVid) ? 1 : 0; #ifdef OPTION_HC - if (!rvid && (rend & RS_Blink)) + if (!rvid && (rend & RS_Blink)) { - if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_HC)) - back = Color_HC; - else - rvid = !rvid; /* fall back */ + if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_HC)) + back = Color_HC; + else + rvid = !rvid; /* fall back */ } #endif - if (rvid) + if (rvid) { - SWAP_IT(fore, back, int); + SWAP_IT(fore, back, int); #ifndef NO_BOLD_UNDERLINE_REVERSE - if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_RV) + if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_RV) # ifndef NO_CURSORCOLOR - && !ISSET_PIXCOLOR(R, Color_cursor) + && !ISSET_PIXCOLOR(R, Color_cursor) # endif ) - back = Color_RV; + back = Color_RV; #endif - } + } #ifndef NO_BOLD_UNDERLINE_REVERSE - else if (rend & RS_Bold) + else if (rend & RS_Bold) { - if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_BD)) + if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_BD)) { - fore = Color_BD; + fore = Color_BD; # ifndef VERYBOLD - rend &= ~RS_Bold; /* we've taken care of it */ + rend &= ~RS_Bold; /* we've taken care of it */ # endif } - } + } else if (rend & RS_Uline) { - if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_UL)) + if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_UL)) { - fore = Color_UL; - rend &= ~RS_Uline; /* we've taken care of it */ + fore = Color_UL; + rend &= ~RS_Uline; /* we've taken care of it */ } - } + } #endif /* @@ -2183,53 +2199,56 @@ rxvt_scr_refresh(pR_ unsigned char refresh_type) if (back == Color_bg) { - if (must_clear) + if (must_clear) { - for (i = 0; i < count; i++) /* don't draw empty strings */ - if (text[i] != ' ') { - font->draw (xpixel, ypixel, text, count, fore, -1); - goto nodraw; + for (i = 0; i < count; i++) /* don't draw empty strings */ + if (text[i] != ' ') + { + font->draw (xpixel, ypixel, text, count, fore, -1); + goto nodraw; } + CLEAR_CHARS(xpixel, ypixel, count); nodraw: ; } else font->draw (xpixel, ypixel, text, count, fore, Color_bg); - } else - font->draw (xpixel, ypixel, text, count, fore, back); + } + else + font->draw (xpixel, ypixel, text, count, fore, back); - if ((rend & RS_Uline) && (font->descent > 1)) - XDrawLine(R->Xdisplay, drawBuffer, R->TermWin.gc, - xpixel, ypixel + font->ascent + 1, - xpixel + Width2Pixel(count) - 1, ypixel + font->ascent + 1); - } /* for (col....) */ - } /* for (row....) */ + if ((rend & RS_Uline) && (font->descent > 1)) + XDrawLine(R->Xdisplay, drawBuffer, R->TermWin.gc, + xpixel, ypixel + font->ascent + 1, + xpixel + Width2Pixel(count) - 1, ypixel + font->ascent + 1); + } /* for (col....) */ + } /* for (row....) */ /* * G: cleanup cursor and display outline cursor if necessary */ if (showcursor) { - if (R->TermWin.focus) { - srp = &(R->screen.rend[R->screen.cur.row + R->TermWin.saveLines] - [R->screen.cur.col]); - *srp ^= RS_RVid; + if (R->TermWin.focus) { + srp = &(R->screen.rend[R->screen.cur.row + R->TermWin.saveLines] + [R->screen.cur.col]); + *srp ^= RS_RVid; #ifndef NO_CURSORCOLOR - *srp = (*srp & ~(RS_fgMask | RS_bgMask)) | cc1; + *srp = (*srp & ~(RS_fgMask | RS_bgMask)) | cc1; #endif - } else if (R->oldcursor.row >= 0) { + } else if (R->oldcursor.row >= 0) { #ifndef NO_CURSORCOLOR - unsigned long gcmask; /* Graphics Context mask */ + unsigned long gcmask; /* Graphics Context mask */ - if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor)) { + if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor)) { XSetForeground (R->Xdisplay, R->TermWin.gc, R->PixColors[Color_cursor]); - } -#endif - XDrawRectangle(R->Xdisplay, drawBuffer, R->TermWin.gc, - Col2Pixel(R->oldcursor.col), - Row2Pixel(R->oldcursor.row), - (unsigned int)(Width2Pixel(cursorwidth) - 1), - (unsigned int)(Height2Pixel(1) - R->TermWin.lineSpace - 1)); - } + } +#endif + XDrawRectangle(R->Xdisplay, drawBuffer, R->TermWin.gc, + Col2Pixel(R->oldcursor.col), + Row2Pixel(R->oldcursor.row), + (unsigned int)(Width2Pixel(cursorwidth) - 1), + (unsigned int)(Height2Pixel(1) - R->TermWin.lineSpace - 1)); + } } /* * H: cleanup selection @@ -2240,28 +2259,28 @@ nodraw: ; * I: other general cleanup */ if (clearfirst && R->TermWin.int_bwidth) - /* - * clear the whole screen height, note that width == 0 is treated - * specially by XClearArea - */ - XClearArea(R->Xdisplay, R->TermWin.vt, 0, 0, - (unsigned int)R->TermWin.int_bwidth, - (unsigned int)TermWin_TotalHeight(), False); + /* + * clear the whole screen height, note that width == 0 is treated + * specially by XClearArea + */ + XClearArea(R->Xdisplay, R->TermWin.vt, 0, 0, + (unsigned int)R->TermWin.int_bwidth, + (unsigned int)TermWin_TotalHeight(), False); if (clearlast && R->TermWin.int_bwidth) - /* - * clear the whole screen height, note that width == 0 is treated - * specially by XClearArea - */ - XClearArea(R->Xdisplay, R->TermWin.vt, - R->TermWin.width + R->TermWin.int_bwidth, 0, - (unsigned int)R->TermWin.int_bwidth, - (unsigned int)TermWin_TotalHeight(), False); + /* + * clear the whole screen height, note that width == 0 is treated + * specially by XClearArea + */ + XClearArea(R->Xdisplay, R->TermWin.vt, + R->TermWin.width + R->TermWin.int_bwidth, 0, + (unsigned int)R->TermWin.int_bwidth, + (unsigned int)TermWin_TotalHeight(), False); if (refresh_type & SMOOTH_REFRESH) - XSync(R->Xdisplay, False); + XSync(R->Xdisplay, False); R->num_scr = 0; R->num_scr_allow = 1; - R->want_refresh = 0; /* screen is current */ + R->want_refresh = 0; /* screen is current */ } /* ------------------------------------------------------------------------- */ @@ -2270,20 +2289,20 @@ void rxvt_scr_clear(pR) { if (!R->TermWin.mapped) - return; + return; R->num_scr_allow = 0; R->want_refresh = 1; #ifdef TRANSPARENT if ((R->Options & Opt_transparent) && (R->am_pixmap_trans == 0)) { - int i; - - if (!(R->Options & Opt_transparent_all)) - i = 0; - else - i = (int)(sizeof(R->TermWin.parent) / sizeof(Window)); - for (; i--;) - if (R->TermWin.parent[i] != None) - XClearWindow(R->Xdisplay, R->TermWin.parent[i]); + int i; + + if (!(R->Options & Opt_transparent_all)) + i = 0; + else + i = (int)(sizeof(R->TermWin.parent) / sizeof(Window)); + for (; i--;) + if (R->TermWin.parent[i] != None) + XClearWindow(R->Xdisplay, R->TermWin.parent[i]); } #endif XClearWindow(R->Xdisplay, R->TermWin.vt); @@ -2298,29 +2317,29 @@ rxvt_scr_reverse_selection(pR) rend_t *srp; if (R->selection.op && R->current_screen == R->selection.screen) { - end_row = R->TermWin.saveLines - R->TermWin.view_start; - i = R->selection.beg.row + R->TermWin.saveLines; - row = R->selection.end.row + R->TermWin.saveLines; - if (i >= end_row) - col = R->selection.beg.col; - else { - col = 0; - i = end_row; - } - end_row += R->TermWin.nrow; - for (; i < row && i < end_row; i++, col = 0) - for (srp = R->screen.rend[i]; col < R->TermWin.ncol; col++) + end_row = R->TermWin.saveLines - R->TermWin.view_start; + i = R->selection.beg.row + R->TermWin.saveLines; + row = R->selection.end.row + R->TermWin.saveLines; + if (i >= end_row) + col = R->selection.beg.col; + else { + col = 0; + i = end_row; + } + end_row += R->TermWin.nrow; + for (; i < row && i < end_row; i++, col = 0) + for (srp = R->screen.rend[i]; col < R->TermWin.ncol; col++) #ifndef OPTION_HC - srp[col] ^= RS_RVid; + srp[col] ^= RS_RVid; #else - srp[col] ^= RS_Blink; + srp[col] ^= RS_Blink; #endif - if (i == row && i < end_row) - for (srp = R->screen.rend[i]; col < R->selection.end.col; col++) + if (i == row && i < end_row) + for (srp = R->screen.rend[i]; col < R->selection.end.col; col++) #ifndef OPTION_HC - srp[col] ^= RS_RVid; + srp[col] ^= RS_RVid; #else - srp[col] ^= RS_Blink; + srp[col] ^= RS_Blink; #endif } } @@ -2340,18 +2359,18 @@ rxvt_scr_dump(pR_ int fd) char r1[] = "\n"; for (row = R->TermWin.saveLines - R->TermWin.nscrolled; - row < R->TermWin.saveLines + R->TermWin.nrow - 1; row++) { - width = R->screen.tlen[row] >= 0 ? R->screen.tlen[row] - : R->TermWin.ncol; - for (towrite = width; towrite; towrite -= wrote) { - wrote = write(fd, &(R->screen.text[row][width - towrite]), - towrite); - if (wrote < 0) - return; /* XXX: death, no report */ - } - if (R->screen.tlen[row] >= 0) - if (write(fd, r1, 1) <= 0) - return; /* XXX: death, no report */ + row < R->TermWin.saveLines + R->TermWin.nrow - 1; row++) { + width = R->screen.tlen[row] >= 0 ? R->screen.tlen[row] + : R->TermWin.ncol; + for (towrite = width; towrite; towrite -= wrote) { + wrote = write(fd, &(R->screen.text[row][width - towrite]), + towrite); + if (wrote < 0) + return; /* XXX: death, no report */ + } + if (R->screen.tlen[row] >= 0) + if (write(fd, r1, 1) <= 0) + return; /* XXX: death, no report */ } } #endif @@ -2370,28 +2389,28 @@ rxvt_selection_check(pR_ int check_more) row_col_t pos; if (!R->selection.op) - return; + return; pos.row = pos.col = 0; if ((R->selection.beg.row < -(int32_t)R->TermWin.nscrolled) - || (R->selection.beg.row >= R->TermWin.nrow) - || (R->selection.mark.row < -(int32_t)R->TermWin.nscrolled) - || (R->selection.mark.row >= R->TermWin.nrow) - || (R->selection.end.row < -(int32_t)R->TermWin.nscrolled) - || (R->selection.end.row >= R->TermWin.nrow) + || (R->selection.beg.row >= R->TermWin.nrow) + || (R->selection.mark.row < -(int32_t)R->TermWin.nscrolled) + || (R->selection.mark.row >= R->TermWin.nrow) + || (R->selection.end.row < -(int32_t)R->TermWin.nscrolled) + || (R->selection.end.row >= R->TermWin.nrow) || (check_more == 1 - && R->current_screen == R->selection.screen - && !ROWCOL_IS_BEFORE(R->screen.cur, R->selection.beg) - && ROWCOL_IS_BEFORE(R->screen.cur, R->selection.end)) - || (check_more == 2 - && ROWCOL_IS_BEFORE(R->selection.beg, pos) - && ROWCOL_IS_AFTER(R->selection.end, pos)) - || (check_more == 3 - && ROWCOL_IS_AFTER(R->selection.end, pos)) - || (check_more == 4 /* screen width change */ - && (R->selection.beg.row != R->selection.end.row - || R->selection.end.col > R->TermWin.ncol))) - CLEAR_SELECTION(R); + && R->current_screen == R->selection.screen + && !ROWCOL_IS_BEFORE(R->screen.cur, R->selection.beg) + && ROWCOL_IS_BEFORE(R->screen.cur, R->selection.end)) + || (check_more == 2 + && ROWCOL_IS_BEFORE(R->selection.beg, pos) + && ROWCOL_IS_AFTER(R->selection.end, pos)) + || (check_more == 3 + && ROWCOL_IS_AFTER(R->selection.end, pos)) + || (check_more == 4 /* screen width change */ + && (R->selection.beg.row != R->selection.end.row + || R->selection.end.col > R->TermWin.ncol))) + CLEAR_SELECTION(R); } /* ------------------------------------------------------------------------- */ @@ -2407,12 +2426,12 @@ rxvt_PasteIt(pR_ const unsigned char *data, unsigned int nitems) /* convert normal newline chars into common keyboard Return key sequence */ for (i = 0; i < nitems; i += PROP_SIZE) { - n = min(nitems - i, PROP_SIZE); - MEMCPY(ds, data + i, n); - for (j = 0; j < n; j++) - if (ds[j] == '\n') - ds[j] = '\r'; - rxvt_tt_write(aR_ ds, (int)n); + n = min(nitems - i, PROP_SIZE); + MEMCPY(ds, data + i, n); + for (j = 0; j < n; j++) + if (ds[j] == '\n') + ds[j] = '\r'; + rxvt_tt_write(aR_ ds, (int)n); } free(ds); } @@ -2436,63 +2455,63 @@ rxvt_selection_paste(pR_ Window win, Atom prop, Bool delete_prop) D_SELECT((stderr, "rxvt_selection_paste(%08lx, %lu, %d), wait=%2x", win, (unsigned long)prop, (int)delete_prop, R->selection_wait)); - if (prop == None) { /* check for failed XConvertSelection */ + if (prop == None) { /* check for failed XConvertSelection */ #ifdef MULTICHAR_SET - if ((R->selection_type & Sel_CompoundText)) { - int selnum = R->selection_type & Sel_whereMask; + if ((R->selection_type & Sel_CompoundText)) { + int selnum = R->selection_type & Sel_whereMask; - R->selection_type = 0; - if (selnum != Sel_direct) - rxvt_selection_request_other(aR_ XA_STRING, selnum); - } + R->selection_type = 0; + if (selnum != Sel_direct) + rxvt_selection_request_other(aR_ XA_STRING, selnum); + } #endif - return 0; + return 0; } for (;;) { - if (XGetWindowProperty(R->Xdisplay, win, prop, (long)(nread / 4), - (long)(PROP_SIZE / 4), delete_prop, - AnyPropertyType, &ct.encoding, &ct.format, - &ct.nitems, &bytes_after, - &ct.value) != Success) - break; - if (ct.encoding == 0) { - D_SELECT((stderr, "rxvt_selection_paste: property didn't exist!")); - break; - } - if (ct.value == NULL) { - D_SELECT((stderr, "rxvt_selection_paste: property shooting blanks!")); - continue; - } - if (ct.nitems == 0) { - D_SELECT((stderr, "rxvt_selection_paste: property empty - also INCR end")); - if (R->selection_wait == Sel_normal && nread == 0) { - /* - * pass through again trying CUT_BUFFER0 if we've come from - * XConvertSelection() but nothing was presented - */ - D_SELECT((stderr, "rxvt_selection_request: pasting CUT_BUFFER0")); - rxvt_selection_paste(aR_ Xroot, XA_CUT_BUFFER0, False); - } - nread = -1; /* discount any previous stuff */ - break; - } - nread += ct.nitems; + if (XGetWindowProperty(R->Xdisplay, win, prop, (long)(nread / 4), + (long)(PROP_SIZE / 4), delete_prop, + AnyPropertyType, &ct.encoding, &ct.format, + &ct.nitems, &bytes_after, + &ct.value) != Success) + break; + if (ct.encoding == 0) { + D_SELECT((stderr, "rxvt_selection_paste: property didn't exist!")); + break; + } + if (ct.value == NULL) { + D_SELECT((stderr, "rxvt_selection_paste: property shooting blanks!")); + continue; + } + if (ct.nitems == 0) { + D_SELECT((stderr, "rxvt_selection_paste: property empty - also INCR end")); + if (R->selection_wait == Sel_normal && nread == 0) { + /* + * pass through again trying CUT_BUFFER0 if we've come from + * XConvertSelection() but nothing was presented + */ + D_SELECT((stderr, "rxvt_selection_request: pasting CUT_BUFFER0")); + rxvt_selection_paste(aR_ Xroot, XA_CUT_BUFFER0, False); + } + nread = -1; /* discount any previous stuff */ + break; + } + nread += ct.nitems; #ifdef MULTICHAR_SET - if (XmbTextPropertyToTextList(R->Xdisplay, &ct, &cl, - &dummy_count) == Success && cl) { - rxvt_PasteIt(aR_ cl[0], STRLEN(cl[0])); - XFreeStringList(cl); - } else -#endif - rxvt_PasteIt(aR_ ct.value, (unsigned int)ct.nitems); - if (bytes_after == 0) - break; - XFree(ct.value); + if (XmbTextPropertyToTextList(R->Xdisplay, &ct, &cl, + &dummy_count) == Success && cl) { + rxvt_PasteIt(aR_ cl[0], STRLEN(cl[0])); + XFreeStringList(cl); + } else +#endif + rxvt_PasteIt(aR_ ct.value, (unsigned int)ct.nitems); + if (bytes_after == 0) + break; + XFree(ct.value); } if (ct.value) - XFree(ct.value); + XFree(ct.value); if (R->selection_wait == Sel_normal) - R->selection_wait = Sel_none; + R->selection_wait = Sel_none; D_SELECT((stderr, "rxvt_selection_paste: bytes written: %ld", nread)); return (int)nread; } @@ -2507,41 +2526,41 @@ rxvt_selection_property(pR_ Window win, Atom prop) int reget_time = 0; if (prop == None) - return; + return; D_SELECT((stderr, "rxvt_selection_property(%08lx, %lu)", win, (unsigned long)prop)); if (R->selection_wait == Sel_normal) { - int a, afmt; - Atom atype; - unsigned long bytes_after, nitems; - unsigned char *s = NULL; - - a = XGetWindowProperty(R->Xdisplay, win, prop, 0L, 1L, False, - R->xa[XA_INCR], &atype, &afmt, &nitems, - &bytes_after, &s); - if (s) - XFree(s); - if (a != Success) - return; + int a, afmt; + Atom atype; + unsigned long bytes_after, nitems; + unsigned char *s = NULL; + + a = XGetWindowProperty(R->Xdisplay, win, prop, 0L, 1L, False, + R->xa[XA_INCR], &atype, &afmt, &nitems, + &bytes_after, &s); + if (s) + XFree(s); + if (a != Success) + return; #ifndef __CYGWIN32__ - if (atype == R->xa[XA_INCR]) { /* start an INCR transfer */ - D_SELECT((stderr, "rxvt_selection_property: INCR: starting transfer")); - XDeleteProperty(R->Xdisplay, win, prop); - XFlush(R->Xdisplay); - reget_time = 1; - R->selection_wait = Sel_incr; - } + if (atype == R->xa[XA_INCR]) { /* start an INCR transfer */ + D_SELECT((stderr, "rxvt_selection_property: INCR: starting transfer")); + XDeleteProperty(R->Xdisplay, win, prop); + XFlush(R->Xdisplay); + reget_time = 1; + R->selection_wait = Sel_incr; + } #endif } else if (R->selection_wait == Sel_incr) { - reget_time = 1; - if (rxvt_selection_paste(aR_ win, prop, True) == -1) { - D_SELECT((stderr, "rxvt_selection_property: INCR: clean end")); - R->selection_wait = Sel_none; - R->timeout[TIMEOUT_INCR].tv_sec = 0; /* turn off timer */ - } + reget_time = 1; + if (rxvt_selection_paste(aR_ win, prop, True) == -1) { + D_SELECT((stderr, "rxvt_selection_property: INCR: clean end")); + R->selection_wait = Sel_none; + R->timeout[TIMEOUT_INCR].tv_sec = 0; /* turn off timer */ + } } - if (reget_time) { /* received more data so reget time */ - (void)gettimeofday(&(R->timeout[TIMEOUT_INCR]), NULL); - R->timeout[TIMEOUT_INCR].tv_sec += 10; /* ten seconds wait */ + if (reget_time) { /* received more data so reget time */ + (void)gettimeofday(&(R->timeout[TIMEOUT_INCR]), NULL); + R->timeout[TIMEOUT_INCR].tv_sec += 10; /* ten seconds wait */ } } /* ------------------------------------------------------------------------- */ @@ -2560,34 +2579,34 @@ rxvt_selection_request(pR_ Time tm, int x, int y) { D_SELECT((stderr, "rxvt_selection_request(%lu, %d, %d)", tm, x, y)); if (x < 0 || x >= R->TermWin.width || y < 0 || y >= R->TermWin.height) - return; /* outside window */ + return; /* outside window */ - if (R->selection.text != NULL) { /* internal selection */ - D_SELECT((stderr, "rxvt_selection_request: pasting internal")); - rxvt_PasteIt(aR_ R->selection.text, R->selection.len); - return; + if (R->selection.text != NULL) { /* internal selection */ + D_SELECT((stderr, "rxvt_selection_request: pasting internal")); + rxvt_PasteIt(aR_ R->selection.text, R->selection.len); + return; } else { - int i; + int i; - R->selection_request_time = tm; - R->selection_wait = Sel_normal; - for (i = Sel_Primary; i <= Sel_Clipboard; i++) { + R->selection_request_time = tm; + R->selection_wait = Sel_normal; + for (i = Sel_Primary; i <= Sel_Clipboard; i++) { #ifdef MULTICHAR_SET - R->selection_type = Sel_CompoundText; + R->selection_type = Sel_CompoundText; #else - R->selection_type = 0; + R->selection_type = 0; #endif - if (rxvt_selection_request_other(aR_ + if (rxvt_selection_request_other(aR_ #ifdef MULTICHAR_SET - R->xa[XA_COMPOUND_TEXT], + R->xa[XA_COMPOUND_TEXT], #else - XA_STRING, + XA_STRING, #endif - i)) - return; - } + i)) + return; + } } - R->selection_wait = Sel_none; /* don't loop in rxvt_selection_paste() */ + R->selection_wait = Sel_none; /* don't loop in rxvt_selection_paste() */ D_SELECT((stderr, "rxvt_selection_request: pasting CUT_BUFFER0")); rxvt_selection_paste(aR_ Xroot, XA_CUT_BUFFER0, False); } @@ -2603,16 +2622,16 @@ rxvt_selection_request_other(pR_ Atom target, int selnum) R->selection_type |= selnum; if (selnum == Sel_Primary) - sel = XA_PRIMARY; + sel = XA_PRIMARY; else if (selnum == Sel_Secondary) - sel = XA_SECONDARY; + sel = XA_SECONDARY; else - sel = R->xa[XA_CLIPBOARD]; + sel = R->xa[XA_CLIPBOARD]; if (XGetSelectionOwner(R->Xdisplay, sel) != None) { - D_SELECT((stderr, "rxvt_selection_request_other: pasting %s", debug_xa_names[selnum])); - XConvertSelection(R->Xdisplay, sel, target, R->xa[XA_VT_SELECTION], - R->TermWin.vt, R->selection_request_time); - return 1; + D_SELECT((stderr, "rxvt_selection_request_other: pasting %s", debug_xa_names[selnum])); + XConvertSelection(R->Xdisplay, sel, target, R->xa[XA_VT_SELECTION], + R->TermWin.vt, R->selection_request_time); + return 1; } return 0; } @@ -2630,7 +2649,7 @@ rxvt_selection_clear(pR) R->want_refresh = 1; if (R->selection.text) - free(R->selection.text); + free(R->selection.text); R->selection.text = NULL; R->selection.len = 0; CLEAR_SELECTION(R); @@ -2656,20 +2675,20 @@ rxvt_selection_make(pR_ Time tm) D_SELECT((stderr, "rxvt_selection_make(): R->selection.op=%d, R->selection.clicks=%d", R->selection.op, R->selection.clicks)); switch (R->selection.op) { case SELECTION_CONT: - break; + break; case SELECTION_INIT: - CLEAR_SELECTION(R); + CLEAR_SELECTION(R); /* FALLTHROUGH */ case SELECTION_BEGIN: - R->selection.op = SELECTION_DONE; + R->selection.op = SELECTION_DONE; /* FALLTHROUGH */ default: - return; + return; } R->selection.op = SELECTION_DONE; if (R->selection.clicks == 4) - return; /* nothing selected, go away */ + return; /* nothing selected, go away */ i = (R->selection.end.row - R->selection.beg.row + 1) * (R->TermWin.ncol + 1) + 1; str = (char *)rxvt_malloc(i * MB_CUR_MAX + 1); @@ -2683,17 +2702,17 @@ rxvt_selection_make(pR_ Time tm) for (; row <= end_row; row++, col = 0) { - t = &(R->screen.text[row][col]); + t = &(R->screen.text[row][col]); end_col = R->screen.tlen[row]; if (end_col == -1) - end_col = R->TermWin.ncol; + end_col = R->TermWin.ncol; if (row == end_row) MIN_IT (end_col, R->selection.end.col); - for (; col < end_col; col++) + for (; col < end_col; col++) if (*t == NOCHAR) t++; else @@ -2703,27 +2722,27 @@ rxvt_selection_make(pR_ Time tm) str += len; } - if (R->screen.tlen[row] != -1 && row != end_row) - *str++ = '\n'; + if (R->screen.tlen[row] != -1 && row != end_row) + *str++ = '\n'; } #ifndef NO_OLD_SELECTION if (R->selection_style == OLD_SELECT) - if (end_col == R->TermWin.ncol) - *str++ = '\n'; + if (end_col == R->TermWin.ncol) + *str++ = '\n'; #endif #ifndef NO_NEW_SELECTION if (R->selection_style != OLD_SELECT) - if (end_col != R->selection.end.col) - *str++ = '\n'; + if (end_col != R->selection.end.col) + *str++ = '\n'; #endif *str = '\0'; i = str - (char *)new_selection_text; if (i == 0) { - free (new_selection_text); - return; + free (new_selection_text); + return; } // due to MB_MAX_CUR, selection wastage is usually high @@ -2732,15 +2751,15 @@ rxvt_selection_make(pR_ Time tm) R->selection.len = i; if (R->selection.text) - free (R->selection.text); + free (R->selection.text); R->selection.text = new_selection_text; XSetSelectionOwner(R->Xdisplay, XA_PRIMARY, R->TermWin.vt, tm); if (XGetSelectionOwner(R->Xdisplay, XA_PRIMARY) != R->TermWin.vt) - rxvt_print_error("can't get primary selection"); + rxvt_print_error("can't get primary selection"); XChangeProperty(R->Xdisplay, Xroot, XA_CUT_BUFFER0, XA_STRING, 8, - PropModeReplace, R->selection.text, (int)R->selection.len); + PropModeReplace, R->selection.text, (int)R->selection.len); R->selection_time = tm; D_SELECT((stderr, "rxvt_selection_make(): R->selection.len=%d", R->selection.len)); } @@ -2757,16 +2776,16 @@ rxvt_selection_click(pR_ int clicks, int x, int y) D_SELECT((stderr, "rxvt_selection_click(%d, %d, %d)", clicks, x, y)); clicks = ((clicks - 1) % 3) + 1; - R->selection.clicks = clicks; /* save clicks so extend will work */ + R->selection.clicks = clicks; /* save clicks so extend will work */ rxvt_selection_start_colrow(aR_ Pixel2Col(x), Pixel2Row(y)); if (clicks == 2 || clicks == 3) - rxvt_selection_extend_colrow(aR_ R->selection.mark.col, - R->selection.mark.row - + R->TermWin.view_start, - 0, /* button 3 */ - 1, /* button press */ - 0); /* click change */ + rxvt_selection_extend_colrow(aR_ R->selection.mark.col, + R->selection.mark.row + + R->TermWin.view_start, + 0, /* button 3 */ + 1, /* button press */ + 0); /* click change */ } /* ------------------------------------------------------------------------- */ @@ -2785,9 +2804,9 @@ rxvt_selection_start_colrow(pR_ int col, int row) MAX_IT(R->selection.mark.col, 0); MIN_IT(R->selection.mark.col, (int32_t)R->TermWin.ncol - 1); - if (R->selection.op) { /* clear the old selection */ - R->selection.beg.row = R->selection.end.row = R->selection.mark.row; - R->selection.beg.col = R->selection.end.col = R->selection.mark.col; + if (R->selection.op) { /* clear the old selection */ + R->selection.beg.row = R->selection.end.row = R->selection.mark.row; + R->selection.beg.col = R->selection.end.col = R->selection.mark.col; } R->selection.op = SELECTION_INIT; R->selection.screen = R->current_screen; @@ -2803,9 +2822,9 @@ rxvt_selection_start_colrow(pR_ int col, int row) #define DELIMIT_TEXT(x) \ (((x) == ' ' || (x) == '\t') ? 2 : (STRCHR(R->rs[Rs_cutchars], (x)) != NULL)) #ifdef MULTICHAR_SET -# define DELIMIT_REND(x) (((x) & RS_multiMask) ? 1 : 0) +# define DELIMIT_REND(x) (((x) & RS_multiMask) ? 1 : 0) #else -# define DELIMIT_REND(x) 1 +# define DELIMIT_REND(x) 1 #endif /* INTPROTO */ @@ -2818,13 +2837,13 @@ rxvt_selection_delimit_word(pR_ enum page_dirn dirn, const row_col_t *mark, row_ rend_t *srp; if (dirn == UP) { - bound.row = R->TermWin.saveLines - R->TermWin.nscrolled - 1; - bound.col = 0; - dirnadd = -1; + bound.row = R->TermWin.saveLines - R->TermWin.nscrolled - 1; + bound.col = 0; + dirnadd = -1; } else { - bound.row = R->TermWin.saveLines + R->TermWin.nrow; - bound.col = R->TermWin.ncol - 1; - dirnadd = 1; + bound.row = R->TermWin.saveLines + R->TermWin.nrow; + bound.col = R->TermWin.ncol - 1; + dirnadd = 1; } row = mark->row + R->TermWin.saveLines; col = mark->col; @@ -2834,48 +2853,48 @@ rxvt_selection_delimit_word(pR_ enum page_dirn dirn, const row_col_t *mark, row_ w1 = DELIMIT_TEXT(*stp); if (R->selection_style != NEW_SELECT) { - if (w1 == 1) { - stp += dirnadd; - if (DELIMIT_TEXT(*stp) == 1) - goto Old_Word_Selection_You_Die; - col += dirnadd; - } - w1 = 0; + if (w1 == 1) { + stp += dirnadd; + if (DELIMIT_TEXT(*stp) == 1) + goto Old_Word_Selection_You_Die; + col += dirnadd; + } + w1 = 0; } srp = (&R->screen.rend[row][col]); w2 = DELIMIT_REND(*srp); for (;;) { - for (; col != bound.col; col += dirnadd) { - stp += dirnadd; - if (DELIMIT_TEXT(*stp) != w1) - break; - srp += dirnadd; - if (DELIMIT_REND(*srp) != w2) - break; - } - if ((col == bound.col) && (row != bound.row)) { - if (R->screen.tlen[(row - (dirn == UP ? 1 : 0))] == -1) { - trow = row + dirnadd; - tcol = dirn == UP ? R->TermWin.ncol - 1 : 0; - if (R->screen.text[trow] == NULL) - break; - stp = &(R->screen.text[trow][tcol]); - srp = &(R->screen.rend[trow][tcol]); - if (DELIMIT_TEXT(*stp) != w1 || DELIMIT_REND(*srp) != w2) - break; - row = trow; - col = tcol; - continue; - } - } - break; + for (; col != bound.col; col += dirnadd) { + stp += dirnadd; + if (DELIMIT_TEXT(*stp) != w1) + break; + srp += dirnadd; + if (DELIMIT_REND(*srp) != w2) + break; + } + if ((col == bound.col) && (row != bound.row)) { + if (R->screen.tlen[(row - (dirn == UP ? 1 : 0))] == -1) { + trow = row + dirnadd; + tcol = dirn == UP ? R->TermWin.ncol - 1 : 0; + if (R->screen.text[trow] == NULL) + break; + stp = &(R->screen.text[trow][tcol]); + srp = &(R->screen.rend[trow][tcol]); + if (DELIMIT_TEXT(*stp) != w1 || DELIMIT_REND(*srp) != w2) + break; + row = trow; + col = tcol; + continue; + } + } + break; } Old_Word_Selection_You_Die: - D_SELECT((stderr, "rxvt_selection_delimit_word(%s,...) @ (r:%3d, c:%3d) has boundary (r:%3d, c:%3d)", (dirn == UP ? "up " : "down"), mark->row, mark->col, row - R->TermWin.saveLines, col)); + D_SELECT((stderr, "rxvt_selection_delimit_word(%s,...) @ (r:%3d, c:%3d) has boundary (r:%3d, c:%3d)", (dirn == UP ? "up " : "down"), mark->row, mark->col, row - R->TermWin.saveLines, col)); if (dirn == DN) - col++; /* put us on one past the end */ + col++; /* put us on one past the end */ /* Poke the values back in */ ret->row = row - R->TermWin.saveLines; @@ -2910,24 +2929,24 @@ rxvt_selection_extend(pR_ int x, int y, int flag) * be _past_ a character for it to be selected. */ if (R->selection_style != OLD_SELECT) { - if (((R->selection.clicks % 3) == 1) && !flag - && (col == R->selection.mark.col - && (row == R->selection.mark.row + R->TermWin.view_start))) { - /* select nothing */ - R->selection.beg.row = R->selection.end.row = 0; - R->selection.beg.col = R->selection.end.col = 0; - R->selection.clicks = 4; - R->want_refresh = 1; - D_SELECT((stderr, "rxvt_selection_extend() R->selection.clicks = 4")); - return; - } + if (((R->selection.clicks % 3) == 1) && !flag + && (col == R->selection.mark.col + && (row == R->selection.mark.row + R->TermWin.view_start))) { + /* select nothing */ + R->selection.beg.row = R->selection.end.row = 0; + R->selection.beg.col = R->selection.end.col = 0; + R->selection.clicks = 4; + R->want_refresh = 1; + D_SELECT((stderr, "rxvt_selection_extend() R->selection.clicks = 4")); + return; + } } #endif if (R->selection.clicks == 4) - R->selection.clicks = 1; - rxvt_selection_extend_colrow(aR_ col, row, !!flag, /* ? button 3 */ - flag == 1 ? 1 : 0, /* ? button press */ - 0); /* no click change */ + R->selection.clicks = 1; + rxvt_selection_extend_colrow(aR_ col, row, !!flag, /* ? button 3 */ + flag == 1 ? 1 : 0, /* ? button press */ + 0); /* no click change */ } /* ------------------------------------------------------------------------- */ @@ -2942,7 +2961,7 @@ rxvt_selection_extend_colrow(pR_ int32_t col, int32_t row, int button3, int butt int end_col; row_col_t pos; enum { - LEFT, RIGHT + LEFT, RIGHT } closeto = RIGHT; D_SELECT((stderr, "rxvt_selection_extend_colrow(c:%d, r:%d, %d, %d) clicks:%d, op:%d", col, row, button3, buttonpress, R->selection.clicks, R->selection.op)); @@ -2951,38 +2970,38 @@ rxvt_selection_extend_colrow(pR_ int32_t col, int32_t row, int button3, int butt R->want_refresh = 1; switch (R->selection.op) { case SELECTION_INIT: - CLEAR_SELECTION(R); - R->selection.op = SELECTION_BEGIN; + CLEAR_SELECTION(R); + R->selection.op = SELECTION_BEGIN; /* FALLTHROUGH */ case SELECTION_BEGIN: - if (row != R->selection.mark.row || col != R->selection.mark.col - || (!button3 && buttonpress)) - R->selection.op = SELECTION_CONT; - break; + if (row != R->selection.mark.row || col != R->selection.mark.col + || (!button3 && buttonpress)) + R->selection.op = SELECTION_CONT; + break; case SELECTION_DONE: - R->selection.op = SELECTION_CONT; + R->selection.op = SELECTION_CONT; /* FALLTHROUGH */ case SELECTION_CONT: - break; + break; case SELECTION_CLEAR: - rxvt_selection_start_colrow(aR_ col, row); + rxvt_selection_start_colrow(aR_ col, row); /* FALLTHROUGH */ default: - return; + return; } if (R->selection.beg.col == R->selection.end.col - && R->selection.beg.col != R->selection.mark.col - && R->selection.beg.row == R->selection.end.row - && R->selection.beg.row != R->selection.mark.row) { - R->selection.beg.col = R->selection.end.col = R->selection.mark.col; - R->selection.beg.row = R->selection.end.row = R->selection.mark.row; - D_SELECT((stderr, "rxvt_selection_extend_colrow() ENT2 b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col)); + && R->selection.beg.col != R->selection.mark.col + && R->selection.beg.row == R->selection.end.row + && R->selection.beg.row != R->selection.mark.row) { + R->selection.beg.col = R->selection.end.col = R->selection.mark.col; + R->selection.beg.row = R->selection.end.row = R->selection.mark.row; + D_SELECT((stderr, "rxvt_selection_extend_colrow() ENT2 b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col)); } pos.col = col; pos.row = row; - pos.row -= R->TermWin.view_start; /* adjust for scroll */ + pos.row -= R->TermWin.view_start; /* adjust for scroll */ #ifndef NO_OLD_SELECTION /* @@ -2992,44 +3011,44 @@ rxvt_selection_extend_colrow(pR_ int32_t col, int32_t row, int button3, int butt * Selection always terminates (left or right as appropriate) at the mark. */ if (R->selection_style == OLD_SELECT) { - if (R->selection.clicks == 1 || button3) { - if (R->hate_those_clicks) { - R->hate_those_clicks = 0; - if (R->selection.clicks == 1) { - R->selection.beg.row = R->selection.mark.row; - R->selection.beg.col = R->selection.mark.col; - } else { - R->selection.mark.row = R->selection.beg.row; - R->selection.mark.col = R->selection.beg.col; - } - } - if (ROWCOL_IS_BEFORE(pos, R->selection.mark)) { - R->selection.end.row = R->selection.mark.row; - R->selection.end.col = R->selection.mark.col + 1; - R->selection.beg.row = pos.row; - R->selection.beg.col = pos.col; - } else { - R->selection.beg.row = R->selection.mark.row; - R->selection.beg.col = R->selection.mark.col; - R->selection.end.row = pos.row; - R->selection.end.col = pos.col + 1; - } - } else if (R->selection.clicks == 2) { - rxvt_selection_delimit_word(aR_ UP, &(R->selection.mark), - &(R->selection.beg)); - rxvt_selection_delimit_word(aR_ DN, &(R->selection.mark), - &(R->selection.end)); - R->hate_those_clicks = 1; - } else if (R->selection.clicks == 3) { - R->selection.beg.row = R->selection.end.row = R->selection.mark.row; - R->selection.beg.col = 0; - R->selection.end.col = ncol; - R->hate_those_clicks = 1; - } - D_SELECT((stderr, "rxvt_selection_extend_colrow() EXIT b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col)); - return; + if (R->selection.clicks == 1 || button3) { + if (R->hate_those_clicks) { + R->hate_those_clicks = 0; + if (R->selection.clicks == 1) { + R->selection.beg.row = R->selection.mark.row; + R->selection.beg.col = R->selection.mark.col; + } else { + R->selection.mark.row = R->selection.beg.row; + R->selection.mark.col = R->selection.beg.col; + } + } + if (ROWCOL_IS_BEFORE(pos, R->selection.mark)) { + R->selection.end.row = R->selection.mark.row; + R->selection.end.col = R->selection.mark.col + 1; + R->selection.beg.row = pos.row; + R->selection.beg.col = pos.col; + } else { + R->selection.beg.row = R->selection.mark.row; + R->selection.beg.col = R->selection.mark.col; + R->selection.end.row = pos.row; + R->selection.end.col = pos.col + 1; + } + } else if (R->selection.clicks == 2) { + rxvt_selection_delimit_word(aR_ UP, &(R->selection.mark), + &(R->selection.beg)); + rxvt_selection_delimit_word(aR_ DN, &(R->selection.mark), + &(R->selection.end)); + R->hate_those_clicks = 1; + } else if (R->selection.clicks == 3) { + R->selection.beg.row = R->selection.end.row = R->selection.mark.row; + R->selection.beg.col = 0; + R->selection.end.col = ncol; + R->hate_those_clicks = 1; + } + D_SELECT((stderr, "rxvt_selection_extend_colrow() EXIT b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col)); + return; } -#endif /* ! NO_OLD_SELECTION */ +#endif /* ! NO_OLD_SELECTION */ #ifndef NO_NEW_SELECTION /* selection_style must not be OLD_SELECT to get here */ /* @@ -3045,111 +3064,111 @@ rxvt_selection_extend_colrow(pR_ int32_t col, int32_t row, int button3, int butt * and it was decided by whichever point/word/line was `fixed' at the * time of the most recent button3 press */ - if (button3 && buttonpress) { /* button3 press */ - /* - * first determine which edge of the selection we are closest to - */ - if (ROWCOL_IS_BEFORE(pos, R->selection.beg) - || (!ROWCOL_IS_AFTER(pos, R->selection.end) - && (((pos.col - R->selection.beg.col) - + ((pos.row - R->selection.beg.row) * ncol)) - < ((R->selection.end.col - pos.col) - + ((R->selection.end.row - pos.row) * ncol))))) - closeto = LEFT; - if (closeto == LEFT) { - R->selection.beg.row = pos.row; - R->selection.beg.col = pos.col; - R->selection.mark.row = R->selection.end.row; - R->selection.mark.col = R->selection.end.col - - (R->selection.clicks == 2); - } else { - R->selection.end.row = pos.row; - R->selection.end.col = pos.col; - R->selection.mark.row = R->selection.beg.row; - R->selection.mark.col = R->selection.beg.col; - } - } else { /* button1 drag or button3 drag */ - if (ROWCOL_IS_AFTER(R->selection.mark, pos)) { - if ((R->selection.mark.row == R->selection.end.row) - && (R->selection.mark.col == R->selection.end.col) - && clickchange && R->selection.clicks == 2) - R->selection.mark.col--; - R->selection.beg.row = pos.row; - R->selection.beg.col = pos.col; - R->selection.end.row = R->selection.mark.row; - R->selection.end.col = R->selection.mark.col - + (R->selection.clicks == 2); - } else { - R->selection.beg.row = R->selection.mark.row; - R->selection.beg.col = R->selection.mark.col; - R->selection.end.row = pos.row; - R->selection.end.col = pos.col; - } + if (button3 && buttonpress) { /* button3 press */ + /* + * first determine which edge of the selection we are closest to + */ + if (ROWCOL_IS_BEFORE(pos, R->selection.beg) + || (!ROWCOL_IS_AFTER(pos, R->selection.end) + && (((pos.col - R->selection.beg.col) + + ((pos.row - R->selection.beg.row) * ncol)) + < ((R->selection.end.col - pos.col) + + ((R->selection.end.row - pos.row) * ncol))))) + closeto = LEFT; + if (closeto == LEFT) { + R->selection.beg.row = pos.row; + R->selection.beg.col = pos.col; + R->selection.mark.row = R->selection.end.row; + R->selection.mark.col = R->selection.end.col + - (R->selection.clicks == 2); + } else { + R->selection.end.row = pos.row; + R->selection.end.col = pos.col; + R->selection.mark.row = R->selection.beg.row; + R->selection.mark.col = R->selection.beg.col; + } + } else { /* button1 drag or button3 drag */ + if (ROWCOL_IS_AFTER(R->selection.mark, pos)) { + if ((R->selection.mark.row == R->selection.end.row) + && (R->selection.mark.col == R->selection.end.col) + && clickchange && R->selection.clicks == 2) + R->selection.mark.col--; + R->selection.beg.row = pos.row; + R->selection.beg.col = pos.col; + R->selection.end.row = R->selection.mark.row; + R->selection.end.col = R->selection.mark.col + + (R->selection.clicks == 2); + } else { + R->selection.beg.row = R->selection.mark.row; + R->selection.beg.col = R->selection.mark.col; + R->selection.end.row = pos.row; + R->selection.end.col = pos.col; + } } if (R->selection.clicks == 1) { - end_col = R->screen.tlen[R->selection.beg.row + R->TermWin.saveLines]; - if (end_col != -1 && R->selection.beg.col > end_col) { + end_col = R->screen.tlen[R->selection.beg.row + R->TermWin.saveLines]; + if (end_col != -1 && R->selection.beg.col > end_col) { #if 1 - R->selection.beg.col = ncol; + R->selection.beg.col = ncol; #else - if (R->selection.beg.row != R->selection.end.row) - R->selection.beg.col = ncol; - else - R->selection.beg.col = R->selection.mark.col; + if (R->selection.beg.row != R->selection.end.row) + R->selection.beg.col = ncol; + else + R->selection.beg.col = R->selection.mark.col; #endif - } - end_col = R->screen.tlen[R->selection.end.row + R->TermWin.saveLines]; - if (end_col != -1 && R->selection.end.col > end_col) - R->selection.end.col = ncol; + } + end_col = R->screen.tlen[R->selection.end.row + R->TermWin.saveLines]; + if (end_col != -1 && R->selection.end.col > end_col) + R->selection.end.col = ncol; } else if (R->selection.clicks == 2) { - if (ROWCOL_IS_AFTER(R->selection.end, R->selection.beg)) - R->selection.end.col--; - rxvt_selection_delimit_word(aR_ UP, &(R->selection.beg), - &(R->selection.beg)); - rxvt_selection_delimit_word(aR_ DN, &(R->selection.end), - &(R->selection.end)); + if (ROWCOL_IS_AFTER(R->selection.end, R->selection.beg)) + R->selection.end.col--; + rxvt_selection_delimit_word(aR_ UP, &(R->selection.beg), + &(R->selection.beg)); + rxvt_selection_delimit_word(aR_ DN, &(R->selection.end), + &(R->selection.end)); } else if (R->selection.clicks == 3) { #ifndef NO_FRILLS - if ((R->Options & Opt_tripleclickwords)) { - int end_row; - - rxvt_selection_delimit_word(aR_ UP, &(R->selection.beg), - &(R->selection.beg)); - end_row = R->screen.tlen[R->selection.mark.row - + R->TermWin.saveLines]; - for (end_row = R->selection.mark.row; end_row < R->TermWin.nrow; - end_row++) { - end_col = R->screen.tlen[end_row + R->TermWin.saveLines]; - if (end_col != -1) { - R->selection.end.row = end_row; - R->selection.end.col = end_col; - rxvt_selection_remove_trailing_spaces(aR); - break; - } - } - } else -#endif - { - if (ROWCOL_IS_AFTER(R->selection.mark, R->selection.beg)) - R->selection.mark.col++; - R->selection.beg.col = 0; - R->selection.end.col = ncol; - } + if ((R->Options & Opt_tripleclickwords)) { + int end_row; + + rxvt_selection_delimit_word(aR_ UP, &(R->selection.beg), + &(R->selection.beg)); + end_row = R->screen.tlen[R->selection.mark.row + + R->TermWin.saveLines]; + for (end_row = R->selection.mark.row; end_row < R->TermWin.nrow; + end_row++) { + end_col = R->screen.tlen[end_row + R->TermWin.saveLines]; + if (end_col != -1) { + R->selection.end.row = end_row; + R->selection.end.col = end_col; + rxvt_selection_remove_trailing_spaces(aR); + break; + } + } + } else +#endif + { + if (ROWCOL_IS_AFTER(R->selection.mark, R->selection.beg)) + R->selection.mark.col++; + R->selection.beg.col = 0; + R->selection.end.col = ncol; + } } - if (button3 && buttonpress) { /* mark may need to be changed */ - if (closeto == LEFT) { - R->selection.mark.row = R->selection.end.row; - R->selection.mark.col = R->selection.end.col - - (R->selection.clicks == 2); - } else { - R->selection.mark.row = R->selection.beg.row; - R->selection.mark.col = R->selection.beg.col; - } + if (button3 && buttonpress) { /* mark may need to be changed */ + if (closeto == LEFT) { + R->selection.mark.row = R->selection.end.row; + R->selection.mark.col = R->selection.end.col + - (R->selection.clicks == 2); + } else { + R->selection.mark.row = R->selection.beg.row; + R->selection.mark.col = R->selection.beg.col; + } } D_SELECT((stderr, "rxvt_selection_extend_colrow() EXIT b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col)); -#endif /* ! NO_NEW_SELECTION */ +#endif /* ! NO_NEW_SELECTION */ } #ifndef NO_FRILLS @@ -3163,26 +3182,26 @@ rxvt_selection_remove_trailing_spaces(pR) end_col = R->selection.end.col; end_row = R->selection.end.row; for ( ; end_row >= R->selection.beg.row; ) { - stp = R->screen.text[end_row + R->TermWin.saveLines]; - while (--end_col >= 0) { - if (stp[end_col] != ' ' && stp[end_col] != '\t') - break; - } - if (end_col >= 0 - || R->screen.tlen[end_row - 1 + R->TermWin.saveLines] != -1) { - R->selection.end.col = end_col + 1; - R->selection.end.row = end_row; - break; - } - end_row--; - end_col = R->TermWin.ncol; + stp = R->screen.text[end_row + R->TermWin.saveLines]; + while (--end_col >= 0) { + if (stp[end_col] != ' ' && stp[end_col] != '\t') + break; + } + if (end_col >= 0 + || R->screen.tlen[end_row - 1 + R->TermWin.saveLines] != -1) { + R->selection.end.col = end_col + 1; + R->selection.end.row = end_row; + break; + } + end_row--; + end_col = R->TermWin.ncol; } if (R->selection.mark.row > R->selection.end.row) { - R->selection.mark.row = R->selection.end.row; - R->selection.mark.col = R->selection.end.col; + R->selection.mark.row = R->selection.end.row; + R->selection.mark.col = R->selection.end.col; } else if (R->selection.mark.row == R->selection.end.row - && R->selection.mark.col > R->selection.end.col) - R->selection.mark.col = R->selection.end.col; + && R->selection.mark.col > R->selection.end.col) + R->selection.mark.col = R->selection.end.col; } #endif @@ -3236,68 +3255,68 @@ rxvt_selection_send(pR_ const XSelectionRequestEvent *rq) ev.time = rq->time; if (rq->target == R->xa[XA_TARGETS]) { - target_list[0] = (Atom32) R->xa[XA_TARGETS]; - target_list[1] = (Atom32) XA_STRING; - target_list[2] = (Atom32) R->xa[XA_TEXT]; + target_list[0] = (Atom32) R->xa[XA_TARGETS]; + target_list[1] = (Atom32) XA_STRING; + target_list[2] = (Atom32) R->xa[XA_TEXT]; #ifdef USE_XIM - target_list[3] = (Atom32) R->xa[XA_COMPOUND_TEXT]; + target_list[3] = (Atom32) R->xa[XA_COMPOUND_TEXT]; #endif - XChangeProperty(R->Xdisplay, rq->requestor, rq->property, XA_ATOM, - (8 * sizeof(target_list[0])), PropModeReplace, - (unsigned char *)target_list, - (sizeof(target_list) / sizeof(target_list[0]))); - ev.property = rq->property; + XChangeProperty(R->Xdisplay, rq->requestor, rq->property, XA_ATOM, + (8 * sizeof(target_list[0])), PropModeReplace, + (unsigned char *)target_list, + (sizeof(target_list) / sizeof(target_list[0]))); + ev.property = rq->property; } else if (rq->target == R->xa[XA_MULTIPLE]) { - /* TODO: Handle MULTIPLE */ + /* TODO: Handle MULTIPLE */ } else if (rq->target == R->xa[XA_TIMESTAMP] && R->selection.text) { - XChangeProperty(R->Xdisplay, rq->requestor, rq->property, XA_INTEGER, - (8 * sizeof(Time)), PropModeReplace, - (unsigned char *)&R->selection_time, 1); - ev.property = rq->property; + XChangeProperty(R->Xdisplay, rq->requestor, rq->property, XA_INTEGER, + (8 * sizeof(Time)), PropModeReplace, + (unsigned char *)&R->selection_time, 1); + ev.property = rq->property; } else if (rq->target == XA_STRING - || rq->target == R->xa[XA_COMPOUND_TEXT] - || rq->target == R->xa[XA_TEXT]) { + || rq->target == R->xa[XA_COMPOUND_TEXT] + || rq->target == R->xa[XA_TEXT]) { #ifdef USE_XIM - short freect = 0; + short freect = 0; #endif - int selectlen; + int selectlen; #ifdef USE_XIM - if (rq->target != XA_STRING) { - target = R->xa[XA_COMPOUND_TEXT]; - style = (rq->target == R->xa[XA_COMPOUND_TEXT]) - ? XCompoundTextStyle : XStdICCTextStyle; - } else -#endif - { - target = XA_STRING; - style = XStringStyle; - } - if (R->selection.text) { - cl[0] = (char *)R->selection.text; - selectlen = R->selection.len; - } else { - cl[0] = dummy; - *dummy = '\0'; - selectlen = 0; - } + if (rq->target != XA_STRING) { + target = R->xa[XA_COMPOUND_TEXT]; + style = (rq->target == R->xa[XA_COMPOUND_TEXT]) + ? XCompoundTextStyle : XStdICCTextStyle; + } else +#endif + { + target = XA_STRING; + style = XStringStyle; + } + if (R->selection.text) { + cl[0] = (char *)R->selection.text; + selectlen = R->selection.len; + } else { + cl[0] = dummy; + *dummy = '\0'; + selectlen = 0; + } #ifdef USE_XIM - if (XmbTextListToTextProperty(R->Xdisplay, cl, 1, style, &ct) - == Success) /* if we failed to convert then send it raw */ - freect = 1; - else -#endif - { - ct.value = (unsigned char *)cl[0]; - ct.nitems = selectlen; - } - XChangeProperty(R->Xdisplay, rq->requestor, rq->property, - target, 8, PropModeReplace, - ct.value, (int)ct.nitems); - ev.property = rq->property; + if (XmbTextListToTextProperty(R->Xdisplay, cl, 1, style, &ct) + == Success) /* if we failed to convert then send it raw */ + freect = 1; + else +#endif + { + ct.value = (unsigned char *)cl[0]; + ct.nitems = selectlen; + } + XChangeProperty(R->Xdisplay, rq->requestor, rq->property, + target, 8, PropModeReplace, + ct.value, (int)ct.nitems); + ev.property = rq->property; #ifdef USE_XIM - if (freect) - XFree(ct.value); + if (freect) + XFree(ct.value); #endif } XSendEvent(R->Xdisplay, rq->requestor, False, 0L, (XEvent *)&ev); @@ -3330,7 +3349,7 @@ rxvt_setPosition(pR_ XPoint *pos) XGetWindowAttributes(R->Xdisplay, R->TermWin.vt, &xwa); pos->x = Col2Pixel(R->screen.cur.col) + xwa.x; pos->y = Height2Pixel((R->screen.cur.row + 1)) + xwa.y - - R->TermWin.lineSpace; + - R->TermWin.lineSpace; } #endif /* ------------------------------------------------------------------------- */ @@ -3345,26 +3364,26 @@ rxvt_debug_colors(void) { int color; const char *name[] = { - "fg", "bg", - "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white" + "fg", "bg", + "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white" }; fprintf(stderr, "Color ( "); if (R->rstyle & RS_RVid) - fprintf(stderr, "rvid "); + fprintf(stderr, "rvid "); if (R->rstyle & RS_Bold) - fprintf(stderr, "bold "); + fprintf(stderr, "bold "); if (R->rstyle & RS_Blink) - fprintf(stderr, "blink "); + fprintf(stderr, "blink "); if (R->rstyle & RS_Uline) - fprintf(stderr, "uline "); + fprintf(stderr, "uline "); fprintf(stderr, "): "); color = GET_FGCOLOR(R->rstyle); #ifndef NO_BRIGHTCOLOR if (color >= minBrightCOLOR && color <= maxBrightCOLOR) { - color -= (minBrightCOLOR - minCOLOR); - fprintf(stderr, "bright "); + color -= (minBrightCOLOR - minCOLOR); + fprintf(stderr, "bright "); } #endif fprintf(stderr, "%s on ", name[color]); @@ -3372,8 +3391,8 @@ rxvt_debug_colors(void) color = GET_BGCOLOR(R->rstyle); #ifndef NO_BRIGHTCOLOR if (color >= minBrightCOLOR && color <= maxBrightCOLOR) { - color -= (minBrightCOLOR - minCOLOR); - fprintf(stderr, "bright "); + color -= (minBrightCOLOR - minCOLOR); + fprintf(stderr, "bright "); } #endif fprintf(stderr, "%s\n", name[color]); -- 2.34.1