(* break70.ml - Don Yang (uguu.org) Insert newline every 70 characters. 09/03/04 *) (* Linebreak frequency *) let break_limit = 70;; (* Open first argument for input if available, otherwise use stdin *) let input () = if Array.length Sys.argv > 1 then open_in_bin Sys.argv.(1) else stdin;; (* Open second argument for input if available, otherwise use stdout *) let output () = if Array.length Sys.argv > 2 then open_out_bin Sys.argv.(2) else stdout;; (* Break every freq characters *) let break_func freq x c = output_byte (fst x) c; if (snd x) - 1 = 0 then (output_char (fst x) '\n'; (fst x, freq)) else (fst x, (snd x) - 1);; (* Process file one byte at a time *) let rec process infile x freq = let (i, j) = try ((break_func freq x (input_byte infile)), 0) with End_of_file -> (x, 1) in if j != 0 then () else process infile i freq;; (* Program entry point *) let infile = input() in let outfile = output() in process infile (outfile, break_limit) break_limit; close_out outfile; close_in infile;;