This is lha_macro.h in view mode; [Download] [Up]
/* ------------------------------------------------------------------------ */
/* LHa for UNIX Archiver Driver macro define */
/* */
/* Modified Nobutaka Watazaki */
/* */
/* Ver. 1.14 Soruce All chagned 1995.01.14 N.Watazaki */
/* ------------------------------------------------------------------------ */
/* Most of System V, define SYSTIME_HAS_NO_TM */
#ifdef SYSTIME_HAS_NO_TM
#include <time.h>
#else
#include <sys/time.h>
#endif /* SYSTIME_HAS_NO_TM */
/* ------------------------------------------------------------------------ */
/* Directory Access Stuff */
/* ------------------------------------------------------------------------ */
#ifndef NODIRECTORY
#ifdef SYSV_SYSTEM_DIR
#include <dirent.h>
#define DIRENTRY struct dirent
#define NAMLEN(p) strlen (p->d_name)
#else /* not SYSV_SYSTEM_DIR */
#ifdef NONSYSTEM_DIR_LIBRARY
#include "lhdir.h"
#else
#include <sys/dir.h>
#endif /* not NONSYSTEM_DIR_LIBRARY */
#define DIRENTRY struct direct
#define NAMLEN(p) p->d_namlen
#endif /* not SYSV_SYSTEM_DIR */
#endif /* NODIRECTORY */
/* ------------------------------------------------------------------------ */
/* Other Define */
/* ------------------------------------------------------------------------ */
/* Not support 'void' */
#ifdef NOVOID
#define void
#endif
#ifndef SEEK_SET
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
#endif /* SEEK_SET
/* non-integral functions */
extern struct tm *localtime();
extern char *getenv();
#ifndef _MINIX
#ifndef __STDC__
extern char *malloc();
extern char *realloc();
#endif
#endif
/* external variables */
extern int errno;
#define FALSE 0
#define TRUE 1
typedef int boolean;
/* used by qsort() for alphabetic-sort */
#define STRING_COMPARE(a,b) strcmp((a),(b))
#define FILENAME_LENGTH 1024
/* ------------------------------------------------------------------------ */
/* YOUR CUSTOMIZIES */
/* ------------------------------------------------------------------------ */
#ifndef ARCHIVENAME_EXTENTION
#define ARCHIVENAME_EXTENTION ".lzh"
#endif
#ifndef BACKUPNAME_EXTENTION
#define BACKUPNAME_EXTENTION ".bak"
#endif
#ifndef TMP_FILENAME_TEMPLATE
#define TMP_FILENAME_TEMPLATE "/tmp/lhXXXXXX"
#endif
#define SJC_FIRST_P(c) \
(((unsigned char)(c) >= 0x80) && \
(((unsigned char)(c) < 0xa0) || \
((unsigned char)(c) >= 0xe0) && \
((unsigned char)(c) < 0xfd)))
#define SJC_SECOND_P(c) \
(((unsigned char)(c) >= 0x40) && \
((unsigned char)(c) < 0xfd) && \
((ungigned char)(c) != 0x7f))
#ifdef MULTIBYTE_CHAR
#define MULTIBYTE_FIRST_P SJC_FIRST_P
#define MULTIBYTE_SECOND_P SJC_SECOND_P
#endif /* MULTIBYTE_CHAR */
/* ------------------------------------------------------------------------ */
/* LHa File Definitions */
/* ------------------------------------------------------------------------ */
#ifdef S_IFLNK
#define GETSTAT lstat
#else
#define GETSTAT stat
#endif
#ifdef LHA_MAIN_SRC
#define EXTERN
#else
#define EXTERN extern
#endif /* LHA_MAIN_SRC */
#define LZHUFF0_METHOD "-lh0-"
#define LZHUFF1_METHOD "-lh1-"
#define LZHUFF2_METHOD "-lh2-"
#define LZHUFF3_METHOD "-lh3-"
#define LZHUFF4_METHOD "-lh4-"
#define LZHUFF5_METHOD "-lh5-"
#define LZHUFF6_METHOD "-lh6-"
#define LARC_METHOD "-lzs-"
#define LARC5_METHOD "-lz5-"
#define LARC4_METHOD "-lz4-"
#define LZHDIRS_METHOD "-lhd-"
#define METHOD_TYPE_STRAGE 5
/* Added N.Watazaki ..V */
#define LZHUFF0_METHOD_NUM 0
#define LZHUFF1_METHOD_NUM 1
#define LZHUFF2_METHOD_NUM 2
#define LZHUFF3_METHOD_NUM 3
#define LZHUFF4_METHOD_NUM 4
#define LZHUFF5_METHOD_NUM 5
#define LZHUFF6_METHOD_NUM 6
#define LARC_METHOD_NUM 7
#define LARC5_METHOD_NUM 8
#define LARC4_METHOD_NUM 9
#define LZHDIRS_METHOD_NUM 10
/* Added N.Watazaki ..^ */
#define I_HEADER_SIZE 0
#define I_HEADER_CHECKSUM 1
#define I_METHOD 2
#define I_PACKED_SIZE 7
#define I_ORIGINAL_SIZE 11
#define I_LAST_MODIFIED_STAMP 15
#define I_ATTRIBUTE 19
#define I_HEADER_LEVEL 20
#define I_NAME_LENGTH 21
#define I_NAME 22
#define I_CRC 22 /* + name_length */
#define I_EXTEND_TYPE 24 /* + name_length */
#define I_MINOR_VERSION 25 /* + name_length */
#define I_UNIX_LAST_MODIFIED_STAMP 26 /* + name_length */
#define I_UNIX_MODE 30 /* + name_length */
#define I_UNIX_UID 32 /* + name_length */
#define I_UNIX_GID 34 /* + name_length */
#define I_UNIX_EXTEND_BOTTOM 36 /* + name_length */
#define I_GENERIC_HEADER_BOTTOM I_EXTEND_TYPE
#define EXTEND_GENERIC 0
#define EXTEND_UNIX 'U'
#define EXTEND_MSDOS 'M'
#define EXTEND_MACOS 'm'
#define EXTEND_OS9 '9'
#define EXTEND_OS2 '2'
#define EXTEND_OS68K 'K'
#define EXTEND_OS386 '3' /* OS-9000??? */
#define EXTEND_HUMAN 'H'
#define EXTEND_CPM 'C'
#define EXTEND_FLEX 'F'
#define EXTEND_RUNSER 'R'
/* this OS type is not official */
#define EXTEND_TOWNSOS 'T'
#define EXTEND_XOSK 'X'
/*---------------------------------------------------------------------------*/
#define GENERIC_ATTRIBUTE 0x20
#define GENERIC_DIRECTORY_ATTRIBUTE 0x10
#define HEADER_LEVEL0 0x00
#define HEADER_LEVEL1 0x01
#define HEADER_LEVEL2 0x02
#define CURRENT_UNIX_MINOR_VERSION 0x00
#define DELIM ('/')
#define DELIM2 (0xff)
#define DELIMSTR "/"
#define OSK_RW_RW_RW 0000033
#define OSK_FILE_REGULAR 0000000
#define OSK_DIRECTORY_PERM 0000200
#define OSK_SHARED_PERM 0000100
#define OSK_OTHER_EXEC_PERM 0000040
#define OSK_OTHER_WRITE_PERM 0000020
#define OSK_OTHER_READ_PERM 0000010
#define OSK_OWNER_EXEC_PERM 0000004
#define OSK_OWNER_WRITE_PERM 0000002
#define OSK_OWNER_READ_PERM 0000001
#define UNIX_FILE_TYPEMASK 0170000
#define UNIX_FILE_REGULAR 0100000
#define UNIX_FILE_DIRECTORY 0040000
#define UNIX_FILE_SYMLINK 0120000
#define UNIX_SETUID 0004000
#define UNIX_SETGID 0002000
#define UNIX_STYCKYBIT 0001000
#define UNIX_OWNER_READ_PERM 0000400
#define UNIX_OWNER_WRITE_PERM 0000200
#define UNIX_OWNER_EXEC_PERM 0000100
#define UNIX_GROUP_READ_PERM 0000040
#define UNIX_GROUP_WRITE_PERM 0000020
#define UNIX_GROUP_EXEC_PERM 0000010
#define UNIX_OTHER_READ_PERM 0000004
#define UNIX_OTHER_WRITE_PERM 0000002
#define UNIX_OTHER_EXEC_PERM 0000001
#define UNIX_RW_RW_RW 0000666
#define LZHEADER_STRAGE 4096
#define MAX_INDICATOR_COUNT 64
typedef short node;
/* ------------------------------------------------------------------------ */
/* Slide relation */
/* ------------------------------------------------------------------------ */
#if defined(__STDC__) || defined(AIX)
#include <limits.h>
#else
#ifndef CHAR_BIT
#define CHAR_BIT 8
#endif
#ifndef UCHAR_MAX
#define UCHAR_MAX ((1<<(sizeof(unsigned char)*8))-1)
#endif
#ifndef USHRT_MAX
#define USHRT_MAX ((1<<(sizeof(unsigned short)*8))-1)
#endif
#ifndef SHRT_MAX
#define SHRT_MAX ((1<<(sizeof(short)*8-1))-1)
#endif
#ifndef SHRT_MIN
#define SHRT_MIN (SHRT_MAX-USHRT_MAX)
#endif
#ifndef ULONG_MAX
#define ULONG_MAX ((1<<(sizeof(unsigned long)*8))-1)
#endif
#ifndef LONG_MAX
#define LONG_MAX ((1<<(sizeof(long)*8-1))-1)
#endif
#ifndef LONG_MIN
#define LONG_MIN (LONG_MAX-ULONG_MAX)
#endif
#endif /* not __STDC__ */
/* ------------------------------------------------------------------------ */
/* FILE Attribute */
/* ------------------------------------------------------------------------ */
#define is_directory(statp) (((statp)->st_mode & S_IFMT) == S_IFDIR)
#define is_symlink(statp) (((statp)->st_mode & S_IFMT) == S_IFLNK)
#define is_regularfile(statp) (((statp)->st_mode & S_IFMT) == S_IFREG)
#ifdef MSDOS
#define WRITE_BINARY "wb"
#define READ_BINARY "rb"
#else
#define WRITE_BINARY "w"
#define READ_BINARY "r"
#endif
/* ------------------------------------------------------------------------ */
/* Memory and String function */
/* ------------------------------------------------------------------------ */
#include <string.h>
#ifdef NOINDEX
#define index strchr
#define rindex strrchr
#endif /* NOINDEX */
#ifdef NOBSTRING
#define bcmp(a,b,n) memcmp ((a),(b),(n))
#define bzero(d,n) memset((d),0,(n))
#define bcopy(s,d,n) memmove((d),(s),(n))
#endif /* NOBSTRING */
#ifdef USESTRCASECMP
#define strucmp(p,q) strcasecmp((p),(q))
#endif
/* ------------------------------------------------------------------------ */
/* Individual macro define */
/* ------------------------------------------------------------------------ */
/* from crcio.c */
#define CRCPOLY 0xA001 /* CRC-16 */
#define UPDATE_CRC(c) crc = crctable[(crc ^ (c)) & 0xFF] ^ (crc >> CHAR_BIT)
/* dhuf.c */
#define N_CHAR (256 + 60 - THRESHOLD + 1)
#define TREESIZE_C (N_CHAR * 2)
#define TREESIZE_P (128 * 2)
#define TREESIZE (TREESIZE_C + TREESIZE_P)
#define ROOT_C 0
#define ROOT_P TREESIZE_C
/* header.c */
#define setup_get(PTR) (get_ptr = (PTR))
#define get_byte() (*get_ptr++ & 0xff)
#define put_ptr get_ptr
#define setup_put(PTR) (put_ptr = (PTR))
#define put_byte(c) (*put_ptr++ = (char)(c))
/* huf.c */
#define NP (MAX_DICBIT + 1)
#define NT (USHRT_BIT + 3)
#if 0
#define PBIT 4 /* smallest integer such that (1 << PBIT) > * NP */
#define TBIT 5 /* smallest integer such that (1 << TBIT) > * NT */
#endif
#define PBIT 5 /* smallest integer such that (1 << PBIT) > * NP */
#define TBIT 5 /* smallest integer such that (1 << TBIT) > * NT */
#define NC (UCHAR_MAX + MAXMATCH + 2 - THRESHOLD)
/* #if NT > NP #define NPT NT #else #define NPT NP #endif */
#define NPT 0x80
/* larc.c */
#define MAGIC0 18
#define MAGIC5 19
/* lharc.c */
#define CMD_UNKNOWN 0
#define CMD_EXTRACT 1
#define CMD_ADD 2
#define CMD_LIST 3
#define CMD_DELETE 4
#define STREQU(a,b) (((a)[0] == (b)[0]) ? (strcmp ((a),(b)) == 0) : FALSE)
/* shuf.c */
#define N1 286 /* alphabet size */
#define N2 (2 * N1 - 1) /* # of nodes in Huffman tree */
#define EXTRABITS 8 /* >= log2(F-THRESHOLD+258-N1) */
#define BUFBITS 16 /* >= log2(MAXBUF) */
#define LENFIELD 4 /* bit size of length field for tree output */
/* util.c */
#define BUFFERSIZE 2048
#ifndef NULL
#define NULL (char *)0
#endif
/* slide.c */
#define PERCOLATE 1
#define NIL 0
#define HASH(p, c) ((p) + ((c) << hash1) + hash2)
/* slide.c */
#define MAX_DICBIT 15 /* lh6 use 15bits */
#define MAX_DICSIZ (1 << MAX_DICBIT)
#define MATCHBIT 8 /* bits for MAXMATCH - THRESHOLD */
#define MAXMATCH 256 /* formerly F (not more than UCHAR_MAX + 1) */
#define THRESHOLD 3 /* choose optimal value */
/* from huf.c */
/* alphabet = {0, 1, 2, ..., NC - 1} */
#define CBIT 9 /* $\lfloor \log_2 NC \rfloor + 1$ */
#define USHRT_BIT 16 /* (CHAR_BIT * sizeof(ushort)) */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.