1/* ------------------------------------------------------------------------ */
2/* LHa for UNIX    Archiver Driver	macro define							*/
3/*																			*/
4/*		Modified          		Nobutaka Watazaki							*/
5/*																			*/
6/*	Ver. 1.14	Soruce All chagned				1995.01.14	N.Watazaki		*/
7/*	Ver. 1.14g	modified   						2000.05.06	T.OKAMOTO		*/
8/* ------------------------------------------------------------------------ */
9
10#define LHA_VERSION "lha for unix version 1.14g"
11
12/* Most of System V, define SYSTIME_HAS_NO_TM */
13#ifdef	SYSTIME_HAS_NO_TM
14#include <time.h>
15#else
16#include <sys/time.h>
17#endif	/* SYSTIME_HAS_NO_TM */
18
19/* ------------------------------------------------------------------------ */
20/*	Directory Access Stuff													*/
21/* ------------------------------------------------------------------------ */
22#ifndef NODIRECTORY
23#ifdef SYSV_SYSTEM_DIR
24
25#include <dirent.h>
26
27#define DIRENTRY	struct dirent
28#define NAMLEN(p)	strlen (p->d_name)
29
30#else	/* not SYSV_SYSTEM_DIR */
31
32#ifdef NONSYSTEM_DIR_LIBRARY
33#include "lhdir.h"
34#else
35#include <sys/dir.h>
36#endif	/* not NONSYSTEM_DIR_LIBRARY */
37
38#define DIRENTRY		struct direct
39#define NAMLEN(p)		p->d_namlen
40
41#endif	/* not SYSV_SYSTEM_DIR */
42#endif  /* NODIRECTORY */
43
44/* ------------------------------------------------------------------------ */
45/*	Other Define															*/
46/* ------------------------------------------------------------------------ */
47/* Not support 'void' */
48#ifdef NOVOID
49#define void
50#endif
51
52#ifndef SEEK_SET
53#define SEEK_SET		0
54#define SEEK_CUR		1
55#define SEEK_END		2
56#endif	/* SEEK_SET
57
58
59/* non-integral functions */
60extern struct tm *localtime();
61extern char    *getenv();
62
63#ifndef _MINIX
64#ifndef __STDC__
65extern char    *malloc();
66extern char    *realloc();
67#endif
68#endif
69
70/* external variables */
71extern int      errno;
72
73#define	FALSE			0
74#define TRUE			1
75typedef int				boolean;
76
77/* used by qsort() for alphabetic-sort */
78#define STRING_COMPARE(a,b)		strcmp((a),(b))
79
80#define FILENAME_LENGTH	1024
81
82/* ------------------------------------------------------------------------ */
83/* YOUR CUSTOMIZIES															*/
84/* ------------------------------------------------------------------------ */
85
86#ifndef ARCHIVENAME_EXTENTION
87#define ARCHIVENAME_EXTENTION	".lzh"
88#endif
89#ifndef BACKUPNAME_EXTENTION
90#define BACKUPNAME_EXTENTION	".bak"
91#endif
92#ifndef TMP_FILENAME_TEMPLATE
93#define TMP_FILENAME_TEMPLATE	"/tmp/lhXXXXXX"
94#endif
95
96#define SJC_FIRST_P(c)			\
97  (((unsigned char)(c) >= 0x80) &&	\
98   (((unsigned char)(c) < 0xa0) ||	\
99    ((unsigned char)(c) >= 0xe0) &&	\
100    ((unsigned char)(c) < 0xfd)))
101#define SJC_SECOND_P(c)			\
102  (((unsigned char)(c) >= 0x40) &&	\
103   ((unsigned char)(c) < 0xfd) &&	\
104   ((unsigned char)(c) != 0x7f))
105
106#ifdef MULTIBYTE_CHAR
107#define MULTIBYTE_FIRST_P	SJC_FIRST_P
108#define MULTIBYTE_SECOND_P	SJC_SECOND_P
109#endif				/* MULTIBYTE_CHAR */
110
111/* ------------------------------------------------------------------------ */
112/*	LHa File Definitions													*/
113/* ------------------------------------------------------------------------ */
114#ifdef S_IFLNK
115#define GETSTAT lstat
116#else
117#define GETSTAT stat
118#endif
119
120#ifdef LHA_MAIN_SRC
121#define EXTERN
122#else
123#define EXTERN				extern
124#endif	/* LHA_MAIN_SRC */
125
126#define LZHUFF0_METHOD			"-lh0-"
127#define LZHUFF1_METHOD			"-lh1-"
128#define LZHUFF2_METHOD			"-lh2-"
129#define LZHUFF3_METHOD			"-lh3-"
130#define LZHUFF4_METHOD			"-lh4-"
131#define LZHUFF5_METHOD			"-lh5-"
132#define LZHUFF6_METHOD			"-lh6-"
133#define LZHUFF7_METHOD			"-lh7-"
134#define LARC_METHOD				"-lzs-"
135#define LARC5_METHOD			"-lz5-"
136#define LARC4_METHOD			"-lz4-"
137#define LZHDIRS_METHOD			"-lhd-"
138
139#define METHOD_TYPE_STRAGE		5
140
141/* Added N.Watazaki ..V */
142#define LZHUFF0_METHOD_NUM		0
143#define LZHUFF1_METHOD_NUM		1
144#define LZHUFF2_METHOD_NUM		2
145#define LZHUFF3_METHOD_NUM		3
146#define LZHUFF4_METHOD_NUM		4
147#define LZHUFF5_METHOD_NUM		5
148#define LZHUFF6_METHOD_NUM		6
149#define LZHUFF7_METHOD_NUM		7
150#define LARC_METHOD_NUM			8
151#define LARC5_METHOD_NUM		9
152#define LARC4_METHOD_NUM		10
153#define LZHDIRS_METHOD_NUM		11
154/* Added N.Watazaki ..^ */
155
156#define I_HEADER_SIZE			0
157#define I_HEADER_CHECKSUM		1
158#define I_METHOD				2
159#define I_PACKED_SIZE			7
160#define I_ORIGINAL_SIZE			11
161#define I_LAST_MODIFIED_STAMP	15
162#define I_ATTRIBUTE				19
163#define I_HEADER_LEVEL			20
164#define I_NAME_LENGTH			21
165#define I_NAME					22
166
167#define I_CRC						22	/* + name_length */
168#define I_EXTEND_TYPE				24	/* + name_length */
169#define I_MINOR_VERSION				25	/* + name_length */
170#define I_UNIX_LAST_MODIFIED_STAMP	26	/* + name_length */
171#define I_UNIX_MODE					30	/* + name_length */
172#define I_UNIX_UID					32	/* + name_length */
173#define I_UNIX_GID					34	/* + name_length */
174#define I_UNIX_EXTEND_BOTTOM		36	/* + name_length */
175
176#define I_GENERIC_HEADER_BOTTOM		I_EXTEND_TYPE
177
178#define EXTEND_GENERIC			0
179#define EXTEND_UNIX				'U'
180#define EXTEND_MSDOS			'M'
181#define EXTEND_MACOS			'm'
182#define EXTEND_OS9				'9'
183#define EXTEND_OS2				'2'
184#define EXTEND_OS68K			'K'
185#define EXTEND_OS386			'3'	/* OS-9000??? */
186#define EXTEND_HUMAN			'H'
187#define EXTEND_CPM				'C'
188#define EXTEND_FLEX				'F'
189#define EXTEND_RUNSER			'R'
190
191/* this OS type is not official */
192
193#define EXTEND_TOWNSOS			'T'
194#define EXTEND_XOSK				'X'
195
196/*---------------------------------------------------------------------------*/
197
198#define GENERIC_ATTRIBUTE				0x20
199#define GENERIC_DIRECTORY_ATTRIBUTE		0x10
200#define HEADER_LEVEL0					0x00
201#define HEADER_LEVEL1					0x01
202#define HEADER_LEVEL2					0x02
203
204#define CURRENT_UNIX_MINOR_VERSION		0x00
205
206#define DELIM		('/')
207#define DELIM2		(0xff)
208#define DELIMSTR	"/"
209
210#define OSK_RW_RW_RW			0000033
211#define OSK_FILE_REGULAR		0000000
212#define OSK_DIRECTORY_PERM		0000200
213#define OSK_SHARED_PERM			0000100
214#define OSK_OTHER_EXEC_PERM		0000040
215#define OSK_OTHER_WRITE_PERM	0000020
216#define OSK_OTHER_READ_PERM		0000010
217#define OSK_OWNER_EXEC_PERM		0000004
218#define OSK_OWNER_WRITE_PERM	0000002
219#define OSK_OWNER_READ_PERM		0000001
220
221#define UNIX_FILE_TYPEMASK		0170000
222#define UNIX_FILE_REGULAR		0100000
223#define UNIX_FILE_DIRECTORY		0040000
224#define UNIX_FILE_SYMLINK		0120000
225#define UNIX_SETUID				0004000
226#define UNIX_SETGID				0002000
227#define UNIX_STYCKYBIT			0001000
228#define UNIX_OWNER_READ_PERM	0000400
229#define UNIX_OWNER_WRITE_PERM	0000200
230#define UNIX_OWNER_EXEC_PERM	0000100
231#define UNIX_GROUP_READ_PERM	0000040
232#define UNIX_GROUP_WRITE_PERM	0000020
233#define UNIX_GROUP_EXEC_PERM	0000010
234#define UNIX_OTHER_READ_PERM	0000004
235#define UNIX_OTHER_WRITE_PERM	0000002
236#define UNIX_OTHER_EXEC_PERM	0000001
237#define UNIX_RW_RW_RW			0000666
238
239#define LZHEADER_STRAGE			4096
240
241#define MAX_INDICATOR_COUNT		64
242
243typedef short   				node;
244
245/* ------------------------------------------------------------------------ */
246/*	Slide relation															*/
247/* ------------------------------------------------------------------------ */
248#if defined(__STDC__) || defined(AIX)
249
250#include <limits.h>
251
252#else
253
254#ifndef CHAR_BIT
255#define CHAR_BIT  8
256#endif
257
258#ifndef UCHAR_MAX
259#define UCHAR_MAX				((1<<(sizeof(unsigned char)*8))-1)
260#endif
261
262#ifndef USHRT_MAX
263#define USHRT_MAX				((1<<(sizeof(unsigned short)*8))-1)
264#endif
265
266#ifndef SHRT_MAX
267#define SHRT_MAX				((1<<(sizeof(short)*8-1))-1)
268#endif
269
270#ifndef SHRT_MIN
271#define SHRT_MIN				(SHRT_MAX-USHRT_MAX)
272#endif
273
274#ifndef ULONG_MAX
275#define ULONG_MAX	((1<<(sizeof(unsigned long)*8))-1)
276#endif
277
278#ifndef LONG_MAX
279#define LONG_MAX	((1<<(sizeof(long)*8-1))-1)
280#endif
281
282#ifndef LONG_MIN
283#define LONG_MIN	(LONG_MAX-ULONG_MAX)
284#endif
285
286#endif	/* not __STDC__ */
287
288/* ------------------------------------------------------------------------ */
289/*	FILE Attribute															*/
290/* ------------------------------------------------------------------------ */
291#define is_directory(statp)		(((statp)->st_mode & S_IFMT) == S_IFDIR)
292#define is_symlink(statp)		(((statp)->st_mode & S_IFMT) == S_IFLNK)
293#define is_regularfile(statp)	(((statp)->st_mode & S_IFMT) == S_IFREG)
294
295#ifdef MSDOS
296#define WRITE_BINARY	"wb"
297#define READ_BINARY		"rb"
298#else
299#define WRITE_BINARY	"w"
300#define READ_BINARY		"r"
301#endif
302
303/* ------------------------------------------------------------------------ */
304/*	Memory and String function												*/
305/* ------------------------------------------------------------------------ */
306#include <string.h>
307
308#ifdef NOINDEX
309#define index			strchr
310#define rindex			strrchr
311#endif	/* NOINDEX */
312
313#ifdef NOBSTRING
314#define bcmp(a,b,n)		memcmp ((a),(b),(n))
315#define bzero(d,n)		memset((d),0,(n))
316#define bcopy(s,d,n)	memmove((d),(s),(n))
317#endif	/* NOBSTRING */
318
319#ifdef USESTRCASECMP
320#define strucmp(p,q)	strcasecmp((p),(q))
321#endif
322
323/* ------------------------------------------------------------------------ */
324/* Individual macro define													*/
325/* ------------------------------------------------------------------------ */
326
327/* from crcio.c */
328#define CRCPOLY			0xA001		/* CRC-16 */
329#define UPDATE_CRC(c)	crc = crctable[(crc ^ (c)) & 0xFF] ^ (crc >> CHAR_BIT)
330
331/* dhuf.c */
332#define N_CHAR      (256 + 60 - THRESHOLD + 1)
333#define TREESIZE_C  (N_CHAR * 2)
334#define TREESIZE_P  (128 * 2)
335#define TREESIZE    (TREESIZE_C + TREESIZE_P)
336#define ROOT_C      0
337#define ROOT_P      TREESIZE_C
338
339/* header.c */
340#define setup_get(PTR)	(get_ptr = (PTR))
341#define get_byte()		(*get_ptr++ & 0xff)
342#define put_ptr			get_ptr
343#define setup_put(PTR)	(put_ptr = (PTR))
344#define put_byte(c)		(*put_ptr++ = (char)(c))
345
346/* huf.c */
347#define NP			(MAX_DICBIT + 1)
348#define NT			(USHRT_BIT + 3)
349#if 0
350#define PBIT		4		/* smallest integer such that (1 << PBIT) > * NP */
351#define TBIT 		5		/* smallest integer such that (1 << TBIT) > * NT */
352#endif
353
354#define PBIT		5		/* smallest integer such that (1 << PBIT) > * NP */
355#define TBIT 		5		/* smallest integer such that (1 << TBIT) > * NT */
356
357#define NC 			(UCHAR_MAX + MAXMATCH + 2 - THRESHOLD)
358
359/*		#if NT > NP #define NPT NT #else #define NPT NP #endif	*/
360#define NPT			0x80
361
362/* larc.c */
363#define MAGIC0		18
364#define MAGIC5		19
365
366/* lharc.c */
367#define CMD_UNKNOWN	0
368#define CMD_EXTRACT	1
369#define CMD_ADD		2
370#define CMD_LIST	3
371#define CMD_DELETE	4
372
373#define STREQU(a,b)	(((a)[0] == (b)[0]) ? (strcmp ((a),(b)) == 0) : FALSE)
374
375/* shuf.c */
376#define N1			286				/* alphabet size */
377#define N2			(2 * N1 - 1)	/* # of nodes in Huffman tree */
378#define EXTRABITS	8				/* >= log2(F-THRESHOLD+258-N1) */
379#define BUFBITS		16				/* >= log2(MAXBUF) */
380#define LENFIELD	4				/* bit size of length field for tree output */
381
382/* util.c */
383#define BUFFERSIZE	2048
384#define MAXSFXCODE	1024*64
385
386#ifndef NULL
387#define NULL		(char *)0
388#endif
389
390/* slide.c */
391/*
392#define PERCOLATE  1
393#define NIL        0
394#define HASH(p, c) ((p) + ((c) << hash1) + hash2)
395*/
396
397/* slide.c */
398#ifdef SUPPORT_LH7
399#define MAX_DICBIT			16      /* lh7 use 16bits */
400#endif
401
402#ifndef SUPPORT_LH7
403#define MAX_DICBIT			15      /* lh6 use 15bits */
404#endif
405
406#define MAX_DICSIZ			(1 << MAX_DICBIT)
407#define MATCHBIT			8	/* bits for MAXMATCH - THRESHOLD */
408#define MAXMATCH			256	/* formerly F (not more than UCHAR_MAX + 1) */
409#define THRESHOLD			3	/* choose optimal value */
410
411/* from huf.c */
412
413/* alphabet = {0, 1, 2, ..., NC - 1} */
414#define CBIT				9	/* $\lfloor \log_2 NC \rfloor + 1$ */
415#define USHRT_BIT			16	/* (CHAR_BIT * sizeof(ushort)) */
416
417/* Local Variables: */
418/* mode:c */
419/* tab-width:4 */
420/* End: */
421