ID:195078
 
// Title: Directory Traversal
// Credit to: Audeuro
// Contributed by: Audeuro

/*
This is a simple datum to go through directories in the
filesystem. I wrote it when I was working on my character
handling lib, when I wanted to write something simple to
delete a directory when it's contents were empty, so I wrote
this to make it easier.
*/



proc/Split(String, Delimiter = ",")
if(!String || !Delimiter || !findtext(String,Delimiter)) return
. = new/list
var
Last = 1
Delim = findtext(String, Delimiter, Last)
while( 1 )
. += copytext( String, Last, Delim )
Last = Delim + length(Delimiter)
Delim = findtext(String,Delimiter,Last)
if(!Delim)
var/What = copytext(String,Last)
if(What) . += What
break

proc/CutAllSpace(T)
if( T && istext(T) )
for( var/i = 0; i <= length(T); i++ )
if( text2ascii(copytext(T,i,i+1) ) > 32 )
. += copytext( T, i, i + 1 )
else
. = T

Dir
var
Dir
New( D )
if( istext( D ))
if( !D ) D = "/"
Dir = D
..()
proc
SetPath(D)
if(copytext(Dir, length(Dir)) != "/") Dir += "/"
Dir = D
GotoDirectory(D)
if(copytext(D, length(D)) != "/") return
var/list/L = ChildDirectories()
if(L && L.len)
if(D in L)
if(copytext(Dir, length(Dir)) != "/") Dir += "/"
Dir += "[D]"
DirectoryName()
var/list/L = Split(Dir, "/")
return L[L.len]
ParentDirectory()
if( ckey(Dir) )
if( findtext( Dir, "/" ) )
var/list/L = Split( Dir, "/" )
var/newdir
if( L.len >= 2 )
for( var/i = 1; i < L.len; i++ )
newdir += L[i]
if( i < L.len - 1 )
newdir += "/"
else
newdir += L[1]
return new/Dir(newdir)
return new/Dir("")
ChildDirectories()
if( ckey(Dir) )
if(copytext(Dir, length(Dir)) != "/") Dir += "/"
return flist(Dir)