Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/LaunchParameters.cs
85 lines | 2.1 KiB | text/x-csharp | CSharpLexer
85 lines | 2.1 KiB | text/x-csharp | CSharpLexer
r0 | #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<string, string> | ||||
{ | ||||
/* 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 | ||||
} | ||||
} | ||||