function splfunc, xs,ys, param=p,xlog=xlog,ylog=ylog,lininterp=lininterp,set=set
common splfunc_com,param
xl = keyword_set(xlog)
yl = keyword_set(ylog)
li = keyword_set(lininterp)
if size(/type,p) eq 8 then param=p
if not keyword_set(param) or keyword_set(set) then begin
w = where(finite(xs) and finite(ys))
xps = float(xl ? alog10(xs[w]) : xs[w])
yps = double(yl ? alog10(ys[w]) : ys[w])
s = sort(xps)
xps=xps[s]
yps=yps[s]
param = {func:'splfunc', x: xps, y: yps, xlog:xl, ylog:yl, li:li}
endif
p = param
if keyword_set(set) then return,p
if p.li then f= interp(p.y,p.x,p.xlog ? alog10(xs) : xs) else begin
ys2 = spl_init(p.x,p.y)
f = spl_interp(p.x,p.y,ys2,p.xlog ? alog10(xs) : xs)
endelse
return, p.ylog ? 10.^f : f
end