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