/*-
******************************************************************************
******************************************************************************
**
**  MODULE
**
**      file: gblvars.h
**
**  DESCRIPTION
**
**      A 32-bit implementation of BibTeX v0.99c for MS-DOS, OS/2 2.x, 
**      Unix and VMS.  This C language implementation is based on the 
**      original WEB source but it has been enhanced to support 8-bit input
**      characters and a very large processing capacity.
**
**      For documentation describing how to use and build this program, 
**      see the 00README.TXT file that accompanies this distribution.
**
**  MODULE CONTENTS
**
**      This module contains the declarations for all of the global
**      variables used by BibTeX.  This module must be included by all of
**      the .C modules.  The variables are declared in alphabetical order.
**
**  AUTHORS
**
**      Original WEB translation to C, conversion to "big" (32-bit) capacity,
**      addition of run-time selectable capacity and 8-bit support extensions
**      by:
**
**          Niel Kempson
**          Snowy Owl Systems Limited, Cheltenham, England
**          E-mail: kempson@snowyowl.co.uk
**      
**      8-bit support extensions also by:
**
**          Alejandro Aguilar-Sierra
**          Centro de Ciencias de la Atm\'osfera, 
**          Universidad Nacional Aut\'onoma de M\'exico, M\'exico
**          E-mail: asierra@servidor.unam.mx
**
**  COPYRIGHT
**
**      This implementation copyright (c) 1991-1995 by Niel Kempson
**           and copyright (c) 1995 by Alejandro Aguilar-Sierra.
**
**      This program is free software; you can redistribute it and/or
**      modify it under the terms of the GNU General Public License as
**      published by the Free Software Foundation; either version 1, or
**      (at your option) any later version.
**
**      This program is distributed in the hope that it will be useful,
**      but WITHOUT ANY WARRANTY; without even the implied warranty of
**      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
**      General Public License for more details.
**
**      You should have received a copy of the GNU General Public License
**      along with this program; if not, write to the Free Software
**      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**
**      In other words, you are welcome to use, share and improve this
**      program.  You are forbidden to forbid anyone else to use, share
**      and improve what you give them.  Help stamp out software-hoarding!
**
**  ACKNOWLEDGEMENT
**      
**      The original BibTeX was written by Oren Patashnik using Donald 
**      Knuth's WEB system.  This format produces a PASCAL program for 
**      execution and a TeX documented version of the source code. This 
**      program started as a (manual) translation of the WEB source into C.
**  
**  CHANGE LOG
**
**      $Log: gblvars.h,v $
**      Revision 3.71  1996/08/18  20:47:30  kempson
**      Official release 3.71 (see HISTORY file for details).
**
**      Revision 3.70  1996/04/08  10:08:40  kempson
**      Final documentation & cosmetic changes for official release 3.70.
**
**      Revision 3.6  1995/10/21  22:18:36  kempson
**      Added flag to support --wolfgang option.
**
**      Revision 3.5  1995/09/24  20:44:37  kempson
**      Many changes for final beta test version.
**
**      Revision 3.4  1995/04/09  22:15:45  kempson
**      Placed under RCS control
**
******************************************************************************
******************************************************************************
*/
#ifndef __GBLVARS_H__
# define __GBLVARS_H__              1


/*-
**----------------------------------------------------------------------------
** If this file is included by BIBTEX.C, declare all of the variables,
** otherwise just reference them as extern.
**----------------------------------------------------------------------------
*/
#ifdef  __BIBTEX_C__
# define __EXTERN__
#else                           /* NOT __BIBTEX_C__ */
# define __EXTERN__                 extern
#endif                          /* __BIBTEX_C__ */


__EXTERN__ Boolean_T                    all_entries;
__EXTERN__ CiteNumber_T                 all_marker;
__EXTERN__ Boolean_T                    alpha_found;
__EXTERN__ Boolean_T                    and_found;
__EXTERN__ Boolean_T                    at_bib_command;
__EXTERN__ LongJumpBuf_T                Aux_Done_Flag;
__EXTERN__ Integer_T                    aux_name_length;
__EXTERN__ AuxNumber_T                  aux_ptr;

