void ConsoleView_GotoMonitor() { if ((g_nEmulatorConfiguration & BK_COPT_ROM_BASIC) != 0) { ScreenView_KeyEvent(0115, TRUE); // M ScreenView_KeyEvent(0115, FALSE); ScreenView_KeyEvent(0117, TRUE); // O ScreenView_KeyEvent(0117, FALSE); //ScreenView_KeyEvent(0012, TRUE); // ENTER //ScreenView_KeyEvent(0012, FALSE); } else if ((g_nEmulatorConfiguration & BK_COPT_ROM_FOCAL) != 0) { ScreenView_KeyEvent(0120, TRUE); // P ScreenView_KeyEvent(0120, FALSE); ScreenView_KeyEvent(0040, TRUE); // SPACE ScreenView_KeyEvent(0040, FALSE); ScreenView_KeyEvent(0115, TRUE); // M ScreenView_KeyEvent(0115, FALSE); //ScreenView_KeyEvent(0012, TRUE); // ENTER //ScreenView_KeyEvent(0012, FALSE); } SetFocus(g_hwndScreen); // Move focus to the screen }
LRESULT CALLBACK KeyboardViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); KeyboardView_OnDraw(hdc); EndPaint(hWnd, &ps); } break; case WM_SETCURSOR: { POINT ptCursor; ::GetCursorPos(&ptCursor); ::ScreenToClient(g_hwndKeyboard, &ptCursor); int keyindex = KeyboardView_GetKeyByPoint(ptCursor.x, ptCursor.y); LPCTSTR cursor = (keyindex == -1) ? IDC_ARROW : IDC_HAND; ::SetCursor(::LoadCursor(NULL, cursor)); } return (LRESULT)TRUE; case WM_LBUTTONDOWN: { int x = LOWORD(lParam); int y = HIWORD(lParam); WORD fwkeys = wParam; int keyindex = KeyboardView_GetKeyByPoint(x, y); if (keyindex == -1) break; BYTE keyscan = (BYTE) m_arrKeyboardKeys[keyindex * KEYBOARD_KEYS_ARRAY_WIDTH + 4]; if (keyscan == 0) break; BOOL okShift = ((fwkeys & MK_SHIFT) != 0); if (okShift && keyscan >= 0100 && keyscan <= 0137) keyscan += 040; else if (okShift && keyscan >= 0060 && keyscan <= 0077) keyscan -= 020; // Fire keydown event and capture mouse ScreenView_KeyEvent(keyscan, TRUE); ::SetCapture(g_hwndKeyboard); // Draw focus frame for the key pressed HDC hdc = ::GetDC(g_hwndKeyboard); Keyboard_DrawKey(hdc, keyscan); ::ReleaseDC(g_hwndKeyboard, hdc); // Remember key pressed m_nKeyboardKeyPressed = keyscan; } break; case WM_LBUTTONUP: if (m_nKeyboardKeyPressed != 0) { // Fire keyup event and release mouse ScreenView_KeyEvent(m_nKeyboardKeyPressed, FALSE); ::ReleaseCapture(); // Draw focus frame for the released key HDC hdc = ::GetDC(g_hwndKeyboard); Keyboard_DrawKey(hdc, m_nKeyboardKeyPressed); ::ReleaseDC(g_hwndKeyboard, hdc); m_nKeyboardKeyPressed = 0; } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return (LRESULT)FALSE; }
void Dialogs_DoLoadBinLoad(LPCTSTR strFileName) { // Open file for reading HANDLE hFile = CreateFile(strFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { AlertWarning(_T("Failed to load binary file.")); return; } // Load BIN header BYTE bufHeader[20]; DWORD bytesRead; ::ReadFile(hFile, bufHeader, 4, &bytesRead, NULL); if (bytesRead != 4) { ::CloseHandle(hFile); AlertWarning(_T("Failed to load binary file.")); return; } WORD baseAddress = *((WORD*)bufHeader); WORD dataSize = *(((WORD*)bufHeader) + 1); // Get file size DWORD bytesToRead = dataSize; WORD memoryBytes = (dataSize + 1) & 0xfffe; // Allocate memory BYTE* pBuffer = (BYTE*)::LocalAlloc(LPTR, memoryBytes); // Load file data ::ReadFile(hFile, pBuffer, dataSize, &bytesRead, NULL); if (bytesRead != bytesToRead) { ::LocalFree(pBuffer); ::CloseHandle(hFile); AlertWarning(_T("Failed to load binary file.")); return; } // Copy data to BK memory WORD address = baseAddress; WORD* pData = (WORD*)pBuffer; while (address < baseAddress + memoryBytes) { WORD value = *pData++; g_pBoard->SetRAMWord(address, value); address += 2; } ::LocalFree(pBuffer); ::CloseHandle(hFile); ScreenView_KeyEvent(0123, TRUE); ScreenView_KeyEvent(0123, FALSE); if (baseAddress == 01000) { ScreenView_KeyEvent(061, TRUE); ScreenView_KeyEvent(061, FALSE); ScreenView_KeyEvent(060, TRUE); ScreenView_KeyEvent(060, FALSE); ScreenView_KeyEvent(060, TRUE); ScreenView_KeyEvent(060, FALSE); ScreenView_KeyEvent(060, TRUE); ScreenView_KeyEvent(060, FALSE); } }