*** empty log message ***
authorpcg <pcg>
Tue, 2 Dec 2003 21:49:46 +0000 (21:49 +0000)
committerpcg <pcg>
Tue, 2 Dec 2003 21:49:46 +0000 (21:49 +0000)
src/command.C
src/init.C
src/iom.C
src/iom.h
src/main.C
src/ptytty.C
src/rxvt.h
src/rxvtc.C
src/rxvtd.C
src/rxvtlib.h.in
src/screen.C

index f07be2738d6ec2239bc9a5e23aeeb37d0f922545..c9b8a328431b5cd4d5f259a4faf76aa19884620d 100644 (file)
@@ -1,7 +1,7 @@
 /*--------------------------------*-C-*---------------------------------*
  * File:       command.c
  *----------------------------------------------------------------------*
- * $Id: command.C,v 1.10 2003-11-27 16:49:45 pcg Exp $
+ * $Id: command.C,v 1.11 2003-12-02 21:49:46 pcg Exp $
  *
  * All portions of code are copyright by their respective author/s.
  * Copyright (c) 1992      John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk>
@@ -657,6 +657,43 @@ rxvt_cmd_write(pR_ const unsigned char *str, unsigned int count)
 }
 #endif                         /* MENUBAR_MAX */
 
+void
+rxvt_term::flush ()
+{
+#ifdef TRANSPARENT
+  if (want_full_refresh)
+    {
+      want_full_refresh = 0;
+      rxvt_scr_clear (this);
+      rxvt_scr_touch (this, False);
+      want_refresh = 1;
+    }
+#endif
+
+  if (want_refresh)
+    {
+      rxvt_scr_refresh (this, refresh_type);
+      rxvt_scrollbar_show (this, 1);
+#ifdef USE_XIM
+      rxvt_IMSendSpot (this);
+#endif
+    }
+
+  XFlush (Xdisplay);
+#if 0
+  if (XPending (Xdisplay)) process_x_events ();
+  if (XPending (Xdisplay)) process_x_events ();
+#endif
+}
+
+void
+rxvt_term::check_cb (check_watcher &w)
+{
+  SET_R (this);
+
+  flush ();
+}
+
 void
 rxvt_term::process_x_events ()
 {
@@ -711,7 +748,6 @@ rxvt_term::blink_cb (time_watcher &w)
   w.at += BLINK_INTERVAL;
   hidden_cursor = !hidden_cursor;
   want_refresh = 1;
-  flush ();
 }
 
 void
@@ -720,63 +756,6 @@ rxvt_term::x_cb (io_watcher &w, short revents)
   SET_R (this);
 
   process_x_events ();
-
-  flush ();
-}
-
-// read the next character, currently handles UTF-8
-// will probably handle all sorts of other stuff in the future
-uint32_t
-rxvt_term::next_char ()
-{
-  struct mbstate &s = mbstate;
-
-  while (cmdbuf_ptr < cmdbuf_endp)
-    {
-      uint8_t ch = *cmdbuf_ptr;
-
-      if (s.cnt)
-        {
-          if ((ch & 0xc0) == 0x80)
-            {
-              cmdbuf_ptr++;
-
-              /* continuation */
-              s.reg = (s.reg << 6) | (ch & 0x7f);
-
-              if (--s.cnt == 0 && s.reg >= 128) /* if !inrange then corruption or Racking */
-                return s.reg;
-
-              continue;
-            }
-          else
-            {
-              s.cnt = 0;
-              return s.orig; /* the _occasional_ non-utf-8 character may slip through... */
-            }
-        }
-      
-      if ((ch & 0xc0) == 0xc0)
-        {
-          cmdbuf_ptr++;
-
-          /* first byte */
-          s.orig = ch; /* for broken encodings */
-          s.reg = ch;
-          if ((ch & 0xe0) == 0xc0) { s.reg &= 0x1f; s.cnt = 1; }
-          if ((ch & 0xf0) == 0xe0) { s.reg &= 0x0f; s.cnt = 2; }
-          if ((ch & 0xf8) == 0xf0) { s.reg &= 0x07; s.cnt = 3; }
-          if ((ch & 0xfc) == 0xf8) { s.reg &= 0x03; s.cnt = 4; }
-          if ((ch & 0xfe) == 0xfc) { s.reg &= 0x01; s.cnt = 5; }
-        }
-      else
-        {
-          cmdbuf_ptr++; /* _occasional_ non-utf8 may slip through... */
-          return ch;
-        }
-    }
-
-  return NOCHAR;
 }
 
 bool
@@ -811,12 +790,14 @@ rxvt_term::pty_cb (io_watcher &w, short revents)
   else if (revents & EVENT_READ)
     // loop, but don't allow a single term to monopolize us
     // the number of loops is fully arbitrary, and thus wrong
-    for (int i = 7; i-- && pty_fill (); )
+    for (int i = 1; i-- && pty_fill (); )
       {
-        //TODO:
-        /* 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);
+        if (!seen_input)
+          {
+            seen_input = 1;
+            /* once we know the shell is running, send the screen size.  Again! */
+            tt_winch ();
+          }
 
         uint32_t ch = NOCHAR;
 
@@ -908,35 +889,61 @@ rxvt_term::pty_cb (io_watcher &w, short revents)
               }
           }
       }
-
-  flush ();
 }
 
-void
-rxvt_term::flush ()
+// read the next character, currently handles UTF-8
+// will probably handle all sorts of other stuff in the future
+uint32_t
+rxvt_term::next_char ()
 {
-#ifdef TRANSPARENT
-  if (want_full_refresh)
-    {
-      want_full_refresh = 0;
-      rxvt_scr_clear (this);
-      rxvt_scr_touch (this, False);
-      want_refresh = 1;
-    }
-#endif
+  struct mbstate &s = mbstate;
 
-  if (want_refresh)
+  while (cmdbuf_ptr < cmdbuf_endp)
     {
-      rxvt_scr_refresh (this, refresh_type);
-      rxvt_scrollbar_show (this, 1);
-#ifdef USE_XIM
-      rxvt_IMSendSpot (this);
-#endif
+      uint8_t ch = *cmdbuf_ptr;
+
+      if (s.cnt)
+        {
+          if ((ch & 0xc0) == 0x80)
+            {
+              cmdbuf_ptr++;
+
+              /* continuation */
+              s.reg = (s.reg << 6) | (ch & 0x7f);
+
+              if (--s.cnt == 0 && s.reg >= 128) /* if !inrange then corruption or Racking */
+                return s.reg;
+
+              continue;
+            }
+          else
+            {
+              s.cnt = 0;
+              return s.orig; /* the _occasional_ non-utf-8 character may slip through... */
+            }
+        }
+      
+      if ((ch & 0xc0) == 0xc0)
+        {
+          cmdbuf_ptr++;
+
+          /* first byte */
+          s.orig = ch; /* for broken encodings */
+          s.reg = ch;
+          if ((ch & 0xe0) == 0xc0) { s.reg &= 0x1f; s.cnt = 1; }
+          if ((ch & 0xf0) == 0xe0) { s.reg &= 0x0f; s.cnt = 2; }
+          if ((ch & 0xf8) == 0xf0) { s.reg &= 0x07; s.cnt = 3; }
+          if ((ch & 0xfc) == 0xf8) { s.reg &= 0x03; s.cnt = 4; }
+          if ((ch & 0xfe) == 0xfc) { s.reg &= 0x01; s.cnt = 5; }
+        }
+      else
+        {
+          cmdbuf_ptr++; /* _occasional_ non-utf8 may slip through... */
+          return ch;
+        }
     }
 
-  if (XPending (Xdisplay)) process_x_events ();
-  XFlush (Xdisplay);
-  if (XPending (Xdisplay)) process_x_events ();
+  return NOCHAR;
 }
 
 /* rxvt_cmd_getc() - Return next input character */
@@ -2096,15 +2103,15 @@ rxvt_popen_printer(pR)
 
 /* EXTPROTO */
 int
-rxvt_pclose_printer(FILE *stream)
+rxvt_pclose_printer (FILE *stream)
 {
-    fflush(stream);
+  fflush (stream);
 /* pclose() reported not to work on SunOS 4.1.3 */
 # if defined (__sun__)         /* TODO: RESOLVE THIS */
 /* pclose works provided SIGCHLD handler uses waitpid */
-    return pclose(stream);     /* return fclose (stream); */
+  return pclose (stream);      /* return fclose (stream); */
 # else
-    return pclose(stream);
+  return pclose (stream);
 # endif
 }
 
index f77bbfe155bed8d2945740a987997abb57e1b69c..8d6df159dff2102e92b7f2f6d5cc35eb43da86e7 100644 (file)
@@ -1,7 +1,7 @@
 /*--------------------------------*-C-*---------------------------------*
  * File:        init.c
  *----------------------------------------------------------------------*
- * $Id: init.C,v 1.8 2003-11-27 10:12:10 pcg Exp $
+ * $Id: init.C,v 1.9 2003-12-02 21:49:46 pcg Exp $
  *
  * All portions of code are copyright by their respective author/s.
  * Copyright (c) 1992      John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk>
 
 #include <signal.h>
 
-const char *const def_colorName[] = {
+const char *const def_colorName[] =
+  {
     COLOR_FOREGROUND,
     COLOR_BACKGROUND,
-/* low-intensity colors */
+    /* low-intensity colors */
     "Black",                    /* 0: black             (#000000) */
 #ifndef NO_BRIGHTCOLOR
     "Red3",                     /* 1: red               (#CD0000) */
@@ -54,7 +55,7 @@ const char *const def_colorName[] = {
 # else
     "AntiqueWhite",             /* 7: white             (#FAEBD7) */
 # endif
-/* high-intensity colors */
+    /* high-intensity colors */
 # ifdef XTERM_COLORS
     "Grey30",                   /* 8: bright black      (#4D4D4D) */
 # else
@@ -328,12 +329,13 @@ const char *const def_colorName[] = {
     COLOR_SCROLLBAR,
     COLOR_SCROLLTROUGH,
 #endif                          /* KEEP_SCROLLCOLOR */
-};
+  };
 
