;
FUNCTION GREP, str, strarray, sensitive=sensitive, exact=exact, index=index,$
               exclude=exclude, start=start

   sz=size(str)
   dtype=sz(n_elements(sz)-2)
   sz=size(strarray)
   stype=sz(n_elements(sz)-2)

   IF (dtype ne 7) OR (stype ne 7) THEN BEGIN
      MESSAGE, 'Input parameter must be of string type.', /cont
      RETURN, ''
   ENDIF

   aa = strtrim(strarray,2)
   a = strtrim(str,2)
   start=KEYWORD_SET(start)
   exact=KEYWORD_SET(exact)

   IF NOT KEYWORD_SET(sensitive) THEN BEGIN
    aa = STRUPCASE(aa)
    a = STRUPCASE(a)
   ENDIF

   IF KEYWORD_SET(exclude) THEN BEGIN 
    IF exact THEN index = WHERE(aa NE a) ELSE $
     index = WHERE(STRPOS(aa, a) EQ -1)
   ENDIF ELSE BEGIN 
    IF exact THEN index = WHERE(aa EQ a) ELSE BEGIN
     IF start then index=WHERE(STRPOS(aa,a) eq 0) ELSE $
      index = WHERE(STRPOS(aa, a) NE -1)
    ENDELSE
   ENDELSE

;---------------------------------------------------------------------------
;        Make sure the returned values are of scalar type
;---------------------------------------------------------------------------

   IF index(0) GE 0 THEN BEGIN
    IF N_ELEMENTS(index) EQ 1 THEN BEGIN
     index = index(0)
     RETURN, (strarray(index))(0)
    ENDIF ELSE RETURN, strarray(index)
   ENDIF ELSE BEGIN
    index = -1
    RETURN, ''
   ENDELSE

   EN