pro create_param, str, nam, fam, typ, val, numval, min, max, opt

new = 0

; check that str has been defined.  If not, define it.
if (size(str))(2) ne 8 then new = 1 else $
   if tag_names(str, /structure_name) ne 'PARAM_STRUCTURE3' then new = 1
maxval =  since_version('5.1')? 200 : 60
if new then $
   str =    {param_structure3, $
        nam:'', $   ; parameter name
        fam:'', $   ; family that parameter belongs to
        typ:'', $   ; variable type (fix,long,float,double,string)
        val:strarr(maxval), $ ; current value of parameter
                numval: 0L, $    ; number of values to use from val tag
        min:0.d0, $ ; minimum value allowed for parameter
        max:0.d0, $ ; maximum value allowed for parameter
        opt:strarr(maxval)} ; choices for string parameters

nopt = n_elements(opt)
opt20 = [opt,strarr(maxval-nopt)]
nval = n_elements(val)
val20 = [val,strarr(maxval-nval)]
new_param = {param_structure3, nam, fam, typ, val20, numval*1L, $
             min*1.d0, max*1.d0, opt20}

if new then str = new_param else str = [str, new_param]

return&end