*capture program drop savegz
*! version 0.3.0 25sep2019
program define savegz
	version 11
  
  	// check for 7-Zip
	capture macro list gziputil_path_7z
	if _rc != 0 {
		check7z
		if !r(sevenz_available) {
			display as error "7-Zip was not found in within PATH!"
			display as error "Please check if it is installed and add the respective path to the PATH environment variable."
			exit
		}
	}
	
	syntax [anything] [, Nolabel replace all orphans emptyok]	
	
	local file = subinstr(`""`anything'""', `"""', "", .)
	
	// with allowed (dta.gz) file extension
	if (regexm("`file'", "\.dta.gz$")) {
		local dta_gz_file = "`file'"
	}
	// with file extension other than dta.gz
	else {
		local dta_gz_file = "`file'.dta.gz"
	}
		
	capture confirm file "`dta_gz_file'"
	if _rc == 0 {
		if ("`replace'" == "") {
			display as error `"file `dta_gz_file' already exists"'
			exit 602
		} 
		else {
			rm "`dta_gz_file'"
		}
	}
	
	tempfile temp_dta
	mkdir `temp_dta'
	local basename_temp_dta = ustrregexra("`temp_dta'", "^.+\\", "")
	local bare_name = ustrregexra("`file'", "(.*\\|\.dta\.gz$)", "")
	
	quietly save "`temp_dta'\\`bare_name'.dta", `nolabel' `all' `orphans' `emptyok'	
	
	if c(os) == "Windows" {
		local orig_shell = "${S_SHELL}"
		
		global S_SHELL "powershell.exe -WindowStyle Hidden -noninteractive"
		shell ${gziputil_path_7z} a '`dta_gz_file'' '`temp_dta'\\`bare_name'.dta'
		// | Out-File -FilePath 'C:\Users\s1504gl\Desktop\log.txt' -Force
		global S_SHELL "`orig_shell'"
	}
	else {
		shell 7z a "`dta_gz_file'" "`temp_dta'\\`bare_name'.dta"
	}
		
	
	rm "`temp_dta'\\`bare_name'.dta"
	rmdir "`temp_dta'"
end