/*
flasher.h - Copyright (C) 2002 Murray Nesbitt (websrc@nesbitt.ca)
This program is protected and licensed under the following terms and
conditions: 1) it may not be redistributed in binary form without the
explicit permission of the author; 2) when redistributed in source
form, in whole or in part, this complete copyright statement must
remain intact.
*/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <syslog.h>
#include <string.h> /* strtok() */
/* Time in seconds between updates. */
#define SLEEP 60
/* Delay between flashes in microseconds. */
#define FLASH_DELAY 200000
/* How long the flash lasts in microseconds. */
#define FLASH_ONTIME 200000
/* Interval between flash groups in seconds. */
#define FLASH_SLEEP 2
/* You shouldn't need to change anything beyond this point. */
#if defined(__linux__)
#include <sys/kd.h>
#define GET_LED_STATE KDGETLED
#define SET_LED_STATE KDSETLED
#define GET_KB_STATE KDGKBLED
#elif defined(__FreeBSD__)
#include <sys/kbio.h>
#define GET_LED_STATE KDGETLED
#define SET_LED_STATE KDSETLED
#define GET_KB_STATE KDGKBSTATE
#elif defined(__sun)
#include <sys/kbio.h>
#include <sys/kbd.h>
#define GET_LED_STATE KIOCGLED
#define SET_LED_STATE KIOCSLED
#define LED_SCR LED_SCROLL_LOCK
#define LED_NUM LED_NUM_LOCK
#define LED_CAP LED_CAPS_LOCK
#elif defined(__SCO__)
#include <sys/vtkd.h>
#define GET_LED_STATE KDGETLED
#define SET_LED_STATE KDSETLED
#define LED_SCR 0x1
#define LED_NUM 0x2
#define LED_CAP 0x4
#else
#error Platform not supported.
#endif
#if defined(__sun)
/* A few things that Solaris does differently than everyone else. */
typedef char ioctl_arg_type;
#define CONSOLE_DEVICE "/dev/kbd"
#include <sys/param.h>
#define CWD_SIZE MAXPATHLEN
#else
typedef int ioctl_arg_type;
#define CONSOLE_DEVICE "/dev/console"
#define CWD_SIZE 0
#endif
#ifndef LED_MASK
#define LED_MASK (LED_CAP | LED_NUM | LED_SCR)
#endif
#ifndef _PATH_VARRUN
#define _PATH_VARRUN "/var/run/"
#endif
#define LOCK_FILE _PATH_VARRUN "flasher.pid"
#define LED_ON 1
#define LED_OFF 0
#define SIGNAL(s, handler) { \
sa.sa_handler = handler; \
if (sigaction(s, &sa, NULL) < 0) { \
syslog(LOG_ERR, "Couldn't establish signal handler (%d): %m", s); \
exit(EXIT_FAILURE); \
} \
}
extern int LEDstate(int led, int state);
extern void set_sig_handlers(void);
extern void check_lock(void);
extern void daemonize(void);
extern void open_console(char *terminal);
extern int console_opened(void);
extern char *absolute_path(char *file);
typedef struct file {
char *path;
time_t time;
int writes;
} file;
syntax highlighted by Code2HTML, v. 0.9.1