/*                                 GLOBALS.H                               */

/* Global variables used by the linker in approximate alphabetical order.  */

bit_32                                 address_base;
bit_32                                 align_mask[6]=
                                        {0L, 0L, 1L, 15L, 255L, 3L};
boolean_switch_type                    align_exe_header = {True};
char                                  *align_text[6]=
                                        {"Absolute",
                                         "Byte",
                                         "Word",
                                         "Paragraph",
                                         "Page",
                                         "Dword"};
segment_entry_ptr                      active_segment;
#define Active_segment                 (*active_segment)
string_ptr                             ampersand_string;
string_ptr                             and_string;
string_ptr                             at_string;
string_ptr                             backslash_dot_string;
string_ptr                             backslash_dot_dot_string;
string_ptr                             backslash_string;
string_ptr                             bar_string;
lname_entry_ptr                        BSS_lname;
bit_16_switch_type                     buffer_size = 
                                        {0x8000, 512, 0xFE00, 0x8000, False};
lname_entry_ptr                        c_common_lname;
boolean_switch_type                    case_ignore = {True};
string_ptr                             class_string;
string_ptr                             close_paren_string;
string_ptr                             close_angle_string;
lname_entry_ptr                        codeview_class_DEBSYM;
lname_entry_ptr                        codeview_class_DEBTYP;
bit_16                                 codeview_information_present = False;
lname_entry_ptr                        codeview_segment_SYMBOLS;
lname_entry_ptr                        codeview_segment_TYPES;
string_ptr                             colon_string;
string_ptr                             com_extension_string;
char                                  *combine_text[10]=
                                        {"Private",
                                         "Undefined",
                                         "Public",
                                         "Undefined",
                                         "Public",
                                         "Stack",
                                         "Common",
                                         "Public"
                                         "Undefined",
                                         "Blank Common"};
boolean_switch_type                    comfile = {False};
string_ptr                             comma_string;
bit_16_switch_type                     CPARMAXALLOC =
                                        {0xFFFF, 0x0, 0xFFFF, 0xFFFF, False};
string_ptr                             current_filename;
string_ptr                             current_path;
obj_record_header_ptr                  current_record_header;
#define Current_record_header          (*current_record_header)
bit_32                                 current_record_offset;
string_ptr                             default_directory_string;
string_ptr                             default_drive_string;
string_ptr                             default_extension;
string_ptr                             default_filename;
char_ptr                               default_prompt;
bit_16_switch_type                     detail_level = 
                                        {0, 0, 5, 0, False};
string_ptr                             device_AUX;
string_ptr                             device_CON;
string_ptr                             device_PRN;
lname_entry_ptr                        DGROUP_lname;
boolean_switch_type                    DOSSEG = {False};
string_ptr                             dot_string;
DTA_ptr                                DTA;
pool_descriptor_type                   dynamic_pool;
segment_entry_ptr                      edata_segment = Null;
obj_ptr_type                           end_of_record;
obj_ptr_type                           end_of_last_LIDATA_record;
segment_entry_ptr                      end_segment = Null;
string_ptr                             env_extension_string;
string_ptr                             exclamation_string;
string_ptr                             exe_extension_string;
file_info_list                         exe_file_list = {Null, Null};
EXE_header_ptr                         exe_header;
#define Exe_header                     (*exe_header)
bit_32                                 exe_header_size;
bit_32                                 exec_image_start_time;
boolean_switch_type                    exechecksum = {False};
bit_16                                 exefile;
public_entry_list                      external_list = {Null, Null};
public_entry_ptr_array                 externals;
string_ptr                             false_string;
lname_entry_ptr                        FAR_BSS_lname;
public_entry_ptr                       far_communals = Null;
fixup_type                             fixup;
bit_16                                 FIXUPP_contains_only_threads;
bit_16                                 fixup_index;
bit_32                                 fixup_start_time;
bit_16                                 frame_absolute;
thread_type                            frame_thread[4];
pool_descriptor_type                   free_pool;
lname_entry_ptr                        generated_lname;
group_entry_ptr_array                  gnames;
group_entry_ptr_array                  group_hash_table;
group_entry_list                       group_list = {Null, Null};
bit_16_switch_type                     group_table_hash_size = 
                                          {25, 1, 1023, 25, False};
