This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
deb-goldedplus/golded3/gckeys.cpp
Alexander S. Aganichev d288f34470 various fixes
2001-01-27 11:52:13 +00:00

1063 lines
55 KiB
C++

// ------------------------------------------------------------------
// GoldED+
// Copyright (C) 1990-1999 Odinn Sorensen
// Copyright (C) 1999-2000 Alexander S. Aganichev
// ------------------------------------------------------------------
// 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 of the
// License, or (at your option) any later 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, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston,
// MA 02111-1307 USA
// ------------------------------------------------------------------
// $Id$
// ------------------------------------------------------------------
// Keyboard configuration compile.
// ------------------------------------------------------------------
#include <golded.h>
#include <gckeys.h>
// ------------------------------------------------------------------
CmdKey DefaultKeyset[] = {
{ Key_A_A , KK_AreaAbort , KT_A },
{ Key_A_X , KK_AreaAskExit , KT_A },
{ Key_Esc , KK_AreaAskExit , KT_A },
{ Key_A_F10 , KK_AreaAskExit , KT_A },
{ Key_A_B , KK_AreaBoardnos , KT_A },
{ Key_A_C , KK_AreaCatchUp , KT_A },
{ Key_A_O , KK_AreaDosShell , KT_A },
{ Key_C_M , KK_AreaDropMsgMarks , KT_A },
{ Key_A_H , KK_AreaHeat , KT_A },
{ Key_A_J , KK_AreaJump , KT_A },
{ Key_C_Lft , KK_AreaJump , KT_A },
{ Key_C_Rgt , KK_AreaJump , KT_A },
{ Key_Tab , KK_AreaJumpNextMatch , KT_A },
{ Key_C_Ent , KK_AreaJumpNextMatch , KT_A },
{ Key_C_Q , KK_AreaQuitNow , KT_A },
{ Key_A_S , KK_AreaScan , KT_A },
{ Key_A_P , KK_AreaScanPM , KT_A },
{ Key_Ent , KK_AreaSelect , KT_A },
{ Key_Rgt , KK_AreaSelect , KT_A },
{ Key_A_R , KK_AreaSelectMarks , KT_A },
{ Key_A_F8 , KK_AreaShowDel , KT_R },
{ Key_A_T , KK_AreaToggle , KT_A },
{ Key_Ins , KK_AreaToggle , KT_A },
{ Key_C_Z , KK_AreaTouchNetscan , KT_A },
{ Key_A_W , KK_AreaWriteGoldlast , KT_A },
{ Key_A_Z , KK_AreaZap , KT_A },
{ Key_Esc , KK_EditAbort , KT_E },
{ Key_A_A , KK_EditAnchor , KT_E },
{ Key_A_X , KK_EditAskExit , KT_E },
{ Key_A_F4 , KK_EditAskExit , KT_E },
{ Key_A_F5 , KK_EditClearDeleteBuf , KT_E },
{ Key_A_F6 , KK_EditClearPasteBuf , KT_E },
{ Key_A_C , KK_EditCopy , KT_E },
{ Key_C_Min , KK_EditCopyAboveChar , KT_E },
{ Key_A_M , KK_EditCut , KT_E },
{ Key_Del , KK_EditDelChar , KT_E },
{ Key_A_K , KK_EditDeleteEOL , KT_E },
{ Key_A_Y , KK_EditDeleteEOL , KT_E },
{ Key_BS , KK_EditDelLeft , KT_E },
{ Key_A_D , KK_EditDelLine , KT_E },
{ Key_C_Y , KK_EditDelLine , KT_E },
{ Key_C_BS , KK_EditDelLtWord , KT_E },
{ Key_C_F5 , KK_EditDelLtWord , KT_E },
{ Key_C_T , KK_EditDelRtWord , KT_E },
{ Key_C_F6 , KK_EditDelRtWord , KT_E },
{ Key_A_O , KK_EditDosShell , KT_E },
{ Key_F4 , KK_EditDupLine , KT_E },
{ Key_A_W , KK_EditExportText , KT_E },
{ Key_Home , KK_EditGoBegLine , KT_E },
{ Key_C_PgDn , KK_EditGoBotLine , KT_E },
{ Key_C_End , KK_EditGoBotMsg , KT_E },
{ Key_Dwn , KK_EditGoDown , KT_E },
{ Key_A_Dwn , KK_EditGoDown , KT_E },
{ Key_C_Dwn , KK_EditGoDown , KT_E },
{ Key_End , KK_EditGoEOL , KT_E },
{ Key_Lft , KK_EditGoLeft , KT_E },
{ Key_A_Lft , KK_EditGoLeft , KT_E },
{ Key_PgDn , KK_EditGoPgDn , KT_E },
{ Key_PgUp , KK_EditGoPgUp , KT_E },
{ Key_Rgt , KK_EditGoRight , KT_E },
{ Key_A_Rgt , KK_EditGoRight , KT_E },
{ Key_C_PgUp , KK_EditGoTopLine , KT_E },
{ Key_C_Home , KK_EditGoTopMsg , KT_E },
{ Key_Up , KK_EditGoUp , KT_E },
{ Key_A_Up , KK_EditGoUp , KT_E },
{ Key_C_Up , KK_EditGoUp , KT_E },
{ Key_C_Lft , KK_EditGoWordLeft , KT_E },
{ Key_C_Rgt , KK_EditGoWordRight , KT_E },
{ Key_A_H , KK_EditHeader , KT_E },
{ Key_A_Q , KK_EditImportQuotebuf , KT_E },
{ Key_A_I , KK_EditImportText , KT_E },
{ Key_A_R , KK_EditImportText , KT_E },
{ Key_F3 , KK_EditImportText , KT_E },
{ Key_F8 , KK_EditLoadFile , KT_E },
{ Key_A_L , KK_EditLookupCursor , KT_E },
{ Key_S_F10 , KK_EditLookupDest , KT_E },
{ Key_F10 , KK_EditLookupOrig , KT_E },
{ Key_Ent , KK_EditNewline , KT_E },
{ Key_A_P , KK_EditPaste , KT_E },
{ Key_C_Q , KK_EditQuitNow , KT_E },
{ Key_A_B , KK_EditReflow , KT_E },
{ Key_F7 , KK_EditSaveFile , KT_E },
{ Key_A_S , KK_EditSaveMsg , KT_E },
{ Key_C_Z , KK_EditSaveMsg , KT_E },
{ Key_F2 , KK_EditSaveMsg , KT_E },
{ Key_F9 , KK_EditSpellCheck , KT_E },
{ Key_Tab , KK_EditTab , KT_E },
{ Key_S_Tab , KK_EditTabReverse , KT_E },
{ Key_A_3 , KK_EditToggleCase , KT_E },
{ Key_Ins , KK_EditToggleInsert , KT_E },
{ Key_A_2 , KK_EditToLower , KT_E },
{ Key_A_1 , KK_EditToUpper , KT_E },
{ Key_C_U , KK_EditUnDelete , KT_E },
{ Key_A_BS , KK_EditUndo , KT_E },
{ Key_A_Z , KK_EditZapQuoteBelow , KT_E },
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ Key_C_Ins , KK_EditCopy , KT_E },
{ Key_S_Del , KK_EditCut , KT_E },
{ Key_C_Del , KK_EditDelete , KT_E },
{ Key_S_Ins , KK_EditPaste , KT_E },
{ Key_S_PgUp , KK_EditBlockPgUp , KT_E },
{ Key_S_PgDn , KK_EditBlockPgDn , KT_E },
{ Key_S_Home , KK_EditBlockHome , KT_E },
{ Key_S_End , KK_EditBlockEnd , KT_E },
{ Key_S_Up , KK_EditBlockUp , KT_E },
{ Key_S_Dwn , KK_EditBlockDown , KT_E },
{ Key_S_Lft , KK_EditBlockLeft , KT_E },
{ Key_S_Rgt , KK_EditBlockRight , KT_E },
#endif
{ Key_Esc , KK_FileAbort , KT_F },
{ Key_A_X , KK_FileAskExit , KT_F },
{ Key_A_F4 , KK_FileAskExit , KT_F },
{ Key_A_O , KK_FileDosShell , KT_F },
{ Key_Ins , KK_FileMark , KT_F },
{ Key_Plus , KK_FileMark , KT_F },
{ Key_C_Ent , KK_FileMarkAll , KT_F },
{ Key_C_Home , KK_FileMarkAll , KT_F },
{ Key_C_Q , KK_FileQuitNow , KT_F },
{ Key_Ent , KK_FileSelect , KT_F },
{ Key_Space , KK_FileToggleMark , KT_F },
{ Key_Multi , KK_FileToggleMarkAll , KT_F },
{ Key_Del , KK_FileUnMark , KT_F },
{ Key_Minus , KK_FileUnMark , KT_F },
{ Key_C_End , KK_FileUnMarkAll , KT_F },
{ Key_Esc , KK_ListAbort , KT_M },
{ Key_A_X , KK_ListAskExit , KT_M },
{ Key_A_F4 , KK_ListAskExit , KT_M },
{ Key_A_O , KK_ListDosShell , KT_M },
{ Key_S_Tab , KK_ListGotoBookMark , KT_M },
{ Key_BS , KK_ListGotoBookMark , KT_M },
{ Key_S , KK_ListMarkingOptions , KT_M },
{ Key_A_S , KK_ListMarkingOptions , KT_M },
{ Key_A_F9 , KK_ListMarkingOptions , KT_R },
{ Key_C_Q , KK_ListQuitNow , KT_M },
{ Key_Ent , KK_ListSelect , KT_M },
{ Key_Tab , KK_ListToggleBookMark , KT_M },
{ Key_C_D , KK_ListToggleDate , KT_M },
{ Key_Space , KK_ListToggleMark , KT_M },
{ Key_C_B , KK_ListToggleWideSubj , KT_M },
{ Key_Esc , KK_NodeAbort , KT_N },
{ Key_A_X , KK_NodeAskExit , KT_N },
{ Key_A_F4 , KK_NodeAskExit , KT_N },
{ Key_A_O , KK_NodeDosShell , KT_N },
{ Key_C_Q , KK_NodeQuitNow , KT_N },
{ Key_Ent , KK_NodeSelect , KT_N },
{ Key_C_B , KK_ReadAddressbookAdd , KT_R },
{ Key_X , KK_ReadAskExit , KT_R },
{ Key_A_X , KK_ReadAskExit , KT_R },
{ Key_A_F4 , KK_ReadAskExit , KT_R },
{ Key_C_A , KK_ReadChangeAka , KT_R },
{ Key_C_S , KK_ReadChangeAttrs , KT_R },
{ Key_C , KK_ReadChangeMsg , KT_R },
{ Key_A_C , KK_ReadChangeMsg , KT_R },
{ Key_F2 , KK_ReadChangeMsg , KT_R },
{ Key_C_O , KK_ReadChangeOrigin , KT_R },
{ Key_C_I , KK_ReadChangeTagline , KT_R },
{ Key_C_T , KK_ReadChangeTemplate , KT_R },
{ Key_C_U , KK_ReadChangeUsername , KT_R },
{ Key_C_J , KK_ReadChangeXlatImport , KT_R },
{ Key_G , KK_ReadCommentMsg , KT_R },
{ Key_A_G , KK_ReadCommentMsg , KT_R },
{ Key_M , KK_ReadCopyMoveForward , KT_R },
{ Key_A_M , KK_ReadCopyMoveForward , KT_R },
{ Key_S_F8 , KK_ReadCopyMoveForward , KT_R },
{ Key_D , KK_ReadDeleteMsg , KT_R },
{ Key_A_D , KK_ReadDeleteMsg , KT_R },
{ Key_Del , KK_ReadDeleteMsg , KT_R },
{ Key_O , KK_ReadDosShell , KT_R },
{ Key_A_O , KK_ReadDosShell , KT_R },
{ Key_C_F10 , KK_ReadDosShell , KT_R },
{ Key_C_R , KK_ReadFidoRenumber , KT_R },
{ Key_S_F4 , KK_ReadFidoRenumber , KT_R },
{ Key_C_F , KK_ReadFileRequest , KT_R },
{ Key_F , KK_ReadFindAll , KT_R },
{ Key_A_F , KK_ReadFindAll , KT_R },
{ Key_S_F6 , KK_ReadFindAll , KT_R },
{ Key_Z , KK_ReadFindHeader , KT_R },
{ Key_A_Z , KK_ReadFindHeader , KT_R },
{ Key_F6 , KK_ReadFindHeader , KT_R },
{ Key_S_Tab , KK_ReadGotoBookMark , KT_R },
{ Key_BS , KK_ReadGotoBookMark , KT_R },
{ Key_Lsr , KK_ReadGotoFirstMsg , KT_R },
{ Key_C_Home , KK_ReadGotoFirstMsg , KT_R },
{ Key_Gtr , KK_ReadGotoLastMsg , KT_R },
{ Key_C_End , KK_ReadGotoLastMsg , KT_R },
{ Key_C_G , KK_ReadGotoMsgno , KT_R },
{ Key_C_N , KK_ReadGotoNextArea , KT_R },
{ Key_Rgt , KK_ReadGotoNextMsg , KT_R },
{ Key_A_Rgt , KK_ReadGotoNextUnread , KT_R },
{ Key_A_U , KK_ReadGotoNextUnread , KT_R },
{ Key_C_P , KK_ReadGotoPrevArea , KT_R },
{ Key_Lft , KK_ReadGotoPrevMsg , KT_R },
{ Key_A_Lft , KK_ReadGotoPrevUnread , KT_R },
{ Key_Plus , KK_ReadGotoReplies , KT_R },
{ Key_C_Rgt , KK_ReadGotoReplies , KT_R },
{ Key_Multi , KK_ReadGotoReplyNext , KT_R },
{ Key_Minus , KK_ReadGotoReplyPrev , KT_R },
{ Key_C_Lft , KK_ReadGotoReplyPrev , KT_R },
{ Key_S_F10 , KK_ReadLookupDest , KT_R },
{ Key_F10 , KK_ReadLookupOrig , KT_R },
{ Key_C_L , KK_ReadMakeUserlist , KT_R },
{ Key_C_K , KK_ReadMakePathreport , KT_R },
{ Key_S , KK_ReadMarkingOptions , KT_R },
{ Key_A_S , KK_ReadMarkingOptions , KT_R },
{ Key_A_F9 , KK_ReadMarkingOptions , KT_R },
{ Key_A_L , KK_ReadMessageList , KT_R },
{ Key_F9 , KK_ReadMessageList , KT_R },
{ Key_L , KK_ReadMessageList , KT_R },
{ Key_B , KK_ReadMoveCommentMsg , KT_R },
{ Key_A_B , KK_ReadMoveCommentMsg , KT_R },
{ Key_N , KK_ReadMoveQuoteMsg , KT_R },
{ Key_A_N , KK_ReadMoveQuoteMsg , KT_R },
{ Key_F5 , KK_ReadMoveQuoteMsg , KT_R },
{ Key_Ent , KK_ReadMsgContinue , KT_R },
{ Key_End , KK_ReadMsgEnd , KT_R },
{ Key_Home , KK_ReadMsgHome , KT_R },
{ Key_Dwn , KK_ReadMsgLineDown , KT_R },
{ Key_C_Dwn , KK_ReadMsgLineDown , KT_R },
{ Key_Up , KK_ReadMsgLineUp , KT_R },
{ Key_C_Up , KK_ReadMsgLineUp , KT_R },
{ Key_PgDn , KK_ReadMsgPgDn , KT_R },
{ Key_PgUp , KK_ReadMsgPgUp , KT_R },
{ Key_A , KK_ReadNewArea , KT_R },
{ Key_A_A , KK_ReadNewArea , KT_R },
{ Key_Esc , KK_ReadNewArea , KT_R },
{ Key_C_F1 , KK_ReadNewArea , KT_R },
{ Key_E , KK_ReadNewMsg , KT_R },
{ Key_A_E , KK_ReadNewMsg , KT_R },
{ Key_Ins , KK_ReadNewMsg , KT_R },
{ Key_C_Q , KK_ReadQuitNow , KT_R },
{ Key_C_W , KK_ReadQuoteBuf , KT_R },
{ Key_Q , KK_ReadQuoteMsg , KT_R },
{ Key_A_Q , KK_ReadQuoteMsg , KT_R },
{ Key_F4 , KK_ReadQuoteMsg , KT_R },
{ Key_R , KK_ReadReplyMsg , KT_R },
{ Key_A_R , KK_ReadReplyMsg , KT_R },
{ Key_F3 , KK_ReadReplyMsg , KT_R },
{ Key_S_3 , KK_ReadThreadtree , KT_R },
{ Key_Tab , KK_ReadToggleBookMark , KT_R },
{ Key_I , KK_ReadToggleHexdump , KT_R },
{ Key_A_I , KK_ReadToggleHexdump , KT_R },
{ Key_C_F9 , KK_ReadToggleHexdump , KT_R },
{ Key_H , KK_ReadToggleHidden , KT_R },
{ Key_A_H , KK_ReadToggleHidden , KT_R },
{ Key_C_F7 , KK_ReadToggleHidden , KT_R },
{ Key_V , KK_ReadToggleHiddKlud , KT_R },
{ Key_A_V , KK_ReadToggleHiddKlud , KT_R },
{ Key_C_F5 , KK_ReadToggleHiddKlud , KT_R },
{ Key_K , KK_ReadToggleKludge , KT_R },
{ Key_A_K , KK_ReadToggleKludge , KT_R },
{ Key_C_F6 , KK_ReadToggleKludge , KT_R },
{ Key_Space , KK_ReadToggleMark , KT_R },
{ Key_J , KK_ReadToggleMarkRead , KT_R },
{ Key_A_J , KK_ReadToggleMarkRead , KT_R },
{ Key_P , KK_ReadTogglePageBar , KT_R },
{ Key_A_P , KK_ReadTogglePageBar , KT_R },
{ Key_C_F8 , KK_ReadTogglePageBar , KT_R },
{ Key_C_V , KK_ReadToggleQuote , KT_R },
{ Key_Y , KK_ReadToggleRealMsgno , KT_R },
{ Key_A_Y , KK_ReadToggleRealMsgno , KT_R },
{ Key_C_F4 , KK_ReadToggleRealMsgno , KT_R },
{ Key_U , KK_ReadToggleROT13 , KT_R },
{ Key_C_F3 , KK_ReadToggleROT13 , KT_R },
{ Key_C_H , KK_ReadToggleStyles , KT_R },
{ Key_T , KK_ReadToggleTwits , KT_R },
{ Key_A_T , KK_ReadToggleTwits , KT_R },
{ Key_C_Z , KK_ReadTouchNetscan , KT_R },
{ Key_A_F10 , KK_ReadUserbase , KT_R },
{ Key_C_X , KK_ReadUUDecode , KT_R },
{ Key_W , KK_ReadWriteMsg , KT_R },
{ Key_A_W , KK_ReadWriteMsg , KT_R },
{ Key_F7 , KK_ReadWriteMsg , KT_R },
{ 0xFFFF , 0xFFFF , 0xFF }
};
// ------------------------------------------------------------------
// must be sorted by crc_token
tglobalkey globalkeys[] = {
{ CRC_READLOOKUPDEST , KK_ReadLookupDest , KT_R }, // 0x0023
{ CRC_READADDRESSBOOKADD , KK_ReadAddressbookAdd , KT_R }, // 0x00FA
{ CRC_LISTDOSSHELL , KK_ListDosShell , KT_M }, // 0x0130
{ CRC_EDITGOLEFT , KK_EditGoLeft , KT_E }, // 0x043B
{ CRC_READTOGGLEHIDDEN , KK_ReadToggleHidden , KT_R }, // 0x04CE
{ CRC_EDITIMPORTTEXT , KK_EditImportText , KT_E }, // 0x0586
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SEND , Key_S_End , 0 }, // 0x0590
#endif
{ CRC_READGOTOPREVMSG , KK_ReadGotoPrevMsg , KT_R }, // 0x06D9
{ CRC_K_STAB , Key_S_Tab , 0 }, // 0x0886
{ CRC_EDITLOADFILE , KK_EditLoadFile , KT_A }, // 0x0931
{ CRC_READFILEREQUEST , KK_ReadFileRequest , KT_R }, // 0x0A07
{ CRC_AREASELECTMARKS , KK_AreaSelectMarks , KT_A }, // 0x0AC3
{ CRC_K_ALEFT , Key_A_Lft , 0 }, // 0x0B39
{ CRC_READCHANGECHARSIN , KK_ReadChangeCharsIn , KT_R }, // 0x0B87
{ CRC_K_AF4 , Key_A_F4 , 0 }, // 0x0EF0
{ CRC_K_AF5 , Key_A_F5 , 0 }, // 0x0EF1
{ CRC_K_AF6 , Key_A_F6 , 0 }, // 0x0EF2
{ CRC_K_AF7 , Key_A_F7 , 0 }, // 0x0EF3
{ CRC_K_AF1 , Key_A_F1 , 0 }, // 0x0EF5
{ CRC_K_AF2 , Key_A_F2 , 0 }, // 0x0EF6
{ CRC_K_AF3 , Key_A_F3 , 0 }, // 0x0EF7
{ CRC_K_AF8 , Key_A_F8 , 0 }, // 0x0EFC
{ CRC_K_AF9 , Key_A_F9 , 0 }, // 0x0EFD
{ CRC_K_BSPACE , Key_BS , 0 }, // 0x0F07
{ CRC_LISTGOTOBOOKMARK , KK_ListGotoBookMark , KT_M }, // 0x0F08
{ CRC_EDITDELETEEOL , KK_EditDeleteEOL , KT_E }, // 0x1143
{ CRC_FILEUNMARKALL , KK_FileUnMarkAll , KT_F }, // 0x121A
{ CRC_K_SPACE , Key_Space , 0 }, // 0x1281
{ CRC_EDITREFLOW , KK_EditReflow , KT_E }, // 0x13F9
{ CRC_K_AF12 , Key_A_F12 , 0 }, // 0x14FC
{ CRC_K_AF10 , Key_A_F10 , 0 }, // 0x14FE
{ CRC_K_AF11 , Key_A_F11 , 0 }, // 0x14FF
{ CRC_LISTGOTONEXT , KK_ListGotoNext , KT_M }, // 0x1641
{ CRC_K_LEFT , Key_Lft , 0 }, // 0x1694
{ CRC_READREPLYMSG , KK_ReadReplyMsg , KT_R }, // 0x172F
{ CRC_AREAGOTOLAST , KK_AreaGotoLast , KT_A }, // 0x177A
{ CRC_READINCREASEMARGIN , KK_ReadIncreaseMargin , KT_R }, // 0x1797
{ CRC_EDITEXITMSG , KK_EditExitMsg , KT_E }, // 0x1813
{ CRC_READTOGGLEPAGEBAR , KK_ReadTogglePageBar , KT_R }, // 0x18E4
{ CRC_K_F12 , Key_F12 , 0 }, // 0x1930
{ CRC_K_F10 , Key_F10 , 0 }, // 0x1932
{ CRC_K_F11 , Key_F11 , 0 }, // 0x1933
{ CRC_READGOTOREPLIES , KK_ReadGotoReplies , KT_R }, // 0x1A6B
{ CRC_READMOVEQUOTEMSG , KK_ReadMoveQuoteMsg , KT_R }, // 0x1B41
{ CRC_EDITGOEOL , KK_EditGoEOL , KT_E }, // 0x1CC6
{ CRC_K_AUP , Key_A_Up , 0 }, // 0x1D94
{ CRC_AREAABORT , KK_AreaAbort , KT_A }, // 0x1E02
{ CRC_READTOGGLEMARK , KK_ReadToggleMark , KT_R }, // 0x1E64
{ CRC_READFIDORENUMBER , KK_ReadFidoRenumber , KT_R }, // 0x1E7C
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SDEL , Key_S_Del , 0 }, // 0x1EB9
#endif
{ CRC_EDITCOPY , KK_EditCopy , KT_E }, // 0x1F77
{ CRC_READEXTERNUTILMENU , KK_ReadExternUtilMenu , KT_R }, // 0x2000
{ CRC_READCHANGEAKA , KK_ReadChangeAka , KT_R }, // 0x2015
{ CRC_EDITGOWORDRIGHT , KK_EditGoWordRight , KT_E }, // 0x20D0
{ CRC_K_CRIGHT , Key_C_Rgt , 0 }, // 0x20EC
{ CRC_EDITBLOCKRIGHT , KK_EditBlockRight , KT_E }, // 0x20F9
{ CRC_AREAJUMP , KK_AreaJump , KT_A }, // 0x2342
{ CRC_K_CPGUP , Key_C_PgUp , 0 }, // 0x2603
{ CRC_READGOTOPREVUNREAD , KK_ReadGotoPrevUnread , KT_R }, // 0x27EA
{ CRC_READTOGGLEREALMSGNO , KK_ReadToggleRealMsgno , KT_R }, // 0x2A3B
{ CRC_AREADOSSHELL , KK_AreaDosShell , KT_A }, // 0x2DED
{ CRC_K_DOWN , Key_Dwn , 0 }, // 0x2F6D
{ CRC_READNEWMSG , KK_ReadNewMsg , KT_R }, // 0x30CA
{ CRC_NODEGOTOFIRST , KK_NodeGotoFirst , KT_N }, // 0x321B
{ CRC_READUNDEFINE , KK_ReadUndefine , KT_R }, // 0x329D
{ CRC_K_ADOWN , Key_A_Dwn , 0 }, // 0x32C0
{ CRC_K_CF12 , Key_C_F12 , 0 }, // 0x3480
{ CRC_K_CF10 , Key_C_F10 , 0 }, // 0x3482
{ CRC_K_CF11 , Key_C_F11 , 0 }, // 0x3483
{ CRC_K_CHOME , Key_C_Home , 0 }, // 0x35C4
{ CRC_K_CPGDN , Key_C_PgDn , 0 }, // 0x371D
{ CRC_EDITCOPYABOVECHAR , KK_EditCopyAboveChar , KT_E }, // 0x380C
{ CRC_LISTSELECT , KK_ListSelect , KT_M }, // 0x3829
{ CRC_READGOTOFIRSTMSG , KK_ReadGotoFirstMsg , KT_R }, // 0x392F
{ CRC_AREAGOTONEXT , KK_AreaGotoNext , KT_A }, // 0x3A9C
{ CRC_EDITDELLTWORD , KK_EditDelLtWord , KT_E }, // 0x3B67
{ CRC_LISTGOTOLAST , KK_ListGotoLast , KT_M }, // 0x3BA7
{ CRC_LISTTOGGLEWIDESUBJ , KK_ListToggleWideSubj , KT_M }, // 0x3C76
{ CRC_READMENU , KK_ReadMenu , KT_R }, // 0x3D0A
{ CRC_EDITGODOWN , KK_EditGoDown , KT_E }, // 0x3DC2
{ CRC_K_A0 , Key_A_0 , 0 }, // 0x4030
{ CRC_K_A1 , Key_A_1 , 0 }, // 0x4031
{ CRC_K_A2 , Key_A_2 , 0 }, // 0x4032
{ CRC_K_A3 , Key_A_3 , 0 }, // 0x4033
{ CRC_K_A4 , Key_A_4 , 0 }, // 0x4034
{ CRC_K_A5 , Key_A_5 , 0 }, // 0x4035
{ CRC_K_A6 , Key_A_6 , 0 }, // 0x4036
{ CRC_K_A7 , Key_A_7 , 0 }, // 0x4037
{ CRC_K_A8 , Key_A_8 , 0 }, // 0x4038
{ CRC_K_A9 , Key_A_9 , 0 }, // 0x4039
{ CRC_K_AA , Key_A_A , 0 }, // 0x4041
{ CRC_K_AB , Key_A_B , 0 }, // 0x4042
{ CRC_K_AC , Key_A_C , 0 }, // 0x4043
{ CRC_K_AD , Key_A_D , 0 }, // 0x4044
{ CRC_K_AE , Key_A_E , 0 }, // 0x4045
{ CRC_K_AF , Key_A_F , 0 }, // 0x4046
{ CRC_K_AG , Key_A_G , 0 }, // 0x4047
{ CRC_K_AH , Key_A_H , 0 }, // 0x4048
{ CRC_K_AI , Key_A_I , 0 }, // 0x4049
{ CRC_K_AJ , Key_A_J , 0 }, // 0x404A
{ CRC_K_AK , Key_A_K , 0 }, // 0x404B
{ CRC_K_AL , Key_A_L , 0 }, // 0x404C
{ CRC_K_AM , Key_A_M , 0 }, // 0x404D
{ CRC_K_AN , Key_A_N , 0 }, // 0x404E
{ CRC_K_AO , Key_A_O , 0 }, // 0x404F
{ CRC_K_AP , Key_A_P , 0 }, // 0x4050
{ CRC_K_AQ , Key_A_Q , 0 }, // 0x4051
{ CRC_K_AR , Key_A_R , 0 }, // 0x4052
{ CRC_K_AS , Key_A_S , 0 }, // 0x4053
{ CRC_K_AT , Key_A_T , 0 }, // 0x4054
{ CRC_K_AU , Key_A_U , 0 }, // 0x4055
{ CRC_K_AV , Key_A_V , 0 }, // 0x4056
{ CRC_K_AW , Key_A_W , 0 }, // 0x4057
{ CRC_K_AX , Key_A_X , 0 }, // 0x4058
{ CRC_K_AY , Key_A_Y , 0 }, // 0x4059
{ CRC_K_AZ , Key_A_Z , 0 }, // 0x405A
{ CRC_K_ADEL , Key_A_Del , 0 }, // 0x40C0
{ CRC_NODEMACRO , KK_NodeMacro , KT_N }, // 0x4129
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SUP , Key_S_Up , 0 }, // 0x4151
#endif
{ CRC_AREAGOTOFIRST , KK_AreaGotoFirst , KT_A }, // 0x41CB
{ CRC_LISTABORT , KK_ListAbort , KT_M }, // 0x4313
{ CRC_READGOTOBOOKMARK , KK_ReadGotoBookMark , KT_R }, // 0x4383
{ CRC_READMSGCONTINUE , KK_ReadMsgContinue , KT_R }, // 0x4511
{ CRC_K_F1 , Key_F1 , 0 }, // 0x4631
{ CRC_K_F2 , Key_F2 , 0 }, // 0x4632
{ CRC_K_F3 , Key_F3 , 0 }, // 0x4633
{ CRC_K_F4 , Key_F4 , 0 }, // 0x4634
{ CRC_K_F5 , Key_F5 , 0 }, // 0x4635
{ CRC_K_F6 , Key_F6 , 0 }, // 0x4636
{ CRC_K_F7 , Key_F7 , 0 }, // 0x4637
{ CRC_K_F8 , Key_F8 , 0 }, // 0x4638
{ CRC_K_F9 , Key_F9 , 0 }, // 0x4639
{ CRC_READTOGGLEKLUDGE , KK_ReadToggleKludge , KT_R }, // 0x46AB
{ CRC_READCHANGEATTRS , KK_ReadChangeAttrs , KT_R }, // 0x47F8
{ CRC_READSEARCH , KK_ReadSearch , KT_R }, // 0x48EF
{ CRC_READMSGPGDN , KK_ReadMsgPgDn , KT_R }, // 0x4908
{ CRC_LISTGOTOPREV , KK_ListGotoPrev , KT_M }, // 0x49E9
{ CRC_READQUOTEBUF , KK_ReadQuoteBuf , KT_R }, // 0x49EE
{ CRC_EDITDELETE , KK_EditDelete , KT_E }, // 0x4A37
{ CRC_K_SF12 , Key_S_F12 , 0 }, // 0x4A85
{ CRC_K_SF11 , Key_S_F11 , 0 }, // 0x4A86
{ CRC_K_SF10 , Key_S_F10 , 0 }, // 0x4A87
{ CRC_READMAKEPATHREPORT , KK_ReadMakePathreport , KT_R }, // 0x4AA6
{ CRC_K_ESC , Key_Esc , 0 }, // 0x4B22
{ CRC_READMSGHOME , KK_ReadMsgHome , KT_R }, // 0x4BD1
{ CRC_KK_MACRO , Key_Macro , 0 }, // 0x4BE9
{ CRC_READTOUCHNETSCAN , KK_ReadTouchNetscan , KT_R }, // 0x4BF3
{ CRC_EDITUNDELETE , KK_EditUnDelete , KT_E }, // 0x4C34
{ CRC_K_DEL , Key_Del , 0 }, // 0x4D0C
{ CRC_READCHANGECHARSOUT , KK_ReadChangeCharsOut , KT_R }, // 0x4DF9
{ CRC_READUUDECODE , KK_ReadUUDecode , KT_R }, // 0x4F0B
{ CRC_FILEUNDEFINE , KK_FileUndefine , KT_F }, // 0x502B
{ CRC_K_CENTER , Key_C_Ent , 0 }, // 0x50DC
{ CRC_AREAZAP , KK_AreaZap , KT_A }, // 0x5125
{ CRC_K_SF1 , Key_S_F1 , 0 }, // 0x5230
{ CRC_K_SF3 , Key_S_F3 , 0 }, // 0x5232
{ CRC_K_SF2 , Key_S_F2 , 0 }, // 0x5233
{ CRC_K_SF5 , Key_S_F5 , 0 }, // 0x5234
{ CRC_K_SF4 , Key_S_F4 , 0 }, // 0x5235
{ CRC_K_SF7 , Key_S_F7 , 0 }, // 0x5236
{ CRC_K_SF6 , Key_S_F6 , 0 }, // 0x5237
{ CRC_K_SF9 , Key_S_F9 , 0 }, // 0x5238
{ CRC_K_SF8 , Key_S_F8 , 0 }, // 0x5239
{ CRC_K_CLEFT , Key_C_Lft , 0 }, // 0x535B
{ CRC_K_UP , Key_Up , 0 }, // 0x5550
{ CRC_K_END , Key_End , 0 }, // 0x5625
{ CRC_K_ATAB , Key_A_Tab , 0 }, // 0x56FF
{ CRC_READMSGPGUP , KK_ReadMsgPgUp , KT_R }, // 0x5816
{ CRC_AREATOUCHNETSCAN , KK_AreaTouchNetscan , KT_A }, // 0x58C1
{ CRC_EDITNEWLINE , KK_EditNewline , KT_E }, // 0x59F3
{ CRC_K_CBSPACE , Key_C_BS , 0 }, // 0x5A72
{ CRC_EDITEXPORTTEXT , KK_EditExportText , KT_E }, // 0x5AED
{ CRC_EDITLOOKUPORIG , KK_EditLookupOrig , KT_E }, // 0x5AFB
{ CRC_AREAHEAT , KK_AreaHeat , KT_A }, // 0x5B15
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SRIGHT , Key_S_Rgt , 0 }, // 0x5B1F
#endif
{ CRC_READGOTONEXTAREA , KK_ReadGotoNextArea , KT_R }, // 0x5B23
{ CRC_K_TAB , Key_Tab , 0 }, // 0x5B33
{ CRC_K_AEND , Key_A_End , 0 }, // 0x5BE9
{ CRC_FILEMACRO , KK_FileMacro , KT_F }, // 0x5D48
{ CRC_READMSGLINEDOWN , KK_ReadMsgLineDown , KT_R }, // 0x5DB2
{ CRC_K_CMINUS , Key_C_Min , 0 }, // 0x5E2D
{ CRC_NODEUNDEFINE , KK_NodeUndefine , KT_N }, // 0x5E32
{ CRC_K_CA , Key_C_A , 0 }, // 0x5E41
{ CRC_K_CB , Key_C_B , 0 }, // 0x5E42
{ CRC_K_CC , Key_C_C , 0 }, // 0x5E43
{ CRC_K_CD , Key_C_D , 0 }, // 0x5E44
{ CRC_K_CE , Key_C_E , 0 }, // 0x5E45
{ CRC_K_CF , Key_C_F , 0 }, // 0x5E46
{ CRC_K_CG , Key_C_G , 0 }, // 0x5E47
{ CRC_K_CH , Key_C_H , 0 }, // 0x5E48
{ CRC_K_CI , Key_C_I , 0 }, // 0x5E49
{ CRC_K_CJ , Key_C_J , 0 }, // 0x5E4A
{ CRC_K_CK , Key_C_K , 0 }, // 0x5E4B
{ CRC_K_CL , Key_C_L , 0 }, // 0x5E4C
{ CRC_K_CM , Key_C_M , 0 }, // 0x5E4D
{ CRC_K_CN , Key_C_N , 0 }, // 0x5E4E
{ CRC_K_CO , Key_C_O , 0 }, // 0x5E4F
{ CRC_K_CP , Key_C_P , 0 }, // 0x5E50
{ CRC_K_CQ , Key_C_Q , 0 }, // 0x5E51
{ CRC_K_CR , Key_C_R , 0 }, // 0x5E52
{ CRC_K_CS , Key_C_S , 0 }, // 0x5E53
{ CRC_K_CT , Key_C_T , 0 }, // 0x5E54
{ CRC_K_CU , Key_C_U , 0 }, // 0x5E55
{ CRC_K_CV , Key_C_V , 0 }, // 0x5E56
{ CRC_K_CW , Key_C_W , 0 }, // 0x5E57
{ CRC_K_CX , Key_C_X , 0 }, // 0x5E58
{ CRC_K_CY , Key_C_Y , 0 }, // 0x5E59
{ CRC_K_CZ , Key_C_Z , 0 }, // 0x5E5A
{ CRC_READCOMMENTMSG , KK_ReadCommentMsg , KT_R }, // 0x5E89
{ CRC_READTOGGLETWITS , KK_ReadToggleTwits , KT_R }, // 0x5FD1
{ CRC_EDITGOPGDN , KK_EditGoPgDn , KT_E }, // 0x607D
{ CRC_K_CDEL , Key_C_Del , 0 }, // 0x60BC
{ CRC_KK_AUTO , Key_Auto , 0 }, // 0x60E2
{ CRC_READFINDHEADER , KK_ReadFindHeader , KT_R }, // 0x6343
{ CRC_K_PGUP , Key_PgUp , 0 }, // 0x63CC
{ CRC_EDITABORT , KK_EditAbort , KT_E }, // 0x6468
{ CRC_EDITSAVEFILE , KK_EditSaveFile , KT_E }, // 0x64A4
{ CRC_AREAGOTOPREV , KK_AreaGotoPrev , KT_A }, // 0x6534
{ CRC_EDITDELLEFT , KK_EditDelLeft , KT_E }, // 0x6552
{ CRC_EDITSAVEMSG , KK_EditSaveMsg , KT_E }, // 0x660C
{ CRC_K_CGMUL , Key_C_StrG , 0 }, // 0x66CA
{ CRC_NODESELECT , KK_NodeSelect , KT_N }, // 0x6A64
{ CRC_K_CDOWN , Key_C_Dwn , 0 }, // 0x6AA2
{ CRC_EDITGORIGHT , KK_EditGoRight , KT_E }, // 0x6AFE
{ CRC_READTOUCHSEMAPHORE , KK_ReadTouchSemaphore , KT_R }, // 0x6B1D
{ CRC_EDITGOTOPMSG , KK_EditGoTopMsg , KT_E }, // 0x6BD3
{ CRC_READCHANGETEMPLATE , KK_ReadChangeTemplate , KT_R }, // 0x6C86
{ CRC_FILEUNMARK , KK_FileUnMark , KT_F }, // 0x6D1B
{ CRC_EDITTOLOWER , KK_EditToLower , KT_E }, // 0x6D85
{ CRC_K_AHOME , Key_A_Home , 0 }, // 0x6DA6
{ CRC_LISTTOGGLEDATE , KK_ListToggleDate , KT_M }, // 0x6F1F
{ CRC_K_APGDN , Key_A_PgDn , 0 }, // 0x6F7F
{ CRC_K_HOME , Key_Home , 0 }, // 0x700B
{ CRC_EDITGOPGUP , KK_EditGoPgUp , KT_E }, // 0x7163
{ CRC_READMSGLINEUP , KK_ReadMsgLineUp , KT_R }, // 0x7238
{ CRC_EDITHEADER , KK_EditHeader , KT_E }, // 0x726F
{ CRC_K_PGDN , Key_PgDn , 0 }, // 0x72D2
{ CRC_READWRITEMSG , KK_ReadWriteMsg , KT_R }, // 0x73AC
{ CRC_READGOTOMSGNO , KK_ReadGotoMsgno , KT_R }, // 0x73F7
{ CRC_READCHANGEUSERNAME , KK_ReadChangeUsername , KT_R }, // 0x7438
{ CRC_READSTEALTAGLINE , KK_ReadStealTagline , KT_R }, // 0x7480
{ CRC_EDITUNDEFINE , KK_EditUndefine , KT_E }, // 0x7873
{ CRC_LISTGOTOFIRST , KK_ListGotoFirst , KT_M }, // 0x7925
{ CRC_K_CEND , Key_C_End , 0 }, // 0x7B95
{ CRC_K_APGUP , Key_A_PgUp , 0 }, // 0x7E61
{ CRC_EDITQUITNOW , KK_EditQuitNow , KT_E }, // 0x80BA
{ CRC_AREASHOWDEL , KK_AreaShowDel , KT_R }, // 0x80C4
{ CRC_LISTMARKINGOPTIONS , KK_ListMarkingOptions , KT_M }, // 0x8138
{ CRC_EDITZAPQUOTEBELOW , KK_EditZapQuoteBelow , KT_E }, // 0x814F
{ CRC_EDITDUPLINE , KK_EditDupLine , KT_E }, // 0x816A
{ CRC_EDITDELRTWORD , KK_EditDelRtWord , KT_E }, // 0x829A
{ CRC_EDITMENU , KK_EditMenu , KT_E }, // 0x833E
{ CRC_AREAUNDEFINE , KK_AreaUndefine , KT_A }, // 0x835B
{ CRC_READGOTOREPLYNEXT , KK_ReadGotoReplyNext , KT_R }, // 0x844F
{ CRC_EDITMACRO , KK_EditMacro , KT_E }, // 0x85CD
{ CRC_K_ENTER , Key_Ent , 0 }, // 0x87BD
{ CRC_EDITGOTOPLINE , KK_EditGoTopLine , KT_E }, // 0x87C2
{ CRC_EDITBLOCKPGDN , KK_EditBlockPgDn , KT_E }, // 0x895B
{ CRC_EDITASKEXIT , KK_EditAskExit , KT_E }, // 0x89AF
{ CRC_EDITBLOCKHOME , KK_EditBlockHome , KT_E }, // 0x8B82
{ CRC_READDELETEMSG , KK_ReadDeleteMsg , KT_R }, // 0x8BCE
{ CRC_EDITTAB , KK_EditTab , KT_E }, // 0x8C26
{ CRC_K_KEY5 , Key_5 , 0 }, // 0x9062
{ CRC_EDITPASTE , KK_EditPaste , KT_E }, // 0x90C4
{ CRC_EDITGOBOTLINE , KK_EditGoBotLine , KT_E }, // 0x92DD
{ CRC_EXTERNUTIL18 , KK_ExternUtil18 , KT_R }, // 0x94B0
{ CRC_EXTERNUTIL19 , KK_ExternUtil19 , KT_R }, // 0x94B1
{ CRC_READMAINMENU , KK_ReadMainMenu , KT_R }, // 0x94B3
{ CRC_EXTERNUTIL10 , KK_ExternUtil10 , KT_R }, // 0x94B8
{ CRC_EXTERNUTIL11 , KK_ExternUtil11 , KT_R }, // 0x94B9
{ CRC_EXTERNUTIL12 , KK_ExternUtil12 , KT_R }, // 0x94BA
{ CRC_EXTERNUTIL13 , KK_ExternUtil13 , KT_R }, // 0x94BB
{ CRC_EXTERNUTIL14 , KK_ExternUtil14 , KT_R }, // 0x94BC
{ CRC_EXTERNUTIL15 , KK_ExternUtil15 , KT_R }, // 0x94BD
{ CRC_EXTERNUTIL16 , KK_ExternUtil16 , KT_R }, // 0x94BE
{ CRC_EXTERNUTIL17 , KK_ExternUtil17 , KT_R }, // 0x94BF
{ CRC_EXTERNUTIL08 , KK_ExternUtil08 , KT_R }, // 0x95B0
{ CRC_EXTERNUTIL09 , KK_ExternUtil09 , KT_R }, // 0x95B1
{ CRC_EXTERNUTIL01 , KK_ExternUtil01 , KT_R }, // 0x95B9
{ CRC_EXTERNUTIL02 , KK_ExternUtil02 , KT_R }, // 0x95BA
{ CRC_EXTERNUTIL03 , KK_ExternUtil03 , KT_R }, // 0x95BB
{ CRC_EXTERNUTIL04 , KK_ExternUtil04 , KT_R }, // 0x95BC
{ CRC_EXTERNUTIL05 , KK_ExternUtil05 , KT_R }, // 0x95BD
{ CRC_EXTERNUTIL06 , KK_ExternUtil06 , KT_R }, // 0x95BE
{ CRC_EXTERNUTIL07 , KK_ExternUtil07 , KT_R }, // 0x95BF
{ CRC_AREABOARDNOS , KK_AreaBoardnos , KT_A }, // 0x96EA
{ CRC_EXTERNUTIL20 , KK_ExternUtil20 , KT_R }, // 0x97B8
{ CRC_EXTERNUTIL21 , KK_ExternUtil21 , KT_R }, // 0x97B9
{ CRC_EXTERNUTIL22 , KK_ExternUtil22 , KT_R }, // 0x97BA
{ CRC_EXTERNUTIL23 , KK_ExternUtil23 , KT_R }, // 0x97BB
{ CRC_EXTERNUTIL24 , KK_ExternUtil24 , KT_R }, // 0x97BC
{ CRC_K_INS , Key_Ins , 0 }, // 0x97BE
{ CRC_READTHREADTREE , KK_ReadThreadtree , KT_R }, // 0x9827
{ CRC_EDITBLOCKPGUP , KK_EditBlockPgUp , KT_E }, // 0x9842
{ CRC_K_ARIGHT , Key_A_Rgt , 0 }, // 0x9911
{ CRC_LISTMENU , KK_ListMenu , KT_M }, // 0x99AA
{ CRC_K_AINS , Key_A_Ins , 0 }, // 0x9A72
{ CRC_EDITGOBOTMSG , KK_EditGoBotMsg , KT_E }, // 0x9B29
{ CRC_READDOSSHELL , KK_ReadDosShell , KT_R }, // 0x9C2B
{ CRC_READGOTOLASTMSG , KK_ReadGotoLastMsg , KT_R }, // 0x9E72
{ CRC_NODEABORT , KK_NodeAbort , KT_N }, // 0xA08C
{ CRC_READTOGGLEHIDDKLUD , KK_ReadToggleHiddKlud , KT_R }, // 0xA24F
{ CRC_AREASELECT , KK_AreaSelect , KT_A }, // 0xA271
{ CRC_LISTMACRO , KK_ListMacro , KT_M }, // 0xA2B6
{ CRC_EDITDELCHAR , KK_EditDelChar , KT_E }, // 0xA3C7
{ CRC_AREAASKEXIT , KK_AreaAskExit , KT_A }, // 0xA3D1
{ CRC_READLOOKUPORIG , KK_ReadLookupOrig , KT_R }, // 0xA41C
{ CRC_FILEMENU , KK_FileMenu , KT_F }, // 0xA4B2
{ CRC_READASKEXIT , KK_ReadAskExit , KT_R }, // 0xA500
{ CRC_AREAJUMPNEXTMATCH , KK_AreaJumpNextMatch , KT_A }, // 0xA556
{ CRC_READTOGGLEBOOKMARK , KK_ReadToggleBookMark , KT_R }, // 0xA7E2
{ CRC_EDITSOUNDKILL , KK_EditSoundkill , KT_E }, // 0xA9A7
{ CRC_AREAQUITNOW , KK_AreaQuitNow , KT_A }, // 0xAAC4
{ CRC_READNEWAREA , KK_ReadNewArea , KT_R }, // 0xAB5E
{ CRC_AREAMENU , KK_AreaMenu , KT_A }, // 0xABE1
{ CRC_READQUITNOW , KK_ReadQuitNow , KT_R }, // 0xAC15
{ CRC_EDITDELLINE , KK_EditDelLine , KT_E }, // 0xACCF
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SPGDN , Key_S_PgDn , 0 }, // 0xAD44
#endif
{ CRC_READSOUNDKILL , KK_ReadSoundkill , KT_R }, // 0xAE29
{ CRC_LISTUNDEFINE , KK_ListUndefine , KT_M }, // 0xAF86
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SHOME , Key_S_Home , 0 }, // 0xAF9D
#endif
{ CRC_READTOGGLEQUOTE , KK_ReadToggleQuote , KT_R }, // 0xB293
{ CRC_EDITUNDO , KK_EditUndo , KT_E }, // 0xB295
{ CRC_READDIRQUOTEMSG , KK_ReadDirQuoteMsg , KT_R }, // 0xB351
{ CRC_FILETOGGLEMARK , KK_FileToggleMark , KT_F }, // 0xB431
{ CRC_FILEGOTOPREV , KK_FileGotoPrev , KT_F }, // 0xB644
{ CRC_EDITLOOKUPCURSOR , KK_EditLookupCursor , KT_E }, // 0xB7CC
{ CRC_NODEGOTOPREV , KK_NodeGotoPrev , KT_N }, // 0xB85D
{ CRC_AREADROPMSGMARKS , KK_AreaDropMsgMarks , KT_A }, // 0xB90C
{ CRC_K_CINS , Key_C_Ins , 0 }, // 0xBA0E
{ CRC_READGOTONEXTUNREAD , KK_ReadGotoNextUnread , KT_R }, // 0xBA34
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SPGUP , Key_S_PgUp , 0 }, // 0xBC5A
#endif
{ CRC_FILEABORT , KK_FileAbort , KT_F }, // 0xBCED
{ CRC_READCHANGETAGLINE , KK_ReadChangeTagline , KT_R }, // 0xBDD2
{ CRC_READQUOTEMSG , KK_ReadQuoteMsg , KT_R }, // 0xBE00
{ CRC_READCOPYMOVEFORWARD , KK_ReadCopyMoveForward , KT_R }, // 0xBFAF
{ CRC_READTOGGLEROT13 , KK_ReadToggleROT13 , KT_R }, // 0xC157
{ CRC_EDITTOGGLECASE , KK_EditToggleCase , KT_E }, // 0xC282
{ CRC_FILEGOTOLAST , KK_FileGotoLast , KT_F }, // 0xC40A
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SINS , Key_S_Ins , 0 }, // 0xC40B
#endif
{ CRC_AREASCANPM , KK_AreaScanPM , KT_A }, // 0xC4FF
{ CRC_READMSGEND , KK_ReadMsgEnd , KT_R }, // 0xC5AD
{ CRC_AREATOGGLE , KK_AreaToggle , KT_A }, // 0xC734
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SLEFT , Key_S_Lft , 0 }, // 0xC902
#endif
{ CRC_NODEGOTOLAST , KK_NodeGotoLast , KT_N }, // 0xCA13
{ CRC_FILEGOTOFIRST , KK_FileGotoFirst , KT_F }, // 0xCAD5
{ CRC_LISTTOGGLEBOOKMARK , KK_ListToggleBookMark , KT_M }, // 0xCFA0
{ CRC_READTOGGLEMARKREAD , KK_ReadToggleMarkRead , KT_R }, // 0xCFAE
{ CRC_LISTQUITNOW , KK_ListQuitNow , KT_M }, // 0xD037
{ CRC_FILEMARKALL , KK_FileMarkAll , KT_F }, // 0xD115
{ CRC_AREAWRITEGOLDLAST , KK_AreaWriteGoldlast , KT_A }, // 0xD353
{ CRC_LISTTOGGLEMARK , KK_ListToggleMark , KT_M }, // 0xD389
{ CRC_EDITTOUPPER , KK_EditToUpper , KT_E }, // 0xD3DD
{ CRC_FILEASKEXIT , KK_FileAskExit , KT_F }, // 0xD40C
{ CRC_EDITBLOCKDOWN , KK_EditBlockDown , KT_E }, // 0xD4E4
{ CRC_READMESSAGELIST , KK_ReadMessageList , KT_R }, // 0xD5D8
{ CRC_EDITGOUP , KK_EditGoUp , KT_E }, // 0xD6BA
{ CRC_EDITDOSSHELL , KK_EditDosShell , KT_E }, // 0xD6C5
{ CRC_EDITTOGGLEINSERT , KK_EditToggleInsert , KT_E }, // 0xD732
{ CRC_EDITKILLQUOTES , KK_EditKillQuotes , KT_E }, // 0xD821
{ CRC_FILESELECT , KK_FileSelect , KT_F }, // 0xD8D9
{ CRC_READDECREASEMARGIN , KK_ReadDecreaseMargin , KT_R }, // 0xD8EA
{ CRC_LISTASKEXIT , KK_ListAskExit , KT_M }, // 0xD922
{ CRC_AREACATCHUP , KK_AreaCatchUp , KT_A }, // 0xDA5C
{ CRC_READMOVEDIRQUOTEMSG , KK_ReadMoveDirQuoteMsg , KT_R }, // 0xDBC0
{ CRC_READGOTOREPLYPREV , KK_ReadGotoReplyPrev , KT_R }, // 0xDBE7
{ CRC_EDITANCHOR , KK_EditAnchor , KT_E }, // 0xDC07
{ CRC_FILEQUITNOW , KK_FileQuitNow , KT_F }, // 0xDD19
{ CRC_AREAINFO , KK_AreaInfo , KT_A }, // 0xDE54
{ CRC_EDITMAINMENU , KK_EditMainMenu , KT_E }, // 0xDE5D
{ CRC_AREASOUNDKILL , KK_AreaSoundkill , KT_A }, // 0xDFD3
{ CRC_EDITBLOCKUP , KK_EditBlockUp , KT_E }, // 0xE004
{ CRC_EDITGOBEGLINE , KK_EditGoBegLine , KT_E }, // 0xE045
{ CRC_READGOTONEXTMSG , KK_ReadGotoNextMsg , KT_R }, // 0xE0F1
{ CRC_EDITSPELLCHECK , KK_EditSpellCheck , KT_E }, // 0xE167
{ CRC_NODEMENU , KK_NodeMenu , KT_N }, // 0xE1B6
{ CRC_AREASCAN , KK_AreaScan , KT_A }, // 0xE440
{ CRC_EDITGOWORDLEFT , KK_EditGoWordLeft , KT_E }, // 0xE48C
{ CRC_READMOVECOMMENTMSG , KK_ReadMoveCommentMsg , KT_R }, // 0xE4E7
{ CRC_READGOTOREPLY1ST , KK_ReadGotoReply1st , KT_R }, // 0xE54F
{ CRC_READTOGGLEHEXDUMP , KK_ReadToggleHexdump , KT_R }, // 0xE6D5
{ CRC_NODEQUITNOW , KK_NodeQuitNow , KT_N }, // 0xE780
{ CRC_NODEGOTONEXT , KK_NodeGotoNext , KT_N }, // 0xE7F5
{ CRC_READMAKEUSERLIST , KK_ReadMakeUserlist , KT_R }, // 0xE8C6
{ CRC_EDITCLEARPASTEBUF , KK_EditClearPasteBuf , KT_E }, // 0xE8E4
{ CRC_K_AENTER , Key_A_Ent , 0 }, // 0xE921
{ CRC_READMARKINGOPTIONS , KK_ReadMarkingOptions , KT_R }, // 0xE97A
{ CRC_FILEGOTONEXT , KK_FileGotoNext , KT_F }, // 0xE9EC
{ CRC_EDITBLOCKLEFT , KK_EditBlockLeft , KT_E }, // 0xED1D
{ CRC_K_CUP , Key_C_Up , 0 }, // 0xEE6B
{ CRC_NODEASKEXIT , KK_NodeAskExit , KT_N }, // 0xEE95
{ CRC_READGOTOPREVAREA , KK_ReadGotoPrevArea , KT_R }, // 0xEECB
{ CRC_READFINDALL , KK_ReadFindAll , KT_R }, // 0xEF19
{ CRC_NODEDOSSHELL , KK_NodeDosShell , KT_N }, // 0xF084
#if not defined(__UNIX__) or defined(__USE_NCURSES__)
{ CRC_K_SDOWN , Key_S_Dwn , 0 }, // 0xF0FB
#endif
{ CRC_READCHANGEXLATIMPORT , KK_ReadChangeXlatImport , KT_R }, // 0xF169
{ CRC_READTOGGLESTYLES , KK_ReadToggleStyles , KT_R }, // 0xF47E
{ CRC_EDITBLOCKEND , KK_EditBlockEnd , KT_E }, // 0xF55B
{ CRC_EDITTABREVERSE , KK_EditTabReverse , KT_E }, // 0xF5B6
{ CRC_READUSERBASE , KK_ReadUserbase , KT_R }, // 0xF736
{ CRC_K_RIGHT , Key_Rgt , 0 }, // 0xF78D
{ CRC_EDITIMPORTQUOTEBUF , KK_EditImportQuotebuf , KT_E }, // 0xF797
{ CRC_READMACRO , KK_ReadMacro , KT_R }, // 0xF7D8
{ CRC_NODEMAINMENU , KK_NodeMainMenu , KT_N }, // 0xF81C
{ CRC_FILEMARK , KK_FileMark , KT_F }, // 0xF828
{ CRC_EDITCLEARDELETEBUF , KK_EditClearDeleteBuf , KT_E }, // 0xF8DE
{ CRC_READCHANGEMSG , KK_ReadChangeMsg , KT_R }, // 0xF99F
{ CRC_K_ABSPACE , Key_A_BS , 0 }, // 0xF9D7
{ CRC_EDITCUT , KK_EditCut , KT_E }, // 0xFAE6
{ CRC_K_CF9 , Key_C_F9 , 0 }, // 0xFD02
{ CRC_K_CF8 , Key_C_F8 , 0 }, // 0xFD03
{ CRC_K_CF3 , Key_C_F3 , 0 }, // 0xFD08
{ CRC_K_CF2 , Key_C_F2 , 0 }, // 0xFD09
{ CRC_K_CF1 , Key_C_F1 , 0 }, // 0xFD0A
{ CRC_K_CF7 , Key_C_F7 , 0 }, // 0xFD0C
{ CRC_K_CF6 , Key_C_F6 , 0 }, // 0xFD0D
{ CRC_K_CF5 , Key_C_F5 , 0 }, // 0xFD0E
{ CRC_K_CF4 , Key_C_F4 , 0 }, // 0xFD0F
{ CRC_READCHANGEORIGIN , KK_ReadChangeOrigin , KT_R }, // 0xFD2C
{ CRC_FILEDOSSHELL , KK_FileDosShell , KT_F }, // 0xFE9D
{ CRC_EDITLOOKUPDEST , KK_EditLookupDest , KT_E }, // 0xFEC4
{ CRC_AREAMACRO , KK_AreaMacro , KT_A }, // 0xFFA7
};
// ------------------------------------------------------------------
static gkey SwitchKeyDefs(word crc, int* type) {
uint left,right,middle;
word cur;
*type = 0;
left = 0;
right = (sizeof(globalkeys)/sizeof(tglobalkey))-1;
if((crc < globalkeys[left].crc_token) or (crc > globalkeys[right].crc_token))
return 0;
do {
middle = (left + right)/2;
cur = globalkeys[middle].crc_token;
if(crc < cur)
right = middle - 1;
else if(crc > cur)
left = middle + 1;
else {
*type = globalkeys[middle].keytype;
return globalkeys[middle].keyval;
}
} while(left <= right);
return 0;
}
// ------------------------------------------------------------------
void KeyCmdAdd(gkey keycmd, gkey keyval, int keytype) {
if(keyval <= 0xFF)
keyval |= (gkey)(scancode(keyval) << 8);
list<CmdKey>::iterator tmp = CFG->cmdkey.begin();
if(CFG->switches.get(keybdefaults)) {
while(tmp != CFG->cmdkey.end()) {
if(tmp->type == keytype) {
if(tmp->key == keyval) {
tmp->cmd = keycmd;
return;
}
}
tmp++;
}
}
CmdKey tmp2;
tmp2.key = keyval;
tmp2.cmd = keycmd;
tmp2.type = keytype;
CFG->cmdkey.push_back(tmp2);
}
// ------------------------------------------------------------------
void RunMacro(Macro* m) {
gkey* mac = m->buf;
while(*mac) {
kbput(*mac);
mac++;
}
}
// ------------------------------------------------------------------
static void PlayMacro() {
RunMacro(&CFG->macro[0xFFFF-gkbd.curronkey->pass]);
}
// ------------------------------------------------------------------
static void SetKeybDefaults() {
// Setup default keyset
CmdKey* tmp = DefaultKeyset;
int keys = (sizeof(DefaultKeyset) / sizeof(CmdKey)) - 1;
int k = 0;
while(k < keys) {
if(tmp->key < 0xFF)
tmp->key = (gkey)tolower(tmp->key);
KeyCmdAdd(tmp->cmd, tmp->key, tmp->type);
tmp++;
k++;
}
}
// ------------------------------------------------------------------
bool CmdKeyCmp(CmdKey a, CmdKey b) {
int cmp = CmpV(a.type, b.type);
if(cmp != 0)
return (cmp < 0);
return (CmpV(a.key, b.key) < 0);
}
// ------------------------------------------------------------------
int ReadKeysCfg(int force) {
byte ch;
gkey* mac;
FILE *ifp;
char* ptr;
char* ptr2;
int keytype;
int n;
char buf[1024];
gkey keyval=0, keycmd;
uint line=0;
const char* cfg = AddPath(CFG->goldpath, CFG->keyscfg);
ifp = fsopen(cfg, "rt", CFG->sharemode);
if(ifp) {
const char* cfgname = strrchr(cfg, '\\');
cfgname = cfgname ? cfgname+1 : cfg;
if(not quiet)
cout << "* Reading " << cfg << endl;
CFG->macro.clear();
CFG->cmdkey.clear();
if(CFG->switches.get(keybdefaults))
SetKeybDefaults();
while(fgets(buf, sizeof(buf), ifp)) {
line++;
ptr = strskip_wht(buf);
if(*ptr == ';' or strblank(ptr))
continue;
ptr2 = ptr;
ptr = strskip_txt(ptr);
*ptr++ = NUL;
keycmd = SwitchKeyDefs(strCrc16(strupr(ptr2)), &keytype);
if(keycmd) {
if(keytype) {
cout << "* " << cfgname << ": Invalid key \"" << ptr2 << "\" in line " << line << "." << endl;
SayBibi();
cfgerrors++;
continue;
}
keyval = keycmd;
}
else { // Either straight Key or $Key
if(*ptr2 == '$') {
uint _keyval = 0;
sscanf(ptr2+1, "%4x", &_keyval);
keyval = (gkey)_keyval;
}
else if(strlen(ptr2) == 1)
keyval = (gkey)tolower(*ptr2); // Always convert to lowercase internally
else {
cout << "* " << cfgname << ": Invalid key \"" << ptr2 << "\" in line " << line << "." << endl;
SayBibi();
cfgerrors++;
continue;
}
}
ptr = strskip_wht(ptr);
ptr2 = ptr;
ptr = strskip_txt(ptr);
*ptr++ = 0;
keycmd = SwitchKeyDefs(strCrc16(strupr(ptr2)), &keytype);
if(keycmd) {
if((keycmd >= KK_Macro) and (keycmd <= KK_ReadMacro)) {
Macro tmp2;
memset(&tmp2, 0, sizeof(Macro));
n = 0;
ptr = strskip_wht(ptr);
while(*ptr) {
if(*ptr == '\"') { // Start of literal string
ptr++;
while((*ptr != '\"') and (n < (sizeof(tmp2.buf)/sizeof(gkey)))) {
ch = *ptr++;
tmp2.buf[n++] = (gkey)(ch | (scancode(ch) << 8));
}
*ptr++ = NUL;
}
else {
ptr2 = ptr;
ptr = strskip_txt(ptr);
*ptr++ = NUL;
int tmpkt;
keycmd = SwitchKeyDefs(strCrc16(strupr(ptr2)), &tmpkt);
if(keycmd) {
if(n < (sizeof(tmp2.buf)/sizeof(gkey)))
tmp2.buf[n++] = (gkey)keycmd;
}
else {
cout << "* " << cfgname << ": Invalid key \"" << ptr2 << "\" in line " << line << "." << endl;
SayBibi();
cfgerrors++;
continue;
}
}
ptr = strskip_wht(ptr);
}
if(keyval <= 0xFF)
keyval |= (gkey)(scancode(keyval) << 8);
tmp2.key = (gkey)keyval;
tmp2.type = keytype;
CFG->macro.push_back(tmp2);
// delete overlayed (non-macro) key definition
list<CmdKey>::iterator tmp = CFG->cmdkey.begin();
while(tmp != CFG->cmdkey.end()) {
if(tmp->type == keytype) {
if(tmp->key == keyval) {
// delete it by setting type to an invalid value
tmp->type = 0xFF;
break;
}
}
tmp++;
}
}
else if(keytype)
KeyCmdAdd(keycmd, keyval, keytype);
else {
cout << "* " << cfgname << ": Invalid key \"" << ptr2 << "\" in line " << line << "." << endl;
SayBibi();
cfgerrors++;
continue;
}
}
else {
cout << "* " << cfgname << ": Invalid key \"" << ptr2 << "\" in line " << line << "." << endl;
SayBibi();
cfgerrors++;
continue;
}
}
fclose(ifp);
}
// Setup default keyset when no keys are defined
if(CFG->cmdkey.empty())
SetKeybDefaults();
// Prepare keyboard and macro tables for binary searching
CFG->cmdkey.sort(CmdKeyCmp);
// Count keys
list<CmdKey>::iterator ck = CFG->cmdkey.begin();
while(ck != CFG->cmdkey.end()) {
switch(ck->type) {
case KT_A: AreaKeys++; if(AreaKeys == 1) AreaKey = ck; break;
case KT_E: EditKeys++; if(EditKeys == 1) EditKey = ck; break;
case KT_F: FileKeys++; if(FileKeys == 1) FileKey = ck; break;
case KT_G: break;
case KT_M: ListKeys++; if(ListKeys == 1) ListKey = ck; break;
case KT_N: NodeKeys++; if(NodeKeys == 1) NodeKey = ck; break;
case KT_R: ReadKeys++; if(ReadKeys == 1) ReadKey = ck; break;
}
ck++;
}
// Assign global macros
vector<Macro>::iterator k;
for(k=CFG->macro.begin(), n=0; k != CFG->macro.end(); k++, n++) {
if(k->type == 0) {
if((k->key == KK_Auto) or (k->key == 0x0300)) {
// Start automacro
mac = k->buf;
while(*mac) {
kbput(*mac);
mac++;
}
}
else {
setonkey(k->key, PlayMacro, (gkey)(0xFFFF-n));
}
}
}
return true;
}
// ------------------------------------------------------------------