module KF = Filename module KP = Printf module KU = Unix let out_entry dname och dirs name = let fname = KF.concat dname name in let stats = KU.lstat fname in match stats.KU.st_kind with | KU.S_REG -> KP.fprintf och " %s\n" fname name; dirs | KU.S_DIR -> name :: dirs | _ -> dirs let list_dir dname och = let dir = Sys.readdir dname in Array.sort String.compare dir; Array.fold_left (out_entry dname och) [] dir let out_index dname och = KP.fprintf och "\n\n"; KP.fprintf och "\n"; KP.fprintf och " \n"; KP.fprintf och " Index\n"; KP.fprintf och " \n"; KP.fprintf och " \n"; KP.fprintf och " \n"; let dirs = list_dir dname och in KP.fprintf och " \n"; KP.fprintf och " \n"; KP.fprintf och "\n"; dirs let rec out_dir dname = let och = open_out (KF.concat dname "index.ldw.xml") in let dirs = out_index dname och in close_out och; let map name = out_dir (KF.concat dname name) in List.iter map dirs let help = "Usage: index [ ]*" let main = Arg.parse [ ] out_dir help