hedgewars/uKeyNames.pas
changeset 14844 9e8c201eae9d
parent 14843 9f6b650a6812
equal deleted inserted replaced
14843:9f6b650a6812 14844:9e8c201eae9d
    25 procedure populateKeyNames(var KeyArray: TKeyNames);
    25 procedure populateKeyNames(var KeyArray: TKeyNames);
    26 // procedure generateKeyNames(); // DEBUG (see below)
    26 // procedure generateKeyNames(); // DEBUG (see below)
    27 
    27 
    28 implementation
    28 implementation
    29 
    29 
       
    30 uses uPhysFSLayer, uUtils, uVariables, uTypes, uConsole;
       
    31 
    30 procedure populateKeyNames(var KeyArray: TKeyNames);
    32 procedure populateKeyNames(var KeyArray: TKeyNames);
       
    33 var f: PfsFile;
       
    34     l, keyname, tmp: shortstring;
       
    35     i, scancode: LongInt;
    31 begin
    36 begin
    32 (*
    37 (*
    33  This is a mapping from SDL scancodes to Hedgewars key identifiers.
    38  KeyArray is a mapping from SDL scancodes to Hedgewars key identifiers.
    34  Hedgewars key identifiers are strings with a maximum length of 15
    39  Hedgewars key identifiers are strings with a maximum length of 15
    35  and are used internally to identify keys in the engine and in settings.ini.
    40  and are used internally to identify keys in the engine and in settings.ini.
    36 *)
    41 *)
    37     KeyArray[4] := 'a';
       
    38     KeyArray[5] := 'b';
       
    39     KeyArray[6] := 'c';
       
    40     KeyArray[7] := 'd';
       
    41     KeyArray[8] := 'e';
       
    42     KeyArray[9] := 'f';
       
    43     KeyArray[10] := 'g';
       
    44     KeyArray[11] := 'h';
       
    45     KeyArray[12] := 'i';
       
    46     KeyArray[13] := 'j';
       
    47     KeyArray[14] := 'k';
       
    48     KeyArray[15] := 'l';
       
    49     KeyArray[16] := 'm';
       
    50     KeyArray[17] := 'n';
       
    51     KeyArray[18] := 'o';
       
    52     KeyArray[19] := 'p';
       
    53     KeyArray[20] := 'q';
       
    54     KeyArray[21] := 'r';
       
    55     KeyArray[22] := 's';
       
    56     KeyArray[23] := 't';
       
    57     KeyArray[24] := 'u';
       
    58     KeyArray[25] := 'v';
       
    59     KeyArray[26] := 'w';
       
    60     KeyArray[27] := 'x';
       
    61     KeyArray[28] := 'y';
       
    62     KeyArray[29] := 'z';
       
    63     KeyArray[30] := '1';
       
    64     KeyArray[31] := '2';
       
    65     KeyArray[32] := '3';
       
    66     KeyArray[33] := '4';
       
    67     KeyArray[34] := '5';
       
    68     KeyArray[35] := '6';
       
    69     KeyArray[36] := '7';
       
    70     KeyArray[37] := '8';
       
    71     KeyArray[38] := '9';
       
    72     KeyArray[39] := '0';
       
    73     KeyArray[40] := 'return';
       
    74     KeyArray[41] := 'escape';
       
    75     KeyArray[42] := 'backspace';
       
    76     KeyArray[43] := 'tab';
       
    77     KeyArray[44] := 'space';
       
    78     KeyArray[45] := '-';
       
    79     KeyArray[46] := '=';
       
    80     KeyArray[47] := '[';
       
    81     KeyArray[48] := ']';
       
    82     KeyArray[49] := '\';
       
    83     KeyArray[50] := '#';
       
    84     KeyArray[51] := ';';
       
    85     KeyArray[52] := '''';
       
    86     KeyArray[53] := '`';
       
    87     KeyArray[54] := ',';
       
    88     KeyArray[55] := '.';
       
    89     KeyArray[56] := '/';
       
    90     KeyArray[57] := 'capslock';
       
    91     KeyArray[58] := 'f1';
       
    92     KeyArray[59] := 'f2';
       
    93     KeyArray[60] := 'f3';
       
    94     KeyArray[61] := 'f4';
       
    95     KeyArray[62] := 'f5';
       
    96     KeyArray[63] := 'f6';
       
    97     KeyArray[64] := 'f7';
       
    98     KeyArray[65] := 'f8';
       
    99     KeyArray[66] := 'f9';
       
   100     KeyArray[67] := 'f10';
       
   101     KeyArray[68] := 'f11';
       
   102     KeyArray[69] := 'f12';
       
   103     KeyArray[70] := 'printscreen';
       
   104     KeyArray[71] := 'scrolllock';
       
   105     KeyArray[72] := 'pause';
       
   106     KeyArray[73] := 'insert';
       
   107     KeyArray[74] := 'home';
       
   108     KeyArray[75] := 'pageup';
       
   109     KeyArray[76] := 'delete';
       
   110     KeyArray[77] := 'end';
       
   111     KeyArray[78] := 'pagedown';
       
   112     KeyArray[79] := 'right';
       
   113     KeyArray[80] := 'left';
       
   114     KeyArray[81] := 'down';
       
   115     KeyArray[82] := 'up';
       
   116     KeyArray[83] := 'numlock';
       
   117     KeyArray[84] := 'keypad_/';
       
   118     KeyArray[85] := 'keypad_*';
       
   119     KeyArray[86] := 'keypad_-';
       
   120     KeyArray[87] := 'keypad_+';
       
   121     KeyArray[88] := 'keypad_enter';
       
   122     KeyArray[89] := 'keypad_1';
       
   123     KeyArray[90] := 'keypad_2';
       
   124     KeyArray[91] := 'keypad_3';
       
   125     KeyArray[92] := 'keypad_4';
       
   126     KeyArray[93] := 'keypad_5';
       
   127     KeyArray[94] := 'keypad_6';
       
   128     KeyArray[95] := 'keypad_7';
       
   129     KeyArray[96] := 'keypad_8';
       
   130     KeyArray[97] := 'keypad_9';
       
   131     KeyArray[98] := 'keypad_0';
       
   132     KeyArray[99] := 'keypad_.';
       
   133     KeyArray[101] := 'menu';
       
   134     KeyArray[102] := 'power';
       
   135     KeyArray[103] := 'keypad_=';
       
   136     KeyArray[104] := 'f13';
       
   137     KeyArray[105] := 'f14';
       
   138     KeyArray[106] := 'f15';
       
   139     KeyArray[107] := 'f16';
       
   140     KeyArray[108] := 'f17';
       
   141     KeyArray[109] := 'f18';
       
   142     KeyArray[110] := 'f19';
       
   143     KeyArray[111] := 'f20';
       
   144     KeyArray[112] := 'f21';
       
   145     KeyArray[113] := 'f22';
       
   146     KeyArray[114] := 'f23';
       
   147     KeyArray[115] := 'f24';
       
   148     KeyArray[116] := 'execute';
       
   149     KeyArray[117] := 'help';
       
   150     KeyArray[118] := 'menu';
       
   151     KeyArray[119] := 'select';
       
   152     KeyArray[120] := 'stop';
       
   153     KeyArray[121] := 'again';
       
   154     KeyArray[122] := 'undo';
       
   155     KeyArray[123] := 'cut';
       
   156     KeyArray[124] := 'copy';
       
   157     KeyArray[125] := 'paste';
       
   158     KeyArray[126] := 'find';
       
   159     KeyArray[127] := 'mute';
       
   160     KeyArray[128] := 'volumeup';
       
   161     KeyArray[129] := 'volumedown';
       
   162     KeyArray[133] := 'keypad_,';
       
   163     KeyArray[134] := 'keypad_=_(as400';
       
   164     KeyArray[153] := 'alterase';
       
   165     KeyArray[154] := 'sysreq';
       
   166     KeyArray[155] := 'cancel';
       
   167     KeyArray[156] := 'clear';
       
   168     KeyArray[157] := 'prior';
       
   169     KeyArray[158] := 'return2';
       
   170     KeyArray[159] := 'separator';
       
   171     KeyArray[160] := 'out';
       
   172     KeyArray[161] := 'oper';
       
   173     KeyArray[162] := 'clear_/_again';
       
   174     KeyArray[163] := 'crsel';
       
   175     KeyArray[164] := 'exsel';
       
   176     KeyArray[176] := 'keypad_00';
       
   177     KeyArray[177] := 'keypad_000';
       
   178     KeyArray[178] := 'thousandssepara';
       
   179     KeyArray[179] := 'decimalseparato';
       
   180     KeyArray[180] := 'currencyunit';
       
   181     KeyArray[181] := 'currencysubunit';
       
   182     KeyArray[182] := 'keypad_(';
       
   183     KeyArray[183] := 'keypad_)';
       
   184     KeyArray[184] := 'keypad_{';
       
   185     KeyArray[185] := 'keypad_}';
       
   186     KeyArray[186] := 'keypad_tab';
       
   187     KeyArray[187] := 'keypad_backspac';
       
   188     KeyArray[188] := 'keypad_a';
       
   189     KeyArray[189] := 'keypad_b';
       
   190     KeyArray[190] := 'keypad_c';
       
   191     KeyArray[191] := 'keypad_d';
       
   192     KeyArray[192] := 'keypad_e';
       
   193     KeyArray[193] := 'keypad_f';
       
   194     KeyArray[194] := 'keypad_xor';
       
   195     KeyArray[195] := 'keypad_^';
       
   196     KeyArray[196] := 'keypad_%';
       
   197     KeyArray[197] := 'keypad_<';
       
   198     KeyArray[198] := 'keypad_>';
       
   199     KeyArray[199] := 'keypad_&';
       
   200     KeyArray[200] := 'keypad_&&';
       
   201     KeyArray[201] := 'keypad_|';
       
   202     KeyArray[202] := 'keypad_||';
       
   203     KeyArray[203] := 'keypad_:';
       
   204     KeyArray[204] := 'keypad_#';
       
   205     KeyArray[205] := 'keypad_space';
       
   206     KeyArray[206] := 'keypad_@';
       
   207     KeyArray[207] := 'keypad_!';
       
   208     KeyArray[208] := 'keypad_memstore';
       
   209     KeyArray[209] := 'keypad_memrecal';
       
   210     KeyArray[210] := 'keypad_memclear';
       
   211     KeyArray[211] := 'keypad_memadd';
       
   212     KeyArray[212] := 'keypad_memsubtr';
       
   213     KeyArray[213] := 'keypad_memmulti';
       
   214     KeyArray[214] := 'keypad_memdivid';
       
   215     KeyArray[215] := 'keypad_+/-';
       
   216     KeyArray[216] := 'keypad_clear';
       
   217     KeyArray[217] := 'keypad_clearent';
       
   218     KeyArray[218] := 'keypad_binary';
       
   219     KeyArray[219] := 'keypad_octal';
       
   220     KeyArray[220] := 'keypad_decimal';
       
   221     KeyArray[221] := 'keypad_hexadeci';
       
   222     KeyArray[224] := 'left_ctrl';
       
   223     KeyArray[225] := 'left_shift';
       
   224     KeyArray[226] := 'left_alt';
       
   225     KeyArray[227] := 'left_gui';
       
   226     KeyArray[228] := 'right_ctrl';
       
   227     KeyArray[229] := 'right_shift';
       
   228     KeyArray[230] := 'right_alt';
       
   229     KeyArray[231] := 'right_gui';
       
   230     KeyArray[257] := 'modeswitch';
       
   231     KeyArray[258] := 'audionext';
       
   232     KeyArray[259] := 'audioprev';
       
   233     KeyArray[260] := 'audiostop';
       
   234     KeyArray[261] := 'audioplay';
       
   235     KeyArray[262] := 'audiomute';
       
   236     KeyArray[263] := 'mediaselect';
       
   237     KeyArray[264] := 'www';
       
   238     KeyArray[265] := 'mail';
       
   239     KeyArray[266] := 'calculator';
       
   240     KeyArray[267] := 'computer';
       
   241     KeyArray[268] := 'ac_search';
       
   242     KeyArray[269] := 'ac_home';
       
   243     KeyArray[270] := 'ac_back';
       
   244     KeyArray[271] := 'ac_forward';
       
   245     KeyArray[272] := 'ac_stop';
       
   246     KeyArray[273] := 'ac_refresh';
       
   247     KeyArray[274] := 'ac_bookmarks';
       
   248     KeyArray[275] := 'brightnessdown';
       
   249     KeyArray[276] := 'brightnessup';
       
   250     KeyArray[277] := 'displayswitch';
       
   251     KeyArray[278] := 'kbdillumtoggle';
       
   252     KeyArray[279] := 'kbdillumdown';
       
   253     KeyArray[280] := 'kbdillumup';
       
   254     KeyArray[281] := 'eject';
       
   255     KeyArray[282] := 'sleep';
       
   256     KeyArray[283] := 'app1';
       
   257     KeyArray[284] := 'app2';
       
   258     KeyArray[285] := 'audiorewind';
       
   259     KeyArray[286] := 'audiofastforwar';
       
   260 
    42 
   261     // generateKeyNames(); // DEBUG (see below)
    43 (* Key identifiers are read from an RFC 4180-compliant CSV file.
       
    44 - 1st column: SDL scancode
       
    45 - 2nd column: Hedgewars key ID *)
       
    46 if pfsExists(cPathz[ptMisc]+'/keys.csv') then
       
    47     begin
       
    48     f:= pfsOpenRead(cPathz[ptMisc]+'/keys.csv');
       
    49     l:= '';
       
    50     pfsReadLn(f, l);
       
    51     while (not pfsEOF(f)) and (l <> '') do
       
    52         begin
       
    53         tmp:= '';
       
    54         i:= 1;
       
    55         while (i <= length(l)) and (l[i] <> ',') do
       
    56             begin
       
    57             tmp:= tmp + l[i];
       
    58             inc(i)
       
    59             end;
       
    60         scancode:= StrToInt(tmp);
       
    61 
       
    62         if i < length(l) then
       
    63             begin
       
    64             keyname:= copy(l, i + 1, length(l) - i);
       
    65             if (keyname[1] = '"') and (keyname[length(keyname)] = '"') then
       
    66                 keyname:= copy(keyname, 2, length(keyname) - 2)
       
    67             else
       
    68                 keyname:= copy(keyname, 1, length(keyname) - 1);
       
    69             end;
       
    70 
       
    71         pfsReadLn(f, l);
       
    72         KeyArray[scancode]:= keyname;
       
    73         end;
       
    74 
       
    75     pfsClose(f)
       
    76     end
       
    77 else
       
    78     begin
       
    79     WriteLnToConsole('misc/keys.csv file not found');
       
    80     AddFileLog('misc/keys.csv file not found');
       
    81     halt(haltStartupError);
       
    82     end;
       
    83 
       
    84 // generateKeyNames(); // DEBUG (see below)
   262 end;
    85 end;
   263 
    86 
   264 (*
    87 (*
   265 The Hedgewars key identifiers were obtained with the following algorithm:
    88 The Hedgewars key identifiers were obtained with the following algorithm:
   266 
    89