*! version 1.0.0 26sep97 STB-41 ip23 program define ifexp version 5.0 local if "required" local options "noVARlabel noVALlabel noUNabbrev noSPace Color(str)" parse "`*'" parse "`if'", parse(" ><=&|!()") if "`color'" == "" {local color = "b"} /* set display color */ local color = lower(substr("`color'",1,1)) if index("wbgyr","`color'") == 0 {local color = "b"} if "`if'" != "" { local ifst " if " /* handle leading "if " */ local lif = 5 macro shift if "`space'" != "nospace" { /* set up space */ local sp " " local sp1 = 1 } else { local sp1 = 0 } di while "`1'" != "" { /* start main loop on tokens */ capture confirm variable `1' /* var name ? */ local rc _rc local m = 0 local n = length("`1'") if `n' + `lif' > 78 { /* no room for token ? */ di in `color' "`ifst'" local ifst "> " local lif = 5 local n = 0 } /* is punctuation */ if "`1'" == "==" { local ifst "`ifst'`1'`sp'" } else if "`1'" == "<=" { local ifst "`ifst'`1'`sp'" } else if "`1'" == ">=" { local ifst "`ifst'`1'`sp'" } else if "`1'" == "!=" { local ifst "`ifst'`1'`sp'" } else if "`1'" == "<" { local ifst "`ifst'`1'`sp'" } else if "`1'" == ">" { local ifst "`ifst'`1'`sp'" } else if "`1'" == "=" { local ifst "`ifst'`1'`sp'" } else if "`1'" == "&" { local ifst "`ifst'`1'`sp'" } else if "`1'" == "|" { local ifst "`ifst'`1'`sp'" } else if "`1'" == "!" { local ifst "`ifst'`1'`sp'" } else if "`1'" == "(" { local ifst "`ifst'`1'`sp'" } else if "`1'" == ")" { local ifst "`ifst'`1'`sp'" } else if `rc' == 0 { /* is a variable name */ local tif "`1'" if "`unabbrev'" != "nounabbrev" { /* allow unabbrev */ unabbrev `1' local tif "$S_1" } if "`varlabel'" != "novarlabel" { /* allow var label ? */ local vrl : variable label `1' *di "`vrl'" if "`vrl'" != "" { local tif "`vrl'" } /* var label ? */ } local m = length("`tif'") /* no room for token ? */ if `m' + `lif' > 78 { di in `color' "`ifst'" local ifst "> " local lif = 5 local m = 0 } local ifst "`ifst'`tif'`sp'" local vll : value label `1' } else { /* is a value */ local tif "`1'" /* allow value label ? */ if "`vll'" != "" & "`vallabel'" != "novallabel" { local lv : label `vll' `1' if "`lv'" != "" { local tif "`lv'" } /* value label ? */ } local m = length("`tif'") /* no room for token ? */ if `m' + `lif' > 78 { di in `color' "`ifst'" local ifst "> " local lif = 5 local m = 0 } local ifst "`ifst'`tif'`sp'" } /* set new line length */ if `m' > 0 { local lif = `lif' + `m' + `sp1' } else { local lif = `lif' + `n' + `sp1' } macro shift /* next token */ } /* end main loop on tokens */ di in `color' "`ifst'" /* display expanded if */ exit end