From efad9d6d0b164bd37c84a9581dbf6397c7ffb3fa Mon Sep 17 00:00:00 2001
From: Michael Gernoth <michael@gernoth.net>
Date: Sun, 13 Jan 2008 16:23:06 +0100
Subject: [PATCH] only swap bytes in mini map when needed

---
 src/sim/g_smmaps.c     | 8 ++++----
 src/sim/headers/view.h | 2 +-
 src/sim/w_x.c          | 7 ++++++-
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/sim/g_smmaps.c b/src/sim/g_smmaps.c
index b29199b..4ca499a 100644
--- a/src/sim/g_smmaps.c
+++ b/src/sim/g_smmaps.c
@@ -141,10 +141,10 @@ int DynamicData[32];
 #define BE_ROW3_24 BE_ROW1_24(0) BE_ROW1_24(1) BE_ROW1_24(2)
 #define BE_ROW3_32 BE_ROW1_32(0) BE_ROW1_32(1) BE_ROW1_32(2)
 
-#define ROW3_8 if (view->x->big_endian) { BE_ROW3_8 } else { LE_ROW3_8 }
-#define ROW3_16 if (view->x->big_endian) { BE_ROW3_16 } else { LE_ROW3_16 }
-#define ROW3_24 if (view->x->big_endian) { BE_ROW3_24 } else { LE_ROW3_24 }
-#define ROW3_32 if (view->x->big_endian) { BE_ROW3_32 } else { LE_ROW3_32 }
+#define ROW3_8 if (view->x->needs_swap) { BE_ROW3_8 } else { LE_ROW3_8 }
+#define ROW3_16 if (view->x->needs_swap) { BE_ROW3_16 } else { LE_ROW3_16 }
+#define ROW3_24 if (view->x->needs_swap) { BE_ROW3_24 } else { LE_ROW3_24 }
+#define ROW3_32 if (view->x->needs_swap) { BE_ROW3_32 } else { LE_ROW3_32 }
 
 #define ROW3 \
 	  switch (view->x->depth) { \
diff --git a/src/sim/headers/view.h b/src/sim/headers/view.h
index aabdafe..8f87fe0 100644
--- a/src/sim/headers/view.h
+++ b/src/sim/headers/view.h
@@ -113,7 +113,7 @@ typedef struct XDisplay {
   Pixmap vert_stipple;
   Pixmap horiz_stipple;
   Pixmap diag_stipple;
-  int big_endian;
+  int needs_swap;
 } XDisplay;
 
 
diff --git a/src/sim/w_x.c b/src/sim/w_x.c
index 76e9ff6..513072e 100644
--- a/src/sim/w_x.c
+++ b/src/sim/w_x.c
@@ -490,6 +490,7 @@ SimView *
 InitNewView(SimView *view, char *title, int class, int w, int h)
 {
   int type, i;
+  int test = 1;
   int d = 8;
   unsigned long valuemask = 0;
   char *t;
@@ -584,7 +585,11 @@ InitNewView(SimView *view, char *title, int class, int w, int h)
     view->type = X_Mem_View;
   }
 
-  view->x->big_endian = (ImageByteOrder(view->x->dpy) == MSBFirst);
+  if ((ImageByteOrder(view->x->dpy) == MSBFirst) == !(*(unsigned char*) (&test)))
+    view->x->needs_swap = 0;
+  else
+    view->x->needs_swap = 1;
+
 
   GetPixmaps(view->x);
   view->pixels = view->x->pixels;
-- 
2.39.5