OSDN Git Service

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