0023792: 3D viewer window content is blended with Linux desktop
[occt.git] / src / Xw / Xw_def_colormap.cxx
index d5ae96a..64a3970 100755 (executable)
 // and conditions governing the rights and limitations under the License.
 
 #ifdef HAVE_CONFIG_H
-include <config.h>
+  #include <config.h>
 #endif
 
-#define CTS17988       /*GG_240697
-//                     Ne pas chercher a ajuster la profondeur du visual
-//                     recherche en TrueColor par rapport aux MultiBuffers disponibles
-*/
-
-#define GG250997       /*
-//                     Pour le 2D et plans overlay prendre de
-//                     preference une colormap existante afin
-//                     d'eviter des pb d'installation sur la nouvelle
-//                     colormap.
-*/
-
-#define TEST   /*051297
-//             Ameliorer la recuperation de la colormap OVERLAY lorsque
-//             celle ci est invalide voir ligne 925-928
-*/
-
-#define PURIFY /*GG+STT 110199
-//             Avoid memory leak
-*/
-
-#define IMP040100      /*GG_040100 Overlay planes are not usable
-//                     when the alone installed colormap is used
-//                     by the default root visual.
-*/
-
 #include <Xw_Extension.h>
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#if (!defined (CTS17988))  && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H)
-# include <X11/extensions/multibuf.h>
-#endif
-
 #include <X11/Xmu/StdCmap.h>
 
-       /* ifdef then trace on */
-#ifdef TRACE
-#define TRACE_DEF_COLORMAP
-#define TRACE_CLOSE_COLORMAP
-#define TRACE_SET_COLORMAP_MAPPING
-#endif
-
 /*
    XW_EXT_COLORMAP* Xw_def_colormap(adisplay,pclass,ncolor,basemap,mapping):
    XW_EXT_DISPLAY *adisplay Extended Display structure
-   Xw_TypeOfVisual     pclass  Visual Class,must be one of :
-
-                       Xw_TOV_STATICGRAY,
-                       Xw_TOV_GRAYSCALE,
-                       Xw_TOV_STATICCOLOR,
-                       Xw_TOV_PSEUDOCOLOR,
-                       Xw_TOV_TRUECOLOR,
-                       Xw_TOV_DIRECTCOLOR,
-                       Xw_TOV_DEFAULT,
-                       Xw_TOV_PREFERRED_PSEUDOCOLOR,
-                       Xw_TOV_PREFERRED_TRUECOLOR,
-                       Xw_TOV_PREFERRED_OVERLAY,
-                       Xw_TOV_OVERLAY
-
-   int ncolor          Maximum Number of color to be allocated
-   Aspect_Handle basemap       User Colormap (Can be NULL)
-   Xw_TypeOfMapping    Colormap mapping ,must be ONE of
-
-                       XW_TOM_HARDRAMP,
-                       XW_TOM_SIMPLERAMP,
-                       XW_TOM_BESTRAMP,
-                       XW_TOM_COLORCUBE,
-                       XW_TOM_READONLY
-
-       Create a colormap extension with a colormap ID
-       compatible with the visual class required
+   Xw_TypeOfVisual        pclass        Visual Class,must be one of :
+
+                        Xw_TOV_STATICGRAY,
+                        Xw_TOV_GRAYSCALE,
+                        Xw_TOV_STATICCOLOR,
+                        Xw_TOV_PSEUDOCOLOR,
+                        Xw_TOV_TRUECOLOR,
+                        Xw_TOV_DIRECTCOLOR,
+                        Xw_TOV_DEFAULT,
+                        Xw_TOV_PREFERRED_PSEUDOCOLOR,
+                        Xw_TOV_PREFERRED_TRUECOLOR,
+                        Xw_TOV_PREFERRED_OVERLAY,
+                        Xw_TOV_OVERLAY
+
+   int ncolor                Maximum Number of color to be allocated
+   Aspect_Handle basemap        User Colormap (Can be NULL)
+   Xw_TypeOfMapping        Colormap mapping ,must be ONE of
+
+                        XW_TOM_HARDRAMP,
+                        XW_TOM_SIMPLERAMP,
+                        XW_TOM_BESTRAMP,
+                        XW_TOM_COLORCUBE,
+                        XW_TOM_READONLY
+
+        Create a colormap extension with a colormap ID
+        compatible with the visual class required
         allocate the max color cells in the colormap as if possible
-       depending of the actual Standard Colormap size.
-       NOTE than the resulting color number must be less than 
-       the required color number depending of the System color number used .
-       See Xw_get_colormap_info for more Informations
+        depending of the actual Standard Colormap size.
+        NOTE than the resulting color number must be less than
+        the required color number depending of the System color number used .
+        See Xw_get_colormap_info for more Informations
 
-       NOTE than if ncolor <= 0 this allocates the Maximum color
-            number in the colormap .
+        NOTE than if ncolor <= 0 this allocates the Maximum color
+             number in the colormap .
 
-       Returns Colormap extension address if successuful
-       Returns NULL if Bad Allocation 
-               or BadVisual class
-               or Bad resulting Color Number
+        Returns Colormap extension address if successuful
+         Returns NULL if Bad Allocation
+                or BadVisual class
+                or Bad resulting Color Number
 
    STATUS Xw_close_colormap(acolormap):
-   XW_EXT_COLORMAP* acolormap  Extended Colormap address
+   XW_EXT_COLORMAP* acolormap        Extended Colormap address
 
 
-       Destroy The specified Extended Colormap 
+        Destroy The specified Extended Colormap
 
-       Returns SUCCESS if successuful
-       Returns ERROR if Bad Extended Colormap
+        Returns SUCCESS if successuful
+         Returns ERROR if Bad Extended Colormap
 
    STATUS Xw_set_colormap_mapping(acolormap,mode)
-   XW_EXT_COLORMAP* acolormap  Extended Colormap address
+   XW_EXT_COLORMAP* acolormap        Extended Colormap address
    Xw_TypeOfMapping mode
 
-       Update the specified ColorMap in the requested Color Mapping
+        Update the specified ColorMap in the requested Color Mapping
 
-       Returns SUCCESS if successuful
-       Returns ERROR if Bad Extended Colormap
+        Returns SUCCESS if successuful
+         Returns ERROR if Bad Extended Colormap
 */
 
 #define MAXGRAY 13
@@ -135,22 +95,13 @@ static int  TrueColorMinDepth  = 12 ;
 static int  OverlayColorMinDepth  = 4 ;
 static int  MaxGray = MAXGRAY ;
 static int  MaxColorCube = MAXCOLORCUBE ;
-static int  EnableSunOverlay = False;  
+static int  EnableSunOverlay = False;
 static char svalue[80] ;
-static Atom DefaultAtom = 0 ; 
+static Atom DefaultAtom = 0 ;
 static const char *XW_RGB_BEST_MAP = "Xw_RGB_BEST_MAP" ;
 
-#ifdef XW_PROTOTYPE
 void* Xw_def_colormap (void* adisplay,Xw_TypeOfVisual pclass,
-                       int ncolor,Aspect_Handle basemap,Xw_TypeOfMapping mapping)
-#else
-void* Xw_def_colormap (adisplay,pclass,ncolor,basemap,mapping)
-void *adisplay ;
-Xw_TypeOfVisual pclass ;
-int ncolor ;
-Aspect_Handle basemap ;
-Xw_TypeOfMapping mapping ;
-#endif /*XW_PROTOTYPE*/
+                        int ncolor,Aspect_Handle basemap,Xw_TypeOfMapping mapping)
 {
 XW_EXT_DISPLAY *pdisplay = (XW_EXT_DISPLAY*)adisplay ;
 XW_EXT_COLORMAP *pcolormap = NULL ;
@@ -165,59 +116,59 @@ unsigned long backpixel = 0;
     }
 
     if( Xw_get_env("Xw_USE_DEFAULTS",svalue,sizeof(svalue)) ){
-       if( strlen(svalue) ) {
-           UseDefaults = svalue[0] ;
-       }
-       printf( " Xw_USE_DEFAULTS is '%c'\n",UseDefaults) ;
+        if( strlen(svalue) ) {
+            UseDefaults = svalue[0] ;
+        }
+        printf( " Xw_USE_DEFAULTS is '%c'\n",UseDefaults) ;
     }
     if( Xw_get_env("Xw_SET_COLOR_CUBE",svalue,sizeof(svalue)) ){
-       if( strlen(svalue) ) {
-           SetColorCube = svalue[0] ;
-       }
-       printf( " Xw_SET_COLOR_CUBE is '%c'\n",SetColorCube) ;
+        if( strlen(svalue) ) {
+            SetColorCube = svalue[0] ;
+        }
+        printf( " Xw_SET_COLOR_CUBE is '%c'\n",SetColorCube) ;
     }
     if( Xw_get_env("Xw_MIN_COLORS",svalue,sizeof(svalue)) ){
-       if( strlen(svalue) ) {
-           sscanf(svalue,"%d",&MinColors)  ;
-       }
-       printf( " Xw_MIN_COLORS is %d\n",MinColors) ;
+        if( strlen(svalue) ) {
+            sscanf(svalue,"%d",&MinColors)  ;
+        }
+        printf( " Xw_MIN_COLORS is %d\n",MinColors) ;
     }
     if( Xw_get_env("Xw_FRE_COLORS",svalue,sizeof(svalue)) ){
-       if( strlen(svalue) ) {
-           sscanf(svalue,"%d",&FreColors)  ;
-       }
-       printf( " Xw_FRE_COLORS is %d\n",FreColors) ;
+        if( strlen(svalue) ) {
+            sscanf(svalue,"%d",&FreColors)  ;
+        }
+        printf( " Xw_FRE_COLORS is %d\n",FreColors) ;
     }
     if( pdisplay->server == XW_SERVER_IS_HP ) TrueColorMinDepth = 8;
     if( Xw_get_env("Xw_SET_TRUE_COLOR_MIN_DEPTH",svalue,sizeof(svalue)) ){
-       if( strlen(svalue) ) {
-           sscanf(svalue,"%d",&TrueColorMinDepth)  ;
-       }
-       printf( " Xw_SET_TRUE_COLOR_MIN_DEPTH is %d\n",TrueColorMinDepth) ;
+        if( strlen(svalue) ) {
+            sscanf(svalue,"%d",&TrueColorMinDepth)  ;
+        }
+        printf( " Xw_SET_TRUE_COLOR_MIN_DEPTH is %d\n",TrueColorMinDepth) ;
     }
     if( Xw_get_env("Xw_SET_OVERLAY_COLOR_MIN_DEPTH",svalue,sizeof(svalue)) ){
-       if( strlen(svalue) ) {
-           sscanf(svalue,"%d",&OverlayColorMinDepth)  ;
-       }
-       printf( " Xw_SET_OVERLAY_COLOR_MIN_DEPTH is %d\n",OverlayColorMinDepth) ;
+        if( strlen(svalue) ) {
+            sscanf(svalue,"%d",&OverlayColorMinDepth)  ;
+        }
+        printf( " Xw_SET_OVERLAY_COLOR_MIN_DEPTH is %d\n",OverlayColorMinDepth) ;
     }
     if( Xw_get_env("Xw_MAX_GRAY",svalue,sizeof(svalue)) ){
-       if( strlen(svalue) ) {
-           sscanf(svalue,"%d",&MaxGray)  ;
-       }
-       printf( " Xw_MAX_GRAY is %d\n",MaxGray) ;
+        if( strlen(svalue) ) {
+            sscanf(svalue,"%d",&MaxGray)  ;
+        }
+        printf( " Xw_MAX_GRAY is %d\n",MaxGray) ;
     }
     if( Xw_get_env("Xw_MAX_COLORCUBE",svalue,sizeof(svalue)) ){
-       if( strlen(svalue) ) {
-           sscanf(svalue,"%d",&MaxColorCube)  ;
-       }
-       printf( " Xw_MAX_COLORCUBE is %d\n",MaxColorCube) ;
+        if( strlen(svalue) ) {
+            sscanf(svalue,"%d",&MaxColorCube)  ;
+        }
+        printf( " Xw_MAX_COLORCUBE is %d\n",MaxColorCube) ;
     }
     if( Xw_get_env("Xw_ENABLE_SUNOVERLAY",svalue,sizeof(svalue)) ){
-       if( svalue[0] == 'Y' ) EnableSunOverlay = True; 
-       else EnableSunOverlay = False;  
+        if( svalue[0] == 'Y' ) EnableSunOverlay = True;
+        else EnableSunOverlay = False;
 
-       printf( " Xw_ENABLE_SUNOVERLAY is %d\n",EnableSunOverlay) ;
+        printf( " Xw_ENABLE_SUNOVERLAY is %d\n",EnableSunOverlay) ;
     }
 
     if( UseDefaults == 'P' ) pclass = Xw_TOV_PREFERRED_PSEUDOCOLOR ;
@@ -228,11 +179,11 @@ unsigned long backpixel = 0;
 
     if( pclass == Xw_TOV_OVERLAY ) {
       ginfo = Xw_get_overlay_visual_info(pdisplay,
-                               Xw_TOV_PSEUDOCOLOR,&backpixel) ;
+                                Xw_TOV_PSEUDOCOLOR,&backpixel) ;
       if( !ginfo ) return (NULL) ;
     } else if( pclass == Xw_TOV_PREFERRED_OVERLAY ) {
       ginfo = Xw_get_overlay_visual_info(pdisplay,
-                               Xw_TOV_PSEUDOCOLOR,&backpixel) ;
+                                Xw_TOV_PSEUDOCOLOR,&backpixel) ;
       if( !ginfo ) pclass = Xw_TOV_PREFERRED_PSEUDOCOLOR;
     }
 
@@ -242,8 +193,8 @@ unsigned long backpixel = 0;
 
     if( !ginfo ) return (NULL) ;
 
