X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Fmatita%2Fmatitac.ml;h=e7cdef9f4afb898ac82d492b58dab4a03a108965;hb=842919f2f8ee71a5301ad962220569450340a9e9;hp=607fe703b065c1f122b0c17309c5cad997776736;hpb=f8b2057d349dd9903ad8b1dd05f894cb0fa14378;p=helm.git diff --git a/helm/matita/matitac.ml b/helm/matita/matitac.ml index 607fe703b..e7cdef9f4 100644 --- a/helm/matita/matitac.ml +++ b/helm/matita/matitac.ml @@ -50,7 +50,6 @@ let scripts = List.rev !acc let run_script fname = - MatitaLog.message (sprintf "execution of %s started:" fname); let is = Stream.of_channel (match fname with @@ -72,11 +71,12 @@ let run_script fname = MatitaLog.debug ("Executing: ``" ^ stm ^ "''") in try - status := MatitaEngine.eval_from_stream !status is cb + status := MatitaEngine.eval_from_stream !status is cb ; + !status with | CicTextualParser2.Parse_error (floc,err) -> let (x, y) = CicAst.loc_of_floc floc in - MatitaLog.message (sprintf "Parse error at %d-%d: %s" x y err); + MatitaLog.error (sprintf "Parse error at %d-%d: %s" x y err); Http_getter.sync_dump_file (); exit 1 | exn -> @@ -84,10 +84,42 @@ let run_script fname = raise exn let _ = - List.iter (fun fname -> - run_script fname; - MatitaLog.message (sprintf "execution of %s completed." fname)) scripts; - Http_getter.sync_dump_file (); - exit(0) - - + at_exit + (fun () -> + Http_getter_logger.log "Sync map tree to disk..."; + Http_getter.sync_dump_file (); + print_endline "\nThanks for using Matita!\n"); + Sys.catch_break true; + try + List.iter (fun fname -> + let time = Unix.time () in + MatitaLog.message (sprintf "execution of %s started:" fname); + let status = run_script fname in + let elapsed = Unix.time () -. time in + let tm = Unix.gmtime elapsed in + let sec = + if tm.Unix.tm_sec > 0 then (string_of_int tm.Unix.tm_sec ^ "''") else "" + in + let min = + if tm.Unix.tm_min > 0 then (string_of_int tm.Unix.tm_min ^ "' ") else "" + in + let hou = + if tm.Unix.tm_hour > 0 then (string_of_int tm.Unix.tm_hour ^ "h ") else "" + in + let proof_status = status.proof_status in + if proof_status <> MatitaTypes.No_proof then + begin + MatitaLog.error + "there are still incomplete proofs at the end of the script"; + exit(-1) + end + else + begin + MatitaLog.message + (sprintf "execution of %s completed in %s." fname (hou^min^sec)) ; + exit(0) + end + ) scripts + with Sys.Break -> + MatitaLog.error "user break!"; + exit (-1)