view oldXMenu/XLookAssoc.c @ 53880:c3e8576e5ba2

(FRINGE_ID_BITS): New definition for number of bits allocated to hold a fringe number. Increase number of bits from 4 to 8 to allow user defined fringe bitmaps. (struct glyph_row, struct it): New members left_user_fringe_bitmap, left_user_fringe_face_id, right_user_fringe_bitmap, right_user_fringe_face_id. (enum fringe_bitmap_type, struct fringe_bitmap, fringe_bitmaps): Move to new file fringe.c. (MAX_FRINGE_BITMAPS): Define here. (struct draw_fringe_bitmap_params): New members bits, cursor_p, and overlay_p. Change member which to int. (struct redisplay_interface): New members define_fringe_bitmap and destroy_fringe_bitmap. (valid_fringe_bitmap_id_p): Add prototype. (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: Add prototypes.
author Kim F. Storm <storm@cua.dk>
date Sun, 08 Feb 2004 23:18:36 +0000
parents 695cf19ef79e
children e8824c4f5f7e 375f2633d815
line wrap: on
line source

/* $XConsortium: XLookAssoc.c,v 10.16 91/01/06 12:09:24 rws Exp $ */
/* Copyright    Massachusetts Institute of Technology    1985	*/

/*
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission.  M.I.T. makes no representations about the
suitability of this software for any purpose.  It is provided "as is"
without express or implied warranty.
*/

#include <X11/Xlib.h>
#include <X11/Xresource.h>
#include "X10.h"

#ifndef NULL
#define NULL 0
#endif

/*
 * XLookUpAssoc - Retrieve the data stored in an XAssocTable by its XId.
 * If an appropriately matching XId can be found in the table the routine will
 * return apointer to the data associated with it. If the XId can not be found
 * in the table the routine will return a NULL pointer.  All XId's are relative
 * to the currently active Display.
 */
caddr_t XLookUpAssoc(dpy, table, x_id)
        register Display *dpy;
	register XAssocTable *table;	/* XAssocTable to search in. */
	register XID x_id;			/* XId to search for. */
{
	int hash;
	register XAssoc *bucket;
	register XAssoc *Entry;

	/* Hash the XId to get the bucket number. */
	hash = x_id & (table->size - 1);
	/* Look up the bucket to get the entries in that bucket. */
	bucket = &table->buckets[hash];
	/* Get the first entry in the bucket. */
	Entry = bucket->next;

	/* Scan through the entries in the bucket for the right XId. */
	for (; Entry != bucket; Entry = Entry->next) {
		if (Entry->x_id == x_id) {
			/* We have the right XId. */
			if (Entry->display == dpy) {
				/* We have the right display. */
				/* We have the right entry! */
				return(Entry->data);
			}
			/* Oops, identical XId's on different displays! */
			continue;
		}
		if (Entry->x_id > x_id) {
			/* We have gone past where it should be. */
			/* It is apparently not in the table. */
			return(NULL);
		}
	}
	/* It is apparently not in the table. */
	return(NULL);
}

/* arch-tag: d5075d0c-4b71-467d-b33c-3f5c4c4afcf2
   (do not change this comment) */