-const char *const xa_names[NUM_XA] = {
+const char *const xa_names[NUM_XA] =
+  {
     "COMPOUND_TEXT",
-    "MULTIPLE", 
-    "TARGETS",  
+    "MULTIPLE",
+    "TARGETS",
     "TEXT",
     "TIMESTAMP",
     "VT_SELECTION",
@@ -347,141 +349,146 @@ const char *const xa_names[NUM_XA] = {
     "DndSelection",
 #endif
     "CLIPBOARD"
-};
+  };
 
-/*----------------------------------------------------------------------*/
-/* substitute system functions */
-#if defined(__svr4__) && ! defined(_POSIX_VERSION)
-/* INTPROTO */
-int
-rxvt_getdtablesize(void)
-{
-    struct rlimit   rlim;
-
-    getrlimit(RLIMIT_NOFILE, &rlim);
-    return rlim.rlim_cur;
-}
-#endif
-/*----------------------------------------------------------------------*/
 bool
 rxvt_term::init_vars()
 {
-    PixColors = new rxvt_color [TOTAL_COLORS];
-    if (PixColors == NULL)
-        return false;
+  PixColors = new rxvt_color [TOTAL_COLORS];
+  if (PixColors == NULL)
+    return false;
 
 #if defined(XPM_BACKGROUND) || defined(TRANSPARENT)
-    TermWin.pixmap = None;
+
+  TermWin.pixmap = None;
 #endif
 #ifdef UTMP_SUPPORT
-    next_utmp_action = SAVE;
+
+  next_utmp_action = SAVE;
 #endif
 #ifndef NO_SETOWNER_TTYDEV
-    next_tty_action = SAVE;
+
+  next_tty_action = SAVE;
 #endif
-    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 = 0;
-    TermWin.ncol = 80;
-    TermWin.nrow = 24;
-    TermWin.int_bwidth = INTERNALBORDERWIDTH;
-    TermWin.ext_bwidth = EXTERNALBORDERWIDTH;
-    TermWin.lineSpace = LINESPACE;
-    TermWin.saveLines = SAVELINES;
-    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 = 0;
+  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
-    selection_style = NEW_SELECT;
+
+  selection_style = NEW_SELECT;
 #else
-    selection_style = OLD_SELECT;
+
+  selection_style = OLD_SELECT;
 #endif
 #ifndef NO_BRIGHTCOLOR
-    colorfgbg = DEFAULT_RSTYLE;
+
+  colorfgbg = DEFAULT_RSTYLE;
 #endif
 #if defined (HOTKEY_CTRL) || defined (HOTKEY_META)
-    ks_bigfont = XK_greater;
-    ks_smallfont = XK_less;
+
+  ks_bigfont = XK_greater;
+  ks_smallfont = XK_less;
 #endif
 #ifdef GREEK_SUPPORT
-    ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH;
+
+  ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH;
 #endif
-    refresh_limit = 1;
-    refresh_type = SLOW_REFRESH;
-    prev_nrow = prev_ncol = 0;
+
+  refresh_limit = 1;
+  refresh_type = SLOW_REFRESH;
+  prev_nrow = prev_ncol = 0;
 #ifdef MULTICHAR_SET
 # ifdef MULTICHAR_ENCODING
-    encoding_method = MULTICHAR_ENCODING;
+
+  encoding_method = MULTICHAR_ENCODING;
 # endif
-    multichar_decode = rxvt_euc2jis;
+
+  multichar_decode = rxvt_euc2jis;
 #endif
-    oldcursor.row = oldcursor.col = -1;
+
+  oldcursor.row = oldcursor.col = -1;
 #ifdef XPM_BACKGROUND
-/*  bgPixmap.w = bgPixmap.h = 0; */
-    bgPixmap.x = bgPixmap.y = 50;
-    bgPixmap.pixmap = None;
+  /*  bgPixmap.w = bgPixmap.h = 0; */
+  bgPixmap.x = bgPixmap.y = 50;
+  bgPixmap.pixmap = None;
 #endif
-    last_bot = last_state = -1;
+
+  last_bot = last_state = -1;
 #ifdef MENUBAR
-    menu_readonly = 1;
+
+  menu_readonly = 1;
 # if !(MENUBAR_MAX > 1)
-    CurrentBar = &(BarList);
+
+  CurrentBar = &(BarList);
 # endif                         /* (MENUBAR_MAX > 1) */
 #endif
 
-    return true;
+  return true;
 }
 
 /* EXTPROTO */
 void
-rxvt_init_secondary(pR)
+rxvt_init_secondary (pR)
 {
-    int             i;
+  int             i;
 #ifdef TTY_GID_SUPPORT
-    struct group   *gr = getgrnam("tty");
+  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;
-    } else
+  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 */
     {
-        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, "");
-#endif
 
-/* get number of available file descriptors */
-#if defined(_POSIX_VERSION) || ! defined(__svr4__)
-    R->num_fds = (int)sysconf(_SC_OPEN_MAX);
-#else
-    R->num_fds = rxvt_getdtablesize();
+#if defined(HAVE_XSETLOCALE) || defined(HAVE_SETLOCALE)
+  R->locale = setlocale (LC_CTYPE, "");
 #endif
 
-/*
- * Close all unused file descriptors
- * 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);
-    } else if (i > STDIN_FILENO) {
-        dup2(i, STDIN_FILENO);
-        close(i);
+  /*
+   * Close all unused file descriptors
+   * 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);
+    }
+  else if (i > STDIN_FILENO)
+    {
+      dup2 (i, STDIN_FILENO);
+      close (i);
     }
-    dup2(STDERR_FILENO, STDOUT_FILENO);
+
+  dup2 (STDERR_FILENO, STDOUT_FILENO);
 #if 0 // schmorp sayz closing filies is murder
-    for (i = STDERR_FILENO + 1; i < R->num_fds; i++) {
+
+  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;
+      if (i == 4 || i == 7)
+        continue;
 #endif
-        close(i);
+
+      close(i);
     }
 #endif
 }
@@ -489,210 +496,240 @@ rxvt_init_secondary(pR)
 /*----------------------------------------------------------------------*/
 /* EXTPROTO */
 const char    **
-rxvt_init_resources(pR_ int argc, const char *const *argv)
+rxvt_init_resources (pR_ int argc, const char *const *argv)
 {
-    int             i, r_argc;
-    char           *val;
-    const char    **cmd_argv, **r_argv;
-    const char    **rs;
+  int i, r_argc;
+  char *val;
+  const char **cmd_argv, **r_argv;
+  const char **rs;
 
-/*
- * 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;
-    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] = NULL;
-    if (r_argc == argc)
-        cmd_argv = NULL;
-    else {
-        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;
+  /*
+   * 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;
+  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] = NULL;
+  if (r_argc == argc)
+    cmd_argv = NULL;
+  else
+    {
+      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;
     }
 
-/* clear all resources */
-    rs = R->rs;
-    for (i = 0; i < NUM_RESOURCES;)
-        rs[i++] = NULL;
+  /* clear all resources */
+  rs = R->rs;
+  for (i = 0; i < NUM_RESOURCES;)
+    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_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";
 
-    rxvt_get_options(aR_ r_argc, r_argv);
-    free(r_argv);
+  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);
+
+  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);
     }
 #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);
+  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);
     }
 
-    rxvt_extract_resources(aR_ R->Xdisplay, rs[Rs_name]);
+  rxvt_extract_resources(aR_ R->Xdisplay, rs[Rs_name]);
 
-/*
- * 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];
-    } else {
-        if (!rs[Rs_title])
-            rs[Rs_title] = rs[Rs_name];
-        if (!rs[Rs_iconName])
-            rs[Rs_iconName] = rs[Rs_name];
+  /*
+   * 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];
+    }
+  else
+    {
+      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);
+  if (rs[Rs_saveLines] && (i = atoi(rs[Rs_saveLines])) >= 0)
+    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 */
-    if (rs[Rs_ext_bwidth] && (i = atoi(rs[Rs_ext_bwidth])) >= 0)
-        R->TermWin.ext_bwidth = min(i, 100);    /* arbitrary limit */
+
+  if (rs[Rs_int_bwidth] && (i = atoi(rs[Rs_int_bwidth])) >= 0)
+    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 */
 #endif
 #ifndef NO_LINESPACE
-    if (rs[Rs_lineSpace] && (i = atoi(rs[Rs_lineSpace])) >= 0)
-        R->TermWin.lineSpace = min(i, 100);     /* arbitrary limit */
+
+  if (rs[Rs_lineSpace] && (i = atoi(rs[Rs_lineSpace])) >= 0)
+    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;
-    else
-        R->pointerBlankDelay = 2;
+
+  if (rs[Rs_pointerBlankDelay] && (i = atoi(rs[Rs_pointerBlankDelay])) >= 0)
+    R->pointerBlankDelay = i;
+  else
+    R->pointerBlankDelay = 2;
 #endif
 
-/* no point having a scrollbar without having any scrollback! */
-    if (!R->TermWin.saveLines)
-        R->Options &= ~Opt_scrollBar;
+  /* no point having a scrollbar without having any scrollback! */
+  if (!R->TermWin.saveLines)
+    R->Options &= ~Opt_scrollBar;
 
 #ifdef PRINTPIPE
-    if (!rs[Rs_print_pipe])
-        rs[Rs_print_pipe] = PRINTPIPE;
+
+  if (!rs[Rs_print_pipe])
+    rs[Rs_print_pipe] = PRINTPIPE;
 #endif
-    if (!rs[Rs_cutchars])
-        rs[Rs_cutchars] = CUTCHARS;
+
+  if (!rs[Rs_cutchars])
+    rs[Rs_cutchars] = CUTCHARS;
 #ifdef ACS_ASCII