-    if( !(pcolormap = Xw_add_colormap_structure(sizeof(XW_EXT_COLORMAP))) ) 
-                                                               return (NULL) ;
+    if( !(pcolormap = Xw_add_colormap_structure(sizeof(XW_EXT_COLORMAP))) )
+                                                                return (NULL) ;
     pcolormap->connexion = pdisplay ;
     pcolormap->visual = ginfo->visual ;
     pcolormap->backpixel = backpixel ;
@@ -256,315 +207,282 @@ RESTART :
     } else {
         cclass = _CCLASS;
     }
+
     switch ( cclass ) {
 
-       case TrueColor :
-           acolor = MAXCOLOR ;
-           pcolormap->maxucolor = acolor ; 
-           pcolormap->maxhcolor = _CVISUAL->map_entries *
-                                       _CVISUAL->map_entries *
-                                               _CVISUAL->map_entries ; 
-           pcolormap->info.base_pixel = 0 ;
+        case TrueColor :
+            acolor = MAXCOLOR ;
+            pcolormap->maxucolor = acolor ;
+            pcolormap->maxhcolor = _CVISUAL->map_entries *
+                                        _CVISUAL->map_entries *
+                                                _CVISUAL->map_entries ;
+            pcolormap->info.base_pixel = 0 ;
             if( (_DCLASS == TrueColor) &&
                         (UseDefaults == 'Y' || UseDefaults == 'P') ) {
               basemap = _CCOLORMAP ;
             } else if( UseDefaults == 'N' ) {
               basemap = 0 ;
-            }  
-
-           if( basemap ) {
-             _CINFO.colormap = basemap ; 
-           }
-
-           _CINFO.killid = 0 ;
-           _CINFO.visualid = _CVISUAL->visualid ;
-           if( !_CINFO.colormap ) {
-             _CINFO.killid = getpid();
-             _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT,
-                                                       _CVISUAL,AllocNone) ;
-           }
-           break ;
-
-       case PseudoColor :
-           {
-             unsigned long stdpixels[MAXCOLOR] ;
-             unsigned long usrpixels[MAXCOLOR] ;
-
-             if( ncolor ) {
-                 acolor = ncolor+1 ;
-             } else {
-                 acolor = MAXCOLOR ;
-             }
-             mcolor = 0 ;
-             fcolor = 0 ;
-
-             acolor = min(_CVISUAL->map_entries,acolor);
-             pcolormap->maxhcolor = min(_CVISUAL->map_entries,MAXCOLOR) ;
-
-             _CINFO.colormap = 0 ;
-             _CINFO.base_pixel = 0 ;
-             _CINFO.red_max = _CINFO.green_max = _CINFO.blue_max = 0 ;
-             _CINFO.killid = 1 ;
-             _CINFO.visualid = _CVISUAL->visualid ;
+            }
+
+            if( basemap ) {
+              _CINFO.colormap = basemap ;
+            }
+
+            _CINFO.killid = 0 ;
+            _CINFO.visualid = _CVISUAL->visualid ;
+            if( !_CINFO.colormap ) {
+              _CINFO.killid = getpid();
+              _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT,
+                                                        _CVISUAL,AllocNone) ;
+            }
+            break ;
+
+        case PseudoColor :
+            {
+              unsigned long stdpixels[MAXCOLOR] ;
+              unsigned long usrpixels[MAXCOLOR] ;
+
+              if( ncolor ) {
+                  acolor = ncolor+1 ;
+              } else {
+                  acolor = MAXCOLOR ;
+              }
+              mcolor = 0 ;
+              fcolor = 0 ;
+
+                    acolor = min(_CVISUAL->map_entries,acolor);
+              pcolormap->maxhcolor = min(_CVISUAL->map_entries,MAXCOLOR) ;
+
+              _CINFO.colormap = 0 ;
+              _CINFO.base_pixel = 0 ;
+              _CINFO.red_max = _CINFO.green_max = _CINFO.blue_max = 0 ;
+              _CINFO.killid = 1 ;
+              _CINFO.visualid = _CVISUAL->visualid ;
 
               if( (_DCLASS == PseudoColor) &&
                         (UseDefaults == 'Y' || UseDefaults == 'P') ) {
                   basemap = _CCOLORMAP ;
               } else if( UseDefaults == 'N' ) {
                   basemap = 0 ;
-              }  
-
-             if( basemap ) {
-                 _CINFO.colormap = basemap ; 
-             }
-
-             if( !_CINFO.colormap ) {  /* Create colormap */
-               _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT,
-                                               _CVISUAL,AllocNone) ;
-               usrpixels[0] = 0 ;
-               if( !_CINFO.colormap ) {
-                 /*ERROR*Colormap creation failed*/
-                 Xw_set_error(2,"Xw_def_colormap",NULL) ;
-                 Xw_del_colormap_structure(pcolormap) ;
-                 return (NULL) ;
-               }
-             } 
-                                       /* Allocate colors */
-             usrpixels[0] = 0;
-             while ( acolor && !XAllocColorCells(_CDISPLAY,
-                       _CINFO.colormap,True,NULL,0,usrpixels,acolor) ) {
-                 --acolor ;
-             }
-                               /* Verify if COLORS are Contigues */
-             for( i=j=1,n=b=d=0 ; i<acolor ; i++ ) {
-                 if( usrpixels[i] == usrpixels[i-1] + 1 )  {
-                     j++ ;
-                 } else {
-                     if( j > n ) {     /* Take the largest hole */
-                       b = d ;
-                       n = j ;
-                     }
-                     d = i ;
-                     j = 1 ;
-                 }
-             }
-             if( j > n ) {
-                 b = d ;
-                 n = j ;
-             }
-                               /* Verify FREE Space for other applications */
-             if( basemap ) {
-                 j = pcolormap->maxhcolor - (usrpixels[n-1]+1) ;
-                 if( b+j < fcolor ) { /* Let Free space as specified */
-                     j = fcolor - (b+j) ;
-                     b += j ; n -= j ;
-                 }
-                 if( n < mcolor ) {    /* Too few Colors */
-                     XFreeColors(_CDISPLAY,_CINFO.colormap,usrpixels,acolor,0);
-                     basemap = 0 ;
-                     goto RESTART ;
-                 }
-             }
-    
-             if( mapping == Xw_TOM_BESTRAMP ) {
-                               /* Base pixel must be EVEN */
-               if( usrpixels[b] & 1 ) {
-                 b++ ; --n ;   
-               }
-             }
-
-             if( n < acolor ) {
-                               /* Allocate ONLY %d contiguous colors */
-                 if( b ) {
-                     XFreeColors(_CDISPLAY,_CINFO.colormap,usrpixels,b,0) ;
-                 }
-                 if( b+n < acolor ) {
-                     XFreeColors(_CDISPLAY,_CINFO.colormap,
-                                               &usrpixels[b+n],acolor-b-n,0) ;
-                 }
-                 for( i=0 ; i<n ; i++,b++ ) usrpixels[i] = usrpixels[b] ;
-                 acolor = n ;
-#ifdef TRACE_DEF_COLORMAP
-                 if( Xw_get_trace() ) {
-                     Xw_set_error(105,"Xw_def_colormap",&acolor) ;
-                 }
-#endif
-             }
-
-             _CINFO.base_pixel = usrpixels[0] ;
-             pcolormap->maxucolor = acolor ;
-
-             if( (_CINFO.colormap != _CCOLORMAP) && 
-                       ((MinCmapsOfScreen(_CSCREEN) < 1) ||
-                                       (MaxCmapsOfScreen(_CSCREEN) == 1)) ) { 
-               /* Get the First usable color in DEFAULT colormap */
-               int scolor = pcolormap->maxhcolor ; 
-               XColor color ;
-
-               color.flags = DoRed | DoGreen | DoBlue ;
-               while ( scolor && !XAllocColorCells(_CDISPLAY,
-                   _CCOLORMAP,True,NULL,0,stdpixels,scolor) ) --scolor ;
-
-               XFreeColors(_CDISPLAY,_CCOLORMAP,stdpixels,scolor,0) ;
-
-               for( i=0 ; i<pcolormap->maxhcolor ; i++ ) {
-                   color.pixel =  _CINFO.base_pixel + i ;
-                   XQueryColor(_CDISPLAY,_CCOLORMAP,&color) ;
-                   XStoreColor(_CDISPLAY,_CINFO.colormap,&color) ;
-               }
-
-               if( scolor >= mcolor ) {
-                   pcolormap->maxucolor = scolor ;
-                   _CINFO.base_pixel = stdpixels[0] ;
-               }
-       
-             } 
-             acolor = pcolormap->maxucolor ;
-           } 
-           break ;
-
-       case StaticColor :
-           {
-//           unsigned long usrpixel ;
+              }
+
+              if( basemap ) {
+                  _CINFO.colormap = basemap ;
+              }
+
+              if( !_CINFO.colormap ) {        /* Create colormap */
+                _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT,
+                                                _CVISUAL,AllocNone) ;
+                usrpixels[0] = 0 ;
+                if( !_CINFO.colormap ) {
+                  /*ERROR*Colormap creation failed*/
+                  Xw_set_error(2,"Xw_def_colormap",NULL) ;
+                  Xw_del_colormap_structure(pcolormap) ;
+                  return (NULL) ;
+                     }
+              }
+                                        /* Allocate colors */
+              usrpixels[0] = 0;
+                  while ( acolor && !XAllocColorCells(_CDISPLAY,
+                        _CINFO.colormap,True,NULL,0,usrpixels,acolor) ) {
+                  --acolor ;
+              }
+                                /* Verify if COLORS are Contigues */
+              for( i=j=1,n=b=d=0 ; i<acolor ; i++ ) {
+                  if( usrpixels[i] == usrpixels[i-1] + 1 )  {
+                      j++ ;
+                  } else {
+                      if( j > n ) {        /* Take the largest hole */
+                        b = d ;
+                        n = j ;
+                      }
+                      d = i ;
+                      j = 1 ;
+                  }
+              }
+              if( j > n ) {
+                  b = d ;
+                  n = j ;
+              }
+                                /* Verify FREE Space for other applications */
+              if( basemap ) {
+                  j = pcolormap->maxhcolor - (usrpixels[n-1]+1) ;
+                  if( b+j < fcolor ) { /* Let Free space as specified */
+                      j = fcolor - (b+j) ;
+                      b += j ; n -= j ;
+                  }
+                      if( n < mcolor ) {        /* Too few Colors */
+                      XFreeColors(_CDISPLAY,_CINFO.colormap,usrpixels,acolor,0);
+                      basemap = 0 ;
+                      goto RESTART ;
+                  }
+              }
+
+              if( mapping == Xw_TOM_BESTRAMP ) {
+                                /* Base pixel must be EVEN */
+                    if( usrpixels[b] & 1 ) {
+                  b++ ; --n ;
+                }
+              }
+
+              if( n < acolor ) {
+                                  /* Allocate ONLY %d contiguous colors */
+                  if( b ) {
+                      XFreeColors(_CDISPLAY,_CINFO.colormap,usrpixels,b,0) ;
+                  }
+                  if( b+n < acolor ) {
+                      XFreeColors(_CDISPLAY,_CINFO.colormap,
+                                                &usrpixels[b+n],acolor-b-n,0) ;
+                  }
+                  for( i=0 ; i<n ; i++,b++ ) usrpixels[i] = usrpixels[b] ;
+                  acolor = n ;
+              }
+
+              _CINFO.base_pixel = usrpixels[0] ;
+              pcolormap->maxucolor = acolor ;
+
+                  if( (_CINFO.colormap != _CCOLORMAP) &&
+                        ((MinCmapsOfScreen(_CSCREEN) < 1) ||
+                                        (MaxCmapsOfScreen(_CSCREEN) == 1)) ) {
+                /* Get the First usable color in DEFAULT colormap */
+                int scolor = pcolormap->maxhcolor ;
+                XColor color ;
+
+                    color.flags = DoRed | DoGreen | DoBlue ;
+                while ( scolor && !XAllocColorCells(_CDISPLAY,
+                    _CCOLORMAP,True,NULL,0,stdpixels,scolor) ) --scolor ;
+
+                XFreeColors(_CDISPLAY,_CCOLORMAP,stdpixels,scolor,0) ;
+
+                for( i=0 ; i<pcolormap->maxhcolor ; i++ ) {
+                    color.pixel =  _CINFO.base_pixel + i ;
+                    XQueryColor(_CDISPLAY,_CCOLORMAP,&color) ;
+                    XStoreColor(_CDISPLAY,_CINFO.colormap,&color) ;
+                }
+
+                if( scolor >= mcolor ) {
+                    pcolormap->maxucolor = scolor ;
+                    _CINFO.base_pixel = stdpixels[0] ;
+                }
+
+                  }
+              acolor = pcolormap->maxucolor ;
+                }
+            break ;
+
+        case StaticColor :
+            {
+//              unsigned long usrpixel ;
               if( (_DCLASS == PseudoColor) && (_CCLASS == PseudoColor) &&
                         (UseDefaults == 'Y' || UseDefaults == 'P') ) {
                 basemap = _CCOLORMAP ;
               } else if( UseDefaults == 'N' ) {
                 basemap = 0 ;
-              }  
-             _CINFO.visualid = _CVISUAL->visualid ;
-             _CINFO.red_max = _CINFO.green_max = _CINFO.blue_max = 0 ;
-             _CINFO.red_mult = _CINFO.green_mult = _CINFO.blue_mult = 0 ;
-             _CINFO.killid = 0 ;
-             if( basemap ) {
-               _CINFO.colormap = basemap ; 
-             }
-
-             if( !_CINFO.colormap ) {  /* Create colormap */
-               _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT,
-                                                       _CVISUAL,AllocNone) ;
-               if( !_CINFO.colormap ) {
-                   /*ERROR*Colormap creation failed*/
-                   Xw_set_error(2,"Xw_def_colormap",NULL) ;
-                   Xw_del_colormap_structure(pcolormap) ;
-                   return (NULL) ;
-               }
-             }
-             _CINFO.base_pixel = 0 ;
-             acolor = (ncolor > 0) ? ncolor : MAXCOLOR ;
-             if( _CCLASS != TrueColor ) {
-               pcolormap->maxhcolor = min(_CVISUAL->map_entries,MAXCOLOR) ; 
-             } else {
-               pcolormap->maxhcolor = _CVISUAL->map_entries *
-                                       _CVISUAL->map_entries *
-                                               _CVISUAL->map_entries ; 
-             }
-             pcolormap->maxucolor = min(acolor,pcolormap->maxhcolor);
-           }
-           break ;
-
-       case StaticGray :
-       case GrayScale :
-       case DirectColor :
-           /*ERROR*Unimplemented Visual class*/
-           Xw_set_error(5,"Xw_def_colormap",&pclass) ;
-           return (NULL) ;
+              }
+              _CINFO.visualid = _CVISUAL->visualid ;
+              _CINFO.red_max = _CINFO.green_max = _CINFO.blue_max = 0 ;
+              _CINFO.red_mult = _CINFO.green_mult = _CINFO.blue_mult = 0 ;
+              _CINFO.killid = 0 ;
+              if( basemap ) {
+                _CINFO.colormap = basemap ;
+              }
+
+              if( !_CINFO.colormap ) {        /* Create colormap */
+                _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT,
+                                                        _CVISUAL,AllocNone) ;
+                if( !_CINFO.colormap ) {
+                    /*ERROR*Colormap creation failed*/
+                    Xw_set_error(2,"Xw_def_colormap",NULL) ;
+                    Xw_del_colormap_structure(pcolormap) ;
+                    return (NULL) ;
+                     }
+              }
+              _CINFO.base_pixel = 0 ;
+                  acolor = (ncolor > 0) ? ncolor : MAXCOLOR ;
+              if( _CCLASS != TrueColor ) {
+                pcolormap->maxhcolor = min(_CVISUAL->map_entries,MAXCOLOR) ;
+              } else {
+                pcolormap->maxhcolor = _CVISUAL->map_entries *
+                                        _CVISUAL->map_entries *
+                                                _CVISUAL->map_entries ;
+              }
+              pcolormap->maxucolor = min(acolor,pcolormap->maxhcolor);
+            }
+            break ;
+
+        case StaticGray :
+        case GrayScale :
+        case DirectColor :
+            /*ERROR*Unimplemented Visual class*/
+            Xw_set_error(5,"Xw_def_colormap",&pclass) ;
+            return (NULL) ;
     }
 
     Xw_set_colormap_mapping(pcolormap,mapping) ;
     Xw_def_highlight_color(pcolormap,1.,1.,1.) ;
 
