1/* ------------------------------------------------------------------------ */
2/* LHa for UNIX    Archiver Driver											*/
3/*																			*/
4/*		Modified          		Nobutaka Watazaki							*/
5/*																			*/
6/*	Ver. 1.14 	Soruce All chagned				1995.01.14	N.Watazaki		*/
7/*	Ver. 1.14i 	Modified and bug fixed			2000.10.06	t.okamoto   	*/
8/* ------------------------------------------------------------------------ */
9/*
10	Included...
11		lharc.h		interface.h		slidehuf.h
12*/
13#include <stdio.h>
14#include <errno.h>
15#include <ctype.h>
16#include <sys/types.h>
17#include <sys/file.h>
18#include <sys/stat.h>
19
20#include <signal.h>
21
22#include "lha_macro.h"
23
24struct encode_option {
25#if defined(__STDC__) || defined(AIX)
26	void            (*output) ();
27	void            (*encode_start) ();
28	void            (*encode_end) ();
29#else
30	int             (*output) ();
31	int             (*encode_start) ();
32	int             (*encode_end) ();
33#endif
34};
35
36struct decode_option {
37	unsigned short  (*decode_c) ();
38	unsigned short  (*decode_p) ();
39#if defined(__STDC__) || defined(AIX)
40	void            (*decode_start) ();
41#else
42	int             (*decode_start) ();
43#endif
44};
45
46/* ------------------------------------------------------------------------ */
47/*	LHa File Type Definition												*/
48/* ------------------------------------------------------------------------ */
49struct string_pool {
50	int             used;
51	int             size;
52	int             n;
53	char           *buffer;
54};
55
56typedef struct LzHeader {
57	unsigned char   header_size;
58	char            method[METHOD_TYPE_STRAGE];
59	long            packed_size;
60	long            original_size;
61	long            last_modified_stamp;
62	unsigned char   attribute;
63	unsigned char   header_level;
64	char            name[256];
65	unsigned short  crc;
66	boolean         has_crc;
67	unsigned char   extend_type;
68	unsigned char   minor_version;
69
70	/* extend_type == EXTEND_UNIX  and convert from other type. */
71	time_t          unix_last_modified_stamp;
72	unsigned short  unix_mode;
73	unsigned short  unix_uid;
74	unsigned short  unix_gid;
75}  LzHeader;
76
77struct interfacing {
78	FILE			*infile;
79	FILE			*outfile;
80	unsigned long   original;
81	unsigned long   packed;
82	int             dicbit;
83	int             method;
84};
85
86
87/* ------------------------------------------------------------------------ */
88/*	Option switch variable													*/
89/* ------------------------------------------------------------------------ */
90/* command line options (common options) */
91EXTERN boolean  quiet;
92EXTERN boolean  text_mode;
93EXTERN boolean  verbose;
94EXTERN boolean  noexec;		/* debugging option */
95EXTERN boolean  force;
96EXTERN boolean  prof;
97EXTERN boolean  delete_after_append;
98EXTERN int		compress_method;
99EXTERN int		header_level;
100/* EXTERN int		quiet_mode; */   /* 1996.8.13 t.okamoto */
101#ifdef EUC
102EXTERN boolean	euc_mode;
103#endif
104
105/* list command flags */
106EXTERN boolean  verbose_listing;
107
108/* extract/print command flags */
109EXTERN boolean  output_to_stdout;
110
111/* add/update/delete command flags */
112EXTERN boolean  new_archive;
113EXTERN boolean  update_if_newer;
114EXTERN boolean  generic_format;
115
116EXTERN boolean	remove_temporary_at_error;
117EXTERN boolean	recover_archive_when_interrupt;
118EXTERN boolean	remove_extracting_file_when_interrupt;
119EXTERN boolean	get_filename_from_stdin;
120EXTERN boolean	ignore_directory;
121EXTERN boolean	verify_mode;
122
123/* Indicator flag */
124EXTERN int		quiet_mode;
125
126/* ------------------------------------------------------------------------ */
127/*	Globale Variable														*/
128/* ------------------------------------------------------------------------ */
129EXTERN char		**cmd_filev;
130EXTERN int      cmd_filec;
131
132EXTERN char		*archive_name;
133EXTERN char     expanded_archive_name[FILENAME_LENGTH];
134EXTERN char     temporary_name[FILENAME_LENGTH];
135EXTERN char     backup_archive_name[FILENAME_LENGTH];
136
137EXTERN char		*reading_filename, *writting_filename;
138
139/* 1996.8.13 t.okamoto */
140#if 0
141EXTERN boolean  remove_temporary_at_error;
142EXTERN boolean  recover_archive_when_interrupt;
143EXTERN boolean  remove_extracting_file_when_interrupt;
144#endif
145
146EXTERN int      archive_file_mode;
147EXTERN int      archive_file_gid;
148
149EXTERN struct	interfacing interface;
150EXTERN node		*next;
151/* EXTERN unsigned short crc; */  /* 1996.8.13 t.okamoto */
152
153EXTERN int      noconvertcase; /* 2000.10.6 */
154
155/* slide.c */
156EXTERN int      unpackable;
157EXTERN unsigned long origsize, compsize;
158EXTERN unsigned short dicbit;
159EXTERN unsigned short maxmatch;
160EXTERN unsigned long count;
161EXTERN unsigned long loc;			/* short -> long .. Changed N.Watazaki */
162EXTERN unsigned char *text;
163EXTERN int		prev_char;
164
165/* huf.c */
166#ifndef LHA_MAIN_SRC  /* t.okamoto 96/2/20 */
167EXTERN unsigned short left[], right[];
168EXTERN unsigned char c_len[], pt_len[];
169EXTERN unsigned short c_freq[], c_table[], c_code[];
170EXTERN unsigned short p_freq[], pt_table[], pt_code[], t_freq[];
171#endif
172
173/* append.c */
174#ifdef NEED_INCREMENTAL_INDICATOR
175EXTERN long		indicator_count;
176EXTERN long		indicator_threshold;
177#endif
178
179/* crcio.c */
180EXTERN FILE		*infile, *outfile;
181EXTERN unsigned short crc, bitbuf;
182EXTERN int      dispflg;
183EXTERN long		reading_size;
184
185/* from dhuf.c */
186EXTERN unsigned int n_max;
187
188/* lhadd.c */
189EXTERN FILE		*temporary_fp;
190
191/* ------------------------------------------------------------------------ */
192/*	Functions																*/
193/* ------------------------------------------------------------------------ */
194/* from lharc.c */
195extern int		patmatch();
196
197extern void		interrupt();
198
199extern void		message();
200extern void		warning();
201extern void		error();
202extern void		fatal_error();
203
204extern boolean	need_file();
205extern int		inquire();
206extern FILE		*xfopen();
207
208extern boolean	find_files();
209extern void		free_files();
210
211extern void		init_sp();
212extern void		add_sp();
213extern void		finish_sp();
214extern void		free_sp();
215extern void		cleaning_files();
216
217extern void		build_temporary_name();
218extern void		build_backup_file_name();
219extern void		build_standard_archive_name();
220
221extern FILE		*open_old_archive();
222extern void		init_header();
223extern boolean	get_header();
224extern boolean	archive_is_msdos_sfx1();
225extern boolean	skip_msdos_sfx1_code();
226extern void		write_header();
227extern void		write_archive_tail();
228extern void		copy_old_one();
229extern unsigned char *convdelim();
230extern long		copyfile();
231
232extern void		cmd_list(), cmd_extract(), cmd_add(), cmd_delete();
233
234extern boolean	ignore_directory;
235extern boolean	compress_method;
236extern boolean	verify_mode;
237
238extern char		*extract_directory;
239
240/* from slide.c */
241
242extern int		encode_alloc();
243extern void		encode();
244extern void		decode();
245
246/* from append.c */
247extern void     start_indicator();
248extern void     finish_indicator();
249extern void     finish_indicator2();
250
251/* slide.c */
252extern void     output_st1();
253extern unsigned char *alloc_buf();
254extern void     encode_start_st1();
255extern void     encode_end_st1();
256extern unsigned short decode_c_st1();
257extern unsigned short decode_p_st1();
258extern void     decode_start_st1();
259
260/* from shuf.c */
261extern void     decode_start_st0();
262extern void     encode_p_st0( /* unsigned short j */ );
263extern void     encode_start_fix();
264extern void     decode_start_fix();
265extern unsigned short decode_c_st0();
266extern unsigned short decode_p_st0();
267
268/* from dhuf.c */
269extern void     start_c_dyn();
270extern void     decode_start_dyn();
271extern unsigned short decode_c_dyn();
272extern unsigned short decode_p_dyn();
273extern void     output_dyn( /* int code, unsigned int pos */ );
274extern void     encode_end_dyn();
275
276extern int      decode_lzhuf();
277
278/* from larc.c */
279
280extern unsigned short decode_c_lzs();
281extern unsigned short decode_p_lzs();
282extern unsigned short decode_c_lz5();
283extern unsigned short decode_p_lz5();
284extern void			  decode_start_lzs();
285extern void			  decode_start_lz5();
286
287extern void	make_table(	/* int nchar, uchar bitlen[], int tablebits,
288							ushort table[] */ );
289
290/* from maketree.c */
291/*
292 * void make_code(short n, uchar len[], ushort code[]); short make_tree(short
293 * nparm, ushort freqparm[], uchar lenparm[], ushort codeparam[]);
294 */
295extern void		make_code( /* int n, uchar len[], ushort code[] */ );
296extern short	make_tree( /* int nparm, ushort freqparm[], uchar lenparm[],
297								ushort codeparam[] */ );
298
299/* from crcio.c */
300extern void				make_crctable();
301extern unsigned short	calccrc( /* uchar *p, uint n */ );
302extern void				fillbuf( /* uchar n */ );
303extern unsigned short	getbits( /* uchar n */ );
304extern void				putcode( /* uchar n, ushort x */ );
305extern void				putbits( /* uchar n, ushort x */ );
306extern int				fread_crc( /* uchar *p, int n, FILE *f */ );
307extern void				fwrite_crc( /* uchar *p, int n, FILE *f */ );
308extern void				init_getbits();
309extern void				init_putbits();
310extern void     		make_crctable();
311extern unsigned 		short calccrc();
312
313/* from lhadd.c */
314extern int		encode_lzhuf();
315extern int      encode_stored_crc();
316
317/* Local Variables: */
318/* mode:c */
319/* tab-width:4 */
320/* End: */
321
322
323