-    if (!rs[Rs_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;
+
+  if (!rs[Rs_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;
     }
 #endif
 #ifndef NO_BACKSPACE_KEY
-    if (!rs[Rs_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;
+
+  else
+    {
+      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])
+  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;
+
+  else
+    {
+      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]);
+  if (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 (rs[Rs_selectstyle])
+    {
+      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]);
+  rxvt_setup_scrollbar(aR_ rs[Rs_scrollBar_align], rs[Rs_scrollstyle],
+                       rs[Rs_scrollBar_thickness]);
 #endif
 
-    R->TermWin.fontset = new rxvt_fontset (aR);
-    R->TermWin.fontset->populate (rs[Rs_font]);
-    R->TermWin.fwidth  = R->TermWin.fontset->base_font ()->width;
-    R->TermWin.fheight = R->TermWin.fontset->base_font ()->height;
-    R->TermWin.fbase   = R->TermWin.fontset->base_font ()->ascent;
+  R->TermWin.fontset = new rxvt_fontset (aR);
+  R->TermWin.fontset->populate (rs[Rs_font]);
+  R->TermWin.fwidth  = R->TermWin.fontset->base_font ()->width;
+  R->TermWin.fheight = R->TermWin.fontset->base_font ()->height;
+  R->TermWin.fbase   = R->TermWin.fontset->base_font ()->ascent;
 
 #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];
+  /* 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];
     }
 #endif
 
-    for (i = 0; i < NRS_COLORS; i++)
-        if (!rs[Rs_color + i])
-            rs[Rs_color + i] = def_colorName[i];
+  for (i = 0; i < NRS_COLORS; 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 *);
+  /* 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 *);
 #endif
 
-/* convenient aliases for setting fg/bg to colors */
-    rxvt_color_aliases(aR_ Color_fg);
-    rxvt_color_aliases(aR_ Color_bg);
+  /* convenient aliases for setting fg/bg to colors */
+  rxvt_color_aliases(aR_ Color_fg);
+  rxvt_color_aliases(aR_ Color_bg);
 #ifndef NO_CURSORCOLOR
-    rxvt_color_aliases(aR_ Color_cursor);
-    rxvt_color_aliases(aR_ Color_cursor2);
+
+  rxvt_color_aliases(aR_ Color_cursor);
+  rxvt_color_aliases(aR_ Color_cursor2);
 #endif                          /* NO_CURSORCOLOR */
-    rxvt_color_aliases(aR_ Color_pointer);
-    rxvt_color_aliases(aR_ Color_border);
+
+  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);
+
+  rxvt_color_aliases(aR_ Color_BD);
+  rxvt_color_aliases(aR_ Color_UL);
+  rxvt_color_aliases(aR_ Color_RV);
 #endif                          /* ! NO_BOLD_UNDERLINE_REVERSE */
 
-    return cmd_argv;
+  return cmd_argv;
 }
 
 /*----------------------------------------------------------------------*/
@@ -700,71 +737,77 @@ rxvt_init_resources(pR_ int argc, const char *const *argv)
 void
 rxvt_init_env(pR)
 {
-    int             i;
-    unsigned int    u;
-    char           *val;
+  int             i;
+  unsigned int    u;
+  char           *val;
 
 #ifdef DISPLAY_IS_IP
-/* Fixup display_name for export over pty to any interested terminal
- * clients via "ESC[7n" (e.g. shells).  Note we use the pure IP number
- * (for the first non-loopback interface) that we get from
- * rxvt_network_display().  This is more "name-resolution-portable", if you
- * will, and probably allows for faster x-client startup if your name
- * server is beyond a slow link or overloaded at client startup.  Of
- * course that only helps the shell's child processes, not us.
- *
- * Giving out the display_name also affords a potential security hole
- */
-    val = rxvt_network_display(R->rs[Rs_display_name]);
-    R->rs[Rs_display_name] = (const char *)val;
-    if (val == NULL)
+  /* Fixup display_name for export over pty to any interested terminal
  * clients via "ESC[7n" (e.g. shells).  Note we use the pure IP number
  * (for the first non-loopback interface) that we get from
  * rxvt_network_display().  This is more "name-resolution-portable", if you
  * will, and probably allows for faster x-client startup if your name
  * server is beyond a slow link or overloaded at client startup.  Of
  * course that only helps the shell's child processes, not us.
  *
  * Giving out the display_name also affords a potential security hole
  */
+  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);
-    if (R->rs[Rs_display_name] == NULL)
-        R->rs[Rs_display_name] = val;   /* use broken `:0' value */
-
-    i = STRLEN(val);
-    R->env_display = (char *)rxvt_malloc((i + 9) * sizeof(char));
-
-    sprintf(R->env_display, "DISPLAY=%s", val);
-
-    /* avoiding the math library:
-     * i = (int)(ceil(log10((unsigned int)R->TermWin.parent[0]))) */
-    for (i = 0, u = (unsigned int)R->TermWin.parent[0]; u; u /= 10, i++) ;
-    MAX_IT(i, 1);
-    R->env_windowid = (char *)rxvt_malloc((i + 10) * sizeof(char));
-
-    sprintf(R->env_windowid, "WINDOWID=%u",
-            (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
- */
-    putenv(R->env_display);
-    putenv(R->env_windowid);
+
+    val = XDisplayString(R->Xdisplay);
+  if (R->rs[Rs_display_name] == NULL)
+    R->rs[Rs_display_name] = val;   /* use broken `:0' value */
+
+  i = STRLEN(val);
+  R->env_display = (char *)rxvt_malloc((i + 9) * sizeof(char));
+
+  sprintf(R->env_display, "DISPLAY=%s", val);
+
+  /* avoiding the math library:
+   * i = (int)(ceil(log10((unsigned int)R->TermWin.parent[0]))) */
+  for (i = 0, u = (unsigned int)R->TermWin.parent[0]; u; u /= 10, i++)
+    ;
+  MAX_IT(i, 1);
+  R->env_windowid = (char *)rxvt_malloc((i + 10) * sizeof(char));
+
+  sprintf(R->env_windowid, "WINDOWID=%u",
+          (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
+   */
+  putenv(R->env_display);
+  putenv(R->env_windowid);
 #ifdef RXVT_TERMINFO
-    putenv("TERMINFO=" RXVT_TERMINFO);
+
+  putenv("TERMINFO=" RXVT_TERMINFO);
 #endif
-    if (XDEPTH <= 2)
-        putenv("COLORTERM=" COLORTERMENV "-mono");
-    else
-        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);
-    } else
-        putenv("TERM=" TERMENV);
+
+  if (XDEPTH <= 2)
+    putenv("COLORTERM=" COLORTERMENV "-mono");
+  else
+    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);
+    }
+  else
+    putenv("TERM=" TERMENV);
 
 #ifdef HAVE_UNSETENV
-/* avoid passing old settings and confusing term size */
-    unsetenv("LINES");
-    unsetenv("COLUMNS");
-    unsetenv("TERMCAP");        /* terminfo should be okay */
+  /* avoid passing old settings and confusing term size */
+  unsetenv("LINES");
+  unsetenv("COLUMNS");
+  unsetenv("TERMCAP");        /* terminfo should be okay */
 #endif                          /* HAVE_UNSETENV */
 }
 
@@ -778,29 +821,31 @@ void
 rxvt_init_xlocale(pR)
 {
 #ifdef USE_XIM
-    if (R->locale == NULL)
-        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;
+  if (R->locale == NULL)
+    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);
+      rxvt_setTermFontSet(aR_ 0);
 
-        /* see if we can connect yet */
-        rxvt_IMInstantiateCallback(R->Xdisplay, NULL, NULL);
+      /* 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);
+      /* To avoid Segmentation Fault in C locale: Solaris only? */
+      if (STRCMP(R->locale, "C"))
+        XRegisterIMInstantiateCallback(R->Xdisplay, NULL, NULL, NULL,
+                                       rxvt_IMInstantiateCallback, NULL);
     }
 #endif
 }
@@ -819,16 +864,17 @@ rxvt_init_command(pR_ const char *const *argv)
   for (i = 0; i < NUM_XA; i++)
     R->xa[i] = XInternAtom(R->Xdisplay, xa_names[i], False);
 
-/* Enable delete window protocol */
+  /* Enable delete window protocol */
   XSetWMProtocols(R->Xdisplay, R->TermWin.parent[0],
                   &(R->xa[XA_WMDELETEWINDOW]), 1);
 
 #ifdef USING_W11LIB
-/* enable W11 callbacks */
+  /* enable W11 callbacks */
   W11AddEventHandler(R->Xdisplay, rxvt_W11_process_x_event);
 #endif
 
 #ifdef META8_OPTION
+
   R->meta_char = (R->Options & Opt_meta8 ? 0x80 : C0_ESC);
 #endif
 
@@ -841,11 +887,12 @@ rxvt_init_command(pR_ const char *const *argv)
   if (!(R->Options & Opt_jumpScroll))
     R->PrivateModes |= PrivMode_smoothScroll;
 #ifndef NO_BACKSPACE_KEY
+
   if (STRCMP(R->key_backspace, "DEC") == 0)
     R->PrivateModes |= PrivMode_HaveBackSpace;
 #endif
-/* add value for scrollBar */
-  if (scrollbar_visible(R)) 
+  /* add value for scrollBar */
+  if (scrollbar_visible(R))
     {
       R->PrivateModes |= PrivMode_scrollBar;
       R->SavedModes |= PrivMode_scrollBar;
@@ -862,6 +909,7 @@ rxvt_init_command(pR_ const char *const *argv)
   R->Xfd = XConnectionNumber (R->Xdisplay);
 
 #ifdef CURSOR_BLINK
+
   if (R->Options & Opt_cursorBlink)
     (void)gettimeofday(&R->lastcursorchange, NULL);
 #endif
@@ -878,99 +926,114 @@ rxvt_init_command(pR_ const char *const *argv)
 void
 rxvt_Get_Colours(pR)
 {
-    int             i;
+  int             i;
 
-    for (i = 0; i < (XDEPTH <= 2 ? 2 : NRS_COLORS); i++) {
-        rxvt_color          xcol;
+  for (i = 0; i < (XDEPTH <= 2 ? 2 : NRS_COLORS); i++)
+    {
+      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) {
+
+            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;
+                  /* 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;
+                  xcol = R->PixColors[Color_fg];
+                  break;
 #endif                          /* ! NO_CURSORCOLOR */
+
                 case Color_pointer:
-                    xcol = R->PixColors[Color_fg];
-                    break;
+                  xcol = R->PixColors[Color_fg];
+                  break;
                 default:
-                    xcol = R->PixColors[Color_bg];      /* None */
-                    break;
+                  xcol = R->PixColors[Color_bg];      /* None */
+                  break;
                 }
             }
         }
-        R->PixColors[i] = xcol;
-        SET_PIXCOLOR(R, i);
+      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];
-    if (XDEPTH <= 2 || !R->rs[Rs_color + Color_border])
-        R->PixColors[Color_border] = R->PixColors[Color_fg];
+  if (XDEPTH <= 2 || !R->rs[Rs_color + Color_pointer])
+    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];
 
-/*
- * get scrollBar/menuBar shadow colors
- *
- * The calculations of topShadow/bottomShadow values are adapted
- * from the fvwm window manager.
- */
+  /*
  * get scrollBar/menuBar shadow colors
  *
  * The calculations of topShadow/bottomShadow values are adapted
  * 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];
-    } else {
-        rxvt_color          xcol[3];
-        /* xcol[0] == white
-         * xcol[1] == top shadow
-         * xcol[2] == bot shadow */
-
-        xcol[1] = R->PixColors[Color_scroll];
+
+  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 */
+
+      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); */
+
+      xcol[0].set (r, -1, -1, -1);
+      /*        XFreeColors(R->Xdisplay, XCMAP, &(xcol[0].pixel), 1, ~0); */
 # else
-        xcol[0].set (WhitePixel(R->Xdisplay, Xscreen));
+
+      xcol[0].set (WhitePixel(R->Xdisplay, Xscreen));
 # endif
 
-        unsigned short R1, G1, B1, R0, G0, B0;
+      unsigned short R1, G1, B1, R0, G0, B0;
 
-        xcol[0].get (r, R0, G0, B0);
-        xcol[1].get (r, R1, G1, B1);
+      xcol[0].get (r, R0, G0, B0);
+      xcol[1].get (r, R1, G1, B1);
 
-        /* bottomShadowColor */
-        if (!xcol[2].set (aR_ R1 / 2, G1 / 2, B1 / 2))
-            xcol[2] = R->PixColors[Color_Black];
+      /* bottomShadowColor */
+      if (!xcol[2].set (aR_ R1 / 2, G1 / 2, B1 / 2))
+        xcol[2] = R->PixColors[Color_Black];
 
-        R->PixColors[Color_bottomShadow] = xcol[2];
+      R->PixColors[Color_bottomShadow] = xcol[2];
 
-        /* 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];
+      /* 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];
 
-        R->PixColors[Color_topShadow] = xcol[1];
+      R->PixColors[Color_topShadow] = xcol[1];
     }
 #endif                          /* KEEP_SCROLLCOLOR */
 }
@@ -981,18 +1044,22 @@ rxvt_Get_Colours(pR)
 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]);
+  if (R->rs[Rs_color + idx] && isdigit(*(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];
     }
 }
 
@@ -1005,62 +1072,67 @@ rxvt_color_aliases(pR_ int idx)
 void
 rxvt_get_ourmods(pR)
 {
-    int             i, j, k;
-    int             requestedmeta, realmeta, realalt;
-    const char     *cm, *rsmod;
-    XModifierKeymap *map;
-    KeyCode        *kc;
-    const unsigned int modmasks[] =
-        { 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';
-
-    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)) {
+  int             i, j, k;
+  int             requestedmeta, realmeta, realalt;
+  const char     *cm, *rsmod;
+  XModifierKeymap *map;
+  KeyCode        *kc;
+  const unsigned int modmasks[] =
+    {
+      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';
+
+  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 */
+              R->ModNumLockMask = modmasks[i - 1];
+              /* FALLTHROUGH */
             default:
-                continue;       /* for(;;) */
+              continue;       /* for(;;) */
             case XK_Meta_L:
             case XK_Meta_R:
-                cm = "meta";
-                realmeta = i;
-                break;
+              cm = "meta";
+              realmeta = i;
+              break;
             case XK_Alt_L:
             case XK_Alt_R:
-                cm = "alt";
-                realalt = i;
-                break;
+              cm = "alt";
+              realalt = i;
+              break;
             case XK_Super_L:
             case XK_Super_R:
-                cm = "super";
-                break;
+              cm = "super";
+              break;
             case XK_Hyper_L:
             case XK_Hyper_R:
-                cm = "hyper";
-                break;
+              cm = "hyper";
+              break;
             }
-            if (rsmod && STRNCASECMP(rsmod, cm, STRLEN(cm)) == 0)
-                requestedmeta = i;
+          if (rsmod && STRNCASECMP(rsmod, cm, STRLEN(cm)) == 0)
+            requestedmeta = i;
         }
     }
-    XFreeModifiermap(map);
-    i = (requestedmeta ? requestedmeta
-                       : (realmeta ? realmeta
-                                   : (realalt ? realalt : 0)));
-    if (i)
-        R->ModMetaMask = modmasks[i - 1];
+  XFreeModifiermap(map);
+  i = (requestedmeta ? requestedmeta
+       : (realmeta ? realmeta
+          : (realalt ? realalt : 0)));
+  if (i)
+    R->ModMetaMask = modmasks[i - 1];
 }
 
 /*----------------------------------------------------------------------*/
@@ -1069,192 +1141,212 @@ rxvt_get_ourmods(pR)
 void
 rxvt_Create_Windows(pR_ int argc, const char *const *argv)
 {
-    XClassHint      classHint;
-    XWMHints        wmHint;
-    XGCValues       gcvalue;
-    long            vt_emask;
+  XClassHint      classHint;
+  XWMHints        wmHint;
+  XGCValues       gcvalue;
+  long            vt_emask;
 
 #ifdef PREFER_24BIT
-    XSetWindowAttributes attributes;
-    XWindowAttributes gattr;
-
-    XCMAP = DefaultColormap(R->Xdisplay, Xscreen);
-    XVISUAL = DefaultVisual(R->Xdisplay, Xscreen);
-
-    if (R->Options & Opt_transparent) {
-        XGetWindowAttributes(R->Xdisplay, RootWindow(R->Xdisplay, Xscreen),
-                             &gattr);
-        XDEPTH = gattr.depth;
-    } else {
-        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);
+
+  XSetWindowAttributes attributes;
+  XWindowAttributes gattr;
+
+  XCMAP = DefaultColormap(R->Xdisplay, Xscreen);
+  XVISUAL = DefaultVisual(R->Xdisplay, Xscreen);
+
+  if (R->Options & Opt_transparent)
+    {
+      XGetWindowAttributes(R->Xdisplay, RootWindow(R->Xdisplay, Xscreen),
+                           &gattr);
+      XDEPTH = gattr.depth;
+    }
+  else
+    {
+      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);
             }
         }
     }
 #endif
 
-/* grab colors before netscape does */
-    rxvt_Get_Colours(aR);
+  /* grab colors before netscape does */
+  rxvt_Get_Colours(aR);
 
-    rxvt_change_font(aR_ 1, NULL);
-    rxvt_window_calc(aR_ 0, 0);
-    R->old_width = R->szHint.width;
-    R->old_height = R->szHint.height;
+  rxvt_change_font(aR_ 1, NULL);
+  rxvt_window_calc(aR_ 0, 0);
+  R->old_width = R->szHint.width;
+  R->old_height = R->szHint.height;
 
-/* parent window - reverse video so we can see placement errors
- * sub-window placement & size in rxvt_resize_subwindows()
- */
+  /* parent window - reverse video so we can see placement errors
  * sub-window placement & size in rxvt_resize_subwindows()
  */
 
 #ifdef PREFER_24BIT
-    attributes.background_pixel = R->PixColors[Color_fg];
-    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);
+
+  attributes.background_pixel = R->PixColors[Color_fg];
+  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);
 #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->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]);
 #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);
-
-    classHint.res_name = (char *)R->rs[Rs_name];
-    classHint.res_class = (char *)APL_CLASS;
-
-    wmHint.flags = (InputHint | StateHint | WindowGroupHint);
-    wmHint.input = True;
-    wmHint.initial_state = (R->Options & Opt_iconic ? IconicState
-                                                    : NormalState);
-    wmHint.window_group = R->TermWin.parent[0];
-
-    XSetWMProperties(R->Xdisplay, R->TermWin.parent[0], NULL, NULL,
-                     (char **)argv, argc, &R->szHint, &wmHint, &classHint);
-    XSelectInput(R->Xdisplay, R->TermWin.parent[0],
-                 (KeyPressMask
+
+  rxvt_xterm_seq(aR_ XTerm_title, R->rs[Rs_title], CHAR_ST);
+  rxvt_xterm_seq(aR_ XTerm_iconName, R->rs[Rs_iconName], CHAR_ST);
+
+  classHint.res_name = (char *)R->rs[Rs_name];
+  classHint.res_class = (char *)APL_CLASS;
+
+  wmHint.flags = (InputHint | StateHint | WindowGroupHint);
+  wmHint.input = True;
+  wmHint.initial_state = (R->Options & Opt_iconic ? IconicState
+                          : NormalState);
+  wmHint.window_group = R->TermWin.parent[0];
+
+  XSetWMProperties(R->Xdisplay, R->TermWin.parent[0], NULL, NULL,
+                   (char **)argv, argc, &R->szHint, &wmHint, &classHint);
+  XSelectInput(R->Xdisplay, R->TermWin.parent[0],
+               (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);
+  /* vt cursor: Black-on-White is standard, but this is more popular */
+  R->TermWin_cursor = XCreateFontCursor(R->Xdisplay, XC_xterm);
 
 #if defined(HAVE_SCROLLBARS) || defined(MENUBAR)
-/* cursor (menuBar/scrollBar): Black-on-White */
-    R->leftptr_cursor = XCreateFontCursor(R->Xdisplay, XC_left_ptr);
+  /* cursor (menuBar/scrollBar): Black-on-White */
+  R->leftptr_cursor = XCreateFontCursor(R->Xdisplay, XC_left_ptr);
 #endif
 
 #ifdef POINTER_BLANK
-    {
-      XColor blackcolour;
-      blackcolour.red   = 0;
-      blackcolour.green = 0;
-      blackcolour.blue  = 0;
-      Font f = XLoadFont (R->Xdisplay, "fixed");
-      R->blank_cursor = XCreateGlyphCursor (R->Xdisplay, f, f, ' ', ' ',
-                                            &blackcolour, &blackcolour);
-      XUnloadFont (R->Xdisplay, f);
-    }
+
+  {
+    XColor blackcolour;
+    blackcolour.red   = 0;
+    blackcolour.green = 0;
+    blackcolour.blue  = 0;
+    Font f = XLoadFont (R->Xdisplay, "fixed");
+    R->blank_cursor = XCreateGlyphCursor (R->Xdisplay, f, f, ' ', ' ',
+                                          &blackcolour, &blackcolour);
+    XUnloadFont (R->Xdisplay, f);
+  }
 #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]);
+  /* 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]);
 #ifdef DEBUG_X
-    XStoreName(R->Xdisplay, R->TermWin.vt, "vt window");
+
+  XStoreName(R->Xdisplay, R->TermWin.vt, "vt window");
 #endif
 
-    R->pointer_unblank ();
+  R->pointer_unblank ();
 
-    vt_emask = (ExposureMask | ButtonPressMask | ButtonReleaseMask
-                | PropertyChangeMask);
+  vt_emask = (ExposureMask | ButtonPressMask | ButtonReleaseMask
+              | PropertyChangeMask);
 #ifdef POINTER_BLANK
-    if ((R->Options & Opt_pointerBlank))
-        vt_emask |= PointerMotionMask;
-    else
+
+  if ((R->Options & Opt_pointerBlank))
+    vt_emask |= PointerMotionMask;
+  else
 #endif
-        vt_emask |= (Button1MotionMask | Button3MotionMask);
-    XSelectInput(R->Xdisplay, R->TermWin.vt, vt_emask);
+
+    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]);
+
+  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]);
 #ifdef DEBUG_X
-    XStoreName(R->Xdisplay, R->menuBar.win, "menubar");
+
+      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 (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);
+      if ((p = STRCHR(p, ';')) != NULL)
+        {
+          p++;
+          rxvt_scale_pixmap(aR_ p);
         }
-        rxvt_set_bgPixmap(aR_ R->rs[Rs_backgroundPixmap]);
-        rxvt_scr_touch(aR_ True);
+      rxvt_set_bgPixmap(aR_ R->rs[Rs_backgroundPixmap]);
+      rxvt_scr_touch(aR_ True);
     }
 #endif
 
-/* graphics context for the vt window */
-    gcvalue.foreground = R->PixColors[Color_fg];
-    gcvalue.background = R->PixColors[Color_bg];
-    gcvalue.graphics_exposures = 1;
-    R->TermWin.gc = XCreateGC(R->Xdisplay, R->TermWin.vt,
-                              GCForeground | GCBackground
-                              | GCGraphicsExposures, &gcvalue);
+  /* graphics context for the vt window */
+  gcvalue.foreground = R->PixColors[Color_fg];
+  gcvalue.background = R->PixColors[Color_bg];
+  gcvalue.graphics_exposures = 1;
+  R->TermWin.gc = XCreateGC(R->Xdisplay, R->TermWin.vt,
+                            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);
-    gcvalue.foreground = R->PixColors[Color_bottomShadow];
-    R->botShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt,
-                                  GCForeground, &gcvalue);
-    gcvalue.foreground = R->PixColors[(XDEPTH <= 2 ? Color_fg
-                                                   : Color_scroll)];
-    R->scrollbarGC = XCreateGC(R->Xdisplay, R->TermWin.vt,
-                                  GCForeground, &gcvalue);
+
+  gcvalue.foreground = R->PixColors[Color_topShadow];
+  R->topShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt,
+                             GCForeground, &gcvalue);
+  gcvalue.foreground = R->PixColors[Color_bottomShadow];
+  R->botShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt,
+                             GCForeground, &gcvalue);
+  gcvalue.foreground = R->PixColors[(XDEPTH <= 2 ? Color_fg
+                                     : Color_scroll)];
+  R->scrollbarGC = XCreateGC(R->Xdisplay, R->TermWin.vt,
+                             GCForeground, &gcvalue);
 #endif
 }
 
