OSDN Git Service

* src/huf.c: use HAVE_SYS_PARAM_H instead of sony_news.
[lha/lha.git] / src / extract.c
1 /* ------------------------------------------------------------------------ */
2 /* LHa for UNIX                                                                                                                         */
3 /*                              extract.c -- extrcat from archive                                                       */
4 /*                                                                                                                                                      */
5 /*              Modified                        Nobutaka Watazaki                                                       */
6 /*                                                                                                                                                      */
7 /*      Ver. 1.14       Source All chagned                              1995.01.14      N.Watazaki              */
8 /* ------------------------------------------------------------------------ */
9 #include "lha.h"
10
11 int
12 decode_lzhuf(infp, outfp, original_size, packed_size, name, method)
13         FILE           *infp;
14         FILE           *outfp;
15         long            original_size;
16         long            packed_size;
17         char           *name;
18         int             method;
19 {
20         interface.method = method;
21         interface.dicbit = 13;  /* method + 8; -lh5- */
22         interface.infile = infp;
23         interface.outfile = outfp;
24         interface.original = original_size;
25         interface.packed = packed_size;
26
27         switch (method) {
28         case LZHUFF0_METHOD_NUM:
29         case LARC4_METHOD_NUM:
30                 start_indicator(name, original_size
31                               ,verify_mode ? "Testing " : "Melting ", 2048);
32                 copyfile(infp, (verify_mode ? NULL : outfp), original_size, 2);
33                 break;
34         case LARC_METHOD_NUM:           /* -lzs- */
35                 interface.dicbit = 11;
36                 start_indicator(name, original_size
37                                 ,verify_mode ? "Testing " : "Melting "
38                                 ,1 << interface.dicbit);
39                 decode(&interface);
40                 break;
41         case LZHUFF1_METHOD_NUM:                /* -lh1- */
42         case LZHUFF4_METHOD_NUM:                /* -lh4- */
43         case LARC5_METHOD_NUM:                  /* -lz5- */
44                 interface.dicbit = 12;
45                 start_indicator(name, original_size
46                                 ,verify_mode ? "Testing " : "Melting "
47                                 ,1 << interface.dicbit);
48                 decode(&interface);
49                 break;
50         case LZHUFF6_METHOD_NUM:                /* -lh6- */     /* Added N.Watazaki (^_^) */
51 #ifdef SUPPORT_LH7
52         case LZHUFF7_METHOD_NUM:                /* -lh7- */
53 #endif
54             interface.dicbit = (method - LZHUFF6_METHOD_NUM) + 15;
55                 
56         default:
57                 start_indicator(name, original_size
58                                 ,verify_mode ? "Testing " : "Melting "
59                                 ,1 << interface.dicbit);
60                 decode(&interface);
61         }
62         finish_indicator(name, verify_mode ? "Tested  " : "Melted  ");
63
64         return crc;
65 }
66
67 /* Local Variables: */
68 /* mode:c */
69 /* tab-width:4 */
70 /* End: */
71 /* vi: set tabstop=4: */