~ubuntu-branches/ubuntu/precise/arj/precise-security

« back to all changes in this revision

Viewing changes to externs.c

  • Committer: Bazaar Package Importer
  • Author(s): Guillem Jover
  • Date: 2004-06-27 08:07:09 UTC
  • Revision ID: james.westby@ubuntu.com-20040627080709-1gkxm72ex66gkwe4
Tags: upstream-3.10.21
ImportĀ upstreamĀ versionĀ 3.10.21

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
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...
 
7
 *
 
8
 */
 
9
 
 
10
#include "arj.h"
 
11
 
 
12
DEBUGHDR(__FILE__)                      /* Debug information block */
 
13
 
 
14
/* Auto-initializing variables */
 
15
 
 
16
#if SFX_LEVEL>=ARJSFXV
 
17
 #define AUTOINIT
 
18
#else
 
19
 #define AUTOINIT =0
 
20
#endif
 
21
 
 
22
/* Shared data, mostly the duplicate strings */
 
23
 
 
24
char nullstr[]="";                      /* Used instead of "" */
 
25
char strform[]="%s";                    /* printf(strform, str) */
 
26
char path_separators[]=PATH_SEPARATORS;
 
27
#if TARGET!=UNIX
 
28
 char switch_chars[]="-/";
 
29
#else
 
30
 char switch_chars[]="-";
 
31
#endif
 
32
#if SFX_LEVEL>=ARJ
 
33
char cmd_ac[]="AC";                     /* Chapter commands */
 
34
char cmd_cc[]="CC";
 
35
char cmd_dc[]="DC";
 
36
char arjtemp_spec[]="ARJTEMP.$%02d";    /* For all temporary files created */
 
37
char le_prompt[]="%02d> ";              /* String entry prompt */
 
38
#endif
 
39
#if SFX_LEVEL>=ARJSFXV
 
40
char vd_space[]="  ";                   /* ...after the filename */
 
41
#endif
 
42
 
 
43
/* Exported data */
 
44
 
 
45
#if SFX_LEVEL>=ARJ||defined(REARJ)
 
46
 
 
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};
 
59
#endif
 
60
 
 
61
#if SFX_LEVEL>=ARJSFXV
 
62
struct flist_root flist_order;          /* Order of files */
 
63
struct flist_root flist_archive;        /* Archives to be processed */
 
64
#endif
 
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 */
 
68
#endif
 
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 */
 
72
#endif
 
73
#if SFX_LEVEL>=ARJ&&TARGET==UNIX
 
74
struct l_entries l_entries;
 
75
struct l_entries sl_entries;
 
76
#endif
 
77
int win32_platform;                     /* 1 if the archiver has been compiled
 
78
                                           for Win32 */
 
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
 
84
                                           (m_w command) */
 
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 */
 
90
#endif
 
91
#if SFX_LEVEL>=ARJ
 
92
int is_commercial;                      /* 1 if commercial version (in
 
93
                                           open-source world, means nothing) */
 
94
#endif
 
95
int lfn_supported AUTOINIT;             /* 1 if yes; set by detect_lfns */
 
96
int ext_hdr_flags;                      /* Extended flags, used in main ARJ
 
97
                                           archive header */
 
98
int file_garbled;                       /* 1 if the GARBLED_FLAG is set */
 
99
int arch_wildcard_allowed;              /* 1 if multiple archives can be
 
100
                                           processed */
 
101
int file_args AUTOINIT;                 /* Number of file arguments */
 
102
int volume_flag_set;                    /* 1 if the VOLUME_FLAG is set in the
 
103
                                           header */
 
104
#if SFX_LEVEL>=ARJ
 
105
int tmp_archive_used;                   /* Indicates that a temporary archive
 
106
                                           file was built */
 
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 */
 
111
#endif
 
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) */
 
117
#endif
 
118
#if SFX_LEVEL>=ARJ
 
119
int use_comment;                        /* Supply archive comment (-z) */
 
120
#endif
 
121
int assume_yes;                         /* -jy option presence flag */
 
122
int extract_to_file;                    /* Extract to a single file (-jw) */
 
123
#if SFX_LEVEL>=ARJ
 
124
int assign_work_directory;              /* Set temporary directory (-w) */
 
125
#endif
 
126
int multivolume_option;                 /* 1 if the "-v" switch is issued */
 
127
#if SFX_LEVEL>=ARJ
 
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 */
 
131
#endif
 
132
int verbose_display AUTOINIT;           /* State of verbose display (-jv) */
 
133
int update_criteria AUTOINIT;           /* Update option (-u), one of UC_* */
 