__EXTERN__ HashLoc_T                    b_add_period;
__EXTERN__ HashLoc_T                    b_bit_and;
__EXTERN__ HashLoc_T                    b_bit_or;
__EXTERN__ HashLoc_T                    b_call_type;
__EXTERN__ HashLoc_T                    b_change_case;
__EXTERN__ HashLoc_T                    b_chr_to_int;
__EXTERN__ HashLoc_T                    b_cite;
__EXTERN__ HashLoc_T                    b_concatenate;
__EXTERN__ HashLoc_T                    b_default;
__EXTERN__ HashLoc_T                    b_duplicate;
__EXTERN__ HashLoc_T                    b_empty;
__EXTERN__ HashLoc_T                    b_equals;
__EXTERN__ HashLoc_T                    b_format_name;
__EXTERN__ HashLoc_T                    b_gets;
__EXTERN__ HashLoc_T                    b_greater_than;
__EXTERN__ HashLoc_T                    b_if;
__EXTERN__ HashLoc_T                    b_int_to_chr;
__EXTERN__ HashLoc_T                    b_int_to_str;
__EXTERN__ HashLoc_T                    b_less_than;
__EXTERN__ HashLoc_T                    b_minus;
__EXTERN__ HashLoc_T                    b_missing;
__EXTERN__ HashLoc_T                    b_newline;
__EXTERN__ HashLoc_T                    b_num_names;
__EXTERN__ HashLoc_T                    b_plus;
__EXTERN__ HashLoc_T                    b_pop;
__EXTERN__ HashLoc_T                    b_preamble;
__EXTERN__ HashLoc_T                    b_purify;
__EXTERN__ HashLoc_T                    b_quote;
__EXTERN__ HashLoc_T                    b_skip;
__EXTERN__ HashLoc_T                    b_stack;
__EXTERN__ HashLoc_T                    b_substring;
__EXTERN__ HashLoc_T                    b_swap;
__EXTERN__ HashLoc_T                    b_text_length;
__EXTERN__ HashLoc_T                    b_text_prefix;
__EXTERN__ HashLoc_T                    b_top_stack;
__EXTERN__ HashLoc_T                    b_type;
__EXTERN__ HashLoc_T                    b_warning;
__EXTERN__ HashLoc_T                    b_while;
__EXTERN__ HashLoc_T                    b_width;
__EXTERN__ HashLoc_T                    b_write;
#ifdef UTF_8
__EXTERN__ HashLoc_T                    b_cjk_string;
#endif
__EXTERN__ Integer_T                    bad;
__EXTERN__ AlphaFile_T                  bbl_file;
__EXTERN__ Integer_T                    bbl_line_num;
__EXTERN__ Integer_T                    bib_brace_level;
__EXTERN__ Integer_T                    bib_line_num;
__EXTERN__ BibNumber_T                  bib_ptr;
__EXTERN__ Boolean_T                    bib_seen;
__EXTERN__ Integer_T                    brace_level;
__EXTERN__ LongJumpBuf_T                Bst_Done_Flag;
__EXTERN__ AlphaFile_T                  bst_file;
__EXTERN__ Integer_T                    bst_line_num;
__EXTERN__ Boolean_T                    bst_seen;
__EXTERN__ StrNumber_T                  bst_str;
__EXTERN__ BufPointer_T                 buf_ptr1;
__EXTERN__ BufPointer_T                 buf_ptr2;
#ifdef KPATHSEA
__EXTERN__ Integer_T                    max_print_line;
#endif

__EXTERN__ Boolean_T                    citation_seen;
__EXTERN__ Boolean_T                    cite_found;
__EXTERN__ Boolean_T                    cite_hash_found;
__EXTERN__ HashLoc_T                    cite_loc;
__EXTERN__ CiteNumber_T                 cite_parent_ptr;
__EXTERN__ CiteNumber_T                 cite_ptr;
__EXTERN__ CiteNumber_T                 cite_xptr;
__EXTERN__ LongJumpBuf_T                Close_Up_Shop_Flag;
__EXTERN__ StrNumber_T                  cmd_str_ptr;
__EXTERN__ BufPointer_T                 comma1;
__EXTERN__ BufPointer_T                 comma2;
__EXTERN__ Char_T                     **command_line_arg_strings;
__EXTERN__ Integer_T                    command_num;
__EXTERN__ HashLoc_T                    control_seq_loc;
__EXTERN__ Integer8_T                   conversion_type;
__EXTERN__ FieldLoc_T                   crossref_num;
__EXTERN__ HashLoc_T                    cur_macro_loc;
__EXTERN__ BufPointer_T                 cur_token;

__EXTERN__ Boolean_T                    double_letter;
__EXTERN__ HashLoc_T                    dummy_loc;

__EXTERN__ Boolean_T                    end_of_group;
__EXTERN__ Integer_T                    ent_chr_ptr;
__EXTERN__ CiteNumber_T                 entry_cite_ptr;
__EXTERN__ Boolean_T                    entry_seen;
__EXTERN__ HashLoc_T                    entry_type_loc;
__EXTERN__ Integer_T                    err_count;
__EXTERN__ BufPointer_T                 ex_buf_length;
__EXTERN__ BufPointer_T                 ex_buf_ptr;
__EXTERN__ BufPointer_T                 ex_buf_xptr;
__EXTERN__ BufPointer_T                 ex_buf_yptr;
__EXTERN__ LongJumpBuf_T                Exit_Program_Flag;

