(* ocamlfind ocamlc -package camlp4,extlib -syntax camlp4r str.cma extLib.cma realize.ml *) open ExtLib ; value die i = do { print_endline "usage: realize_playlist [-l]" ; exit i } ; value _ = let filename = if Array.length Sys.argv > 1 then Sys.argv.(1) else die 1 in let directory = if Array.length Sys.argv > 2 then Sys.argv.(2) else die 2 in let command = if Array.length Sys.argv > 3 then if Sys.argv.(3) = "-l" then "ln -s" else die 3 else "cp" in let lines = Std.input_lines (open_in filename) in let valid_lines = Enum.filter (fun line -> not (String.starts_with line "#")) lines in Enum.iteri (fun i line -> let filename = Str.string_after line (String.rindex line '/' + 1) in let exec_string = Printf.sprintf "%s '%s' '%s/%02i - %s'" command line directory (succ i) filename in do { Printf.printf "> %s\n%!" exec_string ; ignore (Sys.command exec_string) }) valid_lines ;