-#ifdef TRACE_DEF_COLORMAP
-if( Xw_get_trace() ) {
-    printf(" %lx = Xw_def_colormap(%lx,%d,%d)\n",
-          (long ) pcolormap,(long ) adisplay,pclass,acolor) ;
-}
-#endif
-
     return (pcolormap);
 }
 
 static XW_EXT_COLORMAP *PcolormapList =NULL ;
 
-#ifdef XW_PROTOTYPE
+//! Create and Insert one Extended colormap structure in the
+//! EXtended colormap List
+//! returns Extended colormap address if successful
+//! or NULL if Bad Allocation
 XW_EXT_COLORMAP* Xw_add_colormap_structure(int size)
-#else
-XW_EXT_COLORMAP* Xw_add_colormap_structure(size)
-int size ;
-#endif /*XW_PROTOTYPE*/
-/*
-        Create and Insert one Extended colormap structure in the
-        EXtended colormap List
-
-        returns Extended colormap address if successful
-                or NULL if Bad Allocation
-*/
 {
 XW_EXT_COLORMAP *pcolormap = (XW_EXT_COLORMAP*) Xw_malloc(size) ;
 //int i ;
 
         if( pcolormap ) {
-           pcolormap->type = COLORMAP_TYPE ;
+            pcolormap->type = COLORMAP_TYPE ;
             pcolormap->link = PcolormapList ;
             PcolormapList = pcolormap ;
-           pcolormap->connexion = NULL ;
-           pcolormap->visual = NULL ;
-           pcolormap->maxcolor = 0 ;
-           pcolormap->maxhcolor = 0 ;
-           pcolormap->maxucolor = 0 ;
-           pcolormap->maxwindow = 0 ;
-           pcolormap->mapping = (Xw_TypeOfMapping)-1 ;
-           pcolormap->highpixel = 0 ;
-           pcolormap->backpixel = 0 ;
-           pcolormap->info.base_pixel = 0 ;
-           pcolormap->info.red_max = 0 ;
-           pcolormap->info.red_mult = 0 ;
-           pcolormap->info.green_max = 0 ;
-           pcolormap->info.green_mult = 0 ;
-           pcolormap->info.blue_max = 0 ;
-           pcolormap->info.blue_mult = 0 ;
-           pcolormap->info.colormap = 0 ;
-           pcolormap->ginfo.base_pixel = 0 ;
-           pcolormap->ginfo.red_max = 0 ;
-           pcolormap->ginfo.red_mult = 0 ;
-           pcolormap->ginfo.green_max = 0 ;
-           pcolormap->ginfo.green_mult = 0 ;
-           pcolormap->ginfo.blue_max = 0 ;
-           pcolormap->ginfo.blue_mult = 0 ;
-           pcolormap->ginfo.colormap = 0 ;
+            pcolormap->connexion = NULL ;
+            pcolormap->visual = NULL ;
+            pcolormap->maxcolor = 0 ;
+            pcolormap->maxhcolor = 0 ;
+            pcolormap->maxucolor = 0 ;
+            pcolormap->maxwindow = 0 ;
+            pcolormap->mapping = (Xw_TypeOfMapping)-1 ;
+            pcolormap->highpixel = 0 ;
+            pcolormap->backpixel = 0 ;
+            pcolormap->info.base_pixel = 0 ;
+            pcolormap->info.red_max = 0 ;
+            pcolormap->info.red_mult = 0 ;
+            pcolormap->info.green_max = 0 ;
+            pcolormap->info.green_mult = 0 ;
+            pcolormap->info.blue_max = 0 ;
+            pcolormap->info.blue_mult = 0 ;
+            pcolormap->info.colormap = 0 ;
+            pcolormap->ginfo.base_pixel = 0 ;
+            pcolormap->ginfo.red_max = 0 ;
+            pcolormap->ginfo.red_mult = 0 ;
+            pcolormap->ginfo.green_max = 0 ;
+            pcolormap->ginfo.green_mult = 0 ;
+            pcolormap->ginfo.blue_max = 0 ;
+            pcolormap->ginfo.blue_mult = 0 ;
+            pcolormap->ginfo.colormap = 0 ;
         } else {
-           /*ERROR*EXT_COLORMAP allocation failed*/
-           Xw_set_error(6,"Xw_add_colormap_structure",NULL) ;
+            /*ERROR*EXT_COLORMAP allocation failed*/
+            Xw_set_error(6,"Xw_add_colormap_structure",NULL) ;
         }
 
         return (pcolormap) ;
 }
 
-#ifdef XW_PROTOTYPE
+//! Get the NEXT ColorMap structure from the List
+//! returns Extended colormap address if successful
+//! or NULL if No MORE Colormap is found
 XW_EXT_COLORMAP* Xw_get_colormap_structure(XW_EXT_COLORMAP* pcolormap)
-#else
-XW_EXT_COLORMAP* Xw_get_colormap_structure(pcolormap)
-XW_EXT_COLORMAP *pcolormap ;
-#endif /*XW_PROTOTYPE*/
-/*
-        Get the NEXT ColorMap structure from the List
-
-        returns Extended colormap address if successful
-                or NULL if No MORE Colormap is found
-*/
 {
 
-       if( pcolormap ) return (XW_EXT_COLORMAP*)pcolormap->link ;
-       else            return (PcolormapList) ;
+        if( pcolormap ) return (XW_EXT_COLORMAP*)pcolormap->link ;
+        else                return (PcolormapList) ;
 }
 
-#ifdef XW_PROTOTYPE
 XW_STATUS Xw_close_colormap(void* acolormap)
-#else
-XW_STATUS Xw_close_colormap(acolormap)
-void *acolormap;
-#endif /*XW_PROTOTYPE*/
 {
 XW_EXT_COLORMAP *pcolormap = (XW_EXT_COLORMAP*)acolormap ;
 XW_STATUS status ;
@@ -577,28 +495,14 @@ XW_STATUS status ;
 
     status = Xw_del_colormap_structure(pcolormap) ;
 
-#ifdef TRACE_CLOSE_COLORMAP
-if( Xw_get_trace() ) {
-    printf(" %d = Xw_close_colormap(%lx)\n",status,(long ) pcolormap) ;
-}
-#endif
-
     return (status) ;
 }
 
-#ifdef XW_PROTOTYPE
+//! Remove the Extended colormap address from the Extended List and
+//! Free the Extended Colormap
+//! returns ERROR if the colormap address is not Found in the list
+//! returns SUCCESS if successful
 XW_STATUS Xw_del_colormap_structure(XW_EXT_COLORMAP* pcolormap)
