changeset 259:470231fe99be

Initial revision
author Jim Blandy <jimb@redhat.com>
date Fri, 10 May 1991 13:43:14 +0000
parents 1e0bc00dca7a
children cbc9580b880f
files src/xterm.h
diffstat 1 files changed, 352 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/xterm.h	Fri May 10 13:43:14 1991 +0000
@@ -0,0 +1,352 @@
+/* Definitions and headers for communication with X protocol.
+   Copyright (C) 1989 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#ifdef HAVE_X11
+#include <X11/Xlib.h>
+#include <X11/cursorfont.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <X11/Xatom.h>
+#include <X11/Xresource.h>
+#else
+#include <X/Xlib.h>
+#endif /* HAVE_X11 */
+
+/* Define a queue for X-events.  One such queue is used for mouse clicks.
+   Another is used for expose events.  */
+
+#define EVENT_BUFFER_SIZE 64
+
+#define RES_CLASS "emacs"
+
+/* Max and Min sizes in character columns. */
+#define MINWIDTH 10
+#define MINHEIGHT 10
+#define MAXWIDTH 300
+#define MAXHEIGHT 80
+
+#ifdef HAVE_X11
+#define PIX_TYPE unsigned long
+#define XDISPLAY x_current_display,
+#define XFlushQueue() XFlush(x_current_display)
+#define BLACK_PIX_DEFAULT BlackPixel (x_current_display, \
+				      XDefaultScreen (x_current_display))
+#define WHITE_PIX_DEFAULT WhitePixel (x_current_display, \
+				      XDefaultScreen (x_current_display))
+#define DISPLAY_SCREEN_ARG x_current_display, \
+				      XDefaultScreen (x_current_display)
+#define DISPLAY_CELLS DisplayCells (x_current_display, XDefaultScreen (x_current_display))
+#define ROOT_WINDOW RootWindow (x_current_display, XDefaultScreen (x_current_display))
+#define FONT_TYPE XFontStruct
+#define Color XColor
+
+#define XExposeRegionEvent XExposeEvent
+#define Bitmap Pixmap			/* In X11, Bitmaps are are kind of
+					   Pixmap. */
+#define WINDOWINFO_TYPE XWindowAttributes
+#define XGetWindowInfo(w, i) XGetWindowAttributes (x_current_display, \
+						   (w), (i))
+#define XGetFont(f) XLoadQueryFont (x_current_display, (f))
+#define XLoseFont(f) XFreeFont (x_current_display, (f))
+#define XStuffPending() XPending (x_current_display)
+#define XClear(w) XClearWindow (x_current_display, (w))
+#define XWarpMousePointer(w,x,y) XWarpPointer (x_current_display, None, w, \
+					       0,0,0,0, x, y)
+#define XHandleError XSetErrorHandler
+#define XHandleIOError XSetIOErrorHandler
+
+#define XChangeWindowSize(w,x,y) XResizeWindow(x_current_display,w,x,y)
+
+#define FONT_WIDTH(f)	((f)->max_bounds.width)
+#define FONT_HEIGHT(f)	((f)->ascent + (f)->descent)
+#define FONT_BASE(f)    ((f)->ascent)
+
+/* GC values used for drawing non-standard (other face) text. */
+extern XGCValues face_gc_values;				      
+
+/* The mask of events that text windows always want to receive.  This
+   does not include mouse movement events or button release events.
+   It is used when the window is created (in x_window) and when we
+   ask/unask for mouse movement events (in XTmouse_tracking_enable).
+   */
+
+#define STANDARD_EVENT_SET      \
+  (KeyPressMask			\
+   | ExposureMask		\
+   | ButtonPressMask		\
+   | StructureNotifyMask	\
+   | FocusChangeMask		\
+   | LeaveWindowMask		\
+   | EnterWindowMask		\
+   | VisibilityChangeMask)
+
+#else	/* X10 */
+
+#define ConnectionNumber(dpy) dpyno()
+#define PIX_TYPE int
+#define XDISPLAY
+#define XFlushQueue() XFlush()
+#define BLACK_PIX_DEFAULT BlackPixel
+#define WHITE_PIX_DEFAULT WhitePixel
+#define DISPLAY_SCREEN_ARG
+#define DISPLAY_CELLS DisplayCells ()
+#define ROOT_WINDOW RootWindow
+#define XFree free
+#define FONT_TYPE FontInfo
+
+#define WINDOWINFO_TYPE WindowInfo
+#define XGetWindowInfo(w, i) XQueryWindow ((w), (i))
+#define XGetFont(f) XOpenFont ((f))
+#define XLoseFont(f) XCloseFont ((f))
+#define XStuffPending() XPending ()
+#define XWarpMousePointer(w,x,y) XWarpMouse (w,x,y)
+#define XHandleError XErrorHandler
+#define XHandleIOError XIOErrorHandler
+
+#define FONT_WIDTH(f)	((f)->width)
+#define FONT_HEIGHT(f)	((f)->height)
+#define FONT_BASE(f)    ((f)->base)
+
+#define XChangeWindowSize(w,x,y) XChangeWindow(w,x,y)
+
+#endif /* X10 */
+
+struct event_queue
+  {
+    int rindex;			/* Index at which to fetch next. */
+    int windex;			/* Index at which to store next.  */
+    XEvent xrep[EVENT_BUFFER_SIZE];
+  };
+
+/* Queue for mouse clicks.  */
+extern struct event_queue x_mouse_queue;
+
+/* Mechanism for interlocking between main program level
+   and input interrupt level.  */
+
+/* Nonzero during a critical section.  At such a time, an input interrupt
+   does nothing but set `x_pending_input'.  */
+extern int x_input_blocked;
+
+/* Nonzero means an input interrupt has arrived
+   during the current critical section.  */
+extern int x_pending_input;
+
+#ifndef sigmask
+#define sigmask(no) (1L << ((no) - 1))
+#endif
+
+/* Begin critical section. */
+#define BLOCK_INPUT (x_input_blocked++)
+
+/* End critical section. */
+#define UNBLOCK_INPUT (x_input_blocked--, (x_input_blocked < 0 ? abort () : 0))
+
+#define TOTALLY_UNBLOCK_INPUT (x_input_blocked = 0)
+#define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT
+
+/* This is the X connection that we are using.  */
+
+extern Display *x_current_display;
+
+extern struct screen *x_window_to_screen ();
+
+/* The screen (if any) which has the X window that has keyboard focus.
+   Zero if none.  This is examined by Ffocus_screen in xfns.c */
+
+struct screen *x_focus_screen;
+
+#ifdef HAVE_X11
+/* Variables associated with the X display screen this emacs is using. */
+
+/* How many screens this X display has. */
+extern Lisp_Object x_screen_count;
+
+/* The vendor supporting this X server. */
+extern Lisp_Object Vx_vendor;
+
+/* The vendor's release number for this X server. */
+extern Lisp_Object x_release;
+
+/* Height of this X screen in pixels. */
+extern Lisp_Object x_screen_height;
+
+/* Height of this X screen in millimeters. */
+extern Lisp_Object x_screen_height_mm;
+
+/* Width of this X screen in pixels. */
+extern Lisp_Object x_screen_width;
+
+/* Width of this X screen in millimeters. */
+extern Lisp_Object x_screen_width_mm;
+
+/* Does this X screen do backing store? */
+extern Lisp_Object Vx_backing_store;
+
+/* Does this X screen do save-unders? */
+extern Lisp_Object x_save_under;
+
+/* Number of planes for this screen. */
+extern Lisp_Object x_screen_planes;
+
+/* X Visual type of this screen. */
+extern Lisp_Object Vx_screen_visual;
+
+#endif /* HAVE_X11 */
+
+enum text_cursor_kinds {
+  filled_box_cursor, hollow_box_cursor, bar_cursor
+};
+
+#define PIXEL_WIDTH(s) ((s)->display.x->pixel_width)
+#define PIXEL_HEIGHT(s) ((s)->display.x->pixel_height)
+
+/* Each X screen object points to its own struct x_display object
+   in the display.x field.  The x_display structure contains all
+   the information that is specific to X windows.  */
+
+struct x_display
+{
+  /* Position of the X window (x and y offsets in root window).  */
+  int left_pos;
+  int top_pos;
+
+  /* Border width of the X window as known by the X window system.  */
+  int border_width;
+
+  /* Size of the X window in pixels. */
+  int pixel_height, pixel_width;
+
+#ifdef HAVE_X11
+  /* The tiled border used when the mouse is out of the screen. */
+  Pixmap border_tile;
+
+  /* Here are the Graphics Contexts for the default font. */
+  GC normal_gc;				/* Normal video */
+  GC reverse_gc;			/* Reverse video */
+  GC cursor_gc;				/* cursor drawing */
+#endif /* HAVE_X11 */
+
+  /* Width of the internal border.  This is a line of background color
+     just inside the window's border.  When the screen is selected,
+     a highlighting is displayed inside the internal border.  */
+  int internal_border_width;
+
+  /* The X window used for this screen.
+     May be zero while the screen object is being created
+     and the X window has not yet been created.  */
+  Window window_desc;
+
+  /* The X window used for the bitmap icon;
+     or 0 if we don't have a bitmap icon.  */
+  Window icon_desc;
+
+  /* The X window that is the parent of this X window.
+     Usually but not always RootWindow.  */
+  Window parent_desc;
+
+  /* 1 for bitmap icon, 0 for text icon.  */
+  int icon_bitmap_flag;
+
+  FONT_TYPE *font;
+
+  /* Pixel values used for various purposes.
+     border_pixel may be -1 meaning use a gray tile.  */
+  PIX_TYPE background_pixel;
+  PIX_TYPE foreground_pixel;
+  PIX_TYPE cursor_pixel;
+  PIX_TYPE border_pixel;
+  PIX_TYPE mouse_pixel;
+
+  /* Windows for scrollbars */
+  Window v_scrollbar;
+  Window v_thumbup;
+  Window v_thumbdown;
+  Window v_slider;
+
+  Window h_scrollbar;
+  Window h_thumbleft;
+  Window h_thumbright;
+  Window h_slider;
+
+  /* Scrollbar info */
+
+  int v_scrollbar_width;
+  int h_scrollbar_height;
+
+  /* Descriptor for the cursor in use for this window.  */
+#ifdef HAVE_X11
+  Cursor text_cursor;
+  Cursor nontext_cursor;
+  Cursor modeline_cursor;
+#else
+  Cursor cursor;
+#endif
+
+  /* The name that was associated with the icon, the last time
+     it was refreshed.  Usually the same as the name of the
+     buffer in the currently selected window in the screen */
+  char *icon_label;
+
+  /* Flag to set when the X window needs to be completely repainted. */
+  int needs_exposure;
+
+  /* What kind of text cursor is drawn in this window right now?  (If
+     there is no cursor (phys_cursor_x < 0), then this means nothing.  */
+  enum text_cursor_kinds text_cursor_kind;
+};
+
+/* When X windows are used, a glyf may be a 16 bit unsigned datum.
+   The high order byte is the face number and is used as an index
+   in the face table.  A face is a font plus:
+    1) the unhighlighted foreground color,
+    2) the unhighlighted background color.
+   For highlighting, the two colors are exchanged.
+   Face number 0 is unused.  The low order byte of a glyf gives
+   the character within the font.  All fonts are assumed to be
+   fixed width, and to have the same height and width. */
+
+#ifdef HAVE_X11
+/* Table of GC's used for this screen. */
+GC *gc_table;
+
+/* How many GCs are in the table. */
+int gcs_in_use;
+
+struct face
+{
+  GC face_gc;
+  unsigned int foreground;
+  unsigned int background;
+  Pixmap stipple;
+  XFontStruct *font;
+};
+
+#else	/* X10 */
+
+struct face
+{
+  FONT_TYPE *font;	/* Font info for specified font. */
+  int  fg;		/* Unhighlighted foreground. */
+  int  bg;		/* Unhighlighted background. */
+};
+#endif	/* X10 */
+
+#define MAX_FACES_AND_GLYPHS 256
+extern struct face *x_face_table[];