__EXTERN__ FieldLoc_T                   field_end_ptr;
__EXTERN__ HashLoc_T                    field_name_loc;
__EXTERN__ FieldLoc_T                   field_parent_ptr;
__EXTERN__ FieldLoc_T                   field_ptr;
__EXTERN__ HashLoc_T                    field_val_loc;
__EXTERN__ BufPointer_T                 first_end;
__EXTERN__ BufPointer_T                 first_start;
__EXTERN__ HashLoc_T                    fn_loc;

__EXTERN__ Integer_T                    glob_chr_ptr;

__EXTERN__ Boolean_T                    hash_found;
__EXTERN__ Integer16_T                  hash_used;
__EXTERN__ Integer8_T                   history;

__EXTERN__ Integer_T                    impl_fn_num;
__EXTERN__ IntEntLoc_T                  int_ent_ptr;

__EXTERN__ BufPointer_T                 jr_end;

__EXTERN__ BufPointer_T                 last;
__EXTERN__ BufPointer_T                 last_end;
__EXTERN__ BufPointer_T                 last_token;
__EXTERN__ HashLoc_T                    lc_cite_loc;
__EXTERN__ HashLoc_T                    lc_xcite_loc;
__EXTERN__ HashLoc_T                    literal_loc;
__EXTERN__ LitStkLoc_T                  lit_stk_ptr;
__EXTERN__ AlphaFile_T                  log_file;

__EXTERN__ HashLoc_T                    macro_def_loc;
__EXTERN__ HashLoc_T                    macro_name_loc;
__EXTERN__ Boolean_T                    mess_with_entries;

__EXTERN__ BufPointer_T                 name_bf_ptr;
__EXTERN__ BufPointer_T                 name_bf_xptr;
__EXTERN__ BufPointer_T                 name_bf_yptr;
__EXTERN__ Integer_T                    name_length;
__EXTERN__ Integer_T                    name_ptr;
__EXTERN__ Integer_T                    nm_brace_level;
__EXTERN__ Boolean_T                    no_fields;
__EXTERN__ BibNumber_T                  num_bib_files;
__EXTERN__ CiteNumber_T                 num_cites;
__EXTERN__ BufPointer_T                 num_commas;
__EXTERN__ IntEntLoc_T                  num_ent_ints;
__EXTERN__ StrEntLoc_T                  num_ent_strs;
__EXTERN__ FieldLoc_T                   num_fields;
__EXTERN__ Integer8_T                   num_glb_strs;
__EXTERN__ Integer_T                    num_names;
__EXTERN__ BibNumber_T                  num_preamble_strings;
__EXTERN__ FieldLoc_T                   num_pre_defined_fields;
__EXTERN__ BufPointer_T                 num_text_chars;
__EXTERN__ BufPointer_T                 num_tokens;
__EXTERN__ Integer8_T                   number_of_command_line_args;

__EXTERN__ CiteNumber_T                 old_num_cites;
__EXTERN__ BufPointer_T                 out_buf_length;
__EXTERN__ BufPointer_T                 out_buf_ptr;

__EXTERN__ PoolPointer_T                pool_ptr;
__EXTERN__ Integer_T                    pop_lit1;
__EXTERN__ Integer_T                    pop_lit2;
__EXTERN__ Integer_T                    pop_lit3;
__EXTERN__ StkType_T                    pop_typ1;
__EXTERN__ StkType_T                    pop_typ2;
__EXTERN__ StkType_T                    pop_typ3;
__EXTERN__ PoolPointer_T                p_ptr1;
__EXTERN__ PoolPointer_T                p_ptr2;
__EXTERN__ BibNumber_T                  preamble_ptr;
__EXTERN__ Boolean_T                    preceding_white;
__EXTERN__ HashLoc_T                    pre_def_loc;
__EXTERN__ Boolean_T                    prev_colon;

__EXTERN__ Boolean_T                    read_completed;
__EXTERN__ Boolean_T                    reading_completed;
__EXTERN__ Boolean_T                    read_performed;
__EXTERN__ Boolean_T                    read_seen;
__EXTERN__ ASCIICode_T                  right_outer_delim;
__EXTERN__ ASCIICode_T                  right_str_delim;

