Release 950727
[wine] / misc / spy.c
1 /* SPY.C
2  *
3  * Copyright 1994, Bob Amstadt
4  */
5
6 #include <stdlib.h>
7 #include <stdio.h>
8 #include <X11/Xlib.h>
9 #include <X11/Xresource.h>
10 #include <string.h>
11 #include "windows.h"
12 #include "wine.h"
13 #include "options.h"
14 #include "stddebug.h"
15 #include "debug.h"
16
17 #define SPY_MAX_MSGNUM          0x03e8
18
19 const char *MessageTypeNames[SPY_MAX_MSGNUM + 1] =
20 {
21     "WM_NULL",                  /* 0x00 */
22     "WM_CREATE",        
23     "WM_DESTROY",    
24     "WM_MOVE",
25     "WM_UNUSED0",
26     "WM_SIZE",
27     "WM_ACTIVATE",
28     "WM_SETFOCUS",
29     "WM_KILLFOCUS",
30     "WM_UNUSED1",
31     "WM_ENABLE",
32     "WM_SETREDRAW",
33     "WM_SETTEXT",
34     "WM_GETTEXT",
35     "WM_GETTEXTLENGTH",
36     "WM_PAINT",
37     "WM_CLOSE",                 /* 0x10 */
38     "WM_QUERYENDSESSION",
39     "WM_QUIT",
40     "WM_QUERYOPEN",
41     "WM_ERASEBKGND",
42     "WM_SYSCOLORCHANGE",
43     "WM_ENDSESSION",
44     "WM_UNUSED2",
45     "WM_SHOWWINDOW",
46     "WM_CTLCOLOR",
47     "WM_WININICHANGE",
48     "WM_DEVMODECHANGE",
49     "WM_ACTIVATEAPP",
50     "WM_FONTCHANGE",
51     "WM_TIMECHANGE",
52     "WM_CANCELMODE",
53     "WM_SETCURSOR",             /* 0x20 */
54     "WM_MOUSEACTIVATE",
55     "WM_CHILDACTIVATE",
56     "WM_QUEUESYNC",
57     "WM_GETMINMAXINFO",
58     "WM_UNUSED3",
59     "WM_PAINTICON",
60     "WM_ICONERASEBKGND",
61     "WM_NEXTDLGCTL",
62     "WM_UNUSED4",
63     "WM_SPOOLERSTATUS",
64     "WM_DRAWITEM",
65     "WM_MEASUREITEM",
66     "WM_DELETEITEM",
67     "WM_VKEYTOITEM",
68     "WM_CHARTOITEM",
69     "WM_SETFONT",               /* 0x30 */
70     "WM_GETFONT", NULL, NULL, NULL, NULL, NULL, NULL,
71     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
72
73     /* 0x40 */
74     NULL, NULL, NULL, NULL, NULL, NULL,
75     "WM_WINDOWPOSCHANGING",     /* 0x0046 */
76     "WM_WINDOWPOSCHANGED",      /* 0x0047 */
77     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
78
79     /* 0x0050 */
80     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
81     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
82
83     /* 0x0060 */
84     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
85     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
86
87     /* 0x0070 */
88     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
89     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
90
91     NULL,                       /* 0x0080 */
92     "WM_NCCREATE",              /* 0x0081 */
93     "WM_NCDESTROY",             /* 0x0082 */
94     "WM_NCCALCSIZE",            /* 0x0083 */
95     "WM_NCHITTEST",             /* 0x0084 */
96     "WM_NCPAINT",               /* 0x0085 */
97     "WM_NCACTIVATE",            /* 0x0086 */
98     "WM_GETDLGCODE",            /* 0x0087 */
99     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
100
101     /* 0x0090 */
102     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
103     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
104
105     /* 0x00A0 */
106     "WM_NCMOUSEMOVE",           /* 0x00A0 */
107     "WM_NCLBUTTONDOWN",         /* 0x00A1 */
108     "WM_NCLBUTTONUP",           /* 0x00A2 */
109     "WM_NCLBUTTONDBLCLK",       /* 0x00A3 */
110     "WM_NCRBUTTONDOWN",         /* 0x00A4 */
111     "WM_NCRBUTTONUP",           /* 0x00A5 */
112     "WM_NCRBUTTONDBLCLK",       /* 0x00A6 */
113     "WM_NCMBUTTONDOWN",         /* 0x00A7 */
114     "WM_NCMBUTTONUP",           /* 0x00A8 */
115     "WM_NCMBUTTONDBLCLK",       /* 0x00A9 */
116     NULL, NULL, NULL, NULL, NULL, NULL,
117
118     /* 0x00B0 */
119     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
120     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
121
122     /* 0x00C0 */
123     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
124     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
125
126     /* 0x00D0 */
127     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
128     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
129
130     /* 0x00E0 */
131     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
132     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
133
134     /* 0x00F0 */
135     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
136     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
137
138     "WM_KEYDOWN",               /* 0x0100 */
139     "WM_KEYUP",                 /* 0x0101 */
140     "WM_CHAR",                  /* 0x0102 */
141     "WM_DEADCHAR",              /* 0x0103 */
142     "WM_SYSKEYDOWN",            /* 0x0104 */
143     "WM_SYSKEYUP",              /* 0x0105 */
144     "WM_SYSCHAR",               /* 0x0106 */
145     "WM_SYSDEADCHAR",           /* 0x0107 */
146     "WM_KEYLAST",               /* 0x0108 */
147     NULL, NULL, NULL, NULL, NULL, NULL, NULL,
148
149     "WM_INITDIALOG",            /* 0x0110 */
150     "WM_COMMAND",               /* 0x0111 */
151     "WM_SYSCOMMAND",            /* 0x0112 */
152     "WM_TIMER",                 /* 0x0113 */
153     "WM_HSCROLL",               /* 0x0114 */
154     "WM_VSCROLL",               /* 0x0115 */
155     "WM_INITMENU",              /* 0x0116 */
156     "WM_INITMENUPOPUP",         /* 0x0117 */
157     "WM_SYSTIMER",              /* 0x0118 */
158     NULL, NULL, NULL, NULL, NULL, NULL,
159     "WM_MENUSELECT",            /* 0x011f */
160
161     "WM_MENUCHAR",              /* 0x0120 */
162     "WM_ENTERIDLE",             /* 0x0121 */
163     NULL, NULL, NULL, NULL, NULL, NULL,
164     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
165
166     /* 0x0130 */
167     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
168     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
169
170     /* 0x0140 */
171     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
172     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
173
174     /* 0x0150 */
175     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
176     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
177
178     /* 0x0160 */
179     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
180     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
181
182     /* 0x0170 */
183     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
184     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
185
186     /* 0x0180 */
187     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
188     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
189
190     /* 0x0190 */
191     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
192     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
193
194     /* 0x01A0 */
195     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
196     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
197
198     /* 0x01B0 */
199     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
200     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
201
202     /* 0x01C0 */
203     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
204     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
205
206     /* 0x01D0 */
207     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
208     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
209
210     /* 0x01E0 */
211     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
212     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
213
214     /* 0x01F0 */
215     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
216     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
217
218     "WM_MOUSEMOVE",             /* 0x0200 */
219     "WM_LBUTTONDOWN",           /* 0x0201 */
220     "WM_LBUTTONUP",             /* 0x0202 */
221     "WM_LBUTTONDBLCLK",         /* 0x0203 */
222     "WM_RBUTTONDOWN",           /* 0x0204 */
223     "WM_RBUTTONUP",             /* 0x0205 */
224     "WM_RBUTTONDBLCLK",         /* 0x0206 */
225     "WM_MBUTTONDOWN",           /* 0x0207 */
226     "WM_MBUTTONUP",             /* 0x0208 */
227     "WM_MBUTTONDBLCLK",         /* 0x0209 */
228     NULL, NULL, NULL, NULL, NULL, NULL,
229
230     "WM_PARENTNOTIFY",          /* 0x0210 */
231     "WM_ENTERMENULOOP",         /* 0x0211 */
232     "WM_EXITMENULOOP",          /* 0x0212 */
233     NULL, NULL, NULL, NULL, NULL,
234     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
235
236     "WM_MDICREATE",             /* 0x0220 */
237     "WM_MDIDESTROY",            /* 0x0221 */
238     "WM_MDIACTIVATE",           /* 0x0222 */
239     "WM_MDIRESTORE",            /* 0x0223 */
240     "WM_MDINEXT",               /* 0x0224 */
241     "WM_MDIMAXIMIZE",           /* 0x0225 */
242     "WM_MDITILE",               /* 0x0226 */
243     "WM_MDICASCADE",            /* 0x0227 */
244     "WM_MDIICONARRANGE",        /* 0x0228 */
245     "WM_MDIGETACTIVE",          /* 0x0229 */
246
247     NULL, NULL, NULL, NULL, NULL, NULL,
248     /* 0x0230*/
249     "WM_MDISETMENU",            /* 0x0230 */
250     "WM_ENTERSIZEMOVE",         /* 0x0231 */
251     "WM_EXITSIZEMOVE",          /* 0x0232 */
252     NULL, NULL, NULL, NULL, NULL, 
253     /* 0x0238*/
254     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
255     
256     /* 0x0240 */
257     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
258     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
259
260     /* 0x0250 */
261     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
262     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
263     
264     /* 0x0260 */
265     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
266     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
267     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
268     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
269
270     /* 0x0280 */
271     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
272     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
273     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
274     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
275
276     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
277     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
278     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
279     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
280
281     /* 0x02c0 */
282     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
283     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
284     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
285     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
286
287     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
288     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
289     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
290     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
291
292     /* 0x0300 */
293     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
294     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
295     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
296     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
297
298     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
299     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
300     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
301     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
302
303     /* 0x0340 */
304     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
305     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
306     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
307     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
308
309     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
310     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
311     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
312     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
313
314     /* 0x0380 */
315     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
316     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
317     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
318     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
319
320     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
321     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
322     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
323     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
324
325     /* 0x03c0 */
326     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
327     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
328     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
329     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
330
331     /* 0x03e0 */
332     "WM_DDE_INITIATE",  /* 0x3E0 */
333     "WM_DDE_TERMINATE", /* 0x3E1 */
334     "WM_DDE_ADVISE",    /* 0x3E2 */
335     "WM_DDE_UNADVISE",  /* 0x3E3 */
336     "WM_DDE_ACK",       /* 0x3E4 */
337     "WM_DDE_DATA",      /* 0x3E5 */
338     "WM_DDE_REQUEST",   /* 0x3E6 */
339     "WM_DDE_POKE",      /* 0x3E7 */
340     "WM_DDE_EXECUTE"    /* 0x3E8 */
341 };
342
343 char SpyFilters[256+1];
344 char SpyIncludes[256+1];
345
346 /**********************************************************************
347  *                                      SpyMessage
348  */
349 void SpyMessage(HWND hwnd, WORD msg, WORD wParam, LONG lParam)
350 {
351     char msg_name[80];
352     
353         if(!debugging_spy)
354                 return;
355
356     if (msg > SPY_MAX_MSGNUM || MessageTypeNames[msg] == NULL)
357         sprintf(msg_name, "%04x", msg);
358     else
359         strcpy(msg_name, MessageTypeNames[msg]);
360     
361     strcat(msg_name, ";");
362     
363     if ((strlen(SpyIncludes) == 0 || strstr(SpyIncludes, msg_name) != NULL) &&
364         strstr(SpyFilters, msg_name) == NULL)
365     {
366         msg_name[strlen(msg_name) - 1] = '\0';
367         dprintf_spy(stddeb, "%04x  %20.20s  %04x  %04x  %08lx\n",
368                 hwnd, msg_name, msg, wParam, lParam);
369     }
370 }
371
372 /**********************************************************************
373  *                                      SpyInit
374  */
375 void SpyInit(void)
376 {
377     GetPrivateProfileString("spy", "exclude", "", SpyFilters, 
378                             sizeof(SpyFilters)-1, WINE_INI);
379     GetPrivateProfileString("spy", "include", "", SpyIncludes, 
380                             sizeof(SpyIncludes)-1, WINE_INI);
381
382     if (*SpyIncludes != 0) {
383       strcat(SpyIncludes, ";");
384     }
385     if (*SpyFilters != 0) {
386       strcat(SpyFilters, ";");
387     }
388 }