Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17991
Modified Files:
Tag: desiredata
s_midi_oss.c
Log Message:
cleanup
Index: s_midi_oss.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_midi_oss.c,v
retrieving revision 1.3.8.2
retrieving revision 1.3.8.2.2.1
diff -C2 -d -r1.3.8.2 -r1.3.8.2.2.1
*** s_midi_oss.c 30 Nov 2005 13:36:58 -0000 1.3.8.2
--- s_midi_oss.c 3 Aug 2007 00:01:07 -0000 1.3.8.2.2.1
***************
*** 23,222 ****
static int oss_midioutfd[MAXMIDIOUTDEV];
! static void oss_midiout(int fd, int n)
! {
char b = n;
! if ((write(fd, (char *) &b, 1)) != 1)
! perror("midi write");
}
#define O_MIDIFLAG O_NDELAY
! void sys_do_open_midi(int nmidiin, int *midiinvec,
! int nmidiout, int *midioutvec)
! {
int i;
! for (i = 0; i < nmidiout; i++)
! oss_midioutfd[i] = -1;
! for (i = 0, oss_nmidiin = 0; i < nmidiin; i++)
! {
int fd = -1, j, outdevindex = -1;
char namebuf[80];
int devno = midiinvec[i];
!
! for (j = 0; j < nmidiout; j++)
! if (midioutvec[j] == midiinvec[i])
! outdevindex = j;
!
! /* try to open the device for read/write. */
! if (devno == 0 && fd < 0 && outdevindex >= 0)
! {
sys_setalarm(1000000);
fd = open("/dev/midi", O_RDWR | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr,
! "device 1: tried /dev/midi READ/WRITE; returned %d\n", fd);
! if (outdevindex >= 0 && fd >= 0)
! oss_midioutfd[outdevindex] = fd;
}
! if (fd < 0 && outdevindex >= 0)
! {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%2.2d", devno);
fd = open(namebuf, O_RDWR | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr,
! "device %d: tried %s READ/WRITE; returned %d\n",
! devno, namebuf, fd);
! if (outdevindex >= 0 && fd >= 0)
! oss_midioutfd[outdevindex] = fd;
}
! if (fd < 0 && outdevindex >= 0)
! {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%d", devno);
fd = open(namebuf, O_RDWR | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr, "device %d: tried %s READ/WRITE; returned %d\n",
! devno, namebuf, fd);
! if (outdevindex >= 0 && fd >= 0)
! oss_midioutfd[outdevindex] = fd;
}
! if (devno == 1 && fd < 0)
! {
sys_setalarm(1000000);
fd = open("/dev/midi", O_RDONLY | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr,
! "device 1: tried /dev/midi READONLY; returned %d\n", fd);
}
! if (fd < 0)
! {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%2.2d", devno);
fd = open(namebuf, O_RDONLY | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr, "device %d: tried %s READONLY; returned %d\n",
! devno, namebuf, fd);
}
! if (fd < 0)
! {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%d", devno);
fd = open(namebuf, O_RDONLY | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr, "device %d: tried %s READONLY; returned %d\n",
! devno, namebuf, fd);
}
! if (fd >= 0)
! oss_midiinfd[oss_nmidiin++] = fd;
else post("couldn't open MIDI input device %d", devno);
}
! for (i = 0, oss_nmidiout = 0; i < nmidiout; i++)
! {
int fd = oss_midioutfd[i];
char namebuf[80];
int devno = midioutvec[i];
! if (devno == 1 && fd < 0)
! {
sys_setalarm(1000000);
fd = open("/dev/midi", O_WRONLY | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr,
! "device 1: tried /dev/midi WRITEONLY; returned %d\n", fd);
}
! if (fd < 0)
! {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%2.2d", devno);
fd = open(namebuf, O_WRONLY | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr, "device %d: tried %s WRITEONLY; returned %d\n",
! devno, namebuf, fd);
}
! if (fd < 0)
! {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%d", devno);
fd = open(namebuf, O_WRONLY | O_MIDIFLAG);
! if (sys_verbose)
! fprintf(stderr, "device %d: tried %s WRITEONLY; returned %d\n",
! devno, namebuf, fd);
}
! if (fd >= 0)
! oss_midioutfd[oss_nmidiout++] = fd;
else post("couldn't open MIDI output device %d", devno);
}
if (oss_nmidiin < nmidiin || oss_nmidiout < nmidiout || sys_verbose)
! post("opened %d MIDI input device(s) and %d MIDI output device(s).",
! oss_nmidiin, oss_nmidiout);
sys_setalarm(0);
}
! #define md_msglen(x) (((x)<0xC0)?2:((x)<0xE0)?1:((x)<0xF0)?2:\
! ((x)==0xF2)?2:((x)<0xF4)?1:0)
! void sys_putmidimess(int portno, int a, int b, int c)
! {
! if (portno >= 0 && portno < oss_nmidiout)
! {
! switch (md_msglen(a))
! {
case 2:
! oss_midiout(oss_midioutfd[portno],a);
! oss_midiout(oss_midioutfd[portno],b);
oss_midiout(oss_midioutfd[portno],c);
return;
case 1:
! oss_midiout(oss_midioutfd[portno],a);
! oss_midiout(oss_midioutfd[portno],b);
return;
case 0:
! oss_midiout(oss_midioutfd[portno],a);
return;
! };
}
}
! void sys_putmidibyte(int portno, int byte)
! {
! if (portno >= 0 && portno < oss_nmidiout)
! oss_midiout(oss_midioutfd[portno], byte);
}
! #if 0 /* this is the "select" version which doesn't work with OSS
! driver for emu10k1 (it doesn't implement select.) */
! void sys_poll_midi(void)
! {
int i, throttle = 100;
struct timeval timout;
int did = 1, maxfd = 0;
! while (did)
! {
fd_set readset, writeset, exceptset;
did = 0;
! if (throttle-- < 0)
! break;
timout.tv_sec = 0;
timout.tv_usec = 0;
-
FD_ZERO(&writeset);
FD_ZERO(&readset);
FD_ZERO(&exceptset);
! for (i = 0; i < oss_nmidiin; i++)
! {
! if (oss_midiinfd[i] > maxfd)
! maxfd = oss_midiinfd[i];
FD_SET(oss_midiinfd[i], &readset);
}
select(maxfd+1, &readset, &writeset, &exceptset, &timout);
! for (i = 0; i < oss_nmidiin; i++)
! if (FD_ISSET(oss_midiinfd[i], &readset))
! {
char c;
int ret = read(oss_midiinfd[i], &c, 1);
! if (ret <= 0)
! fprintf(stderr, "Midi read error\n");
else sys_midibytein(i, (c & 0xff));
did = 1;
--- 23,161 ----
static int oss_midioutfd[MAXMIDIOUTDEV];
! static void oss_midiout(int fd, int n) {
char b = n;
! if ((write(fd, (char *) &b, 1)) != 1) perror("midi write");
}
#define O_MIDIFLAG O_NDELAY
! void sys_do_open_midi(int nmidiin, int *midiinvec, int nmidiout, int *midioutvec) {
int i;
! for (i = 0; i < nmidiout; i++) oss_midioutfd[i] = -1;
! for (i = 0, oss_nmidiin = 0; i < nmidiin; i++) {
int fd = -1, j, outdevindex = -1;
char namebuf[80];
int devno = midiinvec[i];
! for (j = 0; j < nmidiout; j++) if (midioutvec[j] == midiinvec[i]) outdevindex = j;
! /* try to open the device for read/write. */
! if (devno == 0 && fd < 0 && outdevindex >= 0) {
sys_setalarm(1000000);
fd = open("/dev/midi", O_RDWR | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device 1: tried /dev/midi READ/WRITE; returned %d\n", fd);
! if (outdevindex >= 0 && fd >= 0) oss_midioutfd[outdevindex] = fd;
}
! if (fd < 0 && outdevindex >= 0) {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%2.2d", devno);
fd = open(namebuf, O_RDWR | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device %d: tried %s READ/WRITE; returned %d\n", devno, namebuf, fd);
! if (outdevindex >= 0 && fd >= 0) oss_midioutfd[outdevindex] = fd;
}
! if (fd < 0 && outdevindex >= 0) {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%d", devno);
fd = open(namebuf, O_RDWR | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device %d: tried %s READ/WRITE; returned %d\n", devno, namebuf, fd);
! if (outdevindex >= 0 && fd >= 0) oss_midioutfd[outdevindex] = fd;
}
! if (devno == 1 && fd < 0) {
sys_setalarm(1000000);
fd = open("/dev/midi", O_RDONLY | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device 1: tried /dev/midi READONLY; returned %d\n", fd);
}
! if (fd < 0) {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%2.2d", devno);
fd = open(namebuf, O_RDONLY | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device %d: tried %s READONLY; returned %d\n", devno, namebuf, fd);
}
! if (fd < 0) {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%d", devno);
fd = open(namebuf, O_RDONLY | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device %d: tried %s READONLY; returned %d\n", devno, namebuf, fd);
}
! if (fd >= 0) oss_midiinfd[oss_nmidiin++] = fd;
else post("couldn't open MIDI input device %d", devno);
}
! for (i = 0, oss_nmidiout = 0; i < nmidiout; i++) {
int fd = oss_midioutfd[i];
char namebuf[80];
int devno = midioutvec[i];
! if (devno == 1 && fd < 0) {
sys_setalarm(1000000);
fd = open("/dev/midi", O_WRONLY | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device 1: tried /dev/midi WRITEONLY; returned %d\n", fd);
}
! if (fd < 0) {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%2.2d", devno);
fd = open(namebuf, O_WRONLY | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device %d: tried %s WRITEONLY; returned %d\n", devno, namebuf, fd);
}
! if (fd < 0) {
sys_setalarm(1000000);
sprintf(namebuf, "/dev/midi%d", devno);
fd = open(namebuf, O_WRONLY | O_MIDIFLAG);
! if (sys_verbose) fprintf(stderr, "device %d: tried %s WRITEONLY; returned %d\n", devno, namebuf, fd);
}
! if (fd >= 0) oss_midioutfd[oss_nmidiout++] = fd;
else post("couldn't open MIDI output device %d", devno);
}
if (oss_nmidiin < nmidiin || oss_nmidiout < nmidiout || sys_verbose)
! post("opened %d MIDI input device(s) and %d MIDI output device(s).", oss_nmidiin, oss_nmidiout);
sys_setalarm(0);
}
! #define md_msglen(x) (((x)<0xC0)?2:((x)<0xE0)?1:((x)<0xF0)?2:((x)==0xF2)?2:((x)<0xF4)?1:0)
! void sys_putmidimess(int portno, int a, int b, int c) {
! if (portno >= 0 && portno < oss_nmidiout) {
! switch (md_msglen(a)) {
case 2:
! oss_midiout(oss_midioutfd[portno],a);
! oss_midiout(oss_midioutfd[portno],b);
oss_midiout(oss_midioutfd[portno],c);
return;
case 1:
! oss_midiout(oss_midioutfd[portno],a);
! oss_midiout(oss_midioutfd[portno],b);
return;
case 0:
! oss_midiout(oss_midioutfd[portno],a);
return;
! }
}
}
! void sys_putmidibyte(int portno, int byte) {
! if (portno >= 0 && portno < oss_nmidiout) oss_midiout(oss_midioutfd[portno], byte);
}
! #if 0 /* this is the "select" version which doesn't work with OSS driver for emu10k1 (it doesn't implement select.) */
! void sys_poll_midi() {
int i, throttle = 100;
struct timeval timout;
int did = 1, maxfd = 0;
! while (did) {
fd_set readset, writeset, exceptset;
did = 0;
! if (throttle-- < 0) break;
timout.tv_sec = 0;
timout.tv_usec = 0;
FD_ZERO(&writeset);
FD_ZERO(&readset);
FD_ZERO(&exceptset);
! for (i = 0; i < oss_nmidiin; i++) {
! if (oss_midiinfd[i] > maxfd) maxfd = oss_midiinfd[i];
FD_SET(oss_midiinfd[i], &readset);
}
select(maxfd+1, &readset, &writeset, &exceptset, &timout);
! for (i = 0; i < oss_nmidiin; i++) if (FD_ISSET(oss_midiinfd[i], &readset)) {
char c;
int ret = read(oss_midiinfd[i], &c, 1);
! if (ret <= 0) fprintf(stderr, "Midi read error\n");
else sys_midibytein(i, (c & 0xff));
did = 1;
***************
*** 224,252 ****
}
}
! #else
!
! /* this version uses the asynchronous "read()" ... */
! void sys_poll_midi(void)
! {
! int i, throttle = 100;
struct timeval timout;
int did = 1, maxfd = 0;
! while (did)
! {
fd_set readset, writeset, exceptset;
did = 0;
! if (throttle-- < 0)
! break;
! for (i = 0; i < oss_nmidiin; i++)
! {
char c;
int ret = read(oss_midiinfd[i], &c, 1);
! if (ret < 0)
! {
! if (errno != EAGAIN)
! perror("MIDI");
! }
! else if (ret != 0)
! {
sys_midibytein(i, (c & 0xff));
did = 1;
--- 163,182 ----
}
}
! #else
! /* this version uses the asynchronous "read()" ... */
! void sys_poll_midi() {
! int throttle = 100;
struct timeval timout;
int did = 1, maxfd = 0;
! while (did) {
fd_set readset, writeset, exceptset;
did = 0;
! if (throttle-- < 0) break;
! for (int i=0; i<oss_nmidiin; i++) {
char c;
int ret = read(oss_midiinfd[i], &c, 1);
! if (ret < 0) {
! if (errno != EAGAIN) perror("MIDI");
! } else if (ret != 0) {
sys_midibytein(i, (c & 0xff));
did = 1;
***************
*** 257,267 ****
#endif
! void sys_close_midi()
! {
! int i;
! for (i = 0; i < oss_nmidiin; i++)
! close(oss_midiinfd[i]);
! for (i = 0; i < oss_nmidiout; i++)
! close(oss_midioutfd[i]);
oss_nmidiin = oss_nmidiout = 0;
}
--- 187,193 ----
#endif
! void sys_close_midi() {
! for (int i=0; i<oss_nmidiin ; i++) close(oss_midiinfd [i]);
! for (int i=0; i<oss_nmidiout; i++) close(oss_midioutfd[i]);
oss_nmidiin = oss_nmidiout = 0;
}
***************
*** 270,359 ****
static int oss_nmidiindevs, oss_nmidioutdevs, oss_initted;
! void midi_oss_init(void)
! {
! int i;
! if (oss_initted)
! return;
oss_initted = 1;
! for (i = 0; i < NSEARCH; i++)
! {
int fd;
char namebuf[80];
-
oss_nmidiindevs = i;
! /* try to open the device for reading */
! if (i == 0)
! {
fd = open("/dev/midi", O_RDONLY | O_NDELAY);
! if (fd >= 0)
! {
! close(fd);
! continue;
! }
}
sprintf(namebuf, "/dev/midi%2.2d", i);
fd = open(namebuf, O_RDONLY | O_NDELAY);
! if (fd >= 0)
! {
! close(fd);
! continue;
! }
sprintf(namebuf, "/dev/midi%d", i);
fd = open(namebuf, O_RDONLY | O_NDELAY);
! if (fd >= 0)
! {
! close(fd);
! continue;
! }
break;
}
! for (i = 0; i < NSEARCH; i++)
! {
int fd;
char namebuf[80];
-
oss_nmidioutdevs = i;
! /* try to open the device for writing */
! if (i == 0)
! {
fd = open("/dev/midi", O_WRONLY | O_NDELAY);
! if (fd >= 0)
! {
! close(fd);
! continue;
! }
}
sprintf(namebuf, "/dev/midi%2.2d", i);
fd = open(namebuf, O_WRONLY | O_NDELAY);
! if (fd >= 0)
! {
! close(fd);
! continue;
! }
sprintf(namebuf, "/dev/midi%d", i);
fd = open(namebuf, O_WRONLY | O_NDELAY);
! if (fd >= 0)
! {
! close(fd);
! continue;
! }
break;
}
}
! void midi_getdevs(char *indevlist, int *nindevs,
! char *outdevlist, int *noutdevs, int maxndev, int devdescsize)
! {
int i, ndev;
! if ((ndev = oss_nmidiindevs) > maxndev)
! ndev = maxndev;
! for (i = 0; i < ndev; i++)
! sprintf(indevlist + i * devdescsize, "OSS MIDI device #%d", i+1);
*nindevs = ndev;
!
! if ((ndev = oss_nmidioutdevs) > maxndev)
! ndev = maxndev;
! for (i = 0; i < ndev; i++)
! sprintf(outdevlist + i * devdescsize, "OSS MIDI device #%d", i+1);
*noutdevs = ndev;
}
--- 196,245 ----
static int oss_nmidiindevs, oss_nmidioutdevs, oss_initted;
! void midi_oss_init() {
! if (oss_initted) return;
oss_initted = 1;
! for (int i=0; i<NSEARCH; i++) {
int fd;
char namebuf[80];
oss_nmidiindevs = i;
! /* try to open the device for reading */
! if (i == 0) {
fd = open("/dev/midi", O_RDONLY | O_NDELAY);
! if (fd >= 0) {close(fd); continue;}
}
sprintf(namebuf, "/dev/midi%2.2d", i);
fd = open(namebuf, O_RDONLY | O_NDELAY);
! if (fd >= 0) {close(fd); continue;}
sprintf(namebuf, "/dev/midi%d", i);
fd = open(namebuf, O_RDONLY | O_NDELAY);
! if (fd >= 0) {close(fd); continue;}
break;
}
! for (int i=0; i<NSEARCH; i++) {
int fd;
char namebuf[80];
oss_nmidioutdevs = i;
! /* try to open the device for writing */
! if (i == 0) {
fd = open("/dev/midi", O_WRONLY | O_NDELAY);
! if (fd >= 0) {close(fd); continue;}
}
sprintf(namebuf, "/dev/midi%2.2d", i);
fd = open(namebuf, O_WRONLY | O_NDELAY);
! if (fd >= 0) {close(fd); continue;}
sprintf(namebuf, "/dev/midi%d", i);
fd = open(namebuf, O_WRONLY | O_NDELAY);
! if (fd >= 0) {close(fd); continue;}
break;
}
}
! void midi_getdevs(char *indevlist, int *nindevs, char *outdevlist, int *noutdevs, int maxndev, int devdescsize) {
int i, ndev;
! if ((ndev = oss_nmidiindevs) > maxndev) ndev = maxndev;
! for (i = 0; i < ndev; i++) sprintf(indevlist + i * devdescsize, "OSS MIDI device #%d", i+1);
*nindevs = ndev;
! if ((ndev = oss_nmidioutdevs) > maxndev) ndev = maxndev;
! for (i = 0; i < ndev; i++) sprintf(outdevlist + i * devdescsize, "OSS MIDI device #%d", i+1);
*noutdevs = ndev;
}