1/* MS-DOS specific C utilities, interface.
2   Copyright (C) 1993, 2001, 2002, 2003, 2004,
3                 2005, 2006, 2007 Free Software Foundation, Inc.
4
5This file is part of GNU Emacs.
6
7GNU Emacs is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Emacs; see the file COPYING.  If not, write to
19the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20Boston, MA 02110-1301, USA.  */
21
22#ifndef EMACS_MSDOS_H
23#define EMACS_MSDOS_H
24
25#include <dpmi.h>
26
27int dos_ttraw ();
28int dos_ttcooked ();
29int dos_get_saved_screen (char **, int *, int *);
30int dos_set_keyboard (int, int);
31void dos_set_window_size (int *, int *);
32
33int getdefdir (int, char*);
34void unixtodos_filename (char *);
35void dostounix_filename (char *);
36char *rootrelativepath (char *);
37void init_environment ();
38void internal_terminal_init ();
39void ctrl_break_func (_go32_dpmi_registers *);
40void install_ctrl_break_check ();
41
42extern int have_mouse;
43void mouse_init ();
44void mouse_on ();
45void mouse_off ();
46void mouse_moveto (int, int);
47
48#ifndef HAVE_X_WINDOWS
49/* Dummy types.  */
50typedef int XFontStruct;
51typedef int GC;
52typedef int Pixmap;
53typedef int Display;
54typedef int Window;
55typedef int XRectangle;
56#define PIX_TYPE unsigned long
57#define XDISPLAY
58
59/* A stripped version of struct x_display_info in xterm.h, which see.  */
60struct display_info
61{
62  /* These variables describe the range of text currently shown in its
63     mouse-face, together with the window they apply to.  As long as
64     the mouse stays within this range, we need not redraw anything on
65     its account.  Rows and columns are glyph matrix positions in
66     MOUSE_FACE_WINDOW.  */
67  int mouse_face_beg_row, mouse_face_beg_col;
68  int mouse_face_end_row, mouse_face_end_col;
69  int mouse_face_past_end;
70  Lisp_Object mouse_face_window;
71  int mouse_face_face_id;
72
73  /* 1 if a mouse motion event came and we didn't handle it right away because
74     gc was in progress.  */
75  int mouse_face_deferred_gc;
76
77  /* FRAME and X, Y position of mouse when last checked for
78     highlighting.  X and Y can be negative or out of range for the frame.  */
79  struct frame *mouse_face_mouse_frame;
80  int mouse_face_mouse_x, mouse_face_mouse_y;
81
82  /* Nonzero means defer mouse-motion highlighting.  */
83  int mouse_face_defer;
84
85  /* Nonzero means that the mouse highlight should not be shown.  */
86  int mouse_face_hidden;
87};
88
89typedef struct display_info Display_Info;
90
91/* This is a cut-down version of the one in xterm.h, which see.  */
92struct x_output
93{
94  PIX_TYPE background_pixel;	/* used in xfaces.c and lots of other places */
95  PIX_TYPE foreground_pixel;	/* ditto */
96  XFontStruct *font;		/* used in x-popup-menu (xmenu.c) */
97  Window hourglass_window;	/* currently unused (but maybe some day) */
98  unsigned hourglass_p : 1;	/* ditto */
99  struct display_info display_info; /* used for drawing mouse highlight */
100};
101
102extern struct x_output the_only_x_display;
103
104#define FRAME_X_DISPLAY(f) ((Display *) 0)
105#define FRAME_FOREGROUND_PIXEL(f) (the_only_x_display.foreground_pixel)
106#define FRAME_BACKGROUND_PIXEL(f) (the_only_x_display.background_pixel)
107#define FRAME_FONT(f) (the_only_x_display.font)
108#define FRAME_X_DISPLAY_INFO(f) (&the_only_x_display.display_info)
109
110/* Prototypes.  */
111
112/* Forward declarations for prototypes.  */
113struct frame;
114struct window;
115
116/* Defined in xfns.c; emulated on msdos.c */
117
118extern int have_menus_p P_ ((void));
119extern void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
120extern int x_pixel_width P_ ((struct frame *));
121extern int x_pixel_height P_ ((struct frame *));
122
123#define XFreeGC (void)
124#define x_destroy_bitmap(p1,p2)
125#define load_pixmap(p1,p2,p3,p4) (0)
126#define XGetGeometry(p1,p2,p3,p4,p5,p6,p7,p8,p9)
127#define DisplayWidth(p1,p2) (SELECTED_FRAME()->text_cols)
128#define DisplayHeight(p1,p2) (SELECTED_FRAME()->text_lines)
129#define XMenuSetAEQ (void)
130#define XMenuSetFreeze (void)
131#define XMenuRecompute (void)
132#define FONT_WIDTH(foo) 1
133#define XM_FAILURE -1
134#define XM_SUCCESS 1
135#define XM_NO_SELECT 2
136#define XM_IA_SELECT 3
137#define ButtonReleaseMask 0
138
139typedef struct x_menu_struct
140{
141  int count;
142  char **text;
143  struct x_menu_struct **submenu;
144  int *panenumber; /* Also used as enable.  */
145  int allocated;
146  int panecount;
147  int width;
148  char **help_text;
149} XMenu;
150
151XMenu *XMenuCreate (Display *, Window, char *);
152int XMenuAddPane (Display *, XMenu *, char *, int);
153int XMenuAddSelection (Display *, XMenu *, int, int, char *, int, char *);
154void XMenuLocate (Display *, XMenu *, int, int, int, int,
155		  int *, int *, int *, int *);
156int XMenuActivate (Display *, XMenu *, int *, int *, int, int, unsigned,
157		   char **, void (*callback)(char *, int, int));
158void XMenuDestroy (Display *, XMenu *);
159
160#endif /* not HAVE_X_WINDOWS */
161
162#endif /* not EMACS_MSDOS_H */
163
164/* arch-tag: ad21eeed-8fdb-4357-8007-36368a6bdbf3
165   (do not change this comment) */
166