2
* $Id: externs.c,v 1.7 2004/06/18 16:19:37 andrew_belov Exp $
3
* ---------------------------------------------------------------------------
4
* All uninitialized and initialized variables that are used by two or more
5
* modules are defined here. Note that no separation is done for those used by
6
* ARJ, ARJSFXV and so on...
12
DEBUGHDR(__FILE__) /* Debug information block */
14
/* Auto-initializing variables */
16
#if SFX_LEVEL>=ARJSFXV
22
/* Shared data, mostly the duplicate strings */
24
char nullstr[]=""; /* Used instead of "" */
25
char strform[]="%s"; /* printf(strform, str) */
26
char path_separators[]=PATH_SEPARATORS;
28
char switch_chars[]="-/";
30
char switch_chars[]="-";
33
char cmd_ac[]="AC"; /* Chapter commands */
36
char arjtemp_spec[]="ARJTEMP.$%02d"; /* For all temporary files created */
37
char le_prompt[]="%02d> "; /* String entry prompt */
39
#if SFX_LEVEL>=ARJSFXV
40
char vd_space[]=" "; /* ...after the filename */
45
#if SFX_LEVEL>=ARJ||defined(REARJ)
47
unsigned char regdata[]={'a', 'R', 'j', ' ', 's', 'O', 'f', 'T', 'w', 'A', 'r',
48
'E', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
50
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
53
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
54
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
55
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
56
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
57
'[', '/', '.', ',', ']', '$', '*', '(', '#', '@', '^',
58
'&', '*', '%', '#', '(', ')', 0};
61
#if SFX_LEVEL>=ARJSFXV
62
struct flist_root flist_order; /* Order of files */
63
struct flist_root flist_archive; /* Archives to be processed */
65
#if SFX_LEVEL>=ARJSFXV||defined(REARJ)
66
struct flist_root flist_main; /* Files to be processed */
67
struct flist_root flist_exclusion; /* Files to be excluded */
69
#if SFX_LEVEL>=ARJ&&defined(HAVE_EAS)
70
struct flist_root flist_ea; /* EAs to include */
71
struct flist_root flist_xea; /* EAs to exclude */
73
#if SFX_LEVEL>=ARJ&&TARGET==UNIX
74
struct l_entries l_entries;
75
struct l_entries sl_entries;
77
int win32_platform; /* 1 if the archiver has been compiled
79
int display_totals; /* 1 if the total archive statistics
80
can be shown in display_indicator() */
81
int switch_char AUTOINIT; /* 1st switch character */
82
unsigned int file_attr_mask; /* For optimization */
83
int pattern_found; /* 1 once the search pattern was found
85
#if SFX_LEVEL>=ARJSFXV||defined(REARJ)
86
int is_registered; /* 1 if the archiver is registered
87
(this switch is inverted at the
88
beginning to disallow hacking) */
89
int in_key; /* 1 = use the stored key */
92
int is_commercial; /* 1 if commercial version (in
93
open-source world, means nothing) */
95
int lfn_supported AUTOINIT; /* 1 if yes; set by detect_lfns */
96
int ext_hdr_flags; /* Extended flags, used in main ARJ
98
int file_garbled; /* 1 if the GARBLED_FLAG is set */
99
int arch_wildcard_allowed; /* 1 if multiple archives can be
101
int file_args AUTOINIT; /* Number of file arguments */
102
int volume_flag_set; /* 1 if the VOLUME_FLAG is set in the
105
int tmp_archive_used; /* Indicates that a temporary archive
107
int method_specifier; /* Number of the custom method */
108
int primary_file_type; /* Default type */
109
int identical_filedata; /* 1 if the files in archive are
110
identical with the disk files */
112
#if SFX_LEVEL>=ARJSFXV
113
int ctrlc_not_busy; /* Ctrl+C handler can proceed */
114
int ignore_errors; /* 1 if everything is ignored (-hr) */
115
int ctrlc_processing; /* Ctrl+C is raised */
116
int supply_comment_file; /* Supply file for comment (-jz) */
119
int use_comment; /* Supply archive comment (-z) */
121
int assume_yes; /* -jy option presence flag */
122
int extract_to_file; /* Extract to a single file (-jw) */
124
int assign_work_directory; /* Set temporary directory (-w) */
126
int multivolume_option; /* 1 if the "-v" switch is issued */
128
int allow_mv_update; /* Allow update of multivolume archives */
129
int beep_between_volumes; /* Beep between volumes (-vv) */
130
int chk_arj_version; /* -hv */
132
int verbose_display AUTOINIT; /* State of verbose display (-jv) */
133
int update_criteria AUTOINIT; /* Update option (-u), one of UC_* */
135
int translate_unix_paths; /* Translate "/" path separators */
136
int type_override; /* File type override (-t) */
137
int timestamp_override; /* Archive time override (-s, ATO_*) */
138
int test_archive_crc; /* Test CRC (-jt, one of TC_*) */
139
int store_by_suffix; /* Store *.ZIP, *.ARJ, etc. */
141
int skip_ts_check AUTOINIT; /* Skip timestamp check (-c) */
143
int comment_display; /* Comment display settings */
144
int lfn_mode; /* LFN handling mode (-hf) */
145
int create_sfx; /* !0 if the output file will be a SFX
146
(the SFXCRT_* constants define the
148
int filter_attrs; /* 1 if file are selected depending
149
on their attributes (-hb) */
150
int select_backup_files; /* Select backup files (-jg) */
151
int search_mode; /* File search logging level (-hw) */
153
int keep_tmp_file; /* Keep unprocessed file */
155
int hollow_mode; /* Create "hollow" archives (-j#) */
156
int restart_at_filename; /* Restart volumes on filename (-jn) */
158
int quiet_mode AUTOINIT; /* 1 or 2 if prompting is suppressed
159
(registered ARJ only) */
160
int recurse_subdirs; /* Recurse thru subdirectories (-r) */
161
int ignore_crc_errors; /* One of ICE_* (-jr) */
163
int set_string_parameter; /* Set command-line parameters */
164
int query_for_each_file; /* 1 if yes (-q) */
165
int protfile_option; /* 1 if .XRJ file must be built (-hk) */
166
int arjprot_tail; /* Indicates presence of recovery
168
int prot_blocks; /* # of ARJ-PROTECT blocks */
170
int arjdisp_enabled AUTOINIT; /* 1 if the ARJ$DISP interface is
172
int prompt_for_more; /* 1 if the user is to be prompted
175
int marksym_expansion; /* Toggles expansion (see MISC.C) */
177
int fnm_matching AUTOINIT; /* Filename matching mode, (FMM_*) */
178
int rsp_per_line; /* Set per-line RSP mode (-@) */
179
int gost_cipher; /* Garble via GOST 28147-89 (v 2.55+) */
180
int filter_older; /* Same and newer files are thrown away */
181
int filter_same_or_newer; /* Older files are thrown away */
182
int new_files_only AUTOINIT; /* Only the nonexistent files are OK */
183
int nonexist_filespec; /* Specify non-existing file (-hn) */
184
int skip_switch_processing AUTOINIT; /* Set after "--" option */
185
int disable_sharing; /* 1 if SAA extended subs are used */
186
int yes_on_all_queries AUTOINIT; /* 1 if all queries are skipped */
187
int indicator_style AUTOINIT; /* -i indicator style (no enums) */
188
int disable_arj_sw; /* Disable ARJ_SW (-+) */
189
int skip_time_attrs; /* 1 to skip DTA/DTC handling (-j$) */
190
int custom_method; /* The value of -m, or 0 */
191
int max_compression; /* Maximal compression mode (-jm) */
192
int filelist_storage; /* Desired filelist storage method */
193
int create_list_file; /* -l */
194
int listfile_err_opt; /* Return error for list file error (-hhl) */
195
int listchars_allowed; /* 1 if yes */
196
int handle_labels; /* Should the labels be [re]stored
198
int sign_with_arjsec; /* 1 if the archive must be sealed */
199
int keep_tmp_archive; /* Keep ARJTEMP on error (-jk) */
200
int keep_bak; /* Keep backup file (-k) */
201
int create_index; /* 1 if yes (-ji) */
202
int detailed_index; /* 1 if detailed index is to be built
204
int ignore_archive_errors; /* 1 if an error like "Bad header" will
205
not cause a termination */
206
int ignore_open_errors; /* Should the archive open errors on
207
add operation be ignored? (-hq) */
208
int clear_archive_bit; /* 1 if chmod operations are used and
209
all bits of file are set to 0 */
210
int jh_enabled; /* Nonzero if the "-jh" is used */
211
int help_issued AUTOINIT; /* Help (-?) is issued by the user */
212
int garble_enabled; /* Garble with password */
213
int lowercase_names AUTOINIT; /* Convert filenames being added or
214
extracted to lower case */
215
int validate_style; /* VALIDATE_ALL, VALIDATE_NOTHING,
216
or VALIDATE_DRIVESPEC */
217
int freshen_criteria AUTOINIT; /* Freshen option (-f), one of FC_* */
218
int chk_free_space; /* Check space before extraction */
219
int force_lfn; /* Force LFN support (-h$) */
220
int select_by_number; /* Select files by number (-#) */
221
int show_filenames_only; /* (-jl) Simplified display */
222
int override_archive_exts; /* Set default archive extensions */
223
int extm_mode; /* Extract files w/matches (-ho) */
224
int exit_after_count; /* Exit after N files (-jc) */
225
int start_at_ext_pos; /* 1 if the -jx option was issued */
227
int start_with_seek; /* 1 if the -2i option was issued */
229
int exclude_paths; /* Exclude paths from filenames (-e) */
230
int exclude_files; /* Exclude selected files (-x) */
231
int arjsec_opt; /* -he options */
232
int run_cmd_at_start; /* Execute command on start (-hc) */
233
int delete_processed; /* Delete processed files (-d) */
234
int debug_enabled; /* 1 if yes */
235
int install_errhdl; /* Install critical error handler (-&) */
236
int chapter_mode; /* 0 - do not create chapters
237
1 - create/process a chapter archive
238
2 - dismiss chapter archive */
239
int set_target_directory; /* Set target directory (-ht) */
240
int serialize_exts; /* Serialize extensions (-jo/-jo1) */
241
int allow_any_attrs; /* Allow any file attributes (-a) */
242
int filter_fa_arch; /* Store only files with 0x20 bit set */
243
int append_curtime; /* Append current date/time to archive
245
char *time_str; /* Time string to append */
246
int use_ansi_cp; /* Use ANSI codepage (-hy) */
248
int queries_assume_no[TOTAL_QUERIES]; /* 1 if NO is assumed as reply */
249
int queries_assume_yes[TOTAL_QUERIES]; /* 1 if YES is assumed as reply */
251
int accept_shortcut_keys; /* Never used and defaults to 0 */
252
int skip_next_vol_query; /* Skip "next volume...?" query */
253
int skip_scanned_query; /* Skip "scanned enough?" (-jys) */
254
int overwrite_existing AUTOINIT; /* 1 if no prompt for overwriting an
255
existing file is to be displayed */
256
int skip_rename_prompt; /* Skip "New name...?" prompt */
257
int skip_space_query; /* Skip free disk space query */
258
int query_delete; /* 1 if the user is to be queried when
259
a set of files is to be deleted */
260
#if SFX_LEVEL>=ARJSFXV
261
int prompt_for_mkdir; /* 1 if yes (overrides -y) */
262
int skip_append_query; /* Skip "Append @ position..." query */
263
int kbd_cleanup_on_input; /* Defaults to 0 */
265
#if SFX_LEVEL>=ARJSFXV
266
int use_sfxstub; /* Create multivolume stubbed
270
int whole_files_in_mv; /* Store whole files in volumes (-vw) */
271
int pause_between_volumes; /* Pause after completing volume
273
int inhibit_change_test; /* Inhibit diskette change test (-vi) */
274
int mv_cmd_state; /* -vs/vz/vd commands -> MVC_* */
275
int ignore_pcase; /* Ignore case of search pattern */
277
#if SFX_LEVEL>=ARJ||defined(REARJ)
278
int no_file_activity; /* 1 if file writes can be ignored
279
(-hdn in ARJ, -z in REARJ) */
281
int std_list_cmd AUTOINIT; /* 1 if the standard (non-verbose) list
283
int print_with_more; /* Set to 1 if the ARJ P was called and
284
the "more?" prompt is enabled */
285
int subdir_extraction; /* 1 if the ARJ x command was issued */
286
int execute_cmd; /* ARJ B sets this flag */
287
int change_vol_delay; /* Delay specified with -p */
288
unsigned int left_trim; /* Number of chars to remove from the
289
beginning of filename during the
291
char listchar; /* Defaults to '!' */
292
int errorlevel; /* DOS errorlevel */
293
unsigned int errors AUTOINIT; /* Number of errors */
294
int lines_per_page; /* Lines per screen for using "more" */
295
int lines_scrolled; /* Lines scrolled */
296
int secondary_file_type; /* Type specified with a list */
297
unsigned int file_type; /* See DT_* equates */
298
int unpackable; /* 1 if the compressed file becomes
299
greated than the original one */
300
int fdisp_lines; /* Lines to display in m_w command */
301
int reserve_size; /* Size of reserved buffer */
302
int bitcount; /* Temporary counter */
303
FILE_COUNT av_total_files; /* Total # of files on all volumes */
304
FILE_COUNT av_total_longnames; /* Total # of LFNs on all volumes */
305
FILE_COUNT exit_count; /* Number of files to exit after */
307
FILE_COUNT split_files; /* Number of files that span across
311
FILE_COUNT FAR *order; /* Order of files */
315
int order[PARAMS_MAX];
316
int params_max=PARAMS_MAX;
317
char *f_arg_array[PARAMS_MAX]; /* Array of filename arguments */
319
char *comment_file; /* Global comment file */
320
char *archive_cmt_name; /* Archive comment (-z) filename */
321
char *yes_query_list; /* List of -jy parameters */
322
char *extraction_filename; /* Filename specified by -jw */
323
char *swptr_hv; /* -hv parameter */
324
char *search_reserve; /* For strings that span across block
327
char *search_str[SEARCH_STR_MAX]; /* Search patterns */
329
char *filename_to_restart; /* Filename specified with -jn */
330
char *string_parameter; /* -jq string parameter */
331
char *arjdisp_ptr; /* -hp (ARJ$DISP switch) */
332
char *arjcrypt_name; /* ARJCRYPT.COM override (-hg) */
333
char *nonexist_name; /* Nonexistent filespec (-hn) */
334
unsigned long garble_ftime; /* Used as a random seed when garbling
336
char *index_name; /* Index (-ji) filename */
337
char *list_file; /* -L list file */
338
char *swptr_t; /* -t (secondary file type list) */
339
char *cmd_to_exec; /* Text of command to be run */
340
char *archive_suffixes; /* A list of packed file extensions */
341
char *mv_cmd; /* Executed between volumes */
343
char *timestr_older; /* "-ob", "-oab", "-ocb" */
344
char *timestr_newer; /* "-o", "-ob", "-oc" */
346
char *arj_env_name; /* "ARJ_SW" or "ARJ32_SW" */
347
char *swptr_hm; /* -hm (file list management) */
348
char *work_directory; /* -w (work directory) override */
349
char *target_dir; /* Target directory, -ht overrides it */
350
char *tmp_archive_name; /* Back-up archive */
351
char *rsp_name; /* Response (@) filename */
352
/* Temporary filename storage */
353
#if SFX_LEVEL>=ARJSFXV
354
char *tmp_tmp_filename;
356
char tmp_tmp_filename[FILENAME_MAX];
358
/* Archive filename with the extension added. */
359
#if SFX_LEVEL>=ARJSFXV
362
char archive_name[FILENAME_MAX];
364
char *arjsec_env_name; /* ARJ-SECURITY envelope filename (-hz)
365
Unused in noncommercial version */
366
char password_modifier; /* Garble password modifier */
367
char *garble_password; /* Pointer to garble password */
368
char *archive_ext_list; /* -hx extension list */
369
char *debug_opt; /* -hd (debug) */
370
char *start_cmd; /* Command to run at start */
371
char *misc_buf; /* allocated at main(). General-purpose
373
char label_drive; /* Drive letter (-$A, -$B, etc.) */
374
char *strcpy_buf; /* allocated at main() */
375
unsigned char host_os; /* Host operating system of archive
376
and source files within it. */
377
char *out_buffer; /* Temporary storage of encoded data */
378
/* ARJ header storage area */
379
#if SFX_LEVEL>=ARJSFXV
382
char header[HEADERSIZE_MAX];
384
unsigned char byte_buf; /* Used for preserving the data read */
385
unsigned char subbitbuf; /* Backup storage */
386
int user_wants_fail; /* -1 if the user has manually
387
cancelled the operation */
388
int resume_volume_num; /* -jn volume number */
389
unsigned int ext_voldata; /* Size of additional (non-ARJ) data in
390
multivolume archives */
391
int out_avail; /* Number of available bytes in
393
int out_bytes; /* Number of bytes pending */
394
int total_chapters; /* Number of chapters in the file */
395
int chapter_to_process; /* Number of chapter to be processed */
396
int current_chapter; /* Chapter number of current file */
397
FILE_COUNT max_filenames; /* Initialized with 65000 by default */
398
unsigned int user_bufsiz; /* The "-jh" value */
399
unsigned int current_bufsiz; /* Size of the buffer, picked every time
400
when the compressor starts */
401
unsigned short bitbuf; /* Used directly in the decoding */
402
FILE *new_stderr; /* Indicates presence of STDERR
404
FILE *tstream; /* Any disk file */
406
FILE *idxstream; /* Index file */
408
#if SFX_LEVEL>=ARJSFXV
409
FILE *new_stdout; /* stdout or stderr */
411
FILE *atstream=NULL; /* Temporary handle */
413
FILE *aostream; /* Archive output file handle */
414
FILE *encstream; /* The file being encoded */
416
FILE *aistream; /* Archive input file handle */
417
#if SFX_LEVEL>=ARJSFXV
418
unsigned long FAR *arch_hdr_index; /* Contains offsets of archive files */
420
unsigned long last_hdr_offset; /* Offset of last archive header */
422
long search_occurences[SEARCH_STR_MAX]; /* Number of occurences of each search
423
pattern from search_str[] */
425
unsigned long ext_pos; /* Offset specified by -jx */
426
#if SFX_LEVEL>=ARJSFXV
427
unsigned long arcv_ext_pos; /* Offset specified by -2i */
429
long uncompsize; /* Size of the file on the disk */
430
unsigned long compsize; /* Size of compressed data */
431
unsigned long origsize; /* Size of the source file */
432
unsigned long av_uncompressed; /* Size of uncompressed data on all
434
unsigned long av_compressed; /* Size of compressed data on all
436
unsigned long total_size; /* Total size of all files to be
438
unsigned long total_written; /* Total size of all files that are
439
archived, excluding the current. */
440
unsigned long minfree; /* Minimal disk space for operation
442
struct timestamp tested_ftime_older; /* Time attribute for filtering (<) */
443
struct timestamp tested_ftime_newer; /* Time attribute for filtering (>=) */
444
unsigned long t_volume_offset; /* Offset of multivolume data */
445
unsigned long mv_reserve_space; /* Number of bytes to reserve on the
447
unsigned long volume_limit; /* Maximum volume size in bytes */
448
struct timestamp secondary_ftime; /* Used in rare occasions */
449
struct timestamp ftime_max; /* Most recent timestamp of files
450
contained within archive */
451
unsigned long disk_space_used; /* Space allocated for the files */
452
unsigned long total_compressed AUTOINIT;/* Total size of compressed data */
453
/* Total size of uncompressed data */
454
unsigned long total_uncompressed AUTOINIT;
455
unsigned long arjsec_offset; /* Offset of ARJ-security envelope */
456
unsigned long secured_size; /* Original size of ARJ-secured file */
457
unsigned long cur_header_pos; /* Offset of currently processed header
458
within the archive */
459
long main_hdr_offset; /* Offset of main archive header
461
#if SFX_LEVEL>=ARJSFXV
462
char FAR *tmp_filename; /* Backup copy of current filename */
464
unsigned long volume_crc; /* CRC kept for multivolume files */
465
struct timestamp volume_ftime; /* Multivolume ftime storage */
466
FILE *ofstream; /* -jw output file */
467
int recent_chapter; /* Chapter to be added, if any */
468
unsigned int alloc_unit_size; /* Size of allocation unit */
469
FILE_COUNT split_longnames; /* Number of cross-volume longnames */
470
FILE_COUNT total_longnames; /* Number of processed files with LFN */
471
FILE_COUNT total_files AUTOINIT; /* Number of processed files */
472
FILE_COUNT comment_entries; /* Number of filenames acting as
473
comment (e.g., chapter separators) */
474
int max_chapter; /* Maximum number of chapter found so
477
int force_volume_flag; /* 1 if the file will be marked with
478
VOLUME_FLAG even if it is not
480
int sfx_desc_word; /* Descriptive word of SFX */
481
int add_command; /* 1 if the current operation adds any
482
external files to the archive */
483
int order_command; /* An order command was issued */
485
int no_inarch; /* 1 if there's no input archive */
486
int modify_command; /* 1 if the current operation modifies
487
the archive contents */
488
unsigned int volume_number; /* .A0x, .Axx volume number */
489
int continued_nextvolume; /* 1 if the file continues on the next
490
volume (the VOLUME_FLAG is set ) */
491
int first_vol_passed; /* 1 once the first archive volume has
492
been fully processed */
493
int mvfile_type; /* Types of multi-volume files */
494
int continued_prevvolume; /* 1 if the resume_position must be
495
taken into account (indicates that
496
the file is split from a previous
498
#if SFX_LEVEL>=ARJSFXV
499
int encryption_applied; /* Encryption operation will occur */
501
int cmd_verb; /* ASCII code of the command issued
503
int security_state AUTOINIT; /* ARJSEC_* constants may be here */
504
int ansi_codepage; /* 1 if the archive filename is in the
506
int dual_name AUTOINIT; /* 1 if dual-name mode (long filename
507
is stored in the comment field, see
508
help on "-hf1" for details) */
509
unsigned long archive_size; /* Size of the whole archive, excluding
510
the two terminating 0's */
511
unsigned long resume_position; /* For multi-volume files, the number
513
unsigned long header_crc; /* CRC of current archive header */
514
unsigned long file_crc; /* CRC-32 of uncompressed file */
515
unsigned char chapter_number; /* Chapter number, 1 to 250. */
516
unsigned char ext_flags; /* Used for chapter number or extended
517
header flags storage */
518
unsigned short host_data; /* Used for chapter information */
519
unsigned short entry_pos; /* Entryname position in filename */
520
struct timestamp ctime_stamp; /* v 2.62+ - creation date/time */
521
struct timestamp atime_stamp; /* v 2.62+ - last access date/time */
522
struct timestamp ftime_stamp; /* Last modification date/time */
523
struct file_mode file_mode; /* File access mode bit-map */
524
unsigned int method; /* Packing method */
525
unsigned char arj_flags; /* Archive flags */
526
unsigned char arj_x_nbr; /* Minimum version to extract */
527
unsigned char arj_nbr; /* Archiver version number */
528
unsigned char first_hdr_size; /* Size of fixed-length header (30) */
529
unsigned int basic_hdr_size; /* Size of the basic (not extended)
531
char *hdr_comment; /* Comment stored in the header */
532
char *hdr_filename; /* Filename stored in the header */
533
/* Preallocated comment storage area */
534
#if SFX_LEVEL>=ARJSFXV
537
char comment[COMMENT_MAX];
539
int use_comment; /* Supply archive comment (-z) */
540
char filename[FILENAME_MAX]; /* Filename storage buffer */
541
struct file_properties properties; /* Properties of the current file */
542
int restart_at_filename; /* Restart volumes on filename (-jn) */
544
unsigned char pt_len[NPT]; /* Prefix table length */
545
unsigned short left[2*NC-1]; /* Huffman tree */
546
unsigned short right[2*NC-1]; /* Huffman tree */
547
unsigned char c_len[NC]; /* Character length */
548
unsigned short cpos; /* Position in out_buffer */
549
unsigned int bufsiz; /* Size of the Huffman buffer, specified
550
by "-jh" and adjusted afterwards */
552
#if SFX_LEVEL>=ARJSFXV
553
unsigned char *dec_text;
554
#elif !defined(REARJ)
555
unsigned char dec_text[DICSIZ];
557
/* The following is an ASR fix -- performance enhancement to 2.76.06 */
559
unsigned char *ntext; /* decode_f() non-volatile dictionary */
562
/* Missing or obsolete in original ARJ 2.62c */
564
#if SFX_LEVEL>=ARJSFXV
565
int error_occured; /* 1 if an error happened and ARJ must
568
int file_packing; /* 1 if uncompressed data is a file */
569
char FAR *encblock_ptr; /* Uncompressed data pointer */
570
char FAR *packblock_ptr; /* Compressed data pointer */
571
unsigned int encmem_remain; /* Amount of uncompressed data */
572
unsigned int packmem_remain; /* Amount of compressed data */
573
unsigned int encmem_limit; /* To prevent overruns */
574
#if SFX_LEVEL>=ARJSFXV
575
int ea_supported; /* Extended attributes support flag */
576
long ext_hdr_capacity; /* Number of RAW bytes to flush when
577
writing the extended header on the
578
current file portion. Must be
580
struct ext_hdr FAR *eh; /* Extended header */
581
unsigned int ea_size; /* Size of unpacked EAs */
583
int valid_ext_hdr; /* Specifies that the extended header
584
data can be processed */
585
char *exe_name; /* Name of executable invoked */
587
int arcmail_sw; /* ARCmail non-overwrite mode */
588
int dos_host; /* Use DOS as host OS under OS/2 */
589
struct priority priority; /* Selectable process priority */
590
int include_eas; /* EA inclusion filelist is present */
591
int exclude_eas; /* EA exclusion filelist is present */
592
int disable_comment_series; /* Apply comment to the 1st volume,
593
strip it for all others */
594
int skip_century; /* Skip centuries in list commands */
595
int fix_longnames; /* 1 if .LONGNAME EAs should be
596
resolved to filenames in headers */
597
int crit_eas; /* 1 if only critical EAs should
598
be packed/restored */
599
int symlink_accuracy; /* Restore symlink properties */
600
int do_chown; /* Query / set the file owner */
601
int suppress_hardlinks; /* Store the whole copies */
602
int recursion_order; /* Directory recursion order */
603
int encryption_id; /* Identifies encryption in header */
604
jmp_buf main_proc; /* Entry point of archive processing
610
#if SFX_LEVEL<=ARJSFXV
611
int valid_envelope AUTOINIT; /* 1 if the archive has a valid
612
ARJ-SECURITY envelope */
613
int skip_integrity_test AUTOINIT; /* Skip virus/security check (-a) */
614
int prompt_for_directory AUTOINIT; /* Prompt for directory (-b) */
615
int extract_expath AUTOINIT; /* Extract excluding paths (-e) */
616
int process_lfn_archive AUTOINIT; /* Process a Windows LFN archive (-j) */
617
int skip_preset_options; /* Skip preset SFX options (-k) */
618
int list_sfx_cmd AUTOINIT; /* List SFX contents (-l) */
619
int overwrite_ro; /* Overwrite read-only files */
620
int test_sfx_cmd AUTOINIT; /* Test archive (-t) */
621
int verbose_list AUTOINIT; /* Verbose list command (-v) */
622
int extract_cmd AUTOINIT; /* Default extract command (-x) */
623
#if SFX_LEVEL>=ARJSFXV
624
int skip_volumes; /* Skip over first volumes (-#) */
625
int first_volume_number; /* First volume to process */
627
int execute_extr_cmd AUTOINIT; /* Execute command upon extraction */
628
int skip_extract_query AUTOINIT; /* Skip file extraction query (-ym) */
629
char *extr_cmd_text; /* Command to be run */
630
unsigned short reg_id AUTOINIT; /* SFX registration signature */
631
int licensed_sfx AUTOINIT; /* Indicates a licensed (secured) SFX */
632
int logo_shown AUTOINIT; /* 1 once the ARJSFX logo is shown */
635
#if SFX_LEVEL<=ARJSFX
636
int make_directories AUTOINIT; /* 1 if directory creation is allowed */
637
int show_ansi_comments AUTOINIT; /* Display ANSI comments */
638
char *list_adapted_name; /* Filename used in listing */
639
int test_mode AUTOINIT; /* 1 if test_sfx_cmd was issued */
640
int sflist_args AUTOINIT; /* Simplified filelist -- # of args */
641
char *sflist[SFLIST_MAX]; /* Simplified filelist itself */
645
int redirected; /* 1 if STDOUT was redirected */
646
int no_colors; /* 1 if color output was disabled */
647
struct color_hl color_table[]={