string_ptr                             group_string;
boolean_switch_type                    help;
string_ptr                             help_extension_string;
string_ptr                             help_filename;
bit_32                                 highest_uninitialized_byte;
lname_entry_ptr                        HUGE_BSS_lname;
public_entry_ptr                       huge_communals = Null;
file_type                              infile;
byte_ptr                               infile_buffer;
bit_16                                 initial_IP = 0;
bit_16                                 initial_CS = 0;
union REGS                             inregs;
segment_entry_ptr                      largest_stack_seg;
#define Largest_stack_seg              (*largest_stack_seg)
bit_32                                 largest_stack_seg_length;
lseg_ptr                               last_LxDATA_lseg;
#define last_LxDATA_Lseg               (*last_LxDATA_lseg)
bit_16                                 last_LxDATA_offset;
bit_8                                  last_LxDATA_record_type;
obj_record_header_ptr                  last_LIDATA_record_header;
#define Last_LIDATA_record_header      (*last_LIDATA_record_header)
bit_8                                  last_LIDATA_record[MAX_ELEMENT_SIZE];
string_ptr                             lib_extension_string;
file_info_list                         lib_file_list = {Null, Null};
bit_32                                 library_directory_start_time;
bit_32                                 library_processing_start_time;
bit_16                                 library_request_count = 0;
bit_16                                 LIDATA_index;
bit_16                                 LIDATA_offset;
bit_16                                 link_step = 0;
bit_32                                 linker_end_time;
bit_32                                 linker_start_time;
lname_entry_ptr_array                  lname_hash_table;
bit_16_switch_type                     lname_table_hash_size = 
                                        {25, 1, 1023, 25, False};
lname_entry_ptr_array                  lnames;
byte_ptr                               lseg_data_ptr;
string_ptr                             lst_extension_string;
file_info_list                         lst_file_list = {Null, Null};
bit_16_switch_type                     map =
                                        {2048, 1, 16384, 2048, False};
bit_32                                 map_start_time;
bit_16_switch_type                     max_externals = 
                                        {512, 1, 1024, 512, False};
bit_16_switch_type                     max_groups = 
                                        {32, 1, 1024, 32, False};
bit_16_switch_type                     max_lnames = 
                                        {512, 1, 1024, 512, False};
bit_16_switch_type                     max_segments = 
                                        {128, 1, 1024, 128, False};
string_ptr                             minus_string;
char                                  *mode_text[2]=
                                        {"Self-relative",
                                         "Segment-relative"};
bit_16                                 more_tokens;
bit_16                                 n_externals;
bit_16                                 n_groups;
bit_16                                 n_lnames;
bit_16                                 n_publics = 0;
bit_16                                 n_publics_to_sort;
bit_16                                 n_relocation_items = 0;
bit_16                                 n_segments;
public_entry_ptr                       near_communals = Null;
bit_32                                 next_available_address;
string_ptr                             next_token;
lname_entry_ptr                        none_lname;
string_ptr                             not_string;
string_ptr                             null_string;
string_ptr                             obj_extension_string;
file_info_list                         obj_file_list = {Null, Null};
obj_ptr_type                           obj_ptr;
boolean_switch_type                    objchecksum = {False};
byte                                   object_file_element[MAX_ELEMENT_SIZE];
bit_32                                 object_module_start_time;
DTA_ptr                                old_DTA;
string_ptr                             open_angle_string;
string_ptr                             open_paren_string;
string_ptr                             or_string;
byte_ptr                               order_expression_char_ptr;
bit_32                                 order_start_time;
text_switch_type                       ordering = {Null};
file_type                              outfile;
byte_ptr                               outfile_buffer;
union REGS                             outregs;
bit_16_switch_type                     pack_code =
                                        {0xFFFA, 1, 0xFFFF, 0xFFFA, False};
string_ptr                             parm_string;
boolean_switch_type                    pause = {False};
string_ptr                             plus_string;
string_ptr                             program_directory_string;
bit_16                                 prompting_for;
bit_16                                 prompt_next_stdin = False;
public_entry_ptr_array                 public_hash_table;
bit_16_switch_type                     public_table_hash_size =
                                        {525, 1, 1023, 525, False};
public_entry_ptr_array                 public_sort_array;
bit_32                                 secondary_init_start_time;
segment_entry_ptr_array                segment_hash_table;
segment_entry_list                     segment_list = {Null, Null};
string_ptr                             segment_string;
bit_16_switch_type                     segment_table_hash_size =
                                        {25, 1, 1023, 25, False};
segment_entry_list                     segments_ordered_list;
segment_entry_list                     segments_unordered_list;
struct SREGS                           segregs;
string_ptr                             semicolon_string;
lseg_ptr_array                         snames;
string_ptr                             space_string;
bit_16_switch_type                     stack =
                                        {0, 0, 0xFFFF, 0, False};
