summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/tex/mainbody.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/tex/mainbody.h')
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/mainbody.h252
1 files changed, 252 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/tex/mainbody.h b/Build/source/texk/web2c/luatexdir/tex/mainbody.h
new file mode 100644
index 00000000000..0b108ad896f
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/tex/mainbody.h
@@ -0,0 +1,252 @@
+/* mainbody.h
+
+ Copyright 2009 Taco Hoekwater <taco@luatex.org>
+
+ This file is part of LuaTeX.
+
+ LuaTeX 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 2 of the License, or (at your
+ option) any later version.
+
+ LuaTeX 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 Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
+
+/* $Id: mainbody.h 3436 2010-02-21 15:34:00Z taco $ */
+
+#ifndef MAINBODY_H
+# define MAINBODY_H
+
+extern int luatex_svn;
+extern int luatex_version;
+extern int luatex_revision;
+extern int luatex_date_info;
+extern const char *luatex_version_string;
+extern const char *engine_name;
+
+/*
+The following parameters can be changed at compile time to extend or
+reduce \TeX's capacity. They may have different values in \.{INITEX} and
+in production versions of \TeX.
+@.INITEX@>
+@^system dependencies@>
+*/
+
+# define ssup_max_strings 262143
+
+# define inf_max_strings 100000
+# define sup_max_strings ssup_max_strings
+# define inf_strings_free 100
+# define sup_strings_free sup_max_strings
+
+# define inf_buf_size 500
+# define sup_buf_size 100000000
+
+# define inf_nest_size 40
+# define sup_nest_size 4000
+
+# define inf_max_in_open 6
+# define sup_max_in_open 127
+
+# define inf_param_size 60
+# define sup_param_size 6000
+
+# define inf_save_size 600
+# define sup_save_size 80000
+
+# define inf_stack_size 200
+# define sup_stack_size 30000
+
+# define inf_dvi_buf_size 800
+# define sup_dvi_buf_size 65536
+
+# define sup_hash_extra sup_max_strings
+# define inf_hash_extra 0
+
+# define sup_ocp_list_size 1000000
+# define inf_ocp_list_size 1000
+# define sup_ocp_buf_size 100000000
+# define inf_ocp_buf_size 1000
+# define sup_ocp_stack_size 1000000
+# define inf_ocp_stack_size 1000
+
+# define inf_expand_depth 100
+# define sup_expand_depth 1000000
+
+
+# include <stdio.h>
+
+/* Types in the outer block */
+typedef int ASCII_code; /* characters */
+typedef unsigned char eight_bits; /* unsigned one-byte quantity */
+typedef FILE *alpha_file; /* files that contain textual data */
+typedef FILE *byte_file; /* files that contain binary data */
+
+typedef int str_number;
+typedef int pool_pointer;
+typedef unsigned char packed_ASCII_code;
+
+typedef int scaled; /* this type is used for scaled integers */
+typedef char small_number; /* this type is self-explanatory */
+
+typedef float glue_ratio; /* one-word representation of a glue expansion factor */
+
+typedef unsigned short quarterword;
+typedef int halfword;
+
+typedef unsigned char glue_ord; /* infinity to the 0, 1, 2, 3, or 4 power */
+
+typedef unsigned short group_code; /* |save_level| for a level boundary */
+
+typedef int internal_font_number; /* |font| in a |char_node| */
+typedef int font_index; /* index into |font_info| */
+
+typedef int save_pointer;
+
+/*
+Characters of text that have been converted to \TeX's internal form
+are said to be of type |ASCII_code|, which is a subrange of the integers.
+
+We are assuming that our runtime system is able to read and write UTF-8.
+
+Some of the ASCII codes without visible characters have been given symbolic
+names in this program because they are used with a special meaning.
+*/
+
+
+# define null_code '\0' /* ASCII code that might disappear */
+# define carriage_return '\r' /* ASCII code used at end of line */
+
+/* Global variables */
+extern int bad; /* is some ``constant'' wrong? */
+extern boolean luainit; /* are we using lua for initializations */
+extern boolean tracefilenames; /* print file open-close info? */
+
+
+extern boolean ini_version; /* are we \.{INITEX}? */
+extern boolean dump_option;
+extern boolean dump_line;
+extern int bound_default;
+extern char *bound_name;
+extern int error_line;
+extern int half_error_line;
+extern int max_print_line;
+extern int ocp_list_size;
+extern int ocp_buf_size;
+extern int ocp_stack_size;
+extern int max_strings;
+extern int strings_free;
+extern int font_k;
+extern int buf_size;
+extern int stack_size;
+extern int max_in_open;
+extern int param_size;
+extern int nest_size;
+extern int save_size;
+extern int expand_depth;
+extern int parsefirstlinep;
+extern int filelineerrorstylep;
+extern int haltonerrorp;
+extern boolean quoted_filename;
+
+/*
+In order to make efficient use of storage space, \TeX\ bases its major data
+structures on a |memory_word|, which contains either a (signed) integer,
+possibly scaled, or a (signed) |glue_ratio|, or a small number of
+fields that are one half or one quarter of the size used for storing
+integers.
+
+If |x| is a variable of type |memory_word|, it contains up to four
+fields that can be referred to as follows:
+$$\vbox{\halign{\hfil#&#\hfil&#\hfil\cr
+|x|&.|int|&(an |integer|)\cr
+|x|&.|sc|\qquad&(a |scaled| integer)\cr
+|x|&.|gr|&(a |glue_ratio|)\cr
+|x.hh.lh|, |x.hh|&.|rh|&(two halfword fields)\cr
+|x.hh.b0|, |x.hh.b1|, |x.hh|&.|rh|&(two quarterword fields, one halfword
+ field)\cr
+|x.qqqq.b0|, |x.qqqq.b1|, |x.qqqq|&.|b2|, |x.qqqq.b3|\hskip-100pt
+ &\qquad\qquad\qquad(four quarterword fields)\cr}}$$
+This is somewhat cumbersome to write, and not very readable either, but
+macros will be used to make the notation shorter and more transparent.
+The \PASCAL\ code below gives a formal definition of |memory_word| and
+its subsidiary types, using packed variant records. \TeX\ makes no
+assumptions about the relative positions of the fields within a word.
+
+We are assuming 32-bit integers, a halfword must contain at least
+32 bits, and a quarterword must contain at least 16 bits.
+@^system dependencies@>
+
+N.B.: Valuable memory space will be dreadfully wasted unless \TeX\ is compiled
+by a \PASCAL\ that packs all of the |memory_word| variants into
+the space of a single integer. This means, for example, that |glue_ratio|
+words should be |short_real| instead of |real| on some computers. Some
+\PASCAL\ compilers will pack an integer whose subrange is `|0..255|' into
+an eight-bit field, but others insist on allocating space for an additional
+sign bit; on such systems you can get 256 values into a quarterword only
+if the subrange is `|-128..127|'.
+
+The present implementation tries to accommodate as many variations as possible,
+so it makes few assumptions. If integers having the subrange
+`|min_quarterword..max_quarterword|' can be packed into a quarterword,
+and if integers having the subrange `|min_halfword..max_halfword|'
+can be packed into a halfword, everything should work satisfactorily.
+
+It is usually most efficient to have |min_quarterword=min_halfword=0|,
+so one should try to achieve this unless it causes a severe problem.
+The values defined here are recommended for most 32-bit computers.
+
+We cannot use the full range of 32 bits in a halfword, because we have
+to allow negative values for potential backend tricks like web2c's
+dynamic allocation, and parshapes pointers have to be able to store at
+least twice the value |max_halfword| (see below). Therefore,
+|max_halfword| is $2^{30}-1$
+*/
+
+# include "tex/memoryword.h"
+
+# define min_quarterword 0 /*smallest allowable value in a |quarterword| */
+# define max_quarterword 65535 /* largest allowable value in a |quarterword| */
+# define min_halfword -0x3FFFFFFF /* smallest allowable value in a |halfword| */
+# define max_halfword 0x3FFFFFFF
+ /* largest allowable value in a |halfword| */
+
+
+/*
+The following procedure, which is called just before \TeX\ initializes its
+input and output, establishes the initial values of the date and time.
+It calls a macro-defined |dateandtime| routine. |dateandtime| in turn is
+also a C macro, which calls |get_date_and_time|, passing it the addresses of
+the day, month, etc., so they can be set by the routine.
+|get_date_and_time| also sets up interrupt catching if that
+is conditionally compiled in the C code.
+@^system dependencies@>
+*/
+
+
+# define fix_date_and_time() dateandtime(int_par(time_code),int_par(day_code),int_par(month_code),int_par(year_code))
+
+extern int get_luatexsvn(void);
+extern int get_luatexversion(void);
+extern str_number get_luatexrevision(void);
+extern int get_luatex_date_info(void);
+
+extern int ready_already;
+
+extern void main_body(void);
+extern void close_files_and_terminate(void);
+
+extern void final_cleanup(void);
+extern void debug_help(void); /* routine to display various things */
+
+/* lazy me */
+# define get_cur_font() equiv(cur_font_loc)
+# define zset_cur_font set_cur_font
+
+
+#endif