#include #include #include #define DEFLPTADR 0x378 #define DEFLPDEV "/dev/lp0" int LPTport = DEFLPTADR; char LPdev[20] = DEFLPDEV; int fd; __inline__ static void outp(unsigned short port,char value) { __asm__ volatile ("outb %0,%1" ::"a" ((char) value), "d"((unsigned short) port)); } void prepare (void) { fd=open(LPdev,O_RDWR | O_NONBLOCK); if (fd < 0) { perror ("lpdiff open"); exit (10); } if (ioperm(LPTport,3,1)) { perror ("lpt ioperm"); exit (1); } } void finish (void) { close(fd); if (ioperm(LPTport,3,0)) { perror("lpt ioperm"); exit (1); } } #define sleepy 3000 int main(int argc, char *argv[]) { int i; if (argc > 1) { char *p; int secs = strtol(argv[1], &p, 0); printf("setting alarm clock to %d seconds from now...\n", secs); setvbuf (stdout,NULL,_IONBF,0); /* turn off buffering */ prepare(); /* 13: 000000000000000000008401 123456789012345678901234 */ for (i=0; i<24; i++) { if ( secs & (1 << (23-i))) outp (LPTport,5); else outp (LPTport,1); usleep(sleepy); outp (LPTport,0); usleep(sleepy); } finish(); } else { printf ("Error. Usage: wake \n"); } return 0; }