--- /dev/null
+(*
+ ||M|| This file is part of HELM, an Hypertextual, Electronic
+ ||A|| Library of Mathematics, developed at the Computer Science
+ ||T|| Department, University of Bologna, Italy.
+ ||I||
+ ||T|| HELM is free software; you can redistribute it and/or
+ ||A|| modify it under the terms of the GNU General Public License
+ \ / version 2 or (at your option) any later version.
+ \ / This software is distributed as is, NO WARRANTY.
+ V_______________________________________________________________ *)
+
+module A = Arg
+module P = Printf
+
+module O = Options
+module L = Lexer
+
+let help = "Usage: mac [ -LXQV | -p <int> ]* [ <file> ]*"
+let help_L = " Activate lexer debugging"
+let help_Q = " Read data from standard input"
+let help_V = " Show version information"
+let help_X = " Reset options and counters"
+let help_p = "<int> Assume <int> characters per page (default: 5120)"
+
+let active = ref false
+
+let process_channel ich =
+ let lexbuf = Lexing.from_channel ich in
+ L.token lexbuf; active := true
+
+let output_version () =
+ P.printf "mac 0.1.1 M - July 2013\n"
+
+let process_stdin () =
+ process_channel stdin
+
+let process_file fname =
+ let ich = open_in fname in
+ process_channel ich; close_in ich
+
+let set_page i =
+ if i > 0 then O.page := i
+
+let output_count () =
+ if !active then
+ let pages = !O.count / !O.page in
+ let pages = if !O.count mod !O.page = 0 then pages else succ pages in
+ P.printf "%u %u\n" !O.count pages
+
+let main () =
+ A.parse [
+ "-L", A.Set O.debug_lexer, help_L;
+ "-Q", Arg.Unit process_stdin, help_Q;
+ "-V", Arg.Unit output_version, help_V;
+ "-X", A.Unit O.clear, help_X;
+ ] process_file help;
+ output_count ()
+
+let _ = main ()