module EC = RecommCheck
module EL = RecommLexer
module EI = RecommInput
module EO = RecommOutput
module P1 = RecommPccFor
module P2 = RecommPcsAnd
module P3 = RecommPcsPar
module G = RecommGc
let write = ref false
let force = ref false
let subst = ref None
let chdir path =
Sys.chdir path
let start_substs () =
subst := Some (open_out "subst_cn.txt")
let write_substs lint = function
| None -> ()
| Some och -> EO.write_substs och lint
let stop_substs = function
| None -> ()
| Some och -> close_out och
let rec process path name =
let file = Filename.concat path name in
if Sys.is_directory file then begin
let dir = Sys.readdir file in
Array.iter (process file) dir
end else
if Filename.extension file = ".ma" then begin
Printf.eprintf "processing: %S\n" file;
let orig = EI.read_srcs file in
let lint = EC.recomm_srcs orig in
write_substs lint !subst;
if !force || (!write && lint <> orig) then EO.write_srcs file lint
end else begin
Printf.eprintf "skipping: %S\n" file
end
let msg_C = "
Set this working directory (default: .)"
let msg_L = " Log lexer tokens (default: no)"
let msg_c = " Set these output columns (default: 78)"
let msg_d = " Log with dark colors (default: no)"
let msg_f = " Write all output files (default: no)"
let msg_k = " Log key comments (default: no)"
let msg_m = " Log mark comments (default: no)"
let msg_n = " Log with no colors (default: yes)"
let msg_o = " Log other comments (default: no)"
let msg_r = " Replace the input files (default: no)"
let msg_s = " Log section comments (default: no)"
let msg_t = " Log title comments (default: no)"
let msg_u = " Write substitution file (default: no)"
let msg_w = " Write the changed output files (default: no)"
let main =
Arg.parse [
"-C", Arg.String chdir, msg_C;
"-L", Arg.Set EL.debug, msg_m;
"-c", Arg.Int ((:=) EO.width), msg_c;
"-d", Arg.Clear EC.bw, msg_d;
"-f", Arg.Set force, msg_f;
"-k", Arg.Set EC.log_k, msg_k;
"-m", Arg.Set EC.log_m, msg_m;
"-n", Arg.Set EC.bw, msg_n;
"-o", Arg.Set EC.log_o, msg_o;
"-r", Arg.Set EO.replace, msg_r;
"-s", Arg.Set EC.log_s, msg_s;
"-t", Arg.Set EC.log_t, msg_t;
"-u", Arg.Unit start_substs, msg_u;
"-w", Arg.Set write, msg_w;
] (process "") "";
stop_substs !subst