function func,x,y,z,parameter=p ;on_error,2 ;common func_com,func_parameter ;ptype = size(p,/type) ;valid = (ptype eq 8 or ptype eq 7) ;if not valid then p=func_parameter ;if not keyword_set(x) then x=dgen() if ~keyword_set(p) then begin dprint,'No function or parameter defined' return,0 endif case n_params() of 0: f = (size(/type,p) eq 8) ? call_function(p.func,param=p) : call_function(p) 1: f = (size(/type,p) eq 8) ? call_function(p.func,x,param=p) : call_function(p,x) 2: f = (size(/type,p) eq 8) ? call_function(p.func,x,y,param=p) : call_function(p,x,y) 3: f = (size(/type,p) eq 8) ? call_function(p.func,x,y,z,param=p) : call_function(p,x,y,z) endcase ;if valid then func_parameter=p return,f end