# HG changeset patch # User Wuzzy # Date 1556365862 -7200 # Node ID 9e8c201eae9d92a1c1beb5f6f9e25da1cd4bc69d # Parent 9f6b650a6812c084a16ff833ab0766c23a1bfeee Move Hedgewars key IDs to CSV file diff -r 9f6b650a6812 -r 9e8c201eae9d hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Sat Apr 27 12:27:08 2019 +0200 +++ b/hedgewars/CMakeLists.txt Sat Apr 27 13:51:02 2019 +0200 @@ -52,6 +52,7 @@ uConsole.pas uCommands.pas uDebug.pas + uKeyNames.pas uInputHandler.pas uTextures.pas uRenderUtils.pas diff -r 9f6b650a6812 -r 9e8c201eae9d hedgewars/uKeyNames.pas --- a/hedgewars/uKeyNames.pas Sat Apr 27 12:27:08 2019 +0200 +++ b/hedgewars/uKeyNames.pas Sat Apr 27 13:51:02 2019 +0200 @@ -27,238 +27,61 @@ implementation +uses uPhysFSLayer, uUtils, uVariables, uTypes, uConsole; + procedure populateKeyNames(var KeyArray: TKeyNames); +var f: PfsFile; + l, keyname, tmp: shortstring; + i, scancode: LongInt; begin (* - This is a mapping from SDL scancodes to Hedgewars key identifiers. + KeyArray is a mapping from SDL scancodes to Hedgewars key identifiers. Hedgewars key identifiers are strings with a maximum length of 15 and are used internally to identify keys in the engine and in settings.ini. *) - KeyArray[4] := 'a'; - KeyArray[5] := 'b'; - KeyArray[6] := 'c'; - KeyArray[7] := 'd'; - KeyArray[8] := 'e'; - KeyArray[9] := 'f'; - KeyArray[10] := 'g'; - KeyArray[11] := 'h'; - KeyArray[12] := 'i'; - KeyArray[13] := 'j'; - KeyArray[14] := 'k'; - KeyArray[15] := 'l'; - KeyArray[16] := 'm'; - KeyArray[17] := 'n'; - KeyArray[18] := 'o'; - KeyArray[19] := 'p'; - KeyArray[20] := 'q'; - KeyArray[21] := 'r'; - KeyArray[22] := 's'; - KeyArray[23] := 't'; - KeyArray[24] := 'u'; - KeyArray[25] := 'v'; - KeyArray[26] := 'w'; - KeyArray[27] := 'x'; - KeyArray[28] := 'y'; - KeyArray[29] := 'z'; - KeyArray[30] := '1'; - KeyArray[31] := '2'; - KeyArray[32] := '3'; - KeyArray[33] := '4'; - KeyArray[34] := '5'; - KeyArray[35] := '6'; - KeyArray[36] := '7'; - KeyArray[37] := '8'; - KeyArray[38] := '9'; - KeyArray[39] := '0'; - KeyArray[40] := 'return'; - KeyArray[41] := 'escape'; - KeyArray[42] := 'backspace'; - KeyArray[43] := 'tab'; - KeyArray[44] := 'space'; - KeyArray[45] := '-'; - KeyArray[46] := '='; - KeyArray[47] := '['; - KeyArray[48] := ']'; - KeyArray[49] := '\'; - KeyArray[50] := '#'; - KeyArray[51] := ';'; - KeyArray[52] := ''''; - KeyArray[53] := '`'; - KeyArray[54] := ','; - KeyArray[55] := '.'; - KeyArray[56] := '/'; - KeyArray[57] := 'capslock'; - KeyArray[58] := 'f1'; - KeyArray[59] := 'f2'; - KeyArray[60] := 'f3'; - KeyArray[61] := 'f4'; - KeyArray[62] := 'f5'; - KeyArray[63] := 'f6'; - KeyArray[64] := 'f7'; - KeyArray[65] := 'f8'; - KeyArray[66] := 'f9'; - KeyArray[67] := 'f10'; - KeyArray[68] := 'f11'; - KeyArray[69] := 'f12'; - KeyArray[70] := 'printscreen'; - KeyArray[71] := 'scrolllock'; - KeyArray[72] := 'pause'; - KeyArray[73] := 'insert'; - KeyArray[74] := 'home'; - KeyArray[75] := 'pageup'; - KeyArray[76] := 'delete'; - KeyArray[77] := 'end'; - KeyArray[78] := 'pagedown'; - KeyArray[79] := 'right'; - KeyArray[80] := 'left'; - KeyArray[81] := 'down'; - KeyArray[82] := 'up'; - KeyArray[83] := 'numlock'; - KeyArray[84] := 'keypad_/'; - KeyArray[85] := 'keypad_*'; - KeyArray[86] := 'keypad_-'; - KeyArray[87] := 'keypad_+'; - KeyArray[88] := 'keypad_enter'; - KeyArray[89] := 'keypad_1'; - KeyArray[90] := 'keypad_2'; - KeyArray[91] := 'keypad_3'; - KeyArray[92] := 'keypad_4'; - KeyArray[93] := 'keypad_5'; - KeyArray[94] := 'keypad_6'; - KeyArray[95] := 'keypad_7'; - KeyArray[96] := 'keypad_8'; - KeyArray[97] := 'keypad_9'; - KeyArray[98] := 'keypad_0'; - KeyArray[99] := 'keypad_.'; - KeyArray[101] := 'menu'; - KeyArray[102] := 'power'; - KeyArray[103] := 'keypad_='; - KeyArray[104] := 'f13'; - KeyArray[105] := 'f14'; - KeyArray[106] := 'f15'; - KeyArray[107] := 'f16'; - KeyArray[108] := 'f17'; - KeyArray[109] := 'f18'; - KeyArray[110] := 'f19'; - KeyArray[111] := 'f20'; - KeyArray[112] := 'f21'; - KeyArray[113] := 'f22'; - KeyArray[114] := 'f23'; - KeyArray[115] := 'f24'; - KeyArray[116] := 'execute'; - KeyArray[117] := 'help'; - KeyArray[118] := 'menu'; - KeyArray[119] := 'select'; - KeyArray[120] := 'stop'; - KeyArray[121] := 'again'; - KeyArray[122] := 'undo'; - KeyArray[123] := 'cut'; - KeyArray[124] := 'copy'; - KeyArray[125] := 'paste'; - KeyArray[126] := 'find'; - KeyArray[127] := 'mute'; - KeyArray[128] := 'volumeup'; - KeyArray[129] := 'volumedown'; - KeyArray[133] := 'keypad_,'; - KeyArray[134] := 'keypad_=_(as400'; - KeyArray[153] := 'alterase'; - KeyArray[154] := 'sysreq'; - KeyArray[155] := 'cancel'; - KeyArray[156] := 'clear'; - KeyArray[157] := 'prior'; - KeyArray[158] := 'return2'; - KeyArray[159] := 'separator'; - KeyArray[160] := 'out'; - KeyArray[161] := 'oper'; - KeyArray[162] := 'clear_/_again'; - KeyArray[163] := 'crsel'; - KeyArray[164] := 'exsel'; - KeyArray[176] := 'keypad_00'; - KeyArray[177] := 'keypad_000'; - KeyArray[178] := 'thousandssepara'; - KeyArray[179] := 'decimalseparato'; - KeyArray[180] := 'currencyunit'; - KeyArray[181] := 'currencysubunit'; - KeyArray[182] := 'keypad_('; - KeyArray[183] := 'keypad_)'; - KeyArray[184] := 'keypad_{'; - KeyArray[185] := 'keypad_}'; - KeyArray[186] := 'keypad_tab'; - KeyArray[187] := 'keypad_backspac'; - KeyArray[188] := 'keypad_a'; - KeyArray[189] := 'keypad_b'; - KeyArray[190] := 'keypad_c'; - KeyArray[191] := 'keypad_d'; - KeyArray[192] := 'keypad_e'; - KeyArray[193] := 'keypad_f'; - KeyArray[194] := 'keypad_xor'; - KeyArray[195] := 'keypad_^'; - KeyArray[196] := 'keypad_%'; - KeyArray[197] := 'keypad_<'; - KeyArray[198] := 'keypad_>'; - KeyArray[199] := 'keypad_&'; - KeyArray[200] := 'keypad_&&'; - KeyArray[201] := 'keypad_|'; - KeyArray[202] := 'keypad_||'; - KeyArray[203] := 'keypad_:'; - KeyArray[204] := 'keypad_#'; - KeyArray[205] := 'keypad_space'; - KeyArray[206] := 'keypad_@'; - KeyArray[207] := 'keypad_!'; - KeyArray[208] := 'keypad_memstore'; - KeyArray[209] := 'keypad_memrecal'; - KeyArray[210] := 'keypad_memclear'; - KeyArray[211] := 'keypad_memadd'; - KeyArray[212] := 'keypad_memsubtr'; - KeyArray[213] := 'keypad_memmulti'; - KeyArray[214] := 'keypad_memdivid'; - KeyArray[215] := 'keypad_+/-'; - KeyArray[216] := 'keypad_clear'; - KeyArray[217] := 'keypad_clearent'; - KeyArray[218] := 'keypad_binary'; - KeyArray[219] := 'keypad_octal'; - KeyArray[220] := 'keypad_decimal'; - KeyArray[221] := 'keypad_hexadeci'; - KeyArray[224] := 'left_ctrl'; - KeyArray[225] := 'left_shift'; - KeyArray[226] := 'left_alt'; - KeyArray[227] := 'left_gui'; - KeyArray[228] := 'right_ctrl'; - KeyArray[229] := 'right_shift'; - KeyArray[230] := 'right_alt'; - KeyArray[231] := 'right_gui'; - KeyArray[257] := 'modeswitch'; - KeyArray[258] := 'audionext'; - KeyArray[259] := 'audioprev'; - KeyArray[260] := 'audiostop'; - KeyArray[261] := 'audioplay'; - KeyArray[262] := 'audiomute'; - KeyArray[263] := 'mediaselect'; - KeyArray[264] := 'www'; - KeyArray[265] := 'mail'; - KeyArray[266] := 'calculator'; - KeyArray[267] := 'computer'; - KeyArray[268] := 'ac_search'; - KeyArray[269] := 'ac_home'; - KeyArray[270] := 'ac_back'; - KeyArray[271] := 'ac_forward'; - KeyArray[272] := 'ac_stop'; - KeyArray[273] := 'ac_refresh'; - KeyArray[274] := 'ac_bookmarks'; - KeyArray[275] := 'brightnessdown'; - KeyArray[276] := 'brightnessup'; - KeyArray[277] := 'displayswitch'; - KeyArray[278] := 'kbdillumtoggle'; - KeyArray[279] := 'kbdillumdown'; - KeyArray[280] := 'kbdillumup'; - KeyArray[281] := 'eject'; - KeyArray[282] := 'sleep'; - KeyArray[283] := 'app1'; - KeyArray[284] := 'app2'; - KeyArray[285] := 'audiorewind'; - KeyArray[286] := 'audiofastforwar'; + +(* Key identifiers are read from an RFC 4180-compliant CSV file. +- 1st column: SDL scancode +- 2nd column: Hedgewars key ID *) +if pfsExists(cPathz[ptMisc]+'/keys.csv') then + begin + f:= pfsOpenRead(cPathz[ptMisc]+'/keys.csv'); + l:= ''; + pfsReadLn(f, l); + while (not pfsEOF(f)) and (l <> '') do + begin + tmp:= ''; + i:= 1; + while (i <= length(l)) and (l[i] <> ',') do + begin + tmp:= tmp + l[i]; + inc(i) + end; + scancode:= StrToInt(tmp); - // generateKeyNames(); // DEBUG (see below) + if i < length(l) then + begin + keyname:= copy(l, i + 1, length(l) - i); + if (keyname[1] = '"') and (keyname[length(keyname)] = '"') then + keyname:= copy(keyname, 2, length(keyname) - 2) + else + keyname:= copy(keyname, 1, length(keyname) - 1); + end; + + pfsReadLn(f, l); + KeyArray[scancode]:= keyname; + end; + + pfsClose(f) + end +else + begin + WriteLnToConsole('misc/keys.csv file not found'); + AddFileLog('misc/keys.csv file not found'); + halt(haltStartupError); + end; + +// generateKeyNames(); // DEBUG (see below) end; (* diff -r 9f6b650a6812 -r 9e8c201eae9d hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Sat Apr 27 12:27:08 2019 +0200 +++ b/hedgewars/uTypes.pas Sat Apr 27 13:51:02 2019 +0200 @@ -45,7 +45,7 @@ TPathType = (ptNone, ptData, ptGraphics, ptThemes, ptCurrTheme, ptConfig, ptTeams, ptMaps, ptMapCurrent, ptDemos, ptSounds, ptGraves, ptFonts, ptForts, ptLocale, ptAmmoMenu, ptHedgehog, ptVoices, ptHats, ptFlags, ptMissionMaps, - ptSuddenDeath, ptButtons, ptShaders, ptDefaultVoice); + ptSuddenDeath, ptButtons, ptShaders, ptDefaultVoice, ptMisc); // Available sprites for displaying stuff TSprite = (sprWater, sprCloud, sprBomb, sprBigDigit, sprBigDigitGray, sprBigDigitGreen, diff -r 9f6b650a6812 -r 9e8c201eae9d hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Sat Apr 27 12:27:08 2019 +0200 +++ b/hedgewars/uVariables.pas Sat Apr 27 13:51:02 2019 +0200 @@ -331,7 +331,8 @@ '/Graphics/SuddenDeath', // ptSuddenDeath '/Graphics/Buttons', // ptButton '/Shaders', // ptShaders - '/Sounds/voices/Default' // ptDefaultVoice + '/Sounds/voices/Default', // ptDefaultVoice + '/misc' // ptMisc ); var diff -r 9f6b650a6812 -r 9e8c201eae9d share/hedgewars/Data/misc/CMakeLists.txt --- a/share/hedgewars/Data/misc/CMakeLists.txt Sat Apr 27 12:27:08 2019 +0200 +++ b/share/hedgewars/Data/misc/CMakeLists.txt Sat Apr 27 13:51:02 2019 +0200 @@ -2,7 +2,7 @@ if(UNIX AND NOT APPLE) configure_file(hwengine.desktop.in hwengine.desktop) - file(GLOB miscfiles *.svg *.xml *.desktop) + file(GLOB miscfiles *.svg *.xml *.desktop *.csv) install(FILES ${miscfiles} DESTINATION ${SHAREPATH}/Data/misc) install(FILES hedgewars.xpm DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps) diff -r 9f6b650a6812 -r 9e8c201eae9d share/hedgewars/Data/misc/keys.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/misc/keys.csv Sat Apr 27 13:51:02 2019 +0200 @@ -0,0 +1,223 @@ +4,"a" +5,"b" +6,"c" +7,"d" +8,"e" +9,"f" +10,"g" +11,"h" +12,"i" +13,"j" +14,"k" +15,"l" +16,"m" +17,"n" +18,"o" +19,"p" +20,"q" +21,"r" +22,"s" +23,"t" +24,"u" +25,"v" +26,"w" +27,"x" +28,"y" +29,"z" +30,"1" +31,"2" +32,"3" +33,"4" +34,"5" +35,"6" +36,"7" +37,"8" +38,"9" +39,"0" +40,"return" +41,"escape" +42,"backspace" +43,"tab" +44,"space" +45,"-" +46,"=" +47,"[" +48,"]" +49,"\" +50,"#" +51,";" +52,"'" +53,"`" +54,"," +55,"." +56,"/" +57,"capslock" +58,"f1" +59,"f2" +60,"f3" +61,"f4" +62,"f5" +63,"f6" +64,"f7" +65,"f8" +66,"f9" +67,"f10" +68,"f11" +69,"f12" +70,"printscreen" +71,"scrolllock" +72,"pause" +73,"insert" +74,"home" +75,"pageup" +76,"delete" +77,"end" +78,"pagedown" +79,"right" +80,"left" +81,"down" +82,"up" +83,"numlock" +84,"keypad_/" +85,"keypad_*" +86,"keypad_-" +87,"keypad_+" +88,"keypad_enter" +89,"keypad_1" +90,"keypad_2" +91,"keypad_3" +92,"keypad_4" +93,"keypad_5" +94,"keypad_6" +95,"keypad_7" +96,"keypad_8" +97,"keypad_9" +98,"keypad_0" +99,"keypad_." +101,"menu" +102,"power" +103,"keypad_=" +104,"f13" +105,"f14" +106,"f15" +107,"f16" +108,"f17" +109,"f18" +110,"f19" +111,"f20" +112,"f21" +113,"f22" +114,"f23" +115,"f24" +116,"execute" +117,"help" +118,"menu" +119,"select" +120,"stop" +121,"again" +122,"undo" +123,"cut" +124,"copy" +125,"paste" +126,"find" +127,"mute" +128,"volumeup" +129,"volumedown" +133,"keypad_," +134,"keypad_=_(as400" +153,"alterase" +154,"sysreq" +155,"cancel" +156,"clear" +157,"prior" +158,"return2" +159,"separator" +160,"out" +161,"oper" +162,"clear_/_again" +163,"crsel" +164,"exsel" +176,"keypad_00" +177,"keypad_000" +178,"thousandssepara" +179,"decimalseparato" +180,"currencyunit" +181,"currencysubunit" +182,"keypad_(" +183,"keypad_)" +184,"keypad_{" +185,"keypad_}" +186,"keypad_tab" +187,"keypad_backspac" +188,"keypad_a" +189,"keypad_b" +190,"keypad_c" +191,"keypad_d" +192,"keypad_e" +193,"keypad_f" +194,"keypad_xor" +195,"keypad_^" +196,"keypad_%" +197,"keypad_<" +198,"keypad_>" +199,"keypad_&" +200,"keypad_&&" +201,"keypad_|" +202,"keypad_||" +203,"keypad_:" +204,"keypad_#" +205,"keypad_space" +206,"keypad_@" +207,"keypad_!" +208,"keypad_memstore" +209,"keypad_memrecal" +210,"keypad_memclear" +211,"keypad_memadd" +212,"keypad_memsubtr" +213,"keypad_memmulti" +214,"keypad_memdivid" +215,"keypad_+/-" +216,"keypad_clear" +217,"keypad_clearent" +218,"keypad_binary" +219,"keypad_octal" +220,"keypad_decimal" +221,"keypad_hexadeci" +224,"left_ctrl" +225,"left_shift" +226,"left_alt" +227,"left_gui" +228,"right_ctrl" +229,"right_shift" +230,"right_alt" +231,"right_gui" +257,"modeswitch" +258,"audionext" +259,"audioprev" +260,"audiostop" +261,"audioplay" +262,"audiomute" +263,"mediaselect" +264,"www" +265,"mail" +266,"calculator" +267,"computer" +268,"ac_search" +269,"ac_home" +270,"ac_back" +271,"ac_forward" +272,"ac_stop" +273,"ac_refresh" +274,"ac_bookmarks" +275,"brightnessdown" +276,"brightnessup" +277,"displayswitch" +278,"kbdillumtoggle" +279,"kbdillumdown" +280,"kbdillumup" +281,"eject" +282,"sleep" +283,"app1" +284,"app2" +285,"audiorewind" +286,"audiofastforwar" \ No newline at end of file