📄 makekbd.c
字号:
/*
* @(#)makeKbd.c
*
* Copyright 1997-1999, Wes Cherry (mailto:wesc@technosis.com)
* 2000-2001, Aaron Ardiri (mailto:aaron@ardiri.com)
* All rights reserved.
*
* 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 2, or (at your option)
* any 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, please write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Revisions:
* ==========
*
* 23-Feb-2001 renaud malaval
* creation based on makeKbd.c
*/
#include <stdio.h>
#include <string.h>
#include "std.h"
#include "chars.h"
#define NON_INTERNATIONAL
#include "CharLatin.h"
#include "makeKbd.h"
#include "util.h"
#include "restype.h"
#include "RCP2C.h"
char *keyTopLabels[numKeyTopLabels] = {
"cap",
"shift",
"space"
};
#define kNumAlphaKeys_US 38
#define kNumAlphaKeys_France 43
#define kNumAlphaKeys_Germany 42
#define kNumAccentKeys_US 38
#define kNumAccentKeys_Other 39
int
keyboardKeyEmit(KeyboardKeyType * pBuffer,
int index,
BOOL fEmit)
{
int keyboardResourceSize = 0;
while (index--)
{
keyboardResourceSize +=
CbEmitStruct(pBuffer, szRCKEYBOARDKEY, NULL, fEmit);
pBuffer++;
}
return keyboardResourceSize;
}
void
createAndSaveCountryKeyboard(int country,
int resID)
{
static unsigned char kbdResImage[4096];
unsigned char *pRunning;
KeyboardLayoutType *pkeyboardLayout;
KeyboardKeyType *pkeyboardKey;
unsigned char *pFirstKeyTopLabel, *pThisKeyTopLabel;
int thisKeyTopLabelSize;
int i;
// int keyboardResourceSize = 0;
int numAlphaKeys;
int numAccentKeys;
int stringsSize;
int realResOffset;
KeyboardKeyType *pAlphaKeys;
KeyboardLayoutType *pAlphaKeyboardLayout;
KeyboardKeyType *pPunc2Keys;
KeyboardLayoutType *pPunc2KeyboardLayout;
KeyboardKeyType *pPunc1Keys;
KeyboardLayoutType *pPunc1KeyboardLayout;
KeyboardKeyType *pNumberKeys;
KeyboardLayoutType *pNumberKeyboardLayout;
KeyboardKeyType *pAccentKeys;
KeyboardLayoutType *pAccentKeyboardLayout;
KeyboardKeyType alphaKeys_US[kNumAlphaKeys_US] = {
// First row
{'Q', 'Q', 'q', stdAlphaKeyWidth, 0},
{'W', 'W', 'w', stdAlphaKeyWidth, 0},
{'E', 'E', 'e', stdAlphaKeyWidth, 0},
{'R', 'R', 'r', stdAlphaKeyWidth, 0},
{'T', 'T', 't', stdAlphaKeyWidth, 0},
{'Y', 'Y', 'y', stdAlphaKeyWidth, 0},
{'U', 'U', 'u', stdAlphaKeyWidth, 0},
{'I', 'I', 'i', stdAlphaKeyWidth, 0},
{'O', 'O', 'o', stdAlphaKeyWidth, 0},
{'P', 'P', 'p', stdAlphaKeyWidth, 0},
{kbdBackspaceKey, kbdBackspaceKey, kbdBackspaceKey,
2 * stdAlphaKeyWidth + 1, kbdBackspaceKey},
// Second row
{kbdTabKey, kbdTabKey, kbdTabKey, stdAlphaKeyWidth + 3, kbdTabKey},
{'A', 'A', 'a', stdAlphaKeyWidth, 0},
{'S', 'S', 's', stdAlphaKeyWidth, 0},
{'D', 'D', 'd', stdAlphaKeyWidth, 0},
{'F', 'F', 'f', stdAlphaKeyWidth, 0},
{'G', 'G', 'g', stdAlphaKeyWidth, 0},
{'H', 'H', 'h', stdAlphaKeyWidth, 0},
{'J', 'J', 'j', stdAlphaKeyWidth, 0},
{'K', 'K', 'k', stdAlphaKeyWidth, 0},
{'L', 'L', 'l', stdAlphaKeyWidth, 0},
{':', ';', ';', stdAlphaKeyWidth - 1, 0},
{'"', '\'', '\'', stdAlphaKeyWidth - 1, 0},
// Third row
{kbdCapsKey, kbdCapsKey, kbdCapsKey, stdAlphaKeyWidth * 3 / 2 + 2,
keyTopCapLabel},
{'Z', 'Z', 'z', stdAlphaKeyWidth, 0},
{'X', 'X', 'x', stdAlphaKeyWidth, 0},
{'C', 'C', 'c', stdAlphaKeyWidth, 0},
{'V', 'V', 'v', stdAlphaKeyWidth, 0},
{'B', 'B', 'b', stdAlphaKeyWidth, 0},
{'N', 'N', 'n', stdAlphaKeyWidth, 0},
{'M', 'M', 'm', stdAlphaKeyWidth, 0},
{'!', ',', ',', stdAlphaKeyWidth, 0},
{'*', '.', '.', stdAlphaKeyWidth, 0},
{kbdReturnKey, kbdReturnKey, kbdReturnKey, stdAlphaKeyWidth + 6, kbdReturnKey}, // carriage return
// Fourth row
{kbdShiftKey, kbdShiftKey, kbdShiftKey, stdAlphaKeyWidth * 2 + 4,
keyTopShiftLabel},
{' ', ' ', ' ', 7 * stdAlphaKeyWidth + 10, keyTopSpaceLabel},
{'_', '-', '-', stdAlphaKeyWidth, 0},
{'?', '/', '/', stdAlphaKeyWidth, 0},
};
KeyboardLayoutType alphaKeyboardLayout_US = {
{{-1, 65}, {158, keyboardRows * 14 + 1}},
14, keyboardFont, 0,
{11, 12, 11, 4},
34, 23, fTrue
};
KeyboardKeyType alphaKeys_France[kNumAlphaKeys_France] = {
// First row
{'A', 'A', 'a', stdAlphaKeyWidth, 0},
{'Z', 'Z', 'z', stdAlphaKeyWidth, 0},
{'E', 'E', 'e', stdAlphaKeyWidth, 0},
{'R', 'R', 'r', stdAlphaKeyWidth, 0},
{'T', 'T', 't', stdAlphaKeyWidth, 0},
{'Y', 'Y', 'y', stdAlphaKeyWidth, 0},
{'U', 'U', 'u', stdAlphaKeyWidth, 0},
{'I', 'I', 'i', stdAlphaKeyWidth, 0},
{'O', 'O', 'o', stdAlphaKeyWidth, 0},
{'P', 'P', 'p', stdAlphaKeyWidth, 0},
{upUGraveChr, upUGraveChr, lowUGraveChr, stdAlphaKeyWidth, 0},
{kbdBackspaceKey, kbdBackspaceKey, kbdBackspaceKey,
1 * stdAlphaKeyWidth + 1, kbdBackspaceKey},
// Second row
{kbdTabKey, kbdTabKey, kbdTabKey, stdAlphaKeyWidth + 3, kbdTabKey},
{'Q', 'Q', 'q', stdAlphaKeyWidth, 0},
{'S', 'S', 's', stdAlphaKeyWidth, 0},
{'D', 'D', 'd', stdAlphaKeyWidth, 0},
{'F', 'F', 'f', stdAlphaKeyWidth, 0},
{'G', 'G', 'g', stdAlphaKeyWidth, 0},
{'H', 'H', 'h', stdAlphaKeyWidth, 0},
{'J', 'J', 'j', stdAlphaKeyWidth, 0},
{'K', 'K', 'k', stdAlphaKeyWidth, 0},
{'L', 'L', 'l', stdAlphaKeyWidth, 0},
{'M', 'M', 'm', stdAlphaKeyWidth - 1, 0},
{'*', '-', '-', stdAlphaKeyWidth - 1, 0},
// Third row
{kbdCapsKey, kbdCapsKey, kbdCapsKey, stdAlphaKeyWidth * 3 / 2 + 2,
kbdCapsKey},
{'W', 'W', 'w', stdAlphaKeyWidth, 0},
{'X', 'X', 'x', stdAlphaKeyWidth, 0},
{'C', 'C', 'c', stdAlphaKeyWidth, 0},
{'V', 'V', 'v', stdAlphaKeyWidth, 0},
{'B', 'B', 'b', stdAlphaKeyWidth, 0},
{'N', 'N', 'n', stdAlphaKeyWidth, 0},
{'?', ',', ',', stdAlphaKeyWidth, 0},
{'.', ';', ';', stdAlphaKeyWidth, 0},
{'/', ':', ':', stdAlphaKeyWidth, 0},
{kbdReturnKey, kbdReturnKey, kbdReturnKey, stdAlphaKeyWidth + 6, kbdReturnKey}, // carriage return
// Fourth row
{kbdShiftKey, kbdShiftKey, kbdShiftKey, stdAlphaKeyWidth * 2 + 4,
kbdShiftKey},
{'_', '"', '"', stdAlphaKeyWidth, 0},
{'!', '\'', '\'', stdAlphaKeyWidth, 0},
{' ', ' ', ' ', 3 * stdAlphaKeyWidth + 10, 0},
{'^', lowEAcuteChr, lowEAcuteChr, stdAlphaKeyWidth, 0},
{sectionChr, lowEGraveChr, lowEGraveChr, stdAlphaKeyWidth, 0},
{upCCedillaChr, upCCedillaChr, lowCCedillaChr, stdAlphaKeyWidth, 0},
{microChr, lowAGraveChr, lowAGraveChr, stdAlphaKeyWidth, 0},
};
KeyboardLayoutType alphaKeyboardLayout_France = {
{{-1, 65}, {158, keyboardRows * 14 + 1}},
14, keyboardFont, 0,
{12, 12, 11, 8},
35, 24, fTrue
};
KeyboardKeyType alphaKeys_Germany[kNumAlphaKeys_Germany] = {
// First row
{'Q', 'Q', 'q', stdAlphaKeyWidth, 0},
{'W', 'W', 'w', stdAlphaKeyWidth, 0},
{'E', 'E', 'e', stdAlphaKeyWidth, 0},
{'R', 'R', 'r', stdAlphaKeyWidth, 0},
{'T', 'T', 't', stdAlphaKeyWidth, 0},
{'Z', 'Z', 'z', stdAlphaKeyWidth, 0},
{'U', 'U', 'u', stdAlphaKeyWidth, 0},
{'I', 'I', 'i', stdAlphaKeyWidth, 0},
{'O', 'O', 'o', stdAlphaKeyWidth, 0},
{'P', 'P', 'p', stdAlphaKeyWidth, 0},
{upUDiaeresisChr, upUDiaeresisChr, lowUDiaeresisChr, stdAlphaKeyWidth,
0},
{kbdBackspaceKey, kbdBackspaceKey, kbdBackspaceKey,
1 * stdAlphaKeyWidth + 1, kbdBackspaceKey},
// Second row
{kbdTabKey, kbdTabKey, kbdTabKey, stdAlphaKeyWidth + 3, kbdTabKey},
{'A', 'A', 'a', stdAlphaKeyWidth, 0},
{'S', 'S', 's', stdAlphaKeyWidth, 0},
{'D', 'D', 'd', stdAlphaKeyWidth, 0},
{'F', 'F', 'f', stdAlphaKeyWidth, 0},
{'G', 'G', 'g', stdAlphaKeyWidth, 0},
{'H', 'H', 'h', stdAlphaKeyWidth, 0},
{'J', 'J', 'j', stdAlphaKeyWidth, 0},
{'K', 'K', 'k', stdAlphaKeyWidth, 0},
{'L', 'L', 'l', stdAlphaKeyWidth, 0},
{upODiaeresisChr, upODiaeresisChr, lowODiaeresisChr,
stdAlphaKeyWidth - 1, 0},
{upADiaeresisChr, upADiaeresisChr, lowADiaeresisChr,
stdAlphaKeyWidth - 1, 0},
// Third row
{kbdCapsKey, kbdCapsKey, kbdCapsKey, stdAlphaKeyWidth * 3 / 2 + 2,
kbdCapsKey},
{'Y', 'Y', 'y', stdAlphaKeyWidth, 0},
{'X', 'X', 'x', stdAlphaKeyWidth, 0},
{'C', 'C', 'c', stdAlphaKeyWidth, 0},
{'V', 'V', 'v', stdAlphaKeyWidth, 0},
{'B', 'B', 'b', stdAlphaKeyWidth, 0},
{'N', 'N', 'n', stdAlphaKeyWidth, 0},
{'M', 'M', 'm', stdAlphaKeyWidth, 0},
{';', ',', ',', stdAlphaKeyWidth, 0},
{':', '.', '.', stdAlphaKeyWidth, 0},
{kbdReturnKey, kbdReturnKey, kbdReturnKey, stdAlphaKeyWidth + 6, kbdReturnKey}, // carriage return
// Fourth row
{kbdShiftKey, kbdShiftKey, kbdShiftKey, stdAlphaKeyWidth * 2 + 4,
kbdShiftKey},
{'_', '-', '-', stdAlphaKeyWidth, 0},
{'!', '"', '"', stdAlphaKeyWidth, 0},
{' ', ' ', ' ', 4 * stdAlphaKeyWidth + 10, 0},
{'?', lowSharpSChr, lowSharpSChr, stdAlphaKeyWidth, 0},
{'*', '+', '+', stdAlphaKeyWidth, 0},
{'\'', '#', '#', stdAlphaKeyWidth, 0},
};
KeyboardLayoutType alphaKeyboardLayout_Germany = {
{{-1, 65}, {158, keyboardRows * 14 + 1}},
14, keyboardFont, 0,
{12, 12, 11, 7},
35, 24, fTrue
};
// Number keyboard
// List the punctuation keyboards first
#define numPunc2Keys 12
KeyboardKeyType punc2Keys_US[numPunc2Keys] = {
// First row
{'-', '-', '-', stdPuncKeyWidth, 0},
{'+', '+', '+', stdPuncKeyWidth, 0},
{kbdBackspaceKey, kbdBackspaceKey, kbdBackspaceKey,
2 * stdPuncKeyWidth, kbdBackspaceKey},
// Second row
{'/', '/', '/', stdPuncKeyWidth, 0},
{'*', '*', '*', stdPuncKeyWidth, 0},
{':', ':', ':', stdPuncKeyWidth, 0},
{kbdTabKey, kbdTabKey, kbdTabKey, stdPuncKeyWidth, kbdTabKey},
// Third row
{'.', '.', '.', stdPuncKeyWidth, 0},
{',', ',', ',', stdPuncKeyWidth, 0},
{kbdReturnKey, kbdReturnKey, kbdReturnKey, 2 * stdPuncKeyWidth, kbdReturnKey}, // carriage return
// Fourth row
{' ', ' ', ' ', 3 * stdPuncKeyWidth, keyTopSpaceLabel},
{'%', '%', '%', stdPuncKeyWidth, 0},
};
KeyboardKeyType punc2Keys_Other[numPunc2Keys] = {
// First row
{'-', '-', '-', stdPuncKeyWidth, 0},
{'+', '+', '+', stdPuncKeyWidth, 0},
{kbdBackspaceKey, kbdBackspaceKey, kbdBackspaceKey,
2 * stdPuncKeyWidth, kbdBackspaceKey},
// Second row
{'/', '/', '/', stdPuncKeyWidth, 0},
{'*', '*', '*', stdPuncKeyWidth, 0},
{':', ':', ':', stdPuncKeyWidth, 0},
{kbdTabKey, kbdTabKey, kbdTabKey, stdPuncKeyWidth, kbdTabKey},
// Third row
{'.', '.', '.', stdPuncKeyWidth, 0},
{',', ',', ',', stdPuncKeyWidth, 0},
{kbdReturnKey, kbdReturnKey, kbdReturnKey, 2 * stdPuncKeyWidth, kbdReturnKey}, // carriage return
// Fourth row
{' ', ' ', ' ', 3 * stdPuncKeyWidth, 0},
{'%', '%', '%', stdPuncKeyWidth, 0},
};
KeyboardLayoutType punc2KeyboardLayout_All = {
{{109, 69}, {stdPuncKeyWidth * 4 + 1, keyboardRows * 13 + 1}},
13, keyboardFont, 0,
{3, 4, 3, 2},
kbdNoKey, kbdNoKey, fTrue
};
#define numPunc1Keys 16
KeyboardKeyType punc1Keys_Germany[numPunc1Keys] = {
// First row
{'$', '$', '$', stdPuncKeyWidth, 0},
{chrEuroSign, chrEuroSign, chrEuroSign, stdPuncKeyWidth, 0},
{poundChr, poundChr, poundChr, stdPuncKeyWidth, 0},
{yenChr, yenChr, yenChr, stdPuncKeyWidth, 0},
// Second row
{'[', '[', '[', stdPuncKeyWidth, 0},
{']', ']', ']', stdPuncKeyWidth, 0},
{'{', '{', '{', stdPuncKeyWidth, 0},
{'}', '}', '}', stdPuncKeyWidth, 0},
// Third row
{'<', '<', '<', stdPuncKeyWidth, 0},
{'>', '>', '>', stdPuncKeyWidth, 0},
{'\\', '\\', '\\', stdPuncKeyWidth, 0},
{microChr, microChr, microChr, stdPuncKeyWidth, 0},
// Fourth row
{'@', '@', '@', stdPuncKeyWidth, 0},
{'~', '~', '~', stdPuncKeyWidth, 0},
{'&', '&', '&', stdPuncKeyWidth, 0},
{sectionChr, sectionChr, sectionChr, stdPuncKeyWidth, 0},
};
KeyboardKeyType punc1Keys_Other[numPunc1Keys] = {
// First row
{'$', '$', '$', stdPuncKeyWidth, 0},
{chrEuroSign, chrEuroSign, chrEuroSign, stdPuncKeyWidth, 0},
{poundChr, poundChr, poundChr, stdPuncKeyWidth, 0},
{yenChr, yenChr, yenChr, stdPuncKeyWidth, 0},
// Second row
{'[', '[', '[', stdPuncKeyWidth, 0},
{']', ']', ']', stdPuncKeyWidth, 0},
{'{', '{', '{', stdPuncKeyWidth, 0},
{'}', '}', '}', stdPuncKeyWidth, 0},
// Third row
{'<', '<', '<', stdPuncKeyWidth, 0},
{'>', '>', '>', stdPuncKeyWidth, 0},
{'\\', '\\', '\\', stdPuncKeyWidth, 0},
{'=', '=', '=', stdPuncKeyWidth, 0},
// Fourth row
{'@', '@', '@', stdPuncKeyWidth, 0},
{'~', '~', '~', stdPuncKeyWidth, 0},
{'&', '&', '&', stdPuncKeyWidth, 0},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -