{
const char *p = linedraw_cmds[t - 0x2500];
- int x0 = x, x1 = x + (r->TermWin.fwidth - 1) / 2, x2 = x + r->TermWin.fwidth - 1;
- int y0 = y, y1 = y + (r->TermWin.fheight - 1) / 2, y2 = y + r->TermWin.fheight - 1;
+ int x0 = x, x1 = x + r->TermWin.fwidth / 2, x2 = x + r->TermWin.fwidth ;
+ int y0 = y, y1 = y + r->TermWin.fheight / 2, y2 = y + r->TermWin.fheight;
XGCValues gcv;
- gcv.cap_style = CapButt;
- XChangeGC (DISPLAY, GC, GCCapStyle, &gcv);
-
while (*p)
{
switch (*p++)
cw[i]->call (*cw[i]);
#endif
+ struct timeval *to = 0;
+
#if IOM_TIME
+ struct timeval tval;
time_watcher *w;
- for (;;)
+ for (;tw.size ();)
{
w = tw[0];
w = *i;
if (w->at > NOW)
- break;
-
- // call it
- w->call (*w);
-
- if (w->at < 0)
+ {
+ double diff = w->at - NOW;
+ tval.tv_sec = (int)diff;
+ tval.tv_usec = (int)((diff - tval.tv_sec) * 1000000);
+ to = &tval;
+ break;
+ }
+ else if (w->at >= 0)
+ w->call (*w);
+ else
unreg (w);
}
-
- double diff = w->at - NOW;
- struct timeval to;
- to.tv_sec = (int)diff;
- to.tv_usec = (int)((diff - to.tv_sec) * 1000000);
#endif
#if IOM_IO
if ((*w)->events & EVENT_READ ) FD_SET ((*w)->fd, &rfd);
if ((*w)->events & EVENT_WRITE) FD_SET ((*w)->fd, &wfd);
- if ((*w)->fd > fds) fds = (*w)->fd;
+ if ((*w)->fd >= fds) fds = (*w)->fd + 1;
}
+ if (!to && !fds)
+ break; // no events
+
+ fds = select (fds, &rfd, &wfd, 0, to);
# if IOM_TIME
- fds = select (fds + 1, &rfd, &wfd, 0, &to);
set_now ();
-# else
- fds = select (fds + 1, &rfd, &wfd, 0, 0);
# endif
if (fds > 0)
if (revents)
w->call (*w, revents);
}
- }
#elif IOM_TIME
+ if (!to)
+ break;
+
select (0, 0, 0, 0, &to);
set_now ();
+#else
+ break;
#endif
-}
-
-void io_manager::idle_cb (time_watcher &w)
-{
- w.at = NOW + 1000000000;
+ }
}
io_manager::io_manager ()
{
+#if IOM_TIME
set_now ();
+#endif
iom_valid = true;
-
-#if IOM_TIME
- idle = new time_watcher (this, &io_manager::idle_cb);
- idle->start (0);
-#endif
}
io_manager::~io_manager ()
{
if ((fd = socket (PF_LOCAL, SOCK_STREAM, 0)) < 0)
{
- perror ("unable to create listening socket");
+ perror ("unable to create communications socket");
exit (EXIT_FAILURE);
}
if (connect (fd, (sockaddr *)&sa, sizeof (sa)))
{
- perror ("unable to bind listening socket");
+ perror ("unable to connect to rxvtd");
exit (EXIT_FAILURE);
}
}