#include #include #include #include #include #include /* return filehandle */ static int if_init (int argc, char *argv[]); static void if_exit (int fd); static void if_parse (int fd); void tx_error (const char *err) { char buf[512]; write (1, buf, snprintf (buf, sizeof (buf), "E%s", err) + 1); } void tx_abort (const char *err) { if (err) tx_error (err); exit (1); } void tx_code (const char *raw, const char *cooked) { char buf[512]; struct timeval tv; gettimeofday (&tv, 0); write (1, buf, snprintf (buf, sizeof (buf), "=%ld.%06ld\x01%s\x01%s", tv.tv_sec, tv.tv_usec, raw, cooked) + 1); } #define USAGE "This program should only be called by the perl RCU module\n" #define MAX(a,b) ((a) > (b) ? (a) : (b)) int main (int argc, char *argv[]) { int ifd; if (argc < 2) { write (1, USAGE, sizeof USAGE); exit (1); } ifd = if_init (argc - 2, argv + 2); if (ifd >= 0) { write (1, "I", 2); /* I */ for(;;) { fd_set fds; FD_ZERO (&fds); FD_SET (ifd, &fds); FD_SET (0, &fds); if (select (ifd + 1, &fds, 0, 0, 0) >= 0) { if (FD_ISSET (0, &fds)) break; if (FD_ISSET (ifd, &fds)) if_parse (ifd); } } } else tx_abort ("unable to set-up ir-link"); if_exit (ifd); return 0; }