⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makekbd.c

📁 关于rcp2c_v3.rar协议在LINUX下的实现程序
💻 C
📖 第 1 页 / 共 2 页
字号:

/*
 * @(#)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 + -