lname_entry_ptr                        STACK_lname;
bit_16                                 stack_segment_found = False;
string_ptr                             star_string;
fixup_type                             start_address;
bit_16                                 start_address_found = False;
pool_descriptor_type                   static_pool;
boolean_switch_type                    statistics = {False};
bit_32                                 statistics_start_time;
bit_32                                 step_time;
string_ptr                             sys_extension_string;
boolean_switch_type                    sysfile = {False};
thread_type                            target_thread[4];
file_info_ptr                          temp_file;
text_switch_type                       temp_filename = {Null};
byte                                   temp_near_string[TEMP_STRING_SIZE];
string_ptr                             temp_string;
temp_file_header_type                  temp_file_header;
string_ptr                             tilde_string;
char                                   time_array[16];
lname_entry_ptr                        tmodule_name;
bit_16                                 tmodule_number = 0;
string_ptr                             token;
byte                                   token_break_char;
bit_16                                 token_is_number;
bit_16                                 token_is_hex_number;
bit_16                                 token_numeric_value;
token_stack_list                       token_stack = {Null, Null};
token_stack_list                       token_stack_free_list = {Null, Null};
token_stack_ptr                        token_stack_member;
token_class_type                       token_type;
bit_32                                 total_time;
string_ptr                             true_string;
char                                  *type_text[5]=
                                        {"Low Byte",
                                         "Offset",
                                         "Base",
                                         "Pointer",
                                         "High Byte"};
bit_32                                 user_input_start_time;

char                                  *DOS_error_text[] =
{
                              "End of file",                         /* 00 */
                              "Invalid function",                    /* 01 */
                              "File not found",                      /* 02 */
                              "Path not found",                      /* 03 */
                              "No handles available",                /* 04 */
                              "Access denied",                       /* 05 */
                              "Invalid handle",                      /* 06 */
                              "Memory control blocks destroyed",     /* 07 */
                              "Insufficient memory",                 /* 08 */
                              "Invalid memory block address",        /* 09 */
                              "Invalid environment",                 /* 0A */
                              "Invalid format",                      /* 0B */
                              "Invalid access code",                 /* 0C */
                              "Invalid data",                        /* 0D */
                              "Reserved",                            /* 0E */
                              "Invalid drive",                       /* 0F */
                              "Attempt to remove current directory", /* 10 */
                              "Not the same device",                 /* 11 */
                              "No more file",                        /* 12 */
                              "Disk write-protected",                /* 13 */
                              "Unknown unit",                        /* 14 */
                              "Drive not ready",                     /* 15 */
                              "Unknown command",                     /* 16 */
                              "CRC error",                           /* 17 */
                              "Bad request structure length",        /* 18 */
                              "Seek error",                          /* 19 */
                              "Unknown media type",                  /* 1A */
                              "Sector not found",                    /* 1B */
                              "Out of paper",                        /* 1C */
                              "Write fault",                         /* 1D */
                              "Read fault",                          /* 1E */
                              "General failure",                     /* 1F */
                              "Sharing violation",                   /* 20 */
                              "Lock violation",                      /* 21 */
                              "Invalid disk change"                  /* 22 */
                              "FCB unavailable",                     /* 23 */
                              "Sharing buffer overflow",             /* 24 */
                              "Reserved",                            /* 25 */
                              "Reserved",                            /* 26 */
                              "Reserved",                            /* 27 */
                              "Reserved",                            /* 28 */
                              "Reserved",                            /* 29 */
                              "Reserved",                            /* 2A */
                              "Reserved",                            /* 2B */
                              "Reserved",                            /* 2C */
                              "Reserved",                            /* 2D */
                              "Reserved",                            /* 2E */
                              "Reserved",                            /* 2F */
                              "Reserved",                            /* 30 */
                              "Reserved",                            /* 31 */
                              "Network request not supported",       /* 32 */
                              "Remote computer not listening",       /* 33 */
                              "Duplicate name on network",           /* 34 */
                              "Network name not found",              /* 35 */
                              "Network busy",                        /* 36 */
                              "Network device no longer exists",     /* 37 */
                              "Net BIOS command limit exceeded",     /* 38 */
                              "Network adapter error",               /* 39 */
                              "Incorrect network response",          /* 3A */
                              "Unexpected network error",            /* 3B */
                              "Incompatible remote adapter",         /* 3C */
                              "Print queue full",                    /* 3D */
                              "Not enough space for print file",     /* 3E */
                              "Print file deleted",                  /* 3F */
                              "Network name deleted",                /* 40 */
                              "Access denied",                       /* 41 */
                              "Network device type incorrect",       /* 42 */
                              "Network name not found",              /* 43 */
                              "Network name limit exceeded",         /* 44 */
                              "Net BIOS session limit exceeded",     /* 45 */
                              "Temporarily paused",                  /* 46 */
                              "Network request not accepted",        /* 47 */
                              "Print or disk redirection is paused", /* 48 */
                              "Reserved",                            /* 49 */
                              "Reserved",                            /* 4A */
                              "Reserved",                            /* 4B */
                              "Reserved",                            /* 4C */
                              "Reserved",                            /* 4D */
                              "Reserved",                            /* 4E */
                              "Reserved",                            /* 4F */
                              "File already exists",                 /* 50 */
                              "Reserved",                            /* 51 */
                              "Cannot make directory",               /* 52 */
                              "Fail on Int 24",                      /* 53 */
                              "Too many redirections",               /* 54 */
                              "Duplicate redirection",               /* 55 */
                              "Invalid password",                    /* 56 */
                              "Invalid parameter",                   /* 57 */
                              "Network data fault",                  /* 58 */
                              "Invalid error code returned from DOS" /* 59 */
                             };

