version 1.1, 2012/11/23 07:03:28 |
version 1.2, 2012/11/30 20:30:24 |
|
|
int |
int |
sock_rdata(struct sock *f) |
sock_rdata(struct sock *f) |
{ |
{ |
struct abuf *buf; |
unsigned char midibuf[MIDI_BUFSZ]; |
unsigned char *data; |
unsigned char *data; |
int n, count; |
int n, count; |
|
|
|
|
panic(); |
panic(); |
} |
} |
#endif |
#endif |
if (f->slot) |
|
buf = &f->slot->mix.buf; |
|
else |
|
buf = &f->midi->ibuf; |
|
while (f->rtodo > 0) { |
while (f->rtodo > 0) { |
data = abuf_wgetblk(buf, &count); |
if (f->slot) |
|
data = abuf_wgetblk(&f->slot->mix.buf, &count); |
|
else { |
|
data = midibuf; |
|
count = MIDI_BUFSZ; |
|
} |
if (count > f->rtodo) |
if (count > f->rtodo) |
count = f->rtodo; |
count = f->rtodo; |
n = sock_fdread(f, data, count); |
n = sock_fdread(f, data, count); |
if (n == 0) |
if (n == 0) |
return 0; |
return 0; |
f->rtodo -= n; |
f->rtodo -= n; |
abuf_wcommit(buf, n); |
if (f->slot) |
|
abuf_wcommit(&f->slot->mix.buf, n); |
|
else |
|
midi_in(f->midi, midibuf, n); |
} |
} |
#ifdef DEBUG |
#ifdef DEBUG |
if (log_level >= 4) { |
if (log_level >= 4) { |
|
|
#endif |
#endif |
if (f->slot) |
if (f->slot) |
slot_write(f->slot); |
slot_write(f->slot); |
if (f->midi) |
|
f->fillpending += midi_in(f->midi); |
|
return 1; |
return 1; |
} |
} |
|
|
|
|
c = port_bynum(p->devnum - 32); |
c = port_bynum(p->devnum - 32); |
if (c == NULL) |
if (c == NULL) |
return 0; |
return 0; |
if (mode & MODE_MIDIOUT) |
midi_link(f->midi, c->midi); |
f->midi->txmask |= c->midi->rxmask; |
|
if (mode & MODE_MIDIIN) |
|
c->midi->txmask |= f->midi->rxmask; |
|
} else |
} else |
return 0; |
return 0; |
if (mode & MODE_MIDIOUT) |
|
f->fillpending = MIDI_BUFSZ; |
|
return 1; |
return 1; |
} |
} |
f->opt = opt_byname(p->opt, p->devnum); |
f->opt = opt_byname(p->opt, p->devnum); |