# Allow waves for multiple parameters in built-in functions

Built-in function parameters are often specified like this:

`Slider limits = {low,high,inc}`

I'd often like to be able to use syntax like this:

`Slider limits=myLimitsWave   //where myLimitsWave would presumably be a 3-point 1-dimensional wave`

For an example use case: Sometimes I make a function that is going to iterate over multiple calls of a built-in function. I'll use Slider as an example below. (It could also be ModifyGraph rgb, muloffset, or any function with a multiple-value named parameter.) In such cases I resort to loops like the following:

function buildSliders_currently()

newpanel/k=1
int i,numSliders = 3
make/o/free/n=(3,numSliders) minMaxIncr
minMaxIncr[][0] = {-100,100,10}
minMaxIncr[][1] = {-1000,0,100}
minMaxIncr[][2] = {-5,10,.1}

for (i=0;i<numSliders;i++)
//passing the 3 parameters like this has always seemed cumbersome
slider \$("slider_"+num2str(i)) limits={minMaxIncr[0][i],minMaxIncr[1][i],minMaxIncr[2][i]}
endfor

end

But every so often I try (and then fail to compile) code like this. I'd use this syntax regularly if it worked because I find it easier to read and write

function buildSliders_wishedSyntax()

newpanel/k=1
int i,numSliders = 3
make/o/free/n=(3,numSliders)/free minMaxIncr
minMaxIncr[][0] = {-100,100,10}
minMaxIncr[][1] = {-1000,0,100}
minMaxIncr[][2] = {-5,10,.1}

for (i=0;i<numSliders;i++)
//option A
duplicate/o/r=[][i] minMaxIncr,limitsWv;redimension/n=(-1) limitsWv
slider \$("slider_"+num2str(i)) limits=limitsWv      //doesn't compile

//option B
slider \$("slider_"+num2str(i)) limits=minMaxIncr[][i]       //doesn't compile
endfor

end

I like this idea. In the meantime, why not use a general purpose function for both cases:

Function SetSliderLimits(sname,pname,wlimits)
string sname, name
wave wlimits

Slider \$sname, win=\$pname, limits={ ...}
return 0
end

This change might also lend itself to this:

make/N=(Nsliders)/FREE dummy
...
dummy = SetSliderLimits(("slider"+num2str[p]),"mypanel",minmaxInc[][p])

as a way to avoid the for-loop.