1 /* Main include file for TeX in C. Originally by Tim Morgan,
2 December 23, 1987. These routines are also used by Metafont (with
5 Copyright 1992 Karl Berry
6 Copyright 2007 TeX Users Group
7 Copyright 2014 Clerk Ma
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
29 #define INLINE __inline
35 #define dump_file fmt_file
36 #define dump_path TEXFORMATPATH
37 #define mwrite_out write_dvi
38 #define out_file dvi_file
39 #define out_buf dvi_buf
43 typedef FILE * byte_file;
44 typedef FILE * word_file;
46 /* Read a line of input as quickly as possible. */
47 extern bool input_line (FILE *);
48 #define input_ln(stream, flag) input_line(stream)
50 /* We need to read an integer from stdin if we're debugging. */
52 #define getint() inputint(stdin)
57 /* `b_open_in' (and out) is used only for reading (and writing) .tfm
58 files; `w_open_in' (and out) only for dump files. The filenames are
59 passed in as a global variable, `name_of_file'. */
61 #define b_open_in(f) open_input (&(f), TFMFILEPATH, FOPEN_RBIN_MODE)
62 #define w_open_in(f) open_input (&(f), dump_path, FOPEN_RBIN_MODE)
63 #define b_open_out(f) open_output (&(f), FOPEN_WBIN_MODE)
64 #define w_open_out b_open_out
65 #define b_close a_close
66 #define w_close a_close
69 #define fix_date_and_time() get_date_and_time (&(tex_time), &(day), &(month), &(year))
71 /* If we're running under Unix, use system calls instead of standard I/O
72 to read and write the output files; also, be able to make a core dump. */
74 #define dumpcore() exit(1)
76 #define dumpcore abort
79 #define write_dvi(a, b) \
80 if ((size_t) fwrite ((char *) &dvi_buf[a], sizeof (dvi_buf[a]), \
81 (size_t) ((size_t)(b) - (size_t)(a) + 1), dvi_file) \
82 != (size_t) ((size_t)(b) - (size_t)(a) + 1)) \
83 FATAL_PERROR ("\n! dvi file")
85 extern int do_dump (char *, int, int, FILE *);
86 extern int do_undump (char *, int, int, FILE *);
88 /* Reading and writing the dump files. `(un)dumpthings' is called from
90 #define dumpthings(base, len) \
91 do_dump ((char *) &(base), sizeof (base), (int) (len), dump_file)
93 #define undumpthings(base, len) \
94 do_undump ((char *) &(base), sizeof (base), (int) (len), dump_file)
96 /* Use the above for all the other dumping and undumping. */
97 #define generic_dump(x) dumpthings (x, 1)
98 #define generic_undump(x) undumpthings (x, 1)
100 #define dump_wd generic_dump
101 #define undump_wd generic_undump
102 #define dump_hh generic_dump
103 #define undump_hh generic_undump
104 #define dump_qqqq generic_dump
105 #define undump_qqqq generic_undump
107 /* `dump_int' is called with constant integers, so we put them into a
109 #define dump_int(x) \
112 integer x_val = (x); \
113 generic_dump (x_val); \
117 /* web2c/regfix puts variables in the format file loading into
118 registers. Some compilers aren't willing to take addresses of such
119 variables. So we must kludge. */
121 #define undump_int(x) \
125 generic_undump (x_val); \
130 #define undump_int generic_undump
134 /* If we're running on an ASCII system, there is no need to use the
135 `xchr' array to convert characters to the external encoding. */
137 #define Xchr(x) xchr[x]
139 /* following added from new texmf.c file 1996/Jan/12 */
140 /* these, of course are useless definitions since parameters not given */
142 /* Declare routines in texmf.c. */
143 extern void get_date_and_time();
144 extern void t_open_in();
145 extern bool input_line();