`` 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