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
decode_lzhuf(infp,outfp,original_size,packed_size,name,method)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