-#else
-XW_STATUS Xw_del_colormap_structure(pcolormap)
-XW_EXT_COLORMAP *pcolormap;
-#endif /*XW_PROTOTYPE*/
-/*
-        Remove the Extended colormap address from the Extended List and
-        Free the Extended Colormap
-
-        returns ERROR if the colormap address is not Found in the list
-        returns SUCCESS if successful
-*/
 {
 XW_EXT_COLORMAP *fcolormap;
 //int i ;
@@ -608,28 +512,28 @@ XW_EXT_COLORMAP *fcolormap;
     if( pcolormap->maxwindow ) {
         return (XW_ERROR) ;
     } else {
-       if( (_CINFO.killid == (unsigned int ) getpid()) && _CINFO.colormap ) {
-         if( _CINFO.colormap != _CCOLORMAP ) {
+        if( (_CINFO.killid == (unsigned int ) getpid()) && _CINFO.colormap ) {
+          if( _CINFO.colormap != _CCOLORMAP ) {
             XFreeColormap(_CDISPLAY,_CINFO.colormap) ;
-            for( fcolormap = PcolormapList ; fcolormap ; 
-                               fcolormap = (XW_EXT_COLORMAP*)fcolormap->link ) {
-               if( (fcolormap != pcolormap) && 
-                       (fcolormap->info.colormap == _CINFO.colormap) ) {
-                 fcolormap->info.colormap = 0 ;
-               }
+            for( fcolormap = PcolormapList ; fcolormap ;
+                                fcolormap = (XW_EXT_COLORMAP*)fcolormap->link ) {
+                if( (fcolormap != pcolormap) &&
+                        (fcolormap->info.colormap == _CINFO.colormap) ) {
+                      fcolormap->info.colormap = 0 ;
+                }
             }
-           _CINFO.colormap = 0;
-         }
-         DefaultAtom = XInternAtom(_CDISPLAY,XW_RGB_BEST_MAP,True) ;
-         if( DefaultAtom ) {
-           XDeleteProperty(_CDISPLAY,_CROOT,DefaultAtom);
-         }
-       }
+            _CINFO.colormap = 0;
+          }
+          DefaultAtom = XInternAtom(_CDISPLAY,XW_RGB_BEST_MAP,True) ;
+          if( DefaultAtom ) {
+            XDeleteProperty(_CDISPLAY,_CROOT,DefaultAtom);
+          }
+        }
         if( pcolormap == PcolormapList ) {
             PcolormapList = (XW_EXT_COLORMAP*)pcolormap->link ;
         } else {
-            for( fcolormap = PcolormapList ; fcolormap ; 
-                                       fcolormap = (XW_EXT_COLORMAP*)fcolormap->link ) {
+            for( fcolormap = PcolormapList ; fcolormap ;
+                                        fcolormap = (XW_EXT_COLORMAP*)fcolormap->link ) {
                 if( fcolormap->link == pcolormap ) {
                     fcolormap->link = pcolormap->link ;
                     break ;
@@ -641,27 +545,18 @@ XW_EXT_COLORMAP *fcolormap;
     return (XW_SUCCESS) ;
 }
 
-#ifdef XW_PROTOTYPE
+//! Set MAPPING Colormap mode
+//! if mapping is SIMPLERAMP all color cells access is done
+//!   across the PIXEL index array .
+//! if mapping is BESTRAMP all color cells access is done
+//!   across the PIXEL index array and an HIGHLIGHT plane is created .
+//! if mapping is HARDRAMP all color cells access is done
+//!   directly (Make becarefull !!)
+//! if mapping is COLORCUBE all color cells access is done
+//!   across a ColorCube PIXEL index array .
+//! if mapping is READONLY all color cells access is done
+//!   across a readonly PIXEL index array without color allocation.
 XW_STATUS Xw_set_colormap_mapping(void* acolormap,Xw_TypeOfMapping mode)
-#else
-XW_STATUS Xw_set_colormap_mapping(acolormap,mode)
-void *acolormap ;
-Xw_TypeOfMapping mode ;
-#endif /*XW_PROTOTYPE*/
-/*
-        Set MAPPING Colormap mode
-
-        if mapping is SIMPLERAMP all color cells access is done
-           across the PIXEL index array .
-        if mapping is BESTRAMP all color cells access is done
-           across the PIXEL index array and an HIGHLIGHT plane is created .
-        if mapping is HARDRAMP all color cells access is done
-           directly (Make becarefull !!)
-        if mapping is COLORCUBE all color cells access is done
-           across a ColorCube PIXEL index array .
-        if mapping is READONLY all color cells access is done
-           across a readonly PIXEL index array without color allocation.
-*/
 {
 XW_EXT_COLORMAP *pcolormap = (XW_EXT_COLORMAP*)acolormap ;
 int status,cstatus,gstatus ;
@@ -688,296 +583,293 @@ int nmap;
     case Xw_TOV_TRUECOLOR :
       switch (mode) {
 
-       case Xw_TOM_SIMPLERAMP :
-       case Xw_TOM_READONLY :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = AllPlanes ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_READONLY :
-               case Xw_TOM_BESTRAMP :
-               case Xw_TOM_HARDRAMP :
-               case Xw_TOM_COLORCUBE :
-                   break ;
-               default :
-                   for( i=0 ; i<MAXCOLOR ; i++ ) {
-                       pcolormap->define[i] = FREECOLOR ;
-                       pcolormap->pixels[i] = 0 ;
-                   }
-           }
-           break ;
-       case Xw_TOM_BESTRAMP :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = AllPlanes ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_READONLY :
-               case Xw_TOM_SIMPLERAMP :
-               case Xw_TOM_HARDRAMP :
-               case Xw_TOM_COLORCUBE :
-                   break ;
-               default :
-                   for( i=0 ; i<MAXCOLOR ; i++ ) {
-                       pcolormap->define[i] = FREECOLOR ;
-                       pcolormap->pixels[i] = 0 ;
-                   }
-           }
-           break ;
-       case Xw_TOM_HARDRAMP :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = AllPlanes ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_READONLY :
-               case Xw_TOM_SIMPLERAMP :
-               case Xw_TOM_BESTRAMP :
-               case Xw_TOM_COLORCUBE :
-                   break ;
-               default :
-                   for( i=0 ; i<MAXCOLOR ; i++ ) {
-                       pcolormap->define[i] = FREECOLOR ;
-                       pcolormap->pixels[i] = 0 ;
-                   }
-           }
-           break ;
-       case Xw_TOM_COLORCUBE :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = AllPlanes ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_READONLY :
-               case Xw_TOM_SIMPLERAMP :
-               case Xw_TOM_BESTRAMP :
-               case Xw_TOM_HARDRAMP :
-               default :
-                   for( i=0 ; i<MAXCOLOR ; i++ ) {
-                       pcolormap->define[i] = FREECOLOR ;
-                       pcolormap->pixels[i] = 0 ;
-                   }
-                   nccolor = pcolormap->maxhcolor;
-                   if( nccolor > 0 ) {
-                     _CINFO.red_max = _CVISUAL->red_mask;
-                     _CINFO.red_mult = 1;
-                     while ( !(_CINFO.red_max & 0x01) ) {
-                             _CINFO.red_max >>= 1;
-                             _CINFO.red_mult <<= 1;
-                     }  
-                     _CINFO.green_max = _CVISUAL->green_mask;
-                     _CINFO.green_mult = 1;
-                             while ( !(_CINFO.green_max & 0x01) ) {
-                             _CINFO.green_max >>= 1;
-                             _CINFO.green_mult <<= 1;
-                     }  
-                     _CINFO.blue_max = _CVISUAL->blue_mask;
-                     _CINFO.blue_mult = 1;
-                     while ( !(_CINFO.blue_max & 0x01) ) {
-                             _CINFO.blue_max >>= 1;
-                             _CINFO.blue_mult <<= 1;
-                     }
-                     status = XmuCreateColormap(_CDISPLAY,&_CINFO);
-                   }
-                   ngcolor = _CVISUAL->red_mask + 1;
-                   if( ngcolor > 0 ) {
-                     _CGINFO.colormap = _CINFO.colormap;
-                     _CGINFO.base_pixel = _CINFO.base_pixel;
-                     _CGINFO.visualid = _CINFO.visualid;
-                     _CGINFO.killid = getpid();
-                     _CGINFO.red_max = _CVISUAL->red_mask;
-                     _CGINFO.red_mult = 1;
-                     while ( !(_CGINFO.red_max & 0x01) ) {
-                             _CGINFO.red_max >>= 1;
-                             _CGINFO.red_mult <<= 1;
-                     }  
-                     _CGINFO.green_max = _CVISUAL->green_mask;
-                     _CGINFO.green_mult = 1;
-                             while ( !(_CGINFO.green_max & 0x01) ) {
-                             _CGINFO.green_max >>= 1;
-                             _CGINFO.green_mult <<= 1;
-                     }  
-                     _CGINFO.blue_max = _CVISUAL->blue_mask;
-                     _CGINFO.blue_mult = 1;
-                     while ( !(_CGINFO.blue_max & 0x01) ) {
-                             _CGINFO.blue_max >>= 1;
-                             _CGINFO.blue_mult <<= 1;
-                     }
-                     _CGINFO.red_mult |= _CGINFO.green_mult | _CGINFO.blue_mult;
+        case Xw_TOM_SIMPLERAMP :
+        case Xw_TOM_READONLY :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = AllPlanes ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_READONLY :
+                case Xw_TOM_BESTRAMP :
+                case Xw_TOM_HARDRAMP :
+                case Xw_TOM_COLORCUBE :
+                    break ;
+                default :
+                    for( i=0 ; i<MAXCOLOR ; i++ ) {
+                             pcolormap->define[i] = FREECOLOR ;
+                             pcolormap->pixels[i] = 0 ;
+                    }
+            }
+            break ;
+        case Xw_TOM_BESTRAMP :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = AllPlanes ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_READONLY :
+                case Xw_TOM_SIMPLERAMP :
+                case Xw_TOM_HARDRAMP :
+                case Xw_TOM_COLORCUBE :
+                    break ;
+                default :
+                    for( i=0 ; i<MAXCOLOR ; i++ ) {
+                             pcolormap->define[i] = FREECOLOR ;
+                             pcolormap->pixels[i] = 0 ;
+                    }
+            }
+            break ;
+        case Xw_TOM_HARDRAMP :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = AllPlanes ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_READONLY :
+                case Xw_TOM_SIMPLERAMP :
+                case Xw_TOM_BESTRAMP :
+                case Xw_TOM_COLORCUBE :
+                    break ;
+                default :
+                    for( i=0 ; i<MAXCOLOR ; i++ ) {
+                             pcolormap->define[i] = FREECOLOR ;
+                             pcolormap->pixels[i] = 0 ;
+                    }
+            }
+            break ;
+        case Xw_TOM_COLORCUBE :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = AllPlanes ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_READONLY :
+                case Xw_TOM_SIMPLERAMP :
+                case Xw_TOM_BESTRAMP :
+                case Xw_TOM_HARDRAMP :
+                default :
+                    for( i=0 ; i<MAXCOLOR ; i++ ) {
+                             pcolormap->define[i] = FREECOLOR ;
+                             pcolormap->pixels[i] = 0 ;
+                    }
+                        nccolor = pcolormap->maxhcolor;
+                    if( nccolor > 0 ) {
+                            _CINFO.red_max = _CVISUAL->red_mask;
+                            _CINFO.red_mult = 1;
+                            while ( !(_CINFO.red_max & 0x01) ) {
+                              _CINFO.red_max >>= 1;
+                              _CINFO.red_mult <<= 1;
+                            }
+                            _CINFO.green_max = _CVISUAL->green_mask;
+                            _CINFO.green_mult = 1;
+                             while ( !(_CINFO.green_max & 0x01) ) {
+                              _CINFO.green_max >>= 1;
+                              _CINFO.green_mult <<= 1;
+                            }
+                            _CINFO.blue_max = _CVISUAL->blue_mask;
+                            _CINFO.blue_mult = 1;
+                            while ( !(_CINFO.blue_max & 0x01) ) {
+                              _CINFO.blue_max >>= 1;
+                              _CINFO.blue_mult <<= 1;
+                            }
+                            status = XmuCreateColormap(_CDISPLAY,&_CINFO);
+                    }
+                        ngcolor = _CVISUAL->red_mask + 1;
+                    if( ngcolor > 0 ) {
+                            _CGINFO.colormap = _CINFO.colormap;
+                            _CGINFO.base_pixel = _CINFO.base_pixel;
+                            _CGINFO.visualid = _CINFO.visualid;
+                      _CGINFO.killid = getpid();
+                            _CGINFO.red_max = _CVISUAL->red_mask;
+                            _CGINFO.red_mult = 1;
+                            while ( !(_CGINFO.red_max & 0x01) ) {
+                              _CGINFO.red_max >>= 1;
+                              _CGINFO.red_mult <<= 1;
+                            }
+                            _CGINFO.green_max = _CVISUAL->green_mask;
+                            _CGINFO.green_mult = 1;
+                             while ( !(_CGINFO.green_max & 0x01) ) {
+                              _CGINFO.green_max >>= 1;
+                              _CGINFO.green_mult <<= 1;
+                            }
+                            _CGINFO.blue_max = _CVISUAL->blue_mask;
+                            _CGINFO.blue_mult = 1;
+                            while ( !(_CGINFO.blue_max & 0x01) ) {
+                              _CGINFO.blue_max >>= 1;
+                              _CGINFO.blue_mult <<= 1;
+                            }
+                            _CGINFO.red_mult |= _CGINFO.green_mult | _CGINFO.blue_mult;
                       _CGINFO.green_max = 0;
                       _CGINFO.green_mult = 1;
                       _CGINFO.blue_max = 0;
                       _CGINFO.blue_mult = 1;
-                     status = XmuCreateColormap(_CDISPLAY,&_CGINFO);
-                   }
-           }
-           break ;
+                            status = XmuCreateColormap(_CDISPLAY,&_CGINFO);
+                    }
+            }
+            break ;
       }
       break ;
 
     case Xw_TOV_STATICCOLOR :
       switch (mode) {
 
-       case Xw_TOM_SIMPLERAMP :
-       case Xw_TOM_READONLY :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = _CINFO.base_pixel+1 ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_READONLY :
-               case Xw_TOM_BESTRAMP :
-               case Xw_TOM_HARDRAMP :
-               case Xw_TOM_COLORCUBE :
-                   break ;
-               default :
-                   for( i=0 ; i<MAXCOLOR ; i++ ) {
-                       pcolormap->define[i] = FREECOLOR ;
-                       pcolormap->pixels[i] = 0 ;
-                   }
-           }
-           break ;
-       case Xw_TOM_BESTRAMP :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = _CINFO.base_pixel+1 ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_READONLY :
-               case Xw_TOM_SIMPLERAMP :
-               case Xw_TOM_HARDRAMP :
-               case Xw_TOM_COLORCUBE :
-                   break ;
-               default :
-                   for( i=0 ; i<MAXCOLOR ; i++ ) {
-                       pcolormap->define[i] = FREECOLOR ;
-                       pcolormap->pixels[i] = 0 ;
-                   }
-           }
-           break ;
-       case Xw_TOM_HARDRAMP :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = _CINFO.base_pixel+1 ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_READONLY :
-               case Xw_TOM_SIMPLERAMP :
-               case Xw_TOM_BESTRAMP :
-               case Xw_TOM_COLORCUBE :
-                   break ;
-               default :
-                   for( i=0 ; i<MAXCOLOR ; i++ ) {
-                       pcolormap->define[i] = FREECOLOR ;
-                       pcolormap->pixels[i] = 0 ;
-                   }
-           }
-           break ;
-       case Xw_TOM_COLORCUBE :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = _CINFO.base_pixel+1 ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_HARDRAMP :
-                   for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
-                       pcolormap->define[i] = define[_CINFO.base_pixel+i] ;
-                       pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ;
-                   }
-                   break ;
-               case Xw_TOM_SIMPLERAMP :
-               case Xw_TOM_READONLY :
-               case Xw_TOM_BESTRAMP :
-               default :
-                   for( i=0 ; i<MAXCOLOR ; i++ ) {
-                       pcolormap->define[i] = FREECOLOR ;
-                       pcolormap->pixels[i] = 0 ;
-                   }
-                   color.flags = DoRed | DoGreen | DoBlue ;
-                   size = (int)(pow((double)pcolormap->maxucolor,
-                                               (double)1./3.)+0.1);
-                   for( ; size > 0 ; --size ) {
-                       nccolor = size*size*size ;
-                       if( (nccolor <= pcolormap->maxucolor) && (nccolor <= MaxColorCube) ) break ;
-                   }
-                   _CINFO.red_max = size-1 ; _CINFO.red_mult = 1 ;
-                   _CINFO.green_max = size-1 ; _CINFO.green_mult = size ;
-                   _CINFO.blue_max = size-1 ; _CINFO.blue_mult = size*size ;
-                   for( iu=n=0 ; iu<=_CINFO.blue_max ; iu++ ) {
+        case Xw_TOM_SIMPLERAMP :
+        case Xw_TOM_READONLY :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = _CINFO.base_pixel+1 ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_READONLY :
+                case Xw_TOM_BESTRAMP :
+                case Xw_TOM_HARDRAMP :
+                case Xw_TOM_COLORCUBE :
+                    break ;
+                default :
+                    for( i=0 ; i<MAXCOLOR ; i++ ) {
+                             pcolormap->define[i] = FREECOLOR ;
+                             pcolormap->pixels[i] = 0 ;
+                    }
+            }
+            break ;
+        case Xw_TOM_BESTRAMP :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = _CINFO.base_pixel+1 ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_READONLY :
+                case Xw_TOM_SIMPLERAMP :
+                case Xw_TOM_HARDRAMP :
+                case Xw_TOM_COLORCUBE :
+                    break ;
+                default :
+                    for( i=0 ; i<MAXCOLOR ; i++ ) {
+                             pcolormap->define[i] = FREECOLOR ;
+                             pcolormap->pixels[i] = 0 ;
+                    }
+            }
+            break ;
+        case Xw_TOM_HARDRAMP :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = _CINFO.base_pixel+1 ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_READONLY :
+                case Xw_TOM_SIMPLERAMP :
+                case Xw_TOM_BESTRAMP :
+                case Xw_TOM_COLORCUBE :
+                    break ;
+                default :
+                    for( i=0 ; i<MAXCOLOR ; i++ ) {
+                             pcolormap->define[i] = FREECOLOR ;
+                             pcolormap->pixels[i] = 0 ;
+                    }
+            }
+            break ;
+        case Xw_TOM_COLORCUBE :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = _CINFO.base_pixel+1 ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_HARDRAMP :
+                    for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
+                        pcolormap->define[i] = define[_CINFO.base_pixel+i] ;
+                        pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ;
+                    }
+                    break ;
+                case Xw_TOM_SIMPLERAMP :
+                case Xw_TOM_READONLY :
+                case Xw_TOM_BESTRAMP :
+                default :
+                    for( i=0 ; i<MAXCOLOR ; i++ ) {
+                             pcolormap->define[i] = FREECOLOR ;
+                             pcolormap->pixels[i] = 0 ;
+                    }
+                    color.flags = DoRed | DoGreen | DoBlue ;
+                        size = (int)(pow((double)pcolormap->maxucolor,
+                                                (double)1./3.)+0.1);
+                    for( ; size > 0 ; --size ) {
+                        nccolor = size*size*size ;
+                        if( (nccolor <= pcolormap->maxucolor) && (nccolor <= MaxColorCube) ) break ;
+                    }
+                        _CINFO.red_max = size-1 ; _CINFO.red_mult = 1 ;
+                        _CINFO.green_max = size-1 ; _CINFO.green_mult = size ;
+                        _CINFO.blue_max = size-1 ; _CINFO.blue_mult = size*size ;
+                        for( iu=n=0 ; iu<=_CINFO.blue_max ; iu++ ) {
                       blue = (_CINFO.blue_max > 0) ?
-                               (0xFFFF*iu)/_CINFO.blue_max : 0xFFFF ;
+                                (0xFFFF*iu)/_CINFO.blue_max : 0xFFFF ;
                       for( ju=0 ; ju<=_CINFO.green_max ; ju++ ) {
                         green = (_CINFO.green_max > 0) ?
-                               (0xFFFF*ju)/_CINFO.green_max : 0xFFFF ;
+                                (0xFFFF*ju)/_CINFO.green_max : 0xFFFF ;
                         for( ku=0 ; ku<=_CINFO.red_max ; ku++,n++ ) {
                           red = (_CINFO.red_max > 0) ?
-                               (0xFFFF*ku)/_CINFO.red_max : 0xFFFF ;
-                         color.red = red ;
-                         color.green = green ;
-                         color.blue = blue ;
-                         XAllocColor(_CDISPLAY,_CINFO.colormap,&color) ;
+                                (0xFFFF*ku)/_CINFO.red_max : 0xFFFF ;
+                          color.red = red ;
+                          color.green = green ;
+                          color.blue = blue ;
+                          XAllocColor(_CDISPLAY,_CINFO.colormap,&color) ;
                           pcolormap->define[n] = SYSTEMCOLOR ;
                           pcolormap->pixels[n] = color.pixel ;
                         }
                       }
-                   }
-           }
-           break ;
+                    }
+            }
+            break ;
       }
       break ;
 
     case Xw_TOV_PSEUDOCOLOR :
       switch (mode) {
 
-       case Xw_TOM_SIMPLERAMP :
-       case Xw_TOM_READONLY :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = _CINFO.base_pixel+1 ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_BESTRAMP :
-                   for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
-                       if( j >= pcolormap->maxucolor ) j = 1 ;
-                       pcolormap->define[j] = define[i] ;
-                       pcolormap->pixels[j] = pixels[i] ;
-                   }
-                   break ;
-               case Xw_TOM_HARDRAMP :
-                   for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
-                       pcolormap->define[i] = define[_CINFO.base_pixel+i] ;
-                       pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ;
-                   }
-                   break ;
-               case Xw_TOM_COLORCUBE :
-               case Xw_TOM_READONLY :
-                   break ;
-               default :
-                   for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
-                       pcolormap->pixels[i] = _CINFO.base_pixel + i ;
-                       pcolormap->define[i] = FREECOLOR ;
-                   }
-           }
-#ifdef GG250997
-           if( mode == Xw_TOM_READONLY ) {
+        case Xw_TOM_SIMPLERAMP :
+        case Xw_TOM_READONLY :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = _CINFO.base_pixel+1 ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_BESTRAMP :
+                    for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
+                        if( j >= pcolormap->maxucolor ) j = 1 ;
+                        pcolormap->define[j] = define[i] ;
+                        pcolormap->pixels[j] = pixels[i] ;
+                    }
+                    break ;
+                case Xw_TOM_HARDRAMP :
+                    for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
+                        pcolormap->define[i] = define[_CINFO.base_pixel+i] ;
+                        pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ;
+                    }
+                    break ;
+                case Xw_TOM_COLORCUBE :
+                case Xw_TOM_READONLY :
+                    break ;
+                default :
+                            for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
+                        pcolormap->pixels[i] = _CINFO.base_pixel + i ;
+                        pcolormap->define[i] = FREECOLOR ;
+                    }
+            }
+
+            if( mode == Xw_TOM_READONLY ) {
               if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY,
                                                 XW_RGB_BEST_MAP,True) ;
               if( DefaultAtom ) {
                 status = XGetRGBColormaps(_CDISPLAY,_CROOT,
-                                         &pinfo,&nmap,DefaultAtom);
+                                          &pinfo,&nmap,DefaultAtom);
               } else status = False ;
 