__EXTERN__ StrNumber_T                  s_aux_extension;
__EXTERN__ StrNumber_T                  s_bbl_extension;
__EXTERN__ StrNumber_T                  s_bib_extension;
__EXTERN__ StrNumber_T                  s_bst_extension;
__EXTERN__ StrNumber_T                  s_default;
__EXTERN__ StrNumber_T                  s_l;
__EXTERN__ StrNumber_T                  s_log_extension;
__EXTERN__ StrNumber_T                  s_null;
__EXTERN__ StrNumber_T                  s_t;
__EXTERN__ StrNumber_T                  s_u;
__EXTERN__ Integer8_T                   scan_result;
__EXTERN__ CiteNumber_T                 sort_cite_ptr;
__EXTERN__ StrEntLoc_T                  sort_key_num;
__EXTERN__ Integer_T                    sp_brace_level;
__EXTERN__ PoolPointer_T                sp_end;
__EXTERN__ PoolPointer_T                sp_length;
__EXTERN__ PoolPointer_T                sp_ptr;
__EXTERN__ PoolPointer_T                sp_xptr1;
__EXTERN__ PoolPointer_T                sp_xptr2;
__EXTERN__ PoolPointer_T                sp2_length;
__EXTERN__ Boolean_T                    store_entry;
__EXTERN__ Boolean_T                    store_field;
__EXTERN__ Boolean_T                    store_token;
__EXTERN__ StrEntLoc_T                  str_ent_ptr;
__EXTERN__ UChar_T                      str_glb_ptr;
__EXTERN__ Integer_T                    string_width;
__EXTERN__ StrNumber_T                  str_num;
__EXTERN__ StrNumber_T                  str_ptr;
__EXTERN__ BufPointer_T                 sv_ptr1;
__EXTERN__ BufPointer_T                 sv_ptr2;

__EXTERN__ Integer_T                    tmp_end_ptr;
__EXTERN__ Integer_T                    tmp_ptr;
__EXTERN__ Boolean_T                    to_be_written;
__EXTERN__ Boolean_T                    token_starting;
__EXTERN__ Integer_T                    token_value;
__EXTERN__ StrNumber_T                  top_lev_str;
__EXTERN__ Boolean_T                    type_exists;

__EXTERN__ Boolean_T                    use_default;

__EXTERN__ BufPointer_T                 von_end;
__EXTERN__ BufPointer_T                 von_start;

__EXTERN__ WizFnLoc_T                   wiz_def_ptr;
__EXTERN__ WizFnLoc_T                   wiz_fn_ptr;
__EXTERN__ HashLoc_T                    wiz_loc;

#ifdef STAT
__EXTERN__ HashLoc_T                    blt_in_loc[NUM_BLT_IN_FNS + 1];
__EXTERN__ BltInRange_T                 blt_in_ptr;
__EXTERN__ Integer_T                    execution_count[NUM_BLT_IN_FNS + 1];
__EXTERN__ Integer_T                    total_ex_count;
#endif                          /* STAT */


/*-
**----------------------------------------------------------------------------
** STATIC GLOBAL ARRAYS DECLARED HERE
**----------------------------------------------------------------------------
*/
__EXTERN__ AlphaFile_T                  aux_file[AUX_STACK_SIZE + 1];
__EXTERN__ StrNumber_T                  aux_list[AUX_STACK_SIZE + 1];
__EXTERN__ Integer_T                    aux_ln_stack[AUX_STACK_SIZE + 1];
__EXTERN__ Integer_T                    char_width[LAST_LATIN_CHAR + 1];
__EXTERN__ IDType_T                     id_class[LAST_ASCII_CHAR + 1];
__EXTERN__ LexType_T                    lex_class[LAST_ASCII_CHAR + 1];
__EXTERN__ unsigned char                xchr[LAST_ASCII_CHAR + 1];
__EXTERN__ ASCIICode_T                  xord[LAST_TEXT_CHAR + 1];

#ifdef SUPPORT_8BIT
/*
** Special arrays to manage character set report.
**
**  c8upcase    - contains the lowercase equivalent for each character.
**                If a character has no lowercase equivalent (e.g.
**                because it's not a letter), the value is set to that of
**                the character.
**
**  c8lowcase   - contains the uppercase equivalent for each character
**                If a character has no uppercase equivalent (e.g.
**                because it's not a letter), the value is set to that of
**                the character.
**
**  c8order     - contains the sorting weight for each character.  If a
**                character doesn't have a specified sorting weight, it
**                will be set to the default SORT_LAST to ensure that it
**                is sorted after any defined character.
*/
__EXTERN__ unsigned char                c8upcase[LAST_TEXT_CHAR + 1];
__EXTERN__ unsigned char                c8lowcase[LAST_TEXT_CHAR + 1];
__EXTERN__ int                          c8order[LAST_TEXT_CHAR + 1];
#endif                          /* SUPPORT_8BIT */


