view oldXMenu/XMakeAssoc.c @ 97657:24f1cb4150ef

Include frame.h before termhooks.h. (mouse_on, mouse_off, mouse_moveto, mouse_init) (msdos_set_cursor_shape, IT_set_face, IT_write_glyphs) (show_mouse_face, IT_clear_end_of_line, IT_clear_screen) (IT_clear_to_end, IT_cursor_to, IT_display_cursor, IT_cmgoto) (IT_set_terminal_modes, IT_reset_terminal_modes) (IT_set_frame_parameters): Use tty->termscript instead of a global variable termscript. (IT_write_glyphs): Use tty->terminal->terminal_coding instead of a global variable terminal_coding. Don't refer to Vnonascii_translation_table. (internal_terminal_init): Set Vwindow_system in current_kboard. Don't use TTY_CHAR_INS_DEL_OK. Set Vinitial_window_system. Announce date and time of session start, if termscript is open. Don't zero out the_only_display_info (it is done in term.c:init_tty). Open termscript only of not already open. Log "SCREEN SAVED" here, instead of IT_set_terminal_modes. Init mouse here instead of dos_ttraw. Don't initialize display if this is an initial tty. Don't set FRAME_FONT. (Vwindow_system_version): Bump to 23. (dos_ttraw): Accept a TTY argument; all callers fixed. If mouse is available, set up mouse_position_hook. (dos_ttraw, IT_set_terminal_modes): If called with initial terminal, do nothing. (IT_set_frame_parameters): Handle the Qtty_type frame parameter by calling internal_terminal_init. (dos_set_window_size, show_mouse_face) (clear_mouse_face, IT_note_mode_line_highlight) (IT_note_mouse_highlight, IT_update_begin, IT_frame_up_to_date) (dos_rawgetc): Use tty_display_info instead of x_display_info. (initialize_msdos_display): New function. (IT_cursor_to, IT_clear_to_end, IT_clear_screen) (IT_clear_end_of_line, IT_insert_glyphs, IT_write_glyphs) (IT_delete_glyphs, IT_ring_bell, IT_reset_terminal_modes) (IT_set_terminal_modes, IT_set_terminal_window, IT_update_begin): Accept additional argument: a pointer to a frame. All callers changed. (request_sigio, unrequest_sigio): Don't define, now defined on sysdep.c. (IT_write_glyphs): Rewrite to use encode_terminal_code.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 23 Aug 2008 16:54:45 +0000
parents 77b2ab19bece
children 648e6c714c7d 5cc91198ffb2 a63dbe9548aa
line wrap: on
line source

/* Copyright    Massachusetts Institute of Technology    1985	*/

#include "copyright.h"


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

#ifndef NULL
#define NULL 0
#endif

extern int errno;

void emacs_insque();
struct qelem {
	struct    qelem *q_forw;
	struct    qelem *q_back;
	char q_data[1];
};
/*
 * XMakeAssoc - Insert data into an XAssocTable keyed on an XId.
 * Data is inserted into the table only once.  Redundant inserts are
 * meaningless (but cause no problems).  The queue in each association
 * bucket is sorted (lowest XId to highest XId).
 */
XMakeAssoc(dpy, table, x_id, data)
	register Display *dpy;
	register XAssocTable *table;
	register XID x_id;
	register caddr_t data;
{
	int hash;
	register XAssoc *bucket;
	register XAssoc *Entry;
	register XAssoc *new_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;

	/* If (Entry != bucket), the bucket is empty so make */
	/* the new entry the first entry in the bucket. */
	/* if (Entry == bucket), the we have to search the */
	/* bucket. */
	if (Entry != bucket) {
		/* The bucket isn't empty, begin searching. */
		/* If we leave the for loop then we have either passed */
		/* where the entry should be or hit the end of the bucket. */
		/* In either case we should then insert the new entry */
		/* before the current value of "Entry". */
		for (; Entry != bucket; Entry = Entry->next) {
			if (Entry->x_id == x_id) {
				/* Entry has the same XId... */
				if (Entry->display == dpy) {
					/* Entry has the same Display... */
					/* Therefore there is already an */
					/* entry with this XId and Display, */
					/* reset its data value and return. */
					Entry->data = data;
					return;
				}
				/* We found an association with the right */
				/* id but the wrong display! */
				continue;
			}
			/* If the current entry's XId is greater than the */
			/* XId of the entry to be inserted then we have */
			/* passed the location where the new XId should */
			/* be inserted. */
			if (Entry->x_id > x_id) break;
		}
        }

	/* If we are here then the new entry should be inserted just */
	/* before the current value of "Entry". */
	/* Create a new XAssoc and load it with new provided data. */
	new_entry = (XAssoc *) malloc(sizeof(XAssoc));
	new_entry->display = dpy;
	new_entry->x_id = x_id;
	new_entry->data = data;

	/* Insert the new entry. */
	emacs_insque((struct qelem *)new_entry, (struct qelem *)Entry->prev);
}

/* arch-tag: d7e3fb8a-f3b3-4c5d-a307-75ca67ec1b49
   (do not change this comment) */