Annotation of researchv9/X11/src/X.V11R1/lib/X/XVisUtil.c, revision 1.1

1.1     ! root        1: #include "copyright.h"
        !             2: 
        !             3: /* $Header: XVisUtil.c,v 11.8 87/09/11 08:15:44 toddb Exp $ */
        !             4: /* Copyright    Massachusetts Institute of Technology    1986  */
        !             5: 
        !             6: #include <stdio.h>
        !             7: #include "Xlibint.h"
        !             8: #include "Xutil.h"
        !             9: /*
        !            10:  *     This procedure returns a list of visual information structures
        !            11:  *     that match the specified attributes given in the visual information 
        !            12:  *     template.
        !            13:  *
        !            14:  *     If no visuals exist that match the specified attributes, a NULL is
        !            15:  *     returned.
        !            16:  *
        !            17:  *     The choices for visual_info_mask are:
        !            18:  *
        !            19:  *             VisualNoMask
        !            20:  *             VisualIDMask
        !            21:  *             VisualScreenMask
        !            22:  *             VisualDepthMask
        !            23:  *             VisualClassMask
        !            24:  *             VisualRedMaskMask
        !            25:  *             VisualGreenMaskMask
        !            26:  *             VisualBlueMaskMask
        !            27:  *             VisualColormapSizeMask
        !            28:  *             VisualBitsPerRGBMask
        !            29:  *             VisualAllMask
        !            30:  */
        !            31: 
        !            32: XVisualInfo *XGetVisualInfo( dpy, visual_info_mask, 
        !            33:        visual_info_template, nitems)
        !            34: Display *dpy;
        !            35: register long visual_info_mask; 
        !            36: register XVisualInfo *visual_info_template;
        !            37: int *nitems;   /* RETURN */
        !            38: {
        !            39: 
        !            40:   register Visual *vp;
        !            41:   register Depth *dp;
        !            42:   Screen *sp;
        !            43:   int ii,screen_s,screen_e,total,count;
        !            44:   register XVisualInfo *vip,*vip_base;
        !            45: 
        !            46:   /* NOTE: NO HIGH PERFORMING CODE TO BE FOUND HERE */
        !            47: 
        !            48:   LockDisplay(dpy);
        !            49: 
        !            50:   /* ALLOCATE THE ORIGINAL BUFFER; REALLOCED LATER OF OVERFLOW OCCURS;
        !            51:      FREED AT END IF NO VISUALS ARE FOUND */
        !            52: 
        !            53:   count = 0;
        !            54:   total = 10;
        !            55:   vip_base = vip = (XVisualInfo *)Xmalloc(sizeof(XVisualInfo)*total);
        !            56: 
        !            57:   /* DETERMINE IF WE DO ALL SCREENS OR ONLY ONE */
        !            58: 
        !            59:   screen_s = 0;
        !            60:   screen_e = dpy->nscreens;
        !            61:   if (visual_info_mask & VisualScreenMask)
        !            62:     {
        !            63:       screen_s = visual_info_template->screen;
        !            64:       screen_e = screen_s + 1;
        !            65:     }
        !            66: 
        !            67:   /* LOOP THROUGH SCREENS */
        !            68: 
        !            69:   for (ii=screen_s; ii<screen_e; ii++)
        !            70:     {
        !            71:       sp = (Screen *)(&dpy->screens[ii]);
        !            72: 
        !            73:       /* LOOP THROUGH DEPTHS */
        !            74: 
        !            75:       for (dp=sp->depths; dp < (sp->depths + sp->ndepths); dp++)
        !            76:         {
        !            77:           if ((visual_info_mask & VisualDepthMask) &&
        !            78:              (dp->depth != visual_info_template->depth)) continue;
        !            79: 
        !            80:           /* LOOP THROUGH VISUALS */
        !            81: 
        !            82:           for (vp=dp->visuals; vp<(dp->visuals + dp->nvisuals); vp++)
        !            83:             {
        !            84:               if ((visual_info_mask & VisualIDMask) &&
        !            85:                 (vp->visualid != visual_info_template->visualid)) continue;
        !            86:               if ((visual_info_mask & VisualClassMask) &&
        !            87:                 (vp->class != visual_info_template->class)) continue;
        !            88:               if ((visual_info_mask & VisualRedMaskMask) &&
        !            89:                 (vp->red_mask != visual_info_template->red_mask)) continue;
        !            90:               if ((visual_info_mask & VisualGreenMaskMask) &&
        !            91:                 (vp->green_mask != visual_info_template->green_mask)) continue;
        !            92:               if ((visual_info_mask & VisualBlueMaskMask) &&
        !            93:                 (vp->blue_mask != visual_info_template->blue_mask)) continue;
        !            94:               if ((visual_info_mask & VisualColormapSizeMask) &&
        !            95:                 (vp->map_entries != visual_info_template->colormap_size)) continue;
        !            96:               if ((visual_info_mask & VisualBitsPerRGBMask) &&
        !            97:                 (vp->bits_per_rgb != visual_info_template->bits_per_rgb)) continue;
        !            98: 
        !            99:               /* YEA!!! WE FOUND A GOOD ONE */
        !           100:  
        !           101:               if (count+1 > total)
        !           102:                 {
        !           103:                   total += 10;
        !           104:                   vip_base = (XVisualInfo *)Xrealloc(vip_base,sizeof(XVisualInfo)*total);
        !           105:                   vip = &vip_base[count];
        !           106:                 }
        !           107: 
        !           108:               count++;
        !           109: 
        !           110:               vip->visual = vp;
        !           111:               vip->visualid = vp->visualid;
        !           112:               vip->screen = ii;
        !           113:               vip->depth = dp->depth;
        !           114:               vip->class = vp->class;
        !           115:               vip->red_mask = vp->red_mask;
        !           116:               vip->green_mask = vp->green_mask;
        !           117:               vip->blue_mask = vp->blue_mask;
        !           118:               vip->colormap_size = vp->map_entries;
        !           119:               vip->bits_per_rgb = vp->bits_per_rgb;
        !           120: 
        !           121:               vip++;
        !           122: 
        !           123:             } /* END OF LOOP ON VISUALS */
        !           124:           
        !           125:         } /* END OF LOOP ON DEPTHS */
        !           126: 
        !           127:     } /* END OF LOOP ON SCREENS */
        !           128: 
        !           129:   UnlockDisplay(dpy);
        !           130: 
        !           131:   if (count)
        !           132:     {
        !           133:       *nitems = count;
        !           134:       return vip_base;
        !           135:     }
        !           136: 
        !           137: 
        !           138:   Xfree(vip_base);
        !           139: 
        !           140:   *nitems = 0;
        !           141: 
        !           142:   return NULL;
        !           143: 
        !           144: }
        !           145: 
        !           146: 
        !           147: /*
        !           148:  *     This procedure will return the visual information for a visual 
        !           149:  *      that matches the specified depth and class for a screen.  Since 
        !           150:  *     multiple visuals may exist that match the specified depth and 
        !           151:  *     class, which visual chosen is undefined.
        !           152:  *
        !           153:  *     If a visual is found, True is returned as the function value,
        !           154:  *     otherwise False is returned.
        !           155:  */
        !           156: 
        !           157: Status XMatchVisualInfo( dpy, screen, depth, class, visual_info)
        !           158:        Display *dpy;
        !           159:        int screen;
        !           160:        int depth;
        !           161:        int class;
        !           162:        XVisualInfo *visual_info; /* RETURNED */
        !           163: {
        !           164: 
        !           165:   Visual *vp;
        !           166:   Depth *dp;
        !           167:   Screen *sp;
        !           168:   int ii,jj;
        !           169: 
        !           170:   LockDisplay(dpy);
        !           171: 
        !           172:   sp = (Screen *)(&dpy->screens[screen]);
        !           173: 
        !           174:   dp = sp->depths;
        !           175: 
        !           176:   for (ii=0; ii < sp->ndepths; ii++)
        !           177:     {
        !           178: 
        !           179:     /* LOOK THROUGH DEPTHS FOR THE WANTED DEPTH */
        !           180: 
        !           181:     if (dp->depth == depth)
        !           182:       {
        !           183:         vp = dp->visuals;
        !           184: 
        !           185:         /* LOOK THROUGH VISUALS FOR THE WANTED CLASS */
        !           186: 
        !           187:         for (jj=0; jj<dp->nvisuals; jj++)
        !           188:           {
        !           189:             if (vp->class == class) 
        !           190:               {
        !           191:                visual_info->visual = vp;
        !           192:                visual_info->visualid = vp->visualid;
        !           193:                visual_info->screen = screen;
        !           194:                visual_info->depth = depth;
        !           195:                visual_info->class = vp->class;
        !           196:                visual_info->red_mask = vp->red_mask;
        !           197:                visual_info->green_mask = vp->green_mask;
        !           198:                visual_info->blue_mask = vp->blue_mask;
        !           199:                visual_info->colormap_size = vp->map_entries;
        !           200:                visual_info->bits_per_rgb = vp->bits_per_rgb;
        !           201:                 UnlockDisplay(dpy);
        !           202:                 return True;
        !           203:               }
        !           204:             vp++;
        !           205:           }
        !           206:       }
        !           207: 
        !           208:     dp++;
        !           209: 
        !           210:     }
        !           211: 
        !           212:   UnlockDisplay(dpy);
        !           213: 
        !           214:   return False;
        !           215: 
        !           216: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.