home *** CD-ROM | disk | FTP | other *** search
/ Chip 1995 March / CHIP3.mdf / slackwar / a / util / util-lin.2 / util-lin / util-linux-2.2 / sys-utils / lpcntl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-22  |  911 b   |  55 lines

  1. /*
  2.  * Simple command interface to ioctl(fd, LPSETIRQ, irq).
  3.  * Nigel Gamble (nigel@gate.net)
  4.  * e.g.
  5.  *     lpcntl /dev/lp1 7
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <fcntl.h>
  10. #include <errno.h>
  11. #include <linux/lp.h>
  12.  
  13. int
  14. main(int argc, char **argv)
  15. {
  16.     unsigned int irq;
  17.     int fd;
  18.     int ret;
  19.  
  20.     if (argc < 2) {
  21.         fprintf(stderr, "usage: %s <lp device> [<irq>]\n", argv[0]);
  22.         exit(1);
  23.     }
  24.  
  25.     fd = open(argv[1], O_RDONLY);
  26.     if (fd == -1) {
  27.         perror(argv[1]);
  28.         exit(1);
  29.     }
  30.  
  31.     if (argc == 2) {
  32.         irq = ioctl(fd, LPGETIRQ);
  33.         if (irq == -1) {
  34.             perror(argv[1]);
  35.             exit(1);
  36.         }
  37.         if (irq)
  38.             printf("%s using IRQ %d\n", argv[1], irq);
  39.         else
  40.             printf("%s using polling\n", argv[1]);
  41.     } else {
  42.         irq = atoi(argv[2]);
  43.         ret = ioctl(fd, LPSETIRQ, irq);
  44.         if (ret == -1) {
  45.             if (errno == EPERM)
  46.                 fprintf(stderr, "%s: only super-user can change the IRQ\n", argv[0]);
  47.             else
  48.                 perror(argv[1]);
  49.             exit(1);
  50.         }
  51.     }
  52.  
  53.     return 0;
  54. }
  55.