X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/93200bebd82795ae3fa18226d8e31e0be9e0f1cc..5a6a8ae5829f6f2836cb58d35629c5fa1f7eb4ba:/src/sim/w_x.c?ds=sidebyside

diff --git a/src/sim/w_x.c b/src/sim/w_x.c
index 69363b5..ef42536 100644
--- a/src/sim/w_x.c
+++ b/src/sim/w_x.c
@@ -327,28 +327,43 @@ FindXDisplay(Tk_Window tkwin)
 	      color->pixel; \
 	    break; \
 	  case 15: \
+	    if (xd->visual->red_mask == 0x7c00) { \
 	    xd->pixels[i] = \
 	      (((color->red >> (8 + 3)) & 0x1f) << (5 + 5)) | \
 	      (((color->green >> (8 + 2)) & 0x1f) << (5)) | \
 	      (((color->blue >> (8 + 3)) & 0x1f) << (0)); \
+	    } else { \
+	      (((color->blue >> (8 + 3)) & 0x1f) << (5 + 5)) | \
+	      (((color->green >> (8 + 2)) & 0x1f) << (5)) | \
+	      (((color->red >> (8 + 3)) & 0x1f) << (0)); \
+	    } \
 	    break; \
 	  case 16: \
+	    if (xd->visual->red_mask == 0xf800) { \
 	    xd->pixels[i] = \
 	      (((color->red >> (8 + 3)) & 0x1f) << (6 + 5)) | \
 	      (((color->green >> (8 + 2)) & 0x3f) << (5)) | \
 	      (((color->blue >> (8 + 3)) & 0x1f) << (0)); \
+	    } else { \
+	    xd->pixels[i] = \
+	      (((color->blue >> (8 + 3)) & 0x1f) << (6 + 5)) | \
+	      (((color->green >> (8 + 2)) & 0x3f) << (5)) | \
+	      (((color->red >> (8 + 3)) & 0x1f) << (0)); \
+	    } \
 	    break; \
 	  case 24: \
+	  case 32: \
+	    if (xd->visual->red_mask == 0xff0000) { \
 	    xd->pixels[i] = \
 	      ((color->red & 0xff) << 16) | \
 	      ((color->green & 0xff) << 8) | \
 	      ((color->blue & 0xff) << 0); \
-	    break; \
-	  case 32: \
+	    } else { \
 	    xd->pixels[i] = \
-	      ((color->red & 0xff) << 16) | \
+	      ((color->blue & 0xff) << 16) | \
 	      ((color->green & 0xff) << 8) | \
-	      ((color->blue & 0xff) << 0); \
+	      ((color->red & 0xff) << 0); \
+	    } \
 	    break; \
 	  } \
 	} \
@@ -488,6 +503,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;
@@ -582,6 +598,10 @@ InitNewView(SimView *view, char *title, int class, int w, int h)
     view->type = X_Mem_View;
   }
 
+  view->x->needs_swap = !(*(unsigned char*) (&test));
+  view->x->x_big_endian = (ImageByteOrder(view->x->dpy) == MSBFirst);
+
+
   GetPixmaps(view->x);
   view->pixels = view->x->pixels;
 
@@ -591,8 +611,6 @@ InitNewView(SimView *view, char *title, int class, int w, int h)
   view->pan_x = w / 2; view->pan_y = h / 2;
   DoResizeView(view, w, h);
 
-  GetViewTiles(view);
-
   return (view);
 }
 
@@ -1138,7 +1156,7 @@ DoResizeView(SimView *view, int w, int h)
 	  view->pixel_bytes = 2;
 	  view->depth = 15;
 	  bitmap_pad = 16;
-	  bitmap_depth = 16;
+	  bitmap_depth = 15;
 	  view->line_bytes8 =
 	    ((view->m_width * view->pixel_bytes) + 3) & (~3);
 	  break;
@@ -1224,6 +1242,9 @@ DoResizeView(SimView *view, int w, int h)
       }
     }
   }
+
+  GetViewTiles(view);
+
 }