structure Converter = struct fun endsWithDsc str = if String.size str >= 4 then let val size = String.size str val expectedExtension = String.substring (str, size - 4, 4) in expectedExtension = ".dsc" end else false fun convertFile path = () fun loop (dir, rootPath) = case OS.FileSys.readDir dir of SOME path => let val folderPath = String.concat [rootPath, "/", path] in if OS.FileSys.isDir folderPath then (* handle folder *) let val newDir = OS.fileSys.openDir folderPath in loop (newDir, folderPath) end else if OS.FileSys.isLink folderPath then (* continue looping and ignore *) loop (dir, rootPath) else (* handle file, if file has ".dsc" at the end *) let val () = if endsWithDsc path then convertFile folderPath else () in loop (dir, rootPath) end end | NONE => OS.FileSys.closeDir dir fun main () = let val path = OS.FileSys.getDir () val dir = OS.FileSys.openDir path in loop (dir, path) end end