Setup initial file structure
This commit is contained in:
106
Modules/ado/plus/s/shortdir.ado
Normal file
106
Modules/ado/plus/s/shortdir.ado
Normal file
@ -0,0 +1,106 @@
|
||||
*! usesasdel Version 2.0 dan.blanchette@duke.edu 16Mar2009
|
||||
*! Center of Entrepreneurship and Innovation Duke University's Fuqua School of Business
|
||||
** shortdir Version 2.0 dan_blanchette@unc.edu 17Jan2008
|
||||
** research computing, unc-ch
|
||||
* - added check that if forward slashes used as dir separators
|
||||
* then that is handled by converting them to back slashes
|
||||
* - uses Nick Cox's way of loading a text file line by line
|
||||
* into a local macro instead of reading it in as a dataset
|
||||
** shortdir Version 1.1 dan_blanchette@unc.edu 28Oct2004
|
||||
* - added test that directory actually exists
|
||||
** shortdir Version 1.0 dan_blanchette@unc.edu 09Oct2003
|
||||
** the carolina population center, unc-ch
|
||||
|
||||
program define shortdir, rclass
|
||||
version 8
|
||||
syntax using/ [, SHort ]
|
||||
|
||||
confirmdir "`using'"
|
||||
if _rc !=0 {
|
||||
di `"{error}The directory "`using'" does not exist."'
|
||||
exit _rc
|
||||
}
|
||||
|
||||
if "`c(os)'"=="Windows" {
|
||||
preserve
|
||||
local cwd "`c(pwd)'`macval(\\\)'"
|
||||
if "`using'"=="." {
|
||||
local using "`macval(cwd)'"
|
||||
}
|
||||
if "`using'"=="`cwd'" {
|
||||
quietly cd ..
|
||||
}
|
||||
// check if forward slashes used and replace them if so
|
||||
local subtest : subinstr local using `"/"' `""' , count(local cnt)
|
||||
if `cnt' != 0 {
|
||||
local using : subinstr local using "/" "\" , all
|
||||
}
|
||||
tokenize "`using'" , parse("\")
|
||||
local i=1
|
||||
while "``i''" !="" {
|
||||
if `i'==1 {
|
||||
local path "`1'"
|
||||
}
|
||||
else {
|
||||
if "`short'"=="short" { /* create macro that conditionally checks
|
||||
* for longer than 8 letter directory names */
|
||||
local gt8=(length("``i''")>8)
|
||||
local gt8="| `gt8'"
|
||||
}
|
||||
if index("``i''"," ") `gt8' { /* if sub dir name has space in name or maybe longer than 8 */
|
||||
tempfile temp
|
||||
_getfilename "`temp'"
|
||||
local tfilen "`r(filename)'"
|
||||
|
||||
local tfileh=substr("`tfilen'",1,index("`tfilen'",".")-1) /* create file handle */
|
||||
quietly {
|
||||
cd "`path'\"
|
||||
// options /x and /a create a short directory listing
|
||||
// so `temp' is a very small, short file
|
||||
! dir /x /a "``i''"* > "`temp'"
|
||||
tempname in
|
||||
file open `in' using `"`temp'"', r
|
||||
file read `in' line
|
||||
local dline ""
|
||||
local dir "<DIR>"
|
||||
while r(eof) == 0 {
|
||||
// local line: subinstr local line "`old'" "`new'"
|
||||
file read `in' line
|
||||
if `: list local(dir) in local(line) ' {
|
||||
local dline `"`line'"'
|
||||
}
|
||||
}
|
||||
local gotit = 0
|
||||
local shortname ""
|
||||
local n = 1
|
||||
while `gotit' == 0 {
|
||||
local shortname : word `n' of `dline'
|
||||
if `: list local(shortname) == local(dir) ' {
|
||||
// the shortname of the subdir is the next word after "<DIR>"
|
||||
local shortname : word `= `n' + 1' of `dline'
|
||||
local gotit = 1
|
||||
}
|
||||
local n = `n' + 1
|
||||
}
|
||||
}
|
||||
local sdir`i'=trim(substr(`"`shortname'"',1,10))
|
||||
} /* end of if directory has a space */
|
||||
else {
|
||||
local sdir`i' "``i''"
|
||||
}
|
||||
if "``i''"!="\" {
|
||||
local path "`macval(path)'\\`sdir`i''"
|
||||
}
|
||||
} /* if not the beginning of the path, like c: */
|
||||
local i=`i'+1
|
||||
} /* end of while loop */
|
||||
quietly cd "`macval(cwd)'\\\"
|
||||
local shortdir="`path'"+"\"
|
||||
return local shortdir `shortdir'
|
||||
} /* end of if windows */
|
||||
else {
|
||||
di "{error}shortdir only works in Windoze."
|
||||
exit
|
||||
}
|
||||
|
||||
end
|
Reference in New Issue
Block a user