134
#if SFX_LEVEL>=ARJ
 
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. */
 
140
#endif
 
141
int skip_ts_check AUTOINIT;             /* Skip timestamp check (-c) */
 
142
#if SFX_LEVEL>=ARJ
 
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
 
147
                                           type of SFX) */
 
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) */
 
152
#endif
 
153
int keep_tmp_file;                      /* Keep unprocessed file */
 
154
#if SFX_LEVEL>=ARJ
 
155
int hollow_mode;                        /* Create "hollow" archives (-j#) */
 
156
int restart_at_filename;                /* Restart volumes on filename (-jn) */
 
157
#endif
 
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) */
 
162
#if SFX_LEVEL>=ARJ
 
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
 
167
                                           record */
 
168
int prot_blocks;                        /* # of ARJ-PROTECT blocks */
 
169
#endif
 
170
int arjdisp_enabled AUTOINIT;           /* 1 if the ARJ$DISP interface is
 
171
                                           enabled (-hp) */
 
172
int prompt_for_more;                    /* 1 if the user is to be prompted
 
173
                                           when scrolling */
 
174
#if SFX_LEVEL>=ARJ
 
175
int marksym_expansion;                  /* Toggles expansion (see MISC.C) */
 
176
#endif
 
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
 
197
                                           (-$) */
 
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
 
203
                                           (-hi) */
 
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 */
 
226
#if SFX_LEVEL>=ARJ
 
227
int start_with_seek;                    /* 1 if the -2i option was issued */
 
228
#endif
 
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
 
244
                                           filename (-h#) */
 
245
char *time_str;                         /* Time string to append */
 
246
int use_ansi_cp;                        /* Use ANSI codepage (-hy) */
 
247
#if SFX_LEVEL>=ARJ
 
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 */
 
250
#endif
 
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 */
 
264
#endif
 
265
#if SFX_LEVEL>=ARJSFXV
 
266
int use_sfxstub;                        /* Create multivolume stubbed
 
267
                                           packages */
 
268
#endif
 
269
#if SFX_LEVEL>=ARJ
 
270
int whole_files_in_mv;                  /* Store whole files in volumes (-vw) */
 
271
int pause_between_volumes;              /* Pause after completing volume
 
272
                                           (-vp) */
 
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 */
 
276
#endif
 
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) */
 
280
#endif
 
281
int std_list_cmd AUTOINIT;              /* 1 if the standard (non-verbose) list
 
282
                                           is requested */
 
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
 
290
                                           extraction */
 
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 */
 
306
#if SFX_LEVEL>=ARJ
 
307
FILE_COUNT split_files;                 /* Number of files that span across
 
308
                                           volumes */
 
309
#endif
 
310
#if SFX_LEVEL>=ARJ
 
311
FILE_COUNT FAR *order;                  /* Order of files */
 
312
int params_max;
 
313
char **f_arg_array;
 
314
#else
 
315
int order[PARAMS_MAX];
 
316
int params_max=PARAMS_MAX;
 
317
char *f_arg_array[PARAMS_MAX];          /* Array of filename arguments */
 
318
#endif
 
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
 
325
                                           boundaries */
 
326
#if SFX_LEVEL>=ARJ
 
327
char *search_str[SEARCH_STR_MAX];       /* Search patterns */
 
328
#endif
 
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
 
335
                                           files */
 
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 */
 
342
#ifndef REARJ
 
343
char *timestr_older;                    /* "-ob", "-oab", "-ocb" */
 
344
char *timestr_newer;                    /* "-o", "-ob", "-oc" */
 
345
#endif
 
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;
 
355
#else
 
356
char tmp_tmp_filename[FILENAME_MAX];
 
357
#endif
 
358
/* Archive filename with the extension added. */
 
359
#if SFX_LEVEL>=ARJSFXV
 
360
char *archive_name;
 
361
#else
 
362
char archive_name[FILENAME_MAX];
 
363
#endif
 
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
 
372
                                           buffer. */
 
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
 
380
char *header;
 
381
#else
 
382
char header[HEADERSIZE_MAX];
 
383
#endif
 
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
 
392
                                           out_buffer */
 
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
 
403
                                           re-route */
 
404
FILE *tstream;                          /* Any disk file */
 
405
#if SFX_LEVEL>=ARJ
 
406
FILE *idxstream;                        /* Index file */
 
407
#endif
 
408
#if SFX_LEVEL>=ARJSFXV
 
409
FILE *new_stdout;                       /* stdout or stderr */
 
410
#endif
 
411
FILE *atstream=NULL;                    /* Temporary handle */
 
