Viewing contents of file '../idllib/contrib/tappin/graffer/grf_tlv_get.pro'
function Grf_tlv_get, vn, n_var

;+
; GRF_TLV_GET
;	Get a variable from the top level.
;
; Usage:
;	var = grf_tlv_get(vn, n_var)
;
; Return value:
;	var	any	The value or array of values returned from the
;			top level.
;
; Arguments:
;	VN	string	input	the variable name to get including
;				possible slice information 
; 	N_VAR 	int	output	the number of elements returned.
;
; Method:
;	Uses the undocumented ROUTINE_NAMES intrinsic function to get
;	the requested variable.
;
; History:
;	Original: 21/9/95; SJT
;	Moved to its own file to allow use in multiple input routines:
;	6/12/96; SJT
;-

bp = strpos(vn, '(')
if (bp ge 0) then begin
    var = strupcase(strmid(vn, 0, bp))
    slice = strmid(vn, bp, strlen(vn))
endif else var = strupcase(vn)

vbls = routine_names(variables = 1) ; Get all top-level variables.

locs = where(vbls eq var, nv)   ; Check that requested variable exists
if (nv eq 0) then begin
    n_var = 0
    return, -1l
endif

v = routine_names(var, fetch = 1) ; Retrieve the variable
sv = size(v)
if (sv(sv(0)+1) eq 0 or sv(sv(0)+1) ge 7) then begin ; Non-numeric
    n_var = 0
    return, -1l
endif

v1 = 0

if (n_elements(slice) gt 0) then begin
    r = execute('v1 = v'+slice)
    if (r ne 1) then begin
        n_var = 0
        return, -1l
    endif
endif else v1 = v

n_var = n_elements(v1)
return, v1

end