-             if( status ) {
-               status = False;
+              if( status ) {
+                status = False;
                 for( i=0 ; i<nmap ; i++ ) {
                   if( pinfo[i].visualid == _CINFO.visualid ) {
-                   cinfo = &pinfo[i];
+                    cinfo = &pinfo[i];
                   }
-               }
-               if( cinfo ) {
-//               XColor color;
-                 int error,gravity;
-//               unsigned long pixel;
-                 color.red = color.green = color.blue = 0xFFFF;
-#ifdef TEST
-                 char *serror;
-                 Xw_print_error();
-                 if( !Xw_get_trace() ) Xw_set_synchronize(_CDISPLAY,True) ;
-                 status = XAllocColor(_CDISPLAY,cinfo->colormap,&color);
-                 if( !Xw_get_trace() ) Xw_set_synchronize(_CDISPLAY,False) ;
-                 serror = Xw_get_error(&error,&gravity);
-                 if( status && (error < 1000) ) {
-#else
-                 if( XAllocColor(_CDISPLAY,cinfo->colormap,&color) ) {
-#endif
+                }
+                if( cinfo ) {
+//                  XColor color;
+                  int error,gravity;
+//                  unsigned long pixel;
+                  color.red = color.green = color.blue = 0xFFFF;
+
+                  char *serror;
+                  Xw_print_error();
+                  if( !Xw_get_trace() ) Xw_set_synchronize(_CDISPLAY,True) ;
+                        status = XAllocColor(_CDISPLAY,cinfo->colormap,&color);
+                  if( !Xw_get_trace() ) Xw_set_synchronize(_CDISPLAY,False) ;
+                        serror = Xw_get_error(&error,&gravity);
+                        if( status && (error < 1000) ) {
                     if( _CINFO.colormap != cinfo->colormap ) {
                       if( _CINFO.colormap && (_CINFO.colormap != _CCOLORMAP) ) {
                         XFreeColormap(_CDISPLAY,_CINFO.colormap) ;
                       }
-                   }
+                    }
                     _CINFO.colormap = cinfo->colormap;
                     _CINFO.red_max = cinfo->red_max;
                     _CINFO.red_mult = cinfo->red_mult;
@@ -988,19 +880,19 @@ int nmap;
                     _CINFO.base_pixel = cinfo->base_pixel;
                     _CINFO.visualid = cinfo->visualid;
                     _CINFO.killid = cinfo->killid ;
-                   status = True;
-                 } else {
-                   if( Xw_get_trace() )
-                       printf(" Xw_set_colormap_mapping.BAD registered COLORMAP 0x%lx\n",cinfo->colormap);
-#ifdef TEST
-                   status = False;
-                   Xw_print_error();
-#endif
-                 }
-               }
-             }
+                    status = True;
+                  } else {
+                    if( Xw_get_trace() )
+                        printf(" Xw_set_colormap_mapping.BAD registered COLORMAP 0x%lx\n",cinfo->colormap);
+
+                    status = False;
+                    Xw_print_error();
 
-             if( !status ) {
+                  }
+                }
+              }
+
+              if( !status ) {
                 if( !pinfo ) {
                   nmap = 1;
                   pinfo = (XStandardColormap*)
@@ -1023,292 +915,292 @@ int nmap;
                 cinfo->green_mult = _CINFO.green_mult;
                 cinfo->blue_mult = _CINFO.blue_mult;
 
-               if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY,
-                                               XW_RGB_BEST_MAP,False) ;
+                      if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY,
+                                                XW_RGB_BEST_MAP,False) ;
                 XSetRGBColormaps(_CDISPLAY,_CROOT,pinfo,nmap,DefaultAtom) ;
-             }
-             if( pinfo ) XFree(pinfo); 
+              }
+              if( pinfo ) XFree(pinfo);
               XInstallColormap(_CDISPLAY,_CINFO.colormap);
-           }
-#endif
-           break ;
-
-       case Xw_TOM_BESTRAMP :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           pcolormap->highpixel = _CINFO.base_pixel+1 ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_SIMPLERAMP :
-                   for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
-                       if( j >= pcolormap->maxucolor ) j = 1 ;
-                       pcolormap->define[i] = define[j] ;
-                       pcolormap->pixels[i] = pixels[j] ;
-                   }
-                   break ;
-               case Xw_TOM_HARDRAMP :
-                   for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
-                       if( j >= pcolormap->maxucolor ) j = 1 ;
-                       pcolormap->define[i] = define[_CINFO.base_pixel+j] ;
-                       pcolormap->pixels[i] = pixels[_CINFO.base_pixel+j] ;
-                   }
-                   break ;
-               case Xw_TOM_COLORCUBE :
-               case Xw_TOM_READONLY :
-                   break ;
-               default :
-                   for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
-                       if( j >= pcolormap->maxucolor ) j = 1 ;
-                       pcolormap->pixels[i] = _CINFO.base_pixel + j ;
-                       pcolormap->define[i] = FREECOLOR ;
-                   }
-           }
-           break ;
-
-       case Xw_TOM_HARDRAMP :
-           pcolormap->maxcolor = pcolormap->maxhcolor ;
-           pcolormap->highpixel = _CINFO.base_pixel+1 ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_COLORCUBE :
-               case Xw_TOM_READONLY :
-               case Xw_TOM_SIMPLERAMP :
-                   for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
-                       pcolormap->define[_CINFO.base_pixel+i] = define[i] ;
-                       pcolormap->pixels[_CINFO.base_pixel+i] = pixels[i] ;
-                   }
-                   for( iu=0 ; iu<_CINFO.base_pixel ; iu++ ) {
-                       pcolormap->define[iu] = SYSTEMCOLOR ;
-                       pcolormap->pixels[iu] = iu ;
-                   }
-                   for( i=_CINFO.base_pixel+pcolormap->maxucolor ; 
-                                       i<pcolormap->maxhcolor ; i++ ) {
-                       pcolormap->define[i] = SYSTEMCOLOR ;
-                       pcolormap->pixels[i] = i ;
-                   }
-                   break ;
-               case Xw_TOM_BESTRAMP :
-                   for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
-                       if( j >= pcolormap->maxucolor ) j = 1 ;
-                       pcolormap->define[_CINFO.base_pixel+j] = define[i] ;
-                       pcolormap->pixels[_CINFO.base_pixel+j] = pixels[i] ;
-                   }
-                   for( iu=0 ; iu<_CINFO.base_pixel ; iu++ ) {
-                       pcolormap->define[iu] = SYSTEMCOLOR ;
-                       pcolormap->pixels[iu] = iu ;
-                   }
-                   for( i=_CINFO.base_pixel+pcolormap->maxucolor ; 
-                                       i<pcolormap->maxhcolor ; i++ ) {
-                       pcolormap->define[i] = SYSTEMCOLOR ;
-                       pcolormap->pixels[i] = i ;
-                   }
-                   break ;
-               default :
-                   for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
-                       pcolormap->pixels[i] = i ;
-                       pcolormap->define[i] = SYSTEMCOLOR ;
-                   }
-           }
-           break ;
-
-       case Xw_TOM_COLORCUBE :
-           pcolormap->maxcolor = pcolormap->maxucolor ;
-           switch (pcolormap->mapping) {
-               case Xw_TOM_HARDRAMP :
-                   for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
-                       pcolormap->define[i] = define[_CINFO.base_pixel+i] ;
-                       pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ;
-                   }
-                   break ;
-               case Xw_TOM_SIMPLERAMP :
-               case Xw_TOM_READONLY :
-               case Xw_TOM_BESTRAMP :
-               default :
-                   for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
-                       pcolormap->pixels[i] = _CINFO.base_pixel + i ;
-                       pcolormap->define[i] = FREECOLOR ;
-                   }
+            }
+
+            break ;
+
+        case Xw_TOM_BESTRAMP :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            pcolormap->highpixel = _CINFO.base_pixel+1 ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_SIMPLERAMP :
+                    for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
+                        if( j >= pcolormap->maxucolor ) j = 1 ;
+                        pcolormap->define[i] = define[j] ;
+                        pcolormap->pixels[i] = pixels[j] ;
+                    }
+                    break ;
+                case Xw_TOM_HARDRAMP :
+                    for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
+                        if( j >= pcolormap->maxucolor ) j = 1 ;
+                        pcolormap->define[i] = define[_CINFO.base_pixel+j] ;
+                        pcolormap->pixels[i] = pixels[_CINFO.base_pixel+j] ;
+                    }
+                    break ;
+                case Xw_TOM_COLORCUBE :
+                case Xw_TOM_READONLY :
+                    break ;
+                default :
+                            for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
+                        if( j >= pcolormap->maxucolor ) j = 1 ;
+                        pcolormap->pixels[i] = _CINFO.base_pixel + j ;
+                        pcolormap->define[i] = FREECOLOR ;
+                    }
+            }
+            break ;
+
+        case Xw_TOM_HARDRAMP :
+            pcolormap->maxcolor = pcolormap->maxhcolor ;
+            pcolormap->highpixel = _CINFO.base_pixel+1 ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_COLORCUBE :
+                case Xw_TOM_READONLY :
+                case Xw_TOM_SIMPLERAMP :
+                    for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
+                        pcolormap->define[_CINFO.base_pixel+i] = define[i] ;
+                        pcolormap->pixels[_CINFO.base_pixel+i] = pixels[i] ;
+                    }
+                    for( iu=0 ; iu<_CINFO.base_pixel ; iu++ ) {
+                        pcolormap->define[iu] = SYSTEMCOLOR ;
+                        pcolormap->pixels[iu] = iu ;
+                    }
+                    for( i=_CINFO.base_pixel+pcolormap->maxucolor ;
+                                        i<pcolormap->maxhcolor ; i++ ) {
+                        pcolormap->define[i] = SYSTEMCOLOR ;
+                        pcolormap->pixels[i] = i ;
+                    }
+                    break ;
+                case Xw_TOM_BESTRAMP :
+                    for( i=j=0 ; i<pcolormap->maxucolor ; i++,j += 2 ) {
+                        if( j >= pcolormap->maxucolor ) j = 1 ;
+                        pcolormap->define[_CINFO.base_pixel+j] = define[i] ;
+                        pcolormap->pixels[_CINFO.base_pixel+j] = pixels[i] ;
+                    }
+                    for( iu=0 ; iu<_CINFO.base_pixel ; iu++ ) {
+                        pcolormap->define[iu] = SYSTEMCOLOR ;
+                        pcolormap->pixels[iu] = iu ;
+                    }
+                    for( i=_CINFO.base_pixel+pcolormap->maxucolor ;
+                                        i<pcolormap->maxhcolor ; i++ ) {
+                        pcolormap->define[i] = SYSTEMCOLOR ;
+                        pcolormap->pixels[i] = i ;
+                    }
+                    break ;
+                default :
+                            for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
+                        pcolormap->pixels[i] = i ;
+                        pcolormap->define[i] = SYSTEMCOLOR ;
+                    }
+            }
+            break ;
+
+        case Xw_TOM_COLORCUBE :
+            pcolormap->maxcolor = pcolormap->maxucolor ;
+            switch (pcolormap->mapping) {
+                case Xw_TOM_HARDRAMP :
+                    for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
+                        pcolormap->define[i] = define[_CINFO.base_pixel+i] ;
+                        pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ;
+                    }
+                    break ;
+                case Xw_TOM_SIMPLERAMP :
+                case Xw_TOM_READONLY :
+                case Xw_TOM_BESTRAMP :
+                default :
+                            for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
+                        pcolormap->pixels[i] = _CINFO.base_pixel + i ;
+                        pcolormap->define[i] = FREECOLOR ;
+                    }
 
                     if( SetColorCube != 'Y' ) status = False ;