/*-
**----------------------------------------------------------------------------
** DYNAMICALLY ALLOCATED GLOBAL ARRAYS DECLARED HERE
**----------------------------------------------------------------------------
*/
__EXTERN__ AlphaFile_T                 *bib_file;
__EXTERN__ StrNumber_T                 *bib_list;
__EXTERN__ ASCIICode_T                 *buffer;
__EXTERN__ StrNumber_T                 *cite_info;
__EXTERN__ StrNumber_T                 *cite_list;
__EXTERN__ Boolean_T                   *entry_exists;
__EXTERN__ Integer_T                   *entry_ints;
__EXTERN__ ASCIICode_T                 *entry_strs;
__EXTERN__ ASCIICode_T                 *ex_buf;
__EXTERN__ StrNumber_T                 *field_info;
__EXTERN__ FnClass_T                   *fn_type;
__EXTERN__ Integer_T                   *glb_str_end;
__EXTERN__ StrNumber_T                 *glb_str_ptr;
__EXTERN__ ASCIICode_T                 *global_strs;
__EXTERN__ StrIlk_T                    *hash_ilk;
__EXTERN__ HashPointer_T               *hash_next;
__EXTERN__ StrNumber_T                 *hash_text;
__EXTERN__ Integer_T                   *ilk_info;
__EXTERN__ Integer_T                   *lit_stack;
__EXTERN__ StkType_T                   *lit_stk_type;
__EXTERN__ unsigned char               *name_of_file;
__EXTERN__ ASCIICode_T                 *name_sep_char;
__EXTERN__ BufPointer_T                *name_tok;
__EXTERN__ ASCIICode_T                 *out_buf;
__EXTERN__ StrNumber_T                 *s_preamble;
__EXTERN__ ASCIICode_T                 *str_pool;
__EXTERN__ PoolPointer_T               *str_start;
__EXTERN__ ASCIICode_T                 *sv_buffer;
__EXTERN__ HashPtr2_T                  *type_list;
__EXTERN__ HashPtr2_T                  *wiz_functions;


/*-
**----------------------------------------------------------------------------
** Variables used to record the results of the command line parsing.
**----------------------------------------------------------------------------
*/
#ifdef UTF_8
__EXTERN__ Boolean_T                    Flag_language;
__EXTERN__ char                        *Str_language;
__EXTERN__ Boolean_T                    Flag_location;
__EXTERN__ char                        *Str_location;
__EXTERN__ UCollator                   *u_coll;
#endif
__EXTERN__ Boolean_T                    Flag_7bit;
__EXTERN__ Boolean_T                    Flag_8bit;
__EXTERN__ Boolean_T                    Flag_8bit_alpha;
__EXTERN__ Boolean_T                    Flag_big;
__EXTERN__ Boolean_T                    Flag_debug;
__EXTERN__ Boolean_T                    Flag_huge;
__EXTERN__ Boolean_T                    Flag_stats;
__EXTERN__ Boolean_T                    Flag_trace;
__EXTERN__ Boolean_T                    Flag_wolfgang;
__EXTERN__ Integer_T                    M_min_crossrefs;
__EXTERN__ Integer_T                    M_strings;
__EXTERN__ char                        *Str_auxfile;
__EXTERN__ char                        *Str_csfile;


/*-
**----------------------------------------------------------------------------
** Variables used to hold the value of certain key capacity limits.  The
** values used to be #defined as the uppercase equivalent name, but can 
** now be set dynamically from the command line.
**----------------------------------------------------------------------------
*/
__EXTERN__ Integer_T                    Buf_Size;
__EXTERN__ Integer_T                    Ent_Str_Size;
__EXTERN__ Integer_T                    Glob_Str_Size;
__EXTERN__ Integer_T                    Hash_Prime;
__EXTERN__ Integer_T                    Hash_Size;
__EXTERN__ Integer_T                    Lit_Stk_Size;
__EXTERN__ Integer_T                    Max_Bib_Files;
__EXTERN__ Integer_T                    Max_Cites;
__EXTERN__ Integer_T                    Max_Fields;
__EXTERN__ Integer_T                    Max_Glob_Strs;
__EXTERN__ Integer_T                    Max_Strings;
__EXTERN__ Integer_T                    Min_Crossrefs;
__EXTERN__ Integer_T                    Pool_Size;
__EXTERN__ Integer_T                    Wiz_Fn_Space;
#endif                          /* __GBLVARS.H__ */