412
#if SFX_LEVEL>=ARJ
 
413
FILE *aostream;                         /* Archive output file handle */
 
414
FILE *encstream;                        /* The file being encoded */
 
415
#endif
 
416
FILE *aistream;                         /* Archive input file handle */
 
417
#if SFX_LEVEL>=ARJSFXV
 
418
unsigned long FAR *arch_hdr_index;      /* Contains offsets of archive files */
 
419
#endif
 
420
unsigned long last_hdr_offset;          /* Offset of last archive header */
 
421
#if SFX_LEVEL>=ARJ
 
422
long search_occurences[SEARCH_STR_MAX]; /* Number of occurences of each search
 
423
                                           pattern from search_str[] */
 
424
#endif
 
425
unsigned long ext_pos;                  /* Offset specified by -jx */
 
426
#if SFX_LEVEL>=ARJSFXV
 
427
unsigned long arcv_ext_pos;             /* Offset specified by -2i */
 
428
#endif
 
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
 
433
                                           volumes */
 
434
unsigned long av_compressed;            /* Size of compressed data on all
 
435
                                           volumes */
 
436
unsigned long total_size;               /* Total size of all files to be
 
437
                                           archived */
 
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
 
441
                                           (-jdxxx) */
 
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
 
446
                                           first volume */
 
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
 
460
                                           (nonzero in SFX) */
 
461
#if SFX_LEVEL>=ARJSFXV
 
462
char FAR *tmp_filename;                 /* Backup copy of current filename */
 
463
#endif
 
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
 
475
                                           far */
 
476
#if SFX_LEVEL>=ARJ
 
477
int force_volume_flag;                  /* 1 if the file will be marked with
 
478
                                           VOLUME_FLAG even if it is not
 
479
                                           multi-volume */
 
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 */
 
484
#endif
 
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
 
497
                                           volume) */
 
498
#if SFX_LEVEL>=ARJSFXV
 
499
int encryption_applied;                 /* Encryption operation will occur */
 
500
#endif
 
501
int cmd_verb;                           /* ASCII code of the command issued
 
502
                                           (uppercase) */
 
503
int security_state AUTOINIT;            /* ARJSEC_* constants may be here */
 
504
int ansi_codepage;                      /* 1 if the archive filename is in the
 
505
                                           ANSI codepage. */
 
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
 
512
                                           of bytes to skip. */
 
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)
 
530
                                           header */
 
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
 
535
char FAR *comment;
 
536
#else
 
537
char comment[COMMENT_MAX];
 
538
#endif
 
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) */
 
543
#ifndef REARJ
 
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 */
 
551
#endif
 
552
#if SFX_LEVEL>=ARJSFXV
 
553
unsigned char *dec_text;
 
554
#elif !defined(REARJ)
 
555
unsigned char dec_text[DICSIZ];
 
556
#endif
 
557
/* The following is an ASR fix -- performance enhancement to 2.76.06 */
 
558
#if SFX_LEVEL>=ARJ
 
559
unsigned char *ntext;                   /* decode_f() non-volatile dictionary */
 
560
#endif
 
561
 
 
562
/* Missing or obsolete in original ARJ 2.62c */
 
563
 
 
564
#if SFX_LEVEL>=ARJSFXV
 
565
int error_occured;                      /* 1 if an error happened and ARJ must
 
566
                                           exit. */
 
567
#endif
 
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
 
579
                                           SIGNED! */
 
580
struct ext_hdr FAR *eh;                 /* Extended header */
 
581
unsigned int ea_size;                   /* Size of unpacked EAs */
 
582
#endif
 
583
int valid_ext_hdr;                      /* Specifies that the extended header
 
584
                                           data can be processed */
 
585
char *exe_name;                         /* Name of executable invoked */
 
586
#if SFX_LEVEL>=ARJ
 
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
 
605
                                           loop */
 
606
#endif
 
607
 
 
608
/* ARJSFX data */
 
609
 
 
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 */
 
626
#endif
 
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 */
 
633
#endif
 
634
 
 
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 */
 
642
#endif
 
643
 
 
644
#ifdef COLOR_OUTPUT
 
645
int redirected;                         /* 1 if STDOUT was redirected */
 
646
int no_colors;                          /* 1 if color output was disabled */
 
647
struct color_hl color_table[]={
 
648
                               {7, 'n'},
 
649
                               {10, 'o'},
 
650
                               {2, 'h'},
 
651
                               {15, 's'},
 
652
                               {12, 'a'},
 
653
                               {3, 'p'},
 
654
                               {0, 0}
 
655
                              };
 
656
#endif