ReactOS 0.4.15-dev-7788-g1ad9096
win32.c
Go to the documentation of this file.
1/* -*- c-basic-offset: 8 -*-
2 rdesktop: A Remote Desktop Protocol client.
3 win32 calls
4 Copyright (C) Jay Sorg 2006
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License along
17 with this program; if not, write to the Free Software Foundation, Inc.,
18 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*/
20
21#include "precomp.h"
22
23#include "uimain.h"
24
25extern char g_username[];
26extern char g_hostname[];
27extern char g_servername[];
28extern char g_password[];
29extern char g_shell[];
30extern char g_directory[];
31extern char g_domain[];
32extern int g_width;
33extern int g_height;
34extern int g_tcp_sck;
35extern int g_server_depth;
36extern int g_tcp_port_rdp; /* in tcp.c */
37extern int pal_entries[];
38
39static HWND g_Wnd = 0;
41static HCURSOR g_cursor = 0;
42static int g_block = 0;
43static int g_xoff = 0; /* offset from window to client coords */
44static int g_yoff = 0;
45static int g_xscroll = 0; /* current scroll position */
46static int g_yscroll = 0;
47static int g_screen_width = 0;
48static int g_screen_height = 0;
49static int g_wnd_cwidth = 0; /* set from WM_SIZE */
50static int g_wnd_cheight = 0;
51static int g_fullscreen = 0;
52static int g_workarea = 0;
53static int g_mousex = 0; /* in client coords */
54static int g_mousey = 0;
55//static int g_width_height_set = 0;
56
57static int g_clip_left = 0;
58static int g_clip_top = 0;
59static int g_clip_right = 800;
60static int g_clip_bottom = 600;
61static RECT g_wnd_clip; /* this client area of whats actually visible */
62 /* set from WM_SIZE */
63
64/*****************************************************************************/
65static void
66str_to_uni(TCHAR * sizex, char * size1)
67{
68 int len;
69 int i;
70
71 len = strlen(size1);
72 for (i = 0; i < len; i++)
73 {
74 sizex[i] = size1[i];
75 }
76 sizex[len] = 0;
77}
78
79/*****************************************************************************/
80static void
81uni_to_str(char * sizex, TCHAR * size1)
82{
83 int len;
84 int i;
85
86 len = lstrlen(size1);
87 for (i = 0; i < len; i++)
88 {
89 sizex[i] = (char)size1[i];
90 }
91 sizex[len] = 0;
92}
93
94/*****************************************************************************/
95/* returns non zero if it processed something */
96static int
98{
99 fd_set rfds;
100 struct timeval tm;
101 int count;
102 int rv;
103
104 rv = 0;
105 if (g_block == 0)
106 {
107 g_block = 1;
108 /* see if there really is data */
109 FD_ZERO(&rfds);
110 FD_SET((unsigned int)g_tcp_sck, &rfds);
111 ZeroMemory(&tm, sizeof(tm));
112 count = select(g_tcp_sck + 1, &rfds, 0, 0, &tm);
113 if (count > 0)
114 {
115 if (ui_read_wire())
116 {
117 rv = 1;
118 }
119 else
120 {
122 }
123 }
124 g_block = 0;
125 }
126 return rv;
127}
128
129/*****************************************************************************/
130void
132{
133#ifdef WITH_DEBUG
134 printf(msg);
135#else /* WITH_DEBUG */
136 TCHAR lmsg[512];
137 TCHAR ltitle[512];
138
139 str_to_uni(lmsg, msg);
140 str_to_uni(ltitle, "Error");
141 MessageBox(g_Wnd, lmsg, ltitle, MB_OK);
142#endif /* WITH_DEBUG */
143}
144
145/*****************************************************************************/
146static int
148{
149 int rv;
150
151 rv = 0;
152 switch (code & 0xff)
153 {
154 case 0x30: rv = 0x0b; break; // 0
155 case 0x31: rv = 0x02; break; // 1
156 case 0x32: rv = 0x03; break; // 2
157 case 0x33: rv = 0x04; break; // 3
158 case 0x34: rv = 0x05; break; // 4
159 case 0x35: rv = 0x06; break; // 5
160 case 0x36: rv = 0x07; break; // 6
161 case 0x37: rv = 0x08; break; // 7
162 case 0x38: rv = 0x09; break; // 8
163 case 0x39: rv = 0x0a; break; // 9
164
165 case 0xbd: rv = 0x0c; break; // -
166 case 0xbb: rv = 0x0d; break; // =
167 case 0x08: rv = 0x0e; break; // backspace
168 case 0x09: rv = 0x0f; break; // tab
169 case 0xdb: rv = 0x1b; break; // ]
170 case 0xdd: rv = 0x1a; break; // [
171 case 0x14: rv = 0x3a; break; // capslock
172 case 0xba: rv = 0x27; break; // ;
173 case 0xde: rv = 0x28; break; // '
174 case 0x10: rv = 0x2a; break; // shift
175 case 0xbc: rv = 0x33; break; // ,
176 case 0xbe: rv = 0x34; break; // .
177 case 0xbf: rv = 0x35; break; // /
178 case 0x0d: rv = 0x1c; break; // enter
179 case 0x27: rv = 0x4d; break; // arrow right
180 case 0x25: rv = 0x4b; break; // arrow left
181 case 0x26: rv = 0x48; break; // arrow up
182 case 0x28: rv = 0x50; break; // arrow down
183 case 0x20: rv = 0x39; break; // space
184 case 0xdc: rv = 0x2b; break; // backslash
185 case 0xc0: rv = 0x29; break; // `
186 case 0x11: rv = 0x1d; break; // ctl
187
188 case 0x41: rv = 0x1e; break; // a
189 case 0x42: rv = 0x30; break; // b
190 case 0x43: rv = 0x2e; break; // c
191 case 0x44: rv = 0x20; break; // d
192 case 0x45: rv = 0x12; break; // e
193 case 0x46: rv = 0x21; break; // f
194 case 0x47: rv = 0x22; break; // g
195 case 0x48: rv = 0x23; break; // h
196 case 0x49: rv = 0x17; break; // i
197 case 0x4a: rv = 0x24; break; // j
198 case 0x4b: rv = 0x25; break; // k
199 case 0x4c: rv = 0x26; break; // l
200 case 0x4d: rv = 0x32; break; // m
201 case 0x4e: rv = 0x31; break; // n
202 case 0x4f: rv = 0x18; break; // o
203 case 0x50: rv = 0x19; break; // p
204 case 0x51: rv = 0x10; break; // q
205 case 0x52: rv = 0x13; break; // r
206 case 0x53: rv = 0x1f; break; // s
207 case 0x54: rv = 0x14; break; // t
208 case 0x55: rv = 0x16; break; // u
209 case 0x56: rv = 0x2f; break; // v
210 case 0x57: rv = 0x11; break; // w
211 case 0x58: rv = 0x2d; break; // x
212 case 0x59: rv = 0x15; break; // y
213 case 0x5a: rv = 0x2c; break; // z
214 }
215 return rv;
216}
217
218/*****************************************************************************/
219static void
220mi_scroll(int dx, int dy)
221{
222 HRGN rgn;
223
224 rgn = CreateRectRgn(0, 0, 0, 0);
225 ScrollWindowEx(g_Wnd, dx, dy, 0, 0, rgn, 0, SW_ERASE);
226 InvalidateRgn(g_Wnd, rgn, 0);
227 DeleteObject(rgn);
228}
229
230/*****************************************************************************/
231int
233{
234 short keydata;
235 int code;
236
237 code = 0;
238 keydata = GetKeyState(VK_SCROLL);
239 if (keydata & 0x0001)
240 {
241 code |= 1;
242 }
243 keydata = GetKeyState(VK_NUMLOCK);
244 if (keydata & 0x0001)
245 {
246 code |= 2;
247 }
248 keydata = GetKeyState(VK_CAPITAL);
249 if (keydata & 0x0001)
250 {
251 code |= 4;
252 }
253 return code;
254}
255
256/*****************************************************************************/
257static void
259{
260 int code;
261
264}
265
266/*****************************************************************************/
267static LRESULT
269{
270 if (g_mousex >= g_wnd_clip.left &&
274 {
276 }
277 /* need default behavoir here */
279}
280
281/*****************************************************************************/
282static LRESULT
284{
285 POINT pt;
286
287 pt.x = LOWORD(lParam);
288 pt.y = HIWORD(lParam);
289 if (ScreenToClient(g_Wnd, &pt))
290 {
291 g_mousex = pt.x;
292 g_mousey = pt.y;
293 }
295}
296
297/*****************************************************************************/
298static LRESULT
300{
304 return 0;
305}
306
307/*****************************************************************************/
308static LRESULT
310{
314 return 0;
315}
316
317/*****************************************************************************/
318static LRESULT
320{
324 return 0;
325}
326
327/*****************************************************************************/
328static LRESULT
330{
334 return 0;
335}
336
337/*****************************************************************************/
338static LRESULT
340{
344 return 0;
345}
346
347/*****************************************************************************/
348static LRESULT
350{
354 return 0;
355}
356
357/*****************************************************************************/
358static LRESULT
360{
364 return 0;
365}
366
367/*****************************************************************************/
368static LRESULT
370{
371 int delta;
372
373 delta = ((signed short)HIWORD(wParam)); /* GET_WHEEL_DELTA_WPARAM(wParam); */
374 if (delta > 0)
375 {
376 ui_mouse_button(4, 0, 0, 1);
377 ui_mouse_button(4, 0, 0, 0);
378 }
379 else
380 {
381 ui_mouse_button(5, 0, 0, 1);
382 ui_mouse_button(5, 0, 0, 0);
383 }
384 return 0;
385}
386
387/*****************************************************************************/
388static LRESULT
390{
391 int scancode;
392 int ext;
393 int down;
394
395 ext = HIWORD(lParam);
396 scancode = ext;
397 down = !(ext & 0x8000);
398 scancode &= 0xff;
399 if (scancode == 0)
400 {
402 }
403 ext &= 0x0100;
404 if (scancode == 0x0045) /* num lock */
405 {
406 ext &= ~0x0100;
407 }
408 if (down)
409 {
410 ui_key_down(scancode, ext);
411 }
412 else
413 {
414 ui_key_up(scancode, ext);
415 }
416 return 0;
417}
418
419/*****************************************************************************/
420static LRESULT
422{
423 PAINTSTRUCT ps;
424 RECT rect;
425 HBRUSH brush;
426
427 BeginPaint(hWnd, &ps);
428 /* paint the area outside the rdp screen with one colour */
429 rect = ps.rcPaint;
430 rect.left = UI_MAX(rect.left, g_width);
431 if (!IsRectEmpty(&rect))
432 {
433 brush = CreateSolidBrush(RGB(0, 0, 255));
434 FillRect(ps.hdc, &rect, brush);
435 DeleteObject(brush);
436 }
437 rect = ps.rcPaint;
438 rect.top = UI_MAX(rect.top, g_height);
439 if (!IsRectEmpty(&rect))
440 {
441 brush = CreateSolidBrush(RGB(0, 0, 255));
442 FillRect(ps.hdc, &rect, brush);
443 DeleteObject(brush);
444 }
445 rect = ps.rcPaint;
446 EndPaint(hWnd, &ps);
448 rect.top + g_yscroll,
449 (rect.right - rect.left) + 1,
450 (rect.bottom - rect.top) + 1);
451 return 0;
452}
453
454/*****************************************************************************/
455static LRESULT
457{
458 int oldxscroll;
459 int oldyscroll;
460
461 if (wParam == SIZE_MINIMIZED)
462 {
464 }
465 g_wnd_cwidth = LOWORD(lParam); /* client width / height */
467 g_wnd_clip.left = 0;
468 g_wnd_clip.top = 0;
472 {
475 }
476 oldxscroll = g_xscroll;
477 oldyscroll = g_yscroll;
478 if (g_wnd_cwidth >= g_width)
479 {
480 g_xscroll = 0;
481 }
482 else
483 {
485 }
486 if (g_wnd_cheight >= g_height)
487 {
488 g_yscroll = 0;
489 }
490 else
491 {
493 }
494 mi_scroll(oldxscroll - g_xscroll, oldyscroll - g_yscroll);
496 {
497 /* check the caps, num, and scroll lock here */
499 }
500 return 0;
501}
502
503/*****************************************************************************/
504static LRESULT
506{
507 LPRECT prect;
508 int width;
509 int height;
510 int style;
511
512 prect = (LPRECT) lParam; /* total window rect */
513 width = (prect->right - prect->left) - (g_xoff * 2);
514 height = (prect->bottom - prect->top) - (g_yoff + g_xoff);
515 if (height < g_height || width < g_width)
516 {
518 if (!(style & WS_HSCROLL))
519 {
522 g_xscroll = 0;
523 g_yscroll = 0;
526 }
527 }
528 else if (height >= g_height && width >= g_width)
529 {
531 if (style & WS_HSCROLL)
532 {
533 style &= ~WS_HSCROLL;
534 style &= ~WS_VSCROLL;
536 g_xscroll = 0;
537 g_yscroll = 0;
538 }
539 }
540 return 0;
541}
542
543/*****************************************************************************/
544static LRESULT
546{
547 int code;
548 int oldxscroll;
549
550 code = (int) LOWORD(wParam); /* scroll bar value */
551 if (code == SB_LINELEFT)
552 {
553 oldxscroll = g_xscroll;
554 g_xscroll--;
557 mi_scroll(oldxscroll - g_xscroll, 0);
558 }
559 else if (code == SB_LINERIGHT)
560 {
561 oldxscroll = g_xscroll;
562 g_xscroll++;
565 mi_scroll(oldxscroll - g_xscroll, 0);
566 }
567 else if (code == SB_PAGELEFT)
568 {
569 oldxscroll = g_xscroll;
570 g_xscroll -= g_wnd_cwidth / 2;
573 mi_scroll(oldxscroll - g_xscroll, 0);
574 }
575 else if (code == SB_PAGERIGHT)
576 {
577 oldxscroll = g_xscroll;
578 g_xscroll += g_wnd_cwidth / 2;
581 mi_scroll(oldxscroll - g_xscroll, 0);
582 }
583 else if (code == SB_BOTTOM)
584 {
585 oldxscroll = g_xscroll;
588 mi_scroll(oldxscroll - g_xscroll, 0);
589 }
590 else if (code == SB_TOP)
591 {
592 oldxscroll = g_xscroll;
593 g_xscroll = 0;
595 mi_scroll(oldxscroll - g_xscroll, 0);
596 }
597 else if (code == SB_THUMBPOSITION)
598 {
599 oldxscroll = g_xscroll;
600 g_xscroll = (signed short) HIWORD(wParam);
602 mi_scroll(oldxscroll - g_xscroll, 0);
603 }
604 return 0;
605}
606
607/*****************************************************************************/
608static LRESULT
610{
611 int code;
612 int oldyscroll;
613
614 code = (int) LOWORD(wParam); /* scroll bar value */
615 if (code == SB_LINELEFT)
616 {
617 oldyscroll = g_yscroll;
618 g_yscroll--;
621 mi_scroll(0, oldyscroll - g_yscroll);
622 }
623 else if (code == SB_LINERIGHT)
624 {
625 oldyscroll = g_yscroll;
626 g_yscroll++;
629 mi_scroll(0, oldyscroll - g_yscroll);
630 }
631 else if (code == SB_PAGELEFT)
632 {
633 oldyscroll = g_yscroll;
637 mi_scroll(0, oldyscroll - g_yscroll);
638 }
639 else if (code == SB_PAGERIGHT)
640 {
641 oldyscroll = g_yscroll;
645 mi_scroll(0, oldyscroll - g_yscroll);
646 }
647 else if (code == SB_BOTTOM)
648 {
649 oldyscroll = g_yscroll;
652 mi_scroll(0, oldyscroll - g_yscroll);
653 }
654 else if (code == SB_TOP)
655 {
656 oldyscroll = g_yscroll;
657 g_yscroll = 0;
659 mi_scroll(0, oldyscroll - g_yscroll);
660 }
661 else if (code == SB_THUMBPOSITION)
662 {
663 oldyscroll = g_yscroll;
664 g_yscroll = (signed short) HIWORD(wParam);
666 mi_scroll(0, oldyscroll - g_yscroll);
667 }
668 return 0;
669}
670
671
672/*****************************************************************************/
675{
676 switch (message)
677 {
678 case WM_SETCURSOR:
680 case 0x0084: /* WinCE don't have this WM_NCHITTEST: */
682 case WM_MOUSEMOVE:
684 case WM_LBUTTONDOWN:
686 case WM_LBUTTONUP:
688 case WM_RBUTTONDOWN:
690 case WM_RBUTTONUP:
692 case WM_MBUTTONDOWN:
694 case WM_MBUTTONUP:
696 /* some windows compilers don't have these defined like vc6 */
697 case 0x020a: /* WM_MOUSEWHEEL: */
699 case WM_KEYDOWN:
700 case WM_KEYUP:
701 case WM_SYSKEYDOWN:
702 case WM_SYSKEYUP:
704 case WM_CHAR:
705 case WM_DEADCHAR:
706 case WM_SYSCHAR:
707 case WM_SYSDEADCHAR:
708 break;
709 case WM_PAINT:
711 case WM_DESTROY:
713 break;
714 case WM_APP + 1:
715 case WM_TIMER:
716 check_sck();
717 break;
718 case WM_SIZE:
720 case 532: /* not defined in wince WM_SIZING: */
722 case WM_HSCROLL:
724 case WM_VSCROLL:
726 case WM_SETFOCUS:
729 default:
731 }
732 return 0;
733}
734
735/*****************************************************************************/
736static HRGN
738{
739 HRGN rgn;
740
745 SelectClipRgn(dc, rgn);
748 return rgn;
749}
750
751/*****************************************************************************/
752/* returns non zero if ok */
753int
755{
756 RECT rc;
757 WNDCLASS wc;
758 TCHAR classname[512];
759 TCHAR caption[512];
760 DWORD style;
761 int x;
762 int y;
763 int w;
764 int h;
765
766 if (g_Wnd != 0 || g_Instance != 0)
767 {
768 return 0;
769 }
771 ZeroMemory(&wc, sizeof(wc));
772 wc.lpfnWndProc = WndProc; /* points to window procedure */
773 /* name of window class */
774 str_to_uni(classname, "rdesktop");
776 str_to_uni(caption, "ReactOS Remote Desktop");
779 /* Register the window class. */
780 if (!RegisterClass(&wc))
781 {
782 return 0; /* Failed to register window class */
783 }
784 rc.left = 0;
786 rc.top = 0;
788
789 if (g_fullscreen)
790 {
791 style = WS_POPUP;
792 }
793 else
794 {
797 }
799 {
801 }
802 AdjustWindowRectEx(&rc, style, 0, 0);
805 w = rc.right - rc.left;
806 h = rc.bottom - rc.top;
807
808 g_Wnd = CreateWindow(wc.lpszClassName, caption,
809 style, x, y, w, h,
811 (LPVOID) NULL);
812 g_clip_left = 0;
813 g_clip_top = 0;
816 if (g_workarea)
817 {
819 }
820 else
821 {
823 }
825
827 SetTimer(g_Wnd, 1, 333, 0);
828
829 return 1;
830}
831
832/*****************************************************************************/
833int
835{
836 MSG msg;
837
838 while (GetMessage(&msg, NULL, 0, 0))
839 {
842 }
843 return msg.wParam;
844}
845
846/*****************************************************************************/
847void
849{
850}
851
852/*****************************************************************************/
853static void
854mi_show_error(char * caption)
855{
856 LPVOID lpMsgBuf;
857 TCHAR lcaption[512];
858
861 (LPTSTR) &lpMsgBuf, 0, NULL);
862#ifdef WITH_DEBUG
863 printf(lpMsgBuf);
864#else /* WITH_DEBUG */
865 str_to_uni(lcaption, caption);
866 MessageBox(g_Wnd, (LPTSTR) lpMsgBuf, lcaption,
868#endif /* WITH_DEBUG */
869 LocalFree(lpMsgBuf);
870}
871
872/*****************************************************************************/
873void
874mi_paint_rect(char * data, int width, int height, int x, int y, int cx, int cy)
875{
877 BITMAPINFO bi;
878 HDC dc;
879 HDC maindc;
880 HGDIOBJ save;
881 HRGN rgn;
882 void * bits;
883 int i;
884 int j;
885 int colour;
886 int red;
887 int green;
888 int blue;
889 int index;
890
891 ZeroMemory(&bi, sizeof(bi));
892 bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
895 bi.bmiHeader.biPlanes = 1;
896 bi.bmiHeader.biBitCount = 32;
898 maindc = GetWindowDC(g_Wnd);
899 bitmap = CreateDIBSection(maindc, &bi, DIB_RGB_COLORS, (void **) &bits, 0, 0);
900 if (bitmap == 0)
901 {
902 mi_show_error("CreateDIBSection failed");
903 }
904
905 if (g_server_depth == 8)
906 {
907 for (i = cy - 1; i >= 0; i--)
908 {
909 for (j = cx - 1; j >= 0; j--)
910 {
911 colour = ((unsigned char*)data)[i * cx + j];
912 red = (pal_entries[colour & 0xff] & 0xff0000) >> 16;
913 green = (pal_entries[colour & 0xff] & 0xff00) >> 8;
914 blue = pal_entries[colour & 0xff] & 0xff;
915 MAKE_COLOUR32(colour, red, green, blue);
916 ((unsigned int*)bits)[i * cx + j] = colour;
917 }
918 }
919 }
920 else if (g_server_depth == 15)
921 {
922 for (i = cy - 1; i >= 0; i--)
923 {
924 for (j = cx - 1; j >= 0; j--)
925 {
926 colour = ((unsigned short*)data)[i * cx + j];
927 SPLIT_COLOUR15(colour, red, green, blue);
928 MAKE_COLOUR32(colour, red, green, blue);
929 ((unsigned int*)bits)[i * cx + j] = colour;
930 }
931 }
932 }
933 else if (g_server_depth == 16)
934 {
935 for (i = cy - 1; i >= 0; i--)
936 {
937 for (j = cx - 1; j >= 0; j--)
938 {
939 colour = ((unsigned short*)data)[i * cx + j];
940 SPLIT_COLOUR16(colour, red, green, blue);
941 MAKE_COLOUR32(colour, red, green, blue);
942 ((unsigned int*)bits)[i * cx + j] = colour;
943 }
944 }
945 }
946 else if (g_server_depth == 24)
947 {
948 for (i = cy - 1; i >= 0; i--)
949 {
950 for (j = cx - 1; j >= 0; j--)
951 {
952 index = (i * cx + j) * 3;
953 red = ((unsigned char*)data)[index + 2];
954 green = ((unsigned char*)data)[index + 1];
955 blue = ((unsigned char*)data)[index];
956 MAKE_COLOUR32(colour, red, green, blue);
957 ((unsigned int*)bits)[i * cx + j] = colour;
958 }
959 }
960 }
961 else if (g_server_depth == 32)
962 {
963 memcpy(bits, data, cx*cy*4);
964 }
965 dc = CreateCompatibleDC(maindc);
966 if (dc == 0)
967 {
968 mi_show_error("CreateCompatibleDC failed");
969 }
970 save = SelectObject(dc, bitmap);
971 rgn = mi_clip(maindc);
972 BitBlt(maindc, x + g_xoff - g_xscroll, y + g_yoff - g_yscroll, cx, cy, dc,
973 0, 0, SRCCOPY);
974 SelectObject(dc, save);
976 DeleteDC(dc);
977 ReleaseDC(g_Wnd, maindc);
978 DeleteObject(rgn);
979
980}
981
982static INT
984{
985 PCHAR szPort;
986 INT iPort = TCP_PORT_RDP;
987
988 szPort = strtok(szAddress, ":");
989
990 if (szPort != NULL)
991 {
992 szPort = strtok(NULL, ":");
993
994 if (szPort != NULL)
995 {
996 iPort = atoi(szPort);
997
998 if (iPort <= 0 || iPort > 0xFFFF)
999 iPort = TCP_PORT_RDP;
1000 }
1001 }
1002
1003 return iPort;
1004}
1005
1006static VOID
1008{
1009 PCHAR pDomain;
1010 PCHAR pUsername;
1011
1012 strcpy(g_domain, "");
1013 strcpy(g_username, "");
1014
1015 pDomain = strtok(pName, "\\");
1016
1017 if(pDomain == NULL)
1018 return;
1019
1020 pUsername = strtok(NULL, "\\");
1021
1022 if(pUsername == NULL)
1023 {
1024 strcpy(g_username, pDomain);
1025 return;
1026 }
1027
1028 strcpy(g_username, pUsername);
1029 strcpy(g_domain, pDomain);
1030 return;
1031}
1032
1033static BOOL
1035 PRDPSETTINGS pRdpSettings,
1036 BOOL *bSkipDlg)
1037{
1038 LPWSTR lpStr = lpCmdLine;
1039 WCHAR szSeps[] = L"/";
1040 LPWSTR lpToken;
1041 BOOL bRet = TRUE;
1042
1043 *bSkipDlg = TRUE;
1044
1045 if (*lpCmdLine != L'/')
1046 {
1047 LoadRdpSettingsFromFile(pRdpSettings, lpCmdLine);
1048 }
1049 else
1050 {
1051 /* default to screen size, 16bpp */
1052 SetIntegerToSettings(pRdpSettings, L"session bpp", 16);
1053 SetIntegerToSettings(pRdpSettings, L"desktopwidth", GetSystemMetrics(SM_CXSCREEN));
1054 SetIntegerToSettings(pRdpSettings, L"desktopheight", GetSystemMetrics(SM_CYSCREEN));
1055
1056 lpToken = wcstok(lpStr, szSeps);
1057 while (lpToken)
1058 {
1059 if (wcsncmp(lpToken, L"edit", 4) == 0)
1060 {
1061 lpToken += 5;
1062 LoadRdpSettingsFromFile(pRdpSettings, lpToken);
1063 *bSkipDlg = FALSE;
1064 break;
1065 }
1066
1067 if (*lpToken == L'v')
1068 {
1069 lpToken += 2;
1070 SetStringToSettings(pRdpSettings, L"full address", lpToken);
1071 }
1072 else if (*lpToken == L'w')
1073 {
1074 lpToken += 2;
1075 SetIntegerToSettings(pRdpSettings, L"desktopwidth", _wtoi(lpToken));
1076 }
1077 else if (*lpToken == L'h')
1078 {
1079 lpToken += 2;
1080 SetIntegerToSettings(pRdpSettings, L"desktopheight", _wtoi(lpToken));
1081 }
1082 else if (*lpToken == L'f')
1083 {
1084 SetIntegerToSettings(pRdpSettings, L"screen mode id", 2);
1085 }
1086
1087 lpToken = wcstok(NULL, szSeps);
1088 }
1089 }
1090
1091 return bRet;
1092}
1093
1094/*****************************************************************************/
1095int WINAPI
1097 HINSTANCE hPrevInstance,
1098 LPWSTR lpCmdLine,
1099 int nCmdShow)
1100{
1101 PRDPSETTINGS pRdpSettings;
1102 WSADATA d;
1103 int ret = 1;
1104
1105 if (WSAStartup(MAKEWORD(2, 0), &d) == 0)
1106 {
1107 pRdpSettings = HeapAlloc(GetProcessHeap(),
1108 0,
1109 sizeof(RDPSETTINGS));
1110 if (pRdpSettings)
1111 {
1112 pRdpSettings->pSettings = NULL;
1113 pRdpSettings->NumSettings = 0;
1114
1115 if (InitRdpSettings(pRdpSettings))
1116 {
1117 BOOL bSkipDlg = FALSE;
1118
1119 if (*lpCmdLine)
1120 ParseCommandLine(lpCmdLine, pRdpSettings,&bSkipDlg);
1121 else
1122 LoadRdpSettingsFromFile(pRdpSettings, NULL);
1123
1124 if (bSkipDlg || OpenRDPConnectDialog(hInstance,
1125 pRdpSettings))
1126 {
1127 char szValue[MAXVALUE];
1129
1130 uni_to_str(szValue, GetStringFromSettings(pRdpSettings, L"full address"));
1131
1132 /* GetPortNumber also removes possible trailing port number from address */
1133 g_tcp_port_rdp = GetPortNumber(szValue);
1134 strcpy(g_servername, szValue);
1135 uni_to_str(szValue, GetStringFromSettings(pRdpSettings, L"username"));
1136 SetDomainAndUsername(szValue);
1137 strcpy(g_password, "");
1138 if (GetComputerNameA(szValue, &dwSize))
1139 strcpy(g_hostname, szValue);
1140 else
1142 g_server_depth = GetIntegerFromSettings(pRdpSettings, L"session bpp");
1145 g_width = GetIntegerFromSettings(pRdpSettings, L"desktopwidth");
1146 g_height = GetIntegerFromSettings(pRdpSettings, L"desktopheight");
1147 if (GetIntegerFromSettings(pRdpSettings, L"screen mode id") == 2)
1148 {
1149 g_fullscreen = 1;
1150 g_xoff = 0;
1151 g_yoff = 0;
1152 }
1153 else
1154 {
1157 }
1158
1159 ui_main();
1160 ret = 0;
1161 }
1162
1164 0,
1165 pRdpSettings->pSettings);
1166 }
1167
1169 0,
1170 pRdpSettings);
1171 }
1172
1173 WSACleanup();
1174 }
1175
1176 return ret;
1177}
1178
1179
1180/*****************************************************************************/
1181void
1183{
1184}
1185
1186/*****************************************************************************/
1187void
1189{
1190}
1191
1192/*****************************************************************************/
1193void
1194mi_fill_rect(int x, int y, int cx, int cy, int colour)
1195{
1196 HBRUSH brush;
1197 RECT rect;
1198 HDC maindc;
1199 HRGN rgn;
1200 int red;
1201 int green;
1202 int blue;
1203
1204 if (g_server_depth == 8)
1205 {
1206 red = (pal_entries[colour & 0xff] & 0xff0000) >> 16;
1207 green = (pal_entries[colour & 0xff] & 0xff00) >> 8;
1208 blue = pal_entries[colour & 0xff] & 0xff;
1209 }
1210 else if (g_server_depth == 15)
1211 {
1212 SPLIT_COLOUR15(colour, red, green, blue);
1213 }
1214 else if (g_server_depth == 16)
1215 {
1216 SPLIT_COLOUR16(colour, red, green, blue);
1217 }
1218 else if (g_server_depth == 24 || g_server_depth == 32)
1219 {
1220 red = (colour>>16)&0xff;
1221 green = (colour>>8)&0xff;
1222 blue = colour&0xff;
1223 }
1224 maindc = GetWindowDC(g_Wnd);
1225 rgn = mi_clip(maindc);
1226 brush = CreateSolidBrush(RGB(red, green, blue));
1227 rect.left = x + g_xoff - g_xscroll;
1228 rect.top = y + g_yoff - g_yscroll;
1229 rect.right = rect.left + cx;
1230 rect.bottom = rect.top + cy;
1231 FillRect(maindc, &rect, brush);
1232 DeleteObject(brush);
1233 ReleaseDC(g_Wnd, maindc);
1234 DeleteObject(rgn);
1235}
1236
1237/*****************************************************************************/
1238void
1239mi_line(int x1, int y1, int x2, int y2, int colour)
1240{
1241 HPEN pen;
1242 HDC maindc;
1243 HGDIOBJ save;
1244 HRGN rgn;
1245 int red;
1246 int green;
1247 int blue;
1248
1249 if (g_server_depth == 8)
1250 {
1251 red = (pal_entries[colour & 0xff] & 0xff0000) >> 16;
1252 green = (pal_entries[colour & 0xff] & 0xff00) >> 8;
1253 blue = pal_entries[colour & 0xff] & 0xff;
1254 }
1255 else if (g_server_depth == 15)
1256 {
1257 SPLIT_COLOUR15(colour, red, green, blue);
1258 }
1259 else if (g_server_depth == 16)
1260 {
1261 SPLIT_COLOUR16(colour, red, green, blue);
1262 }
1263 else if (g_server_depth == 24 || g_server_depth == 32)
1264 {
1265 red = (colour>>16)&0xff;
1266 green = (colour>>8)&0xff;
1267 blue = colour&0xff;
1268 }
1269 maindc = GetWindowDC(g_Wnd);
1270 rgn = mi_clip(maindc);
1271 pen = CreatePen(PS_SOLID, 0, RGB(red, green, blue));
1272 save = SelectObject(maindc, pen);
1273 MoveToEx(maindc, x1 + g_xoff - g_xscroll, y1 + g_yoff - g_yscroll, 0);
1274 LineTo(maindc, x2 + g_xoff - g_xscroll, y2 + g_yoff - g_yscroll);
1275 SelectObject(maindc, save);
1276 DeleteObject(pen);
1277 ReleaseDC(g_Wnd, maindc);
1278 DeleteObject(rgn);
1279}
1280
1281/*****************************************************************************/
1282void
1283mi_screen_copy(int x, int y, int cx, int cy, int srcx, int srcy)
1284{
1285 RECT rect;
1286 RECT clip_rect;
1287 RECT draw_rect;
1288 HRGN rgn;
1289 int ok_to_ScrollWindowEx;
1290
1291 ok_to_ScrollWindowEx = 1;
1292
1293 if (!ok_to_ScrollWindowEx)
1294 {
1295 rgn = CreateRectRgn(x - g_xscroll, y - g_yscroll,
1296 (x - g_xscroll) + cx,
1297 (y - g_yscroll) + cy);
1298 InvalidateRgn(g_Wnd, rgn, 0);
1299 DeleteObject(rgn);
1300 }
1301 else
1302 {
1303 /* this is all in client coords */
1304 rect.left = srcx - g_xscroll;
1305 rect.top = srcy - g_yscroll;
1306 rect.right = rect.left + cx;
1307 rect.bottom = rect.top + cy;
1308 clip_rect.left = g_clip_left - g_xscroll;
1309 clip_rect.top = g_clip_top - g_yscroll;
1310 clip_rect.right = g_clip_right - g_xscroll;
1311 clip_rect.bottom = g_clip_bottom - g_yscroll;
1312 if (IntersectRect(&draw_rect, &clip_rect, &g_wnd_clip))
1313 {
1314 rgn = CreateRectRgn(0, 0, 0, 0);
1315 ScrollWindowEx(g_Wnd, x - srcx, y - srcy, &rect, &draw_rect,
1316 rgn, 0, SW_ERASE);
1317 InvalidateRgn(g_Wnd, rgn, 0);
1318 DeleteObject(rgn);
1319 }
1320 }
1321}
1322
1323/*****************************************************************************/
1324void
1325mi_set_clip(int x, int y, int cx, int cy)
1326{
1327 g_clip_left = x;
1328 g_clip_top = y;
1331}
1332
1333/*****************************************************************************/
1334void
1336{
1337 g_clip_left = 0;
1338 g_clip_top = 0;
1341}
1342
1343/*****************************************************************************/
1344void *
1345mi_create_cursor(unsigned int x, unsigned int y,
1346 int width, int height,
1347 unsigned char * andmask, unsigned char * xormask)
1348{
1349 HCURSOR hCur;
1350
1351 hCur = CreateCursor(g_Instance, x, y, width, height, andmask, xormask);
1352 if (hCur == 0)
1353 {
1354 hCur = LoadCursor(NULL, IDC_ARROW);
1355 }
1356 return hCur;
1357}
1358
1359/*****************************************************************************/
1360void
1362{
1363 if (g_cursor == cursor)
1364 {
1365 g_cursor = 0;
1366 }
1368}
1369
1370/*****************************************************************************/
1371void
1373{
1374 g_cursor = cursor;
1376}
1377
1378/*****************************************************************************/
1379void
1381{
1382}
1383
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
char * strtok(char *String, const char *Delimiters)
Definition: utclib.c:338
Arabic default style
Definition: afstyles.h:94
#define msg(x)
Definition: auth_time.c:54
HWND hWnd
Definition: settings.c:17
#define TCP_PORT_RDP
Definition: constants.h:21
INT GetIntegerFromSettings(PRDPSETTINGS pSettings, LPWSTR lpValue)
Definition: settings.c:144
BOOL SetStringToSettings(PRDPSETTINGS pRdpSettings, LPWSTR lpKey, LPWSTR lpValue)
Definition: settings.c:115
#define MAXVALUE
Definition: precomp.h:29
BOOL LoadRdpSettingsFromFile(PRDPSETTINGS pRdpSettings, LPWSTR lpFile)
Definition: settings.c:419
BOOL InitRdpSettings(PRDPSETTINGS pRdpSettings)
Definition: settings.c:476
BOOL SetIntegerToSettings(PRDPSETTINGS pRdpSettings, LPWSTR lpKey, INT Value)
Definition: settings.c:86
LPWSTR GetStringFromSettings(PRDPSETTINGS pSettings, LPWSTR lpValue)
Definition: settings.c:171
char * tcp_get_address(void)
Definition: tcp.c:866
#define IDI_MSTSC
Definition: resource.h:33
static LRESULT handle_WM_MBUTTONUP(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:359
static int g_screen_height
Definition: win32.c:48
static int g_yscroll
Definition: win32.c:46
int g_server_depth
Definition: uimain.c:41
static LRESULT handle_WM_VSCROLL(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:609
static void str_to_uni(TCHAR *sizex, char *size1)
Definition: win32.c:66
static int g_fullscreen
Definition: win32.c:51
void mi_fill_rect(int x, int y, int cx, int cy, int colour)
Definition: win32.c:1194
int g_width
Definition: uimain.c:42
static HINSTANCE g_Instance
Definition: win32.c:40
static int g_xscroll
Definition: win32.c:45
static int g_mousex
Definition: win32.c:53
int mi_create_window(void)
Definition: win32.c:754
int g_height
Definition: uimain.c:43
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:674
static int g_clip_right
Definition: win32.c:59
int g_tcp_port_rdp
Definition: tcp.c:75
static void uni_to_str(char *sizex, TCHAR *size1)
Definition: win32.c:81
static LRESULT handle_WM_NCHITTEST(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:283
static int g_block
Definition: win32.c:42
char g_username[]
Definition: uimain.c:25
static LRESULT handle_WM_HSCROLL(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:545
static INT GetPortNumber(PCHAR szAddress)
Definition: win32.c:983
static LRESULT handle_WM_SIZE(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:456
static LRESULT handle_WM_RBUTTONUP(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:339
static LRESULT handle_WM_MOUSEMOVE(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:299
static int g_clip_left
Definition: win32.c:57
static BOOL ParseCommandLine(LPWSTR lpCmdLine, PRDPSETTINGS pRdpSettings, BOOL *bSkipDlg)
Definition: win32.c:1034
static void mi_show_error(char *caption)
Definition: win32.c:854
static int g_xoff
Definition: win32.c:43
char g_domain[]
Definition: uimain.c:31
void mi_set_clip(int x, int y, int cx, int cy)
Definition: win32.c:1325
static HWND g_Wnd
Definition: win32.c:39
static int g_wnd_cwidth
Definition: win32.c:49
static int g_screen_width
Definition: win32.c:47
static LRESULT handle_WM_SETCURSOR(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:268
void mi_warning(char *msg)
Definition: win32.c:848
static void mi_scroll(int dx, int dy)
Definition: win32.c:220
void mi_set_cursor(void *cursor)
Definition: win32.c:1372
static int g_clip_bottom
Definition: win32.c:60
char g_servername[]
Definition: uimain.c:27
void mi_reset_clip(void)
Definition: win32.c:1335
static int g_workarea
Definition: win32.c:52
char g_shell[]
Definition: uimain.c:29
int g_tcp_sck
Definition: uimain.c:51
static LRESULT handle_WM_RBUTTONDOWN(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:329
static int g_wnd_cheight
Definition: win32.c:50
int mi_main_loop(void)
Definition: win32.c:834
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
Definition: win32.c:1096
static RECT g_wnd_clip
Definition: win32.c:61
void mi_screen_copy(int x, int y, int cx, int cy, int srcx, int srcy)
Definition: win32.c:1283
static LRESULT handle_WM_LBUTTONUP(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:319
static int g_clip_top
Definition: win32.c:58
void mi_end_update(void)
Definition: win32.c:1188
void * mi_create_cursor(unsigned int x, unsigned int y, int width, int height, unsigned char *andmask, unsigned char *xormask)
Definition: win32.c:1345
void mi_begin_update(void)
Definition: win32.c:1182
void mi_paint_rect(char *data, int width, int height, int x, int y, int cx, int cy)
Definition: win32.c:874
static LRESULT handle_WM_SIZING(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:505
static LRESULT handle_WM_PAINT(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:421
static VOID SetDomainAndUsername(PCHAR pName)
Definition: win32.c:1007
static LRESULT handle_WM_LBUTTONDOWN(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:309
char g_hostname[]
Definition: uimain.c:26
static void mi_check_modifier(void)
Definition: win32.c:258
static LRESULT handle_WM_MOUSEWHEEL(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:369
void mi_line(int x1, int y1, int x2, int y2, int colour)
Definition: win32.c:1239
static HRGN mi_clip(HDC dc)
Definition: win32.c:737
static int g_yoff
Definition: win32.c:44
void mi_destroy_cursor(void *cursor)
Definition: win32.c:1361
void mi_set_null_cursor(void)
Definition: win32.c:1380
char g_directory[]
Definition: uimain.c:30
static int g_mousey
Definition: win32.c:54
static int get_scan_code_from_ascii(int code)
Definition: win32.c:147
static HCURSOR g_cursor
Definition: win32.c:41
int pal_entries[]
Definition: uimain.c:52
void mi_error(char *msg)
Definition: win32.c:131
char g_password[]
Definition: uimain.c:28
static int check_sck(void)
Definition: win32.c:97
static LRESULT handle_WM_MBUTTONDOWN(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:349
int mi_read_keyboard_state(void)
Definition: win32.c:232
static LRESULT handle_WM_KEY(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: win32.c:389
#define index(s, c)
Definition: various.h:29
HINSTANCE hInstance
Definition: charmap.c:19
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL OpenRDPConnectDialog(HINSTANCE hInstance, PRDPSETTINGS pRdpSettings)
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
static const WCHAR *const ext[]
Definition: module.c:53
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
unsigned char
Definition: typeof.h:29
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
Definition: select.c:41
INT WSAAPI WSAAsyncSelect(IN SOCKET s, IN HWND hWnd, IN UINT wMsg, IN LONG lEvent)
Definition: select.c:134
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
#define pt(x, y)
Definition: drawing.c:79
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49
#define BI_RGB
Definition: precomp.h:47
#define RGB(r, g, b)
Definition: precomp.h:62
#define WM_APP
Definition: eventvwr.h:73
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define printf
Definition: freeldr.h:93
pKey DeleteObject()
GLclampf green
Definition: gl.h:1740
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLclampf GLclampf blue
Definition: gl.h:1740
GLint GLint GLsizei width
Definition: gl.h:1546
GLuint index
Definition: glext.h:6031
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
GLenum GLsizei len
Definition: glext.h:6722
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define down(mutex)
Definition: glue.h:29
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
const char cursor[]
Definition: icontest.c:13
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
#define bits
Definition: infblock.c:15
#define d
Definition: ke_i.h:81
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
#define red
Definition: linetest.c:67
static const WCHAR dc[]
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static LPSTR pName
Definition: security.c:75
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CAPTION
Definition: pedump.c:624
#define WS_SIZEBOX
Definition: pedump.c:642
#define WS_MAXIMIZEBOX
Definition: pedump.c:632
#define WS_OVERLAPPED
Definition: pedump.c:615
#define WS_SYSMENU
Definition: pedump.c:629
#define WS_POPUP
Definition: pedump.c:616
#define WS_VSCROLL
Definition: pedump.c:627
#define WS_HSCROLL
Definition: pedump.c:628
#define WS_MINIMIZEBOX
Definition: pedump.c:631
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
#define DefWindowProc
Definition: ros2win.h:31
WCHAR classname[128]
Definition: startup.c:15
_Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
_Check_return_ _CRTIMP wchar_t *__cdecl wcstok(_Inout_opt_z_ wchar_t *_Str, _In_z_ const wchar_t *_Delim)
#define LANG_NEUTRAL
Definition: nls.h:22
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_DEFAULT
Definition: nls.h:168
BOOL WINAPI SHIM_OBJ_NAME() GetComputerNameA(LPSTR lpBuffer, LPDWORD lpnSize)
Definition: shimtest.c:21
& rect
Definition: startmenu.cpp:1413
PSETTINGS pSettings
Definition: precomp.h:45
INT NumSettings
Definition: precomp.h:46
HICON hIcon
Definition: winuser.h:3168
LPCSTR lpszClassName
Definition: winuser.h:3172
WNDPROC lpfnWndProc
Definition: winuser.h:3164
Definition: uimain.c:89
Definition: inflate.c:139
Definition: winsock.h:66
Definition: tftpd.h:60
USHORT biBitCount
Definition: precomp.h:37
ULONG biCompression
Definition: precomp.h:38
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1476
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
Definition: time.h:68
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
#define MAKEWORD(a, b)
Definition: typedefs.h:248
int32_t INT
Definition: typedefs.h:58
#define HIWORD(l)
Definition: typedefs.h:247
char * PCHAR
Definition: typedefs.h:51
void ui_mouse_move(int x, int y)
Definition: uimain.c:883
void ui_key_down(int key, int ext)
Definition: uimain.c:924
void ui_invalidate(int x, int y, int cx, int cy)
Definition: uimain.c:138
int ui_main(void)
Definition: uimain.c:951
int ui_read_wire(void)
Definition: uimain.c:942
void ui_mouse_button(int button, int x, int y, int down)
Definition: uimain.c:891
void ui_key_up(int key, int ext)
Definition: uimain.c:933
void ui_set_modifier_state(int code)
Definition: uimain.c:639
#define UI_MAX(a, b)
Definition: uimain.h:76
#define SPLIT_COLOUR16(c, r, g, b)
Definition: uimain.h:50
#define SPLIT_COLOUR15(c, r, g, b)
Definition: uimain.h:43
#define MAKE_COLOUR32(c, r, g, b)
Definition: uimain.h:66
#define UI_MIN(a, b)
Definition: uimain.h:78
int ret
#define LPRECT
Definition: precomp.h:28
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:245
#define FormatMessage
Definition: winbase.h:3730
#define ZeroMemory
Definition: winbase.h:1712
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define GetModuleHandle
Definition: winbase.h:3762
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:423
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:419
#define lstrlen
Definition: winbase.h:3811
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3710
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3709
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3708
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG _In_ LONG y2
Definition: winddi.h:3711
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
HICON HCURSOR
Definition: windef.h:299
#define WINAPI
Definition: msvc.h:6
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
int WINAPI IntersectClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define SRCCOPY
Definition: wingdi.h:333
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI DeleteDC(_In_ HDC)
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN)
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
#define PS_SOLID
Definition: wingdi.h:586
#define FD_READ
Definition: winsock.h:405
#define FD_ZERO(set)
Definition: winsock.h:96
int PASCAL FAR WSACleanup(void)
Definition: startup.c:60
#define FD_SET(fd, set)
Definition: winsock.h:89
#define SW_SHOWNORMAL
Definition: winuser.h:770
#define WM_PAINT
Definition: winuser.h:1620
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define SW_SHOWMAXIMIZED
Definition: winuser.h:773
HDC WINAPI GetWindowDC(_In_opt_ HWND)
#define SM_CYEDGE
Definition: winuser.h:1009
#define WM_HSCROLL
Definition: winuser.h:1743
BOOL WINAPI DestroyCursor(_In_ HCURSOR)
Definition: cursoricon.c:2689
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define WM_KEYUP
Definition: winuser.h:1716
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define SM_CYSCREEN
Definition: winuser.h:960
#define SM_CXEDGE
Definition: winuser.h:1008
#define WM_VSCROLL
Definition: winuser.h:1744
#define SB_PAGERIGHT
Definition: winuser.h:571
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_SIZE
Definition: winuser.h:1611
#define SB_VERT
Definition: winuser.h:553
#define VK_CAPITAL
Definition: winuser.h:2206
#define SB_BOTTOM
Definition: winuser.h:577
#define VK_SCROLL
Definition: winuser.h:2280
#define IDC_ARROW
Definition: winuser.h:687
#define WM_RBUTTONUP
Definition: winuser.h:1780
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
#define WM_SETFOCUS
Definition: winuser.h:1613
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define WM_MOUSEMOVE
Definition: winuser.h:1775
#define SIZE_MINIMIZED
Definition: winuser.h:2506
#define SB_LINERIGHT
Definition: winuser.h:567
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
int WINAPI SetScrollPos(_In_ HWND, _In_ int, _In_ int, _In_ BOOL)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define CreateWindow
Definition: winuser.h:5754
#define WM_RBUTTONDOWN
Definition: winuser.h:1779
#define GetMessage
Definition: winuser.h:5790
#define WM_SYSCHAR
Definition: winuser.h:1721
#define SB_LINELEFT
Definition: winuser.h:566
#define WM_SYSDEADCHAR
Definition: winuser.h:1722
#define SIZE_MAXIMIZED
Definition: winuser.h:2507
BOOL WINAPI SetScrollRange(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define WM_TIMER
Definition: winuser.h:1742
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
#define LoadIcon
Definition: winuser.h:5813
BOOL WINAPI UpdateWindow(_In_ HWND)
#define WM_SYSKEYUP
Definition: winuser.h:1720
#define LoadCursor
Definition: winuser.h:5812
BOOL WINAPI InvalidateRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
#define MB_OK
Definition: winuser.h:790
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define WM_CHAR
Definition: winuser.h:1717
#define CW_USEDEFAULT
Definition: winuser.h:225
#define SIZE_RESTORED
Definition: winuser.h:2505
#define SB_TOP
Definition: winuser.h:578
#define MessageBox
Definition: winuser.h:5822
#define MB_ICONINFORMATION
Definition: winuser.h:802
#define VK_NUMLOCK
Definition: winuser.h:2279
#define WM_SETCURSOR
Definition: winuser.h:1636
#define SW_ERASE
Definition: winuser.h:2580
#define RegisterClass
Definition: winuser.h:5836
#define WM_DESTROY
Definition: winuser.h:1609
HCURSOR WINAPI CreateCursor(_In_opt_ HINSTANCE, _In_ int, _In_ int, _In_ int, _In_ int, _In_ CONST VOID *, _In_ CONST VOID *)
#define SM_CXSCREEN
Definition: winuser.h:959
#define WM_KEYDOWN
Definition: winuser.h:1715
#define DispatchMessage
Definition: winuser.h:5765
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define WM_MBUTTONUP
Definition: winuser.h:1783
#define GWL_STYLE
Definition: winuser.h:852
#define MAKEINTRESOURCE
Definition: winuser.h:591
int WINAPI ScrollWindowEx(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT, _In_opt_ HRGN, _Out_opt_ LPRECT, _In_ UINT)
#define WM_DEADCHAR
Definition: winuser.h:1718
#define SM_CYCAPTION
Definition: winuser.h:963
int WINAPI GetSystemMetrics(_In_ int)
#define WM_SYSKEYDOWN
Definition: winuser.h:1719
#define WM_MBUTTONDOWN
Definition: winuser.h:1782
#define SB_HORZ
Definition: winuser.h:552
SHORT WINAPI GetKeyState(_In_ int)
#define SB_PAGELEFT
Definition: winuser.h:570
#define SB_THUMBPOSITION
Definition: winuser.h:572
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
char TCHAR
Definition: xmlstorage.h:189
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
CHAR * LPTSTR
Definition: xmlstorage.h:192