1 #ifndef __XCWIN32_H__
2 #define __XCWIN32_H__
3 
4 #include <windows.h>
5 #include <commctrl.h>
6 
7 typedef int Boolean;
8 typedef Boolean Bool;
9 #define True 1
10 #define False 0
11 typedef void* XtPointer;
12 typedef short Dimension;
13 typedef short Position;
14 typedef HBITMAP Pixmap;
15 typedef struct __WinWidget *Widget;
16 typedef Widget *WidgetList;
17 typedef HWND Window;
18 typedef int Pixel;
19 typedef struct {
20 	int pixel;
21 	int red, green, blue;
22 	int flags;
23 } XColor;
24 #define DoRed	0x1
25 #define DoGreen	0x2
26 #define DoBlue	0x4
27 typedef struct __GC *GC;
28 typedef void Display;
29 typedef void* Colormap;
30 typedef int XtIntervalId;
31 typedef HCURSOR Cursor;
32 typedef void* caddr_t;
33 typedef void(*XtCallbackProc)();
34 typedef void(*XtEventHandler)();
35 typedef void(*XtTimerCallbackProc)();
36 typedef void* XtAppContext;
37 typedef struct __XrmValue *XrmValuePtr;
38 typedef struct {
39 	short x, y;
40 } XPoint;
41 typedef struct {
42 	short width, height;
43 	char *data;
44 	int bits_per_pixel;
45 	int bytes_per_line;
46 	HBITMAP handle;
47 } XImage;
48 typedef struct {
49 	int ascent, descent;
50 	HFONT fid;
51 } XFontStruct;
52 typedef struct {
53 	int type;
54 	int x, y;
55 	int button;
56 	int state;
57 } XButtonEvent;
58 typedef struct {
59 	int type;
60 	int x, y;
61 	int keycode;
62 	int state;
63 } XKeyEvent;
64 typedef struct {
65 	int type;
66 	int x, y;
67 } XMotionEvent, XPointerMovedEvent;
68 typedef void* XCrossingEvent;
69 typedef struct {
70 	int type;
71 	int message_type;
72 	Display* display;
73 	int format;
74 	HWND window;
75 	union {
76 		long l[5];
77 	} data;
78 } XClientMessageEvent;
79 typedef union {
80 	int type;
81 	XButtonEvent button;
82 	XKeyEvent key;
83 	XMotionEvent motion;
84 	XPointerMovedEvent pointer_moved;
85 	XCrossingEvent crossing;
86 	XClientMessageEvent xclient;
87 } XEvent;
88 typedef unsigned int KeySym;
89 typedef struct {
90 	int type;
91 	void *data;
92 } Arg;
93 typedef struct __CharStruct *XCharStruct;
94 
95 struct __GC {
96 	/* colors */
97 	int foreground, background;
98 	int function;
99 	/* fill */
100 	int fill_style;
101 	HBITMAP fill_stipple;
102 	/* line */
103 	int line_width;
104 	int line_style;
105 	int line_cap;
106 	int line_join;
107 	int line_dash_len;
108 	char *line_dash;
109 	/* font */
110 	HFONT font;
111 	/* misc */
112 	Boolean graphics_exposures;
113 	HBITMAP clipMask;
114 };
115 typedef struct __GC XGCValues;
116 typedef ATOM Atom;
117 typedef void XWMHints;
118 
119 typedef unsigned int Cardinal;
120 #define XtOffset(p_type,field) \
121 	        ((Cardinal) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))
122 
123 #define GCForeground		0x01
124 #define GCBackground		0x02
125 #define GCFont			0x04
126 #define GCFunction		0x08
127 #define GCGraphicsExposures	0x10
128 
129 #define GXcopy R2_COPYPEN
130 #define GXxor R2_XORPEN
131 
132 /* TODO */
133 #define PointerMotionMask	0x0001
134 #define ButtonMotionMask	0x0002
135 #define Button1MotionMask	0x0004
136 #define Button2MotionMask	0x0008
137 #define EnterWindowMask		0x0010
138 #define LeaveWindowMask		0x0020
139 #define ButtonPressMask		0x0040
140 #define KeyPressMask		0x0080
141 #define NoEventMask		0x0000
142 
143 #define ButtonPress		0x01
144 #define ButtonRelease		0x02
145 #define KeyPress		0x03
146 #define KeyRelease		0x04
147 #define ClientMessage		0x05
148 #define MotionNotify		0x06
149 
150 #define None		0
151 #define Nonconvex	0
152 #define CoordModeOrigin	0
153 #define NoSymbol	0
154 
155 #define Mod1Mask    0x0001
156 #define Mod2Mask    0x0002
157 #define LockMask    0x0004
158 #define ShiftMask   0x0008
159 #define ControlMask 0x0010
160 #define Mod5Mask    0x0080
161 #define Button1     0x0100
162 #define Button2     0x0200
163 #define Button3     0x0800
164 #define Button4     0x1000
165 #define Button5     0x2000
166 #define Button1Mask Button1
167 #define Button2Mask Button2
168 #define Button3Mask Button3
169 #define Button4Mask Button4
170 #define Button5Mask Button5
171 
172 #define LineSolid		PS_SOLID
173 #define LineOnOffDash		PS_DASH
174 #define CapRound		PS_ENDCAP_ROUND
175 #define CapButt			PS_ENDCAP_FLAT
176 #define CapProjecting		PS_ENDCAP_SQUARE
177 #define JoinBevel		PS_JOIN_BEVEL
178 #define JoinMiter		PS_JOIN_MITER
179 #define FillSolid		0
180 #define FillStippled		1
181 #define FillOpaqueStippled	2
182 
183 #define XtNwidth		0
184 #define XtNheight		1
185 #define XtNx			2
186 #define XtNy			3
187 #define XtNfont			4
188 #define XtNexpose		5
189 #define XtNset			6
190 #define XtNsquare		7
191 #define XtNlabelLocation	8
192 #define XtNborderWidth		9
193 #define XtNselect		10
194 #define XtNrelease		11
195 #define XtNlabel		12
196 #define XtNxResizable		13
197 #define XtNyResizable		14
198 #define XtNxRefWidget		15
199 #define XtNyRefWidget		16
200 #define XtNyAddHeight		17
201 #define XtNyAttachBottom	18
202 #define XtNxAttachRight		19
203 #define XtNyAddHeight		17
204 #define XtNyAttachBottom	18
205 #define XtNxAttachRight		19
206 #define XtNyAddHeight		17
207 #define XtNyAttachBottom	18
208 #define XtNxAttachRight		19
209 #define XtNxAddWidth		20
210 #define XtNforeground		21
211 #define XtNstring		22
212 #define XtNsetMark		23
213 #define XtNbackground		24
214 #define XtNborderColor		25
215 #define XtNrectColor		26
216 #define XtNresize		27
217 #define XtNlabelType		28
218 #define XtNrectStipple		29
219 #define XtNattachTo		30
220 #define XtNsensitive		31
221 #define XtNxOffset		32
222 #define XtNyOffset		33
223 #define XtNlayout		34
224 #define XtNinsertPosition	35
225 #define XtNgravity		36
226 #define XtNscroll		37
227 #define XtNwrap			38
228 #define XtNexecute		39
229 #define XtNkeyUp		40
230 #define XtNkeyDown		41
231 #define XtNcolormap		42
232 #define XtNstrip		43
233 
234 #define XwLEFT		0
235 #define XwRECT		1
236 #define XwIMAGE		2
237 #define XwIGNORE	3
238 
239 #define WestGravity	0
240 #define XwWrapOff	0
241 #define XwAutoScrollHorizontal	0
242 
243 #define XwworkSpaceWidgetClass		0x01
244 #define XwtoggleWidgetClass		0x02
245 #define XwmenubuttonWidgetClass		0x03
246 #define XwformWidgetClass		0x04
247 #define XwmenuButtonWidgetClass		0x05
248 #define XwbulletinWidgetClass		0x06
249 #define XwcascadeWidgetClass		0x07
250 #define XwpopupmgrWidgetClass		0x08
251 #define XwstaticTextWidgetClass		0x09
252 #define XwpushButtonWidgetClass		0x0A
253 #define XwtextEditWidgetClass		0x0B
254 
255 #define XC_xterm IDC_IBEAM
256 #define XC_watch IDC_WAIT
257 
258 #define XtWindow(x) WinWindow(x)
259 #define XtAppAddTimeOut(app,delay,proc,data) WinAddTimeOut(delay,proc,data)
260 #define XtRemoveTimeOut(ID) WinRemoveTimeOut(ID)
261 #define XWarpPointer(dpy,flag,win,x1,y1,x2,y2,x3,y3) WinWarpPointer(win,x3,y3)
262 /*#define XCheckWindowEvent(dpy,win,mask,evt) WinCheckWindowEvent(win,mask,evt)*/
263 #define XCheckWindowEvent(dpy,win,mask,evt) False
264 #define XtDispatchEvent(evt)
265 #define XtSetArg(arg,t,d) (arg.type = t, arg.data = (void*)(d))
266 #define XtGetValues(win,args,n) WinGetValues(win,args,n)
267 #define XtSetValues(win,args,n) WinSetValues(win,args,n)
268 #define XCreatePixmap(dpy,win,w,h,depth) WinCreatePixmap(win,w,h)
269 #define XFreePixmap(dpy,w) WinFreePixmap(w)
270 #define XCreateImage(dpy,visual,depth,flag,offset,data,w,h,pad,bpl) WinCreateImage(w,h)
271 #define XDestroyImage(img) WinDestroyImage(img)
272 #define XSetLineAttributes(dpy,gc,w,style,cap,join) WinSetLineAttributes(gc,w,style,cap,join)
273 #define XCreateGC(dpy,win,mask,gc) WinCreateGC(win,mask,gc)
274 #define XFreeGC(gc) WinFreeGC(gc)
275 #define XtParent(w) WinParent(w)
276 #define XtNameToWidget(parent,name) WinNameToWindow(parent,name)
277 #define XtCreateManagedWidget(name,cls,parent,args,n) WinCreateWidget(name,cls,parent,args,n,1)
278 #define XtCreateWidget(name,cls,parent,args,n) WinCreateWidget(name,cls,parent,args,n,0)
279 #define DefaultRootWindow(dpy) GetDesktopWindow()
280 #define DefaultColormap(dpy,screen) NULL
281 #define DefaultScreen(dpy) 0
282 #define XFreeColormap(dpy,cmap)
283 #define XtDisplay(x) GetDesktopWindow()
284 #define XtCreatePopupShell(name,cls,btn,args,n) WinCreatePopup(name,args,n)
285 #define XtPopup(w,flag) WinPopup(w)
286 #define XKeysymToString(ks) WinKeyToString(ks)
287 #define XChangeProperty(dpy,win,prop,type,format,mode,data,len)
288 #define XCreateBitmapFromData(dpy,win,bits,w,h) WinCreateBitmapFromData(win,bits,w,h)
289 #define XCreatePixmapCursor(dpy,src,mask,fg,bg,xhot,yhot) WinCreateCursor(src,mask,xhot,yhot)
290 #define XCreateFontCursor(dpy,type) WinCreateStandardCursor(type)
291 #define XtOpenApplication(app,name,dummy,n,Argc,Argv,argfb,cls,arglist,narg) WinCreateTopLevel(name,Argc,Argv)
292 #define XDefineCursor(dpy,w,cur) WinSetCursor(w,cur)
293 #define XtMalloc malloc
294 #define BlackPixel(dpy,screen) RGB(0,0,0)
295 #define WhitePixel(dpy,screen) RGB(255,255,255)
296 #define XBell(dpy,len) MessageBeep(-1)
297 #define XSync(dpy,flag) WinDebug("Should sync\n")
298 #define XFlush(dpy) WinDebug("Should flush\n")
299 #define XSendEvent(dpy,win,prop,mask,evt) WinDebug("Should send an event\n")
300 #define DisplayWidth(dpy,screen) WinDesktopWidth()
301 #define DisplayHeight(dpy,screen) WinDesktopHeight()
302 #define XGetPixel(img,x,y) WinGetPixel(img,x,y)
303 #define XPutPixel(img,x,y,c) WinPutPixel(img,x,y,c)
304 #define XDrawArc(dpy,win,gc,x,y,w,h,a1,a2) WinDrawArc(win,gc,x,y,w,h,a1,a2)
305 #define XDrawLine(dpy,win,gc,x1,y1,x2,y2) WinDrawLine(win,gc,x1,y1,x2,y2)
306 #define XDrawLines(dpy,win,gc,pl,n,dummy) WinDrawLines(win,gc,pl,n)
307 #define XFillPolygon(dpy,win,gc,pl,n,x1,x2) WinFillPolygon(win,gc,pl,n)
308 #define XClearArea(dpy,win,x,y,w,h,dummy) WinClearArea(win,x,y,w,h)
309 #define XFillRectangle(dpy,win,gc,x,y,w,h) WinFillRectangle(win,gc,x,y,w,h)
310 /*#define XSetLineAttributes(dpy,gc,w,s,c,j) WinSetLineAttributes(gc,w,s,c,j)*/
311 #define XDrawPoint(dpy,win,gc,x,y) WinDrawPoint(win,gc,x,y)
312 #define XSetForeground(dpy,gc,c) WinSetForeground(gc,c)
313 #define XSetFunction(dpy,gc,z) WinSetFunction(gc,z)
314 #define XSetBackground(dpy,gc,c) WinSetBackground(gc,c)
315 #define XCopyArea(dpy,win1,win2,gc,x,y,w,h,offx,offy) WinCopyArea(win1,win2,gc,x,y,w,h,offx,offy)
316 #define XTextWidth(font,str,len) WinTextWidth(font,str,len)
317 #define XtNumber(arr) ((int) (sizeof(arr) / sizeof(arr[0])))
318 #define XSetFillStyle(dpy,gc,fs) WinSetFillStyle(gc,fs)
319 #define XSetDashes(dpy,gc,offset,dash,n) WinSetDashes(gc,offset,dash,n)
320 #define XSetStipple(dpy,gc,stipple) WinSetStipple(gc,stipple)
321 #define XQueryPointer(dpy,win,rr,cr,rx,ry,x,y,m) WinQueryPointer(win,x,y)
322 #define XDrawRectangle(dpy,win,gc,x,y,w,h) WinDrawRectangle(win,gc,x,y,w,h)
323 #define XtManageChild(win) WinManageChild(win)
324 #define XtUnmanageChild(win) WinUnmanageChild(win)
325 #define XRecolorCursor(dpy,cur,fg,bg)
326 #define XDrawString(dpy,win,gc,x,y,str,len) WinDrawString(win,gc,x,y,str,len)
327 #define XTextExtents(font,str,len,dum1,w,h,dum2) WinTextExtents(font,str,len,w,h)
328 #define XDisplayString(dpy) "unknown:0.0"
329 #define XQueryColors(dpy,cmap,cl,n) WinQueryColors(cl,n)
330 #define XLookupColor(dpy,cmap,cname,exact,color) WinLookupColor(cname,color)
331 #define XtAppMainLoop(app) WinAppMainLoop()
332 #define XtIsRealized(w) True
333 #define XPutImage(dpy,win,gc,img,srcx,srcy,destx,desty,w,h) WinPutImage(win,gc,img,srcx,srcy,destx,desty,w,h)
334 #define XFreeColorMap(dpy,cmap)
335 #define XtDestroyWidget(w) DeleteObject(w)
336 #define XtTranslateCoords(win,x,y,rx,ry) WinTranslateCoords(win,x,y,rx,ry)
337 #define XStringToKeysym(str) WinStringToKey(str)
338 #define XInternAtom(dpy,str,flag) AddAtom(str)
339 #define XSetClipMask(dpy,gc,pix) WinSetClipMask(gc,pix)
340 #define XSetClipOrigin(dpy,gc,x,y)
341 #define XtAddEventHandler(win,mask,flag,proc,data) WinAddEventHandler(win,mask,proc,data)
342 #define XtRemoveEventHandler(win,mask,flag,proc,data) WinRemoveEventHandler(win,mask,proc,data)
343 #define XtAddCallback(win,mask,proc,data) WinAddCallback(win,mask,proc,data)
344 #define XtRemoveCallback(win,mask,proc,data) WinRemoveCallback(win,mask,proc,data)
345 #define XtRemoveAllCallbacks(win,event)
346 #define XwTextCopyBuffer(win) WinGetText(win)
347 #define XwTextClearBuffer(win) WinClearText(win)
348 #define XLookupString(event,str,size,keyptr,flag) WinLookupString(event,keyptr)
349 #define XwPostPopup(shell,menu,button,dx,dy) WinPostPopup(menu,button,dx,dy)
350 #define XtOverrideTranslations(win,table,def)
351 
352 void WinWarpPointer(HWND w, int x, int y);
353 int WinAddTimeOut(int delay, void(*proc)(), void* data);
354 void WinRemoveTimeOut(int ID);
355 int WinCheckWindowEvent(HWND w, int mask, XEvent *event);
356 void WinGetValues(Widget win, Arg *args, int n);
357 void WinSetValues(Widget win, Arg *args, int n);
358 HBITMAP WinCreatePixmap(HWND w, int width, int height);
359 XImage* WinCreateImage(int width, int height);
360 void WinSetLineAttributes(GC gc, int width, int style, int cap, int join);
361 GC WinCreateGC(HWND w, int mask, XGCValues *values);
362 void WinFreeGC(GC gc);
363 Widget WinParent(Widget w);
364 Widget WinNameToWindow(Widget parent, const char *name);
365 Widget WinCreateWidget(const char *name, int cls, Widget parent, Arg *args, int n, int show);
366 Widget WinCreatePopup(const char *name, Arg *args, int n);
367 void WinPopup(Widget w);
368 char* WinKeyToString(int ks);
369 HCURSOR WinCreateCursor(HBITMAP src, HBITMAP mask, int xhot, int yhot);
370 HBITMAP WinCreateBitmapFromData(HWND w, char *data, int width, int height);
371 HCURSOR WinCreateStandardCursor(char *type);
372 HWND WinCreateTopLevel(const char *name, int *argc, char **argv);
373 void WinSetCursor(HWND w, HCURSOR cur);
374 void WinFreePixmap(Pixmap w);
375 int WinDesktopWidth(void);
376 int WinDesktopHeight(void);
377 int WinGetPixel(XImage *img, int x, int y);
378 void WinPutPixel(XImage *img, int x, int y, int c);
379 void WinDrawArc(HWND win, GC gc, int x, int y, int w, int h, int a1, int a2);
380 void WinDrawLines(HWND win, GC gc, XPoint* pathlist, int number);
381 void WinFillPolygon(HWND win, GC gc, XPoint* pathlist, int number);
382 void WinClearArea(HWND win, int x, int y, int w, int h);
383 void WinFillRectangle(HWND win, GC gc, int x, int y, int w, int h);
384 void WinSetForeground(GC gc, int rgb);
385 int WinTextWidth(XFontStruct *f, char *s, int len);
386 void WinSetFillStyle(GC gc, int style);
387 void WinSetStipple(GC gc, Pixmap pattern);
388 void WinSetFunction(GC gc, int op);
389 void WinDrawLine(HWND win, GC gc, int x1, int y1, int x2, int y2);
390 void WinDrawPoint(HWND win, GC gc, int x, int y);
391 void WinSetBackground(GC gc, int rgb);
392 void WinCopyArea(Pixmap buf, HWND win, GC gc, int x, int y, int w, int h, int offx, int offy);
393 void WinSetDashes(GC gc, int offset, char *dash, int n);
394 void WinQueryPointer(HWND w, int *x, int *y);
395 void WinDrawRectangle(HWND w, GC gc, int x, int y, int width, int height);
396 void WinDrawString(HWND win, GC gc, int x, int y, const char *str, int len);
397 void WinTextExtents(XFontStruct *fs, char *str, int len, int *width, int *height);
398 void WinQueryColors(XColor *cl, int n);
399 void WinAppMainLoop(void);
400 void WinPutImage(HWND win, GC gc, XImage *img, int srcx, int srcy, int destx, int desty, int width, int height);
401 void WinTranslateCoords(Widget win, short x, short y, short *rx, short *ry);
402 int WinStringToKey(const char *str);
403 void WinAddEventHandler(Widget win, int event, void(*proc)(), void *data);
404 void WinRemoveEventHandler(Widget win, int event, void(*proc)(), void *data);
405 void WinAddCallback(Widget win, int event, void(*proc)(), void *data);
406 int WinFindCallback(Widget win, int event, void(**proc)(), void **data);
407 void WinRemoveCallback(Widget win, int event, void(*proc)(), void *data);
408 void WinRemoveAllCallbacks(Widget win, int event);
409 char* WinGetText(Widget win);
410 void WinClearText(Widget win);
411 int WinNamedColor(const char *cname);
412 int WinLookupColor(const char *cname, XColor *color);
413 char* WinColorName(int c);
414 HWND WinWindow(Widget w);
415 void WinManageChild(Widget w);
416 void WinUnmanageChild(Widget w);
417 void WinLookupString(XKeyEvent *event, KeySym *key);
418 void WinPostPopup(Widget menu, Widget button, int dx, int dy);
419 const char* WinBuiltinsDir(void);
420 Widget WinGetMenu(const char *name);
421 const char* WinName(Widget w);
422 int WinIsPopupMenu(Widget w);
423 
424 #define KPMOD	0x1000
425 #define VKMOD	0x2000
426 
427 #define XK_Control_L	(VKMOD|VK_CONTROL)
428 #define XK_Control_R	(VKMOD|VK_CONTROL)
429 #define XK_Alt_L	(VKMOD|VK_MENU)
430 #define XK_Alt_R	(VKMOD|VK_MENU)
431 #define XK_Shift_L	(VKMOD|VK_SHIFT)
432 #define XK_Shift_R	(VKMOD|VK_SHIFT)
433 #define XK_Caps_Lock	(VKMOD|VK_CAPITAL)
434 #define XK_Num_Lock	(VKMOD|VK_NUMLOCK)
435 
436 #define XK_a 'a'
437 #define XK_b 'b'
438 #define XK_c 'c'
439 #define XK_d 'd'
440 #define XK_e 'e'
441 #define XK_f 'f'
442 #define XK_g 'g'
443 #define XK_h 'h'
444 #define XK_i 'i'
445 #define XK_j 'j'
446 #define XK_k 'k'
447 #define XK_l 'l'
448 #define XK_m 'm'
449 #define XK_n 'n'
450 #define XK_o 'o'
451 #define XK_p 'p'
452 #define XK_q 'q'
453 #define XK_r 'r'
454 #define XK_s 's'
455 #define XK_t 't'
456 #define XK_u 'u'
457 #define XK_v 'v'
458 #define XK_w 'w'
459 #define XK_x 'x'
460 #define XK_y 'y'
461 #define XK_z 'z'
462 #define XK_A 'A'
463 #define XK_B 'B'
464 #define XK_C 'C'
465 #define XK_D 'D'
466 #define XK_E 'E'
467 #define XK_F 'F'
468 #define XK_G 'G'
469 #define XK_H 'H'
470 #define XK_I 'I'
471 #define XK_J 'J'
472 #define XK_K 'K'
473 #define XK_L 'L'
474 #define XK_M 'M'
475 #define XK_N 'N'
476 #define XK_O 'O'
477 #define XK_P 'P'
478 #define XK_Q 'Q'
479 #define XK_R 'R'
480 #define XK_S 'S'
481 #define XK_T 'T'
482 #define XK_U 'U'
483 #define XK_V 'V'
484 #define XK_W 'W'
485 #define XK_X 'X'
486 #define XK_Y 'Y'
487 #define XK_Z 'Z'
488 #define XK_Home		(VKMOD|VK_HOME)
489 #define XK_Delete	(VKMOD|VK_DELETE)
490 #define XK_Escape	(VKMOD|VK_ESCAPE)
491 #define XK_F19		(VKMOD|VK_F19)
492 #define XK_Right	(VKMOD|VK_RIGHT)
493 #define XK_Left		(VKMOD|VK_LEFT)
494 #define XK_Down 	(VKMOD|VK_DOWN)
495 #define XK_Up		(VKMOD|VK_UP)
496 #define XK_Insert	(VKMOD|VK_INSERT)
497 #define XK_End		(VKMOD|VK_END)
498 #define XK_Return	(VKMOD|VK_RETURN)
499 #define XK_BackSpace	(VKMOD|VK_BACK)
500 #define XK_Undo		(VKMOD|VK_F6)
501 #define XK_Redo		(VKMOD|VK_F7)
502 #define XK_Tab		(VKMOD|VK_TAB)
503 #define XK_percent	'%'
504 #define XK_period	'.'
505 #define XK_bar		'|'
506 #define XK_greater	'>'
507 #define XK_less		'<'
508 #define XK_question	'?'
509 #define XK_colon	':'
510 #define XK_underscore	'_'
511 #define XK_space	' '
512 #define XK_plus		'+'
513 #define XK_minus	'-'
514 #define XK_slash	'/'
515 #define XK_backslash	'\\'
516 #define XK_1 '1'
517 #define XK_2 '2'
518 #define XK_3 '3'
519 #define XK_4 '4'
520 #define XK_5 '5'
521 #define XK_6 '6'
522 #define XK_7 '7'
523 #define XK_8 '8'
524 #define XK_9 '9'
525 #define XK_0 '0'
526 #define XK_KP_1	(KPMOD|XK_1)
527 #define XK_KP_2	(KPMOD|XK_2)
528 #define XK_KP_3	(KPMOD|XK_3)
529 #define XK_KP_4	(KPMOD|XK_4)
530 #define XK_KP_5	(KPMOD|XK_5)
531 #define XK_KP_6	(KPMOD|XK_6)
532 #define XK_KP_7	(KPMOD|XK_7)
533 #define XK_KP_8	(KPMOD|XK_8)
534 #define XK_KP_9	(KPMOD|XK_9)
535 #define XK_KP_0	(KPMOD|XK_0)
536 #define XK_KP_Enter	(KPMOD|VKMOD|VK_RETURN)
537 #define XK_KP_Add	(KPMOD|XK_plus)
538 #define XK_KP_Subtract	(KPMOD|XK_minus)
539 #define XK_KP_End	(KPMOD|VKMOD|VK_END)
540 #define XK_KP_Home	(KPMOD|VKMOD|VK_HOME)
541 #define XK_KP_Up	(KPMOD|VKMOD|VK_UP)
542 #define XK_KP_Down	(KPMOD|VKMOD|VK_DOWN)
543 #define XK_KP_Right	(KPMOD|VKMOD|VK_RIGHT)
544 #define XK_KP_Left	(KPMOD|VKMOD|VK_LEFT)
545 #define XK_KP_Next	(KPMOD|VKMOD|VK_NEXT)
546 #define XK_KP_Prior	(KPMOD|VKMOD|VK_PRIOR)
547 #define XK_KP_Begin	(KPMOD|VKMOD|VK_CLEAR)
548 
549 struct direct {
550 	char *d_name;
551 };
552 typedef struct {
553 	HANDLE hnd;
554 	WIN32_FIND_DATA fd;
555 	int dirty;
556 	struct direct d;
557 } DIR;
558 DIR* opendir(const char*);
559 struct direct* readdir(DIR*);
560 void closedir(DIR*);
561 
562 #define snprintf	_snprintf
563 #define vsnprintf	_vsnprintf
564 #define va_copy(a,b)	a=b
565 #define pipe		_pipe
566 #define strdup		_strdup
567 #define unlink		_unlink
568 #define putenv		_putenv
569 #define fdopen		_fdopen
570 
571 #define usleep(x) if (x < 1000) WinDebug("Cannot sleep less than 1us\n"); else Sleep(x/1000);
572 
573 #ifdef USE_WIN32_COM
574 extern void win32_comscript();
575 #ifdef USE_WIN32_DOTNET
576 extern void win32_comdotnet();
577 #endif
578 enum win32_events {
579 	ModifiedChanged,
580 	ZoomChanged
581 };
582 extern void win32_fire_event(int event_type);
583 #endif
584 
585 extern void win32_new_window(Widget, void*, void*);
586 
587 #endif
588