/* ** Command & Conquer Red Alert(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /*********************************************************************************************** *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S *** *********************************************************************************************** * * * Project Name : Keyboard Test Program * * * * File Name : TEST.CPP * * * * Programmer : Phil Gorrow * * * * Start Date : October 10, 1995 * * * * Last Update : October 16, 1995 [PWG] * * * *---------------------------------------------------------------------------------------------* * Functions: * * WndProc -- Callback procedure for main window * * WinMain -- Program entry point * * Init_Keyboard_Remap_Table -- initializes the keyboard remap table * * WWKeyboardClass::WWKeyBoardClass -- Construction for Westwood Keyboard* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include #include #include "keyboard.h" #define NAME "DRAWBUFF test" #define TITLE "DRAWBUFF library test" BOOL Running = TRUE; HANDLE ThreadHandle; BOOL MessageLoopThread = FALSE; #define MODE_WIDTH 640 // Width in pixels of required video mode #define MODE_HEIGHT 400 // Height in pixels of required video mode void Message_Loop(void); HANDLE ActiveEvent; WWKeyboardClass Kbd; #if(0) #define VK_NONE_00 0x00 #define VK_LBUTTON 0x01 #define VK_RBUTTON 0x02 #define VK_CANCEL 0x03 #define VK_MBUTTON 0x04 #define VK_NONE_05 0x05 #define VK_NONE_06 0x06 #define VK_NONE_07 0x07 #define VK_BACK 0x08 #define VK_TAB 0x09 #define VK_NONE_0A 0x0A #define VK_NONE_0B 0x0B #define VK_CLEAR 0x0C #define VK_RETURN 0x0D #define VK_NONE_0E 0x0E #define VK_NONE_0F 0x0F #define VK_SHIFT 0x10 #define VK_CONTROL 0x11 #define VK_MENU 0x12 #define VK_PAUSE 0x13 #define VK_CAPITAL 0x14 #define VK_NONE_15 0x15 #define VK_NONE_16 0x16 #define VK_NONE_17 0x17 #define VK_NONE_18 0x18 #define VK_NONE_19 0x19 #define VK_NONE_1A 0x1A #define VK_ESCAPE 0x1B #define VK_NONE_1C 0x1C #define VK_NONE_1D 0x1D #define VK_NONE_1E 0x1E #define VK_NONE_1F 0x1F #define VK_SPACE 0x20 #define VK_PRIOR 0x21 #define VK_NEXT 0x22 #define VK_END 0x23 #define VK_HOME 0x24 #define VK_LEFT 0x25 #define VK_UP 0x26 #define VK_RIGHT 0x27 #define VK_DOWN 0x28 #define VK_SELECT 0x29 #define VK_PRINT 0x2A #define VK_EXECUTE 0x2B #define VK_SNAPSHOT 0x2C #define VK_INSERT 0x2D #define VK_DELETE 0x2E #define VK_HELP 0x2F #define VK_0 0x30 #define VK_1 0x31 #define VK_2 0x32 #define VK_3 0x33 #define VK_4 0x34 #define VK_5 0x35 #define VK_6 0x36 #define VK_7 0x37 #define VK_8 0x38 #define VK_9 0x39 #define VK_0 0x3A #define VK_NONE_3B 0x3B #define VK_NONE_3C 0x3C #define VK_NONE_3D 0x3D #define VK_NONE_3E 0x3E #define VK_NONE_3F 0x3F #define VK_NONE_40 0x40 #define VK_A 0x41 #define VK_B 0x42 #define VK_C 0x43 #define VK_D 0x44 #define VK_E 0x45 #define VK_F 0x46 #define VK_G 0x47 #define VK_H 0x48 #define VK_I 0x49 #define VK_J 0x4A #define VK_K 0x4B #define VK_L 0x4C #define VK_M 0x4D #define VK_N 0x4E #define VK_O 0x4F #define VK_P 0x50 #define VK_Q 0x51 #define VK_R 0x52 #define VK_S 0x53 #define VK_T 0x54 #define VK_U 0x55 #define VK_V 0x56 #define VK_W 0x57 #define VK_X 0x58 #define VK_Y 0x59 #define VK_Z 0x5A #define VK_NONE_5B 0x5B #define VK_NONE_5C 0x5C #define VK_NONE_5D 0x5D #define VK_NONE_5E 0x5E #define VK_NONE_5F 0x5F #define VK_NUMPAD0 0x60 #define VK_NUMPAD1 0x61 #define VK_NUMPAD2 0x62 #define VK_NUMPAD3 0x63 #define VK_NUMPAD4 0x64 #define VK_NUMPAD5 0x65 #define VK_NUMPAD6 0x66 #define VK_NUMPAD7 0x67 #define VK_NUMPAD8 0x68 #define VK_NUMPAD9 0x69 #define VK_MULTIPLY 0x6A #define VK_ADD 0x6B #define VK_SEPARATOR 0x6C #define VK_SUBTRACT 0x6D #define VK_DECIMAL 0x6E #define VK_DIVIDE 0x6F #define VK_F1 0x70 #define VK_F2 0x71 #define VK_F3 0x72 #define VK_F4 0x73 #define VK_F5 0x74 #define VK_F6 0x75 #define VK_F7 0x76 #define VK_F8 0x77 #define VK_F9 0x78 #define VK_F10 0x79 #define VK_F11 0x7A #define VK_F12 0x7B #define VK_F13 0x7C #define VK_F14 0x7D #define VK_F15 0x7E #define VK_F16 0x7F #define VK_F17 0x80 #define VK_F18 0x81 #define VK_F19 0x82 #define VK_F20 0x83 #define VK_F21 0x84 #define VK_F22 0x85 #define VK_F23 0x86 #define VK_F24 0x87 #define VK_NONE_88 0x88 #define VK_NONE_89 0x89 #define VK_NONE_8A 0x8A #define VK_NONE_8B 0x8B #define VK_NONE_8C 0x8C #define VK_NONE_8D 0x8D #define VK_NONE_8E 0x8E #define VK_NONE_8F 0x8F #define VK_NUMLOCK 0x90 #define VK_SCROLL 0x91 #define VK_NONE_92 0x92 #define VK_NONE_93 0x93 #define VK_NONE_94 0x94 #define VK_NONE_95 0x95 #define VK_NONE_96 0x96 #define VK_NONE_97 0x97 #define VK_NONE_98 0x98 #define VK_NONE_99 0x99 #define VK_NONE_9A 0x9A #define VK_NONE_9B 0x9B #define VK_NONE_9C 0x9C #define VK_NONE_9D 0x9D #define VK_NONE_9E 0x9E #define VK_NONE_9F 0x9F #define VK_NONE_A0 0xA0 #define VK_NONE_A1 0xA1 #define VK_NONE_A2 0xA2 #define VK_NONE_A3 0xA3 #define VK_NONE_A4 0xA4 #define VK_NONE_A5 0xA5 #define VK_NONE_A6 0xA6 #define VK_NONE_A7 0xA7 #define VK_NONE_A8 0xA8 #define VK_NONE_A9 0xA9 #define VK_NONE_AA 0xAA #define VK_NONE_AB 0xAB #define VK_NONE_AC 0xAC #define VK_NONE_AD 0xAD #define VK_NONE_AE 0xAE #define VK_NONE_AF 0xAF #define VK_NONE_B0 0xB0 #define VK_NONE_B1 0xB1 #define VK_NONE_B2 0xB2 #define VK_NONE_B3 0xB3 #define VK_NONE_B4 0xB4 #define VK_NONE_B5 0xB5 #define VK_NONE_B6 0xB6 #define VK_NONE_B7 0xB7 #define VK_NONE_B8 0xB8 #define VK_NONE_B9 0xB9 #define VK_NONE_BA 0xBA #define VK_NONE_BB 0xBB #define VK_NONE_BC 0xBC #define VK_NONE_BD 0xBD #define VK_NONE_BE 0xBE #define VK_NONE_BF 0xBF #define VK_NONE_C0 0xC0 #define VK_NONE_C1 0xC1 #define VK_NONE_C2 0xC2 #define VK_NONE_C3 0xC3 #define VK_NONE_C4 0xC4 #define VK_NONE_C5 0xC5 #define VK_NONE_C6 0xC6 #define VK_NONE_C7 0xC7 #define VK_NONE_C8 0xC8 #define VK_NONE_C9 0xC9 #define VK_NONE_CA 0xCA #define VK_NONE_CB 0xCB #define VK_NONE_CC 0xCC #define VK_NONE_CD 0xCD #define VK_NONE_CE 0xCE #define VK_NONE_CF 0xCF #define VK_NONE_D0 0xD0 #define VK_NONE_D1 0xD1 #define VK_NONE_D2 0xD2 #define VK_NONE_D3 0xD3 #define VK_NONE_D4 0xD4 #define VK_NONE_D5 0xD5 #define VK_NONE_D6 0xD6 #define VK_NONE_D7 0xD7 #define VK_NONE_D8 0xD8 #define VK_NONE_D9 0xD9 #define VK_NONE_DA 0xDA #define VK_NONE_DB 0xDB #define VK_NONE_DC 0xDC #define VK_NONE_DD 0xDD #define VK_NONE_DE 0xDE #define VK_NONE_DF 0xDF #define VK_NONE_E0 0xE0 #define VK_NONE_E1 0xE1 #define VK_NONE_E2 0xE2 #define VK_NONE_E3 0xE3 #define VK_NONE_E4 0xE4 #define VK_NONE_E5 0xE5 #define VK_NONE_E6 0xE6 #define VK_NONE_E7 0xE7 #define VK_NONE_E8 0xE8 #define VK_NONE_E9 0xE9 #define VK_NONE_EA 0xEA #define VK_NONE_EB 0xEB #define VK_NONE_EC 0xEC #define VK_NONE_ED 0xED #define VK_NONE_EE 0xEE #define VK_NONE_EF 0xEF #define VK_NONE_F0 0xF0 #define VK_NONE_F1 0xF1 #define VK_NONE_F2 0xF2 #define VK_NONE_F3 0xF3 #define VK_NONE_F4 0xF4 #define VK_NONE_F5 0xF5 #define VK_NONE_F6 0xF6 #define VK_NONE_F7 0xF7 #define VK_NONE_F8 0xF8 #define VK_NONE_F9 0xF9 #define VK_NONE_FA 0xFA #define VK_NONE_FB 0xFB #define VK_NONE_FC 0xFC #define VK_NONE_FD 0xFD #define VK_NONE_FE 0xFE #define VK_NONE_FF 0xFF #endif char *VK_Name[] = { "VK_NONE_00", "VK_LBUTTON", "VK_RBUTTON", "VK_CANCEL", "VK_MBUTTON", "VK_NONE_05", "VK_NONE_06", "VK_NONE_07", "VK_BACK", "VK_TAB", "VK_NONE_0A", "VK_NONE_0B", "VK_CLEAR", "VK_RETURN", "VK_NONE_0E", "VK_NONE_0F", "VK_SHIFT", "VK_CONTROL", "VK_MENU", "VK_PAUSE", "VK_CAPITAL", "VK_NONE_15", "VK_NONE_16", "VK_NONE_17", "VK_NONE_18", "VK_NONE_19", "VK_NONE_1A", "VK_ESCAPE", "VK_NONE_1C", "VK_NONE_1D", "VK_NONE_1E", "VK_NONE_1F", "VK_SPACE", "VK_PRIOR", "VK_NEXT", "VK_END", "VK_HOME", "VK_LEFT", "VK_UP", "VK_RIGHT", "VK_DOWN", "VK_SELECT", "VK_PRINT", "VK_EXECUTE", "VK_SNAPSHOT", "VK_INSERT", "VK_DELETE", "VK_HELP", "VK_0", "VK_1", "VK_2", "VK_3", "VK_4", "VK_5", "VK_6", "VK_7", "VK_8", "VK_9", "VK_0", "VK_NONE_3B", "VK_NONE_3C", "VK_NONE_3D", "VK_NONE_3E", "VK_NONE_3F", "VK_NONE_40", "VK_A", "VK_B", "VK_C", "VK_D", "VK_E", "VK_F", "VK_G", "VK_H", "VK_I", "VK_J", "VK_K", "VK_L", "VK_M", "VK_N", "VK_O", "VK_P", "VK_Q", "VK_R", "VK_S", "VK_T", "VK_U", "VK_V", "VK_W", "VK_X", "VK_Y", "VK_Z", "VK_NONE_5B", "VK_NONE_5C", "VK_NONE_5D", "VK_NONE_5E", "VK_NONE_5F", "VK_NUMPAD0", "VK_NUMPAD1", "VK_NUMPAD2", "VK_NUMPAD3", "VK_NUMPAD4", "VK_NUMPAD5", "VK_NUMPAD6", "VK_NUMPAD7", "VK_NUMPAD8", "VK_NUMPAD9", "VK_MULTIPLY", "VK_ADD", "VK_SEPARATOR", "VK_SUBTRACT", "VK_DECIMAL", "VK_DIVIDE", "VK_F1", "VK_F2", "VK_F3", "VK_F4", "VK_F5", "VK_F6", "VK_F7", "VK_F8", "VK_F9", "VK_F10", "VK_F11", "VK_F12", "VK_F13", "VK_F14", "VK_F15", "VK_F16", "VK_F17", "VK_F18", "VK_F19", "VK_F20", "VK_F21", "VK_F22", "VK_F23", "VK_F24", "VK_NONE_88", "VK_NONE_89", "VK_NONE_8A", "VK_NONE_8B", "VK_NONE_8C", "VK_NONE_8D", "VK_NONE_8E", "VK_NONE_8F", "VK_NUMLOCK", "VK_SCROLL", "VK_NONE_92", "VK_NONE_93", "VK_NONE_94", "VK_NONE_95", "VK_NONE_96", "VK_NONE_97", "VK_NONE_98", "VK_NONE_99", "VK_NONE_9A", "VK_NONE_9B", "VK_NONE_9C", "VK_NONE_9D", "VK_NONE_9E", "VK_NONE_9F", "VK_NONE_A0", "VK_NONE_A1", "VK_NONE_A2", "VK_NONE_A3", "VK_NONE_A4", "VK_NONE_A5", "VK_NONE_A6", "VK_NONE_A7", "VK_NONE_A8", "VK_NONE_A9", "VK_NONE_AA", "VK_NONE_AB", "VK_NONE_AC", "VK_NONE_AD", "VK_NONE_AE", "VK_NONE_AF", "VK_NONE_B0", "VK_NONE_B1", "VK_NONE_B2", "VK_NONE_B3", "VK_NONE_B4", "VK_NONE_B5", "VK_NONE_B6", "VK_NONE_B7", "VK_NONE_B8", "VK_NONE_B9", "VK_NONE_BA", "VK_NONE_BB", "VK_NONE_BC", "VK_NONE_BD", "VK_NONE_BE", "VK_NONE_BF", "VK_NONE_C0", "VK_NONE_C1", "VK_NONE_C2", "VK_NONE_C3", "VK_NONE_C4", "VK_NONE_C5", "VK_NONE_C6", "VK_NONE_C7", "VK_NONE_C8", "VK_NONE_C9", "VK_NONE_CA", "VK_NONE_CB", "VK_NONE_CC", "VK_NONE_CD", "VK_NONE_CE", "VK_NONE_CF", "VK_NONE_D0", "VK_NONE_D1", "VK_NONE_D2", "VK_NONE_D3", "VK_NONE_D4", "VK_NONE_D5", "VK_NONE_D6", "VK_NONE_D7", "VK_NONE_D8", "VK_NONE_D9", "VK_NONE_DA", "VK_NONE_DB", "VK_NONE_DC", "VK_NONE_DD", "VK_NONE_DE", "VK_NONE_DF", "VK_NONE_E0", "VK_NONE_E1", "VK_NONE_E2", "VK_NONE_E3", "VK_NONE_E4", "VK_NONE_E5", "VK_NONE_E6", "VK_NONE_E7", "VK_NONE_E8", "VK_NONE_E9", "VK_NONE_EA", "VK_NONE_EB", "VK_NONE_EC", "VK_NONE_ED", "VK_NONE_EE", "VK_NONE_EF", "VK_NONE_F0", "VK_NONE_F1", "VK_NONE_F2", "VK_NONE_F3", "VK_NONE_F4", "VK_NONE_F5", "VK_NONE_F6", "VK_NONE_F7", "VK_NONE_F8", "VK_NONE_F9", "VK_NONE_FA", "VK_NONE_FB", "VK_NONE_FC", "VK_NONE_FD", "VK_NONE_FE", "VK_NONE_FF", }; char *_keyname[] = { "KN_NONE", "KN_GRAVE", "KN_1", "KN_2", "KN_3", "KN_4", "KN_5", "KN_6", "KN_7", "KN_8", "KN_9", "KN_0", "KN_MINUS", "KN_EQUAL", "KN_RESERVED1", "KN_BACKSPACE", "KN_TAB", "KN_Q", "KN_W", "KN_E", "KN_R", "KN_T", "KN_Y", "KN_U", "KN_I", "KN_O", "KN_P", "KN_LBRACKET", "KN_RBRACKET", "KN_BACKSLASH", "KN_CAPSLOCK", "KN_A", "KN_S", "KN_D", "KN_F", "KN_G", "KN_H", "KN_J", "KN_K", "KN_L", "KN_SEMICOLON", "KN_SQUOTE", "KN_BACKSLASH2", "KN_RETURN", "KN_LSHIFT", "KN_MOUSE_MOVE", "KN_Z", "KN_X", "KN_C", "KN_V", "KN_B", "KN_N", "KN_M", "KN_COMMA", "KN_PERIOD", "KN_SLASH", "KN_RESERVED3", "KN_RSHIFT", "KN_LCTRL", "KN_LCOMM", "KN_LALT", "KN_SPACE", "KN_RALT", "KN_RCOMM", "KN_RCTRL", "KN_LMOUSE", "KN_RMOUSE", "KN_JBUTTON1", "KN_JBUTTON2", "KN_J_UP", "KN_J_RIGHT", "KN_J_DOWN", "KN_J_LEFT", "KN_SPECIAL9", "KN_SPECIAL10", "KN_E_INSERT", "KN_E_DELETE", "KN_RESERVED4", "KN_RESERVED5", "KN_E_LEFT", "KN_E_HOME", "KN_E_END", "KN_RESERVED6", "KN_E_UP", "KN_E_DOWN", "KN_E_PGUP", "KN_E_PGDN", "KN_K_LPAREN", "KN_K_RPAREN", "KN_E_RIGHT", "KN_NUMLOCK", "KN_HOME", "KN_UPLEFT/KN_HOME", "KN_LEFT", "KN_END", "KN_DOWNLEFT/KN_END", "KN_RESERVED7", "KN_KEYPAD_SLASH", "KN_UP", "KN_CENTER", "KN_DOWN", "KN_INSERT", "KN_KEYPAD_ASTERISK", "KN_PGUP", "KN_UPRIGHT/KN_PGUP", "KN_RIGHT", "KN_PGDN", "KN_DOWNRIGHT/KN_PGDN", "KN_DELETE", "KN_KEYPAD_MINUS", "KN_KEYPAD_PLUS", "KN_RESERVED8", "KN_KEYPAD_RETURN", "KN_RESERVED9", "KN_ESC", "KN_HELP", "KN_F1", "KN_F2", "KN_F3", "KN_F4", "KN_F5", "KN_F6", "KN_F7", "KN_F8", "KN_F9", "KN_F10", "KN_F11", "KN_F12", "KN_PRNTSCRN", "KN_SCROLLLOCK", "KN_PAUSE" }; char *_steve_translate[]={ "?", "ESC-27", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "BACKSPACE", "TAB", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "return", "?", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "ESC-27", "?", "\\", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "?", "*", "?", " ", "?", "f1-127", "127", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "7", "8", "9", "-", "4", "5", "6", "+", "1", "2", "3", "?", "?", "?", "?", "?", "?", "F12", }; static short cxChar, cxCaps, cyChar; /*********************************************************************************************** * WndProc -- windows message callback * * * * Pilfered from a windows example program - HELLOWIN.C * * * * * * INPUT: Standard Windoze callback parameters * * * * OUTPUT: long * * * * WARNINGS: None * * * * HISTORY: * * 9/27/95 1:39PM ST : Pilfered * *=============================================================================================*/ long FAR PASCAL _export WndProc (HWND hwnd, UINT message, UINT wParam, LONG lParam) { HDC hdc; PAINTSTRUCT ps; static int line = 1; char buffer[100]; TEXTMETRIC tm; RECT rect; int transition; int previous; int context; int extended; int oem; int rep; int shift,ctrl,alt,caps,nums; int vk_key; BYTE remaptbl[256]; WORD key; char srcstr[2]; char dststr[2]; switch (message) { case WM_SYSKEYDOWN: case WM_SYSKEYUP: Kbd.Message_Handler(hwnd, message, wParam, lParam); break; case WM_KEYDOWN: case WM_KEYUP: case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_LBUTTONDBLCLK: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_MBUTTONDBLCLK: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_RBUTTONDBLCLK: Kbd.Message_Handler(hwnd, message, wParam, lParam); // Message_Loop(); return(0); case WM_CREATE: hdc = GetDC(hwnd); GetTextMetrics(hdc, &tm); cxChar = tm.tmAveCharWidth; cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2; cyChar = tm.tmHeight + tm.tmExternalLeading; ReleaseDC(hwnd, hdc); return(0); case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetTextMetrics(hdc, &tm); EndPaint(hwnd, &ps); return(0); // case WM_CLOSE: case WM_DESTROY: Running = FALSE; WaitForSingleObject(ThreadHandle, INFINITE); PostQuitMessage (0); Reset_Video_Mode(); return(0); case WM_ACTIVATEAPP: if ((BOOL)wParam) { SetEvent(ActiveEvent); } else { ResetEvent(ActiveEvent); } break; } if (line == 23) { InvalidateRect(hwnd, NULL, TRUE); line = 1; } return DefWindowProc (hwnd, message, wParam, lParam) ; } void Message_Loop(void) { int key,shift,ctrl,alt,rls,dbl; char buffer[255]; HDC hdc; static int line=0; while (Running) { WaitForSingleObject(ActiveEvent, INFINITE); if (Kbd.Check()) { int key = Kbd.Get(); if (key & WWKEY_VK_BIT) { Kbd.Split(key, shift, ctrl, alt,rls,dbl); if (!Kbd.Is_Mouse_Key(key)) { sprintf(buffer, "Key (VK) = %d (%s) shift = %d control = %d menu = %d rls = %d dbl = %d", key, VK_Name[key], shift, ctrl, alt, rls, dbl); if (key == 27) { PostMessage (MainWindow, WM_DESTROY,0,0); } } else { sprintf(buffer, "Mouse = %d @ (%d,%d) shift = %d control = %d menu = %d", key, Kbd.MouseQX, Kbd.MouseQY, shift, ctrl, alt); } } else { Kbd.Split(key, shift, ctrl, alt, rls, dbl); sprintf(buffer, "Key (ACSII) = %d (%c) shift = %d control = %d menu = %d rls = %d dbl = %d", key, key, shift, ctrl, alt, rls, dbl); } hdc = GetDC(MainWindow); TextOut(hdc, cxChar, cyChar * (line + 1), buffer, lstrlen(buffer)); sprintf(buffer, "Mouses current status: x = %3d, y = %3d", Kbd.Get_Mouse_X(), Kbd.Get_Mouse_Y()); TextOut(hdc, cxChar, cyChar * (1), buffer, lstrlen(buffer)); line++; if (line == 23) { InvalidateRect(MainWindow, NULL, TRUE); line = 1; } ReleaseDC(MainWindow, hdc); } } } /*********************************************************************************************** * WinMain -- Program entry point * * * * * * * * INPUT: Standard Windows startup parameters * * * * OUTPUT: msg.wParam * * * * WARNINGS: None * * * * HISTORY: * * 9/27/95 1:28PM ST : Created * *=============================================================================================*/ int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance, LPSTR /*lpszCmdParam*/, int nCmdShow) { HWND hwnd ; WNDCLASS wndclass ; MSG msg ; int i,j,k; int key,shift,ctrl,alt,rls,dbl; char buffer[255]; HDC hdc; // // Register the window class // if (!hPrevInstance) { wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (hInstance, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = NAME; RegisterClass (&wndclass) ; } // // Create our main window // hwnd = MainWindow = CreateWindowEx ( WS_EX_TOPMOST, NAME, TITLE, WS_POPUP | WS_MAXIMIZE, 0, 0, MODE_WIDTH, MODE_HEIGHT, NULL, NULL, hInstance, NULL ); ShowWindow (hwnd, nCmdShow) ; UpdateWindow (hwnd) ; SetFocus (hwnd); Set_Video_Mode( MainWindow , MODE_WIDTH , MODE_HEIGHT , 8 ); // ShowWindow (hwnd, nCmdShow) ; // UpdateWindow (hwnd) ; // SetFocus (hwnd); // (Dangerous if Windoze can change the handle) // Set_Video_Mode( MainWindow , MODE_WIDTH , MODE_HEIGHT , 8 ); #if(TRUE) DWORD threadid; ActiveEvent = CreateEvent(NULL, TRUE, TRUE, "Active Event"); ThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Message_Loop, NULL, 0, &threadid); if (!ThreadHandle) { DWORD error = GetLastError(); sprintf(buffer, "Last Error was equal to %d", error); MessageBox(hwnd, buffer,"Error",MB_ICONEXCLAMATION|MB_OK); return(0); } #endif while (1) { if (!GetMessage(&msg, NULL, 0, 0)) { break; } TranslateMessage(&msg); DispatchMessage(&msg); } return(0); // return msg.wParam; }