xutil.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* 
  2.  * xutil.c --
  3.  *
  4.  * This function contains generic X emulation routines.
  5.  *
  6.  * Copyright (c) 1995-1996 Sun Microsystems, Inc.
  7.  *
  8.  * See the file "license.terms" for information on usage and redistribution
  9.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10.  *
  11.  * RCS: @(#) $Id: xutil.c,v 1.2 1998/09/14 18:24:03 stanton Exp $
  12.  */
  13. #include <stdlib.h>
  14. #include <tk.h>
  15. #ifdef MAC_TCL
  16. #       include <Xutil.h>
  17. #       include <Xatom.h>
  18. #else
  19. #       include <X11/Xutil.h>
  20. #       include <X11/Xatom.h>
  21. #endif
  22. /*
  23.  *----------------------------------------------------------------------
  24.  *
  25.  * XInternAtom --
  26.  *
  27.  * This procedure simulates the XInternAtom function by calling
  28.  * Tk_Uid to get a unique id for every atom.  This is only a
  29.  * partial implementation, since it doesn't work across
  30.  * applications.
  31.  *
  32.  * Results:
  33.  * A new Atom.
  34.  *
  35.  * Side effects:
  36.  * None.
  37.  *
  38.  *----------------------------------------------------------------------
  39.  */
  40. Atom
  41. XInternAtom(display, atom_name, only_if_exists)
  42.     Display* display;
  43.     _Xconst char* atom_name;
  44.     Bool only_if_exists;
  45. {
  46.     static Atom atom = XA_LAST_PREDEFINED;
  47.     
  48.     display->request++;
  49.     return ++atom;
  50. }
  51. /*
  52.  *----------------------------------------------------------------------
  53.  *
  54.  * XGetVisualInfo --
  55.  *
  56.  * Returns information about the specified visual.
  57.  *
  58.  * Results:
  59.  * Returns a newly allocated XVisualInfo structure.
  60.  *
  61.  * Side effects:
  62.  * Allocates storage.
  63.  *
  64.  *----------------------------------------------------------------------
  65.  */
  66. XVisualInfo *
  67. XGetVisualInfo(display, vinfo_mask, vinfo_template, nitems_return)
  68.     Display* display;
  69.     long vinfo_mask;
  70.     XVisualInfo* vinfo_template;
  71.     int* nitems_return;
  72. {
  73.     XVisualInfo *info = (XVisualInfo *)ckalloc(sizeof(XVisualInfo));
  74.     info->visual = DefaultVisual(display, 0);
  75.     info->visualid = info->visual->visualid;
  76.     info->screen = 0;
  77.     info->depth = info->visual->bits_per_rgb;
  78.     info->class = info->visual->class;
  79.     info->colormap_size = info->visual->map_entries;
  80.     info->bits_per_rgb = info->visual->bits_per_rgb;
  81.     info->red_mask = info->visual->red_mask;
  82.     info->green_mask = info->visual->green_mask;
  83.     info->blue_mask = info->visual->blue_mask;
  84.     
  85.     if (((vinfo_mask & VisualIDMask)
  86.     && (vinfo_template->visualid != info->visualid))
  87.     || ((vinfo_mask & VisualScreenMask)
  88.     && (vinfo_template->screen != info->screen))
  89.     || ((vinfo_mask & VisualDepthMask)
  90.     && (vinfo_template->depth != info->depth))
  91.     || ((vinfo_mask & VisualClassMask)
  92.     && (vinfo_template->class != info->class))
  93.     || ((vinfo_mask & VisualColormapSizeMask)
  94.     && (vinfo_template->colormap_size != info->colormap_size))
  95.     || ((vinfo_mask & VisualBitsPerRGBMask)
  96.     && (vinfo_template->bits_per_rgb != info->bits_per_rgb))
  97.     || ((vinfo_mask & VisualRedMaskMask)
  98.     && (vinfo_template->red_mask != info->red_mask))
  99.     || ((vinfo_mask & VisualGreenMaskMask)
  100.     && (vinfo_template->green_mask != info->green_mask))
  101.     || ((vinfo_mask & VisualBlueMaskMask)
  102.     && (vinfo_template->blue_mask != info->blue_mask))
  103. ) {
  104. ckfree((char *) info);
  105. return NULL;
  106.     }
  107.     *nitems_return = 1;
  108.     return info;
  109. }