summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/tex/memoryword.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/tex/memoryword.h')
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/memoryword.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/tex/memoryword.h b/Build/source/texk/web2c/luatexdir/tex/memoryword.h
new file mode 100644
index 00000000000..8c44a7e4e0d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/tex/memoryword.h
@@ -0,0 +1,129 @@
+/* memoryword.h
+
+ Copyright 2009-2010 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: memoryword.h 3352 2010-01-10 15:35:31Z hhenkel $ */
+
+/* This header file is extra special because it is read in from
+ within the pascal source */
+
+#ifndef MEMORYWORD_H
+# define MEMORYWORD_H
+
+/* texmfmem.h: the memory_word type, which is too hard to translate
+ automatically from Pascal. We have to make sure the byte-swapping
+ that the (un)dumping routines do suffices to put things in the right
+ place in memory.
+
+ A memory_word can be broken up into a `twohalves' or a
+ `fourquarters', and a `twohalves' can be further broken up. Here is
+ a picture. ..._M = most significant byte, ..._L = least significant
+ byte.
+
+
+ BigEndian:
+ twohalves.v: RH_MM RH_ML RH_LM RH_LL LH_MM LH_ML LH_LM LH_LL
+ twohalves.u: ---------JUNK---------- ----B0----- ----B1-----
+ fourquarters: ----B0----- ----B1----- ----B2----- ----B3-----
+ twoints: ---------CINT0--------- ---------CINT1---------
+
+ LittleEndian:
+ twohalves.v: LH_LL LH_LM LH_ML LH_MM RH_LL RH_LM RH_ML RH_MM
+ twohalves.u: ----B1----- ----B0-----
+ fourquarters: ----B3----- ----B2----- ----B1----- ----B0-----
+ twoints: ---------CINT1--------- ---------CINT0---------
+
+*/
+
+
+typedef union {
+ struct {
+# ifdef WORDS_BIGENDIAN
+ halfword RH, LH;
+# else
+ halfword LH, RH;
+# endif
+ } v;
+
+ struct { /* Make B0,B1 overlap the most significant bytes of LH. */
+# ifdef WORDS_BIGENDIAN
+ halfword junk;
+ quarterword B0, B1;
+# else /* not WORDS_BIGENDIAN */
+ /* If 32-bit memory words, have to do something. */
+ quarterword B1, B0;
+# endif /* LittleEndian */
+ } u;
+} two_halves;
+
+typedef struct {
+ struct {
+# ifdef WORDS_BIGENDIAN
+ quarterword B0, B1, B2, B3;
+# else
+ quarterword B3, B2, B1, B0;
+# endif
+ } u;
+} four_quarters;
+
+typedef struct {
+# ifdef WORDS_BIGENDIAN
+ int CINT0, CINT1;
+# else
+ int CINT1, CINT0;
+# endif
+} two_ints;
+
+typedef struct {
+ glue_ratio GLUE;
+} glues;
+
+typedef union {
+ two_halves hh;
+ four_quarters qqqq;
+ two_ints ii;
+ glues gg;
+} memory_word;
+
+# define b0 u.B0
+# define b1 u.B1
+# define b2 u.B2
+# define b3 u.B3
+
+# define rh v.RH
+# define lhfield v.LH
+
+# define cint ii.CINT0
+# define cint1 ii.CINT1
+
+# define gr gg.GLUE
+
+/* the next five defines are needed for the prototypes in web2c's coerce.h */
+
+# define memoryword memory_word
+# define strnumber str_number
+# define packedASCIIcode packed_ASCII_code
+# define poolpointer pool_pointer
+
+typedef FILE *word_file;
+
+# ifdef DEBUG
+extern procedure print_word(memory_word w);
+# endif
+
+#endif