File: decompr.ml

package info (click to toggle)
ocaml-doc 3.09-1
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 10,428 kB
  • ctags: 4,963
  • sloc: ml: 9,244; makefile: 2,413; ansic: 122; sh: 49; asm: 17
file content (59 lines) | stat: -rw-r--r-- 2,143 bytes parent folder | download | duplicates (2)
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);;