1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
(***********************************************************************)
(* *)
(* Objective Caml *)
(* *)
(* Pierre Weis, projet Cristal, INRIA Rocquencourt *)
(* *)
(* Copyright 2001 Institut National de Recherche en Informatique et *)
(* en Automatique. All rights reserved. This file is distributed *)
(* only by permission. *)
(* *)
(***********************************************************************)
open Sys;;
exception Erreur;;
exception Mauvais_suffixe;;
let enlve_suffixe_cpr chane =
let longueur = String.length chane in
if longueur < 4 or String.sub chane (longueur - 4) 4 <> ".cpr"
then raise Mauvais_suffixe
else String.sub chane 0 (longueur - 4);;
let erreur = ref false;;
for i = 1 to Array.length argv - 1 do
let (nom_entre, nom_sortie) =
try
(argv.(i), enlve_suffixe_cpr argv.(i))
with Mauvais_suffixe ->
(argv.(i) ^ ".cpr", argv.(i)) in
try
let entre =
try
open_in_bin nom_entre
with Sys_error message ->
prerr_endline
("Erreur l'ouverture de " ^ nom_entre ^ " : " ^ message);
raise Erreur in
let sortie =
try
open_out_bin nom_sortie
with Sys_error message ->
close_in entre;
prerr_endline
("Erreur la cration de " ^ nom_sortie ^ " : " ^ message);
raise Erreur in
try
Huffman.dcompresse entre sortie;
close_in entre; close_out sortie; remove nom_entre
with Sys_error message ->
close_in entre; close_out sortie; remove nom_sortie;
prerr_endline
("Erreur pendant la compression de " ^ nom_entre ^ " : " ^ message);
raise Erreur
with Erreur ->
erreur := true
done;
exit (if !erreur then 2 else 0);;
|