]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/matita/matitac.ml
comments syntax changed
[helm.git] / helm / matita / matitac.ml
index 607fe703b065c1f122b0c17309c5cad997776736..d9300218375851113a45f246c6f4c467e2acfb07 100644 (file)
@@ -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,7 +71,8 @@ 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
@@ -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)