diff options
Diffstat (limited to 'Build/source/texk/web2c/texmfmp.h')
-rw-r--r-- | Build/source/texk/web2c/texmfmp.h | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/texmfmp.h b/Build/source/texk/web2c/texmfmp.h new file mode 100644 index 00000000000..45fca14d140 --- /dev/null +++ b/Build/source/texk/web2c/texmfmp.h @@ -0,0 +1,286 @@ +/* texmf.h: Main include file for TeX and Metafont in C. This file is + included by {tex,mf}d.h, which is the first include in the C files + output by web2c. */ + +#include "cpascal.h" +#include <kpathsea/c-pathch.h> /* for IS_DIR_SEP, used in the change files */ +#include <kpathsea/tex-make.h> /* for kpse_make_tex_discard_errors */ + +/* If we have these macros, use them, as they provide a better guide to + the endianess when cross-compiling. */ +#if defined (BYTE_ORDER) && defined (BIG_ENDIAN) && defined (LITTLE_ENDIAN) +#ifdef WORDS_BIGENDIAN +#undef WORDS_BIGENDIAN +#endif +#if BYTE_ORDER == BIG_ENDIAN +#define WORDS_BIGENDIAN +#endif +#endif +/* More of the same, but now NeXT-specific. */ +#ifdef NeXT +#ifdef WORDS_BIGENDIAN +#undef WORDS_BIGENDIAN +#endif +#ifdef __BIG_ENDIAN__ +#define WORDS_BIGENDIAN +#endif +#endif + +/* Some things are the same except for the name. */ +#ifdef TeX +#if defined (pdfeTeX) +#define TEXMFPOOLNAME "pdfetex.pool" +#define TEXMFENGINENAME "pdfetex" +#elif defined (pdfTeX) +#define TEXMFPOOLNAME "pdftex.pool" +#define TEXMFENGINENAME "pdftex" +#elif defined (eTeX) +#define TEXMFPOOLNAME "etex.pool" +#define TEXMFENGINENAME "etex" +#elif defined (Omega) +#define TEXMFPOOLNAME "omega.pool" +#define TEXMFENGINENAME "omega" +#elif defined (eOmega) +#define TEXMFPOOLNAME "eomega.pool" +#define TEXMFENGINENAME "eomega" +#elif defined (Aleph) +#define TEXMFPOOLNAME "aleph.pool" +#define TEXMFENGINENAME "aleph" +#else +#define TEXMFPOOLNAME "tex.pool" +#define TEXMFENGINENAME "tex" +#endif +#define DUMP_FILE fmtfile +#define DUMP_FORMAT kpse_fmt_format +#define writedvi write_out +#define flushdvi flush_out +#define OUT_FILE dvifile +#define OUT_BUF dvibuf +#endif /* TeX */ +#ifdef MF +#define TEXMFPOOLNAME "mf.pool" +#define TEXMFENGINENAME "metafont" +#define DUMP_FILE basefile +#define DUMP_FORMAT kpse_base_format +#define writegf write_out +#define OUT_FILE gffile +#define OUT_BUF gfbuf +#endif /* MF */ +#ifdef MP +#define TEXMFPOOLNAME "mp.pool" +#define TEXMFENGINENAME "metapost" +#define DUMP_FILE memfile +#define DUMP_FORMAT kpse_mem_format +#endif /* MP */ + +/* Restore underscores. */ +#define kpsedvipsconfigformat kpse_dvips_config_format +#define kpsefontmapformat kpse_fontmap_format +#define kpsemfpoolformat kpse_mfpool_format +#define kpsempformat kpse_mp_format +#define kpsemppoolformat kpse_mppool_format +#define kpsetexpoolformat kpse_texpool_format +#define kpsetexformat kpse_tex_format + +/* Hacks for TeX that are better not to #ifdef, see texmfmp.c. */ +extern int tfmtemp, texinputtype; + +/* TeX, MF and MetaPost use this. */ +extern boolean openinnameok P1H(const_string); +extern boolean openoutnameok P1H(const_string); + +/* All but the Omega family use this. */ +#if !defined(Omega) && !defined(eOmega) && !defined(Aleph) +extern void readtcxfile P1H(void); +extern string translate_filename; +#define translatefilename translate_filename +#endif + +#ifdef TeX +/* The type `glueratio' should be a floating point type which won't + unnecessarily increase the size of the memoryword structure. This is + the basic requirement. On most machines, if you're building a + normal-sized TeX, then glueratio must probably meet the following + restriction: sizeof(glueratio) <= sizeof(integer). Usually, then, + glueratio must be `float'. But if you build a big TeX, you can (on + most machines) and should make it `double' to avoid loss of precision + and conversions to and from double during calculations. (All this + also goes for Metafont.) Furthermore, if you have enough memory, it + won't hurt to have this defined to be `double' for running the + trip/trap tests. + + This type is set automatically to `float' by configure if a small TeX + is built. */ +#ifndef GLUERATIO_TYPE +#define GLUERATIO_TYPE double +#endif +typedef GLUERATIO_TYPE glueratio; + +#if defined(__DJGPP__) && defined (IPC) +#undef IPC +#endif + +#ifdef IPC +extern void ipcpage P1H(int); +#endif /* IPC */ +#endif /* TeX */ + +/* How to output to the GF or DVI file. */ +#define write_out(a, b) \ + if (fwrite ((char *) &OUT_BUF[a], sizeof (OUT_BUF[a]), \ + (int) ((b) - (a) + 1), OUT_FILE) \ + != (int) ((b) - (a) + 1)) \ + FATAL_PERROR ("fwrite"); + +#define flush_out() fflush (OUT_FILE) + +/* Used to write to a TFM file. */ +#define put2bytes(f, h) do { \ + integer v = (integer) (h); putbyte (v >> 8, f); putbyte (v & 0xff, f); \ + } while (0) +#define put4bytes(f, w) do { \ + integer v = (integer) (w); \ + putbyte (v >> 24, f); putbyte (v >> 16, f); \ + putbyte (v >> 8, f); putbyte (v & 0xff, f); \ + } while (0) + +/* Read a line of input as quickly as possible. */ +#define inputln(stream, flag) input_line (stream) +extern boolean input_line P1H(FILE *); + +/* This routine has to return four values. */ +#define dateandtime(i,j,k,l) get_date_and_time (&(i), &(j), &(k), &(l)) +extern void get_date_and_time P4H(integer *, integer *, integer *, integer *); + +/* Get high-res time info. */ +#define secondsandmicros(i,j) get_seconds_and_micros (&(i), &(j)) +extern void get_seconds_and_micros P2H(integer *, integer *); + +/* This routine has to return a scaled value. */ +extern integer getrandomseed P1H(void); + +/* Copy command-line arguments into the buffer, despite the name. */ +extern void topenin P1H(void); + +/* Can't prototype this since it uses poolpointer and ASCIIcode, which + are defined later in mfd.h, and mfd.h uses stuff from here. */ +/* Therefore the department of ugly hacks decided to move this declaration + to the *coerce.h files. */ +/* extern void calledit (); */ + +/* Set an array size from texmf.cnf. */ +extern void setupboundvariable P3H(integer *, const_string, integer); + +/* `bopenin' (and out) is used only for reading (and writing) .tfm + files; `wopenin' (and out) only for dump files. The filenames are + passed in as a global variable, `nameoffile'. */ +#define bopenin(f) open_input (&(f), kpse_tfm_format, FOPEN_RBIN_MODE) +#define ocpopenin(f) open_input (&(f), kpse_ocp_format, FOPEN_RBIN_MODE) +#define ofmopenin(f) open_input (&(f), kpse_ofm_format, FOPEN_RBIN_MODE) +#define bopenout(f) open_output (&(f), FOPEN_WBIN_MODE) +#define bclose aclose +#define wopenin(f) open_input (&(f), DUMP_FORMAT, FOPEN_RBIN_MODE) +#define wopenout bopenout +#define wclose aclose + +/* Used in tex.ch (section 1338) to get a core dump in debugging mode. */ +#ifdef unix +#define dumpcore abort +#else +#define dumpcore uexit (1) +#endif + +#ifdef MP +extern boolean callmakempx P2H(string, string); +#endif + +#ifdef MF +extern boolean initscreen P1H(void); +extern void updatescreen P1H(void); +/* Can't prototype these for same reason as `calledit' above. */ +#if 0 /* Therefore the real declaration is found in the coerce.h files. */ +extern void blankrectangle (/*screencol, screencol, screenrow, screenrow*/); +extern void paintrow (/*screenrow, pixelcolor, transspec, screencol*/); +#endif +#endif /* MF */ + +/* (Un)dumping. These are called from the change file. */ +#define dumpthings(base, len) \ + do_dump ((char *) &(base), sizeof (base), (int) (len), DUMP_FILE) +#define undumpthings(base, len) \ + do_undump ((char *) &(base), sizeof (base), (int) (len), DUMP_FILE) + +/* Like do_undump, but check each value against LOW and HIGH. The + slowdown isn't significant, and this improves the chances of + detecting incompatible format files. In fact, Knuth himself noted + this problem with Web2c some years ago, so it seems worth fixing. We + can't make this a subroutine because then we lose the type of BASE. */ +#define undumpcheckedthings(low, high, base, len) \ + do { \ + unsigned i; \ + undumpthings (base, len); \ + for (i = 0; i < (len); i++) { \ + if ((&(base))[i] < (low) || (&(base))[i] > (high)) { \ + FATAL5 ("Item %u (=%ld) of .fmt array at %lx <%ld or >%ld", \ + i, (integer) (&(base))[i], (unsigned long) &(base), \ + (integer) low, (integer) high); \ + } \ + } \ + } while (0) + +/* Like undump_checked_things, but only check the upper value. We use + this when the base type is unsigned, and thus all the values will be + greater than zero by definition. */ +#define undumpuppercheckthings(high, base, len) \ + do { \ + unsigned i; \ + undumpthings (base, len); \ + for (i = 0; i < (len); i++) { \ + if ((&(base))[i] > (high)) { \ + FATAL4 ("Item %u (=%ld) of .fmt array at %lx >%ld", \ + i, (integer) (&(base))[i], (unsigned long) &(base), \ + (integer) high); \ + } \ + } \ + } while (0) + +/* We define the routines to do the actual work in texmf.c. */ +extern void do_dump P4H(char *, int, int, FILE *); +extern void do_undump P4H(char *, int, int, FILE *); + +/* Use the above for all the other dumping and undumping. */ +#define generic_dump(x) dumpthings (x, 1) +#define generic_undump(x) undumpthings (x, 1) + +#define dumpwd generic_dump +#define dumphh generic_dump +#define dumpqqqq generic_dump +#define undumpwd generic_undump +#define undumphh generic_undump +#define undumpqqqq generic_undump + +/* `dump_int' is called with constant integers, so we put them into a + variable first. */ +#define dumpint(x) \ + do \ + { \ + integer x_val = (x); \ + generic_dump (x_val); \ + } \ + while (0) + +/* web2c/regfix puts variables in the format file loading into + registers. Some compilers aren't willing to take addresses of such + variables. So we must kludge. */ +#if defined(REGFIX) || defined(WIN32) +#define undumpint(x) \ + do \ + { \ + integer x_val; \ + generic_undump (x_val); \ + x = x_val; \ + } \ + while (0) +#else +#define undumpint generic_undump +#endif |