OSDN Git Service

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