Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.file.filteredCopy
on filteredCopy (sourcepath, destpath, filter) { <<3.0.2: kernel now supports copying of folders themselves, retaining attributes or original local (pathchar = file.getPathChar ()); <<DW 11/3/97 on kernelcall (sourcepath, destpath) { kernel (file.copy)}; on copyonefile (sourcepath, destpath) { if not filter^ (sourcepath) { <<the filter says don't copy this file return (true)}; sys.systemTask (); <<be extra sensitive to user input, other application tasks return (kernelcall (sourcepath, destpath))}; if file.isFolder (sourcepath) { <<copying a folder local (topdest = destpath); <<a global to the whole copying process on foldercopy (folderpath, partialpath) { local (f, newfolder); if not filter^ (folderpath) { <<the filter says don't copy this folder return (true)}; newfolder = topdest + partialpath; bundle { <<do folder checking if file.exists (newfolder) { if not file.isFolder (newfolder) { scriptError ("Can't copy because " + newfolder + " is a file, not a folder."); return (false)}} else { <<new folder doesn't exist, try to create it if not kernelcall (folderpath, newfolder) { return (false)}; newfolder = filespec (newfolder)}}; <<in case caller omitted trailing pathchar fileloop (f in folderpath) { rollBeachBall (); if file.isFolder (f) { if not foldercopy (f, partialpath + file.fileFromPath (f)) { <<recurse return (false)}} else { if not copyonefile (f, newfolder + file.fileFromPath (f)) { return (false)}}}}; return (foldercopy (sourcepath, ""))} else { <<just copying a file if string.hasSuffix (pathchar, destpath) { if not file.isFolder (destpath) { scriptError ("Can't copy the file into \"" + destpath + "\" because it is not a folder.")}; destpath = destpath + file.fileFromPath (sourcepath)} else { if file.exists (destpath) and file.isFolder (destpath) { scriptError ("Can't copy the file as \"" + destpath + "\" because there is a folder at that location.")}}; return (copyonefile (sourcepath, destpath))}}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.