switch_table_type                      switch_table[] =
{
 {2, "ah",  "alignexeheader",  &align_exe_header,        scan_set_switch},
 {2, "bsz", "buffersize",      &buffer_size,             scan_bit_16_switch},
 {2, "ci",  "caseignore",      &case_ignore,             scan_set_switch},
 {2, "co",  "comfile",         &comfile,                 scan_set_switch},
 {2, "cp",  "cparmaxalloc",    &CPARMAXALLOC,            scan_bit_16_switch},
 {2, "det", "detaillevel",     &detail_level,            scan_bit_16_switch},
 {2, "do",  "dosseg",          &DOSSEG,                  scan_set_switch},
 {2, "ex",  "exechecksum",     &exechecksum,             scan_set_switch},
 {2, "ghs", "grouphashsize",   &group_table_hash_size,   scan_bit_16_switch},
 {2, "hlp", "help",            &help,                    scan_help_switch},
 {2, "lhs", "lnamehashsize",   &lname_table_hash_size,   scan_bit_16_switch},
 {3, "mp",  "map",             &map,                     scan_opt_bit_16},
 {4, "mex", "maxexternals",    &max_externals,           scan_bit_16_switch},
 {4, "mgp", "maxgroups",       &max_groups,              scan_bit_16_switch},
 {4, "mln", "maxlnames",       &max_lnames,              scan_bit_16_switch},
 {4, "msg", "maxsegments",     &max_segments,            scan_bit_16_switch},
 {4, "nah", "noalignexeheader",&align_exe_header,        scan_reset_switch},
 {4, "nci", "nocaseignore",    &case_ignore,             scan_reset_switch},
 {4, "nco", "nocomfile",       &comfile,                 scan_reset_switch},
 {4, "ndo", "nodosseg",        &DOSSEG,                  scan_reset_switch},
 {4, "nex", "noexechecksum",   &exechecksum,             scan_reset_switch},
 {4, "nmp", "nomap",           &map,                     scan_reset_bit_16},
 {4, "nob", "noobjchecksum",   &objchecksum,             scan_reset_switch},
 {5, "npc", "nopackcode",      &pack_code,               scan_reset_bit_16},
 {5, "npa", "nopause",         &pause,                   scan_reset_switch},
 {4, "nsy", "nosysfile",       &sysfile,                 scan_reset_switch},
 {4, "nst", "nostatistics",    &statistics,              scan_reset_switch},
 {2, "ob",  "objchecksum",     &objchecksum,             scan_set_switch},
 {2, "ord", "order",           &ordering,                scan_text_switch},
 {3, "pac", "packcode",        &pack_code,               scan_opt_bit_16},
 {3, "pa",  "pause",           &pause,                   scan_set_switch},
 {2, "phs", "publichashsize",  &public_table_hash_size,  scan_bit_16_switch},
 {2, "shs", "segmenthashsize", &segment_table_hash_size, scan_bit_16_switch},
 {4, "stk", "stack",           &stack,                   scan_bit_16_switch},
 {2, "sts", "statistics",      &statistics,              scan_set_switch},
 {2, "sy",  "sysfile",         &sysfile,                 scan_set_switch},
 {2, "tmp", "tempfile",        &temp_filename,           scan_text_switch},
 {0, Null,  Null,              Null,                     Null}
};
