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 FALSE 0 11 #define TRUE 1 12 13 #define FILENAME_LENGTH 1024 14 15 #if defined __MINGW32__ 16 # define getuid() 0 17 # define chown(file, uid, gid) 0 18 # define kill(pid, sig) 0 19 #endif 20 21 /* ------------------------------------------------------------------------ */ 22 /* YOUR CUSTOMIZIES */ 23 /* ------------------------------------------------------------------------ */ 24 25 #ifndef ARCHIVENAME_EXTENTION 26 #define ARCHIVENAME_EXTENTION ".lzh" 27 #endif 28 #ifndef BACKUPNAME_EXTENTION 29 #define BACKUPNAME_EXTENTION ".bak" 30 #endif 31 32 #define SJIS_FIRST_P(c) \ 33 (((unsigned char)(c) >= 0x80 && (unsigned char)(c) < 0xa0) || \ 34 ((unsigned char)(c) >= 0xe0 && (unsigned char)(c) < 0xfd)) 35 #define SJIS_SECOND_P(c) \ 36 (((unsigned char)(c) >= 0x40 && (unsigned char)(c) < 0xfd) && \ 37 (unsigned char)(c) != 0x7f) 38 39 #define X0201_KANA_P(c)\ 40 (0xa0 < (unsigned char)(c) && (unsigned char)(c) < 0xe0) 41 42 /* for filename conversion */ 43 #define NONE 0 44 #define CODE_EUC 1 45 #define CODE_SJIS 2 46 #define CODE_UTF8 3 47 #define CODE_CAP 4 /* Columbia AppleTalk Program */ 48 #define TO_LOWER 1 49 #define TO_UPPER 2 50 51 /* ------------------------------------------------------------------------ */ 52 /* LHa File Definitions */ 53 /* ------------------------------------------------------------------------ */ 54 #ifdef S_IFLNK 55 #define GETSTAT lstat 56 #else 57 #define GETSTAT stat 58 #endif 59 60 #define LZHUFF0_METHOD "-lh0-" 61 #define LZHUFF1_METHOD "-lh1-" 62 #define LZHUFF2_METHOD "-lh2-" 63 #define LZHUFF3_METHOD "-lh3-" 64 #define LZHUFF4_METHOD "-lh4-" 65 #define LZHUFF5_METHOD "-lh5-" 66 #define LZHUFF6_METHOD "-lh6-" 67 #define LZHUFF7_METHOD "-lh7-" 68 #define LARC_METHOD "-lzs-" 69 #define LARC5_METHOD "-lz5-" 70 #define LARC4_METHOD "-lz4-" 71 #define LZHDIRS_METHOD "-lhd-" 72 73 #define METHOD_TYPE_STORAGE 5 74 75 /* Added N.Watazaki ..V */ 76 #define LZHUFF0_METHOD_NUM 0 77 #define LZHUFF1_METHOD_NUM 1 78 #define LZHUFF2_METHOD_NUM 2 79 #define LZHUFF3_METHOD_NUM 3 80 #define LZHUFF4_METHOD_NUM 4 81 #define LZHUFF5_METHOD_NUM 5 82 #define LZHUFF6_METHOD_NUM 6 83 #define LZHUFF7_METHOD_NUM 7 84 #define LARC_METHOD_NUM 8 85 #define LARC5_METHOD_NUM 9 86 #define LARC4_METHOD_NUM 10 87 #define LZHDIRS_METHOD_NUM 11 88 /* Added N.Watazaki ..^ */ 89 90 #define LZHUFF0_DICBIT 0 /* no compress */ 91 #define LZHUFF1_DICBIT 12 /* 2^12 = 4KB sliding dictionary */ 92 #define LZHUFF2_DICBIT 13 /* 2^13 = 8KB sliding dictionary */ 93 #define LZHUFF3_DICBIT 13 /* 2^13 = 8KB sliding dictionary */ 94 #define LZHUFF4_DICBIT 12 /* 2^12 = 4KB sliding dictionary */ 95 #define LZHUFF5_DICBIT 13 /* 2^13 = 8KB sliding dictionary */ 96 #define LZHUFF6_DICBIT 15 /* 2^15 = 32KB sliding dictionary */ 97 #define LZHUFF7_DICBIT 16 /* 2^16 = 64KB sliding dictionary */ 98 #define LARC_DICBIT 11 /* 2^11 = 2KB sliding dictionary */ 99 #define LARC5_DICBIT 12 /* 2^12 = 4KB sliding dictionary */ 100 #define LARC4_DICBIT 0 /* no compress */ 101 102 #ifdef SUPPORT_LH7 103 #define MAX_DICBIT LZHUFF7_DICBIT /* lh7 use 16bits */ 104 #endif 105 #ifndef SUPPORT_LH7 106 #define MAX_DICBIT LZHUFF6_DICBIT /* lh6 use 15bits */ 107 #endif 108 109 #define MAX_DICSIZ (1L << MAX_DICBIT) 110 111 #define EXTEND_GENERIC 0 112 #define EXTEND_UNIX 'U' 113 #define EXTEND_MSDOS 'M' 114 #define EXTEND_MACOS 'm' 115 #define EXTEND_OS9 '9' 116 #define EXTEND_OS2 '2' 117 #define EXTEND_OS68K 'K' 118 #define EXTEND_OS386 '3' /* OS-9000??? */ 119 #define EXTEND_HUMAN 'H' 120 #define EXTEND_CPM 'C' 121 #define EXTEND_FLEX 'F' 122 #define EXTEND_RUNSER 'R' 123 124 /* this OS type is not official */ 125 126 #define EXTEND_TOWNSOS 'T' 127 #define EXTEND_XOSK 'X' /* OS-9 for X68000 (?) */ 128 #define EXTEND_JAVA 'J' 129 130 /*---------------------------------------------------------------------------*/ 131 132 #define GENERIC_ATTRIBUTE 0x20 133 #define GENERIC_DIRECTORY_ATTRIBUTE 0x10 134 135 #define CURRENT_UNIX_MINOR_VERSION 0x00 136 137 #define LHA_PATHSEP 0xff /* path separator of the 138 filename in lha header. 139 it should compare with 140 `unsigned char' or `int', 141 that is not '\xff', but 0xff. */ 142 143 #define OSK_RW_RW_RW 0000033 144 #define OSK_FILE_REGULAR 0000000 145 #define OSK_DIRECTORY_PERM 0000200 146 #define OSK_SHARED_PERM 0000100 147 #define OSK_OTHER_EXEC_PERM 0000040 148 #define OSK_OTHER_WRITE_PERM 0000020 149 #define OSK_OTHER_READ_PERM 0000010 150 #define OSK_OWNER_EXEC_PERM 0000004 151 #define OSK_OWNER_WRITE_PERM 0000002 152 #define OSK_OWNER_READ_PERM 0000001 153 154 #define UNIX_FILE_TYPEMASK 0170000 155 #define UNIX_FILE_REGULAR 0100000 156 #define UNIX_FILE_DIRECTORY 0040000 157 #define UNIX_FILE_SYMLINK 0120000 158 #define UNIX_SETUID 0004000 159 #define UNIX_SETGID 0002000 160 #define UNIX_STICKYBIT 0001000 161 #define UNIX_OWNER_READ_PERM 0000400 162 #define UNIX_OWNER_WRITE_PERM 0000200 163 #define UNIX_OWNER_EXEC_PERM 0000100 164 #define UNIX_GROUP_READ_PERM 0000040 165 #define UNIX_GROUP_WRITE_PERM 0000020 166 #define UNIX_GROUP_EXEC_PERM 0000010 167 #define UNIX_OTHER_READ_PERM 0000004 168 #define UNIX_OTHER_WRITE_PERM 0000002 169 #define UNIX_OTHER_EXEC_PERM 0000001 170 #define UNIX_RW_RW_RW 0000666 171 172 #define LZHEADER_STORAGE 4096 173 174 /* ------------------------------------------------------------------------ */ 175 /* FILE Attribute */ 176 /* ------------------------------------------------------------------------ */ 177 #define is_directory(statp) (((statp)->st_mode & S_IFMT) == S_IFDIR) 178 #define is_symlink(statp) (((statp)->st_mode & S_IFMT) == S_IFLNK) 179 #define is_regularfile(statp) (((statp)->st_mode & S_IFMT) == S_IFREG) 180 181 #if 1 /* assume that fopen() will accepts "b" as binary mode on all systems. */ 182 #define WRITE_BINARY "wb" 183 #define READ_BINARY "rb" 184 #else 185 #define WRITE_BINARY "w" 186 #define READ_BINARY "r" 187 #endif 188 189 /* ------------------------------------------------------------------------ */ 190 /* Individual macro define */ 191 /* ------------------------------------------------------------------------ */ 192 193 #define MIN(a,b) ((a) <= (b) ? (a) : (b)) 194 195 /* bitio.c */ 196 #define peekbits(n) (bitbuf >> (sizeof(bitbuf)*8 - (n))) 197 198 /* crcio.c */ 199 #define CRCPOLY 0xA001 /* CRC-16 (x^16+x^15+x^2+1) */ 200 #define INITIALIZE_CRC(crc) ((crc) = 0) 201 #define UPDATE_CRC(crc, c) \ 202 (crctable[((crc) ^ (c)) & 0xFF] ^ ((crc) >> CHAR_BIT)) 203 204 /* dhuf.c */ 205 #define N_CHAR (256 + 60 - THRESHOLD + 1) 206 #define TREESIZE_C (N_CHAR * 2) 207 #define TREESIZE_P (128 * 2) 208 #define TREESIZE (TREESIZE_C + TREESIZE_P) 209 #define ROOT_C 0 210 #define ROOT_P TREESIZE_C 211 212 /* huf.c */ 213 #define USHRT_BIT 16 /* (CHAR_BIT * sizeof(ushort)) */ 214 #define NP (MAX_DICBIT + 1) 215 #define NT (USHRT_BIT + 3) 216 #define NC (UCHAR_MAX + MAXMATCH + 2 - THRESHOLD) 217 218 #define PBIT 5 /* smallest integer such that (1 << PBIT) > * NP */ 219 #define TBIT 5 /* smallest integer such that (1 << TBIT) > * NT */ 220 #define CBIT 9 /* smallest integer such that (1 << CBIT) > * NC */ 221 222 /* #if NT > NP #define NPT NT #else #define NPT NP #endif */ 223 #define NPT 0x80 224 225 /* larc.c */ 226 #define MAGIC0 18 227 #define MAGIC5 19 228 229 /* lharc.c */ 230 #define CMD_UNKNOWN 0 231 #define CMD_EXTRACT 1 232 #define CMD_ADD 2 233 #define CMD_LIST 3 234 #define CMD_DELETE 4 235 236 #define STREQU(a,b) (((a)[0] == (b)[0]) ? (strcmp ((a),(b)) == 0) : FALSE) 237 238 /* shuf.c */ 239 #define N1 286 /* alphabet size */ 240 #define N2 (2 * N1 - 1) /* # of nodes in Huffman tree */ 241 #define EXTRABITS 8 /* >= log2(F-THRESHOLD+258-N1) */ 242 #define BUFBITS 16 /* >= log2(MAXBUF) */ 243 #define LENFIELD 4 /* bit size of length field for tree output */ 244 245 /* util.c */ 246 #define BUFFERSIZE 2048 247 248 /* slide.c */ 249 /* 250 #define PERCOLATE 1 251 #define NIL 0 252 #define HASH(p, c) ((p) + ((c) << hash1) + hash2) 253 */ 254 255 /* slide.c */ 256 #define MAXMATCH 256 /* formerly F (not more than UCHAR_MAX + 1) */ 257 #define THRESHOLD 3 /* choose optimal value */ 258