`` Directory To RDF converter - Version 1.0 - (c) 2006 xul.fr
`` Licence: Mozilla 1.1
`` Requirement: The Scriptol compiler (solc.exe).
include "path.sol"
include "dirlist.sol"
include "libdom.sol"
dom disktree
array extensions = { ".sol", ".exe", ".txt", ".rdf", ".xul", ".xml" , ".ini"}
/**
* Build tree
* Build a tree of the directory, sub-directories and files.
*/
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
text ext = Path.getExtension(fullname)
if ext not in extensions continue
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
/**
* Dir To XML
* Create an XML document,
* fill it with the tree generated by buildTree()
*/
dom dir2xml(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 rdfDom
array page
/**
* RDF Structure
* create the structure part of the RDF document
* fill it with a tree of dirs
*/
void rdfStructure(text level, int nextElement)
int childElement
text elementName
text filename
text localpath
while forever
rdfDom.setIndex(nextElement)
childElement = rdfDom.getChild()
nextElement = rdfDom.getNext()
if rdfDom.isElement()
elementName = rdfDom.getElementName()
filename = rdfDom.getValue("name")
//print filename
if (childElement > 0) or (elementName = "dir")
page.push(filename)
page.push("\n")
if childElement > 0
localpath = level + "/" + filename
rdfStructure(localpath, childElement)
/if
page.push("\n")
page.push("\n")
else
page.push("\n")
page.push("\n")
/if
/if
if nextElement = 0 break
/while
return
/**
* RDF Descriptions
* Create the description part
* of the RDF document.
* Fill it with the tree of dirs.
*/
void rdfDescriptions(text level, int nextElement)
int childElement
text elementName
text filename
text filesize
text localpath
while forever
rdfDom.setIndex(nextElement)
childElement = rdfDom.getChild()
nextElement = rdfDom.getNext()
if rdfDom.isElement()
elementName = rdfDom.getElementName()
filename = rdfDom.getValue("name")
localpath = level + "/" + filename
//print filename
if (childElement > 0) or (elementName = "dir")
page.push("\n")
page.push("" + filename + "\n")
page.push("" + filesize + "\n")
page.push("\n")
/if
/if
if nextElement = 0 break
/while
return
/**
* XML to RDF
* Convert an XML document to RDF.
* Actually the XML doc is loaded into a tree in memory
* and it is a tree of dirs and files.
*/
void xml2Rdf(dom d)
text line
xelement xe
rdfDom = d
page.push("")
page.push(~~
~~)
`adding the root directory
page.push(~~
~~)
`recursively build sequences from directories and files
rdfStructure("", 1) // build structure
`recusively build descriptions
rdfDescriptions("", 1) // add descriptions
page.push("") `closing root
page.push("") `closing document
return
void usage()
print
print "Directory To RDF 1.0 - (c) 2006 xul.fr"
print "Syntax:"
print" dir2rdf dirname filename.rdf"
print "- 'dirname' is the directory to display, . for current"
print " Root directory has the form c: (windows) or / (unix)"
print "- 'filename.rdf' is the RDF file to generate."
exit(0)
return
int main(int argc, array argv)
text dirname
dirname = argv[1]
if (dirname = "-html") or (dirname = "--html")
argv.shift()
dirname = argv[1]
/if
if argc < 3
usage()
/if
text rdfname = argv[2]
print "Building a RDF document from", dirname
page = {}
dir2xml("root", dirname)
text xmlname = Path.changeExt(rdfname, "xml")
disktree.save(xmlname)
print xmlname, "generated..."
xml2Rdf(disktree)
//page.display()
file x = fopen(rdfname, "w")
scan page
x.write(page[])
/scan
x.close()
print rdfname, "generated..."
return 0