*! version 1.0.1 24apr1996 program define varset /* Syntax: varset key varname [sets key to varname] varset key [displays key] varset key, clear [clears key] varset [displays all set keys] varset, clear [clears all set keys] */ version 4.0 var_key local keylist "$S_1" parse "`*'", parse(" ,") if "`1'"=="" | ("`1'"=="," & "`2'"=="") { disp_key `keylist' exit } if "`1'"=="," { if "`2'"=="clear" & "`3'"=="" { clr_key `keylist' exit } error 198 } local key "`1'" macro shift chk_key `key' `keylist' if "`1'"=="" { disp_key `key' exit } if "`1'"=="," { if "`2'"=="clear" & "`3'"=="" { clr_key `key' exit } error 198 } local varlist "req ex max(1)" local options "CLEAR" parse "`*'" if "`clear'"!="" { clr_key `key' exit } local muststr : word $S_1 of $S_2 capture confirm string variable `varlist' if _rc==0 & `muststr' { di in red "`key' may not be a string variable" exit 109 } char _dta[`key'] `varlist' end program define disp_key /* display set key(s) */ version 4.0 local i 1 while "``i''"!="" { local varname : char _dta[``i''] if "`varname'"!="" { local someset 1 di in gr "``i'' is `varname'" } local i = `i' + 1 } if "`someset'"!="" { exit } if `i' == 2 { di in gr "``1'' has not been set" } di in gr "no variables have been set" end program define clr_key /* clear key(s) */ version 4.0 local i 1 while "``i''"!="" { char _dta[``i''] local i = `i' + 1 } end program define chk_key /* checks syntax of key */ version 4.0 local key "`1'" local i 2 while "``i''"!="" { if "`key'"=="``i''" { global S_1 = `i' - 1 exit } local i = `i' + 1 } di in red "keyword incorrect" error 198 end