let main () =
  Rep_args.parse ();
  match !Rep_args.file with
    None ->
      prerr_endline Rep_messages.usage ;
      exit 1
  | Some file ->
      let report =
        if !Rep_args.binary_input then
          Rep_misc.value_of_file file
        else
          Rep_io.load_report file
      in
      if !Rep_args.generate_code then
        (
         let ml_file =
           match !Rep_args.output_file with
             None ->
               (try Filename.chop_extension file
                 with Invalid_argument _ -> file)^".ml"
           | Some f -> f
         in
         Rep_gen_code.gen_code ml_file report
        )
      else
        (* if the output_file is given, then we must
           save to this file. *)

        match !Rep_args.output_file with
          None ->
            failwith "No output file given to save."
        | Some f ->
            if !Rep_args.binary_output then
              Rep_misc.file_of_value f report
            else
              Rep_io.store_report f report