*! Dan Blanchette 1.1 dan.blanchette@duke.edu 08Feb2005
*! Center of Entrepreneurship and Innovation Duke University's Fuqua School of Business
** research computing, unc-ch
* Stata fixed Linux problem of not being able to edit a file in a directory starting with "~"
* Added "Caution" note when requesting to edit a Stata ado file.
** Dan Blanchette 1.0.3 06 Nov 2003 made it work in Linux
*! NJC 1.0.2 31 Dec 2002
** CFB 1.0.1 26Dec2002 cloned from adotype
* NJC 1.2.1 1 December 1999
** NJC 1.2.2 6 December 1999
* NJC 1.2.3 14 December 1999
** AJM 1.3 5 August 2009   (Eliminated file size check for versions 11 and greater.)

program def adoedit, rclass
        version 8.0


	if "`1'" == "" | "`2'" != "" {
		di as err "incorrect syntax"
		exit 198
	}
	args cmd

	 /* ends with .ado */
	if substr(`"`cmd'"',length(`"`cmd'"')-3,length(`"`cmd'"'))==".ado"  {
		local filen `"`cmd'"'
	}
	else {
           	local filen `"`cmd'.ado"'
	}

	findfile `filen'

	// here will exit 601 if `cmd' not found

	local file `"`r(fn)'"'

        local tfile : subinstr local file "\" "/" , all

        if index(`"`tfile'"',"/ado/base")  |  index(`"`tfile'"',"/ado/updates")  {
          di " "
          di as err "Caution, you are requesting to edit an ado file provided by Stata."
          di as err "If this is really what you want, consider first copying the file to {input}`: sysdir PERSONAL' {error}."
          di " "
          more
          di " "
        }

	capture hexdump `"`file'"', analyze
	local size = r(filesize)

	* Eliminates file size check for versions 11 and greater.
	if c(stata_version) < 11 {

		if `size' < 32000 & `size' > 0 {
			doedit `"`file'"'
			discard
		return local adofile `"`file'"'
		exit 0
			}
		else {
				di as txt _n "Sorry, files larger than 32,000 bytes cannot be do-edited."
					di as txt "You must use another text editor for this file."
					error 603
		}
	}

	else if c(stata_version) >= 11 {
			doedit `"`file'"'
			discard
		return local adofile `"`file'"'
		exit 0
		}

end