(* filter0.ml - Don Yang (uguu.org) 05/12/02 *) open Sys;; open String;; type line = String of string | EOF;; let rec loadfile instream = match (try String (input_line instream) with _ -> EOF) with String x -> [x] @ loadfile instream | _ -> [];; let rec rtrim str = let len = length str in if len > 0 then let x = get str (len - 1) in if x == ' ' || x == '\t' then rtrim (sub str 0 (len - 1)) else str else str;; let data = loadfile ( if Array.length argv > 1 && argv.(1) <> "-" then open_in argv.(1) else stdin );; let outstream = if Array.length argv > 2 then open_out argv.(2) else stdout;; (* We can inline data and outstream only if input and output are guaranteed to be different files. *) List.iter (fun x -> output_string outstream ((rtrim x) ^ "\n")) data;;