*! version 1.0.0 10/11/93 STB-16: dm15 program define br2 version 3.1 local varlist "opt ex" local if "opt" local in "opt" local options "NOLabel NOObs" parse "`*'" global F1 "?;" global F2 "a;" global F3 "l;" global F4 "r;" global F5 "uh;" global F6 "dh;" global F7 "u;" global F8 "d;" global F10 "R;" tempvar holdw cvlhold hold1 hold2 fmt where tempvar from to pgsize maxw touse use range mark `touse' `if' `in' gen `use'=sum(`touse') local from 1 local to = `use'[_N] set more 1 if "$S_BLIST"=="" { local pgsize 19 } else { local pgsize $S_BLIST } local holdw 0 local maxw 55 local cvlhold "" local hold1 0 local hold2 0 local where 0 local range = `to' - `from' preserve tempvar i cmd lastcmd wfrom wto parse "`varlist'", parse(" ") local wfrom = `from' - `pgsize' if (`range')<`pgsize' { local wto = `to' - `pgsize' } else { local wto = `wfrom' + `pgsize' - 1 } local cmd "a" local lastcmd "f" tempvar cvf cvt cvp cvn cw cvl cvr local cvp 0 local cvf 1 local cvn 2 tempvar size0 local size0 0 local i 1 display in gr "(determining variable widths...)" display "" while "``i''"!="" { tempvar size`i' browsew "``i''" local size`i'=max(8,$S_BSIZE) local i = `i'+1 } tempvar size`i' local size`i' 0 local cw `size1' while ("``cvn''"!="")&((`cw'+`size`cvn'')<`maxw') { local cw = `cw' + `size`cvn'' local cvn = `cvn' + 1 } local cvt = `cvn' - 1 tempvar k while "`cmd'"!="q" { tempvar lhs if "`cmd'"=="a" { local cmd "`lastcmd'" } local lhs = substr("`cmd'",1,1) if "`lhs'"=="d" | "`lhs'"=="" { local lhs "f" } else if "`lhs'"=="u" { local lhs "b" } if length("`cmd'")>1 { tempvar rhs local rhs = substr("`cmd'",2,.) if "`lhs'"=="h" { local hold1 : word 3 of `rhs' if "`hold1'"!="" { di "" di in red "only 2 arguments are allowed" di "" local lhs "error" } else { local hold1 : word 1 of `rhs' capture confirm var `hold1' if _rc!=0 { di "" di in red "`hold1' is not a variable" di "" local lhs "error" } else { local holdw 0 local hold2 0 local i 1 while "``i''"!="" { if substr("``i''",1,length("`hold1'")) /* */ =="`hold1'" { local holdw `size`i'' local hold1 `i' if `hold1'>=`cvf'&`hold1'<=`cvt' { local cw = `cw'-`holdw' } } else { local i = `i'+1 } } local cvlhold "``hold1''" local hold2 : word 2 of `rhs' if "`hold2'"!="" { capture confirm var `hold2' if _rc!=0 { di "" di in red "`hold2' is not a variable" di "" local lhs "error" } else { local i 1 while "``i''"!="" { if substr("``i''",1,length("`hold2'")) /* */ =="`hold2'" { local holdw = `holdw'+`size`i'' local hold2 `i' if `hold2'>=`cvf'&`hold2'<=`cvt' { local cw = `cw'-`size`i'' } } else { local i = `i'+1 } } local cvlhold "``hold1'' ``hold2''" } } else { local hold2 0 } } local maxw=55-`holdw' while `cw'>`maxw'&`cvt'>`cvf' { if `hold1'!=`cvt'&`hold2'!=`cvt' { local cw = `cw' - `size`cvt'' } local cvt = `cvt' - 1 } local cvn = `cvt' + 1 } local rhs `pgsize' if "`lhs'"!="error" { local lhs "p" } } else if ("`lhs'"=="f"|"`lhs'"=="b")&("`rhs'"=="h") { local rhs = int(`pgsize'/2) } else { local rhs = real("`rhs'") } if `rhs'==. { local lhs "error" } local cmd "`lhs'" } else { local cmd "`lhs'" if "`cmd'"=="f"|"`cmd'"=="b"|"`cmd'"=="p" { local rhs `pgsize' } else if "`cmd'"=="r"|"`cmd'"=="l" { local rhs 1 } else if "`cmd'"=="h" { local holdw 0 if `hold1'>=`cvf'&`hold1'<=`cvt' { local cw=`cw'+`size`hold1'' } if `hold2'>=`cvf'&`hold2'<=`cvt' { local cw=`cw'+`size`hold2'' } local hold1 0 local hold2 0 local cvlhold "" local maxw 55 while `cw'+`size`cvp''<=`maxw'&`cvf'>1 { local cw = `cw'+`size`cvp'' local cvf=`cvf'-1 local cvp=`cvp'-1 } while `cw'+`size`cvn''<=`maxw'&"``cvn''"!="" { local cw = `cw'+`size`cvn'' local cvt=`cvt'+1 local cvn=`cvn'+1 } } else if "`cmd'"=="R" { local cmd "p" local rhs `pgsize' } } if "`cmd'"=="p" { local pgsize `rhs' global S_BLIST `pgsize' local lastcmd "`cmd'`rhs'" local cmd "f" local rhs 0 } else if "`cmd'"=="?" { local Di "di _col(6) in gr" di `Di' "F-Key Command Function" `Di' _dup(60) "-" `Di' " F1 " in wh "?" in gr " this help screen" `Di' " F2 " in wh "a" in gr " again: repeat last command" `Di' " F3 " in wh "l" in gr " move left 1 variable" `Di' " F4 " in wh "r" in gr " move right 1 variable" `Di' " " in wh "l" in gr "# move left # variables" `Di' " " in wh "r" in gr "# move right # variables" `Di' " F7 " in wh "u" in gr " move up 1 page (" in wh "b" in gr " synonym)" `Di' " F8 " in wh "d" in gr " move down 1 page (" in wh "f" in gr " or Return synonyms)" `Di' " F5 " in wh "uh" in gr " move up 1 half page" `Di' " F6 " in wh "dh" in gr " move down 1 half page" `Di' " " in wh "u" in gr "# move up # lines" `Di' " " in wh "d" in gr "# move down # lines" `Di' " F10 " in wh "R" in gr " redisplay current page" `Di' " " in wh "h" in gr " vn hold vn (varname) at left of screen" `Di' " " in wh "h" in gr " vn vn hold 2 variables at left of screen" `Di' " " in wh "h" in gr " release all hold variables" `Di' " " in wh "p" in gr "# reset page size to # lines" `Di' " " in wh "q" in gr " quit" local lastcmd "?" } if "`cmd'"=="f" { if (`wfrom'+`rhs')<=`to'-`pgsize' { local wfrom = `wfrom' + `rhs' } else { local wfrom = `to'-`pgsize'+1 } if (`wto'+`rhs')<=`to' { local wto = `wfrom' + `pgsize' - 1 } else { local wto `to' } if `wto'>`to' { local wto `to' } if `wfrom'<`from' { local wfrom `from' } local lastcmd "`cmd'`rhs'" } else if "`cmd'"=="b" { if (`wfrom'-`rhs') >=`from' { local wfrom = `wfrom' - `rhs' } else { local wfrom `from' } if (`wfrom'+`pgsize'-1)>`to' { local wto `to' } else { local wto = `wfrom'+`pgsize'-1 } local lastcmd "`cmd'`rhs'" } else if "`cmd'"=="r" { local k = 1 while `k'<=`rhs' { if "``hold1''"!="" & `cvn'==`hold1' { local cvn=`cvn'+1 } if "``hold2''"!="" & `cvn'==`hold2' { local cvn=`cvn'+1 } while ("``cvn''"!="") & (`cvf'<=`cvt') & /* */ (`cw'+`size`cvn''>`maxw') { if `hold1'!=`cvf' & `hold2'!=`cvf' { local cw = `cw'-`size`cvf'' } local cvf = `cvf' + 1 local cvp = `cvp' + 1 } if "``cvn''"!="" { local cw=`cw'+`size`cvn'' local cvn=`cvn'+1 local k = `k' + 1 } else { local k = `rhs' + 1 } local cvt = `cvn'-1 } local lastcmd "`cmd'`rhs'" } else if "`cmd'"=="l" { local k 1 while `k'<=`rhs' { if "``hold1''"!="" & `cvp'==`hold1' { local cvp=`cvp'-1 } if "``hold2''"!="" & `cvp'==`hold2' { local cvp=`cvp'-1 } while ("``cvp''"!="")&(`cvt'>=`cvf') & /* */ (`cw'+`size`cvp''>`maxw') { if `hold1'!=`cvt' & `hold2'!=`cvt' { local cw = `cw' - `size`cvt'' } local cvt = `cvt' - 1 local cvn = `cvn' - 1 } if `cvp'>0 { local cw=`cw' + `size`cvp'' local cvp=`cvp'-1 local k = `k'+1 } else { local k = `rhs'+1 } local cvf = `cvp'+1 } local lastcmd "`cmd'`rhs'" } if "`cmd'"!="error"&"`cmd'"!="?" { tempvar j local j `cvf' local cw 0 local cvl "`cvlhold'" while `j'<=`cvt' { if `hold1'!=`j'&`hold2'!=`j' { local cvl = "`cvl' ``j''" local cw = `cw'+`size`j'' } local j = `j' + 1 } local myif = "if `touse'&`use'>=`wfrom'&`use'<=`wto'" list `cvl' `myif', `nolabel' `noobs' } di "" if "`lhs'"=="error" { di in red "Please enter a valid command" } di "" di in gr "browse (? for help): ", _request(_cmd) } restore end