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 / sequencer / midread.c next >
C/C++ Source or Header  |  1995-03-03  |  1KB  |  73 lines

  1. /*
  2.  *    midread.c
  3.  *
  4.  *    A sample program for reading Midi sysex dumps from /dev/sequencer
  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[4];
  21.     int *ibuf = (int*)&buf[0];
  22.     int i, tmp;
  23.  
  24.     if ((fd=open("/dev/sequencer", O_RDWR, 0))==-1)
  25.     {
  26.         perror("/dev/sequencer");
  27.         exit(-1);
  28.     }
  29.  
  30. /*
  31.  * Dump the cmdline arguments to the line
  32.  */
  33.  
  34.     for (i=1;i<argc;i++)
  35.     {
  36.         buf[0]=SEQ_MIDIPUTC;
  37.  
  38.         if (sscanf(argv[i], "%x", &tmp)!=1)
  39.         {
  40.             fprintf(stderr, "%s??\n", argv[i]);
  41.             exit(0);
  42.         }
  43.  
  44.         buf[1] = tmp;
  45.         buf[2] = 0;
  46.         buf[3] = 0;
  47.  
  48.         write(fd, buf, 4);
  49.         fprintf(stderr, "%02x ", buf[1]);
  50.     }
  51.     fprintf(stderr,"\n");
  52.  
  53. /*
  54.  *    Receive bytes
  55.  */
  56.  
  57.     while (1)
  58.     {
  59.         if (read(fd, buf, 4) != 4)
  60.         {
  61.             perror("/dev/sequencer");
  62.             exit(-1);
  63.         };
  64.  
  65.         if (buf[0]==SEQ_MIDIPUTC)
  66.         {
  67.             write(1, &buf[1], 1);    /* Save the byte */
  68.             if (buf[1]==0xf7) fprintf(stderr, "<eot>\n");
  69.         }
  70.     }
  71.  
  72. }
  73.