`` Directory To Xml converter - Version 1.1 - (c) 2004 scriptol.com
`` Licence: OSS BSD
`` Requirement: The free Scriptol to C++ compiler.
`` Reads a directory, builds an xml document or a web page,
`` elements are sub-directories and files,
`` attributes are names, lengths and dates...
`` Example of use is to build a directory of all your CDs...
include "path.sol"
include "dirlist.sol"
include "libdom.sol"
dom disktree
boolean BULLETS = false
int buildtree(text dirname, text fname, int total)
DirList dl
int files, dirs
text sizestr
xelement element
text fullname
boolean flag
int si
text da
boolean flag2 = false
dl.open(dirname) ` open the directory
dl.begin() ` move the pointer to the first entry
flag = true
do
fname = dl.next() ` the name of an entry
if fname = nil ? break
if fname in (".", "..") ? continue ` ignore these
if fname[0] = '.' ? continue ` ignore under unix
fullname = Path.merge(dirname, fname)
if Path.type(fullname)
= "dir" : ` a subdirectory
dirs + 1
element = xelement("dir")
if flag
disktree.addChild(element)
flag = false
else
disktree.addNext(element)
/if
si = buildtree(fullname, fname, 0)
element.addAttribute("name", fname)
element.addAttribute("size", text(si))
total + si
flag2 = true
= "file" : ` a file
si = Path.size(fullname)
da = Path.created(fullname)
files + 1
total + si ` add size to total
element = xelement("file")
element.addAttribute("name", fname)
element.addAttribute("size", text(si))
element.addAttribute("date", text(da))
if flag
disktree.addChild(element)
flag = false
else
disktree.addNext(element)
/if
flag2 = true
/if
/do forever
dl.close()
if flag2 let disktree.up()
return total
dom dirtoxml(text root, text dirname)
dict d
disktree = dom()
int total
text dname, fname
xelement xe = xelement("dir")
if not Path.exists(dirname)
print dirname, "not found"
exit()
/if
dname, fname = Path.splitFile(dirname)
if Path.type(dirname) <> "dir" ? die(dirname + " not a directory")
disktree.addHeader("");
disktree.addChild(xe)
xe.addAttribute("name", dirname)
total = buildtree(dirname, fname, 0)
xe.addAttribute("size", text(total))
disktree.up()
print "Total size", total
return disktree
dom htmlDom
array page
void htmlsub(int nextElement)
int childElement
text elementName
text filename
while forever
htmlDom.setIndex(nextElement)
childElement = htmlDom.getChild()
nextElement = htmlDom.getNext()
if htmlDom.isElement()
elementName = htmlDom.getElementName()
filename = htmlDom.getValue("name")
//print filename
if (childElement > 0) or (elementName = "dir")
page.push("[")
page.push(filename)
page.push("]
\n