home *** CD-ROM | disk | FTP | other *** search
/ ftp.4front-tech.com / ftp.4front-tech.com.tar / ftp.4front-tech.com / ossfree / snd-util-3.8.tar.gz / snd-util-3.8.tar / sndkit / v30 / midi / midread.c < prev   
C/C++ Source or Header  |  1995-03-03  |  1KB  |  91 lines

  1. /*
  2.  *    midread.c
  3.  *
  4.  *    A sample program for reading Midi sysex dumps from /dev/midi
  5.  *
  6.  *    by Hannu Savolainen
  7.  *    hsavolai@cs.helsinki.fi
  8.  */
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <unistd.h>
  13. #include <fcntl.h>
  14. #include <sys/soundcard.h>
  15.  
  16. int fd;
  17.  
  18. main(int argc, char *argv[])
  19. {
  20.     unsigned char buf[100];
  21.     int i, l, n, tmp;
  22.  
  23.     if (argc < 2)
  24.     { 
  25.         fprintf(stderr, "usage: %s mididev hexval ...\n",
  26.             argv[0]);
  27.         exit(-1);
  28.     }
  29.  
  30.     if ((fd=open(argv[1], O_RDWR, 0))==-1)
  31.     {
  32.         perror("/dev/sequencer");
  33.         exit(-1);
  34.     }
  35.  
  36. /*
  37.  * Dump the cmdline arguments to the line
  38.  */
  39.  
  40.     for (i=2;i<argc;i++)
  41.     {
  42.         if (sscanf(argv[i], "%x", &tmp)!=1)
  43.         {
  44.             fprintf(stderr, "%s??\n", argv[i]);
  45.             exit(0);
  46.         }
  47.         buf[0] = (unsigned char)(tmp & 0xff);
  48.  
  49.         write(fd, buf, 1);
  50.         fprintf(stderr, "%02x ", buf[1]);
  51.     }
  52.     if (argc>2) fprintf(stderr,"\n");
  53.  
  54. /*
  55.  *     Set the pre byte timeout.
  56.  */
  57.  
  58.     i = 100;    /* 10 seconds */
  59.     if (ioctl(fd, SNDCTL_MIDI_PRETIME, &i)==-1)
  60.     {
  61.         perror("SNDCTL_MIDI_PRETIME");
  62.         exit(-1);
  63.     }
  64.  
  65. /*
  66.  *    Receive bytes. Ignore any timeouts (l=0) if no characters have
  67.  *    been received yet (n=0). A timeout after the first received byte
  68.  *    signals end of the dump.
  69.  */
  70.         n = 0;
  71.  
  72.     while ((l=read(fd, buf, sizeof(buf))) != -1 && (l>0 || n==0))
  73.     {
  74.         n += l;
  75.  
  76.         if (write(1, buf, l) != l)
  77.         {
  78.             perror("stdout");
  79.             exit(-1);
  80.         }
  81.     }
  82.  
  83.     if (l == -1)
  84.     {
  85.         perror(argv[1]);
  86.         exit(-1);
  87.     };
  88.  
  89.     exit(0);
  90. }
  91.