hi list, hi miller,
 
I've made a little patch to enable externs
to modify the dsp chain while the dsp processing
is running... this avoids to restart dsp processing
when a parameter is changed, this is illustrated
by the "spigot~" extern attached.
 
Without this patch, I had to restart dsp processing
and all other dsp objects got interrupted.
That was really annoying !!!
 
What was made basically was adding the following code :
 
d_ugen.c :
 
################################################
    /* function to dynamically change dsp functions parameters
       arguments are :
       f : pointer to your dsp function
       rank : rank of the argument to change
       value : new value of this parameter
 
       QUITE DANGEROUS !!! no checking is possible
       because the number of arguments is not stored in dsp_chain
       Copyleft ydegoyon@free.fr */
void dsp_mod(t_perfroutine f, int rank, int value )
{
    va_list ap;
    t_int *pdsp_chain = dsp_chain;
    t_int i;
 
    while ( pdsp_chain ){
       if ( *pdsp_chain == (t_int)f ){
          *(pdsp_chain+rank) = value;
          post ( "dsp_mod : warning : modifying dsp chain, better know what you're doing!!!!" );
          break;
       }
       pdsp_chain++;
    }
}
################################################
 
This function has to be exported in m_pd.h :
 
################################################
EXTERN void dsp_mod(t_perfroutine f, int rank, int value);
################################################
 
An example of use is available in spigot~.c attached.
 
This is really dangerous to use this,
because it enables an extern to transform
dsp_chain into a mess,
so use it with care !!!
 
Cheers,
 
Yves Degoyon.
 
PS : it seems to be patch day, so I don't deliver this as a patch
for incremental reasons ( I've applied some patches myself ).