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 60 61 62 63 64 65 66 67 68 69
|
(***********************************************************************)
(* *)
(* 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;;
let traite_fichier traitement nom_entre nom_sortie =
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
traitement 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 le traitement de "
^ nom_entre ^ " : " ^ message);
raise Erreur;;
let compresse_fichier nom_fichier =
traite_fichier Huffman.compresse
nom_fichier (nom_fichier ^ ".cpr");;
let dcompresse_fichier nom_fichier =
let longueur = String.length nom_fichier in
if longueur < 4
|| String.sub nom_fichier (longueur - 4) 4 <> ".cpr" then
let nom_entre = nom_fichier ^ ".cpr"
and nom_sortie = nom_fichier in
traite_fichier Huffman.dcompresse nom_entre nom_sortie
else
let nom_entre = nom_fichier
and nom_sortie = String.sub nom_fichier 0 (longueur - 4) in
traite_fichier Huffman.dcompresse nom_entre nom_sortie;;
if !interactive then () else
begin
let erreur = ref false in
if Array.length argv >= 2 && argv.(1) = "-d" then
for i = 2 to Array.length argv - 1 do
try dcompresse_fichier argv.(i)
with Erreur -> erreur := true
done
else
for i = 1 to Array.length argv - 1 do
try compresse_fichier argv.(i)
with Erreur -> erreur := true
done;
exit (if !erreur then 2 else 0)
end;;
|