*! 1.0.0 NJC 12 July 2000
program define _gnss
	version 6.0

	gettoken type 0 : 0
	gettoken g    0 : 0
	gettoken eqs  0 : 0

	syntax varname(string) [if] [in], Find(str) [ Insensitive ]

	marksample touse, strok
	tempvar lower ndx rmndr

	quietly {
		/* ignores type passed from -egen- */
		gen byte `g' = 0 if `touse'
		local flen = length(`"`find'"')
		local type : type `varlist'

		if "`insensitive'" != "" {
			gen `type' `lower' = lower(`varlist')
			local varlist `lower'
			local find = lower(`"`find'"')
			local flen2 = length(`"`find'"')
			local dflen = `flen' - `flen2'
			if `dflen' {
				local spaces : di _dup(`dflen') " "
				local find `"`spaces'`find'"'
			}
		}

	        gen byte `ndx' = index(`varlist', `"`find'"') * `touse'
		count if `ndx'
        	if r(N) == 0 { exit 0 }

		gen `type' `rmndr' = `varlist' if `touse'

	        while 1 {
			replace `g' = `g' + (`ndx' > 0)
                	replace `rmndr' = /*
			*/ cond(`ndx', substr(`rmndr', `ndx'+`flen', .),"")
                        cap assert `rmndr' == ""
	                if _rc != 0 {
				replace `ndx' = index(`rmndr', `"`find'"')
			}
	                else exit 0
        	}
	}
end