OSDN Git Service

* src/lhext.c (inquire_extract): warning if stdin is not tty,
[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, read_sizep)
13     FILE           *infp;
14     FILE           *outfp;
15     long            original_size;
16     long            packed_size;
17     char           *name;
18     int             method;
19     size_t         *read_sizep;
20 {
21     unsigned int crc;
22
23     interface.method = method;
24     interface.dicbit = 13;  /* method + 8; -lh5- */
25     interface.infile = infp;
26     interface.outfile = outfp;
27     interface.original = original_size;
28     interface.packed = packed_size;
29     interface.read_size = 0;
30
31     *read_sizep = packed_size;
32
33     switch (method) {
34     case LZHUFF0_METHOD_NUM:
35     case LARC4_METHOD_NUM:
36         start_indicator(name, original_size
37                   ,verify_mode ? "Testing " : "Melting ", 2048);
38         *read_sizep = copyfile(infp, (verify_mode ? NULL : outfp),
39                                original_size, 2, &crc);
40         break;
41     case LARC_METHOD_NUM:       /* -lzs- */
42         interface.dicbit = 11;
43         start_indicator(name, original_size
44                 ,verify_mode ? "Testing " : "Melting "
45                 ,1 << interface.dicbit);
46         crc = decode(&interface);
47         *read_sizep = interface.read_size;
48         break;
49     case LZHUFF1_METHOD_NUM:        /* -lh1- */
50     case LZHUFF4_METHOD_NUM:        /* -lh4- */
51     case LARC5_METHOD_NUM:          /* -lz5- */
52         interface.dicbit = 12;
53         start_indicator(name, original_size
54                 ,verify_mode ? "Testing " : "Melting "
55                 ,1 << interface.dicbit);
56         crc = decode(&interface);
57         *read_sizep = interface.read_size;
58         break;
59     case LZHUFF6_METHOD_NUM:        /* -lh6- */ /* Added N.Watazaki (^_^) */
60 #ifdef SUPPORT_LH7
61     case LZHUFF7_METHOD_NUM:                /* -lh7- */
62 #endif
63         interface.dicbit = (method - LZHUFF6_METHOD_NUM) + 15;
64         /* fall through */
65     default:
66         start_indicator(name, original_size
67                 ,verify_mode ? "Testing " : "Melting "
68                 ,1 << interface.dicbit);
69         crc = decode(&interface);
70         *read_sizep = interface.read_size;
71     }
72     finish_indicator(name, verify_mode ? "Tested  " : "Melted  ");
73
74     return crc;
75 }