#region License /* #region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2020 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ #endregion #region Using Statements using System.Collections.Generic; #endregion namespace Microsoft.Xna.Framework { public class LaunchParameters : Dictionary { /* FIXME: This whole parser is one big assumption! * * I basically started with what MS programs usually accept as * arguments, then threw a bunch of values at XNA to see what it * accepted and what it didn't. * * Aside from what you see below, all I could rule out was that * it doesn't let you do two args as one param, and '=' is not a * valid value separator either. As an example, "-r:FNA.dll" * will work, "-r FNA.dll" and "-r=FNA.dll" will not. * * The part that bothers me the most, however, is the flag * indicator. It seems to let anything through as long as : is * there, but it trims some special chars, and does so pretty * broadly. You can do '-', "--", "---", etc! Lastly, in * addition to the chars below, I also tried '+', which didn't * work. I have no idea if there are any other chars to check. * * If anybody has an official standard, I'd like to see it! * -flibit */ #region Private Static Variables private static readonly char[] flags = new char[] { '/', '-' }; #endregion #region Public Constructor public LaunchParameters() { string[] args = System.Environment.GetCommandLineArgs(); foreach (string a in args) { string arg = a.TrimStart(flags); /* 1 for ':', 1 for key, 1 for value */ if (arg.Length < 3) { continue; } /* You can have multiple :, only the first matters */ int valueOffset = arg.IndexOf(":", 1, arg.Length - 2); if (valueOffset >= 0) { /* All instances after the first are ignored */ string key = arg.Substring(0, valueOffset); if (!ContainsKey(key)) { Add( key, arg.Substring(valueOffset + 1) ); } } } } #endregion } }