5e1 /* * LED biff for X * blinks scroll lock LED when new mail * * version 1.0 * */ #include #include #include #include #include #include #include #define FALSE 0 #define TRUE 1 #define SCRL_LED 3 #define SLEEPTIME 10 Display *dpy; char mbox_name[50]; int mbox_size, mbox_flag, read_since_last_write; void set_led(int mode) { XKeyboardControl kbd; kbd.led = SCRL_LED; kbd.led_mode = mode; XChangeKeyboardControl(dpy, KBLed | KBLedMode, &kbd); XFlush(dpy); } void blink(void) { int i; for (i = 0; i < SLEEPTIME; i++) { set_led(LedModeOn); usleep(500000); set_led(LedModeOff); usleep(500000); } } int check_mailbox(void) { struct stat st; int i, n; if (stat (mbox_name, &st) == 0) { mbox_size = st.st_size; read_since_last_write = (st.st_atime > st.st_mtime); } if (mbox_size == 0) return FALSE; else if (read_since_last_write) return FALSE; else return TRUE; } void cleanup(int sig) { XCloseDisplay(dpy); raise(sig); } void init(void) { char *p; if (! (p = getenv("MAIL"))) { printf("Error: environment variable MAIL not set.\n"); exit(1); } strcpy(mbox_name, p); signal(SIGTERM, cleanup); dpy = XOpenDisplay(NULL); set_led(LedModeOff); } void main(void) { init(); while (1) { if (check_mailbox()) blink(); else sleep(SLEEPTIME); } } . 0