lists are working
This commit is contained in:
parent
9f9fae2822
commit
85e12b86f3
@ -17,11 +17,11 @@
|
|||||||
#X msg 277 42 set \$1;
|
#X msg 277 42 set \$1;
|
||||||
#X text 355 117 range is 0..1;
|
#X text 355 117 range is 0..1;
|
||||||
#X obj 498 10 r rvstplugname;
|
#X obj 498 10 r rvstplugname;
|
||||||
#X symbolatom 498 48 17 0 0 0 - - - 0;
|
#X symbolatom 498 42 26 0 0 0 - - - 0;
|
||||||
#X obj 516 102 r rvstdata;
|
#X obj 516 102 r rvstdata;
|
||||||
#X symbolatom 516 136 17 0 0 0 - - - 0;
|
|
||||||
#X obj 516 265 s svstdata;
|
#X obj 516 265 s svstdata;
|
||||||
#X msg 547 216 symbol hello\ world\ 2;
|
#X obj 516 134 print;
|
||||||
|
#X msg 516 233 test 1.3 hello 0.3 2;
|
||||||
#X connect 0 0 7 0;
|
#X connect 0 0 7 0;
|
||||||
#X connect 0 1 6 0;
|
#X connect 0 1 6 0;
|
||||||
#X connect 1 0 2 0;
|
#X connect 1 0 2 0;
|
||||||
@ -39,5 +39,5 @@
|
|||||||
#X connect 14 0 10 0;
|
#X connect 14 0 10 0;
|
||||||
#X connect 15 0 14 0;
|
#X connect 15 0 14 0;
|
||||||
#X connect 17 0 18 0;
|
#X connect 17 0 18 0;
|
||||||
#X connect 19 0 20 0;
|
#X connect 19 0 21 0;
|
||||||
#X connect 22 0 21 0;
|
#X connect 22 0 20 0;
|
||||||
|
@ -205,13 +205,49 @@ int setPdvstPlugName(char* instanceName)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int setPdvstChunk(char* instanceName)
|
|
||||||
|
/*receive data chunk from host*/
|
||||||
|
int setPdvstChunk(const char *amsg)
|
||||||
{
|
{
|
||||||
t_symbol *tempSym;
|
t_symbol *tempSym;
|
||||||
tempSym = gensym("rvstdata");
|
tempSym = gensym("rvstdata");
|
||||||
|
|
||||||
if (tempSym->s_thing)
|
if (tempSym->s_thing)
|
||||||
{
|
{
|
||||||
pd_symbol(tempSym->s_thing, gensym(instanceName));
|
size_t len = strlen(amsg);
|
||||||
|
t_binbuf* bbuf = binbuf_new();
|
||||||
|
binbuf_text(bbuf, amsg, len);
|
||||||
|
|
||||||
|
int msg, natom = binbuf_getnatom(bbuf);
|
||||||
|
t_atom *at = binbuf_getvec(bbuf);
|
||||||
|
|
||||||
|
for (msg = 0; msg < natom;) {
|
||||||
|
int emsg;
|
||||||
|
for (emsg = msg; emsg < natom && at[emsg].a_type != A_COMMA
|
||||||
|
&& at[emsg].a_type != A_SEMI; emsg++);
|
||||||
|
if (emsg > msg) {
|
||||||
|
int i;
|
||||||
|
/* check for illegal atoms */
|
||||||
|
for (i = msg; i < emsg; i++)
|
||||||
|
if (at[i].a_type == A_DOLLAR || at[i].a_type == A_DOLLSYM) {
|
||||||
|
pd_error(NULL, "rvstdata: got dollar sign in message");
|
||||||
|
goto nodice;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (at[msg].a_type == A_FLOAT) {
|
||||||
|
if (emsg > msg + 1)
|
||||||
|
pd_list(tempSym->s_thing, 0, emsg-msg, at + msg);
|
||||||
|
else pd_float(tempSym->s_thing, at[msg].a_w.w_float);
|
||||||
|
}
|
||||||
|
else if (at[msg].a_type == A_SYMBOL) {
|
||||||
|
pd_anything(tempSym->s_thing, at[msg].a_w.w_symbol, emsg-msg-1, at + msg + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nodice:
|
||||||
|
msg = emsg + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
binbuf_free(bbuf);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -250,15 +286,31 @@ void sendPdVstFloatParameter(t_vstParameterReceiver *x, t_float floatValue)
|
|||||||
ReleaseMutex(pdvstTransferMutex);
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendPdVstChunk(t_vstChunkReceiver *x, t_symbol *sym)
|
/*send data chunk to host*/
|
||||||
|
void sendPdVstChunk(t_vstChunkReceiver *x, t_symbol *s, int argc, t_atom *argv)
|
||||||
{
|
{
|
||||||
|
char *buf;
|
||||||
|
int length;
|
||||||
|
t_atom at;
|
||||||
|
t_binbuf*bbuf = binbuf_new();
|
||||||
|
|
||||||
|
memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRINGSIZE);
|
||||||
|
|
||||||
|
SETSYMBOL(&at, s);
|
||||||
|
binbuf_add(bbuf, 1, &at);
|
||||||
|
binbuf_add(bbuf, argc, argv);
|
||||||
|
binbuf_gettext(bbuf, &buf, &length);
|
||||||
|
binbuf_free(bbuf);
|
||||||
|
|
||||||
WaitForSingleObject(pdvstTransferMutex, INFINITE);
|
WaitForSingleObject(pdvstTransferMutex, INFINITE);
|
||||||
pdvstData->datachunk.type = STRING_TYPE;
|
pdvstData->datachunk.type = STRING_TYPE;
|
||||||
pdvstData->datachunk.direction = PD_SEND;
|
pdvstData->datachunk.direction = PD_SEND;
|
||||||
pdvstData->datachunk.updated = 1;
|
pdvstData->datachunk.updated = 1;
|
||||||
strcpy(pdvstData->datachunk.value.stringData,sym->s_name);
|
strcpy(pdvstData->datachunk.value.stringData,buf);
|
||||||
|
//memcpy(pdvstData->datachunk.value.stringData, buf, length);
|
||||||
ReleaseMutex(pdvstTransferMutex);
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
|
|
||||||
|
freebytes(buf, length+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendPdVstGuiName(t_vstGuiNameReceiver *x, t_symbol *symbolValue)
|
void sendPdVstGuiName(t_vstGuiNameReceiver *x, t_symbol *symbolValue)
|
||||||
@ -268,9 +320,7 @@ void sendPdVstGuiName(t_vstGuiNameReceiver *x, t_symbol *symbolValue)
|
|||||||
pdvstData->guiName.direction = PD_SEND;
|
pdvstData->guiName.direction = PD_SEND;
|
||||||
pdvstData->guiName.updated = 1;
|
pdvstData->guiName.updated = 1;
|
||||||
strcpy(pdvstData->guiName.value.stringData,symbolValue->s_name);
|
strcpy(pdvstData->guiName.value.stringData,symbolValue->s_name);
|
||||||
|
|
||||||
ReleaseMutex(pdvstTransferMutex);
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void makePdvstParameterReceivers()
|
void makePdvstParameterReceivers()
|
||||||
@ -292,20 +342,14 @@ void makePdvstGuiNameReceiver()
|
|||||||
{
|
{
|
||||||
vstGuiNameReceiver = (t_vstGuiNameReceiver *)pd_new(vstGuiNameReceiver_class);
|
vstGuiNameReceiver = (t_vstGuiNameReceiver *)pd_new(vstGuiNameReceiver_class);
|
||||||
pd_bind(&vstGuiNameReceiver->x_obj.ob_pd, gensym("guiName"));
|
pd_bind(&vstGuiNameReceiver->x_obj.ob_pd, gensym("guiName"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void makevstChunkReceiver()
|
void makevstChunkReceiver()
|
||||||
{
|
{
|
||||||
vstChunkReceiver = (t_vstChunkReceiver *)pd_new(vstChunkReceiver_class);
|
vstChunkReceiver = (t_vstChunkReceiver *)pd_new(vstChunkReceiver_class);
|
||||||
pd_bind(&vstChunkReceiver->x_obj.ob_pd, gensym("svstdata"));
|
pd_bind(&vstChunkReceiver->x_obj.ob_pd, gensym("svstdata"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void send_dacs(void)
|
void send_dacs(void)
|
||||||
{
|
{
|
||||||
int i, j, sampleCount, nChannels, blockSize;
|
int i, j, sampleCount, nChannels, blockSize;
|
||||||
@ -384,7 +428,7 @@ int scheduler()
|
|||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
class_addsymbol(vstChunkReceiver_class,(t_method)sendPdVstChunk);
|
class_addanything(vstChunkReceiver_class,(t_method)sendPdVstChunk);
|
||||||
makevstChunkReceiver();
|
makevstChunkReceiver();
|
||||||
|
|
||||||
|
|
||||||
|
@ -604,24 +604,21 @@ bool pdvst::getOutputProperties(VstInt32 index, VstPinProperties* properties)
|
|||||||
|
|
||||||
VstInt32 pdvst::getChunk (void** data, bool isPreset)
|
VstInt32 pdvst::getChunk (void** data, bool isPreset)
|
||||||
{
|
{
|
||||||
MessageBox(0,"getchunk","debug",MB_OK);
|
|
||||||
strcpy ((char *)*data, pdvstData->datachunk.value.stringData);
|
strcpy ((char *)*data, pdvstData->datachunk.value.stringData);
|
||||||
return strlen(pdvstData->datachunk.value.stringData);
|
return strlen(pdvstData->datachunk.value.stringData);
|
||||||
}
|
}
|
||||||
|
|
||||||
VstInt32 pdvst::setChunk (void* data, VstInt32 byteSize, bool isPreset)
|
VstInt32 pdvst::setChunk (void* data, VstInt32 byteSize, bool isPreset)
|
||||||
{
|
{
|
||||||
|
memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRINGSIZE);
|
||||||
WaitForSingleObject(pdvstTransferMutex, 10);
|
WaitForSingleObject(pdvstTransferMutex, 10);
|
||||||
{
|
{
|
||||||
pdvstData->datachunk.direction = PD_RECEIVE;
|
pdvstData->datachunk.direction = PD_RECEIVE;
|
||||||
pdvstData->datachunk.type = STRING_TYPE;
|
pdvstData->datachunk.type = STRING_TYPE;
|
||||||
strcpy(pdvstData->datachunk.value.stringData,(char *)data);
|
strncpy(pdvstData->datachunk.value.stringData,(char *)data, (size_t)byteSize);
|
||||||
pdvstData->datachunk.updated = 1;
|
pdvstData->datachunk.updated = 1;
|
||||||
ReleaseMutex(pdvstTransferMutex);
|
ReleaseMutex(pdvstTransferMutex);
|
||||||
}
|
}
|
||||||
MessageBox(0,"setchunk","debug",MB_OK);
|
|
||||||
debugLog("setchunk: %s", data);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user