annotate src/console-msw.c @ 647:b39c14581166

[xemacs-hg @ 2001-08-13 04:45:47 by ben] removal of unsigned, size_t, etc.
author ben
date Mon, 13 Aug 2001 04:46:48 +0000
parents 5fd7ba8b56e7
children fdefd0186b75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Console functions for mswindows.
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
2 Copyright (C) 1996, 2000, 2001 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 /* Authorship:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 Ben Wing: January 1996, for 19.14.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
32 #include "buffer.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 #include "console-msw.h"
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
34 #include "events.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
35 #include "opaque.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
37 DEFINE_CONSOLE_TYPE (mswindows);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
38 DEFINE_CONSOLE_TYPE (msprinter);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
40 Lisp_Object Qabortretryignore;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
41 Lisp_Object Qapplmodal;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
42 Lisp_Object Qdefault_desktop_only;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
43 Lisp_Object Qdefbutton1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
44 Lisp_Object Qdefbutton2;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
45 Lisp_Object Qdefbutton3;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
46 Lisp_Object Qdefbutton4;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
47 /* Lisp_Object Qhelp; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
48 Lisp_Object Qiconasterisk;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
49 Lisp_Object Qiconexclamation;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
50 Lisp_Object Qiconhand;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
51 Lisp_Object Qiconinformation;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
52 Lisp_Object Qiconquestion;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
53 Lisp_Object Qiconstop;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
54 /* Lisp_Object Qok; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
55 Lisp_Object Qokcancel;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
56 Lisp_Object Qretrycancel;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
57 /* Lisp_Object Qright; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
58 Lisp_Object Qrtlreading;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
59 Lisp_Object Qservice_notification;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
60 Lisp_Object Qsetforeground;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
61 Lisp_Object Qsystemmodal;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
62 Lisp_Object Qtaskmodal;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
63 Lisp_Object Qtopmost;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
64 Lisp_Object Qyesno;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
65 Lisp_Object Qyesnocancel;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
66
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
67 /* Lisp_Object Qabort; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
68 /* Lisp_Object Qcancel; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
69 /* Lisp_Object Qignore; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
70 /* Lisp_Object Qno; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
71 /* Lisp_Object Qok; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
72 /* Lisp_Object Qretry; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
73 /* Lisp_Object Qyes; */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
74
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
75
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
76 /************************************************************************/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
77 /* mswindows console methods */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
78 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 mswindows_initially_selected_for_input (struct console *con)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
86 static HWND mswindows_console_hwnd = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
87
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
88 #define KLUDGE_BUFSIZE 1024 /* buffer size for console window titles */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
89
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
90 /* Direct from the horse's mouth: Microsoft KB article Q124103 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
91 static HWND
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
92 GetConsoleHwnd (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
93 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
94 HWND hwndFound; /* this is what is returned to the caller */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
95 char pszNewWindowTitle[KLUDGE_BUFSIZE]; /* contains fabricated WindowTitle */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
96 char pszOldWindowTitle[KLUDGE_BUFSIZE]; /* contains original WindowTitle */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
97
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
98 /* fetch current window title */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
99
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
100 GetConsoleTitle(pszOldWindowTitle, KLUDGE_BUFSIZE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
101
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
102 /* format a "unique" NewWindowTitle */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
103
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
104 wsprintf(pszNewWindowTitle,"%d/%d",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
105 GetTickCount(),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
106 GetCurrentProcessId());
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
107
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
108 /* change current window title */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
109
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
110 SetConsoleTitle(pszNewWindowTitle);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
111
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
112 /* ensure window title has been updated */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
113
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
114 Sleep(40);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
115
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
116 /* look for NewWindowTitle */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
117
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
118 hwndFound=FindWindow(NULL, pszNewWindowTitle);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
119
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
120 /* restore original window title */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
121
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
122 SetConsoleTitle(pszOldWindowTitle);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
123
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
124 return(hwndFound);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
125 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
126
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
127 HWND
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
128 mswindows_get_console_hwnd (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
129 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
130 if (!mswindows_console_hwnd)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
131 mswindows_console_hwnd = GetConsoleHwnd ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
132 return mswindows_console_hwnd;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
133 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
134
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
135 static int
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
136 mswindows_ensure_console_allocated (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
137 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
138 HWND fgwin = GetForegroundWindow ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
139 /* stupid mswin api won't let you create the console window
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
140 hidden! creating it changes the focus! fuck me! */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
141 if (AllocConsole ())
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
142 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
143 SetForegroundWindow (fgwin);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
144 return 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
145 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
146 return 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
147 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
148
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
149 static Lisp_Object
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
150 mswindows_canonicalize_console_connection (Lisp_Object connection,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 563
diff changeset
151 Error_Behavior errb)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
152 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
153 /* Do not allow more than one mswindows device, by explicitly
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
154 requiring that CONNECTION is nil, the only allowed connection in
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
155 Windows. */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
156 if (!NILP (connection))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
157 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
158 if (ERRB_EQ (errb, ERROR_ME))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
159 invalid_argument
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
160 ("Invalid (non-nil) connection for mswindows device/console",
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
161 connection);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
162 else
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
163 return Qunbound;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
164 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
166 return Qnil;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
167 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
168
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
169 static Lisp_Object
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
170 mswindows_canonicalize_device_connection (Lisp_Object connection,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 563
diff changeset
171 Error_Behavior errb)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
172 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
173 return mswindows_canonicalize_console_connection (connection, errb);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
174 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
176 void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
177 mswindows_hide_console (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
178 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
179 ShowWindow (mswindows_get_console_hwnd (), SW_HIDE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
180 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
181
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
182 void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
183 mswindows_show_console (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
184 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
185 /* What I really want is for the console window to appear on top of other
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
186 windows, but NOT get the focus. This seems hard-to-impossible under
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
187 Windows. The following sequence seems to do the best possible, along
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
188 with keeping the console window on top when xemacs --help is used. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
189 HWND hwnd = mswindows_get_console_hwnd ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
190 HWND hwndf = GetFocus ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
191 ShowWindow (hwnd, SW_SHOW);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
192 BringWindowToTop (hwnd);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
193 SetFocus (hwndf);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
194 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
195
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
196 static int mswindows_console_buffered = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
197 HANDLE mswindows_console_buffer;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
198
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
199 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
200 mswindows_ensure_console_buffered (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
201 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
202 if (!mswindows_console_buffered)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
203 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
204 COORD new_size;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
205
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
206 new_size.X = 80;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
207 new_size.Y = 1000;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
208 mswindows_ensure_console_allocated ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
209 mswindows_console_buffer =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
210 CreateConsoleScreenBuffer (GENERIC_WRITE, 0, NULL,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
211 CONSOLE_TEXTMODE_BUFFER, NULL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
212 SetConsoleScreenBufferSize (mswindows_console_buffer, new_size);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
213 SetConsoleActiveScreenBuffer (mswindows_console_buffer);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
214 mswindows_console_buffered = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
215 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
216 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
217
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
218 int mswindows_message_outputted;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
219
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
220 int
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
221 mswindows_output_console_string (CONST Extbyte *str, Extcount len)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
222 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
223 DWORD num_written;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
224
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
225 mswindows_message_outputted = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
226 mswindows_ensure_console_buffered ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
227 mswindows_show_console ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
228 return WriteConsole (mswindows_console_buffer, str, len, &num_written, NULL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
229 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
230
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
231 /* Determine if running on Windows 9x and not NT */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
232 int
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
233 mswindows_windows9x_p (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
234 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
235 return GetVersion () & 0x80000000;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
236 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
237
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
238 DEFUN ("mswindows-debugging-output", Fmswindows_debugging_output, 1, 1, 0, /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
239 Write CHAR-OR-STRING to the Windows debugger, using OutputDebugString().
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
240 This function can be used as the STREAM argument of Fprint() or the like.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
241 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
242 (char_or_string))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
243 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
244 Extbyte *extstr;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
245
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
246 if (STRINGP (char_or_string))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
247 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
248 TO_EXTERNAL_FORMAT (LISP_STRING, char_or_string,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
249 C_STRING_ALLOCA, extstr,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
250 Qmswindows_tstr);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
251 OutputDebugString (extstr);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
252 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
253 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
254 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
255 Bufbyte str[MAX_EMCHAR_LEN + 1];
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
256 Bytecount len;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
257
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
258 CHECK_CHAR_COERCE_INT (char_or_string);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
259 len = set_charptr_emchar (str, XCHAR (char_or_string));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
260 str[len] = '\0';
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
261 TO_EXTERNAL_FORMAT (C_STRING, str,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
262 C_STRING_ALLOCA, extstr,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
263 Qmswindows_tstr);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
264 OutputDebugString (extstr);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
265 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
266
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
267 return char_or_string;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
268 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
269
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
270 #ifdef DEBUG_XEMACS
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
271
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
272 /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
273 * Random helper functions for debugging.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
274 * Intended for use in the MSVC "Watch" window which doesn't like
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
275 * the aborts that the error_check_foo() functions can make.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
276 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
277 struct lrecord_header *DHEADER (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
278 struct lrecord_header *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
279 DHEADER (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
280 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
281 return LRECORDP (obj) ? XRECORD_LHEADER (obj) : NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
282 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
283
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
284 void *DOPAQUE_DATA (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
285 void *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
286 DOPAQUE_DATA (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
287 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
288 return OPAQUEP (obj) ? OPAQUE_DATA (XOPAQUE (obj)) : NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
289 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
290
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
291 Lisp_Event *DEVENT (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
292 Lisp_Event *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
293 DEVENT (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
294 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
295 return EVENTP (obj) ? XEVENT (obj) : NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
296 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
297
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
298 Lisp_Cons *DCONS (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
299 Lisp_Cons *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
300 DCONS (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
301 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
302 return CONSP (obj) ? XCONS (obj) : NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
303 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
304
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
305 Lisp_Cons *DCONSCDR (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
306 Lisp_Cons *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
307 DCONSCDR (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
308 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
309 return (CONSP (obj) && CONSP (XCDR (obj))) ? XCONS (XCDR (obj)) : 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
310 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
311
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
312 Bufbyte *DSTRING (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
313 Bufbyte *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
314 DSTRING (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
315 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
316 return STRINGP (obj) ? XSTRING_DATA (obj) : NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
317 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
318
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
319 Lisp_Vector *DVECTOR (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
320 Lisp_Vector *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
321 DVECTOR (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
322 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
323 return VECTORP (obj) ? XVECTOR (obj) : NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
324 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
325
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
326 Lisp_Symbol *DSYMBOL (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
327 Lisp_Symbol *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
328 DSYMBOL (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
329 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
330 return SYMBOLP (obj) ? XSYMBOL (obj) : NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
331 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
332
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
333 Bufbyte *DSYMNAME (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
334 Bufbyte *
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
335 DSYMNAME (Lisp_Object obj)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
336 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
337 return SYMBOLP (obj) ? string_data (XSYMBOL (obj)->name) : NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
338 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
339
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
340 #endif /* DEBUG_XEMACS */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
341
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
342 DEFUN ("mswindows-message-box", Fmswindows_message_box, 1, 3, 0, /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
343 Pop up an MS Windows message box.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
344 MESSAGE is the string to display. Optional argument FLAG controls
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
345 what appears in the box and how it behaves; it is a symbol or list of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
346 symbols, described below. Second optional argument TITLE controls the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
347 title bar; if omitted, a standard title bar will be used, probably
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
348 displaying "XEmacs".
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
349
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
350 Possible flags are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
351
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
352
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
353 -- To specify the buttons in the message box:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
354
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
355 abortretryignore
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
356 The message box contains three push buttons: Abort, Retry, and Ignore.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
357 ok
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
358 The message box contains one push button: OK. This is the default.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
359 okcancel
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
360 The message box contains two push buttons: OK and Cancel.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
361 retrycancel
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
362 The message box contains two push buttons: Retry and Cancel.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
363 yesno
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
364 The message box contains two push buttons: Yes and No.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
365 yesnocancel
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
366 The message box contains three push buttons: Yes, No, and Cancel.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
367
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
368
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
369 -- To display an icon in the message box:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
370
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
371 iconexclamation, iconwarning
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
372 An exclamation-point icon appears in the message box.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
373 iconinformation, iconasterisk
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
374 An icon consisting of a lowercase letter i in a circle appears in
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
375 the message box.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
376 iconquestion
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
377 A question-mark icon appears in the message box.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
378 iconstop, iconerror, iconhand
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
379 A stop-sign icon appears in the message box.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
380
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
381
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
382 -- To indicate the default button:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
383
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
384 defbutton1
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
385 The first button is the default button. This is the default.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
386 defbutton2
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
387 The second button is the default button.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
388 defbutton3
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
389 The third button is the default button.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
390 defbutton4
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
391 The fourth button is the default button.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
392
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
393
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
394 -- To indicate the modality of the dialog box:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
395
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
396 applmodal
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
397 The user must respond to the message box before continuing work in
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
398 the window identified by the hWnd parameter. However, the user can
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
399 move to the windows of other applications and work in those windows.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
400 Depending on the hierarchy of windows in the application, the user
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
401 may be able to move to other windows within the application. All
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
402 child windows of the parent of the message box are automatically
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
403 disabled, but popup windows are not. This is the default.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
404 systemmodal
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
405 Same as applmodal except that the message box has the WS_EX_TOPMOST
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
406 style. Use system-modal message boxes to notify the user of serious,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
407 potentially damaging errors that require immediate attention (for
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
408 example, running out of memory). This flag has no effect on the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
409 user's ability to interact with windows other than those associated
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
410 with hWnd.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
411 taskmodal
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
412 Same as applmodal except that all the top-level windows belonging to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
413 the current task are disabled if the hWnd parameter is NULL. Use
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
414 this flag when the calling application or library does not have a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
415 window handle available but still needs to prevent input to other
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
416 windows in the current application without suspending other
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
417 applications.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
418
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
419
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
420 In addition, you can specify the following flags:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
421
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
422 default-desktop-only
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
423 The desktop currently receiving input must be a default desktop;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
424 otherwise, the function fails. A default desktop is one an
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
425 application runs on after the user has logged on.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
426 help
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
427 Adds a Help button to the message box. Choosing the Help button or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
428 pressing F1 generates a Help event.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
429 right
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
430 The text is right-justified.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
431 rtlreading
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
432 Displays message and caption text using right-to-left reading order
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
433 on Hebrew and Arabic systems.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
434 setforeground
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
435 The message box becomes the foreground window. Internally, Windows
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
436 calls the SetForegroundWindow function for the message box.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
437 topmost
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
438 The message box is created with the WS_EX_TOPMOST window style.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
439 service-notification
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
440 Windows NT only: The caller is a service notifying the user of an
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
441 event. The function displays a message box on the current active
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
442 desktop, even if there is no user logged on to the computer. If
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
443 this flag is set, the hWnd parameter must be NULL. This is so the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
444 message box can appear on a desktop other than the desktop
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
445 corresponding to the hWnd.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
446
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
447
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
448
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
449 The return value is one of the following menu-item values returned by
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
450 the dialog box:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
451
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
452 abort
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
453 Abort button was selected.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
454 cancel
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
455 Cancel button was selected.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
456 ignore
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
457 Ignore button was selected.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
458 no
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
459 No button was selected.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
460 ok
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
461 OK button was selected.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
462 retry
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
463 Retry button was selected.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
464 yes
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
465 Yes button was selected.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
466
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
467 If a message box has a Cancel button, the function returns the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
468 `cancel' value if either the ESC key is pressed or the Cancel button
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
469 is selected. If the message box has no Cancel button, pressing ESC has
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
470 no effect. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
471 (message_, flags, title))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
472 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
473 Lisp_Object tail;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
474 Extbyte *msgout;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
475 Extbyte *titleout = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
476 UINT sty = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
477
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
478 if (!LISTP (flags))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
479 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
480 CHECK_SYMBOL (flags);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
481 flags = list1 (flags);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
482 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
483
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
484 CHECK_STRING (message_);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
485 TO_EXTERNAL_FORMAT (LISP_STRING, message_,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
486 C_STRING_ALLOCA, msgout,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
487 Qmswindows_tstr);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
488
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
489 if (!NILP (title))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
490 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
491 CHECK_STRING (title);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
492 TO_EXTERNAL_FORMAT (LISP_STRING, title,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
493 C_STRING_ALLOCA, titleout,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
494 Qmswindows_tstr);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
495 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
496
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
497 EXTERNAL_LIST_LOOP (tail, flags)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
498 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
499 Lisp_Object st = XCAR (tail);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
500 CHECK_SYMBOL (st);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
501 if (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
502 ;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
503 #define FROB(sym, val) else if (EQ (st, sym)) sty |= val
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
504 FROB (Qabortretryignore, MB_ABORTRETRYIGNORE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
505 FROB (Qapplmodal, MB_APPLMODAL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
506 FROB (Qdefault_desktop_only, MB_DEFAULT_DESKTOP_ONLY);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
507 FROB (Qdefbutton1, MB_DEFBUTTON1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
508 FROB (Qdefbutton2, MB_DEFBUTTON2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
509 FROB (Qdefbutton3, MB_DEFBUTTON3);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
510 FROB (Qdefbutton4, MB_DEFBUTTON4);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
511 FROB (Qhelp, MB_HELP);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
512 FROB (Qiconasterisk, MB_ICONASTERISK);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
513 FROB (Qiconexclamation, MB_ICONEXCLAMATION);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
514 FROB (Qiconhand, MB_ICONHAND);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
515 FROB (Qiconinformation, MB_ICONINFORMATION);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
516 FROB (Qiconquestion, MB_ICONQUESTION);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
517 FROB (Qiconstop, MB_ICONSTOP);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
518 FROB (Qok, MB_OK);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
519 FROB (Qokcancel, MB_OKCANCEL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
520 FROB (Qretrycancel, MB_RETRYCANCEL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
521 FROB (Qright, MB_RIGHT);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
522 FROB (Qrtlreading, MB_RTLREADING);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
523 FROB (Qservice_notification, MB_SERVICE_NOTIFICATION);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
524 FROB (Qsetforeground, MB_SETFOREGROUND);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
525 FROB (Qsystemmodal, MB_SYSTEMMODAL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
526 FROB (Qtaskmodal, MB_TASKMODAL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
527 FROB (Qtopmost, MB_TOPMOST);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
528 FROB (Qyesno, MB_YESNO);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
529 FROB (Qyesnocancel, MB_YESNOCANCEL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
530 #undef FROB
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
531
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
532 else
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
533 invalid_constant ("Unrecognized flag", st);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
534 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
535
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
536 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
537 int retval = MessageBox (NULL, msgout, titleout, sty);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
538
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
539 if (retval == 0)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
540 out_of_memory ("When calling `mswindows-message-box'", Qunbound);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
541
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
542 #define FROB(sym, val) if (retval == val) return sym
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
543 FROB (Qabort, IDABORT);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
544 FROB (Qcancel, IDCANCEL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
545 FROB (Qignore, IDIGNORE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
546 FROB (Qno, IDNO);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
547 FROB (Qok, IDOK);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
548 FROB (Qretry, IDRETRY);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
549 FROB (Qyes, IDYES);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
550 #undef FROB
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
551
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
552 invalid_argument ("Unknown return value from MessageBox()",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
553 make_int (retval));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
554 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
555
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
556 return Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
557 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
558
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
559 Lisp_Object
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
560 mswindows_lisp_error (int errnum)
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
561 {
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
562 LPTSTR lpMsgBuf;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
563 Lisp_Object result;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
564 Bufbyte *inres;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
565 Bytecount len;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
566
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
567 FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
568 | FORMAT_MESSAGE_FROM_SYSTEM,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
569 NULL, errnum,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
570 /* !!#### not Mule-correct */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
571 MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
572 /* yeah, i'm casting a char ** to a char *. ya gotta
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
573 problem widdat? */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
574 (LPTSTR) &lpMsgBuf,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
575 0,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
576 NULL);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
577
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
578 TO_INTERNAL_FORMAT (C_STRING, lpMsgBuf, ALLOCA, (inres, len),
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
579 Qmswindows_tstr);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
580 /* Messages tend to end with a period and newline */
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 578
diff changeset
581 if (len >= 3 && !bufbyte_strcmp (inres + len - 3, ".\r\n"))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
582 len -= 3;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
583 result = make_string (inres, len);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
584
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
585 LocalFree (lpMsgBuf);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
586 return result;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
587 }
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
588
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
589 void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
590 mswindows_output_last_error (char *frob)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
591 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
592 int errval = GetLastError ();
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
593 Lisp_Object errmess = mswindows_lisp_error (errval);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
594
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
595 stderr_out ("last error during %s is %d: %s\n",
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
596 frob, errval, XSTRING_DATA (errmess));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
597 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
598
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
599 static Lisp_Object
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
600 msprinter_canonicalize_console_connection (Lisp_Object connection,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 563
diff changeset
601 Error_Behavior errb)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
602 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
603 /* If nil connection is specified, transform it into the name
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
604 of the default printer */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
605 if (NILP (connection))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
606 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
607 connection = msprinter_default_printer ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
608 if (NILP (connection))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
609 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
610 if (ERRB_EQ (errb, ERROR_ME))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
611 invalid_state ("There is no default printer in the system",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
612 Qunbound);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
613 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
614 return Qunbound;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
615 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
616 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
617
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
618 CHECK_STRING (connection);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
619 return connection;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
620 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
621
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
622 static Lisp_Object
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
623 msprinter_canonicalize_device_connection (Lisp_Object connection,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 563
diff changeset
624 Error_Behavior errb)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
625 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
626 return msprinter_canonicalize_console_connection (connection, errb);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
627 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
628
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 /* initialization */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 syms_of_console_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
637 DEFSUBR (Fmswindows_debugging_output);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
638
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
639 DEFSYMBOL (Qabortretryignore);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
640 DEFSYMBOL (Qapplmodal);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
641 DEFSYMBOL (Qdefault_desktop_only);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
642 DEFSYMBOL (Qdefbutton1);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
643 DEFSYMBOL (Qdefbutton2);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
644 DEFSYMBOL (Qdefbutton3);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
645 DEFSYMBOL (Qdefbutton4);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
646 /* DEFSYMBOL (Qhelp); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
647 DEFSYMBOL (Qiconasterisk);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
648 DEFSYMBOL (Qiconexclamation);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
649 DEFSYMBOL (Qiconhand);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
650 DEFSYMBOL (Qiconinformation);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
651 DEFSYMBOL (Qiconquestion);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
652 DEFSYMBOL (Qiconstop);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
653 /* DEFSYMBOL (Qok); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
654 DEFSYMBOL (Qokcancel);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
655 DEFSYMBOL (Qretrycancel);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
656 /* DEFSYMBOL (Qright); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
657 DEFSYMBOL (Qrtlreading);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
658 DEFSYMBOL (Qservice_notification);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
659 DEFSYMBOL (Qsetforeground);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
660 DEFSYMBOL (Qsystemmodal);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
661 DEFSYMBOL (Qtaskmodal);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
662 DEFSYMBOL (Qtopmost);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
663 DEFSYMBOL (Qyesno);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
664 DEFSYMBOL (Qyesnocancel);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
665
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
666 /* DEFSYMBOL (Qabort); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
667 /* DEFSYMBOL (Qcancel); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
668 /* DEFSYMBOL (Qignore); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
669 /* DEFSYMBOL (Qno); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
670 /* DEFSYMBOL (Qok); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
671 /* DEFSYMBOL (Qretry); */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 442
diff changeset
672 /* DEFSYMBOL (Qyes); */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
673
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
674 DEFSUBR (Fmswindows_message_box);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 console_type_create_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 INITIALIZE_CONSOLE_TYPE (mswindows, "mswindows", "console-mswindows-p");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 /* console methods */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 /* CONSOLE_HAS_METHOD (mswindows, init_console); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 /* CONSOLE_HAS_METHOD (mswindows, mark_console); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 CONSOLE_HAS_METHOD (mswindows, initially_selected_for_input);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 /* CONSOLE_HAS_METHOD (mswindows, delete_console); */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
687 CONSOLE_HAS_METHOD (mswindows, canonicalize_console_connection);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
688 CONSOLE_HAS_METHOD (mswindows, canonicalize_device_connection);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 /* CONSOLE_HAS_METHOD (mswindows, semi_canonicalize_console_connection); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 /* CONSOLE_HAS_METHOD (mswindows, semi_canonicalize_device_connection); */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
691
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
692 INITIALIZE_CONSOLE_TYPE (msprinter, "msprinter", "console-msprinter-p");
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
693 CONSOLE_HAS_METHOD (msprinter, canonicalize_console_connection);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
694 CONSOLE_HAS_METHOD (msprinter, canonicalize_device_connection);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 reinit_console_type_create_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 REINITIALIZE_CONSOLE_TYPE (mswindows);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
701 REINITIALIZE_CONSOLE_TYPE (msprinter);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 vars_of_console_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 Fprovide (Qmswindows);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 }