5bf /* * Flashes root window when RING modem status detected * */ #include #include #include #include #include #include #include #include #include #include #define FALSE 0 #define TRUE 1 #define FLASH_BG 0xff0000 #define DEFAULT_BG 0x00008b #define CAPS_LED 1 #define SLEEPTIME 10 Display *dpy; Window win; unsigned long old_fg; int tty; void flash(void) { int i; for (i = 0; i < SLEEPTIME; i++) { XSetWindowBackground(dpy, win, FLASH_BG); XClearWindow(dpy, win); XFlush(dpy); usleep(500000); XSetWindowBackground(dpy, win, DEFAULT_BG); XClearWindow(dpy, win); XFlush(dpy); usleep(500000); } } void cleanup(int sig) { XSetWindowBackground(dpy, win, DEFAULT_BG); XClearWindow(dpy, win); XFlush(dpy); XCloseDisplay(dpy); close(tty); raise(sig); } void init(void) { XGCValues gcv; if ((tty = open("/dev/cua3", O_RDWR)) == -1) { perror("open"); exit(1); } signal(SIGTERM, cleanup); dpy = XOpenDisplay(NULL); win = RootWindow(dpy, 0); } void main(void) { int old_count; struct serial_icounter_struct cs; init(); ioctl(tty, TIOCGICOUNT, &cs); old_count = cs.rng; while(1) { ioctl(tty, TIOCGICOUNT, &cs); if(cs.rng != old_count) { flash(); old_count = cs.rng; } else usleep(500000); } } . 0