OSDN Git Service

pTeX's primitives.
[putex/putex.git] / src / texsourc / texmfmem.h
index fb72064..6761c42 100644 (file)
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301 USA.  */
 
-/* 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.
-   
-   If BigEndian:
-   twohalves.v:  RH_M  RH_L  LH_M  LH_L
-   twohalves.u:  JNK1  JNK2    B0    B1
-   fourquarters:   B0    B1    B2    B3
-   
-   If LittleEndian:
-   twohalves.v:  LH_L  LH_M  RH_L  RH_M
-   twohalves.u:    B1    B0  JNK1  JNK2
-   fourquarters:   B3    B2    B1    B0
-   
-   The halfword fields are four bytes if we are building a TeX or MF;
-   this leads to further complications:
-   
-   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
-
-   LittleEndian:
-   twohalves.v:  LH_LL LH_LM LH_ML LH_MM RH_LL RH_LM RH_ML RH_MM
-   twohalves.u:  junkx junky  B1    B0
-   fourquarters: ---------JUNK----------  B3    B2    B1    B0
-
-   I guess TeX and Metafont never refer to the B1 and B0 in the
-   fourquarters structure as the B1 and B0 in the twohalves.u structure.
-   
-   This file can't be part of texmf.h, because texmf.h gets included by
-   {tex,mf}d.h before the `halfword' etc. types are defined.  So we
-   include it from the change file instead.
+/*
+  meaning      structure                      TeX                 Y&Y TeX
+               ----------------------------------------------------------------------
+  integer      |            int            || 4: long           | 8: long long      |   min_quarterword 0
+               ---------------------------------------------------------------------- max_quarterword FFFF
+  scaled       |            sc             || 4: long           | 8: long long      |   min_halfword
+               ----------------------------------------------------------------------
+  glue_ratio   |            gr             || 4: float          | 8: double         |
+               ----------------------------------------------------------------------
+  halfword     |     lh      |     rh      || 2: unsigned short | 4: unsigned long  |
+               ----------------------------------------------------------------------
+  half+quarter |  b0  |  b1  |     rh      ||                                       |
+               ----------------------------------------------------------------------
+  quarter      |  b0  |  b1  |  b2  |  b3  || 1: unsigned char  | 2: unsigned short |
+               ----------------------------------------------------------------------
 */
 
-typedef union
+typedef struct
 {
-  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 TeX/MF, have to have an extra two bytes of junk.
-     I would like to break this line, but I'm afraid that some
-     preprocessors don't properly handle backslash-newline in # commands.  */
-#if (defined (TeX) && !defined (SMALLTeX)) || !defined (TeX) && !defined (SMALLMF)
-    quarterword junkx, junky;
-#endif /* big TeX or big MF */
-    quarterword B1, B0;
-#endif /* not WORDS_BIGENDIAN */
-  } u;
-} twohalves;
+  halfword rh;
 
-/* new in Y&Y TeX 1.3 1996/Jan/18 used for hash [...] if SHORTHASH defined */
-typedef struct {
-  struct
+  union
   {
-#ifdef WORDS_BIGENDIAN
-    quarterword RH, LH;
-#else
-    quarterword LH, RH;
+    halfword lh;
+
+    struct
+    {
+      quarterword b0, b1;
+    };
+  };
 #endif
-  } v;
-} htwohalves;
+} two_halves;
 
 typedef struct
 {
-  struct
-  {
 #ifdef WORDS_BIGENDIAN
-    quarterword B0, B1, B2, B3;
+  quarterword b0, b1, b2, b3;
 #else
-    quarterword B3, B2, B1, B0;
+  quarterword b3, b2, b1, b0;
 #endif
-  } u;
-} fourquarters;
-
+} four_quarters;
 
 typedef union
 {
-#ifdef TeX
   glue_ratio gr;
-  twohalves hh;
-#else
-  twohalves hhfield;
-#endif
-#ifdef WORDS_BIGENDIAN
+  two_halves hh;
   integer cint;
-  fourquarters qqqq;
-#else /* not WORDS_BIGENDIAN */
-  struct
-  {
-#if defined (TeX) && !defined (SMALLTeX) || !defined (TeX) && !defined (SMALLMF)
-    halfword junk;
-#endif /* big TeX or big MF */
-    integer CINT;
-  } u;
-
-  struct
-  {
-#if defined (TeX) && !defined (SMALLTeX) || !defined (TeX) && !defined (SMALLMF)
-    halfword junk;
-#endif /* big TeX or big MF */
-    fourquarters QQQQ;
-  } v;
-#endif /* not WORDS_BIGENDIAN */
+  four_quarters qqqq;
 } memory_word;
 
-/* Attempt to reduce size of font_info array ... (and hence format files) */
-
-typedef struct
-{
-  struct
-  {
-#ifdef WORDS_BIGENDIAN
-    unsigned char B0, B1, B2, B3;
-#else
-    unsigned char B3, B2, B1, B0;
-#endif
-  } u;
-} ffourquarters; /* was fourunsignedchars; */
-
-#define fquarterword unsigned char
-
-typedef union
-{
-  integer cint;
-  ffourquarters qqqq;
-} fmemoryword;
-
-/* To keep the original structure accesses working, we must go through
-   the extra names C forced us to introduce.  */
-#define b0 u.B0
-#define b1 u.B1
-#define b2 u.B2
-#define b3 u.B3
-
-#define rh v.RH
-#define lhfield v.LH
-
 #ifndef WORDS_BIGENDIAN
 #define cint u.CINT
 #define qqqq v.QQQQ
-#endif
+#endif
\ No newline at end of file