	FUNCTION mkstrmap, curstr, nfn, idx=idx, str=str, $
	 	create = create, $
		append = append, insert = insert, replace = replace, $
		remove = remove, delimitor=delimitor
;	------------------------------------------------------------
;+							6-May-1991
;	Name:
;		MkstrMap
;	Purpose:
;		create, append, insert, replace, or remove variant 
;		string fields within sturtured identifiers.
;	CALLING SEQUENCE:
;		newStr = MkStrMap(curStr, nfn, [idx=idx, str=str,
;			create=create, append=append, insert=insert,
;			replace=replace, remove=remove, 
;			delimitor=delimitor])
;	Input:
;		curStr	input string to be modified.
;		nfn	number of items within curStr
;		idx	item number to be operated on
;		str	new item to be added
;		TYPE OF OPERATION:
;		create	the a new string
;		append	str to curStr
;		insert	str into curStr at item 'idx' 
;		replace item number 'idx' of curStr with str
;		remove	delete item 'idx' in curStr
;		delimitor is by default ",".
;	Returned:
;		curStr 	with the requested modification.
;
;	NOTE: The caller should increment 'nfn' if adding to the 
;	      number of items and decrement if removing items.
;	History:
;		test ver created 6-May-91 by GAL
;-
;	-----------------------------------------------------------
	Help, curstr, nfn, idx, str
	Help, create, append, insert, replace, remove, delimitor

;	Find delimitor positions:
	IF (Keyword_set(delimitor) le 1) THEN delimitor = ','
	delpos = intarr(nfn)
	delpos(0) = -1
	i = 0
	FOR j= 1, nfn-1 DO BEGIN
	  delpos(j) = STRPOS(curstr, delimitor, i)
	  i = delpos(j) + 1		;search again
	ENDFOR	

;	Check Keywords
	create = Keyword_set(create)
	append = Keyword_set(append)
	insert = Keyword_set(insert)
	replace= Keyword_set(replace)
	remove = Keyword_set(remove)
	CASE (1) OF 

	  (create):  BEGIN
			Print, '**** Creating new String Parameter **'
			curstr = str
		     END
	  (append):  BEGIN
			Print, '**** Appending to End of CurStr **'
			curstr = curstr +  delimitor + str
		     END
	  (insert):  BEGIN
			Print, '**** Inserting at position idx **',idx
			IF (idx ne nfn) THEN BEGIN
		          upper = STRLEN(curstr)-1
			  len2  = upper - delpos(idx)	;length str2
			  len1  = delpos(idx)
			  str1  = STRMID(curstr,0,len1)
			  str2  = STRMID(curstr, delpos(idx)+1, len2)
			  IF (idx GT 0) THEN BEGIN
			    curstr = str1 + delimitor + str + $
				delimitor + str2
			  ENDIF ELSE BEGIN	;idx = 0
			    curstr = str + delimitor + str2
			  ENDELSE
			ENDIF ELSE BEGIN	;idx = nfn (append)
			  curstr = curstr + delimitor + str 
			ENDELSE
		     END
	  (replace): BEGIN
			Print, '**** Replacing position idx **', idx
			IF (idx lt nfn) THEN BEGIN
			  IF (idx eq nfn -1) THEN BEGIN ;replace last
			    str2 = ''
			  ENDIF ELSE BEGIN
		            upper = STRLEN(curstr)-1
			    len2  = upper - delpos(idx+1)	;length str2
			    str2  = STRMID(curstr, delpos(idx+1)+1, len2)
			  ENDELSE
			  IF (idx eq 0)	THEN BEGIN
			    curstr = str + delimitor + str2	;append str2
			  ENDIF ELSE BEGIN 
			    len1  = delpos(idx)
			    str1  = STRMID(curstr,0,len1)
			    curstr = str1 + delimitor + str + delimitor + str2
			  ENDELSE
			ENDIF ELSE BEGIN	;= or > nfn
			  print, 'mkstrmap-- idx invalid for replace'
			ENDELSE
		     END
	  (remove):  BEGIN
			Print, '**** Removing position idx **', idx
			IF (idx lt nfn) THEN BEGIN	;valid index
			  IF (idx eq nfn-1) THEN BEGIN	;del last item
			    str2 = ''
			  ENDIF ELSE BEGIN		;define str2
		            upper = STRLEN(curstr)-1
			    len2  = upper - delpos(idx+1)	;length str2
			    str2  = STRMID(curstr, delpos(idx+1)+1, len2)
			  ENDELSE
			  IF (idx eq 0) THEN BEGIN	;del 1st item
			    curstr = str2
			  ENDIF ELSE BEGIN
			    len1  = delpos(idx)
			    str1  = STRMID(curstr,0,len1)
			    IF (str2 eq '') THEN BEGIN	;del last item
			      curstr = str1 
			    ENDIF ELSE BEGIN
			      curstr = str1 + delimitor + str2
			    ENDELSE
			  ENDELSE
			ENDIF ELSE BEGIN
			  Print, '**** invalid index value--idx: ',idx
			ENDELSE
		     END
	ENDCASE

	RETURN, curstr
	END
