mirror of
https://github.com/InvisibleUp/uvmac.git
synced 2025-02-12 04:31:09 +00:00
Continue splitting up files
CONTROLM.h was the biggest one. Eventual goal is to have each section of OSGLUWIN.c a seperate file, and then see if I can't make them platform-independent with only a few tweaks.
This commit is contained in:
parent
33522d0a6f
commit
a9c7900546
3
.gitignore
vendored
3
.gitignore
vendored
@ -4,4 +4,5 @@
|
||||
bld
|
||||
*.dsk
|
||||
*.ROM
|
||||
*.kdev4
|
||||
*.kdev4
|
||||
*.pdb
|
11
Makefile
11
Makefile
@ -1,5 +1,5 @@
|
||||
# Makefile
|
||||
# Currently only builds Mac Plus emulator for Windows x64
|
||||
# Currently only builds Mac Plus emulator for Windows x64 or Linux X11
|
||||
|
||||
CC := gcc
|
||||
CCFLAGS := -O2 -Wall -Wmissing-prototypes -Wno-uninitialized -Wundef -Wstrict-prototypes -Icfg/ -Isrc/
|
||||
@ -24,11 +24,18 @@ SrcFiles := \
|
||||
src/HW/SOUND/SNDEMDEV.c \
|
||||
src/UTIL/DATE2SEC.c \
|
||||
src/UI/COMOSGLU.c \
|
||||
src/UI/CONTROLM.c \
|
||||
|
||||
Win32Files := \
|
||||
src/UI/WIN32/OSGLUWIN.c \
|
||||
src/UI/WIN32/INTLKBRD.c \
|
||||
src/UI/WIN32/DBGLOG.c \
|
||||
src/UI/WIN32/KEYBOARD.c \
|
||||
|
||||
windows :
|
||||
mkdir -p "bld/"
|
||||
windres -i "src/UI/WIN32/main.rc" --input-format=rc -o "bld/main.res" -O coff --include-dir "src/"
|
||||
$(CC) -o "microvmac.exe" $(SrcFiles) "src/UI/WIN32/OSGLUWIN.c" \
|
||||
$(CC) -o "microvmac.exe" $(SrcFiles) $(Win32Files) \
|
||||
"bld/main.res" $(CCFLAGS) -mwindows -lwinmm -lole32 -luuid
|
||||
|
||||
linux :
|
||||
|
@ -31,6 +31,12 @@
|
||||
ClStrAppendSubstCStr encoding
|
||||
HTML character entity
|
||||
*/
|
||||
#ifndef INTLCHAR_H
|
||||
#define INTLCHAR_H
|
||||
|
||||
#include "UI/COMOSGLU.h"
|
||||
#include "UI/MYOSGLUE.h"
|
||||
|
||||
LOCALVAR const uint8_t CellData[] = {
|
||||
/* kCellUpA 101 0x41 0x0041 'A' 'A' A */
|
||||
0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x7E,
|
||||
@ -2150,3 +2156,5 @@ LOCALPROC ClStrFromSubstCStr(int *L, uint8_t *r, char *s)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // INTLCHAR_H
|
||||
|
1181
src/UI/CONTROLM.c
Normal file
1181
src/UI/CONTROLM.c
Normal file
File diff suppressed because it is too large
Load Diff
1195
src/UI/CONTROLM.h
1195
src/UI/CONTROLM.h
File diff suppressed because it is too large
Load Diff
79
src/UI/WIN32/DBGLOG.c
Normal file
79
src/UI/WIN32/DBGLOG.c
Normal file
@ -0,0 +1,79 @@
|
||||
/* --- sending debugging info to file --- */
|
||||
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
#include "SYSDEPNS.h"
|
||||
#include "UI/WIN32/OSGLUWIN.h"
|
||||
|
||||
#if dbglog_HAVE
|
||||
|
||||
LOCALVAR HANDLE dbglog_File = INVALID_HANDLE_VALUE;
|
||||
|
||||
LOCALFUNC bool dbglog_open0(void)
|
||||
{
|
||||
TCHAR pathName[_MAX_PATH];
|
||||
TCHAR Child0[] = TEXT("\\dbglog.txt");
|
||||
size_t newlen;
|
||||
|
||||
if (GetAppDir(pathName)) {
|
||||
newlen = _tcslen(pathName) + _tcslen(Child0);
|
||||
if (newlen + 1 < _MAX_PATH) {
|
||||
_tcscat(pathName, Child0);
|
||||
|
||||
dbglog_File = CreateFile(
|
||||
pathName, /* pointer to name of the file */
|
||||
GENERIC_READ + GENERIC_WRITE,
|
||||
/* access (read-write) mode */
|
||||
0, /* share mode */
|
||||
NULL, /* pointer to security descriptor */
|
||||
OPEN_ALWAYS, /* how to create */
|
||||
FILE_ATTRIBUTE_NORMAL, /* file attributes */
|
||||
NULL /* handle to file with attributes to copy */
|
||||
);
|
||||
if (INVALID_HANDLE_VALUE == dbglog_File) {
|
||||
/* report error (how?) */
|
||||
} else if (SetFilePointer(
|
||||
dbglog_File, /* handle of file */
|
||||
0, /* number of bytes to move file pointer */
|
||||
nullpr,
|
||||
/* address of high-order word of distance to move */
|
||||
FILE_BEGIN /* how to move */
|
||||
) != 0)
|
||||
{
|
||||
/* report error (how?) */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (INVALID_HANDLE_VALUE != dbglog_File);
|
||||
}
|
||||
|
||||
LOCALPROC dbglog_write0(char *s, uimr L)
|
||||
{
|
||||
DWORD BytesWritten;
|
||||
|
||||
if (INVALID_HANDLE_VALUE != dbglog_File) {
|
||||
if (! WriteFile(dbglog_File, /* handle of file to read */
|
||||
(LPVOID)s, /* address of buffer that receives data */
|
||||
(DWORD)L, /* number of bytes to read */
|
||||
&BytesWritten, /* address of number of bytes read */
|
||||
nullpr) /* address of structure for data */
|
||||
|| ((uint32_t)BytesWritten != L))
|
||||
{
|
||||
/* report error (how?) */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LOCALPROC dbglog_close0(void)
|
||||
{
|
||||
if (INVALID_HANDLE_VALUE != dbglog_File) {
|
||||
if (! SetEndOfFile(dbglog_File)) {
|
||||
/* report error (how?) */
|
||||
}
|
||||
(void) CloseHandle(dbglog_File);
|
||||
dbglog_File = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
1129
src/UI/WIN32/INTLKBRD.c
Normal file
1129
src/UI/WIN32/INTLKBRD.c
Normal file
File diff suppressed because it is too large
Load Diff
435
src/UI/WIN32/KEYBOARD.c
Normal file
435
src/UI/WIN32/KEYBOARD.c
Normal file
@ -0,0 +1,435 @@
|
||||
#include <windows.h>
|
||||
#include "SYSDEPNS.h"
|
||||
#include "CNFGGLOB.h"
|
||||
#include "CNFGRAPI.h"
|
||||
#include "HW/KBRD/KEYCODES.h"
|
||||
#include "UI/COMOSGLU.h"
|
||||
#include "UI/WIN32/OSGLUWIN.h"
|
||||
#include "UI/CONTROLM.h"
|
||||
#include "UTIL/ENDIANAC.h"
|
||||
|
||||
/* keyboard */
|
||||
|
||||
static uint8_t WinKey2Mac[256];
|
||||
|
||||
static inline void AssignOneMacKey(uint8_t WinKey, uint8_t MacKey)
|
||||
{
|
||||
WinKey2Mac[WinKey] = MacKey;
|
||||
}
|
||||
|
||||
bool InitWinKey2Mac(void)
|
||||
{
|
||||
memset(WinKey2Mac, MKC_None, sizeof(WinKey2Mac));
|
||||
|
||||
AssignOneMacKey('A', MKC_A);
|
||||
AssignOneMacKey('S', MKC_S);
|
||||
AssignOneMacKey('D', MKC_D);
|
||||
AssignOneMacKey('F', MKC_F);
|
||||
AssignOneMacKey('H', MKC_H);
|
||||
AssignOneMacKey('G', MKC_G);
|
||||
AssignOneMacKey('Z', MKC_Z);
|
||||
AssignOneMacKey('X', MKC_X);
|
||||
AssignOneMacKey('C', MKC_C);
|
||||
AssignOneMacKey('V', MKC_V);
|
||||
AssignOneMacKey('B', MKC_B);
|
||||
AssignOneMacKey('Q', MKC_Q);
|
||||
AssignOneMacKey('W', MKC_W);
|
||||
AssignOneMacKey('E', MKC_E);
|
||||
AssignOneMacKey('R', MKC_R);
|
||||
AssignOneMacKey('Y', MKC_Y);
|
||||
AssignOneMacKey('T', MKC_T);
|
||||
AssignOneMacKey('1', MKC_1);
|
||||
AssignOneMacKey('2', MKC_2);
|
||||
AssignOneMacKey('3', MKC_3);
|
||||
AssignOneMacKey('4', MKC_4);
|
||||
AssignOneMacKey('6', MKC_6);
|
||||
AssignOneMacKey('5', MKC_5);
|
||||
AssignOneMacKey(myVK_Equal, MKC_Equal);
|
||||
AssignOneMacKey('9', MKC_9);
|
||||
AssignOneMacKey('7', MKC_7);
|
||||
AssignOneMacKey(myVK_Subtract, MKC_Minus);
|
||||
AssignOneMacKey('8', MKC_8);
|
||||
AssignOneMacKey('0', MKC_0);
|
||||
AssignOneMacKey(myVK_RightBracket, MKC_RightBracket);
|
||||
AssignOneMacKey('O', MKC_O);
|
||||
AssignOneMacKey('U', MKC_U);
|
||||
AssignOneMacKey(myVK_LeftBracket, MKC_LeftBracket);
|
||||
AssignOneMacKey('I', MKC_I);
|
||||
AssignOneMacKey('P', MKC_P);
|
||||
AssignOneMacKey(VK_RETURN, MKC_Return);
|
||||
AssignOneMacKey('L', MKC_L);
|
||||
AssignOneMacKey('J', MKC_J);
|
||||
AssignOneMacKey(myVK_SingleQuote, MKC_SingleQuote);
|
||||
AssignOneMacKey('K', MKC_K);
|
||||
AssignOneMacKey(myVK_SemiColon, MKC_SemiColon);
|
||||
AssignOneMacKey(myVK_BackSlash, MKC_formac_BackSlash);
|
||||
AssignOneMacKey(myVK_Comma, MKC_Comma);
|
||||
AssignOneMacKey(myVK_Slash, MKC_formac_Slash);
|
||||
AssignOneMacKey('N', MKC_N);
|
||||
AssignOneMacKey('M', MKC_M);
|
||||
AssignOneMacKey(myVK_Period, MKC_Period);
|
||||
|
||||
AssignOneMacKey(VK_TAB, MKC_Tab);
|
||||
AssignOneMacKey(VK_SPACE, MKC_Space);
|
||||
AssignOneMacKey(myVK_Grave, MKC_formac_Grave);
|
||||
AssignOneMacKey(VK_BACK, MKC_BackSpace);
|
||||
AssignOneMacKey(VK_ESCAPE, MKC_formac_Escape);
|
||||
|
||||
AssignOneMacKey(VK_MENU, MKC_formac_Command);
|
||||
|
||||
AssignOneMacKey(VK_LMENU, MKC_formac_Command);
|
||||
|
||||
AssignOneMacKey(VK_RMENU, MKC_formac_RCommand);
|
||||
|
||||
AssignOneMacKey(VK_SHIFT, MKC_formac_Shift);
|
||||
AssignOneMacKey(VK_LSHIFT, MKC_formac_Shift);
|
||||
AssignOneMacKey(VK_RSHIFT, MKC_formac_RShift);
|
||||
|
||||
AssignOneMacKey(VK_CAPITAL, MKC_formac_CapsLock);
|
||||
|
||||
AssignOneMacKey(VK_APPS, MKC_formac_ROption);
|
||||
AssignOneMacKey(VK_LWIN, MKC_formac_Option);
|
||||
AssignOneMacKey(VK_RWIN, MKC_formac_ROption);
|
||||
AssignOneMacKey(VK_CONTROL, MKC_formac_Control);
|
||||
AssignOneMacKey(VK_LCONTROL, MKC_formac_Control);
|
||||
AssignOneMacKey(VK_RCONTROL, MKC_formac_RControl);
|
||||
|
||||
AssignOneMacKey(VK_F1, MKC_formac_F1);
|
||||
AssignOneMacKey(VK_F2, MKC_formac_F2);
|
||||
AssignOneMacKey(VK_F3, MKC_formac_F3);
|
||||
AssignOneMacKey(VK_F4, MKC_formac_F4);
|
||||
AssignOneMacKey(VK_F5, MKC_formac_F5);
|
||||
AssignOneMacKey(VK_F6, MKC_F6);
|
||||
AssignOneMacKey(VK_F7, MKC_F7);
|
||||
AssignOneMacKey(VK_F8, MKC_F8);
|
||||
AssignOneMacKey(VK_F9, MKC_F9);
|
||||
AssignOneMacKey(VK_F10, MKC_F10);
|
||||
AssignOneMacKey(VK_F11, MKC_F11);
|
||||
AssignOneMacKey(VK_F12, MKC_F12);
|
||||
|
||||
AssignOneMacKey(VK_DECIMAL, MKC_Decimal);
|
||||
AssignOneMacKey(VK_DELETE, MKC_Decimal);
|
||||
/* AssignOneMacKey(VK_RIGHT, 0x42); */
|
||||
AssignOneMacKey(VK_MULTIPLY, MKC_KPMultiply);
|
||||
AssignOneMacKey(VK_ADD, MKC_KPAdd);
|
||||
/* AssignOneMacKey(VK_LEFT, 0x46); */
|
||||
AssignOneMacKey(VK_NUMLOCK, MKC_Clear);
|
||||
|
||||
/* AssignOneMacKey(VK_DOWN, 0x48); */
|
||||
AssignOneMacKey(VK_DIVIDE, MKC_KPDevide);
|
||||
/* AssignOneMacKey(VK_RETURN, MKC_formac_Enter); */
|
||||
/* AssignOneMacKey(VK_UP, 0x4D); */
|
||||
AssignOneMacKey(VK_DIVIDE, MKC_KPDevide);
|
||||
AssignOneMacKey(VK_SUBTRACT, MKC_KPSubtract);
|
||||
|
||||
AssignOneMacKey(VK_SEPARATOR, MKC_KPEqual);
|
||||
AssignOneMacKey(VK_NUMPAD0, MKC_KP0);
|
||||
AssignOneMacKey(VK_NUMPAD1, MKC_KP1);
|
||||
AssignOneMacKey(VK_NUMPAD2, MKC_KP2);
|
||||
AssignOneMacKey(VK_NUMPAD3, MKC_KP3);
|
||||
AssignOneMacKey(VK_NUMPAD4, MKC_KP4);
|
||||
AssignOneMacKey(VK_NUMPAD5, MKC_KP5);
|
||||
|
||||
AssignOneMacKey(VK_NUMPAD6, MKC_KP6);
|
||||
AssignOneMacKey(VK_NUMPAD7, MKC_KP7);
|
||||
AssignOneMacKey(VK_NUMPAD8, MKC_KP8);
|
||||
AssignOneMacKey(VK_NUMPAD9, MKC_KP9);
|
||||
|
||||
AssignOneMacKey(VK_LEFT, MKC_Left);
|
||||
AssignOneMacKey(VK_RIGHT, MKC_Right);
|
||||
AssignOneMacKey(VK_DOWN, MKC_Down);
|
||||
AssignOneMacKey(VK_UP, MKC_Up);
|
||||
|
||||
AssignOneMacKey(myVK_PRIOR, MKC_formac_PageUp);
|
||||
AssignOneMacKey(myVK_NEXT, MKC_formac_PageDown);
|
||||
AssignOneMacKey(myVK_END, MKC_formac_End);
|
||||
AssignOneMacKey(myVK_HOME, MKC_formac_Home);
|
||||
AssignOneMacKey(myVK_INSERT, MKC_formac_Help);
|
||||
AssignOneMacKey(myVK_DELETE, MKC_formac_ForwardDel);
|
||||
AssignOneMacKey(myVK_HELP, MKC_formac_Help);
|
||||
AssignOneMacKey(myVK_SNAPSHOT, MKC_Print);
|
||||
AssignOneMacKey(myVK_SCROLL, MKC_ScrollLock);
|
||||
AssignOneMacKey(myVK_PAUSE, MKC_Pause);
|
||||
|
||||
AssignOneMacKey(myVK_OEM_102, MKC_AngleBracket);
|
||||
|
||||
InitKeyCodes();
|
||||
|
||||
#if ItnlKyBdFix
|
||||
InitCheckKeyboardLayout();
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LOCALPROC DoKeyCode(int i, bool down)
|
||||
{
|
||||
uint8_t key = WinKey2Mac[ItnlKyBdFix ? VkMapA[i] : i];
|
||||
if (MKC_None != key) {
|
||||
Keyboard_UpdateKeyMap2(key, down);
|
||||
}
|
||||
}
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
LOCALVAR bool HaveSetSysParam = false;
|
||||
#endif
|
||||
|
||||
LOCALPROC CheckTheCapsLock(void)
|
||||
{
|
||||
DoKeyCode(VK_CAPITAL, (GetKeyState(VK_CAPITAL) & 1) != 0);
|
||||
}
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
LOCALVAR bool VK_LWIN_pressed = false;
|
||||
LOCALVAR bool VK_RWIN_pressed = false;
|
||||
|
||||
void CheckForLostKeyUps(void)
|
||||
{
|
||||
if (HaveSetSysParam) {
|
||||
/* check for lost key ups */
|
||||
if (VK_LWIN_pressed) {
|
||||
if ((GetAsyncKeyState(VK_LWIN) & 0x8000) == 0) {
|
||||
DoKeyCode(VK_LWIN, false);
|
||||
VK_LWIN_pressed = false;
|
||||
}
|
||||
}
|
||||
if (VK_RWIN_pressed) {
|
||||
if ((GetAsyncKeyState(VK_RWIN) & 0x8000) == 0) {
|
||||
DoKeyCode(VK_RWIN, false);
|
||||
VK_RWIN_pressed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
LOCALPROC DoVKcode0(int i, bool down)
|
||||
{
|
||||
#if EnableGrabSpecialKeys
|
||||
if (HaveSetSysParam) {
|
||||
/* will need to check for lost key ups */
|
||||
if (VK_LWIN == i) {
|
||||
VK_LWIN_pressed = down;
|
||||
} else if (VK_RWIN == i) {
|
||||
VK_RWIN_pressed = down;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
DoKeyCode(i, down);
|
||||
}
|
||||
|
||||
void DoVKcode(int i, uint8_t flags, bool down)
|
||||
{
|
||||
switch (i) {
|
||||
#if MKC_formac_Control != MKC_formac_RControl
|
||||
case VK_CONTROL:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_RControl : MKC_formac_Control,
|
||||
down);
|
||||
break;
|
||||
#endif
|
||||
#if MKC_formac_RCommand != MKC_formac_Command
|
||||
case VK_MENU:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_RCommand : MKC_formac_Command,
|
||||
down);
|
||||
break;
|
||||
#endif
|
||||
case VK_RETURN:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_Enter : MKC_Return,
|
||||
down);
|
||||
break;
|
||||
case myVK_HOME:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_Home : MKC_KP7,
|
||||
down);
|
||||
break;
|
||||
case VK_UP:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_Up : MKC_KP8,
|
||||
down);
|
||||
break;
|
||||
case myVK_PRIOR:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_PageUp : MKC_KP9,
|
||||
down);
|
||||
break;
|
||||
case VK_LEFT:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_Left : MKC_KP4,
|
||||
down);
|
||||
break;
|
||||
case myVK_CLEAR:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_Clear : MKC_KP5,
|
||||
down);
|
||||
break;
|
||||
case VK_RIGHT:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_Right : MKC_KP6,
|
||||
down);
|
||||
break;
|
||||
case myVK_END:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_End : MKC_KP1,
|
||||
down);
|
||||
break;
|
||||
case VK_DOWN:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_Down : MKC_KP2,
|
||||
down);
|
||||
break;
|
||||
case myVK_NEXT:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_PageDown : MKC_KP3,
|
||||
down);
|
||||
break;
|
||||
case myVK_INSERT:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_Help : MKC_KP0,
|
||||
down);
|
||||
break;
|
||||
case myVK_DELETE:
|
||||
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
|
||||
? MKC_formac_ForwardDel : MKC_Decimal,
|
||||
down);
|
||||
break;
|
||||
case VK_CAPITAL:
|
||||
CheckTheCapsLock();
|
||||
break;
|
||||
default:
|
||||
if ((i >= 0) && (i < 256)) {
|
||||
DoVKcode0(i, down);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool WantCmdOptOnReconnect = false;
|
||||
|
||||
void ReconnectKeyCodes3(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
CheckTheCapsLock();
|
||||
|
||||
if (WantCmdOptOnReconnect) {
|
||||
WantCmdOptOnReconnect = false;
|
||||
|
||||
for (i = 0; i < 256; ++i) {
|
||||
if ((GetKeyState(i) & 0x8000) != 0) {
|
||||
if ((VK_CAPITAL != i)
|
||||
&& (VK_RETURN != i))
|
||||
{
|
||||
DoVKcode0(i, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DisconnectKeyCodes3(void)
|
||||
{
|
||||
DisconnectKeyCodes2();
|
||||
SetCurMouseButton(false);
|
||||
}
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
static HHOOK hKeyHook = NULL;
|
||||
#endif
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
typedef struct {
|
||||
DWORD vkCode;
|
||||
DWORD scanCode;
|
||||
DWORD flags;
|
||||
DWORD time;
|
||||
DWORD dwExtraInfo;
|
||||
} _KBDLLHOOKSTRUCT;
|
||||
#endif
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
LRESULT CALLBACK LowLevelKeyboardProc(
|
||||
int nCode, /* hook code */
|
||||
WPARAM wParam, /* message identifier */
|
||||
LPARAM lParam /* pointer to structure with message data */
|
||||
);
|
||||
#endif
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
LRESULT CALLBACK LowLevelKeyboardProc(
|
||||
int nCode, /* hook code */
|
||||
WPARAM wParam, /* message identifier */
|
||||
LPARAM lParam /* pointer to structure with message data */
|
||||
)
|
||||
{
|
||||
if (nCode == HC_ACTION) {
|
||||
_KBDLLHOOKSTRUCT *p = (_KBDLLHOOKSTRUCT *)lParam;
|
||||
if (p->vkCode != VK_CAPITAL) {
|
||||
switch (wParam) {
|
||||
case WM_KEYDOWN:
|
||||
case WM_SYSKEYDOWN:
|
||||
DoVKcode(p->vkCode, p->flags, true);
|
||||
return 1;
|
||||
break;
|
||||
case WM_KEYUP:
|
||||
case WM_SYSKEYUP:
|
||||
DoVKcode(p->vkCode, p->flags, false);
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return CallNextHookEx(hKeyHook, /* handle to current hook */
|
||||
nCode, /* hook code passed to hook procedure */
|
||||
wParam, /* value passed to hook procedure */
|
||||
lParam /* value passed to hook procedure */
|
||||
);
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
#define _WH_KEYBOARD_LL 13
|
||||
#define _SPI_SETSCREENSAVERRUNNING 0x0061
|
||||
#endif
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
LOCALVAR UINT nPreviousState;
|
||||
#endif
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
void GrabSpecialKeys(void)
|
||||
{
|
||||
if ((hKeyHook == NULL) && ! HaveSetSysParam) {
|
||||
/* this works on Windows XP */
|
||||
hKeyHook = SetWindowsHookEx(
|
||||
_WH_KEYBOARD_LL, /* type of hook to install */
|
||||
(HOOKPROC)LowLevelKeyboardProc,
|
||||
/* address of hook procedure */
|
||||
AppInstance, /* handle to application instance */
|
||||
0 /* identity of thread to install hook for */
|
||||
);
|
||||
if (hKeyHook == NULL) {
|
||||
/* this works on Windows 95/98 */
|
||||
SystemParametersInfo(_SPI_SETSCREENSAVERRUNNING, TRUE,
|
||||
&nPreviousState, 0);
|
||||
HaveSetSysParam = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UnGrabSpecialKeys(void)
|
||||
{
|
||||
if (hKeyHook != NULL) {
|
||||
(void) UnhookWindowsHookEx(hKeyHook);
|
||||
hKeyHook = NULL;
|
||||
}
|
||||
if (HaveSetSysParam) {
|
||||
SystemParametersInfo(_SPI_SETSCREENSAVERRUNNING, FALSE,
|
||||
&nPreviousState, 0);
|
||||
HaveSetSysParam = false;
|
||||
}
|
||||
}
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
127
src/UI/WIN32/OSGLUWIN.h
Normal file
127
src/UI/WIN32/OSGLUWIN.h
Normal file
@ -0,0 +1,127 @@
|
||||
#ifndef OSGLUWIN_H
|
||||
#define OSGLUWIN_H
|
||||
|
||||
#include "SYSDEPNS.h"
|
||||
#include "CNFGRAPI.h"
|
||||
#include "CNFGGLOB.h"
|
||||
#include "UI/COMOSGLU.h"
|
||||
#include "UI/CONTROLM.h"
|
||||
|
||||
/* Define the undefined */
|
||||
|
||||
#ifndef ItnlKyBdFix
|
||||
#define ItnlKyBdFix 0
|
||||
#endif
|
||||
|
||||
#ifdef UNICODE
|
||||
#define UseUni 1
|
||||
#else
|
||||
#define UseUni 0
|
||||
#endif
|
||||
|
||||
#ifndef InstallFileIcons
|
||||
#define InstallFileIcons 0
|
||||
#endif
|
||||
|
||||
#ifndef EnableGrabSpecialKeys
|
||||
#define EnableGrabSpecialKeys (MayFullScreen && GrabKeysFullScreen)
|
||||
#endif /* EnableGrabSpecialKeys */
|
||||
|
||||
/* Resource Ids */
|
||||
|
||||
#define IDI_VMAC 256
|
||||
#if InstallFileIcons
|
||||
#define IDI_ROM 257
|
||||
#define IDI_DISK 258
|
||||
#endif
|
||||
|
||||
/* API differences */
|
||||
|
||||
bool GetAppDir(LPTSTR pathName);
|
||||
|
||||
/* Utilities (move?) */
|
||||
|
||||
#define TestBit(i, p) (((unsigned long)(i) & PowOf2(p)) != 0)
|
||||
|
||||
/* Parameter buffers */
|
||||
|
||||
#if IncludePbufs
|
||||
#define PbufHaveLock 1
|
||||
HGLOBAL PbufDat[NumPbufs];
|
||||
#endif
|
||||
|
||||
/* Main window info */
|
||||
|
||||
extern HWND MainWnd;
|
||||
HINSTANCE AppInstance;
|
||||
int WndX;
|
||||
int WndY;
|
||||
extern bool UseFullScreen;
|
||||
extern bool UseMagnify;
|
||||
|
||||
#if MayFullScreen
|
||||
short hOffset;
|
||||
short vOffset;
|
||||
#endif
|
||||
|
||||
void ToggleWantFullScreen(void);
|
||||
|
||||
/* cursor */
|
||||
|
||||
extern bool HaveCursorHidden;
|
||||
extern bool WantCursorHidden;
|
||||
extern bool MouseCaptured;
|
||||
|
||||
void SetCurMouseButton(bool v);
|
||||
|
||||
/* Keyboard */
|
||||
|
||||
#ifdef ItnlKyBdFix
|
||||
uint8_t VkMapA[256];
|
||||
void InitCheckKeyboardLayout(void);
|
||||
void CheckKeyboardLayout(void);
|
||||
#endif
|
||||
|
||||
/* these constants weren't in the header files I have */
|
||||
#define myVK_Subtract 0xBD
|
||||
#define myVK_Equal 0xBB
|
||||
#define myVK_BackSlash 0xDC
|
||||
#define myVK_Comma 0xBC
|
||||
#define myVK_Period 0xBE
|
||||
#define myVK_Slash 0xBF
|
||||
#define myVK_SemiColon 0xBA
|
||||
#define myVK_SingleQuote 0xDE
|
||||
#define myVK_LeftBracket 0xDB
|
||||
#define myVK_RightBracket 0xDD
|
||||
#define myVK_Grave 0xC0
|
||||
|
||||
/* some new ones, need to check if in all header versions */
|
||||
#define myVK_PRIOR 0x21
|
||||
#define myVK_NEXT 0x22
|
||||
#define myVK_END 0x23
|
||||
#define myVK_HOME 0x24
|
||||
#define myVK_INSERT 0x2D
|
||||
#define myVK_DELETE 0x2E
|
||||
#define myVK_HELP 0x2F
|
||||
#define myVK_SCROLL 0x91
|
||||
#define myVK_SNAPSHOT 0x2C
|
||||
#define myVK_PAUSE 0x13
|
||||
#define myVK_CLEAR 0x0C
|
||||
|
||||
#define myVK_OEM_8 0xDF
|
||||
#define myVK_OEM_102 0xE2
|
||||
|
||||
extern bool WantCmdOptOnReconnect;
|
||||
|
||||
void DoVKcode(int i, uint8_t flags, bool down);
|
||||
void DisconnectKeyCodes3(void);
|
||||
void ReconnectKeyCodes3(void);
|
||||
bool InitWinKey2Mac(void);
|
||||
|
||||
#if EnableGrabSpecialKeys
|
||||
void GrabSpecialKeys(void);
|
||||
void UnGrabSpecialKeys(void);
|
||||
void CheckForLostKeyUps(void);
|
||||
#endif
|
||||
|
||||
#endif // OSGLUWIN_H
|
Loading…
x
Reference in New Issue
Block a user