@@ -1268,102 +1360,108 @@ rxvt_Create_Windows(pR_ int argc, const char *const *argv)
 int
 rxvt_run_command(pR_ const char *const *argv)
 {
-    int             cfd, er;
+  int cfd, er;
 
-/* get master (pty) */
-    if ((cfd = rxvt_get_pty(&(R->tty_fd), &(R->ttydev))) < 0) {
-        rxvt_print_error("can't open pseudo-tty");
-        return -1;
+  /* get master (pty) */
+  if ((cfd = rxvt_get_pty (&(R->tty_fd), &(R->ttydev))) < 0)
+    {
+      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);
+  if (R->Xfd > FD_SETSIZE || cfd > FD_SETSIZE)
+    {
+      rxvt_print_error("fd too high: %d max", FD_SETSIZE);
+      rxvt_clean_exit();
+      exit(EXIT_FAILURE);
     }
 #endif
-    fcntl (cfd, F_SETFL, O_NONBLOCK);
 
-/* get slave (tty) */
-    if (R->tty_fd < 0) {
+  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];
-    else if (STRCMP(R->key_backspace, "DEC") == 0)
-        er = '\177';            /* the initial state anyway */
-    else
+  if (R->key_backspace[0] && !R->key_backspace[1])
+    er = R->key_backspace[0];
+  else if (STRCMP(R->key_backspace, "DEC") == 0)
+    er = '\177';            /* the initial state anyway */
+  else
 #endif
-        er = -1;
 
-    rxvt_get_ttymode(&(R->tio), er);
+    er = -1;
+
+  rxvt_get_ttymode (&(R->tio), er);
 
 #ifndef __QNX__
-/* spin off the command interpreter */
-    switch (R->cmd_pid = fork()) {
+  /* 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);
+      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 */
+      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() */
-    fchmod(R->tty_fd, 0622);
-    fcntl(R->tty_fd, F_SETFD, FD_CLOEXEC);
-    fcntl(cfd, F_SETFD, FD_CLOEXEC);
+  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);
-#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 */
-    MAX_IT(R->num_fds, 7);
+  if (rxvt_run_child (aR_ argv) == -1)
+    exit (EXIT_FAILURE);
 #endif
-    R->num_fds++;               /* counts from 0 */
 
-    return cfd;
+  return cfd;
 }
 
 /* ------------------------------------------------------------------------- *
@@ -1377,114 +1475,141 @@ rxvt_run_command(pR_ const char *const *argv)
 int
 rxvt_run_child(pR_ const char *const *argv)
 {
-    char           *login;
+  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);
+      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 */
-    signal (SIGINT,  SIG_DFL);
-    signal (SIGQUIT, SIG_DFL);
-    signal (SIGCHLD, SIG_DFL);
-/*
- * mimick login's behavior by disabling the job control signals
- * a shell that wants them can turn them back on
- */
+  /* reset signals and spin off the command interpreter */
+  signal (SIGINT,  SIG_DFL);
+  signal (SIGQUIT, SIG_DFL);
+  signal (SIGCHLD, SIG_DFL);
+  /*
  * mimick login's behavior by disabling the job control signals
  * a shell that wants them can turn them back on
  */
 #ifdef SIGTSTP
-    signal (SIGTSTP, SIG_IGN);
-    signal (SIGTTIN, SIG_IGN);
-    signal (SIGTTOU, SIG_IGN);
+
+  signal (SIGTSTP, SIG_IGN);
+  signal (SIGTTIN, SIG_IGN);
+  signal (SIGTTOU, SIG_IGN);
 #endif                          /* SIGTSTP */
 
-    /* set window size */
-    rxvt_tt_winsize(STDIN_FILENO, R->TermWin.ncol, R->TermWin.nrow, 0);
+  /* set window size */
+  struct winsize ws;
+
+  ws.ws_col = R->TermWin.ncol;
+  ws.ws_row = R->TermWin.nrow;
+  ws.ws_xpixel = ws.ws_ypixel = 0;
+  (void)ioctl (STDIN_FILENO, TIOCSWINSZ, &ws);
+
+  // unblock signals (signals are blocked by iom.C
+  sigset_t ss;
+  sigemptyset (&ss);
+  sigprocmask (SIG_SETMASK, &ss, 0);
 
 #ifndef __QNX__
-/* command interpreter path */
-    if (argv != NULL) {
+  /* 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! */
-    } else {
-        const char     *argv0, *shell;
 
-        if ((shell = getenv("SHELL")) == NULL || *shell == '\0')
-            shell = "/bin/sh";
+      execvp(argv[0], (char *const *)argv);
+      /* no error message: STDERR is closed! */
+    }
+  else
+    {
+      const char     *argv0, *shell;
 
-        argv0 = (const char *)rxvt_r_basename(shell);
-        if (R->Options & Opt_loginShell) {
-            login = (char *)rxvt_malloc((STRLEN(argv0) + 2) * sizeof(char));
+      if ((shell = getenv("SHELL")) == NULL || *shell == '\0')
+        shell = "/bin/sh";
 
-            login[0] = '-';
-            STRCPY(&login[1], argv0);
-            argv0 = login;
+      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! */
+      execlp(shell, argv0, NULL);
+      /* no error message: STDERR is closed! */
     }
 #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;
+  return -1;
 }
 
 /* ------------------------------------------------------------------------- *
@@ -1496,189 +1621,221 @@ void
 rxvt_get_ttymode(ttymode_t *tio, int erase)
 {
 #ifdef HAVE_TERMIOS_H
-/*
- * 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;
+  /*
+   * 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;
 # 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;
-    tio->c_cc[VEOL] = VDISABLE;
+  tio->c_cc[VEOF] = CEOF;
+  tio->c_cc[VEOL] = VDISABLE;
 # ifdef VEOL2
-    tio->c_cc[VEOL2] = VDISABLE;
+
+  tio->c_cc[VEOL2] = VDISABLE;
 # endif
 # ifdef VSWTC
-    tio->c_cc[VSWTC] = VDISABLE;
+
+  tio->c_cc[VSWTC] = VDISABLE;
 # endif
 # ifdef VSWTCH
-    tio->c_cc[VSWTCH] = VDISABLE;
+
+  tio->c_cc[VSWTCH] = VDISABLE;
 # endif
 # if VMIN != VEOF
-    tio->c_cc[VMIN] = 1;
+
+  tio->c_cc[VMIN] = 1;
 # endif
 # if VTIME != VEOL
-    tio->c_cc[VTIME] = 0;
+
+  tio->c_cc[VTIME] = 0;
 # endif
-    if (erase != -1)
-        tio->c_cc[VERASE] = (char)erase;
 
-/* input modes */
-    tio->c_iflag = (BRKINT | IGNPAR | ICRNL
+  if (erase != -1)
+    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);
+  /* output modes */
+  tio->c_oflag = (OPOST | ONLCR);
 
-/* control modes */
-    tio->c_cflag = (CS8 | CREAD);
+  /* control modes */
+  tio->c_cflag = (CS8 | CREAD);
 
-/* line discipline modes */
-    tio->c_lflag = (ISIG | ICANON | IEXTEN | ECHO
+  /* line discipline modes */
+  tio->c_lflag = (ISIG | ICANON | IEXTEN | ECHO
 # if defined (ECHOCTL) && defined (ECHOKE)
-                    | ECHOCTL | ECHOKE
+                  | ECHOCTL | ECHOKE
 # endif
-                    | ECHOE | ECHOK);
+                  | ECHOE | ECHOK);
 # else                          /* HAVE_TERMIOS_H */
 
-/*
- * sgtty interface
- */
+  /*
 * sgtty interface
 */
 
-/* get parameters -- gtty */
-    if (ioctl(STDIN_FILENO, TIOCGETP, &(tio->sg)) < 0) {
-        tio->sg.sg_erase = CERASE;      /* ^H */
-        tio->sg.sg_kill = CKILL;        /* ^U */
+  /* get parameters -- gtty */
+  if (ioctl(STDIN_FILENO, TIOCGETP, &(tio->sg)) < 0)
+    {
+      tio->sg.sg_erase = CERASE;      /* ^H */
+      tio->sg.sg_kill = CKILL;        /* ^U */
     }
-    if (erase != -1)
-        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;
+  if (erase != -1)
+    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;
     }
-/* 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 */
+  /* 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 */
     }
-/* get line discipline */
-    ioctl(STDIN_FILENO, TIOCGETD, &(tio->line));
+  /* get line discipline */
+  ioctl(STDIN_FILENO, TIOCGETD, &(tio->line));
 # ifdef NTTYDISC
-    tio->line = NTTYDISC;
+
+  tio->line = NTTYDISC;
 # endif                         /* NTTYDISC */
-    tio->local = (LCRTBS | LCRTERA | LCTLECH | LPASS8 | LCRTKIL);
+
+  tio->local = (LCRTBS | LCRTERA | LCTLECH | LPASS8 | LCRTKIL);
 #endif                          /* HAVE_TERMIOS_H */
 
-/*
- * Debugging
- */
+  /*
  * Debugging
  */
 #ifdef DEBUG_TTYMODE
 #ifdef HAVE_TERMIOS_H
-/* c_iflag bits */
-    fprintf(stderr, "Input flags\n");
+  /* c_iflag bits */
+  fprintf(stderr, "Input flags\n");
 
-/* cpp token stringize doesn't work on all machines <sigh> */
+  /* cpp token stringize doesn't work on all machines <sigh> */
 # define FOO(flag,name)                 \
     if ((tio->c_iflag) & flag)          \
         fprintf (stderr, "%s ", name)
 
-/* c_iflag bits */
-    FOO(IGNBRK, "IGNBRK");
-    FOO(BRKINT, "BRKINT");
-    FOO(IGNPAR, "IGNPAR");
-    FOO(PARMRK, "PARMRK");
-    FOO(INPCK, "INPCK");
-    FOO(ISTRIP, "ISTRIP");
-    FOO(INLCR, "INLCR");
-    FOO(IGNCR, "IGNCR");
-    FOO(ICRNL, "ICRNL");
-    FOO(IXON, "IXON");
-    FOO(IXOFF, "IXOFF");
+  /* c_iflag bits */
+  FOO(IGNBRK, "IGNBRK");
+  FOO(BRKINT, "BRKINT");
+  FOO(IGNPAR, "IGNPAR");
+  FOO(PARMRK, "PARMRK");
+  FOO(INPCK, "INPCK");
+  FOO(ISTRIP, "ISTRIP");
+  FOO(INLCR, "INLCR");
+  FOO(IGNCR, "IGNCR");
+  FOO(ICRNL, "ICRNL");
+  FOO(IXON, "IXON");
+  FOO(IXOFF, "IXOFF");
 # ifdef IUCLC
-    FOO(IUCLC, "IUCLC");
+
+  FOO(IUCLC, "IUCLC");
 # endif
 # ifdef IXANY
-    FOO(IXANY, "IXANY");
+
+  FOO(IXANY, "IXANY");
 # endif
 # ifdef IMAXBEL
-    FOO(IMAXBEL, "IMAXBEL");
+
+  FOO(IMAXBEL, "IMAXBEL");
 # endif
-    fprintf(stderr, "\n");
+
+  fprintf(stderr, "\n");
 
 # undef FOO
 # define FOO(entry, name)                                       \
     fprintf(stderr, "%-8s = %#04o\n", name, tio->c_cc [entry])
 
-    FOO(VINTR, "VINTR");
-    FOO(VQUIT, "VQUIT");
-    FOO(VERASE, "VERASE");
-    FOO(VKILL, "VKILL");
-    FOO(VEOF, "VEOF");
-    FOO(VEOL, "VEOL");
+  FOO(VINTR, "VINTR");
+  FOO(VQUIT, "VQUIT");
+  FOO(VERASE, "VERASE");
+  FOO(VKILL, "VKILL");
+  FOO(VEOF, "VEOF");
+  FOO(VEOL, "VEOL");
 # ifdef VEOL2
-    FOO(VEOL2, "VEOL2");
+
+  FOO(VEOL2, "VEOL2");
 # endif
 # ifdef VSWTC
-    FOO(VSWTC, "VSWTC");
+
+  FOO(VSWTC, "VSWTC");
 # endif
 # ifdef VSWTCH
-    FOO(VSWTCH, "VSWTCH");
+
+  FOO(VSWTCH, "VSWTCH");
 # endif
-    FOO(VSTART, "VSTART");
-    FOO(VSTOP, "VSTOP");
-    FOO(VSUSP, "VSUSP");
+
+  FOO(VSTART, "VSTART");
+  FOO(VSTOP, "VSTOP");
+  FOO(VSUSP, "VSUSP");
 # ifdef VDSUSP
-    FOO(VDSUSP, "VDSUSP");
+
+  FOO(VDSUSP, "VDSUSP");
 # endif
 # ifdef VREPRINT
-    FOO(VREPRINT, "VREPRINT");
+
+  FOO(VREPRINT, "VREPRINT");
 # endif
 # ifdef VDISCRD
-    FOO(VDISCRD, "VDISCRD");
+
+  FOO(VDISCRD, "VDISCRD");
 # endif
 # ifdef VWERSE
-    FOO(VWERSE, "VWERSE");
+
+  FOO(VWERSE, "VWERSE");
 # endif
 # ifdef VLNEXT
-    FOO(VLNEXT, "VLNEXT");
+
+  FOO(VLNEXT, "VLNEXT");
 # endif
