	FUNCTION GetLev, key, level, ipos = ipos, ilev = ilev

	help, key, level, ipos, ilev

	len = strlen(key)
	
	keys = str2arr(key, delimit= ' ')
        lbrack = WHERE(keys eq '[')
        nbr = n_elements(lbrack)

	IF (KEYWORD_SET(ipos) ) THEN BEGIN
	  pos = ipos
	ENDIF ELSE BEGIN
	  pos = 0
	ENDELSE

	IF (KEYWORD_SET(ilev) ) THEN BEGIN
	  lev = ilev
	ENDIF ELSE BEGIN
	  lev = 0 
	ENDELSE

	  a = strpos(key, '[', pos)
;	  PRINT,' a value = ',a
	  lev = lev + 1			;increment level

;	  check for last '['
	  ck = strpos(key, '[', a+1)
	  IF (ck ne -1) THEN BEGIN	;not at last [

	    a2 = strpos(key, '[', a+1)
	    b  = strpos(key, ']', a+1)
	    IF (a2 lt b) THEN BEGIN	;down another level
	      IF (lev eq level) THEN BEGIN
		saveA = a +1	;save start
		nextb = strpos(key, ']', b+1)	;next close
		nl = nchar(strmid(key,saveA, nextb -(saveA+1) ),'[')
		nr = nchar(strmid(key,saveA, nextb -(saveA+1) ),']')
		IF (nl eq nr) THEN BEGIN
;		  print,strmid(key, saveA, nextb - (saveA+1) )
		  IF ( N_ELEMENTS(ret) ne 0 ) THEN BEGIN
		    r = strmid(key, saveA, nextb - (saveA+1) )
		    ret = [ret, r]
		  ENDIF ELSE BEGIN
		    ret = strmid(key, saveA, nextb - (saveA+1) )
		  ENDELSE  
		ENDIF ELSE BEGIN	;NOT EQUAL
		  inc = nl - nr
		  inextb = nextb + 1
		  FOR j =0, inc-1 DO BEGIN	;move n ]'s 
		    nextb = strpos(key, ']', inextb)
		    inextb = nextb + 1
		  ENDFOR
;		  print,strmid(key, saveA, nextb - (saveA+1) )
		  IF ( N_ELEMENTS(ret) ne 0 ) THEN BEGIN
		    r = strmid(key, saveA, nextb - (saveA+1) )
		    ret = [ret, r]
		  ENDIF ELSE BEGIN
		    ret = strmid(key, saveA, nextb - (saveA+1) )
		  ENDELSE  
		ENDELSE
	      ENDIF ELSE BEGIN		;look deeper
;		print, 'ready to sea down another level:'
		IF ( N_ELEMENTS(ret) ne 0 ) THEN BEGIN
	          r = getlev( key, level, ipos=a+1, ilev = lev )
		  ret = [ret, r]
		ENDIF ELSE BEGIN
	          ret = getlev( key, level, ipos=a+1, ilev = lev )
		ENDELSE		  
	      ENDELSE
	    ENDIF ELSE BEGIN		;found ] before [
	      IF (lev eq level) THEN BEGIN
		saveA = a + 1
		saveB = b-1		;save end
;		print,strmid(key, saveA, saveB-saveA )	;print req str
		IF ( N_ELEMENTS(ret) ne 0 ) THEN BEGIN	;ret is already define
		  r = strmid(key, saveA, saveB-saveA )
		  ret = [ret, r]
		ENDIF ELSE BEGIN
		  ret = strmid(key, saveA, saveB-saveA )
		ENDELSE
	      ENDIF
	      lev = lev - 1
;	      print, 'jump back one level and ready to call again:'
	      IF ( N_ELEMENTS(ret) ne 0 ) THEN BEGIN
	      	r = getlev( key, level, ipos= b+1, ilev = lev )	;cont
		ret = [ret, r]
	      ENDIF ELSE BEGIN
		ret = getlev( key, level, ipos= b+1, ilev = lev )	;cont
	      ENDELSE
	    ENDELSE
	  ENDIF ELSE BEGIN		;last '[' 
	    IF (lev eq level) THEN BEGIN
;		print,'all done or should be'
	      saveA = a + 1
	      b  = strpos(key, ']', a+1)
;	      print,strmid(key, saveA, b-saveA )
	      IF ( N_ELEMENTS(ret) ne 0 ) THEN BEGIN	;ret is already define
		r = strmid(key, saveA, b-saveA )
		ret = [ret, r]
	      ENDIF ELSE BEGIN
	        ret = strmid(key, saveA, b-saveA )
	      ENDELSE
	    ENDIF 
	
	  ENDELSE	      

	RETURN, ret
	END
