Files
sml-projects/imperative-shell/converter.sml

46 lines
1.2 KiB
Standard ML
Raw Normal View History

2025-08-26 14:27:39 +01:00
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