-    fprintf(stderr, "\n");
+
+  fprintf(stderr, "\n");
 # undef FOO
 # endif                         /* HAVE_TERMIOS_H */
 #endif                          /* DEBUG_TTYMODE */
index e9a12c34e401c2efb0633f54814a054b4ed72d0d..2c9b4a3ce2fddcce885cc1f2775b7a72eb772a77 100644 (file)
--- a/src/iom.C
+++ b/src/iom.C
@@ -126,11 +126,6 @@ void io_manager::loop ()
 
   for (;;)
     {
-#if IOM_CHECK
-      for (int i = 0; i < cw.size (); ++i)
-        cw[i]->call (*cw[i]);
-#endif
-
       struct timeval *to = 0;
 
 #if IOM_TIME
@@ -160,6 +155,11 @@ void io_manager::loop ()
         }
 #endif
 
+#if IOM_CHECK
+      for (int i = 0; i < cw.size (); ++i)
+        cw[i]->call (*cw[i]);
+#endif
+
 #if IOM_IO
       fd_set rfd, wfd;
 
index 3d461a764f5155c7e75fe31f347bab90e21806a4..5b0960da59a4b737fe63d1442ecddbac6e0a2349 100644 (file)
--- a/src/iom.h
+++ b/src/iom.h
@@ -27,7 +27,7 @@
 
 #define IOM_IO 1
 #define IOM_TIME 1
-#undef IOM_CHECK
+#define IOM_CHECK 1
 
 #if IOM_IO
   typedef double tstamp;
index e1d9d766fe0e431599dddb3bee475770324c65ea..e245730238448103533e49db4491b51f6831e2a7 100644 (file)
@@ -1,7 +1,7 @@
 /*--------------------------------*-C-*---------------------------------*
  * File:        main.c
  *----------------------------------------------------------------------*
- * $Id: main.C,v 1.8 2003-11-27 10:12:10 pcg Exp $
+ * $Id: main.C,v 1.9 2003-12-02 21:49:46 pcg Exp $
  *
  * All portions of code are copyright by their respective author/s.
  * Copyright (c) 1992      John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk>
@@ -68,7 +68,8 @@ rxvt_term::rxvt_term ()
   pointer_ev (this, &rxvt_term::pointer_cb),
 #endif
   x_ev       (this, &rxvt_term::x_cb),
-  destroy_ev (this, &rxvt_term::destroy_cb)
+  destroy_ev (this, &rxvt_term::destroy_cb),
+  check_ev   (this, &rxvt_term::check_cb)
 {
   cmdbuf_ptr = cmdbuf_endp = cmdbuf_base;
 }
@@ -103,6 +104,7 @@ rxvt_term::~rxvt_term ()
 void
 rxvt_term::destroy ()
 {
+  check_ev.stop ();
   pty_ev.stop ();
   x_ev.stop ();
 #ifdef CURSOR_BLINK
@@ -127,9 +129,9 @@ rxvt_term::destroy_cb (time_watcher &w)
 /* rxvt_init() */
 /* LIBPROTO */
 rxvt_t
-rxvt_init(int argc, const char *const *argv)
+rxvt_init (int argc, const char *const *argv)
 {
-  SET_R(new rxvt_term);
+  SET_R (new rxvt_term);
   dR;
 
   if (!R->init_vars () || !R->init (argc, argv))
@@ -150,9 +152,6 @@ rxvt_init_signals ()
 #ifdef HAVE_ATEXIT
   atexit(rxvt_clean_exit);
 #else
-# ifdef HAVE_ON_EXIT
-  on_exit(rxvt_clean_exit, NULL);     /* non-ANSI exit handler */
-# endif
 #endif
 #endif
 
@@ -160,7 +159,8 @@ rxvt_init_signals ()
 
   sigfillset (&sa.sa_mask);
   sa.sa_flags = SA_NOCLDSTOP | SA_RESTART;
-  sa.sa_handler = rxvt_Exit_signal;  sigaction (SIGHUP , &sa, 0); //TODO, also: SIGPIPE
+  sa.sa_handler = SIG_IGN;           sigaction (SIGHUP , &sa, 0);
+  sa.sa_handler = SIG_IGN;           sigaction (SIGPIPE, &sa, 0);
   sa.sa_handler = rxvt_Exit_signal;  sigaction (SIGINT , &sa, 0);
   sa.sa_handler = rxvt_Exit_signal;  sigaction (SIGQUIT, &sa, 0);
   sa.sa_handler = rxvt_Exit_signal;  sigaction (SIGTERM, &sa, 0);
@@ -239,7 +239,7 @@ rxvt_term::init (int argc, const char *const *argv)
   x_ev.start (Xfd, EVENT_READ);
   pty_ev.start (cmd_fd, EVENT_READ);
 
-  flush ();
+  check_ev.start ();
 
   return true;
 }
@@ -616,26 +616,25 @@ rxvt_window_calc(pR_ unsigned int width, unsigned int height)
  * Tell the teletype handler what size the window is.
  * Called after a window size change.
  */
-/* EXTPROTO */
 void
-rxvt_tt_winsize(int fd, unsigned short col, unsigned short row, int pid)
+rxvt_term::tt_winch ()
 {
-    struct winsize  ws;
+  struct winsize  ws;
 
-    if (fd < 0)
-        return;
-    ws.ws_col = col;
-    ws.ws_row = row;
-    ws.ws_xpixel = ws.ws_ypixel = 0;
+  if (cmd_fd < 0)
+    return;
+
+  ws.ws_col = TermWin.ncol;
+  ws.ws_row = TermWin.nrow;
+  ws.ws_xpixel = ws.ws_ypixel = 0;
 #ifndef DEBUG_SIZE
-    (void)ioctl(fd, TIOCSWINSZ, &ws);
+  (void)ioctl (cmd_fd, TIOCSWINSZ, &ws);
 #else
-    if (ioctl(fd, TIOCSWINSZ, &ws) < 0) {
-        D_SIZE((stderr, "Failed to send TIOCSWINSZ to fd %d", fd));
-    }
+  if (ioctl (cmd_fd, TIOCSWINSZ, &ws) < 0)
+    D_SIZE((stderr, "Failed to send TIOCSWINSZ to fd %d", fd));
 # ifdef SIGWINCH
-    else if (pid)               /* force through to the command */
-        kill(pid, SIGWINCH);
+  else if (cmd_pid)               /* force through to the command */
+    kill (cmd_pid, SIGWINCH);
 # endif
 #endif
 }
@@ -1064,8 +1063,8 @@ rxvt_setTermFontSet(pR_ int idx)
 
 /* INTPROTO */
 void
