Patches for Wine on 256 colour display and sparc

Gregg Mattinson gm138242 at scot.canada.sun.com
Tue May 28 07:16:58 CDT 2002


This is a re-submit of the patch I sent on May 23.  My diff wasn't in diff -u 
format.  I have modified it now so that it is.


This patch is against the wine-20020509 snapshot.

include/winnt.h:
 - Fixed the LARGE_INTEGER and ULARGE_INTEGER unions for big endian.

server/trace.c:
 - Removed crash from dump_uints

dlls/ntdll/time.c:
 - Removed alignment problem in RtlSecondsSince19?0ToTime

graphics/x11drv/palette.c:
 - Icon colours on 256 colour display were wrong.
 - Caused by using 0 in X11DRV_PALETTE_XPixelToPalette to represent free colour
 - index 0 originally mapped to pixel 1
 - X11DRV_PALETTE_FillDefaultColors mapped index 50 to pixel 1, and hence pixel 
1 was now mapped to 50 instead of 0.
 - Replaced 0's with -1's

Gregg Mattinson
Co-op Developer
Sun Microsystems of Canada

-------------- next part --------------
*** include/,winnt.h    Sat May  4 14:37:08 2002
--- include/winnt.h     Fri May 17 13:11:48 2002
***************
*** 3601,3608 ****
--- 3601,3613 ----
  
  typedef union _LARGE_INTEGER {
      struct {
+ #ifdef WORDS_BIGENDIAN
+         LONG     HighPart;
          DWORD    LowPart;
+ #else
+         DWORD    LowPart;
          LONG     HighPart;
+ #endif
      } DUMMYSTRUCTNAME;
      LONGLONG QuadPart;
  } LARGE_INTEGER, *LPLARGE_INTEGER, *PLARGE_INTEGER;
***************
*** 3609,3616 ****
--- 3614,3626 ----
  
  typedef union _ULARGE_INTEGER {
      struct {
+ #ifdef WORDS_BIGENDIAN
+         DWORD    HighPart;
          DWORD    LowPart;
+ #else
+         DWORD    LowPart;
          DWORD    HighPart;
+ #endif
      } DUMMYSTRUCTNAME;
      ULONGLONG QuadPart;
  } ULARGE_INTEGER, *LPULARGE_INTEGER, *PULARGE_INTEGER;


*** server/,trace.c     Thu May 23 10:42:47 2002
--- server/trace.c      Wed May 15 13:45:54 2002
***************
*** 47,57 ****
--- 47,64 ----
  static void dump_uints( const int *ptr, int len )
  {
      fputc( '{', stderr );
-     while (len > 0)
+     if (!ptr)
      {
-       fprintf( stderr, "%08x", *ptr++ );
-       if (--len) fputc( ',', stderr );
+       fprintf( stderr, "dump_uints error: ptr is NULL" );
      }
+     else
+     {
+       while (len > 0)
+       {
+           fprintf( stderr, "%08x", *ptr++ );
+           if (--len) fputc( ',', stderr );
+       }
+     }
      fputc( '}', stderr );
  }
  

*** dlls/ntdll/,time.c     Thu May 23 10:53:22 2002
--- dlls/ntdll/time.c      Thu May 23 10:56:16 2002
***************
*** 231,237 ****
--- 231,243 ----
  void WINAPI RtlSecondsSince1970ToTime( DWORD time, FILETIME *res )
  {
      LONGLONG secs = time + SECS_1601_TO_1970;
+ #ifdef ALLOW_UNALIGNED_ACCESS
      ((LARGE_INTEGER *)res)->QuadPart = RtlExtendedIntegerMultiply( secs, 10000000 );
+ #else
+     secs = RtlExtendedIntegerMultiply( secs, 10000000 );
+     res->dwLowDateTime  = ((LARGE_INTEGER*)&secs)->DUMMYSTRUCTNAME.LowPart;
+     res->dwHighDateTime = ((LARGE_INTEGER*)&secs)->DUMMYSTRUCTNAME.HighPart;
+ #endif
  }
  
  /******************************************************************************
***************
*** 240,246 ****
--- 246,258 ----
  void WINAPI RtlSecondsSince1980ToTime( DWORD time, FILETIME *res )
  {
      LONGLONG secs = time + SECS_1601_to_1980;
+ #ifdef ALLOW_UNALIGNED_ACCESS
      ((LARGE_INTEGER *)res)->QuadPart = RtlExtendedIntegerMultiply( secs, 10000000 );
+ #else
+     secs = RtlExtendedIntegerMultiply( secs, 10000000 );
+     res->dwLowDateTime  = ((LARGE_INTEGER*)&secs)->DUMMYSTRUCTNAME.LowPart;
+     res->dwHighDateTime = ((LARGE_INTEGER*)&secs)->DUMMYSTRUCTNAME.HighPart;
+ #endif
  }
  
  /******************************************************************************


*** graphics/x11drv/,palette.c  Thu May  2 17:49:50 2002
--- graphics/x11drv/palette.c   Thu May 23 11:00:37 2002
***************
*** 93,98 ****
--- 93,99 ----
  /**********************************************************************/
  
  #define NB_COLORCUBE_START_INDEX      63
+ #define NB_PALETTE_EMPTY_VALUE          -1
  
  /* Maps entry in the system palette to X pixel value */
  int *X11DRV_PALETTE_PaletteToXPixel = NULL;
***************
*** 571,576 ****
--- 572,579 ----
             ERR("Out of memory: XPixelToPalette!\n");
             return FALSE;
         }
+        for( i = 0; i < 256; i++ )
+          X11DRV_PALETTE_XPixelToPalette[i] = NB_PALETTE_EMPTY_VALUE;
     }
  
     /* for hicolor visuals PaletteToPixel mapping is used to skip
***************
*** 587,593 ****
--- 590,596 ----
     {
        if( i >= COLOR_gapStart && i <= COLOR_gapEnd ) 
        {
-          X11DRV_PALETTE_PaletteToXPixel[i] = 0;
+          X11DRV_PALETTE_PaletteToXPixel[i] = NB_PALETTE_EMPTY_VALUE;
           COLOR_sysPal[i].peFlags = 0; /* mark as unused */
           continue;
        }
***************
*** 691,697 ****
  
      max = COLOR_max - (256 - (COLOR_gapEnd - COLOR_gapStart));
      for ( i = 0, idx = COLOR_gapStart; i < 256 && idx <= COLOR_gapEnd; i++ )
-       if( X11DRV_PALETTE_XPixelToPalette[i] == 0 )
+       if( X11DRV_PALETTE_XPixelToPalette[i] == NB_PALETTE_EMPTY_VALUE )
        {
          xc.pixel = i;


More information about the wine-patches mailing list