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