hedgewars/uKeyNames.pas
changeset 14832 769189675b6c
child 14843 9f6b650a6812
equal deleted inserted replaced
14829:f56936207a65 14832:769189675b6c
       
     1 (*
       
     2  * Hedgewars, a free turn based strategy game
       
     3  * Copyright (c) 2004-2019 Andrey Korotaev <unC0Rr@gmail.com>
       
     4  *
       
     5  * This program is free software; you can redistribute it and/or modify
       
     6  * it under the terms of the GNU General Public License as published by
       
     7  * the Free Software Foundation; version 2 of the License
       
     8  *
       
     9  * This program is distributed in the hope that it will be useful,
       
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    12  * GNU General Public License for more details.
       
    13  *
       
    14  * You should have received a copy of the GNU General Public License
       
    15  * along with this program; if not, write to the Free Software
       
    16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
       
    17  *)
       
    18 
       
    19 unit uKeyNames;
       
    20 interface
       
    21 uses uConsts;
       
    22 
       
    23 type TKeyNames = array [0..cKeyMaxIndex] of string[15];
       
    24 
       
    25 procedure populateKeyNames(var KeyArray: TKeyNames);
       
    26 
       
    27 implementation
       
    28 
       
    29 procedure populateKeyNames(var KeyArray: TKeyNames);
       
    30 begin
       
    31 (*
       
    32  This is a mapping from SDL scancodes to Hedgewars key identifiers.
       
    33  Hedgewars key identifiers are strings with a maximum length of 15
       
    34  and are used internally to identify keys in the engine and in settings.ini.
       
    35 *)
       
    36     KeyArray[4] := 'a';
       
    37     KeyArray[5] := 'b';
       
    38     KeyArray[6] := 'c';
       
    39     KeyArray[7] := 'd';
       
    40     KeyArray[8] := 'e';
       
    41     KeyArray[9] := 'f';
       
    42     KeyArray[10] := 'g';
       
    43     KeyArray[11] := 'h';
       
    44     KeyArray[12] := 'i';
       
    45     KeyArray[13] := 'j';
       
    46     KeyArray[14] := 'k';
       
    47     KeyArray[15] := 'l';
       
    48     KeyArray[16] := 'm';
       
    49     KeyArray[17] := 'n';
       
    50     KeyArray[18] := 'o';
       
    51     KeyArray[19] := 'p';
       
    52     KeyArray[20] := 'q';
       
    53     KeyArray[21] := 'r';
       
    54     KeyArray[22] := 's';
       
    55     KeyArray[23] := 't';
       
    56     KeyArray[24] := 'u';
       
    57     KeyArray[25] := 'v';
       
    58     KeyArray[26] := 'w';
       
    59     KeyArray[27] := 'x';
       
    60     KeyArray[28] := 'y';
       
    61     KeyArray[29] := 'z';
       
    62     KeyArray[30] := '1';
       
    63     KeyArray[31] := '2';
       
    64     KeyArray[32] := '3';
       
    65     KeyArray[33] := '4';
       
    66     KeyArray[34] := '5';
       
    67     KeyArray[35] := '6';
       
    68     KeyArray[36] := '7';
       
    69     KeyArray[37] := '8';
       
    70     KeyArray[38] := '9';
       
    71     KeyArray[39] := '0';
       
    72     KeyArray[40] := 'return';
       
    73     KeyArray[41] := 'escape';
       
    74     KeyArray[42] := 'backspace';
       
    75     KeyArray[43] := 'tab';
       
    76     KeyArray[44] := 'space';
       
    77     KeyArray[45] := '-';
       
    78     KeyArray[46] := '=';
       
    79     KeyArray[47] := '[';
       
    80     KeyArray[48] := ']';
       
    81     KeyArray[49] := '\';
       
    82     KeyArray[50] := '#';
       
    83     KeyArray[51] := ';';
       
    84     KeyArray[52] := '''';
       
    85     KeyArray[53] := '`';
       
    86     KeyArray[54] := ',';
       
    87     KeyArray[55] := '.';
       
    88     KeyArray[56] := '/';
       
    89     KeyArray[57] := 'capslock';
       
    90     KeyArray[58] := 'f1';
       
    91     KeyArray[59] := 'f2';
       
    92     KeyArray[60] := 'f3';
       
    93     KeyArray[61] := 'f4';
       
    94     KeyArray[62] := 'f5';
       
    95     KeyArray[63] := 'f6';
       
    96     KeyArray[64] := 'f7';
       
    97     KeyArray[65] := 'f8';
       
    98     KeyArray[66] := 'f9';
       
    99     KeyArray[67] := 'f10';
       
   100     KeyArray[68] := 'f11';
       
   101     KeyArray[69] := 'f12';
       
   102     KeyArray[70] := 'printscreen';
       
   103     KeyArray[71] := 'scrolllock';
       
   104     KeyArray[72] := 'pause';
       
   105     KeyArray[73] := 'insert';
       
   106     KeyArray[74] := 'home';
       
   107     KeyArray[75] := 'pageup';
       
   108     KeyArray[76] := 'delete';
       
   109     KeyArray[77] := 'end';
       
   110     KeyArray[78] := 'pagedown';
       
   111     KeyArray[79] := 'right';
       
   112     KeyArray[80] := 'left';
       
   113     KeyArray[81] := 'down';
       
   114     KeyArray[82] := 'up';
       
   115     KeyArray[83] := 'numlock';
       
   116     KeyArray[84] := 'keypad_/';
       
   117     KeyArray[85] := 'keypad_*';
       
   118     KeyArray[86] := 'keypad_-';
       
   119     KeyArray[87] := 'keypad_+';
       
   120     KeyArray[88] := 'keypad_enter';
       
   121     KeyArray[89] := 'keypad_1';
       
   122     KeyArray[90] := 'keypad_2';
       
   123     KeyArray[91] := 'keypad_3';
       
   124     KeyArray[92] := 'keypad_4';
       
   125     KeyArray[93] := 'keypad_5';
       
   126     KeyArray[94] := 'keypad_6';
       
   127     KeyArray[95] := 'keypad_7';
       
   128     KeyArray[96] := 'keypad_8';
       
   129     KeyArray[97] := 'keypad_9';
       
   130     KeyArray[98] := 'keypad_0';
       
   131     KeyArray[99] := 'keypad_.';
       
   132     KeyArray[101] := 'menu';
       
   133     KeyArray[102] := 'power';
       
   134     KeyArray[103] := 'keypad_=';
       
   135     KeyArray[104] := 'f13';
       
   136     KeyArray[105] := 'f14';
       
   137     KeyArray[106] := 'f15';
       
   138     KeyArray[107] := 'f16';
       
   139     KeyArray[108] := 'f17';
       
   140     KeyArray[109] := 'f18';
       
   141     KeyArray[110] := 'f19';
       
   142     KeyArray[111] := 'f20';
       
   143     KeyArray[112] := 'f21';
       
   144     KeyArray[113] := 'f22';
       
   145     KeyArray[114] := 'f23';
       
   146     KeyArray[115] := 'f24';
       
   147     KeyArray[116] := 'execute';
       
   148     KeyArray[117] := 'help';
       
   149     KeyArray[118] := 'menu';
       
   150     KeyArray[119] := 'select';
       
   151     KeyArray[120] := 'stop';
       
   152     KeyArray[121] := 'again';
       
   153     KeyArray[122] := 'undo';
       
   154     KeyArray[123] := 'cut';
       
   155     KeyArray[124] := 'copy';
       
   156     KeyArray[125] := 'paste';
       
   157     KeyArray[126] := 'find';
       
   158     KeyArray[127] := 'mute';
       
   159     KeyArray[128] := 'volumeup';
       
   160     KeyArray[129] := 'volumedown';
       
   161     KeyArray[133] := 'keypad_,';
       
   162     KeyArray[134] := 'keypad_=_(as400';
       
   163     KeyArray[153] := 'alterase';
       
   164     KeyArray[154] := 'sysreq';
       
   165     KeyArray[155] := 'cancel';
       
   166     KeyArray[156] := 'clear';
       
   167     KeyArray[157] := 'prior';
       
   168     KeyArray[158] := 'return2';
       
   169     KeyArray[159] := 'separator';
       
   170     KeyArray[160] := 'out';
       
   171     KeyArray[161] := 'oper';
       
   172     KeyArray[162] := 'clear_/_again';
       
   173     KeyArray[163] := 'crsel';
       
   174     KeyArray[164] := 'exsel';
       
   175     KeyArray[176] := 'keypad_00';
       
   176     KeyArray[177] := 'keypad_000';
       
   177     KeyArray[178] := 'thousandssepara';
       
   178     KeyArray[179] := 'decimalseparato';
       
   179     KeyArray[180] := 'currencyunit';
       
   180     KeyArray[181] := 'currencysubunit';
       
   181     KeyArray[182] := 'keypad_(';
       
   182     KeyArray[183] := 'keypad_)';
       
   183     KeyArray[184] := 'keypad_{';
       
   184     KeyArray[185] := 'keypad_}';
       
   185     KeyArray[186] := 'keypad_tab';
       
   186     KeyArray[187] := 'keypad_backspac';
       
   187     KeyArray[188] := 'keypad_a';
       
   188     KeyArray[189] := 'keypad_b';
       
   189     KeyArray[190] := 'keypad_c';
       
   190     KeyArray[191] := 'keypad_d';
       
   191     KeyArray[192] := 'keypad_e';
       
   192     KeyArray[193] := 'keypad_f';
       
   193     KeyArray[194] := 'keypad_xor';
       
   194     KeyArray[195] := 'keypad_^';
       
   195     KeyArray[196] := 'keypad_%';
       
   196     KeyArray[197] := 'keypad_<';
       
   197     KeyArray[198] := 'keypad_>';
       
   198     KeyArray[199] := 'keypad_&';
       
   199     KeyArray[200] := 'keypad_&&';
       
   200     KeyArray[201] := 'keypad_|';
       
   201     KeyArray[202] := 'keypad_||';
       
   202     KeyArray[203] := 'keypad_:';
       
   203     KeyArray[204] := 'keypad_#';
       
   204     KeyArray[205] := 'keypad_space';
       
   205     KeyArray[206] := 'keypad_@';
       
   206     KeyArray[207] := 'keypad_!';
       
   207     KeyArray[208] := 'keypad_memstore';
       
   208     KeyArray[209] := 'keypad_memrecal';
       
   209     KeyArray[210] := 'keypad_memclear';
       
   210     KeyArray[211] := 'keypad_memadd';
       
   211     KeyArray[212] := 'keypad_memsubtr';
       
   212     KeyArray[213] := 'keypad_memmulti';
       
   213     KeyArray[214] := 'keypad_memdivid';
       
   214     KeyArray[215] := 'keypad_+/-';
       
   215     KeyArray[216] := 'keypad_clear';
       
   216     KeyArray[217] := 'keypad_clearent';
       
   217     KeyArray[218] := 'keypad_binary';
       
   218     KeyArray[219] := 'keypad_octal';
       
   219     KeyArray[220] := 'keypad_decimal';
       
   220     KeyArray[221] := 'keypad_hexadeci';
       
   221     KeyArray[224] := 'left_ctrl';
       
   222     KeyArray[225] := 'left_shift';
       
   223     KeyArray[226] := 'left_alt';
       
   224     KeyArray[227] := 'left_gui';
       
   225     KeyArray[228] := 'right_ctrl';
       
   226     KeyArray[229] := 'right_shift';
       
   227     KeyArray[230] := 'right_alt';
       
   228     KeyArray[231] := 'right_gui';
       
   229     KeyArray[257] := 'modeswitch';
       
   230     KeyArray[258] := 'audionext';
       
   231     KeyArray[259] := 'audioprev';
       
   232     KeyArray[260] := 'audiostop';
       
   233     KeyArray[261] := 'audioplay';
       
   234     KeyArray[262] := 'audiomute';
       
   235     KeyArray[263] := 'mediaselect';
       
   236     KeyArray[264] := 'www';
       
   237     KeyArray[265] := 'mail';
       
   238     KeyArray[266] := 'calculator';
       
   239     KeyArray[267] := 'computer';
       
   240     KeyArray[268] := 'ac_search';
       
   241     KeyArray[269] := 'ac_home';
       
   242     KeyArray[270] := 'ac_back';
       
   243     KeyArray[271] := 'ac_forward';
       
   244     KeyArray[272] := 'ac_stop';
       
   245     KeyArray[273] := 'ac_refresh';
       
   246     KeyArray[274] := 'ac_bookmarks';
       
   247     KeyArray[275] := 'brightnessdown';
       
   248     KeyArray[276] := 'brightnessup';
       
   249     KeyArray[277] := 'displayswitch';
       
   250     KeyArray[278] := 'kbdillumtoggle';
       
   251     KeyArray[279] := 'kbdillumdown';
       
   252     KeyArray[280] := 'kbdillumup';
       
   253     KeyArray[281] := 'eject';
       
   254     KeyArray[282] := 'sleep';
       
   255     KeyArray[283] := 'app1';
       
   256     KeyArray[284] := 'app2';
       
   257     KeyArray[285] := 'audiorewind';
       
   258     KeyArray[286] := 'audiofastforwar';
       
   259 
       
   260 end;
       
   261 
       
   262 (*
       
   263 The Hedgewars key identifiers were obtained with the following algorithm:
       
   264 
       
   265 Basically:
       
   266 - For each SDL scancode, do:
       
   267    - Take the printable SDL scancode key name (with SDL_GetScancodeName)
       
   268    - Replace spaces with underscores
       
   269    - Lowercase it
       
   270    - Cap string length to 15 characters
       
   271 - Manually fix duplicates
       
   272 
       
   273 See also:
       
   274 
       
   275 https://wiki.libsdl.org/SDLScancodeLookup
       
   276 https://wiki.libsdl.org/SDL_Scancode
       
   277 
       
   278 NOTE: For compability reasons, existing identifiers should not be renamed.
       
   279 
       
   280 Old code snippet:
       
   281 
       
   282     for i := 0 to cKeyMaxIndex - 5 do
       
   283         begin
       
   284         s := shortstring(SDL_GetScancodeName(TSDL_Scancode(i)));
       
   285 
       
   286         for t := 1 to Length(s) do
       
   287             if s[t] = ' ' then
       
   288                 s[t] := '_';
       
   289         KeyArray[i] := LowerCase(s);
       
   290         if s = '''' then
       
   291             WriteLnToConsole('    KeyArray['+IntToStr(i)+']'+' := '';')
       
   292         else if s <> '' then
       
   293             WriteLnToConsole('    KeyArray[SDL_SCANCODE_'+KeyArray[i]+']'+' := '''+KeyArray[i]+''';');
       
   294         end;
       
   295 *)
       
   296 
       
   297 end.