From a4a3b58f7ebffdefa82cc6bfa5f4319e069499bd Mon Sep 17 00:00:00 2001 From: Cyd Date: Sat, 27 Jun 2026 22:55:36 -0500 Subject: [PATCH] INI import: strip greeting quotes; add gsheet reference Strip a surrounding pair of double quotes from the [Plasma] Greeting on import (the gsheet "INI_V2" output writes Greeting="..."), and add the master button-layout spreadsheet that documents the RIO.ini format and the 16-bit map-word encoding. Test covers the real sheet output (modifier-stacked words, keypad VK words, RIO command words) round-tripping verbatim. Co-Authored-By: Claude Opus 4.8 --- .../master Button layout for RIOvJoy2.xlsx | Bin 0 -> 59518 bytes src/RioJoy.Core/Profiles/RioIniImporter.cs | 12 ++++++- .../Profiles/RioIniImporterTests.cs | 33 ++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 docs/reference/master Button layout for RIOvJoy2.xlsx diff --git a/docs/reference/master Button layout for RIOvJoy2.xlsx b/docs/reference/master Button layout for RIOvJoy2.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..caaf012efb4d1e87ca8293d6560e019f9a1fcdc8 GIT binary patch literal 59518 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 literal 0 HcmV?d00001 diff --git a/src/RioJoy.Core/Profiles/RioIniImporter.cs b/src/RioJoy.Core/Profiles/RioIniImporter.cs index c11a5ae..b6b88aa 100644 --- a/src/RioJoy.Core/Profiles/RioIniImporter.cs +++ b/src/RioJoy.Core/Profiles/RioIniImporter.cs @@ -21,7 +21,7 @@ public static class RioIniImporter var profile = new RioProfile { Name = name, - PlasmaGreeting = ini.GetString("Plasma", "Greeting"), + PlasmaGreeting = StripQuotes(ini.GetString("Plasma", "Greeting")), WallpaperPath = ini.GetString("Desktop", "File"), Calibration = new AxisCalibrationConfig { @@ -48,6 +48,16 @@ public static class RioIniImporter return profile; } + // The gsheet writes the greeting as a quoted string (e.g. Greeting="Hello,"); + // strip a single pair of surrounding double quotes so it displays cleanly. + private static string? StripQuotes(string? value) + { + if (value is null) + return null; + string v = value.Trim(); + return v.Length >= 2 && v[0] == '"' && v[^1] == '"' ? v[1..^1] : v; + } + // Keys look like "RIO00".."RIO6F": "RIO" + a hex address into the iRIO table. private static bool TryParseButtonAddress(string key, out int address) { diff --git a/tests/RioJoy.Core.Tests/Profiles/RioIniImporterTests.cs b/tests/RioJoy.Core.Tests/Profiles/RioIniImporterTests.cs index 22c6255..221d84f 100644 --- a/tests/RioJoy.Core.Tests/Profiles/RioIniImporterTests.cs +++ b/tests/RioJoy.Core.Tests/Profiles/RioIniImporterTests.cs @@ -55,4 +55,37 @@ public class RioIniImporterTests RioProfile p = RioIniImporter.Import("[JoyStick]\ninvertX = true"); Assert.True(p.Calibration.EnableZR); } + + // The real gsheet "INI_V2" output: modifier-stacked words (0x8F26 = + // lit+shift+ctrl+alt+ext + VK 0x26), keypad VK words (0x30), and RIO + // command words (0x7000) must all survive import verbatim. + private const string SheetSample = """ + ;RIO INI V2 built useing gsheet configurator's final value + [Desktop] + File=C:\games\RIO\defalt.bmp + [Plasma] + Greeting="Hello," + [JoyStick] + invertX=0 + enableZR=1 + + [Buttons] + RIO04=0x8F26 + RIO50=0x30 + RIO60=0x7000 + RIO6F=0x700F + """; + + [Fact] + public void Imports_RealSheetOutput_PreservesRawWords() + { + RioProfile p = RioIniImporter.Import(SheetSample, "Sheet"); + + Assert.Equal(0x8F26, p.Buttons[0x04]); // lit + all modifiers + extended + Assert.Equal(0x30, p.Buttons[0x50]); // keypad '0' + Assert.Equal(0x7000, p.Buttons[0x60]); // RIO command word + Assert.Equal(0x700F, p.Buttons[0x6F]); // last address in the table + Assert.Equal(@"C:\games\RIO\defalt.bmp", p.WallpaperPath); + Assert.Equal("Hello,", p.PlasmaGreeting); // surrounding quotes stripped + } }