#include "mc_kmxfile.h" #include "helpers.h" #include "u16.h" #include int dummytest_mc_kmx_file(){ std::cout<< " dummytest_mc_kmx_file is available\t"; return 0; } KMX_BOOL VerifyKeyboard(LPKMX_BYTE filebase, KMX_DWORD sz); LPKEYBOARD FixupKeyboard(PKMX_BYTE bufp, PKMX_BYTE base, KMX_DWORD dwFileSize); /*void Err(wchar_t *s) { LogError(L"LoadKeyboard: %s, last error = %d\n", s, GetLastError()); }*/ PKMX_WCHAR StringOffset(PKMX_BYTE base, KMX_DWORD offset) { if(offset == 0) return NULL; return (PKMX_WCHAR)(base + offset); } LPKEYBOARD FixupKeyboard(PKMX_BYTE bufp, PKMX_BYTE base, KMX_DWORD dwFileSize) { UNREFERENCED_PARAMETER(dwFileSize); KMX_DWORD i, j; PCOMP_KEYBOARD ckbp = (PCOMP_KEYBOARD) base; PCOMP_GROUP cgp; PCOMP_STORE csp; PCOMP_KEY ckp; LPKEYBOARD kbp = (LPKEYBOARD) bufp; LPSTORE sp; LPGROUP gp; LPKEY kp; kbp->dpStoreArray = (LPSTORE) (base + ckbp->dpStoreArray); kbp->dpGroupArray = (LPGROUP) (base + ckbp->dpGroupArray); for(sp = kbp->dpStoreArray, csp = (PCOMP_STORE) sp, i = 0; i < kbp->cxStoreArray; i++, sp++, csp++) { sp->dpName = StringOffset(base, csp->dpName); sp->dpString = StringOffset(base, csp->dpString); } for(gp = kbp->dpGroupArray, cgp = (PCOMP_GROUP) gp, i = 0; i < kbp->cxGroupArray; i++, gp++, cgp++) { gp->dpName = StringOffset(base, cgp->dpName); gp->dpKeyArray = (LPKEY) (base + cgp->dpKeyArray); if(cgp->dpMatch != NULL) gp->dpMatch = (PKMX_WCHAR) (base + cgp->dpMatch); if(cgp->dpNoMatch != NULL) gp->dpNoMatch = (PKMX_WCHAR) (base + cgp->dpNoMatch); for(kp = gp->dpKeyArray, ckp = (PCOMP_KEY) kp, j = 0; j < gp->cxKeyArray; j++, kp++, ckp++) { kp->dpOutput = (PKMX_WCHAR) (base + ckp->dpOutput); kp->dpContext = (PKMX_WCHAR) (base + ckp->dpContext); } } return kbp; } KMX_BOOL LoadKeyboard(char* fileName, LPKEYBOARD *lpKeyboard) { std::cout << "##### LoadKeyboard of mcompile started #####\n"; std::cout << "fileName: " <dwIdentifier != FILEID_COMPILED) { Err(L"errNotFileID"); delete[] buf; return FALSE; }*/ std::cout << "kbp->dwIdentifier: "<dwIdentifier<< "\n"; /* if(kbp->dwIdentifier != FILEID_COMPILED) { delete [] buf; //MyCout("errNotFileID",1); //_S2 ToDo find replacement: DebugLog("errNotFileID"); // _S2 delete [] buf; ???? return FALSE; }*/ MyCout("##### Line 187",1); *lpKeyboard = kbp; // _S2 delete [] buf; ???? MyCout("##### LoadKeyboard of mcompile ended #####",1); return TRUE; } // _S2 Version for char16_t filename KMX_BOOL LoadKeyboard(char16_t* fileName, LPKEYBOARD* lpKeyboard) { std::cout << "##### LoadKeyboard of mcompile started #####\n"; std::cout << "fileName: " <sz_dw MyCout("##### Line 299", 1); std::cout << "kbp: " << kbp << "\n"; if (!kbp) { // Err(L"errFixupKeyboard"); //_S2 ToDo find replacement: Err // _S2 delete [] buf; ???? MyCout("##### errFixupKeyboard ", 1); return FALSE; } MyCout("##### Line 311 ", 1); //_S2 can go: /*if(kbp->dwIdentifier != FILEID_COMPILED) { Err(L"errNotFileID"); delete[] buf; return FALSE; }*/ std::cout << "kbp->dwIdentifier: " << kbp->dwIdentifier << " FILEID_COMPILED: " << FILEID_COMPILED << "\n"; std::cout << "..xxxxx.\n"; if (kbp->dwIdentifier != FILEID_COMPILED) { delete[] buf; MyCout("errNotFileID", 1); //_S2 ToDo find replacement: DebugLog("errNotFileID"); return FALSE; } MyCout("##### Line 327", 1); *lpKeyboard = kbp; // _S2 delete [] buf; ???? MyCout("##### LoadKeyboard of mcompile ended #####", 1); return TRUE; } KMX_BOOL VerifyKeyboard(LPBYTE filebase, KMX_DWORD sz) { KMX_DWORD i; PCOMP_KEYBOARD ckbp = (PCOMP_KEYBOARD) filebase; PCOMP_STORE csp; // Check file version // if(ckbp->dwFileVersion < VERSION_MIN || ckbp->dwFileVersion > VERSION_MAX) { // Old or new version -- identify the desired program version // for(csp = (PCOMP_STORE)(filebase + ckbp->dpStoreArray), i = 0; i < ckbp->cxStoreArray; i++, csp++) { if(csp->dwSystemID == TSS_COMPILEDVERSION) { wchar_t buf2[256]; if(csp->dpString == 0) { // _S2 wsprintf(buf2, L"errWrongFileVersion:NULL"); MyCout("errWrongFileVersion",1); } else { // _S2 wsprintf(buf2, L"errWrongFileVersion:%10.10ls", StringOffset(filebase, csp->dpString)); MyCout("errWrongFileVersion-offset",1); } MyCout("err buf",1); // _S2 Err(buf2); return FALSE; } } MyCout("errWrongFileVersion",1); // _S2 Err(L"errWrongFileVersion"); return FALSE; } /**/ MyCout("will return true",1); return TRUE; } //---------------------old---------------------------------------- /* #include "pch.h" static BOOL LoadKeyboardFile(LPSTR fileName, LPKEYBOARD *lpKeyboard); BOOL VerifyKeyboard(LPBYTE filebase, DWORD sz); LPKEYBOARD FixupKeyboard(PBYTE bufp, PBYTE base, DWORD dwFileSize); void Err(wchar_t *s) { LogError(L"LoadKeyboard: %s, last error = %d\n", s, GetLastError()); } BOOL LoadKeyboard(LPWSTR fileName, LPKEYBOARD *lpKeyboard) { DWORD sz; LPBYTE buf; HANDLE hFile; LPKEYBOARD kbp; PBYTE filebase; if(!fileName || !lpKeyboard) { Err(L"Bad Filename"); return FALSE; } hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if(hFile == INVALID_HANDLE_VALUE) { Err(L"Could not open file"); return FALSE; } sz = GetFileSize(hFile, NULL); buf = new BYTE[sz]; if(!buf) { Err(L"Not allocmem"); CloseHandle(hFile); return FALSE; } filebase = buf; if(!ReadFile(hFile, filebase, sz, &sz, NULL)) { Err(L"errReadFile"); CloseHandle(hFile); delete[] buf; return FALSE; } CloseHandle(hFile); if(!VerifyKeyboard(filebase, sz)) { Err(L"errVerifyKeyboard"); delete[] buf; return FALSE; } kbp = FixupKeyboard(buf, filebase, sz); if(!kbp) { Err(L"errFixupKeyboard"); delete[] buf; return FALSE; } if(kbp->dwIdentifier != FILEID_COMPILED) { Err(L"errNotFileID"); delete[] buf; return FALSE; } *lpKeyboard = kbp; return TRUE; } PWCHAR StringOffset(PBYTE base, DWORD offset) { if(offset == 0) return NULL; return (PWCHAR)(base + offset); } LPKEYBOARD FixupKeyboard(PBYTE bufp, PBYTE base, DWORD dwFileSize) { UNREFERENCED_PARAMETER(dwFileSize); DWORD i, j; PCOMP_KEYBOARD ckbp = (PCOMP_KEYBOARD) base; PCOMP_GROUP cgp; PCOMP_STORE csp; PCOMP_KEY ckp; LPKEYBOARD kbp = (LPKEYBOARD) bufp; LPSTORE sp; LPGROUP gp; LPKEY kp; kbp->dpStoreArray = (LPSTORE) (base + ckbp->dpStoreArray); kbp->dpGroupArray = (LPGROUP) (base + ckbp->dpGroupArray); for(sp = kbp->dpStoreArray, csp = (PCOMP_STORE) sp, i = 0; i < kbp->cxStoreArray; i++, sp++, csp++) { sp->dpName = StringOffset(base, csp->dpName); sp->dpString = StringOffset(base, csp->dpString); } for(gp = kbp->dpGroupArray, cgp = (PCOMP_GROUP) gp, i = 0; i < kbp->cxGroupArray; i++, gp++, cgp++) { gp->dpName = StringOffset(base, cgp->dpName); gp->dpKeyArray = (LPKEY) (base + cgp->dpKeyArray); if(cgp->dpMatch != NULL) gp->dpMatch = (PWSTR) (base + cgp->dpMatch); if(cgp->dpNoMatch != NULL) gp->dpNoMatch = (PWSTR) (base + cgp->dpNoMatch); for(kp = gp->dpKeyArray, ckp = (PCOMP_KEY) kp, j = 0; j < gp->cxKeyArray; j++, kp++, ckp++) { kp->dpOutput = (PWSTR) (base + ckp->dpOutput); kp->dpContext = (PWSTR) (base + ckp->dpContext); } } return kbp; } BOOL VerifyKeyboard(LPBYTE filebase, DWORD sz) { DWORD i; PCOMP_KEYBOARD ckbp = (PCOMP_KEYBOARD) filebase; PCOMP_STORE csp; // Check file version // if(ckbp->dwFileVersion < VERSION_MIN || ckbp->dwFileVersion > VERSION_MAX) { // Old or new version -- identify the desired program version // for(csp = (PCOMP_STORE)(filebase + ckbp->dpStoreArray), i = 0; i < ckbp->cxStoreArray; i++, csp++) { if(csp->dwSystemID == TSS_COMPILEDVERSION) { wchar_t buf2[256]; if(csp->dpString == 0) { wsprintf(buf2, L"errWrongFileVersion:NULL"); } else { wsprintf(buf2, L"errWrongFileVersion:%10.10ls", StringOffset(filebase, csp->dpString)); } Err(buf2); return FALSE; } } Err(L"errWrongFileVersion"); return FALSE; } return TRUE; } */