-rxvt_setPreeditArea(pR_ XRectangle * preedit_rect, XRectangle * status_rect,
-                    XRectangle * needed_rect)
+rxvt_setPreeditArea (pR_ XRectangle * preedit_rect, XRectangle * status_rect,
+                     XRectangle * needed_rect)
 {
     int             mbh, vtx = 0;
 
index 021940d41a626d115e5e8ac3c6d8efa4eda1aa00..b9d35441568dbf5485d93ed85ad38d8212639efe 100644 (file)
@@ -1,7 +1,7 @@
 /*--------------------------------*-C-*---------------------------------*
  * File:       ptytty.c
  *----------------------------------------------------------------------*
- * $Id: ptytty.C,v 1.3 2003-11-25 15:25:17 pcg Exp $
+ * $Id: ptytty.C,v 1.4 2003-12-02 21:49:46 pcg Exp $
  *
  * All portions of code are copyright by their respective author/s.
  * Copyright (c) 1999-2001 Geoff Wing <gcw@pobox.com>
@@ -50,7 +50,6 @@
 # include <sys/stropts.h>      /* for I_PUSH */
 #endif
 
-
 #ifdef DEBUG_TTY
 # define D_TTY(x)              fprintf x ; fputc('\n', stderr) ; fflush(stderr)
 #else
 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"];
 
-    if (openpty(&pfd, fd_tty, tty_name, NULL, NULL) != -1) {
-       *ttydev = strdup(tty_name);
-       return pfd;
+  char tty_name[sizeof "/dev/pts/????\0"];
+
+  if (openpty(&pfd, fd_tty, tty_name, NULL, NULL) != -1)
+    {
+      *ttydev = strdup(tty_name);
+      return pfd;
     }
 #endif
 
 #ifdef PTYS_ARE__GETPTY
-    *ttydev = _getpty(&pfd, O_RDWR | O_NONBLOCK | O_NOCTTY, 0622, 0);
-    if (*ttydev != NULL)
-       return pfd;
+  *ttydev = _getpty(&pfd, O_RDWR | O_NONBLOCK | O_NOCTTY, 0622, 0);
+  if (*ttydev != NULL)
+    return pfd;
 #endif
 
 #ifdef PTYS_ARE_GETPTY
-    char           *ptydev;
 
-    while ((ptydev = getpty()) != NULL)
-       if ((pfd = open(ptydev, O_RDWR | O_NOCTTY, 0)) >= 0) {
-           *ttydev = ptydev;
-           return pfd;
-       }
+  char           *ptydev;
+
+  while ((ptydev = getpty()) != NULL)
+    if ((pfd = open(ptydev, O_RDWR | O_NOCTTY, 0)) >= 0)
+      {
+        *ttydev = ptydev;
+        return pfd;
+      }
 #endif
 
 #if defined(HAVE_GRANTPT) && defined(HAVE_UNLOCKPT)
 # if defined(PTYS_ARE_GETPT) || defined(PTYS_ARE_PTMX)
-    {
+
+  {
 #  ifdef PTYS_ARE_GETPT
-       pfd = getpt();
+    pfd = getpt();
 #  else
-       pfd = open("/dev/ptmx", O_RDWR | O_NOCTTY, 0);
+
+    pfd = open("/dev/ptmx", O_RDWR | O_NOCTTY, 0);
 #  endif
-       if (pfd >= 0) {
-           if (grantpt(pfd) == 0       /* change slave permissions */
-               && unlockpt(pfd) == 0) {        /* slave now unlocked */
-               *ttydev = ptsname(pfd); /* get slave's name */
-               return pfd;
-           }
-           close(pfd);
-       }
-    }
+
+    if (pfd >= 0)
+      {
+        if (grantpt(pfd) == 0  /* change slave permissions */
+            && unlockpt(pfd) == 0)
+          {    /* slave now unlocked */
+            *ttydev = ptsname(pfd);    /* get slave's name */
+            return pfd;
+          }
+        close(pfd);
+      }
+  }
 # endif
 #endif
 
 #ifdef PTYS_ARE_PTC
-    if ((pfd = open("/dev/ptc", O_RDWR | O_NOCTTY, 0)) >= 0) {
-       *ttydev = ttyname(pfd);
-       return pfd;
+  if ((pfd = open("/dev/ptc", O_RDWR | O_NOCTTY, 0)) >= 0)
+    {
+      *ttydev = ttyname(pfd);
+      return pfd;
     }
 #endif
 
 #ifdef PTYS_ARE_CLONE
-    if ((pfd = open("/dev/ptym/clone", O_RDWR | O_NOCTTY, 0)) >= 0) {
-       *ttydev = ptsname(pfd);
-       return pfd;
+  if ((pfd = open("/dev/ptym/clone", O_RDWR | O_NOCTTY, 0)) >= 0)
+    {
+      *ttydev = ptsname(pfd);
+      return pfd;
     }
 #endif
 
 #ifdef PTYS_ARE_NUMERIC
-    {
-       int             idx;
-       char           *c1, *c2;
-       char            pty_name[] = "/dev/ptyp???";
-       char            tty_name[] = "/dev/ttyp???";
+  {
+    int             idx;
+    char           *c1, *c2;
+    char            pty_name[] = "/dev/ptyp???";
+    char            tty_name[] = "/dev/ttyp???";
 
-       c1 = &(pty_name[sizeof(pty_name) - 4]);
-       c2 = &(tty_name[sizeof(tty_name) - 4]);
-       for (idx = 0; idx < 256; idx++) {
-           sprintf(c1, "%d", idx);
-           sprintf(c2, "%d", idx);
-           if (access(tty_name, F_OK) < 0) {
-               idx = 256;
-               break;
-           }
-           if ((pfd = open(pty_name, O_RDWR | O_NOCTTY, 0)) >= 0) {
-               if (access(tty_name, R_OK | W_OK) == 0) {
-                   *ttydev = strdup(tty_name);
-                   return pfd;
-               }
-               close(pfd);
-           }
-       }
-    }
+    c1 = &(pty_name[sizeof(pty_name) - 4]);
+    c2 = &(tty_name[sizeof(tty_name) - 4]);
+    for (idx = 0; idx < 256; idx++)
+      {
+        sprintf(c1, "%d", idx);
+        sprintf(c2, "%d", idx);
+        if (access(tty_name, F_OK) < 0)
+          {
+            idx = 256;
+            break;
+          }
+        if ((pfd = open(pty_name, O_RDWR | O_NOCTTY, 0)) >= 0)
+          {
+            if (access(tty_name, R_OK | W_OK) == 0)
+              {
+                *ttydev = strdup(tty_name);
+                return pfd;
+              }
+            close(pfd);
+          }
+      }
+  }
 #endif
 #ifdef PTYS_ARE_SEARCHED
-    {
-       const char     *c1, *c2;
-       char            pty_name[] = "/dev/pty??";
-       char            tty_name[] = "/dev/tty??";
+  {
+    const char     *c1, *c2;
+    char            pty_name[] = "/dev/pty??";
+    char            tty_name[] = "/dev/tty??";
 
 # ifndef PTYCHAR1
 #  define PTYCHAR1     "pqrstuvwxyz"
@@ -168,24 +182,29 @@ rxvt_get_pty(int *fd_tty, const char **ttydev)
 # ifndef PTYCHAR2
 #  define PTYCHAR2     "0123456789abcdef"
 # endif
-       for (c1 = PTYCHAR1; *c1; c1++) {
-           pty_name[(sizeof(pty_name) - 3)] =
-               tty_name[(sizeof(pty_name) - 3)] = *c1;
-           for (c2 = PTYCHAR2; *c2; c2++) {
-               pty_name[(sizeof(pty_name) - 2)] =
-                   tty_name[(sizeof(pty_name) - 2)] = *c2;
-               if ((pfd = open(pty_name, O_RDWR | O_NOCTTY, 0)) >= 0) {
-                   if (access(tty_name, R_OK | W_OK) == 0) {
-                       *ttydev = strdup(tty_name);
-                       return pfd;
-                   }
-                   close(pfd);
-               }
-           }
-       }
-    }
+
+    for (c1 = PTYCHAR1; *c1; c1++)
+      {
+        pty_name[(sizeof(pty_name) - 3)] =
+          tty_name[(sizeof(pty_name) - 3)] = *c1;
+        for (c2 = PTYCHAR2; *c2; c2++)
+          {
+            pty_name[(sizeof(pty_name) - 2)] =
+              tty_name[(sizeof(pty_name) - 2)] = *c2;
+            if ((pfd = open(pty_name, O_RDWR | O_NOCTTY, 0)) >= 0)
+              {
+                if (access(tty_name, R_OK | W_OK) == 0)
+                  {
+                    *ttydev = strdup(tty_name);
+                    return pfd;
+                  }
+                close(pfd);
+              }
+          }
+      }
+  }
 #endif
-    return -1;
+  return -1;
 }
 
 /*----------------------------------------------------------------------*/
@@ -194,9 +213,9 @@ rxvt_get_pty(int *fd_tty, const char **ttydev)
  */
 /* EXTPROTO */
 int
-rxvt_get_tty(const char *ttydev)
+rxvt_get_tty (const char *ttydev)
 {
-    return open(ttydev, O_RDWR | O_NOCTTY, 0);
+  return open (ttydev, O_RDWR | O_NOCTTY, 0);
 }
 
 /*----------------------------------------------------------------------*/
@@ -205,87 +224,90 @@ rxvt_get_tty(const char *ttydev)
  */
 /* EXTPROTO */
 int
-rxvt_control_tty(int fd_tty, const char *ttydev)
+rxvt_control_tty (int fd_tty, const char *ttydev)
 {
 #ifndef __QNX__
-    int             fd;
+  int fd;
 
-    D_TTY((stderr, "rxvt_control_tty(): pid: %d, tty fd: %d, dev: %s", getpid(), fd_tty, ttydev));
-/* ---------------------------------------- */
+  D_TTY ((stderr, "rxvt_control_tty(): pid: %d, tty fd: %d, dev: %s", getpid(), fd_tty, ttydev));
+  /* ---------------------------------------- */
 # ifdef HAVE_SETSID
-    setsid();
+  setsid ();
 # endif
 # if defined(HAVE_SETPGID)
-    setpgid(0, 0);
+  setpgid (0, 0);
 # elif defined(HAVE_SETPGRP)
-    setpgrp(0, 0);
+  setpgrp (0, 0);
 # endif
-/* ---------------------------------------- */
+  /* ---------------------------------------- */
 # ifdef TIOCNOTTY
-    fd = open("/dev/tty", O_RDWR | O_NOCTTY);
-    D_TTY((stderr, "rxvt_control_tty(): Voiding tty associations: previous=%s", fd < 0 ? "no" : "yes"));
-    if (fd >= 0) {
-       ioctl(fd, TIOCNOTTY, NULL);     /* void tty associations */
-       close(fd);
+
+  fd = open ("/dev/tty", O_RDWR | O_NOCTTY);
+  D_TTY ((stderr, "rxvt_control_tty(): Voiding tty associations: previous=%s", fd < 0 ? "no" : "yes"));
+  if (fd >= 0)
+    {
+      ioctl (fd, TIOCNOTTY, NULL);     /* void tty associations */
+      close (fd);
     }
 # endif
-/* ---------------------------------------- */
-    fd = open("/dev/tty", O_RDWR | O_NOCTTY);
-    D_TTY((stderr, "rxvt_control_tty(): /dev/tty has controlling tty? %s", fd < 0 ? "no (good)" : "yes (bad)"));
-    if (fd >= 0)
-       close(fd);              /* ouch: still have controlling tty */
-/* ---------------------------------------- */
+  /* ---------------------------------------- */
+  fd = open ("/dev/tty", O_RDWR | O_NOCTTY);
+  D_TTY ((stderr, "rxvt_control_tty(): /dev/tty has controlling tty? %s", fd < 0 ? "no (good)" : "yes (bad)"));
+  if (fd >= 0)
+    close (fd);                /* ouch: still have controlling tty */
+  /* ---------------------------------------- */
 #if defined(PTYS_ARE_PTMX) && defined(I_PUSH)
-/*
- * Push STREAMS modules:
- *    ptem: pseudo-terminal hardware emulation module.
- *    ldterm: standard terminal line discipline.
- *    ttcompat: V7, 4BSD and XENIX STREAMS compatibility module.
- *
- * After we push the STREAMS modules, the first open() on the slave side
- * (i.e. the next section between the dashes giving us "tty opened OK")
- * should make the "ptem" (or "ldterm" depending upon either which OS
- * version or which set of manual pages you have) module give us a
- * controlling terminal.  We must already have close()d the master side
- * fd in this child process before we push STREAMS modules on because the
- * documentation is really unclear about whether it is any close() on
- * the master side or the last close() - i.e. a proper STREAMS dismantling
- * close() - on the master side which causes a hang up to be sent
- * through - Geoff Wing
- */
+  /*
  * Push STREAMS modules:
  *    ptem: pseudo-terminal hardware emulation module.
  *    ldterm: standard terminal line discipline.
  *    ttcompat: V7, 4BSD and XENIX STREAMS compatibility module.
  *
  * After we push the STREAMS modules, the first open() on the slave side
  * (i.e. the next section between the dashes giving us "tty opened OK")
  * should make the "ptem" (or "ldterm" depending upon either which OS
  * version or which set of manual pages you have) module give us a
  * controlling terminal.  We must already have close()d the master side
  * fd in this child process before we push STREAMS modules on because the
  * documentation is really unclear about whether it is any close() on
  * the master side or the last close() - i.e. a proper STREAMS dismantling
  * close() - on the master side which causes a hang up to be sent
  * through - Geoff Wing
  */
 # ifdef HAVE_ISASTREAM
-    if (isastream(fd_tty) == 1)
+  if (isastream (fd_tty) == 1)
 # endif
     {
-       D_TTY((stderr, "rxvt_control_tty(): Pushing STREAMS modules"));
-       ioctl(fd_tty, I_PUSH, "ptem");
-       ioctl(fd_tty, I_PUSH, "ldterm");
-       ioctl(fd_tty, I_PUSH, "ttcompat");
+      D_TTY ((stderr, "rxvt_control_tty(): Pushing STREAMS modules"));
+      ioctl (fd_tty, I_PUSH, "ptem");
+      ioctl (fd_tty, I_PUSH, "ldterm");
+      ioctl (fd_tty, I_PUSH, "ttcompat");
     }
 #endif
-/* ---------------------------------------- */
+  /* ---------------------------------------- */
 # if defined(TIOCSCTTY)
-    fd = ioctl(fd_tty, TIOCSCTTY, NULL);
-    D_TTY((stderr, "rxvt_control_tty(): ioctl(..,TIOCSCTTY): %d", fd));
+  fd = ioctl (fd_tty, TIOCSCTTY, NULL);
+  D_TTY ((stderr, "rxvt_control_tty(): ioctl(..,TIOCSCTTY): %d", fd));
 # elif defined(TIOCSETCTTY)
-    fd = ioctl(fd_tty, TIOCSETCTTY, NULL);
-    D_TTY((stderr, "rxvt_control_tty(): ioctl(..,TIOCSETCTTY): %d", fd));
+  fd = ioctl (fd_tty, TIOCSETCTTY, NULL);
+  D_TTY ((stderr, "rxvt_control_tty(): ioctl(..,TIOCSETCTTY): %d", fd));
 # else
-    fd = open(ttydev, O_RDWR);
-    D_TTY((stderr, "rxvt_control_tty(): tty open%s", fd < 0 ? " failure" : "ed OK"));
-    if (fd >= 0)
-       close(fd);
-# endif
-/* ---------------------------------------- */
-    fd = open("/dev/tty", O_WRONLY);
-    D_TTY((stderr, "rxvt_control_tty(): do we have controlling tty now: %s", fd < 0 ? "no (fatal)" : "yes (good)"));
-    if (fd < 0)
-       return -1;              /* fatal */
+  fd = open (ttydev, O_RDWR);
+  D_TTY ((stderr, "rxvt_control_tty(): tty open%s", fd < 0 ? " failure" : "ed OK"));
+  if (fd >= 0)
     close(fd);
-/* ---------------------------------------- */
-    D_TTY((stderr, "rxvt_control_tty(): tcgetpgrp(): %d  getpgrp(): %d", tcgetpgrp(fd_tty), getpgrp()));
-/* ---------------------------------------- */
+# endif
+  /* ---------------------------------------- */
+  fd = open ("/dev/tty", O_WRONLY);
+  D_TTY ((stderr, "rxvt_control_tty(): do we have controlling tty now: %s", fd < 0 ? "no (fatal)" : "yes (good)"));
+  if (fd < 0)
+    return -1;         /* fatal */
+  close (fd);
+  /* ---------------------------------------- */
+  D_TTY ((stderr, "rxvt_control_tty(): tcgetpgrp(): %d  getpgrp(): %d", tcgetpgrp(fd_tty), getpgrp()));
+  /* ---------------------------------------- */
 #endif                         /* ! __QNX__ */
-    return 0;
+
+  return 0;
 }
 /*----------------------- end-of-file (C source) -----------------------*/
index e8e95e2e048e8c23140072c11cacd39ae8877a68..95533d47b018a2ee880737b7f1daaedbbf886517 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: rxvt.h,v 1.9 2003-11-27 16:49:45 pcg Exp $
+ * $Id: rxvt.h,v 1.10 2003-12-02 21:49:46 pcg Exp $
  */
 
 #ifndef _RXVT_H_                /* include once only */
@@ -856,47 +856,27 @@ struct mbstate {
 
 struct rxvt_term : rxvt_vars {
   struct          mbstate mbstate;
-#ifdef __GNUC__
+
   unsigned char   want_refresh:1,
-                  want_full_refresh:1,
-                  am_transparent:1,
-                  am_pixmap_trans:1, 
-                  current_screen:1,
-                  hate_those_clicks:1,
+#ifdef TRANSPARENT
+                  want_full_refresh:1, /* awaiting full screen refresh      */
+#endif
+#if defined(XPM_BACKGROUND) || defined(TRANSPARENT)
+                  am_transparent:1,    /* is a transparent term             */
+                  am_pixmap_trans:1,   /* transparency w/known root pixmap  */
+#endif
+                  current_screen:1,    /* primary or secondary              */
+                  hate_those_clicks:1, /* a.k.a. keep mark position         */
                   num_scr_allow:1,
-                  bypass_keystate:1;
-  unsigned char   chstat:1,
-                  lost_multi:1,
-                  multi_byte:1,
+                  bypass_keystate:1,
+#ifdef CURSOR_BLINK
                   hidden_cursor:1,
+#endif
+#ifdef POINTER_BLANK
                   hidden_pointer:1,
-                  parsed_geometry:1;
-#else
-  unsigned char   want_refresh,
-# ifdef TRANSPARENT
-                  want_full_refresh,  /* awaiting full screen refresh      */
-# endif
-# if defined(XPM_BACKGROUND) || defined(TRANSPARENT)
-                  am_transparent,     /* is a transparent term             */
-                  am_pixmap_trans,    /* transparency w/known root pixmap  */
-# endif
-                  current_screen,     /* primary or secondary              */
-                  hate_those_clicks,  /* a.k.a. keep mark position         */
-                  num_scr_allow,
-                  bypass_keystate,
-# ifdef MULTICHAR_SET
-                  chstat,
-                  lost_multi, /* set ==> we only got half a glyph */
-                  multi_byte, /* set ==> currently using 2 bytes per glyph */
-# endif
-# ifdef CURSOR_BLINK
-                  hidden_cursor,
-# endif
-# ifdef POINTER_BLANK
-                  hidden_pointer,
-# endif
-                  parsed_geometry;
-#endif  /* !__GNUC__ */
+#endif
+                  parsed_geometry:1,
+                  seen_input:1;                /* wether any input has been seen so far */
 
   unsigned char   refresh_type,
 #ifdef UTMP_SUPPORT
@@ -958,7 +938,7 @@ struct rxvt_term : rxvt_vars {
                   menu_readonly,      /* okay to alter menu? */
                   Arrows_x,
 #endif
-#if (MENUBAR_MAX > 1)
+#if MENUBAR_MAX > 1
                   Nbars,
 #endif
                   window_vt_x,
@@ -1113,6 +1093,9 @@ struct rxvt_term : rxvt_vars {
   unsigned char   cmdbuf_base[BUFSIZ];
   unsigned char   kbuf[KBUFSZ];
 
+  void flush ();
+
+  void check_cb   (check_watcher &w); check_watcher check_ev;
   void destroy_cb (time_watcher &w); time_watcher destroy_ev;
 
   void pty_cb (io_watcher &w, short revents); io_watcher pty_ev;
@@ -1131,7 +1114,7 @@ struct rxvt_term : rxvt_vars {
   void tt_printf (const char *fmt,...);
   void tt_write (const unsigned char *data, unsigned int len);
 
-  void flush ();
+  void tt_winch ();
 
   rxvt_term ();
   ~rxvt_term ();
index 0c0261c8ff30f611b30da1ba8c2e12d2b88c681b..23c9114a7c46f4314aa51fd3a8e61f0de5e78b54 100644 (file)
@@ -44,6 +44,7 @@ main(int argc, const char *const *argv)
   {
     sigset_t ss;
 
+    sigemptyset (&ss);
     sigaddset (&ss, SIGHUP);
     sigprocmask (SIG_BLOCK, &ss, 0);
   }
index 6160147e4596f62849a01c15ce03ce23c1e88926..52a1aa7ec617d96b2341d86add4a09de7836cd8f 100644 (file)
@@ -153,14 +153,6 @@ void server::read_cb (io_watcher &w, short revents)
 int
 main(int argc, const char *const *argv)
 {
-  {
-    sigset_t ss;
-
-    sigaddset (&ss, SIGHUP);
-    sigaddset (&ss, SIGPIPE);
-    sigprocmask (SIG_BLOCK, &ss, 0);
-  }
-
   rxvt_init_signals ();
 
   char *sockname = rxvt_connection::unix_sockname ();
index 1ebfeb6d42d36801e4330a14053a7feb9c158c81..4c841edf54996ca179d0466f0a708678f4f3e444 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: rxvtlib.h.in,v 1.4 2003-11-27 10:12:10 pcg Exp $
+ * $Id: rxvtlib.h.in,v 1.5 2003-12-02 21:49:46 pcg Exp $
  */
 
 #ifndef _RXVTLIB_H_             /* include once only */
@@ -299,7 +299,6 @@ struct rxvt_vars {
   int             Xfd;          /* file descriptor of X server connection    */
   int             cmd_fd;       /* pty file descriptor; connected to command */
   int             tty_fd;       /* tty file descriptor; connected to child   */
-  int             num_fds;      /* number of file descriptors being used     */
   int             numlock_state;
   text_t        **drawn_text;   /* text drawn on screen (characters)         */
   rend_t        **drawn_rend;   /* text drawn on screen (rendition)          */
index 06343cecff31d5ec6beb9680c2f8be53274c34eb..d3fc18d8469ee9fa165c334bda89f9310abc679b 100644 (file)
@@ -1,7 +1,7 @@
 /*--------------------------------*-C-*--------------------------------------*
  * File:        screen.c
  *---------------------------------------------------------------------------*
- * $Id: screen.C,v 1.5 2003-11-27 16:49:45 pcg Exp $
+ * $Id: screen.C,v 1.6 2003-12-02 21:49:46 pcg Exp $
  *
  * Copyright (c) 1997-2001 Geoff Wing <gcw@pobox.com>
  *
@@ -39,10 +39,6 @@ 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 PROP_SIZE               16384
 #define TABSIZE                 8       /* default tab size */
@@ -166,7 +162,6 @@ rxvt_scr_reset(pR)
     D_SCREEN((stderr, "rxvt_scr_reset()"));
 
     R->TermWin.view_start = 0;
-    RESET_CHSTAT(R);
     R->num_scr = 0;
 
     prev_ncol = R->prev_ncol;
@@ -365,7 +360,7 @@ rxvt_scr_reset(pR)
     R->prev_nrow = nrow;
     R->prev_ncol = ncol;
 
-    rxvt_tt_winsize (R->cmd_fd, R->TermWin.ncol, R->TermWin.nrow, R->cmd_pid);
+    R->tt_winch ();
 }
 
 /* INTPROTO */
@@ -534,7 +529,6 @@ rxvt_scr_change_screen(pR_ int scrn)
     D_SCREEN((stderr, "rxvt_scr_change_screen(%d)", scrn));
 
     R->TermWin.view_start = 0;
-    RESET_CHSTAT(R);
 
     if (R->current_screen == scrn)
         return R->current_screen;
@@ -799,14 +793,12 @@ rxvt_scr_add_lines(pR_ const uint32_t *str, int nlines, int len)
                 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)
@@ -909,7 +901,6 @@ rxvt_scr_add_lines(pR_ const uint32_t *str, int nlines, int len)
 void
 rxvt_scr_backspace(pR)
 {
-    RESET_CHSTAT(R);
     R->want_refresh = 1;
     if (R->screen.cur.col == 0) {
         if (R->screen.cur.row > 0) {
@@ -938,7 +929,6 @@ rxvt_scr_tab(pR_ int count)
 
     D_SCREEN((stderr, "rxvt_scr_tab(%d)", count));
     R->want_refresh = 1;
-    RESET_CHSTAT(R);
     i = x = R->screen.cur.col;
     if (count == 0)
         return;
@@ -1025,7 +1015,6 @@ rxvt_scr_gotorc(pR_ int row, int col, int relative)
 {
     R->want_refresh = 1;
     ZERO_SCROLLBACK(R);
-    RESET_CHSTAT(R);
 #ifdef RXVT_GRAPHICS
     if (rxvt_Gr_Displayed(aR))
         rxvt_Gr_scroll(aR_ 0);
@@ -1079,7 +1068,6 @@ rxvt_scr_index(pR_ enum page_dirn direction)
     D_SCREEN((stderr, "rxvt_scr_index(%d)", dirn));
 
     ZERO_SCROLLBACK(R);
-    RESET_CHSTAT(R);
 
 #ifdef RXVT_GRAPHICS
     if (rxvt_Gr_Displayed(aR))
@@ -1113,7 +1101,6 @@ rxvt_scr_erase_line(pR_ int mode)
     R->want_refresh = 1;
     D_SCREEN((stderr, "rxvt_scr_erase_line(%d) at screen row: %d", mode, R->screen.cur.row));
     ZERO_SCROLLBACK(R);
-    RESET_CHSTAT(R);
 
 #ifdef RXVT_GRAPHICS
     if (rxvt_Gr_Displayed(aR))
@@ -1180,7 +1167,6 @@ rxvt_scr_erase_screen(pR_ int mode)
     R->want_refresh = 1;
     D_SCREEN((stderr, "rxvt_scr_erase_screen(%d) at screen row: %d", mode, R->screen.cur.row));
     ZERO_SCROLLBACK(R);
-    RESET_CHSTAT(R);
     row_offset = (int32_t)R->TermWin.saveLines;
 
     switch (mode) {
@@ -1254,7 +1240,6 @@ rxvt_scr_E(pR)
     R->want_refresh = 1;
     R->num_scr_allow = 0;
     ZERO_SCROLLBACK(R);
-    RESET_CHSTAT(R);
     rxvt_selection_check(aR_ 3);
 
     fs = SET_FONT (R->rstyle, R->TermWin.fontset->find_font ('E'));
@@ -1277,7 +1262,6 @@ rxvt_scr_insdel_lines(pR_ int count, int insdel)
     int             end;
 
     ZERO_SCROLLBACK(R);
-    RESET_CHSTAT(R);
 
 #ifdef RXVT_GRAPHICS
     if (rxvt_Gr_Displayed(aR))
@@ -1318,9 +1302,6 @@ rxvt_scr_insdel_chars(pR_ int count, int insdel)
 
     R->want_refresh = 1;
     ZERO_SCROLLBACK(R);
-#if 0
-    RESET_CHSTAT(R);
-#endif
 
 #ifdef RXVT_GRAPHICS
     if (rxvt_Gr_Displayed(aR))