-                   else status = True ;
+                    else status = True ;
 
-                   ngcolor = 0;
-                   cstatus = gstatus = False;
+                    ngcolor = 0;
+                    cstatus = gstatus = False;
                     if( status ) {
 
-                     if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY,
-                                               XW_RGB_BEST_MAP,True) ;
-                      if( DefaultAtom ) { 
-                       status = XGetRGBColormaps(_CDISPLAY,_CROOT,
+                            if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY,
+                                                XW_RGB_BEST_MAP,True) ;
+                      if( DefaultAtom ) {
+                        status = XGetRGBColormaps(_CDISPLAY,_CROOT,
                                                 &pinfo,&nmap,DefaultAtom);
-                     } else status = False ;
-
-                     if( status ) {
-                       XColor color1,color2 ;
-                       for( i=0 ; i<nmap ; i++ ) {
-                         if( pinfo[i].visualid == _CINFO.visualid ) {
-                           if( (pinfo[i].red_max > 0) &&
-                                 (pinfo[i].green_max > 0) &&
-                                   (pinfo[i].blue_max > 0) ) cinfo = &pinfo[i]; 
-                           else
-                             if( (pinfo[i].red_max > 0) &&
-                                 (pinfo[i].green_max == 0) &&
-                                   (pinfo[i].blue_max == 0) ) cginfo = &pinfo[i]; 
-                         }
-                       }
-
-                       if( cinfo && cginfo ) {
-                         nccolor = (cinfo->red_max+1)*
-                                          (cinfo->green_max+1)*
-                                                  (cinfo->blue_max+1) ;
-                         ngcolor = cginfo->red_max+1;
-                         ncolor = nccolor + ngcolor;
-                         size = (int)(pow((double)pcolormap->maxucolor,(double)1./3.));
-                         if( (ncolor <= pcolormap->maxhcolor) &&
-                                               (ncolor >= size*size*size) ) {
-                           Colormap colormap = _CINFO.colormap;
-                           unsigned long base_pixel = _CINFO.base_pixel;
-                           color1.pixel = cinfo->base_pixel ;
-                           XQueryColor(_CDISPLAY,cinfo->colormap,&color1) ;
-                           color2.pixel = cinfo->base_pixel + nccolor - 1 ;
-                           XQueryColor(_CDISPLAY,cinfo->colormap,&color2) ;
-                           if( !color1.red && !color1.green && !color1.blue && 
-                               color2.red > 0xFE00 && 
-                                       color2.green > 0xFE00 &&
-                                               color2.blue > 0xFE00 ) {
-                               _CINFO.colormap = cinfo->colormap;
-                               _CINFO.red_max = cinfo->red_max;
-                               _CINFO.red_mult = cinfo->red_mult;
-                               _CINFO.green_max = cinfo->green_max;
-                               _CINFO.green_mult = cinfo->green_mult;
-                               _CINFO.blue_max = cinfo->blue_max;
-                               _CINFO.blue_mult = cinfo->blue_mult;
-                               _CINFO.base_pixel = cinfo->base_pixel;
-                               _CINFO.visualid = cinfo->visualid;
-                               _CINFO.killid = cinfo->killid ;
-                               cstatus = True;
-                           }
-
-                           if( cstatus && (ngcolor > 0)  && 
-                               (cinfo->colormap == cginfo->colormap) &&
-                                       (cginfo->base_pixel == (cinfo->base_pixel + nccolor)) ) {
-                             color1.pixel = cginfo->base_pixel ;
-                             XQueryColor(_CDISPLAY,cginfo->colormap,&color1) ;
-                             color2.pixel = cginfo->base_pixel + ngcolor - 1 ;
-                             XQueryColor(_CDISPLAY,cginfo->colormap,&color2) ;
-                             if( !color1.red && !color1.green && !color1.blue && 
-                               color2.red > 0xFE00 && 
-                                       color2.green > 0xFE00 &&
-                                               color2.blue > 0xFE00 ) {
-                               _CGINFO.colormap = cginfo->colormap;
-                               _CGINFO.red_max = cginfo->red_max;
-                               _CGINFO.red_mult = cginfo->red_mult;
-                               _CGINFO.green_max = cginfo->green_max;
-                               _CGINFO.green_mult = cginfo->green_mult;
-                               _CGINFO.blue_max = cginfo->blue_max;
-                               _CGINFO.blue_mult = cginfo->blue_mult;
-                               _CGINFO.base_pixel = cginfo->base_pixel;
-                               _CGINFO.visualid = cginfo->visualid;
-                               _CGINFO.killid = cginfo->killid ;
-                               gstatus = True ;
-                                               /* FREE out of range colors */
-                               if( colormap != cinfo->colormap ) {
-                                 if( colormap && (colormap != _CCOLORMAP) ) {
-                                   XFreeColormap(_CDISPLAY,colormap) ;
-                                 }
-                               } else {
-                                 unsigned long lpixel = cginfo->base_pixel+ngcolor-1;
-                                 for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
-                                   pixel = base_pixel + i;
-                                   if( (pixel < cinfo->base_pixel) ||
-                                               (pixel > lpixel) ) {
-                                     XFreeColors(_CDISPLAY,colormap,&pixel,1,0);
-                                   }
-                                 }
-                                 XFlush(_CDISPLAY);
-                               }
-                             }
-                           }
-                         }
-                       }
-                     }
+                        } else status = False ;
+
+                      if( status ) {
+                        XColor color1,color2 ;
+                        for( i=0 ; i<nmap ; i++ ) {
+                          if( pinfo[i].visualid == _CINFO.visualid ) {
+                            if( (pinfo[i].red_max > 0) &&
+                                  (pinfo[i].green_max > 0) &&
+                                    (pinfo[i].blue_max > 0) ) cinfo = &pinfo[i];
+                            else
+                              if( (pinfo[i].red_max > 0) &&
+                                  (pinfo[i].green_max == 0) &&
+                                    (pinfo[i].blue_max == 0) ) cginfo = &pinfo[i];
+                          }
+                        }
+
+                        if( cinfo && cginfo ) {
+                          nccolor = (cinfo->red_max+1)*
+                                           (cinfo->green_max+1)*
+                                                   (cinfo->blue_max+1) ;
+                          ngcolor = cginfo->red_max+1;
+                          ncolor = nccolor + ngcolor;
+                              size = (int)(pow((double)pcolormap->maxucolor,(double)1./3.));
+                          if( (ncolor <= pcolormap->maxhcolor) &&
+                                                (ncolor >= size*size*size) ) {
+                            Colormap colormap = _CINFO.colormap;
+                            unsigned long base_pixel = _CINFO.base_pixel;
+                            color1.pixel = cinfo->base_pixel ;
+                            XQueryColor(_CDISPLAY,cinfo->colormap,&color1) ;
+                            color2.pixel = cinfo->base_pixel + nccolor - 1 ;
+                            XQueryColor(_CDISPLAY,cinfo->colormap,&color2) ;
+                            if( !color1.red && !color1.green && !color1.blue &&
+                                color2.red > 0xFE00 &&
+                                        color2.green > 0xFE00 &&
+                                                color2.blue > 0xFE00 ) {
+                                _CINFO.colormap = cinfo->colormap;
+                                _CINFO.red_max = cinfo->red_max;
+                                _CINFO.red_mult = cinfo->red_mult;
+                                _CINFO.green_max = cinfo->green_max;
+                                _CINFO.green_mult = cinfo->green_mult;
+                                _CINFO.blue_max = cinfo->blue_max;
+                                _CINFO.blue_mult = cinfo->blue_mult;
+                                _CINFO.base_pixel = cinfo->base_pixel;
+                                _CINFO.visualid = cinfo->visualid;
+                                _CINFO.killid = cinfo->killid ;
+                                cstatus = True;
+                            }
+
+                            if( cstatus && (ngcolor > 0)  &&
+                                (cinfo->colormap == cginfo->colormap) &&
+                                        (cginfo->base_pixel == (cinfo->base_pixel + nccolor)) ) {
+                              color1.pixel = cginfo->base_pixel ;
+                              XQueryColor(_CDISPLAY,cginfo->colormap,&color1) ;
+                              color2.pixel = cginfo->base_pixel + ngcolor - 1 ;
+                              XQueryColor(_CDISPLAY,cginfo->colormap,&color2) ;
+                              if( !color1.red && !color1.green && !color1.blue &&
+                                color2.red > 0xFE00 &&
+                                        color2.green > 0xFE00 &&
+                                                color2.blue > 0xFE00 ) {
+                                _CGINFO.colormap = cginfo->colormap;
+                                _CGINFO.red_max = cginfo->red_max;
+                                _CGINFO.red_mult = cginfo->red_mult;
+                                _CGINFO.green_max = cginfo->green_max;
+                                _CGINFO.green_mult = cginfo->green_mult;
+                                _CGINFO.blue_max = cginfo->blue_max;
+                                _CGINFO.blue_mult = cginfo->blue_mult;
+                                _CGINFO.base_pixel = cginfo->base_pixel;
+                                _CGINFO.visualid = cginfo->visualid;
+                                _CGINFO.killid = cginfo->killid ;
+                                gstatus = True ;
+                                                /* FREE out of range colors */
+                                if( colormap != cinfo->colormap ) {
+                                  if( colormap && (colormap != _CCOLORMAP) ) {
+                                    XFreeColormap(_CDISPLAY,colormap) ;
+                                  }
+                                } else {
+                                  unsigned long lpixel = cginfo->base_pixel+ngcolor-1;
+                                  for( i=0 ; i<pcolormap->maxucolor ; i++ ) {
+                                    pixel = base_pixel + i;
+                                    if( (pixel < cinfo->base_pixel) ||
+                                                (pixel > lpixel) ) {
+                                      XFreeColors(_CDISPLAY,colormap,&pixel,1,0);
+                                    }
+                                  }
+                                  XFlush(_CDISPLAY);
+                                }
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                    if( !cstatus ) {                /* Allocate READ-ONLY color-cube */
+//                      Atom RgbDefaultAtom = 0 ;
+                          size = (int)(pow((double)MaxColorCube,(double)1./3.)+0.1);
+
+                      if( pcolormap->maxucolor > 0 ) {
+                        XFreeColors(_CDISPLAY,_CINFO.colormap,
+                                        pcolormap->pixels,pcolormap->maxucolor,0);
+                        pcolormap->maxucolor = 0;
+                      }
+                          _CINFO.visualid = _CVISUAL->visualid ;
+                      _CINFO.killid = getpid();
+                      for( ; size>0 ; --size ) {
+                        _CINFO.base_pixel = 0;
+                        _CINFO.red_max = size-1;
+                        _CINFO.green_max = size-1;
+                        _CINFO.blue_max = size-1;
+                        _CINFO.red_mult = 1;
+                        _CINFO.green_mult = size;
+                        _CINFO.blue_mult = size*size;
+                        if( XmuCreateColormap(_CDISPLAY,&_CINFO) ) break;
+                            }
+                      nccolor = size*size*size ;
                     }
-                    if( !cstatus ) {           /* Allocate READ-ONLY color-cube */
-//                   Atom RgbDefaultAtom = 0 ;
-                     size = (int)(pow((double)MaxColorCube,(double)1./3.)+0.1);
-
-                     if( pcolormap->maxucolor > 0 ) {
-                       XFreeColors(_CDISPLAY,_CINFO.colormap,
-                                       pcolormap->pixels,pcolormap->maxucolor,0);
-                       pcolormap->maxucolor = 0;
-                     }
-                     _CINFO.visualid = _CVISUAL->visualid ;
-                     _CINFO.killid = getpid();
-                     for( ; size>0 ; --size ) {
-                       _CINFO.base_pixel = 0;
-                       _CINFO.red_max = size-1;
-                       _CINFO.green_max = size-1;
-                       _CINFO.blue_max = size-1;
-                       _CINFO.red_mult = 1;
-                       _CINFO.green_mult = size;
-                       _CINFO.blue_mult = size*size;
-                       if( XmuCreateColormap(_CDISPLAY,&_CINFO) ) break;
-                     }  
-                     nccolor = size*size*size ;
-                   }
-
-                    if( !gstatus ) {           /* Allocate READ-ONLY gray-ramp */
-//                   Atom GrayDefaultAtom = 0 ;
-                     if( pcolormap->maxucolor > 0 ) {
-                       XFreeColors(_CDISPLAY,_CINFO.colormap,
-                                       pcolormap->pixels,pcolormap->maxucolor,0);
-                       pcolormap->maxucolor = 0;
-                     }
-                     ngcolor = MaxGray ;
-                     _CGINFO.colormap = _CINFO.colormap;
-                     _CGINFO.visualid = _CVISUAL->visualid ;
-                     _CGINFO.killid = getpid();
-                     size = ngcolor;
-                     for( ; size>0 ; size -= 2 ) {
+
+                    if( !gstatus ) {                /* Allocate READ-ONLY gray-ramp */
+//                      Atom GrayDefaultAtom = 0 ;
+                      if( pcolormap->maxucolor > 0 ) {
+                        XFreeColors(_CDISPLAY,_CINFO.colormap,
+                                        pcolormap->pixels,pcolormap->maxucolor,0);
+                        pcolormap->maxucolor = 0;
+                      }
+                      ngcolor = MaxGray ;
+                      _CGINFO.colormap = _CINFO.colormap;
+                          _CGINFO.visualid = _CVISUAL->visualid ;
+                      _CGINFO.killid = getpid();
+                      size = ngcolor;
+                      for( ; size>0 ; size -= 2 ) {
                         _CGINFO.base_pixel = 0;
-                       _CGINFO.red_max = size-1;
-                       _CGINFO.green_max = 0;
-                       _CGINFO.blue_max = 0;
-                       _CGINFO.red_mult = 1;
-                       _CGINFO.green_mult = 1;
-                       _CGINFO.blue_mult = 1;
-                       if( XmuCreateColormap(_CDISPLAY,&_CGINFO) ) break;
-                     }  
-                     ngcolor = size ;
-                   }
-                   XInstallColormap(_CDISPLAY,_CINFO.colormap);
-                   ncolor = nccolor + ngcolor;
-                   pcolormap->maxucolor = ncolor;
-                   pcolormap->maxcolor = ncolor;
-                   for( i=0 ; i<ncolor ; i++ ) {
+                        _CGINFO.red_max = size-1;
+                        _CGINFO.green_max = 0;
+                        _CGINFO.blue_max = 0;
+                        _CGINFO.red_mult = 1;
+                        _CGINFO.green_mult = 1;
+                        _CGINFO.blue_mult = 1;
+                        if( XmuCreateColormap(_CDISPLAY,&_CGINFO) ) break;
+                            }
+                      ngcolor = size ;
+                    }
+                    XInstallColormap(_CDISPLAY,_CINFO.colormap);
+                    ncolor = nccolor + ngcolor;
+                    pcolormap->maxucolor = ncolor;
+                    pcolormap->maxcolor = ncolor;
+                    for( i=0 ; i<ncolor ; i++ ) {
                       pcolormap->define[i] = SYSTEMCOLOR ;
-                     pcolormap->pixels[i] = _CINFO.base_pixel + i;
-                   }
+                      pcolormap->pixels[i] = _CINFO.base_pixel + i;
+                    }
                     if( !cstatus || !gstatus ) {
-                     if( !pinfo ) {
-                       nmap = 2;
-                       pinfo = (XStandardColormap*) 
-                               malloc(2*sizeof(XStandardColormap));
-                       cinfo = &pinfo[0];
-                       cginfo = &pinfo[1];
-                     } else if( !cinfo || !cginfo ) {
-                       if( !cinfo ) nmap++;
-                       if( !cginfo ) nmap++;
-                       pinfo = (XStandardColormap*) realloc((char*)pinfo,
-                                       nmap*sizeof(XStandardColormap));
-                       i = nmap-1;
-                       if( !cginfo ) {
-                         cginfo = &pinfo[i]; --i;
-                       }
-                       if( !cinfo ) {
-                         cinfo = &pinfo[i]; --i;
-                       }
-                     }
-                     cinfo->colormap = _CINFO.colormap;
-                     cinfo->visualid = _CINFO.visualid;
-                     cinfo->killid = getpid();
+                      if( !pinfo ) {
+                        nmap = 2;
+                        pinfo = (XStandardColormap*)
+                                malloc(2*sizeof(XStandardColormap));
+                        cinfo = &pinfo[0];
+                        cginfo = &pinfo[1];
+                      } else if( !cinfo || !cginfo ) {
+                        if( !cinfo ) nmap++;
+                        if( !cginfo ) nmap++;
+                        pinfo = (XStandardColormap*) realloc((char*)pinfo,
+                                        nmap*sizeof(XStandardColormap));
+                        i = nmap-1;
+                        if( !cginfo ) {
+                          cginfo = &pinfo[i]; --i;
+                        }
+                        if( !cinfo ) {
+                          cinfo = &pinfo[i]; --i;
+                        }
+                      }
+                      cinfo->colormap = _CINFO.colormap;
+                          cinfo->visualid = _CINFO.visualid;
+                      cinfo->killid = getpid();
                       cinfo->base_pixel = _CINFO.base_pixel;
                       cinfo->red_max = _CINFO.red_max;
                       cinfo->green_max = _CINFO.green_max;
@@ -1317,9 +1209,9 @@ int nmap;
                       cinfo->green_mult = _CINFO.green_mult;
                       cinfo->blue_mult = _CINFO.blue_mult;
 
-                     cginfo->colormap = _CGINFO.colormap;
-                     cginfo->visualid = _CGINFO.visualid;
-                     cginfo->killid = getpid();
+                      cginfo->colormap = _CGINFO.colormap;
+                          cginfo->visualid = _CGINFO.visualid;
+                      cginfo->killid = getpid();
                       cginfo->base_pixel = _CGINFO.base_pixel;
                       cginfo->red_max = _CGINFO.red_max;
                       cginfo->green_max = _CGINFO.green_max;
@@ -1328,66 +1220,42 @@ int nmap;
                       cginfo->green_mult = _CGINFO.green_mult;
                       cginfo->blue_mult = _CGINFO.blue_mult;
 
-                     switch (SetColorCube) {
-                           case 'N' :
-#ifdef TRACE_SET_COLORMAP_MAPPING
-                               if( Xw_get_trace() ) printf(
-                                   " Xw_SET_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n",
-                                       _CINFO.base_pixel,_CINFO.red_max,
-                                       _CINFO.green_max,_CINFO.blue_max,
-                                       _CGINFO.base_pixel,_CGINFO.red_max,
-                                       _CGINFO.green_max,_CGINFO.blue_max) ;
-#endif
-                               break ;
-                           case 'Y' :
-                               if( !DefaultAtom ) 
-                                       DefaultAtom = XInternAtom(_CDISPLAY,
-                                               XW_RGB_BEST_MAP,False) ;
+                      switch (SetColorCube) {
+                            case 'N' :
+                                break ;
+                            case 'Y' :
+                                      if( !DefaultAtom )
+                                        DefaultAtom = XInternAtom(_CDISPLAY,
+                                                XW_RGB_BEST_MAP,False) ;
                                 XSetRGBColormaps(_CDISPLAY,_CROOT,
                                                    pinfo,nmap,DefaultAtom) ;
-#ifdef TRACE_SET_COLORMAP_MAPPING
-                               if( Xw_get_trace() ) printf(
-                                   " Xw_SET_STANDARD_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n",
-                                       _CINFO.base_pixel,_CINFO.red_max,
-                                       _CINFO.green_max,_CINFO.blue_max,
-                                       _CGINFO.base_pixel,_CGINFO.red_max,
-                                       _CGINFO.green_max,_CGINFO.blue_max) ;
-#endif
-                               break ;
-                           case 'T' :
-                               if( !DefaultAtom ) 
-                                       DefaultAtom = XInternAtom(_CDISPLAY,
-                                               XW_RGB_BEST_MAP,False) ;
+                                break ;
+                            case 'T' :
+                                      if( !DefaultAtom )
+                                        DefaultAtom = XInternAtom(_CDISPLAY,
+                                                XW_RGB_BEST_MAP,False) ;
                                 XSetRGBColormaps(_CDISPLAY,_CROOT,
                                                    pinfo,nmap,DefaultAtom) ;
-                               XSetCloseDownMode(_CDISPLAY,RetainTemporary) ;
-#ifdef TRACE_SET_COLORMAP_MAPPING
-                               if( Xw_get_trace() ) printf(
-                                   " Xw_SET_TEMPORARY_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n",
-                                       _CINFO.base_pixel,_CINFO.red_max,
-                                       _CINFO.green_max,_CINFO.blue_max,
-                                       _CGINFO.base_pixel,_CGINFO.red_max,
-                                       _CGINFO.green_max,_CGINFO.blue_max) ;
-#endif
-                               break ;
-                           case 'P' :
-                               if( !DefaultAtom ) 
-                                       DefaultAtom = XInternAtom(_CDISPLAY,
-                                               XW_RGB_BEST_MAP,False) ;
+                                XSetCloseDownMode(_CDISPLAY,RetainTemporary) ;
+                                break ;
+                            case 'P' :
+                                      if( !DefaultAtom )
+                                        DefaultAtom = XInternAtom(_CDISPLAY,
+                                                XW_RGB_BEST_MAP,False) ;
                                 XSetRGBColormaps(_CDISPLAY,_CROOT,
                                                    pinfo,nmap,DefaultAtom) ;
-                               XSetCloseDownMode(_CDISPLAY,RetainPermanent) ;
-                               if( Xw_get_trace() ) printf(
-                                   " Xw_SET_PERMANENT_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n",
-                                       _CINFO.base_pixel,_CINFO.red_max,
-                                       _CINFO.green_max,_CINFO.blue_max,
-                                       _CGINFO.base_pixel,_CGINFO.red_max,
-                                       _CGINFO.green_max,_CGINFO.blue_max) ;
-                       }
-                   }
-           }
-           if( pinfo ) XFree(pinfo); 
-           pcolormap->highpixel = pcolormap->pixels[pcolormap->maxcolor-1] ;
+                                XSetCloseDownMode(_CDISPLAY,RetainPermanent) ;
+                                if( Xw_get_trace() ) printf(
+                                    " Xw_SET_PERMANENT_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n",
+                                        _CINFO.base_pixel,_CINFO.red_max,
+                                        _CINFO.green_max,_CINFO.blue_max,
+                                        _CGINFO.base_pixel,_CGINFO.red_max,
+                                        _CGINFO.green_max,_CGINFO.blue_max) ;
+                        }
+                        }
+                }
+            if( pinfo ) XFree(pinfo);
+            pcolormap->highpixel = pcolormap->pixels[pcolormap->maxcolor-1] ;
       }
     }
 
@@ -1395,32 +1263,22 @@ int nmap;
 
     XFlush(_CDISPLAY) ;
 
-#ifdef TRACE_SET_COLORMAP_MAPPING
-if( Xw_get_trace() ) {
-    printf(" Xw_set_color_mapping(%lx,%d)\n",(long ) pcolormap,mode) ;
-}
-#endif
-
   return (XW_SUCCESS) ;
 }
 
-#ifdef XW_PROTOTYPE
-XVisualInfo* Xw_get_visual_info(XW_EXT_DISPLAY* pdisplay,Xw_TypeOfVisual pclass)
-#else
-XVisualInfo* Xw_get_visual_info(pdisplay,pclass)
-XW_EXT_DISPLAY *pdisplay ;
-Xw_TypeOfVisual pclass ;
-#endif /*XW_PROTOTYPE*/
-/*
-        Return the visual Information matching with the specified class
-        or NULL if class is not founded on this Display .
-*/
+//! Return the visual Information matching with the specified class
+//! or NULL if class is not founded on this Display.
+XVisualInfo* Xw_get_visual_info (XW_EXT_DISPLAY* pdisplay,
+                                 Xw_TypeOfVisual pclass)
 {
-Xw_TypeOfVisual class1 = pclass,class2 = Xw_TOV_DEFAULT ;
-XVisualInfo *vinfo = NULL,*ginfo = NULL,info1,info2 ;
-int i,ninfo;
-long mask1 = 0,mask2 = 0;
-unsigned long backpixel;
+  Xw_TypeOfVisual class1 = pclass;
+  Xw_TypeOfVisual class2 = Xw_TOV_DEFAULT;
+  XVisualInfo* vinfo = NULL;
+  XVisualInfo* ginfo = NULL;
+  XVisualInfo info1, info2;
+  int i, ninfo;
+  long mask1 = 0,mask2 = 0;
+  unsigned long backpixel;
 
         switch (class1) {
             case Xw_TOV_DEFAULT :
@@ -1428,14 +1286,14 @@ unsigned long backpixel;
                 break ;
             case Xw_TOV_PSEUDOCOLOR :
                 class1 = Xw_TOV_PSEUDOCOLOR ;
-               mask1 |= VisualColormapSizeMask;
-               info1.colormap_size = 256;
+                mask1 |= VisualColormapSizeMask;
+                info1.colormap_size = 256;
                 break ;
             case Xw_TOV_PREFERRED_PSEUDOCOLOR :
                 if( MaxCmapsOfScreen(_DSCREEN) > 1 ) {
                     class1 = Xw_TOV_PSEUDOCOLOR ;
-                   mask1 |= VisualColormapSizeMask;
-                   info1.colormap_size = 256;
+                    mask1 |= VisualColormapSizeMask;
+                    info1.colormap_size = 256;
                     class2 = Xw_TOV_TRUECOLOR ;
                 } else {
                     class1 = (Xw_TypeOfVisual) _DCLASS ;
@@ -1445,217 +1303,159 @@ unsigned long backpixel;
                 class1 = Xw_TOV_TRUECOLOR ;
                 break ;
             case Xw_TOV_OVERLAY :
-               ginfo = Xw_get_overlay_visual_info(pdisplay,
-                               Xw_TOV_PSEUDOCOLOR,&backpixel);
-               return ginfo;
+                ginfo = Xw_get_overlay_visual_info(pdisplay,
+                                Xw_TOV_PSEUDOCOLOR,&backpixel);
+                return ginfo;
             case Xw_TOV_PREFERRED_TRUECOLOR :
-#ifdef OLD
-                if( MaxCmapsOfScreen(_DSCREEN) > 1 ) {
-                    class1 = Xw_TOV_TRUECOLOR ;
-                    class2 = Xw_TOV_PSEUDOCOLOR ;
-                   mask2 |= VisualColormapSizeMask;
-                   info2.colormap_size = 256;
-                } else {
-                    class1 = _DCLASS ;
-                }
-#else
                 class1 = Xw_TOV_TRUECOLOR ;
                 class2 = Xw_TOV_PSEUDOCOLOR ;
-               mask2 |= VisualColormapSizeMask;
-               info2.colormap_size = 256;
-#endif
-                break ;
+                mask2 |= VisualColormapSizeMask;
+                info2.colormap_size = 256;
+                break;
             case Xw_TOV_PREFERRED_OVERLAY :
                 class1 = Xw_TOV_PSEUDOCOLOR ;
-               mask1 |= VisualColormapSizeMask;
-               info1.colormap_size = 256;
-               ginfo = Xw_get_overlay_visual_info(pdisplay,
-                                       Xw_TOV_PSEUDOCOLOR,&backpixel);
-               if( ginfo ) return ginfo;
+                mask1 |= VisualColormapSizeMask;
+                info1.colormap_size = 256;
+                ginfo = Xw_get_overlay_visual_info(pdisplay,
+                                        Xw_TOV_PSEUDOCOLOR,&backpixel);
+                if( ginfo ) return ginfo;
                 break ;
-             default:
+              default:
                 break ;
         }
 
-       if( !ginfo ) {
-#if (!defined (CTS17988))  && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H)
-         XmbufBufferInfo *pmono = NULL,*pstereo = NULL;
-         int nmono=0,nstereo=0;
-#endif
-
-#if (!defined (CTS17988))  && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H) 
-          XmbufGetScreenInfo(_DDISPLAY, _DROOT, &nmono, &pmono,
-                                                 &nstereo, &pstereo);
-#endif
-#if defined(__cplusplus) || defined(c_plusplus)
-          info1.c_class = class1 ;
-#else
-          info1.class = class1 ;
-#endif
-         info1.screen = DefaultScreen(_DDISPLAY) ;
+        if (ginfo == NULL)
+        {
+          info1.c_class = class1;
+          info1.screen = DefaultScreen(_DDISPLAY);
           mask1 |= VisualClassMask | VisualScreenMask ;
           vinfo = XGetVisualInfo(_DDISPLAY,mask1,&info1,&ninfo) ;
 
-          if( ninfo ) {
-            ginfo = vinfo ;
-            for( i=1 ; i<ninfo ; i++ ) {
-              if( (vinfo[i].depth > ginfo->depth) ||
-                        (vinfo[i].visualid == _DVISUAL->visualid) ) {
-#if (!defined (CTS17988))  && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H) 
-               if( pmono ) {
-                 for( j=0 ; j<nmono ; j++ ) {
-                   if( (pmono[j].visualid == vinfo[i].visualid) &&
-                               ((pmono[j].max_buffers == 0) || 
-                                       (pmono[j].max_buffers > 1)) ) {
-                     ginfo = &vinfo[i];
-                     break;
-                   }
-                 }
-               } else
-#endif
-                 ginfo = &vinfo[i];
-             }
+          if (ninfo > 0)
+          {
+            ginfo = vinfo;
+            for (i = 1; i < ninfo; i++)
+            {
+              if ((vinfo[i].depth > ginfo->depth && !(vinfo[i].depth == 32 && ginfo->depth == 24))
+               || (vinfo[i].depth == 24 && ginfo->depth == 32) // prefer 24-bit depth over 32-bit - we do not need blend window content with desktop (see CR23792)
+               || (vinfo[i].visualid == _DVISUAL->visualid))
+              {
+                ginfo = &vinfo[i];
+              }
+            }
+            if ((ginfo->depth < TrueColorMinDepth)
+             && (class1 == Xw_TOV_TRUECOLOR))
+            {
+              XFree ((char* )vinfo);
+              ginfo = vinfo = NULL;
             }
-            if( (ginfo->depth < TrueColorMinDepth) && 
-                               (class1 == Xw_TOV_TRUECOLOR) ) {
-               XFree((char*)vinfo) ;
-               ginfo = vinfo = NULL ;
-           }
           }
 
-          if( !ginfo && (class2 != Xw_TOV_DEFAULT) ) {
-#if defined(__cplusplus) || defined(c_plusplus)
-            info2.c_class = class2 ;
-#else
-            info2.class = class2 ;
-#endif
-           info2.screen = DefaultScreen(_DDISPLAY) ;
-            mask2 |= VisualClassMask | VisualScreenMask ;
-            vinfo = XGetVisualInfo(_DDISPLAY,mask2,&info2,&ninfo) ;
-            if( ninfo ) {
+          if (ginfo == NULL && (class2 != Xw_TOV_DEFAULT))
+          {
+            info2.c_class = class2;
+
+            info2.screen = DefaultScreen(_DDISPLAY);
+            mask2 |= VisualClassMask | VisualScreenMask;
+            vinfo = XGetVisualInfo(_DDISPLAY,mask2,&info2,&ninfo);
+            if (ninfo > 0)
+            {
                 ginfo = vinfo ;
-                for( i=1 ; i<ninfo ; i++ ) {
-                  if( vinfo[i].depth > ginfo->depth ) {
-#if (!defined (CTS17988))  && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H)
-                   if( pmono ) {
-                     for( j=0 ; j<nmono ; j++ ) {
-                       if( (pmono[j].visualid == vinfo[i].visualid) &&
-                               ((pmono[j].max_buffers == 0) || 
-                                       (pmono[j].max_buffers > 1)) ) {
-                         ginfo = &vinfo[i];
-                         break;
-                       }
-                     }
-                   } else 
-#endif
-                     ginfo = &vinfo[i];
-                 }
+                for (i = 1; i < ninfo; i++)
+                {
+                  if ((vinfo[i].depth > ginfo->depth && !(vinfo[i].depth == 32 && ginfo->depth == 24))
+                   || (vinfo[i].depth == 24 && ginfo->depth == 32)) // prefer 24-bit depth over 32-bit)
+                  {
+                    ginfo = &vinfo[i];
+                  }
+                }
+                if ((ginfo->depth < TrueColorMinDepth)
+                 && (class2 == Xw_TOV_TRUECOLOR))
+                {
+                  XFree((char*)vinfo);
+                  ginfo = vinfo = NULL;
                 }
-                if( (ginfo->depth < TrueColorMinDepth) && 
-                               (class2 == Xw_TOV_TRUECOLOR) ) {
-                   XFree((char*)vinfo) ;
-                   ginfo = vinfo = NULL ;
-               }
             }
           }
-#if (!defined (CTS17988))  && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H)
-         if( pmono ) XFree(pmono);
-         if( pstereo ) XFree(pstereo);
-#endif
         }
 
-       if( ginfo ) {   
+         if( ginfo ) {
           info1.visualid = ginfo->visualid ;
           info1.screen = ginfo->screen ;
           mask1 = VisualIDMask | VisualScreenMask ;
 
           ginfo = XGetVisualInfo(_DDISPLAY,mask1,&info1,&ninfo) ;
-       } else {
+        } else {
           /*ERROR*Unmatchable Visual class*/
           Xw_set_error(67,"Xw_get_visual_info",&pclass) ;
-       }
+        }
 
-       if( vinfo ) XFree((char*)vinfo) ;
+        if( vinfo ) XFree((char*)vinfo) ;
         return (ginfo) ;
 }
 
-#ifdef XW_PROTOTYPE
+//! Return the Overlay visual Information matching with the specified class
+//! or NULL if the overlay class is not founded on this Display.
 XVisualInfo* Xw_get_overlay_visual_info(XW_EXT_DISPLAY* pdisplay,Xw_TypeOfVisual /*pclass*/,unsigned long *backpixel)
-#else
-XVisualInfo* Xw_get_overlay_visual_info(pdisplay,pclass,backpixel)
-XW_EXT_DISPLAY *pdisplay ;
-Xw_TypeOfVisual pclass ;
-unsigned long *backpixel;
-#endif /*XW_PROTOTYPE*/
-/*
-        Return the Overlay visual Information matching with the specified class
-        or NULL if the overlay class is not founded on this Display .
-*/
 {
 XVisualInfo *vinfo = NULL,*ginfo = NULL,tinfo ;
 int ninfo;
 Atom oatom = XInternAtom(_DDISPLAY, "SERVER_OVERLAY_VISUALS", True);
 
         *backpixel = 0;
-       if( oatom ) {
-         unsigned long nitem,left;
-         int aformat;
-         Status status;
-         union {
-           unsigned char *string;
-           XOverlayVisualInfo *oinfo;
-         } prop;
-         Atom aatom;
-         status = XGetWindowProperty(_DDISPLAY, _DROOT,
+        if( oatom ) {
+          unsigned long nitem,left;
+          int aformat;
+          Status status;
+          union {
+              unsigned char *string;
+              XOverlayVisualInfo *oinfo;
+          } prop;
+          Atom aatom;
+              status = XGetWindowProperty(_DDISPLAY, _DROOT,
                                 oatom, 0,  100, False,
                                 AnyPropertyType, &aatom, &aformat,
                                 &nitem, &left, &prop.string);
-         nitem /= 4;
+          nitem /= 4;
           if( (status == Success) && (aformat == 32) && (nitem > 0) ) {
-           int i,depth = OverlayColorMinDepth,layer = 1;
-           for( i=0 ; (unsigned int ) i < nitem ; i++ ) {
-             if( prop.oinfo[i].layer < layer || 
-                       prop.oinfo[i].transparent_type == 0 ) continue;
-             tinfo.visualid = prop.oinfo[i].overlay_visual;
-             vinfo = XGetVisualInfo(_DDISPLAY,VisualIDMask,&tinfo,&ninfo);
-             if( vinfo &&  (vinfo->depth >= depth) ) { 
-               *backpixel = prop.oinfo[i].value;
-               layer = prop.oinfo[i].layer;
-               depth = vinfo->depth;
-               ginfo = vinfo;
-             } else if( vinfo ) {
-               XFree(vinfo) ; vinfo = NULL;
-             }
-           }
-         }
-#ifdef PURIFY
-         if( prop.string && (status == Success) ) Xw_free(prop.string);
-#endif
-       } else if( (pdisplay->server == XW_SERVER_IS_SUN) && EnableSunOverlay ) {
-         int mOptCode,fEvent,fError;
-         if( XQueryExtension(_DDISPLAY,"SUN_OVL",&mOptCode,&fEvent,&fError) ) {
-            tinfo.visualid = 0x2a;     /* Overlay visual for SUN/ULTRA */
+            int i,depth = OverlayColorMinDepth,layer = 1;
+                for( i=0 ; (unsigned int ) i < nitem ; i++ ) {
+              if( prop.oinfo[i].layer < layer ||
+                        prop.oinfo[i].transparent_type == 0 ) continue;
+                    tinfo.visualid = prop.oinfo[i].overlay_visual;
+                    vinfo = XGetVisualInfo(_DDISPLAY,VisualIDMask,&tinfo,&ninfo);
+                    if( vinfo &&  (vinfo->depth >= depth) ) {
+                *backpixel = prop.oinfo[i].value;
+                layer = prop.oinfo[i].layer;
+                depth = vinfo->depth;
+                ginfo = vinfo;
+              } else if( vinfo ) {
+                XFree(vinfo) ; vinfo = NULL;
+              }
+            }
+          }
+
+          if( prop.string && (status == Success) ) Xw_free(prop.string);
+
+        } else if( (pdisplay->server == XW_SERVER_IS_SUN) && EnableSunOverlay ) {
+          int mOptCode,fEvent,fError;
+          if( XQueryExtension(_DDISPLAY,"SUN_OVL",&mOptCode,&fEvent,&fError) ) {
+            tinfo.visualid = 0x2a;        /* Overlay visual for SUN/ULTRA */
             vinfo = XGetVisualInfo(_DDISPLAY,VisualIDMask,&tinfo,&ninfo);
-           if( vinfo && (vinfo->colormap_size == 224) ) {
-             ginfo = vinfo;
-             *backpixel = 225;
-           } else if( vinfo ) {
-             XFree(vinfo) ; vinfo = NULL;
-           }
-         }
-       }
-
-#ifdef IMP040100       
-       if( ginfo && MaxCmapsOfScreen(_DSCREEN) < 2  && 
-               ginfo->visualid != _DVISUAL->visualid && 
-#if defined(__cplusplus) || defined(c_plusplus)
-                       ginfo->c_class == _DCLASS )
-#else
-                       ginfo->class == _DCLASS )
-#endif
-       {
-         XFree(ginfo); ginfo = NULL;
+                  if( vinfo && (vinfo->colormap_size == 224) ) {
+              ginfo = vinfo;
+              *backpixel = 225;
+            } else if( vinfo ) {
+              XFree(vinfo) ; vinfo = NULL;
+            }
+          }
         }
-#endif
-       return ginfo;
+
+          if( ginfo && MaxCmapsOfScreen(_DSCREEN) < 2  &&
+                ginfo->visualid != _DVISUAL->visualid &&
+                        ginfo->c_class == _DCLASS )
+        {
+          XFree(ginfo); ginfo = NULL;
+        }
+        return ginfo;
 }